@fintekkers/ledger-models 0.1.119 → 0.1.128
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.npmrc.example +4 -0
- package/catalog/fields.json +275 -0
- package/catalog/measures.json +259 -0
- package/node/fintekkers/models/portfolio/portfolio_pb.js +13 -19
- package/node/fintekkers/models/position/field_pb.js +1 -7
- package/node/fintekkers/models/position/measure_pb.d.ts +18 -0
- package/node/fintekkers/models/position/measure_pb.js +20 -8
- package/node/fintekkers/models/position/position_filter_pb.js +7 -13
- package/node/fintekkers/models/position/position_pb.d.ts +7 -0
- package/node/fintekkers/models/position/position_pb.js +64 -17
- package/node/fintekkers/models/position/position_status_pb.js +1 -7
- package/node/fintekkers/models/position/position_util_pb.js +11 -17
- package/node/fintekkers/models/price/price_pb.d.ts +4 -0
- package/node/fintekkers/models/price/price_pb.js +45 -19
- package/node/fintekkers/models/price/price_type_grpc_pb.js +1 -0
- package/node/fintekkers/models/price/price_type_pb.d.ts +15 -0
- package/node/fintekkers/models/price/price_type_pb.js +30 -0
- package/node/fintekkers/models/security/bond/auction_type_pb.js +1 -7
- package/node/fintekkers/models/security/bond/issuance_pb.js +17 -23
- package/node/fintekkers/models/security/coupon_frequency_pb.js +1 -7
- package/node/fintekkers/models/security/coupon_type_pb.js +1 -7
- package/node/fintekkers/models/security/identifier/identifier_pb.js +9 -15
- package/node/fintekkers/models/security/identifier/identifier_type_pb.d.ts +1 -0
- package/node/fintekkers/models/security/identifier/identifier_type_pb.js +2 -7
- package/node/fintekkers/models/security/index/index_type_grpc_pb.js +1 -0
- package/node/fintekkers/models/security/index/index_type_pb.d.ts +22 -0
- package/node/fintekkers/models/security/index/index_type_pb.js +37 -0
- package/node/fintekkers/models/security/index_composition_pb.d.ts +126 -0
- package/node/fintekkers/models/security/index_composition_pb.js +992 -0
- package/node/fintekkers/models/security/security_pb.d.ts +382 -0
- package/node/fintekkers/models/security/security_pb.js +3183 -57
- package/node/fintekkers/models/security/security_quantity_type_pb.js +1 -7
- package/node/fintekkers/models/security/security_type_pb.d.ts +3 -0
- package/node/fintekkers/models/security/security_type_pb.js +5 -8
- package/node/fintekkers/models/security/tenor_pb.js +9 -15
- package/node/fintekkers/models/security/tenor_type_pb.js +1 -7
- package/node/fintekkers/models/strategy/strategy_allocation_pb.js +13 -19
- package/node/fintekkers/models/strategy/strategy_pb.js +14 -20
- package/node/fintekkers/models/transaction/transaction_pb.js +24 -30
- package/node/fintekkers/models/transaction/transaction_type_pb.js +1 -7
- package/node/fintekkers/models/util/api/api_key_pb.js +10 -16
- package/node/fintekkers/models/util/currency_pb.d.ts +27 -0
- package/node/fintekkers/models/util/currency_pb.js +170 -0
- package/node/fintekkers/models/util/date_range_pb.js +8 -14
- package/node/fintekkers/models/util/decimal_value_pb.js +4 -10
- package/node/fintekkers/models/util/endpoint_pb.js +7 -13
- package/node/fintekkers/models/util/local_date_pb.js +5 -11
- package/node/fintekkers/models/util/local_timestamp_pb.js +5 -11
- package/node/fintekkers/models/util/lock/node_partition_pb.js +9 -15
- package/node/fintekkers/models/util/lock/node_state_pb.js +10 -16
- package/node/fintekkers/models/util/uuid_pb.js +3 -9
- package/node/fintekkers/models/valuation/cashflow_pb.d.ts +57 -0
- package/node/fintekkers/models/valuation/cashflow_pb.js +401 -0
- package/node/fintekkers/requests/index_composition/create_index_composition_request_pb.d.ts +79 -0
- package/node/fintekkers/requests/index_composition/create_index_composition_request_pb.js +599 -0
- package/node/fintekkers/requests/index_composition/get_index_composition_request_pb.d.ts +84 -0
- package/node/fintekkers/requests/index_composition/get_index_composition_request_pb.js +624 -0
- package/node/fintekkers/requests/portfolio/create_portfolio_request_pb.js +7 -13
- package/node/fintekkers/requests/portfolio/create_portfolio_response_pb.js +8 -14
- package/node/fintekkers/requests/portfolio/query_portfolio_request_pb.d.ts +3 -0
- package/node/fintekkers/requests/portfolio/query_portfolio_request_pb.js +39 -15
- package/node/fintekkers/requests/portfolio/query_portfolio_response_pb.js +8 -14
- package/node/fintekkers/requests/position/query_position_request_pb.js +15 -27
- package/node/fintekkers/requests/position/query_position_response_pb.js +10 -16
- package/node/fintekkers/requests/price/create_price_request_pb.js +7 -13
- package/node/fintekkers/requests/price/create_price_response_pb.js +8 -14
- package/node/fintekkers/requests/price/query_price_request_pb.js +12 -18
- package/node/fintekkers/requests/price/query_price_response_pb.js +8 -14
- package/node/fintekkers/requests/security/create_security_request_pb.js +7 -13
- package/node/fintekkers/requests/security/create_security_response_pb.js +9 -15
- package/node/fintekkers/requests/security/get_field_values_request_pb.js +7 -13
- package/node/fintekkers/requests/security/get_field_values_response_pb.js +7 -13
- package/node/fintekkers/requests/security/get_fields_response_pb.js +8 -17
- package/node/fintekkers/requests/security/query_security_request_pb.d.ts +3 -0
- package/node/fintekkers/requests/security/query_security_request_pb.js +39 -15
- package/node/fintekkers/requests/security/query_security_response_pb.js +9 -15
- package/node/fintekkers/requests/transaction/create_transaction_request_pb.js +7 -13
- package/node/fintekkers/requests/transaction/create_transaction_response_pb.js +8 -14
- package/node/fintekkers/requests/transaction/query_transaction_request_pb.js +10 -16
- package/node/fintekkers/requests/transaction/query_transaction_response_pb.js +9 -15
- package/node/fintekkers/requests/util/delete_request_pb.d.ts +135 -0
- package/node/fintekkers/requests/util/delete_request_pb.js +1051 -0
- package/node/fintekkers/requests/util/errors/error_pb.js +7 -13
- package/node/fintekkers/requests/util/errors/message_pb.js +6 -12
- package/node/fintekkers/requests/util/errors/summary_pb.js +4 -10
- package/node/fintekkers/requests/util/lock/lock_request_pb.js +8 -14
- package/node/fintekkers/requests/util/lock/lock_response_pb.js +9 -15
- package/node/fintekkers/requests/util/operation_pb.js +1 -7
- package/node/fintekkers/requests/valuation/curve_request_pb.d.ts +85 -0
- package/node/fintekkers/requests/valuation/curve_request_pb.js +646 -0
- package/node/fintekkers/requests/valuation/curve_response_pb.d.ts +105 -0
- package/node/fintekkers/requests/valuation/curve_response_pb.js +806 -0
- package/node/fintekkers/requests/valuation/product_inputs.test.ts +172 -0
- package/node/fintekkers/requests/valuation/product_inputs_pb.d.ts +137 -0
- package/node/fintekkers/requests/valuation/product_inputs_pb.js +987 -0
- package/node/fintekkers/requests/valuation/valuation_request_pb.d.ts +19 -0
- package/node/fintekkers/requests/valuation/valuation_request_pb.js +168 -22
- package/node/fintekkers/requests/valuation/valuation_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/valuation/valuation_response_pb.js +118 -16
- package/node/fintekkers/services/index-composition-service/index_composition_service_grpc_pb.d.ts +60 -0
- package/node/fintekkers/services/index-composition-service/index_composition_service_grpc_pb.js +87 -0
- package/node/fintekkers/services/index-composition-service/index_composition_service_pb.d.ts +9 -0
- package/node/fintekkers/services/index-composition-service/index_composition_service_pb.js +21 -0
- package/node/fintekkers/services/lock-service/lock_service_grpc_pb.js +22 -22
- package/node/fintekkers/services/lock-service/lock_service_pb.js +15 -21
- package/node/fintekkers/services/portfolio-service/portfolio_service_grpc_pb.d.ts +18 -0
- package/node/fintekkers/services/portfolio-service/portfolio_service_grpc_pb.js +39 -5
- package/node/fintekkers/services/portfolio-service/portfolio_service_pb.d.ts +1 -0
- package/node/fintekkers/services/portfolio-service/portfolio_service_pb.js +3 -7
- package/node/fintekkers/services/position-service/position_service_grpc_pb.d.ts +37 -0
- package/node/fintekkers/services/position-service/position_service_grpc_pb.js +64 -6
- package/node/fintekkers/services/position-service/position_service_pb.d.ts +3 -0
- package/node/fintekkers/services/position-service/position_service_pb.js +7 -7
- package/node/fintekkers/services/price-service/price_service_grpc_pb.js +5 -5
- package/node/fintekkers/services/price-service/price_service_pb.js +1 -7
- package/node/fintekkers/services/security-service/security_service_grpc_pb.d.ts +18 -0
- package/node/fintekkers/services/security-service/security_service_grpc_pb.js +43 -9
- package/node/fintekkers/services/security-service/security_service_pb.d.ts +1 -0
- package/node/fintekkers/services/security-service/security_service_pb.js +3 -7
- package/node/fintekkers/services/transaction-service/transaction_service_grpc_pb.d.ts +55 -0
- package/node/fintekkers/services/transaction-service/transaction_service_grpc_pb.js +97 -5
- package/node/fintekkers/services/transaction-service/transaction_service_pb.d.ts +4 -0
- package/node/fintekkers/services/transaction-service/transaction_service_pb.js +9 -7
- package/node/fintekkers/services/valuation-service/valuation_service_grpc_pb.d.ts +19 -0
- package/node/fintekkers/services/valuation-service/valuation_service_grpc_pb.js +37 -2
- package/node/fintekkers/services/valuation-service/valuation_service_pb.d.ts +2 -0
- package/node/fintekkers/services/valuation-service/valuation_service_pb.js +5 -7
- package/node/wrappers/models/portfolio/portfolio.js.map +1 -1
- package/node/wrappers/models/portfolio/portfolio.test.d.ts +2 -0
- package/node/wrappers/models/portfolio/portfolio.test.js +29 -0
- package/node/wrappers/models/portfolio/portfolio.test.js.map +1 -0
- package/node/wrappers/models/portfolio/portfolio.test.ts +28 -0
- package/node/wrappers/models/position/position.js +25 -13
- package/node/wrappers/models/position/position.js.map +1 -1
- package/node/wrappers/models/position/position.test.js +20 -0
- package/node/wrappers/models/position/position.test.js.map +1 -1
- package/node/wrappers/models/position/position.test.ts +23 -0
- package/node/wrappers/models/position/position.ts +27 -13
- package/node/wrappers/models/position/positionfilter.js +1 -1
- package/node/wrappers/models/position/positionfilter.js.map +1 -1
- package/node/wrappers/models/position/positionfilter.test.js.map +1 -1
- package/node/wrappers/models/price/Price.cash.test.d.ts +1 -0
- package/node/wrappers/models/price/Price.cash.test.js +42 -0
- package/node/wrappers/models/price/Price.cash.test.js.map +1 -0
- package/node/wrappers/models/price/Price.cash.test.ts +43 -0
- package/node/wrappers/models/price/Price.d.ts +38 -0
- package/node/wrappers/models/price/Price.js +111 -0
- package/node/wrappers/models/price/Price.js.map +1 -0
- package/node/wrappers/models/price/Price.test.d.ts +1 -0
- package/node/wrappers/models/price/Price.test.js +55 -0
- package/node/wrappers/models/price/Price.test.js.map +1 -0
- package/node/wrappers/models/price/Price.test.ts +63 -0
- package/node/wrappers/models/price/Price.ts +123 -0
- package/node/wrappers/models/security/BondSecurity.d.ts +17 -2
- package/node/wrappers/models/security/BondSecurity.js +59 -11
- package/node/wrappers/models/security/BondSecurity.js.map +1 -1
- package/node/wrappers/models/security/BondSecurity.priceScale.test.d.ts +1 -0
- package/node/wrappers/models/security/BondSecurity.priceScale.test.js +36 -0
- package/node/wrappers/models/security/BondSecurity.priceScale.test.js.map +1 -0
- package/node/wrappers/models/security/BondSecurity.priceScale.test.ts +36 -0
- package/node/wrappers/models/security/BondSecurity.test.js +34 -1
- package/node/wrappers/models/security/BondSecurity.test.js.map +1 -1
- package/node/wrappers/models/security/BondSecurity.test.ts +42 -1
- package/node/wrappers/models/security/BondSecurity.ts +63 -11
- package/node/wrappers/models/security/security-roundtrip.test.d.ts +1 -0
- package/node/wrappers/models/security/security-roundtrip.test.js +173 -0
- package/node/wrappers/models/security/security-roundtrip.test.js.map +1 -0
- package/node/wrappers/models/security/security-roundtrip.test.ts +192 -0
- package/node/wrappers/models/security/security.d.ts +8 -0
- package/node/wrappers/models/security/security.js +24 -2
- package/node/wrappers/models/security/security.js.map +1 -1
- package/node/wrappers/models/security/security.ts +26 -2
- package/node/wrappers/models/security/term.js +31 -6
- package/node/wrappers/models/security/term.js.map +1 -1
- package/node/wrappers/models/security/term.test.js +21 -2
- package/node/wrappers/models/security/term.test.js.map +1 -1
- package/node/wrappers/models/security/term.test.ts +28 -2
- package/node/wrappers/models/security/term.ts +34 -6
- package/node/wrappers/models/transaction/transaction.d.ts +59 -1
- package/node/wrappers/models/transaction/transaction.derived.test.d.ts +1 -0
- package/node/wrappers/models/transaction/transaction.derived.test.js +199 -0
- package/node/wrappers/models/transaction/transaction.derived.test.js.map +1 -0
- package/node/wrappers/models/transaction/transaction.derived.test.ts +251 -0
- package/node/wrappers/models/transaction/transaction.js +350 -2
- package/node/wrappers/models/transaction/transaction.js.map +1 -1
- package/node/wrappers/models/transaction/transaction.ts +416 -2
- package/node/wrappers/models/transaction/transaction_constructor.test.d.ts +1 -0
- package/node/wrappers/models/transaction/transaction_constructor.test.js +100 -0
- package/node/wrappers/models/transaction/transaction_constructor.test.js.map +1 -0
- package/node/wrappers/models/transaction/transaction_constructor.test.ts +111 -0
- package/node/wrappers/models/transaction/transaction_type.js.map +1 -1
- package/node/wrappers/models/utils/datetime.d.ts +6 -0
- package/node/wrappers/models/utils/datetime.js +14 -6
- package/node/wrappers/models/utils/datetime.js.map +1 -1
- package/node/wrappers/models/utils/datetime.ts +15 -6
- package/node/wrappers/models/utils/protoEnum.js.map +1 -1
- package/node/wrappers/models/utils/requestcontext.d.ts +17 -3
- package/node/wrappers/models/utils/requestcontext.js +39 -7
- package/node/wrappers/models/utils/requestcontext.js.map +1 -1
- package/node/wrappers/models/utils/requestcontext.test.d.ts +1 -0
- package/node/wrappers/models/utils/requestcontext.test.js +108 -0
- package/node/wrappers/models/utils/requestcontext.test.js.map +1 -0
- package/node/wrappers/models/utils/requestcontext.test.ts +85 -0
- package/node/wrappers/models/utils/requestcontext.ts +49 -9
- package/node/wrappers/models/utils/serialization.d.ts +2 -1
- package/node/wrappers/models/utils/serialization.js +4 -0
- package/node/wrappers/models/utils/serialization.js.map +1 -1
- package/node/wrappers/models/utils/serialization.test.js +15 -0
- package/node/wrappers/models/utils/serialization.test.js.map +1 -1
- package/node/wrappers/models/utils/serialization.test.ts +19 -1
- package/node/wrappers/models/utils/serialization.ts +5 -4
- package/node/wrappers/models/utils/serialization.util.js.map +1 -1
- package/node/wrappers/models/utils/uuid.js +9 -1
- package/node/wrappers/models/utils/uuid.js.map +1 -1
- package/node/wrappers/models/utils/uuid.test.js +22 -4
- package/node/wrappers/models/utils/uuid.test.js.map +1 -1
- package/node/wrappers/models/utils/uuid.test.ts +26 -5
- package/node/wrappers/models/utils/uuid.ts +7 -1
- package/node/wrappers/services/apikey.test.d.ts +7 -0
- package/node/wrappers/services/apikey.test.js +56 -0
- package/node/wrappers/services/apikey.test.js.map +1 -0
- package/node/wrappers/services/apikey.test.ts +65 -0
- package/node/wrappers/services/portfolio-service/PortfolioService.d.ts +1 -1
- package/node/wrappers/services/portfolio-service/PortfolioService.js +8 -2
- package/node/wrappers/services/portfolio-service/PortfolioService.js.map +1 -1
- package/node/wrappers/services/portfolio-service/PortfolioService.ts +7 -2
- package/node/wrappers/services/position-service/PositionService.d.ts +1 -1
- package/node/wrappers/services/position-service/PositionService.js +8 -2
- package/node/wrappers/services/position-service/PositionService.js.map +1 -1
- package/node/wrappers/services/position-service/PositionService.ts +7 -2
- package/node/wrappers/services/position-service/position.test.js.map +1 -1
- package/node/wrappers/services/price-service/PriceService.d.ts +29 -0
- package/node/wrappers/services/price-service/PriceService.js +151 -0
- package/node/wrappers/services/price-service/PriceService.js.map +1 -0
- package/node/wrappers/services/price-service/PriceService.ts +127 -0
- package/node/wrappers/services/price-service/price-wrapper.test.d.ts +1 -0
- package/node/wrappers/services/price-service/price-wrapper.test.js +132 -0
- package/node/wrappers/services/price-service/price-wrapper.test.js.map +1 -0
- package/node/wrappers/services/price-service/price-wrapper.test.ts +120 -0
- package/node/wrappers/services/price-service/price.test.d.ts +1 -0
- package/node/wrappers/services/price-service/price.test.js +198 -0
- package/node/wrappers/services/price-service/price.test.js.map +1 -0
- package/node/wrappers/services/price-service/price.test.ts +205 -0
- package/node/wrappers/services/security-service/SecurityService.d.ts +1 -1
- package/node/wrappers/services/security-service/SecurityService.js +8 -2
- package/node/wrappers/services/security-service/SecurityService.js.map +1 -1
- package/node/wrappers/services/security-service/SecurityService.searchByUuid.test.d.ts +1 -0
- package/node/wrappers/services/security-service/SecurityService.searchByUuid.test.js +38 -0
- package/node/wrappers/services/security-service/SecurityService.searchByUuid.test.js.map +1 -0
- package/node/wrappers/services/security-service/SecurityService.searchByUuid.test.ts +32 -0
- package/node/wrappers/services/security-service/SecurityService.ts +7 -2
- package/node/wrappers/services/security-service/security.maturityLadder.test.js.map +1 -1
- package/node/wrappers/services/transaction-service/TransactionService.d.ts +1 -1
- package/node/wrappers/services/transaction-service/TransactionService.js +8 -2
- package/node/wrappers/services/transaction-service/TransactionService.js.map +1 -1
- package/node/wrappers/services/transaction-service/TransactionService.ts +7 -2
- package/node/wrappers/services/transaction-service/transaction.search.test.js.map +1 -1
- package/node/wrappers/services/transaction-service/transaction.test.js.map +1 -1
- package/package.json +3 -2
- package/.env +0 -3
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ISSUE #7: SecurityProto round-trip serialization tests for all 6 security types.
|
|
3
|
+
*
|
|
4
|
+
* For each type: construct → serialize to bytes → deserialize → verify all fields match.
|
|
5
|
+
*/
|
|
6
|
+
import { SecurityProto } from '../../../fintekkers/models/security/security_pb';
|
|
7
|
+
import { SecurityTypeProto } from '../../../fintekkers/models/security/security_type_pb';
|
|
8
|
+
import { CouponFrequencyProto } from '../../../fintekkers/models/security/coupon_frequency_pb';
|
|
9
|
+
import { CouponTypeProto } from '../../../fintekkers/models/security/coupon_type_pb';
|
|
10
|
+
import { SecurityQuantityTypeProto } from '../../../fintekkers/models/security/security_quantity_type_pb';
|
|
11
|
+
import { IdentifierProto } from '../../../fintekkers/models/security/identifier/identifier_pb';
|
|
12
|
+
import { IdentifierTypeProto } from '../../../fintekkers/models/security/identifier/identifier_type_pb';
|
|
13
|
+
import { IndexTypeProto } from '../../../fintekkers/models/security/index/index_type_pb';
|
|
14
|
+
import { DecimalValueProto } from '../../../fintekkers/models/util/decimal_value_pb';
|
|
15
|
+
import { LocalDateProto } from '../../../fintekkers/models/util/local_date_pb';
|
|
16
|
+
|
|
17
|
+
function makeDecimal(value: string): DecimalValueProto {
|
|
18
|
+
return new DecimalValueProto().setArbitraryPrecisionValue(value);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function makeDate(year: number, month: number, day: number): LocalDateProto {
|
|
22
|
+
return new LocalDateProto().setYear(year).setMonth(month).setDay(day);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function makeIdentifier(type: number, value: string): IdentifierProto {
|
|
26
|
+
return new IdentifierProto().setIdentifierType(type).setIdentifierValue(value);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
describe('SecurityProto Round-Trip Serialization — All 6 Security Types', () => {
|
|
30
|
+
|
|
31
|
+
test('BOND_SECURITY: all bond fields survive round-trip', () => {
|
|
32
|
+
const original = new SecurityProto();
|
|
33
|
+
original.setObjectClass('Security');
|
|
34
|
+
original.setVersion('0.0.1');
|
|
35
|
+
original.setSecurityType(SecurityTypeProto.BOND_SECURITY);
|
|
36
|
+
original.setAssetClass('Fixed Income');
|
|
37
|
+
original.setIssuerName('US Treasury');
|
|
38
|
+
original.setQuantityType(SecurityQuantityTypeProto.ORIGINAL_FACE_VALUE);
|
|
39
|
+
original.setIdentifier(makeIdentifier(IdentifierTypeProto.CUSIP, '912828ZT0'));
|
|
40
|
+
original.setDescription('UST 5% 2030');
|
|
41
|
+
original.setCouponRate(makeDecimal('5.0'));
|
|
42
|
+
original.setCouponType(CouponTypeProto.FIXED);
|
|
43
|
+
original.setCouponFrequency(CouponFrequencyProto.SEMIANNUALLY);
|
|
44
|
+
original.setFaceValue(makeDecimal('1000'));
|
|
45
|
+
original.setIssueDate(makeDate(2020, 1, 15));
|
|
46
|
+
original.setDatedDate(makeDate(2020, 1, 15));
|
|
47
|
+
original.setMaturityDate(makeDate(2030, 1, 15));
|
|
48
|
+
|
|
49
|
+
const bytes = original.serializeBinary();
|
|
50
|
+
const parsed = SecurityProto.deserializeBinary(bytes);
|
|
51
|
+
|
|
52
|
+
expect(parsed.getSecurityType()).toBe(SecurityTypeProto.BOND_SECURITY);
|
|
53
|
+
expect(parsed.getAssetClass()).toBe('Fixed Income');
|
|
54
|
+
expect(parsed.getIssuerName()).toBe('US Treasury');
|
|
55
|
+
expect(parsed.getDescription()).toBe('UST 5% 2030');
|
|
56
|
+
expect(parsed.getQuantityType()).toBe(SecurityQuantityTypeProto.ORIGINAL_FACE_VALUE);
|
|
57
|
+
expect(parsed.getCouponRate()!.getArbitraryPrecisionValue()).toBe('5.0');
|
|
58
|
+
expect(parsed.getCouponType()).toBe(CouponTypeProto.FIXED);
|
|
59
|
+
expect(parsed.getCouponFrequency()).toBe(CouponFrequencyProto.SEMIANNUALLY);
|
|
60
|
+
expect(parsed.getFaceValue()!.getArbitraryPrecisionValue()).toBe('1000');
|
|
61
|
+
expect(parsed.getIssueDate()!.getYear()).toBe(2020);
|
|
62
|
+
expect(parsed.getDatedDate()!.getMonth()).toBe(1);
|
|
63
|
+
expect(parsed.getMaturityDate()!.getYear()).toBe(2030);
|
|
64
|
+
expect(parsed.getMaturityDate()!.getMonth()).toBe(1);
|
|
65
|
+
expect(parsed.getMaturityDate()!.getDay()).toBe(15);
|
|
66
|
+
expect(parsed.getIdentifier()!.getIdentifierValue()).toBe('912828ZT0');
|
|
67
|
+
expect(parsed.getIdentifier()!.getIdentifierType()).toBe(IdentifierTypeProto.CUSIP);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test('TIPS: bond fields + base_cpi + inflation_index_type survive round-trip', () => {
|
|
71
|
+
const original = new SecurityProto();
|
|
72
|
+
original.setObjectClass('Security');
|
|
73
|
+
original.setVersion('0.0.1');
|
|
74
|
+
original.setSecurityType(SecurityTypeProto.TIPS);
|
|
75
|
+
original.setAssetClass('Fixed Income');
|
|
76
|
+
original.setIssuerName('US Treasury');
|
|
77
|
+
original.setCouponRate(makeDecimal('0.625'));
|
|
78
|
+
original.setCouponType(CouponTypeProto.FIXED);
|
|
79
|
+
original.setCouponFrequency(CouponFrequencyProto.SEMIANNUALLY);
|
|
80
|
+
original.setFaceValue(makeDecimal('1000'));
|
|
81
|
+
original.setMaturityDate(makeDate(2030, 1, 15));
|
|
82
|
+
original.setBaseCpi(makeDecimal('256.394'));
|
|
83
|
+
original.setInflationIndexType(IndexTypeProto.CPI_U);
|
|
84
|
+
|
|
85
|
+
const bytes = original.serializeBinary();
|
|
86
|
+
const parsed = SecurityProto.deserializeBinary(bytes);
|
|
87
|
+
|
|
88
|
+
expect(parsed.getSecurityType()).toBe(SecurityTypeProto.TIPS);
|
|
89
|
+
expect(parsed.getCouponRate()!.getArbitraryPrecisionValue()).toBe('0.625');
|
|
90
|
+
expect(parsed.getCouponType()).toBe(CouponTypeProto.FIXED);
|
|
91
|
+
expect(parsed.getCouponFrequency()).toBe(CouponFrequencyProto.SEMIANNUALLY);
|
|
92
|
+
expect(parsed.getFaceValue()!.getArbitraryPrecisionValue()).toBe('1000');
|
|
93
|
+
expect(parsed.getMaturityDate()!.getYear()).toBe(2030);
|
|
94
|
+
expect(parsed.getBaseCpi()!.getArbitraryPrecisionValue()).toBe('256.394');
|
|
95
|
+
expect(parsed.getInflationIndexType()).toBe(IndexTypeProto.CPI_U);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
test('FRN: spread + reference_rate_index + reset_frequency survive round-trip', () => {
|
|
99
|
+
const original = new SecurityProto();
|
|
100
|
+
original.setObjectClass('Security');
|
|
101
|
+
original.setVersion('0.0.1');
|
|
102
|
+
original.setSecurityType(SecurityTypeProto.FRN);
|
|
103
|
+
original.setAssetClass('Fixed Income');
|
|
104
|
+
original.setIssuerName('US Treasury');
|
|
105
|
+
original.setCouponType(CouponTypeProto.FLOAT);
|
|
106
|
+
original.setCouponFrequency(CouponFrequencyProto.QUARTERLY);
|
|
107
|
+
original.setFaceValue(makeDecimal('100'));
|
|
108
|
+
original.setMaturityDate(makeDate(2028, 1, 15));
|
|
109
|
+
original.setSpread(makeDecimal('50'));
|
|
110
|
+
original.setReferenceRateIndex(IndexTypeProto.T_BILL_13_WEEK);
|
|
111
|
+
// Note: setResetFrequency (field 92) not yet in generated JS — codegen needs update
|
|
112
|
+
|
|
113
|
+
const bytes = original.serializeBinary();
|
|
114
|
+
const parsed = SecurityProto.deserializeBinary(bytes);
|
|
115
|
+
|
|
116
|
+
expect(parsed.getSecurityType()).toBe(SecurityTypeProto.FRN);
|
|
117
|
+
expect(parsed.getCouponType()).toBe(CouponTypeProto.FLOAT);
|
|
118
|
+
expect(parsed.getCouponFrequency()).toBe(CouponFrequencyProto.QUARTERLY);
|
|
119
|
+
expect(parsed.getFaceValue()!.getArbitraryPrecisionValue()).toBe('100');
|
|
120
|
+
expect(parsed.getMaturityDate()!.getYear()).toBe(2028);
|
|
121
|
+
expect(parsed.getSpread()!.getArbitraryPrecisionValue()).toBe('50');
|
|
122
|
+
expect(parsed.getReferenceRateIndex()).toBe(IndexTypeProto.T_BILL_13_WEEK);
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
test('EQUITY_SECURITY: identifier + asset_class survive round-trip', () => {
|
|
126
|
+
const original = new SecurityProto();
|
|
127
|
+
original.setObjectClass('Security');
|
|
128
|
+
original.setVersion('0.0.1');
|
|
129
|
+
original.setSecurityType(SecurityTypeProto.EQUITY_SECURITY);
|
|
130
|
+
original.setAssetClass('Equity');
|
|
131
|
+
original.setIssuerName('Apple Inc.');
|
|
132
|
+
original.setQuantityType(SecurityQuantityTypeProto.UNITS);
|
|
133
|
+
original.setIdentifier(makeIdentifier(IdentifierTypeProto.EXCH_TICKER, 'AAPL'));
|
|
134
|
+
original.setDescription('Apple Inc. Common Stock');
|
|
135
|
+
|
|
136
|
+
const bytes = original.serializeBinary();
|
|
137
|
+
const parsed = SecurityProto.deserializeBinary(bytes);
|
|
138
|
+
|
|
139
|
+
expect(parsed.getSecurityType()).toBe(SecurityTypeProto.EQUITY_SECURITY);
|
|
140
|
+
expect(parsed.getAssetClass()).toBe('Equity');
|
|
141
|
+
expect(parsed.getIssuerName()).toBe('Apple Inc.');
|
|
142
|
+
expect(parsed.getQuantityType()).toBe(SecurityQuantityTypeProto.UNITS);
|
|
143
|
+
expect(parsed.getDescription()).toBe('Apple Inc. Common Stock');
|
|
144
|
+
expect(parsed.getIdentifier()!.getIdentifierValue()).toBe('AAPL');
|
|
145
|
+
expect(parsed.getIdentifier()!.getIdentifierType()).toBe(IdentifierTypeProto.EXCH_TICKER);
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
test('CASH_SECURITY: cash_id + settlement fields survive round-trip', () => {
|
|
149
|
+
const original = new SecurityProto();
|
|
150
|
+
original.setObjectClass('Security');
|
|
151
|
+
original.setVersion('0.0.1');
|
|
152
|
+
original.setSecurityType(SecurityTypeProto.CASH_SECURITY);
|
|
153
|
+
original.setAssetClass('Cash');
|
|
154
|
+
original.setIssuerName('Federal Reserve');
|
|
155
|
+
original.setQuantityType(SecurityQuantityTypeProto.UNITS);
|
|
156
|
+
original.setCashId('USD');
|
|
157
|
+
original.setDescription('US Dollar');
|
|
158
|
+
original.setIdentifier(makeIdentifier(IdentifierTypeProto.CASH, 'USD'));
|
|
159
|
+
|
|
160
|
+
const bytes = original.serializeBinary();
|
|
161
|
+
const parsed = SecurityProto.deserializeBinary(bytes);
|
|
162
|
+
|
|
163
|
+
expect(parsed.getSecurityType()).toBe(SecurityTypeProto.CASH_SECURITY);
|
|
164
|
+
expect(parsed.getAssetClass()).toBe('Cash');
|
|
165
|
+
expect(parsed.getCashId()).toBe('USD');
|
|
166
|
+
expect(parsed.getDescription()).toBe('US Dollar');
|
|
167
|
+
expect(parsed.getIdentifier()!.getIdentifierValue()).toBe('USD');
|
|
168
|
+
expect(parsed.getIdentifier()!.getIdentifierType()).toBe(IdentifierTypeProto.CASH);
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
test('INDEX_SECURITY: index_type + inflation_index_type survive round-trip', () => {
|
|
172
|
+
const original = new SecurityProto();
|
|
173
|
+
original.setObjectClass('Security');
|
|
174
|
+
original.setVersion('0.0.1');
|
|
175
|
+
original.setSecurityType(SecurityTypeProto.INDEX_SECURITY);
|
|
176
|
+
original.setAssetClass('Index');
|
|
177
|
+
original.setIssuerName('Bureau of Labor Statistics');
|
|
178
|
+
original.setDescription('US CPI-U All Urban Consumers');
|
|
179
|
+
original.setIndexType(IndexTypeProto.CPI_U);
|
|
180
|
+
original.setIdentifier(makeIdentifier(IdentifierTypeProto.CUSIP, 'CPI-U'));
|
|
181
|
+
|
|
182
|
+
const bytes = original.serializeBinary();
|
|
183
|
+
const parsed = SecurityProto.deserializeBinary(bytes);
|
|
184
|
+
|
|
185
|
+
expect(parsed.getSecurityType()).toBe(SecurityTypeProto.INDEX_SECURITY);
|
|
186
|
+
expect(parsed.getAssetClass()).toBe('Index');
|
|
187
|
+
expect(parsed.getIssuerName()).toBe('Bureau of Labor Statistics');
|
|
188
|
+
expect(parsed.getDescription()).toBe('US CPI-U All Urban Consumers');
|
|
189
|
+
expect(parsed.getIndexType()).toBe(IndexTypeProto.CPI_U);
|
|
190
|
+
expect(parsed.getIdentifier()!.getIdentifierValue()).toBe('CPI-U');
|
|
191
|
+
});
|
|
192
|
+
});
|
|
@@ -22,6 +22,14 @@ declare class Security {
|
|
|
22
22
|
getSecurityID(): IdentifierProto;
|
|
23
23
|
getIssueDate(): LocalDate;
|
|
24
24
|
getMaturityDate(): LocalDate;
|
|
25
|
+
/**
|
|
26
|
+
* Returns the bond-like details sub-message from the oneof, if set.
|
|
27
|
+
* Works for BondDetails, TipsDetails, and FrnDetails (all share the same
|
|
28
|
+
* base bond fields: coupon_rate, maturity_date, etc.).
|
|
29
|
+
* Returns undefined if the oneof is not set or the proto doesn't support it
|
|
30
|
+
* (e.g. when JS codegen hasn't been updated).
|
|
31
|
+
*/
|
|
32
|
+
protected getBondLikeDetails(): any | undefined;
|
|
25
33
|
getIssuerName(): string;
|
|
26
34
|
equals(other: Security): boolean;
|
|
27
35
|
}
|
|
@@ -15,6 +15,8 @@ class Security {
|
|
|
15
15
|
static create(proto) {
|
|
16
16
|
switch (proto.getSecurityType()) {
|
|
17
17
|
case security_type_pb_1.SecurityTypeProto.BOND_SECURITY:
|
|
18
|
+
case security_type_pb_1.SecurityTypeProto.TIPS:
|
|
19
|
+
case security_type_pb_1.SecurityTypeProto.FRN:
|
|
18
20
|
// Lazy import to avoid circular dependency
|
|
19
21
|
const BondSecurity = require('./BondSecurity').default;
|
|
20
22
|
return new BondSecurity(proto);
|
|
@@ -84,17 +86,37 @@ class Security {
|
|
|
84
86
|
return identifier;
|
|
85
87
|
}
|
|
86
88
|
getIssueDate() {
|
|
87
|
-
|
|
89
|
+
// Prefer oneof bond sub-message if available, fall back to flat fields
|
|
90
|
+
const bond = this.getBondLikeDetails();
|
|
91
|
+
const date = bond ? bond.getIssueDate() : this.proto.getIssueDate();
|
|
88
92
|
if (!date)
|
|
89
93
|
throw new Error("Issue date is required");
|
|
90
94
|
return new date_1.LocalDate(date);
|
|
91
95
|
}
|
|
92
96
|
getMaturityDate() {
|
|
93
|
-
|
|
97
|
+
// Prefer oneof bond sub-message if available, fall back to flat fields
|
|
98
|
+
const bond = this.getBondLikeDetails();
|
|
99
|
+
const date = bond ? bond.getMaturityDate() : this.proto.getMaturityDate();
|
|
94
100
|
if (!date)
|
|
95
101
|
throw new Error("Maturity date is required");
|
|
96
102
|
return new date_1.LocalDate(date);
|
|
97
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Returns the bond-like details sub-message from the oneof, if set.
|
|
106
|
+
* Works for BondDetails, TipsDetails, and FrnDetails (all share the same
|
|
107
|
+
* base bond fields: coupon_rate, maturity_date, etc.).
|
|
108
|
+
* Returns undefined if the oneof is not set or the proto doesn't support it
|
|
109
|
+
* (e.g. when JS codegen hasn't been updated).
|
|
110
|
+
*/
|
|
111
|
+
getBondLikeDetails() {
|
|
112
|
+
// Guard: check if the oneof accessor exists (JS codegen may be stale)
|
|
113
|
+
if (typeof this.proto.getBondDetails !== 'function')
|
|
114
|
+
return undefined;
|
|
115
|
+
return this.proto.getBondDetails() ||
|
|
116
|
+
this.proto.getTipsDetails() ||
|
|
117
|
+
this.proto.getFrnDetails() ||
|
|
118
|
+
undefined;
|
|
119
|
+
}
|
|
98
120
|
getIssuerName() {
|
|
99
121
|
return this.proto.getIssuerName();
|
|
100
122
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["security.ts"],"names":[],"mappings":";;AAAA,2EAA0E;AAG1E,gDAAkD;AAClD,wCAAqC;AACrC,wCAA0C;AAC1C,2FAAyF;AAEzF,MAAM,QAAQ;IAGZ,YAAY,KAAoB;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,KAAoB;QAChC,QAAQ,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["security.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,8 @@ class Security {
|
|
|
19
19
|
static create(proto: SecurityProto): Security {
|
|
20
20
|
switch (proto.getSecurityType()) {
|
|
21
21
|
case SecurityTypeProto.BOND_SECURITY:
|
|
22
|
+
case SecurityTypeProto.TIPS:
|
|
23
|
+
case SecurityTypeProto.FRN:
|
|
22
24
|
// Lazy import to avoid circular dependency
|
|
23
25
|
const BondSecurity = require('./BondSecurity').default;
|
|
24
26
|
return new BondSecurity(proto);
|
|
@@ -27,6 +29,7 @@ class Security {
|
|
|
27
29
|
}
|
|
28
30
|
}
|
|
29
31
|
|
|
32
|
+
|
|
30
33
|
toString(): string {
|
|
31
34
|
return `ID[${this.getID().toString()}], ${this.getSecurityID()}[${this.getIssuerName()}]`;
|
|
32
35
|
}
|
|
@@ -98,17 +101,38 @@ class Security {
|
|
|
98
101
|
}
|
|
99
102
|
|
|
100
103
|
getIssueDate(): LocalDate {
|
|
101
|
-
|
|
104
|
+
// Prefer oneof bond sub-message if available, fall back to flat fields
|
|
105
|
+
const bond = this.getBondLikeDetails();
|
|
106
|
+
const date = bond ? bond.getIssueDate() : this.proto.getIssueDate();
|
|
102
107
|
if (!date) throw new Error("Issue date is required");
|
|
103
108
|
return new LocalDate(date);
|
|
104
109
|
}
|
|
105
110
|
|
|
106
111
|
getMaturityDate(): LocalDate {
|
|
107
|
-
|
|
112
|
+
// Prefer oneof bond sub-message if available, fall back to flat fields
|
|
113
|
+
const bond = this.getBondLikeDetails();
|
|
114
|
+
const date = bond ? bond.getMaturityDate() : this.proto.getMaturityDate();
|
|
108
115
|
if (!date) throw new Error("Maturity date is required");
|
|
109
116
|
return new LocalDate(date);
|
|
110
117
|
}
|
|
111
118
|
|
|
119
|
+
/**
|
|
120
|
+
* Returns the bond-like details sub-message from the oneof, if set.
|
|
121
|
+
* Works for BondDetails, TipsDetails, and FrnDetails (all share the same
|
|
122
|
+
* base bond fields: coupon_rate, maturity_date, etc.).
|
|
123
|
+
* Returns undefined if the oneof is not set or the proto doesn't support it
|
|
124
|
+
* (e.g. when JS codegen hasn't been updated).
|
|
125
|
+
*/
|
|
126
|
+
protected getBondLikeDetails(): any | undefined {
|
|
127
|
+
// Guard: check if the oneof accessor exists (JS codegen may be stale)
|
|
128
|
+
if (typeof this.proto.getBondDetails !== 'function') return undefined;
|
|
129
|
+
|
|
130
|
+
return this.proto.getBondDetails() ||
|
|
131
|
+
this.proto.getTipsDetails() ||
|
|
132
|
+
this.proto.getFrnDetails() ||
|
|
133
|
+
undefined;
|
|
134
|
+
}
|
|
135
|
+
|
|
112
136
|
getIssuerName(): string {
|
|
113
137
|
return this.proto.getIssuerName();
|
|
114
138
|
}
|
|
@@ -64,11 +64,36 @@ class Tenor {
|
|
|
64
64
|
if (Tenor.isPeriodNegative(period)) {
|
|
65
65
|
return '';
|
|
66
66
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
// Extract weeks and remaining days from total days
|
|
70
|
-
|
|
71
|
-
|
|
67
|
+
let years = period.years;
|
|
68
|
+
let months = period.months;
|
|
69
|
+
// Extract weeks and remaining days from total days
|
|
70
|
+
let weeks = Math.floor(period.days / 7);
|
|
71
|
+
let days = period.days % 7;
|
|
72
|
+
// Calculate total days from weeks and days
|
|
73
|
+
const totalDays = weeks * 7 + days;
|
|
74
|
+
// Round up months when total days >= 27 (approximately 4 weeks)
|
|
75
|
+
// This covers cases like 3W6D (27 days) which should round up
|
|
76
|
+
if (totalDays >= 27) {
|
|
77
|
+
months += 1;
|
|
78
|
+
weeks = 0; // Weeks are absorbed into months
|
|
79
|
+
days = 0; // Days are discarded when rounding up
|
|
80
|
+
}
|
|
81
|
+
// Also round up months when months >= 11 and there are any weeks (>= 2 weeks)
|
|
82
|
+
// This covers cases like 11M2W which should round to 12M = 1Y
|
|
83
|
+
else if (months >= 11 && weeks >= 2) {
|
|
84
|
+
months += 1;
|
|
85
|
+
weeks = 0;
|
|
86
|
+
days = 0;
|
|
87
|
+
}
|
|
88
|
+
// Discard days when there are no weeks (e.g., 6M1D -> 6M)
|
|
89
|
+
else if (weeks === 0 && days > 0) {
|
|
90
|
+
days = 0;
|
|
91
|
+
}
|
|
92
|
+
// Round up years when months reach 12 or more
|
|
93
|
+
if (months >= 12) {
|
|
94
|
+
years += Math.floor(months / 12);
|
|
95
|
+
months = months % 12;
|
|
96
|
+
}
|
|
72
97
|
const parts = [];
|
|
73
98
|
if (years > 0) {
|
|
74
99
|
parts.push(`${years}Y`);
|
|
@@ -82,7 +107,7 @@ class Tenor {
|
|
|
82
107
|
if (days > 0) {
|
|
83
108
|
parts.push(`${days}D`);
|
|
84
109
|
}
|
|
85
|
-
return parts.join('');
|
|
110
|
+
return parts.join('').trim();
|
|
86
111
|
}
|
|
87
112
|
/**
|
|
88
113
|
* Checks if a period is negative (has any negative component).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"term.js","sourceRoot":"","sources":["term.ts"],"names":[],"mappings":";;;AAAA,qFAAmF;AAYnF;;;GAGG;AACH,MAAa,KAAK;IAmBd,YAAY,IAAoB,EAAE,WAA6B;QAC3D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,WAAW,KAAK,SAAS,EAAE
|
|
1
|
+
{"version":3,"file":"term.js","sourceRoot":"","sources":["term.ts"],"names":[],"mappings":"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"}
|
|
@@ -168,11 +168,30 @@ function testPeriodToString() {
|
|
|
168
168
|
const period1 = { years: 2, months: 3, days: 0 };
|
|
169
169
|
assert(term_1.Tenor.periodToString(period1) === '2Y3M', 'Should return "2Y3M"');
|
|
170
170
|
const period2 = { years: 0, months: 6, days: 14 };
|
|
171
|
-
assert(term_1.Tenor.periodToString(period2) === '6M2W', 'Should convert 14 days to 2W');
|
|
171
|
+
assert(term_1.Tenor.periodToString(period2) === '6M2W', 'Should convert 14 days to 2W (less than 4 weeks)');
|
|
172
172
|
const period3 = { years: 1, months: 0, days: 21 };
|
|
173
|
-
assert(term_1.Tenor.periodToString(period3) === '1Y3W', 'Should convert 21 days to 3W');
|
|
173
|
+
assert(term_1.Tenor.periodToString(period3) === '1Y3W', 'Should convert 21 days to 3W (less than 4 weeks)');
|
|
174
174
|
const period4 = { years: 0, months: 0, days: 10 };
|
|
175
175
|
assert(term_1.Tenor.periodToString(period4) === '1W3D', 'Should convert 10 days to 1W3D');
|
|
176
|
+
// Test rounding: 4 or more weeks should round up to months
|
|
177
|
+
const period7 = { years: 0, months: 0, days: 28 };
|
|
178
|
+
assert(term_1.Tenor.periodToString(period7) === '1M', '28 days (4 weeks) should round up to 1M');
|
|
179
|
+
const period8 = { years: 0, months: 0, days: 35 };
|
|
180
|
+
assert(term_1.Tenor.periodToString(period8) === '1M', '35 days (5 weeks) should round up to 1M');
|
|
181
|
+
// Test rounding: 12 or more months should round up to years
|
|
182
|
+
const period9 = { years: 0, months: 12, days: 0 };
|
|
183
|
+
assert(term_1.Tenor.periodToString(period9) === '1Y', '12 months should round up to 1Y');
|
|
184
|
+
const period10 = { years: 0, months: 13, days: 0 };
|
|
185
|
+
assert(term_1.Tenor.periodToString(period10) === '1Y1M', '13 months should round up to 1Y1M');
|
|
186
|
+
// Test rounding: 3M3W6D (27 days total) should round to 4M
|
|
187
|
+
const period11 = { years: 0, months: 3, days: 27 }; // 3 weeks * 7 + 6 days = 27 days
|
|
188
|
+
assert(term_1.Tenor.periodToString(period11) === '4M', '3M3W6D (27 days) should round to 4M');
|
|
189
|
+
// Test discarding days when there are no weeks: 6M1D should be 6M
|
|
190
|
+
const period12 = { years: 0, months: 6, days: 1 };
|
|
191
|
+
assert(term_1.Tenor.periodToString(period12) === '6M', '6M1D should discard days and be 6M');
|
|
192
|
+
// Test rounding: 19Y11M2W should round to 20Y (11 months + 2 weeks rounds to 12 months = 1 year)
|
|
193
|
+
const period13 = { years: 19, months: 11, days: 14 }; // 2 weeks * 7 = 14 days
|
|
194
|
+
assert(term_1.Tenor.periodToString(period13) === '20Y', '19Y11M2W should round to 20Y');
|
|
176
195
|
// Test negative period
|
|
177
196
|
const period5 = { years: -1, months: 0, days: 0 };
|
|
178
197
|
assert(term_1.Tenor.periodToString(period5) === '', 'Negative period should return empty string');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"term.test.js","sourceRoot":"","sources":["term.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"term.test.js","sourceRoot":"","sources":["term.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -204,14 +204,40 @@ function testPeriodToString(): void {
|
|
|
204
204
|
assert(Tenor.periodToString(period1) === '2Y3M', 'Should return "2Y3M"');
|
|
205
205
|
|
|
206
206
|
const period2: Period = { years: 0, months: 6, days: 14 };
|
|
207
|
-
assert(Tenor.periodToString(period2) === '6M2W', 'Should convert 14 days to 2W');
|
|
207
|
+
assert(Tenor.periodToString(period2) === '6M2W', 'Should convert 14 days to 2W (less than 4 weeks)');
|
|
208
208
|
|
|
209
209
|
const period3: Period = { years: 1, months: 0, days: 21 };
|
|
210
|
-
assert(Tenor.periodToString(period3) === '1Y3W', 'Should convert 21 days to 3W');
|
|
210
|
+
assert(Tenor.periodToString(period3) === '1Y3W', 'Should convert 21 days to 3W (less than 4 weeks)');
|
|
211
211
|
|
|
212
212
|
const period4: Period = { years: 0, months: 0, days: 10 };
|
|
213
213
|
assert(Tenor.periodToString(period4) === '1W3D', 'Should convert 10 days to 1W3D');
|
|
214
214
|
|
|
215
|
+
// Test rounding: 4 or more weeks should round up to months
|
|
216
|
+
const period7: Period = { years: 0, months: 0, days: 28 };
|
|
217
|
+
assert(Tenor.periodToString(period7) === '1M', '28 days (4 weeks) should round up to 1M');
|
|
218
|
+
|
|
219
|
+
const period8: Period = { years: 0, months: 0, days: 35 };
|
|
220
|
+
assert(Tenor.periodToString(period8) === '1M', '35 days (5 weeks) should round up to 1M');
|
|
221
|
+
|
|
222
|
+
// Test rounding: 12 or more months should round up to years
|
|
223
|
+
const period9: Period = { years: 0, months: 12, days: 0 };
|
|
224
|
+
assert(Tenor.periodToString(period9) === '1Y', '12 months should round up to 1Y');
|
|
225
|
+
|
|
226
|
+
const period10: Period = { years: 0, months: 13, days: 0 };
|
|
227
|
+
assert(Tenor.periodToString(period10) === '1Y1M', '13 months should round up to 1Y1M');
|
|
228
|
+
|
|
229
|
+
// Test rounding: 3M3W6D (27 days total) should round to 4M
|
|
230
|
+
const period11: Period = { years: 0, months: 3, days: 27 }; // 3 weeks * 7 + 6 days = 27 days
|
|
231
|
+
assert(Tenor.periodToString(period11) === '4M', '3M3W6D (27 days) should round to 4M');
|
|
232
|
+
|
|
233
|
+
// Test discarding days when there are no weeks: 6M1D should be 6M
|
|
234
|
+
const period12: Period = { years: 0, months: 6, days: 1 };
|
|
235
|
+
assert(Tenor.periodToString(period12) === '6M', '6M1D should discard days and be 6M');
|
|
236
|
+
|
|
237
|
+
// Test rounding: 19Y11M2W should round to 20Y (11 months + 2 weeks rounds to 12 months = 1 year)
|
|
238
|
+
const period13: Period = { years: 19, months: 11, days: 14 }; // 2 weeks * 7 = 14 days
|
|
239
|
+
assert(Tenor.periodToString(period13) === '20Y', '19Y11M2W should round to 20Y');
|
|
240
|
+
|
|
215
241
|
// Test negative period
|
|
216
242
|
const period5: Period = { years: -1, months: 0, days: 0 };
|
|
217
243
|
assert(Tenor.periodToString(period5) === '', 'Negative period should return empty string');
|
|
@@ -98,11 +98,39 @@ export class Tenor {
|
|
|
98
98
|
return '';
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
// Extract weeks and remaining days from total days
|
|
104
|
-
|
|
105
|
-
|
|
101
|
+
let years = period.years;
|
|
102
|
+
let months = period.months;
|
|
103
|
+
// Extract weeks and remaining days from total days
|
|
104
|
+
let weeks = Math.floor(period.days / 7);
|
|
105
|
+
let days = period.days % 7;
|
|
106
|
+
|
|
107
|
+
// Calculate total days from weeks and days
|
|
108
|
+
const totalDays = weeks * 7 + days;
|
|
109
|
+
|
|
110
|
+
// Round up months when total days >= 27 (approximately 4 weeks)
|
|
111
|
+
// This covers cases like 3W6D (27 days) which should round up
|
|
112
|
+
if (totalDays >= 27) {
|
|
113
|
+
months += 1;
|
|
114
|
+
weeks = 0; // Weeks are absorbed into months
|
|
115
|
+
days = 0; // Days are discarded when rounding up
|
|
116
|
+
}
|
|
117
|
+
// Also round up months when months >= 11 and there are any weeks (>= 2 weeks)
|
|
118
|
+
// This covers cases like 11M2W which should round to 12M = 1Y
|
|
119
|
+
else if (months >= 11 && weeks >= 2) {
|
|
120
|
+
months += 1;
|
|
121
|
+
weeks = 0;
|
|
122
|
+
days = 0;
|
|
123
|
+
}
|
|
124
|
+
// Discard days when there are no weeks (e.g., 6M1D -> 6M)
|
|
125
|
+
else if (weeks === 0 && days > 0) {
|
|
126
|
+
days = 0;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Round up years when months reach 12 or more
|
|
130
|
+
if (months >= 12) {
|
|
131
|
+
years += Math.floor(months / 12);
|
|
132
|
+
months = months % 12;
|
|
133
|
+
}
|
|
106
134
|
|
|
107
135
|
const parts: string[] = [];
|
|
108
136
|
if (years > 0) {
|
|
@@ -118,7 +146,7 @@ export class Tenor {
|
|
|
118
146
|
parts.push(`${days}D`);
|
|
119
147
|
}
|
|
120
148
|
|
|
121
|
-
return parts.join('');
|
|
149
|
+
return parts.join('').trim();
|
|
122
150
|
}
|
|
123
151
|
|
|
124
152
|
/**
|