@fintekkers/ledger-models 0.1.113 → 0.1.115

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.
Files changed (36) hide show
  1. package/node/wrappers/models/security/BondSecurity.d.ts +12 -4
  2. package/node/wrappers/models/security/BondSecurity.js +46 -2
  3. package/node/wrappers/models/security/BondSecurity.js.map +1 -1
  4. package/node/wrappers/models/security/BondSecurity.test.d.ts +1 -0
  5. package/node/wrappers/models/security/BondSecurity.test.js +117 -0
  6. package/node/wrappers/models/security/BondSecurity.test.js.map +1 -0
  7. package/node/wrappers/models/security/BondSecurity.test.ts +132 -0
  8. package/node/wrappers/models/security/BondSecurity.ts +53 -6
  9. package/node/wrappers/models/security/coupon_frequency.d.ts +16 -0
  10. package/node/wrappers/models/security/coupon_frequency.js +30 -0
  11. package/node/wrappers/models/security/coupon_frequency.js.map +1 -0
  12. package/node/wrappers/models/security/coupon_frequency.test.d.ts +1 -0
  13. package/node/wrappers/models/security/coupon_frequency.test.js +15 -0
  14. package/node/wrappers/models/security/coupon_frequency.test.js.map +1 -0
  15. package/node/wrappers/models/security/coupon_frequency.test.ts +16 -0
  16. package/node/wrappers/models/security/coupon_frequency.ts +33 -0
  17. package/node/wrappers/models/security/coupon_type.d.ts +16 -0
  18. package/node/wrappers/models/security/coupon_type.js +30 -0
  19. package/node/wrappers/models/security/coupon_type.js.map +1 -0
  20. package/node/wrappers/models/security/coupon_type.test.d.ts +1 -0
  21. package/node/wrappers/models/security/coupon_type.test.js +13 -0
  22. package/node/wrappers/models/security/coupon_type.test.js.map +1 -0
  23. package/node/wrappers/models/security/coupon_type.test.ts +13 -0
  24. package/node/wrappers/models/security/coupon_type.ts +33 -0
  25. package/node/wrappers/models/security/security.js +3 -4
  26. package/node/wrappers/models/security/security.js.map +1 -1
  27. package/node/wrappers/models/security/security.ts +6 -4
  28. package/node/wrappers/models/security/term.d.ts +50 -0
  29. package/node/wrappers/models/security/term.js +157 -0
  30. package/node/wrappers/models/security/term.js.map +1 -0
  31. package/node/wrappers/models/security/term.test.d.ts +1 -0
  32. package/node/wrappers/models/security/term.test.js +253 -0
  33. package/node/wrappers/models/security/term.test.js.map +1 -0
  34. package/node/wrappers/models/security/term.test.ts +302 -0
  35. package/node/wrappers/models/security/term.ts +186 -0
  36. package/package.json +1 -1
@@ -1,16 +1,24 @@
1
1
  import Security from './security';
2
2
  import { SecurityProto } from '../../../fintekkers/models/security/security_pb';
3
3
  import { DecimalValueProto } from '../../../fintekkers/models/util/decimal_value_pb';
4
- import { CouponTypeProto } from '../../../fintekkers/models/security/coupon_type_pb';
5
- import { CouponFrequencyProto } from '../../../fintekkers/models/security/coupon_frequency_pb';
6
4
  import { LocalDate } from '../utils/date';
7
5
  import { IssuanceProto } from '../../../fintekkers/models/security/bond/issuance_pb';
6
+ import { CouponFrequency } from './coupon_frequency';
7
+ import { CouponType } from './coupon_type';
8
+ import { Tenor } from './term';
8
9
  declare class BondSecurity extends Security {
9
10
  constructor(proto: SecurityProto);
11
+ /** Returns the tenor (term) of the bond as a Tenor object */
12
+ getTenor(): Tenor;
13
+ /**
14
+ * Calculates the period between two dates in years, months, and days.
15
+ * This method handles month and year boundaries correctly.
16
+ */
17
+ private calculatePeriod;
10
18
  getCouponRate(): DecimalValueProto;
11
19
  getFaceValue(): DecimalValueProto;
12
- getCouponType(): CouponTypeProto;
13
- getCouponFrequency(): CouponFrequencyProto;
20
+ getCouponType(): CouponType;
21
+ getCouponFrequency(): CouponFrequency;
14
22
  getDatedDate(): LocalDate | undefined;
15
23
  getIssuanceInfo(): IssuanceProto[];
16
24
  }
@@ -6,6 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const security_1 = __importDefault(require("./security"));
7
7
  const security_type_pb_1 = require("../../../fintekkers/models/security/security_type_pb");
8
8
  const date_1 = require("../utils/date");
9
+ const coupon_frequency_1 = require("./coupon_frequency");
10
+ const coupon_type_1 = require("./coupon_type");
11
+ const term_1 = require("./term");
12
+ const tenor_type_pb_1 = require("../../../fintekkers/models/security/tenor_type_pb");
9
13
  class BondSecurity extends security_1.default {
10
14
  constructor(proto) {
11
15
  super(proto);
@@ -13,6 +17,40 @@ class BondSecurity extends security_1.default {
13
17
  throw new Error(`BondSecurity requires BOND_SECURITY type, got ${security_type_pb_1.SecurityTypeProto[proto.getSecurityType()]}`);
14
18
  }
15
19
  }
20
+ /** Returns the tenor (term) of the bond as a Tenor object */
21
+ getTenor() {
22
+ const issueDate = this.getIssueDate().toDate();
23
+ const maturityDate = this.getMaturityDate().toDate();
24
+ // Calculate the period between issue date and maturity date
25
+ const period = this.calculatePeriod(issueDate, maturityDate);
26
+ return new term_1.Tenor(tenor_type_pb_1.TenorTypeProto.TERM, period);
27
+ }
28
+ /**
29
+ * Calculates the period between two dates in years, months, and days.
30
+ * This method handles month and year boundaries correctly.
31
+ */
32
+ calculatePeriod(startDate, endDate) {
33
+ let years = endDate.getFullYear() - startDate.getFullYear();
34
+ let months = endDate.getMonth() - startDate.getMonth();
35
+ let days = endDate.getDate() - startDate.getDate();
36
+ // Adjust for negative days (e.g., if end day is before start day)
37
+ if (days < 0) {
38
+ months--;
39
+ // Get the number of days in the previous month
40
+ const lastDayOfPrevMonth = new Date(endDate.getFullYear(), endDate.getMonth(), 0).getDate();
41
+ days += lastDayOfPrevMonth;
42
+ }
43
+ // Adjust for negative months
44
+ if (months < 0) {
45
+ years--;
46
+ months += 12;
47
+ }
48
+ return {
49
+ years,
50
+ months,
51
+ days
52
+ };
53
+ }
16
54
  getCouponRate() {
17
55
  const rate = this.proto.getCouponRate();
18
56
  if (!rate)
@@ -26,10 +64,16 @@ class BondSecurity extends security_1.default {
26
64
  return faceValue;
27
65
  }
28
66
  getCouponType() {
29
- return this.proto.getCouponType();
67
+ const couponType = this.proto.getCouponType();
68
+ if (!couponType)
69
+ throw new Error("Coupon Type is required for bonds");
70
+ return new coupon_type_1.CouponType(couponType);
30
71
  }
31
72
  getCouponFrequency() {
32
- return this.proto.getCouponFrequency();
73
+ const couponFrequency = this.proto.getCouponFrequency();
74
+ if (!couponFrequency)
75
+ throw new Error("Coupon Frequency is required for bonds");
76
+ return new coupon_frequency_1.CouponFrequency(couponFrequency);
33
77
  }
34
78
  getDatedDate() {
35
79
  const datedDate = this.proto.getDatedDate();
@@ -1 +1 @@
1
- {"version":3,"file":"BondSecurity.js","sourceRoot":"","sources":["BondSecurity.ts"],"names":[],"mappings":";;;;;AAAA,0DAAkC;AAElC,2FAAyF;AAIzF,wCAA0C;AAG1C,MAAM,YAAa,SAAQ,kBAAQ;IACjC,YAAY,KAAoB;QAC9B,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,KAAK,CAAC,eAAe,EAAE,KAAK,oCAAiB,CAAC,aAAa,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CACb,iDAAiD,oCAAiB,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,EAAE,CAC9F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,aAAa;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;QACV,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC5C,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACpE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IACpC,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;IACzC,CAAC;IAED,YAAY;QACV,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC5C,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,gBAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;IAC1C,CAAC;CACF;AAED,kBAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"BondSecurity.js","sourceRoot":"","sources":["BondSecurity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const assert = require("assert");
7
+ const security_1 = __importDefault(require("./security"));
8
+ const BondSecurity_1 = __importDefault(require("./BondSecurity"));
9
+ const security_pb_1 = require("../../../fintekkers/models/security/security_pb");
10
+ const security_type_pb_1 = require("../../../fintekkers/models/security/security_type_pb");
11
+ const coupon_type_pb_1 = require("../../../fintekkers/models/security/coupon_type_pb");
12
+ const coupon_frequency_pb_1 = require("../../../fintekkers/models/security/coupon_frequency_pb");
13
+ const local_date_pb_1 = require("../../../fintekkers/models/util/local_date_pb");
14
+ const decimal_value_pb_1 = require("../../../fintekkers/models/util/decimal_value_pb");
15
+ const uuid_1 = require("../utils/uuid");
16
+ const tenor_type_pb_1 = require("../../../fintekkers/models/security/tenor_type_pb");
17
+ test('test Security.create returns BondSecurity with correct coupon type and frequency', () => {
18
+ testBondSecurityCreation();
19
+ });
20
+ test('test BondSecurity.getTenor() returns correct Tenor for 10-year bond', () => {
21
+ testBondSecurityTenor();
22
+ });
23
+ function testBondSecurityCreation() {
24
+ // Create a SecurityProto with BOND_SECURITY type, coupon type, and coupon frequency
25
+ const securityProto = new security_pb_1.SecurityProto();
26
+ securityProto.setObjectClass('Security');
27
+ securityProto.setVersion('0.0.1');
28
+ securityProto.setUuid(uuid_1.UUID.random().toUUIDProto());
29
+ securityProto.setSecurityType(security_type_pb_1.SecurityTypeProto.BOND_SECURITY);
30
+ securityProto.setAssetClass('FixedIncome');
31
+ securityProto.setIssuerName('Test Issuer');
32
+ securityProto.setCouponType(coupon_type_pb_1.CouponTypeProto.FIXED);
33
+ securityProto.setCouponFrequency(coupon_frequency_pb_1.CouponFrequencyProto.SEMIANNUALLY);
34
+ securityProto.setCouponRate(new decimal_value_pb_1.DecimalValueProto().setArbitraryPrecisionValue('0.05'));
35
+ securityProto.setFaceValue(new decimal_value_pb_1.DecimalValueProto().setArbitraryPrecisionValue('1000.00'));
36
+ securityProto.setIssueDate(new local_date_pb_1.LocalDateProto().setYear(2021).setMonth(1).setDay(1));
37
+ securityProto.setMaturityDate(new local_date_pb_1.LocalDateProto().setYear(2031).setMonth(1).setDay(1));
38
+ securityProto.setDescription('Test Bond Security');
39
+ // Call Security.create and validate it returns a BondSecurity
40
+ const security = security_1.default.create(securityProto);
41
+ assert(security instanceof BondSecurity_1.default, 'Security.create should return a BondSecurity instance');
42
+ // Cast to BondSecurity for type safety
43
+ const bondSecurity = security;
44
+ // Validate coupon type
45
+ const couponType = bondSecurity.getCouponType();
46
+ assert(couponType.name() === 'FIXED', `Expected coupon type FIXED, got ${couponType.name()}`);
47
+ // Validate coupon frequency
48
+ const couponFrequency = bondSecurity.getCouponFrequency();
49
+ assert(couponFrequency.toString() === 'SEMIANNUALLY', `Expected coupon frequency SEMIANNUALLY, got ${couponFrequency.toString()}`);
50
+ }
51
+ function testBondSecurityTenor() {
52
+ // Create a SecurityProto with BOND_SECURITY type and dates for a 10-year bond
53
+ const securityProto = new security_pb_1.SecurityProto();
54
+ securityProto.setObjectClass('Security');
55
+ securityProto.setVersion('0.0.1');
56
+ securityProto.setUuid(uuid_1.UUID.random().toUUIDProto());
57
+ securityProto.setSecurityType(security_type_pb_1.SecurityTypeProto.BOND_SECURITY);
58
+ securityProto.setAssetClass('FixedIncome');
59
+ securityProto.setIssuerName('Test Issuer');
60
+ securityProto.setCouponType(coupon_type_pb_1.CouponTypeProto.FIXED);
61
+ securityProto.setCouponFrequency(coupon_frequency_pb_1.CouponFrequencyProto.SEMIANNUALLY);
62
+ securityProto.setCouponRate(new decimal_value_pb_1.DecimalValueProto().setArbitraryPrecisionValue('0.05'));
63
+ securityProto.setFaceValue(new decimal_value_pb_1.DecimalValueProto().setArbitraryPrecisionValue('1000.00'));
64
+ // Set issue date: January 1, 2021
65
+ securityProto.setIssueDate(new local_date_pb_1.LocalDateProto().setYear(2021).setMonth(1).setDay(1));
66
+ // Set maturity date: January 1, 2031 (exactly 10 years later)
67
+ securityProto.setMaturityDate(new local_date_pb_1.LocalDateProto().setYear(2031).setMonth(1).setDay(1));
68
+ securityProto.setDescription('Test 10-Year Bond Security');
69
+ // Create BondSecurity
70
+ const security = security_1.default.create(securityProto);
71
+ assert(security instanceof BondSecurity_1.default, 'Security.create should return a BondSecurity instance');
72
+ const bondSecurity = security;
73
+ // Test getTenor()
74
+ const tenor = bondSecurity.getTenor();
75
+ assert(tenor !== null, 'Tenor should not be null');
76
+ assert(tenor.getType() === tenor_type_pb_1.TenorTypeProto.TERM, 'Tenor type should be TERM');
77
+ const period = tenor.getTenor();
78
+ assert(period !== null, 'Period should not be null');
79
+ if (period) {
80
+ assert(period.years === 10, `Expected 10 years, got ${period.years}`);
81
+ assert(period.months === 0, `Expected 0 months, got ${period.months}`);
82
+ assert(period.days === 0, `Expected 0 days, got ${period.days}`);
83
+ }
84
+ // Test tenor description
85
+ const tenorDescription = tenor.getTenorDescription();
86
+ assert(tenorDescription === '10Y', `Expected tenor description "10Y", got "${tenorDescription}"`);
87
+ // Test toString()
88
+ const tenorString = tenor.toString();
89
+ assert(tenorString === 'TERM: 10Y', `Expected "TERM: 10Y", got "${tenorString}"`);
90
+ // Test with a bond that has months and days
91
+ const securityProto2 = new security_pb_1.SecurityProto();
92
+ securityProto2.setObjectClass('Security');
93
+ securityProto2.setVersion('0.0.1');
94
+ securityProto2.setUuid(uuid_1.UUID.random().toUUIDProto());
95
+ securityProto2.setSecurityType(security_type_pb_1.SecurityTypeProto.BOND_SECURITY);
96
+ securityProto2.setAssetClass('FixedIncome');
97
+ securityProto2.setIssuerName('Test Issuer');
98
+ securityProto2.setCouponType(coupon_type_pb_1.CouponTypeProto.FIXED);
99
+ securityProto2.setCouponFrequency(coupon_frequency_pb_1.CouponFrequencyProto.SEMIANNUALLY);
100
+ securityProto2.setCouponRate(new decimal_value_pb_1.DecimalValueProto().setArbitraryPrecisionValue('0.05'));
101
+ securityProto2.setFaceValue(new decimal_value_pb_1.DecimalValueProto().setArbitraryPrecisionValue('1000.00'));
102
+ // Set issue date: January 15, 2021
103
+ securityProto2.setIssueDate(new local_date_pb_1.LocalDateProto().setYear(2021).setMonth(1).setDay(15));
104
+ // Set maturity date: July 20, 2023 (2 years, 6 months, 5 days)
105
+ securityProto2.setMaturityDate(new local_date_pb_1.LocalDateProto().setYear(2023).setMonth(7).setDay(20));
106
+ securityProto2.setDescription('Test Bond with Months and Days');
107
+ const bondSecurity2 = security_1.default.create(securityProto2);
108
+ const tenor2 = bondSecurity2.getTenor();
109
+ const period2 = tenor2.getTenor();
110
+ if (period2) {
111
+ assert(period2.years === 2, `Expected 2 years, got ${period2.years}`);
112
+ assert(period2.months === 6, `Expected 6 months, got ${period2.months}`);
113
+ assert(period2.days === 5, `Expected 5 days, got ${period2.days}`);
114
+ }
115
+ assert(tenor2.toString() === 'TERM: 2Y6M5D', `Expected "TERM: 2Y6M5D", got "${tenor2.toString()}"`);
116
+ }
117
+ //# sourceMappingURL=BondSecurity.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BondSecurity.test.js","sourceRoot":"","sources":["BondSecurity.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ import assert = require('assert');
2
+ import Security from './security';
3
+ import BondSecurity from './BondSecurity';
4
+ import { SecurityProto } from '../../../fintekkers/models/security/security_pb';
5
+ import { SecurityTypeProto } from '../../../fintekkers/models/security/security_type_pb';
6
+ import { CouponTypeProto } from '../../../fintekkers/models/security/coupon_type_pb';
7
+ import { CouponFrequencyProto } from '../../../fintekkers/models/security/coupon_frequency_pb';
8
+ import { LocalDateProto } from '../../../fintekkers/models/util/local_date_pb';
9
+ import { DecimalValueProto } from '../../../fintekkers/models/util/decimal_value_pb';
10
+ import { UUID } from '../utils/uuid';
11
+ import { CouponType } from './coupon_type';
12
+ import { TenorTypeProto } from '../../../fintekkers/models/security/tenor_type_pb';
13
+
14
+ test('test Security.create returns BondSecurity with correct coupon type and frequency', () => {
15
+ testBondSecurityCreation();
16
+ });
17
+
18
+ test('test BondSecurity.getTenor() returns correct Tenor for 10-year bond', () => {
19
+ testBondSecurityTenor();
20
+ });
21
+
22
+ function testBondSecurityCreation(): void {
23
+ // Create a SecurityProto with BOND_SECURITY type, coupon type, and coupon frequency
24
+ const securityProto = new SecurityProto();
25
+ securityProto.setObjectClass('Security');
26
+ securityProto.setVersion('0.0.1');
27
+ securityProto.setUuid(UUID.random().toUUIDProto());
28
+ securityProto.setSecurityType(SecurityTypeProto.BOND_SECURITY);
29
+ securityProto.setAssetClass('FixedIncome');
30
+ securityProto.setIssuerName('Test Issuer');
31
+ securityProto.setCouponType(CouponTypeProto.FIXED);
32
+ securityProto.setCouponFrequency(CouponFrequencyProto.SEMIANNUALLY);
33
+ securityProto.setCouponRate(new DecimalValueProto().setArbitraryPrecisionValue('0.05'));
34
+ securityProto.setFaceValue(new DecimalValueProto().setArbitraryPrecisionValue('1000.00'));
35
+ securityProto.setIssueDate(new LocalDateProto().setYear(2021).setMonth(1).setDay(1));
36
+ securityProto.setMaturityDate(new LocalDateProto().setYear(2031).setMonth(1).setDay(1));
37
+ securityProto.setDescription('Test Bond Security');
38
+
39
+ // Call Security.create and validate it returns a BondSecurity
40
+ const security = Security.create(securityProto);
41
+ assert(security instanceof BondSecurity, 'Security.create should return a BondSecurity instance');
42
+
43
+ // Cast to BondSecurity for type safety
44
+ const bondSecurity = security as BondSecurity;
45
+
46
+ // Validate coupon type
47
+ const couponType = bondSecurity.getCouponType();
48
+ assert(couponType.name() === 'FIXED', `Expected coupon type FIXED, got ${couponType.name()}`);
49
+
50
+ // Validate coupon frequency
51
+ const couponFrequency = bondSecurity.getCouponFrequency();
52
+ assert(couponFrequency.toString() === 'SEMIANNUALLY', `Expected coupon frequency SEMIANNUALLY, got ${couponFrequency.toString()}`);
53
+ }
54
+
55
+ function testBondSecurityTenor(): void {
56
+ // Create a SecurityProto with BOND_SECURITY type and dates for a 10-year bond
57
+ const securityProto = new SecurityProto();
58
+ securityProto.setObjectClass('Security');
59
+ securityProto.setVersion('0.0.1');
60
+ securityProto.setUuid(UUID.random().toUUIDProto());
61
+ securityProto.setSecurityType(SecurityTypeProto.BOND_SECURITY);
62
+ securityProto.setAssetClass('FixedIncome');
63
+ securityProto.setIssuerName('Test Issuer');
64
+ securityProto.setCouponType(CouponTypeProto.FIXED);
65
+ securityProto.setCouponFrequency(CouponFrequencyProto.SEMIANNUALLY);
66
+ securityProto.setCouponRate(new DecimalValueProto().setArbitraryPrecisionValue('0.05'));
67
+ securityProto.setFaceValue(new DecimalValueProto().setArbitraryPrecisionValue('1000.00'));
68
+
69
+ // Set issue date: January 1, 2021
70
+ securityProto.setIssueDate(new LocalDateProto().setYear(2021).setMonth(1).setDay(1));
71
+ // Set maturity date: January 1, 2031 (exactly 10 years later)
72
+ securityProto.setMaturityDate(new LocalDateProto().setYear(2031).setMonth(1).setDay(1));
73
+ securityProto.setDescription('Test 10-Year Bond Security');
74
+
75
+ // Create BondSecurity
76
+ const security = Security.create(securityProto);
77
+ assert(security instanceof BondSecurity, 'Security.create should return a BondSecurity instance');
78
+ const bondSecurity = security as BondSecurity;
79
+
80
+ // Test getTenor()
81
+ const tenor = bondSecurity.getTenor();
82
+ assert(tenor !== null, 'Tenor should not be null');
83
+ assert(tenor.getType() === TenorTypeProto.TERM, 'Tenor type should be TERM');
84
+
85
+ const period = tenor.getTenor();
86
+ assert(period !== null, 'Period should not be null');
87
+ if (period) {
88
+ assert(period.years === 10, `Expected 10 years, got ${period.years}`);
89
+ assert(period.months === 0, `Expected 0 months, got ${period.months}`);
90
+ assert(period.days === 0, `Expected 0 days, got ${period.days}`);
91
+ }
92
+
93
+ // Test tenor description
94
+ const tenorDescription = tenor.getTenorDescription();
95
+ assert(tenorDescription === '10Y', `Expected tenor description "10Y", got "${tenorDescription}"`);
96
+
97
+ // Test toString()
98
+ const tenorString = tenor.toString();
99
+ assert(tenorString === 'TERM: 10Y', `Expected "TERM: 10Y", got "${tenorString}"`);
100
+
101
+ // Test with a bond that has months and days
102
+ const securityProto2 = new SecurityProto();
103
+ securityProto2.setObjectClass('Security');
104
+ securityProto2.setVersion('0.0.1');
105
+ securityProto2.setUuid(UUID.random().toUUIDProto());
106
+ securityProto2.setSecurityType(SecurityTypeProto.BOND_SECURITY);
107
+ securityProto2.setAssetClass('FixedIncome');
108
+ securityProto2.setIssuerName('Test Issuer');
109
+ securityProto2.setCouponType(CouponTypeProto.FIXED);
110
+ securityProto2.setCouponFrequency(CouponFrequencyProto.SEMIANNUALLY);
111
+ securityProto2.setCouponRate(new DecimalValueProto().setArbitraryPrecisionValue('0.05'));
112
+ securityProto2.setFaceValue(new DecimalValueProto().setArbitraryPrecisionValue('1000.00'));
113
+
114
+ // Set issue date: January 15, 2021
115
+ securityProto2.setIssueDate(new LocalDateProto().setYear(2021).setMonth(1).setDay(15));
116
+ // Set maturity date: July 20, 2023 (2 years, 6 months, 5 days)
117
+ securityProto2.setMaturityDate(new LocalDateProto().setYear(2023).setMonth(7).setDay(20));
118
+ securityProto2.setDescription('Test Bond with Months and Days');
119
+
120
+ const bondSecurity2 = Security.create(securityProto2) as BondSecurity;
121
+ const tenor2 = bondSecurity2.getTenor();
122
+ const period2 = tenor2.getTenor();
123
+
124
+ if (period2) {
125
+ assert(period2.years === 2, `Expected 2 years, got ${period2.years}`);
126
+ assert(period2.months === 6, `Expected 6 months, got ${period2.months}`);
127
+ assert(period2.days === 5, `Expected 5 days, got ${period2.days}`);
128
+ }
129
+
130
+ assert(tenor2.toString() === 'TERM: 2Y6M5D', `Expected "TERM: 2Y6M5D", got "${tenor2.toString()}"`);
131
+ }
132
+
@@ -2,10 +2,12 @@ import Security from './security';
2
2
  import { SecurityProto } from '../../../fintekkers/models/security/security_pb';
3
3
  import { SecurityTypeProto } from '../../../fintekkers/models/security/security_type_pb';
4
4
  import { DecimalValueProto } from '../../../fintekkers/models/util/decimal_value_pb';
5
- import { CouponTypeProto } from '../../../fintekkers/models/security/coupon_type_pb';
6
- import { CouponFrequencyProto } from '../../../fintekkers/models/security/coupon_frequency_pb';
7
5
  import { LocalDate } from '../utils/date';
8
6
  import { IssuanceProto } from '../../../fintekkers/models/security/bond/issuance_pb';
7
+ import { CouponFrequency } from './coupon_frequency';
8
+ import { CouponType } from './coupon_type';
9
+ import { Tenor, Period } from './term';
10
+ import { TenorTypeProto } from '../../../fintekkers/models/security/tenor_type_pb';
9
11
 
10
12
  class BondSecurity extends Security {
11
13
  constructor(proto: SecurityProto) {
@@ -17,6 +19,47 @@ class BondSecurity extends Security {
17
19
  }
18
20
  }
19
21
 
22
+ /** Returns the tenor (term) of the bond as a Tenor object */
23
+ getTenor(): Tenor {
24
+ const issueDate = this.getIssueDate().toDate();
25
+ const maturityDate = this.getMaturityDate().toDate();
26
+
27
+ // Calculate the period between issue date and maturity date
28
+ const period = this.calculatePeriod(issueDate, maturityDate);
29
+
30
+ return new Tenor(TenorTypeProto.TERM, period);
31
+ }
32
+
33
+ /**
34
+ * Calculates the period between two dates in years, months, and days.
35
+ * This method handles month and year boundaries correctly.
36
+ */
37
+ private calculatePeriod(startDate: Date, endDate: Date): Period {
38
+ let years = endDate.getFullYear() - startDate.getFullYear();
39
+ let months = endDate.getMonth() - startDate.getMonth();
40
+ let days = endDate.getDate() - startDate.getDate();
41
+
42
+ // Adjust for negative days (e.g., if end day is before start day)
43
+ if (days < 0) {
44
+ months--;
45
+ // Get the number of days in the previous month
46
+ const lastDayOfPrevMonth = new Date(endDate.getFullYear(), endDate.getMonth(), 0).getDate();
47
+ days += lastDayOfPrevMonth;
48
+ }
49
+
50
+ // Adjust for negative months
51
+ if (months < 0) {
52
+ years--;
53
+ months += 12;
54
+ }
55
+
56
+ return {
57
+ years,
58
+ months,
59
+ days
60
+ };
61
+ }
62
+
20
63
  getCouponRate(): DecimalValueProto {
21
64
  const rate = this.proto.getCouponRate();
22
65
  if (!rate) throw new Error("Coupon rate is required for bonds");
@@ -29,12 +72,16 @@ class BondSecurity extends Security {
29
72
  return faceValue;
30
73
  }
31
74
 
32
- getCouponType(): CouponTypeProto {
33
- return this.proto.getCouponType();
75
+ getCouponType(): CouponType {
76
+ const couponType = this.proto.getCouponType();
77
+ if (!couponType) throw new Error("Coupon Type is required for bonds");
78
+ return new CouponType(couponType);
34
79
  }
35
80
 
36
- getCouponFrequency(): CouponFrequencyProto {
37
- return this.proto.getCouponFrequency();
81
+ getCouponFrequency(): CouponFrequency {
82
+ const couponFrequency = this.proto.getCouponFrequency();
83
+ if (!couponFrequency) throw new Error("Coupon Frequency is required for bonds");
84
+ return new CouponFrequency(couponFrequency);
38
85
  }
39
86
 
40
87
  getDatedDate(): LocalDate | undefined {
@@ -0,0 +1,16 @@
1
+ import { CouponFrequencyProto } from "../../../fintekkers/models/security/coupon_frequency_pb";
2
+ export declare class CouponFrequency {
3
+ proto: CouponFrequencyProto;
4
+ constructor(proto: CouponFrequencyProto);
5
+ static cfEnumMap: Map<number, string>;
6
+ /**
7
+ * NOTE that this method is not performant and should only be used for debugging purposes,
8
+ * or infrequently. If this is required for a high performance use case, please create a
9
+ * reverse map with the enum ID as the key and the enum descriptor as the value. There is
10
+ * nothing stopping this code from returning a value that does not map exactly to the enum
11
+ * value. E.g. rather than SEMIANNUALLY, you could return Semiannually.
12
+ *
13
+ * @returns CouponFrequency as a string
14
+ */
15
+ toString(): string;
16
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CouponFrequency = void 0;
4
+ const coupon_frequency_pb_1 = require("../../../fintekkers/models/security/coupon_frequency_pb");
5
+ class CouponFrequency {
6
+ constructor(proto) {
7
+ this.proto = proto;
8
+ }
9
+ /**
10
+ * NOTE that this method is not performant and should only be used for debugging purposes,
11
+ * or infrequently. If this is required for a high performance use case, please create a
12
+ * reverse map with the enum ID as the key and the enum descriptor as the value. There is
13
+ * nothing stopping this code from returning a value that does not map exactly to the enum
14
+ * value. E.g. rather than SEMIANNUALLY, you could return Semiannually.
15
+ *
16
+ * @returns CouponFrequency as a string
17
+ */
18
+ toString() {
19
+ var _a;
20
+ return (_a = CouponFrequency.cfEnumMap.get(this.proto)) !== null && _a !== void 0 ? _a : 'UNKNOWN_COUPON_FREQUENCY';
21
+ }
22
+ }
23
+ exports.CouponFrequency = CouponFrequency;
24
+ (() => {
25
+ CouponFrequency.cfEnumMap = new Map();
26
+ Object.keys(coupon_frequency_pb_1.CouponFrequencyProto).forEach(key => {
27
+ CouponFrequency.cfEnumMap.set(coupon_frequency_pb_1.CouponFrequencyProto[key], key);
28
+ });
29
+ })();
30
+ //# sourceMappingURL=coupon_frequency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coupon_frequency.js","sourceRoot":"","sources":["coupon_frequency.ts"],"names":[],"mappings":";;;AAAA,iGAA+F;AAE/F,MAAa,eAAe;IAGxB,YAAY,KAA2B;QACnC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAYD;;;;;;;;OAQG;IACH,QAAQ;;QACJ,OAAO,MAAA,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,mCAAI,0BAA0B,CAAC;IACnF,CAAC;CACJ;AA7BD,0CA6BC;AApBG;IACI,eAAe,CAAC,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEtD,MAAM,CAAC,IAAI,CAAC,0CAAoB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC5C,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,0CAAoB,CAAC,GAAwC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvG,CAAC,CAAC,CAAC;AACP,CAAC,GAAA,CAAA"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const assert = require("assert");
4
+ const coupon_frequency_1 = require("./coupon_frequency");
5
+ const coupon_frequency_pb_1 = require("../../../fintekkers/models/security/coupon_frequency_pb");
6
+ test('test CouponFrequency.SEMIANNUALLY returns "SEMIANNUALLY"', () => {
7
+ testSemiannuallyCouponFrequency();
8
+ });
9
+ function testSemiannuallyCouponFrequency() {
10
+ let couponFrequency = new coupon_frequency_1.CouponFrequency(coupon_frequency_pb_1.CouponFrequencyProto.SEMIANNUALLY);
11
+ assert(couponFrequency.toString() === 'SEMIANNUALLY');
12
+ couponFrequency = new coupon_frequency_1.CouponFrequency(2);
13
+ assert(couponFrequency.toString() === 'SEMIANNUALLY');
14
+ }
15
+ //# sourceMappingURL=coupon_frequency.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coupon_frequency.test.js","sourceRoot":"","sources":["coupon_frequency.test.ts"],"names":[],"mappings":";;AAAA,iCAAkC;AAClC,yDAAqD;AACrD,iGAA+F;AAE/F,IAAI,CAAC,0DAA0D,EAAE,GAAG,EAAE;IAClE,+BAA+B,EAAE,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,SAAS,+BAA+B;IACpC,IAAI,eAAe,GAAG,IAAI,kCAAe,CAAC,0CAAoB,CAAC,YAAY,CAAC,CAAC;IAC7E,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,cAAc,CAAC,CAAC;IAEtD,eAAe,GAAG,IAAI,kCAAe,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,cAAc,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,16 @@
1
+ import assert = require('assert');
2
+ import { CouponFrequency } from './coupon_frequency';
3
+ import { CouponFrequencyProto } from '../../../fintekkers/models/security/coupon_frequency_pb';
4
+
5
+ test('test CouponFrequency.SEMIANNUALLY returns "SEMIANNUALLY"', () => {
6
+ testSemiannuallyCouponFrequency();
7
+ });
8
+
9
+ function testSemiannuallyCouponFrequency(): void {
10
+ let couponFrequency = new CouponFrequency(CouponFrequencyProto.SEMIANNUALLY);
11
+ assert(couponFrequency.toString() === 'SEMIANNUALLY');
12
+
13
+ couponFrequency = new CouponFrequency(2);
14
+ assert(couponFrequency.toString() === 'SEMIANNUALLY');
15
+ }
16
+
@@ -0,0 +1,33 @@
1
+ import { CouponFrequencyProto } from "../../../fintekkers/models/security/coupon_frequency_pb";
2
+
3
+ export class CouponFrequency {
4
+ proto: CouponFrequencyProto;
5
+
6
+ constructor(proto: CouponFrequencyProto) {
7
+ this.proto = proto;
8
+ }
9
+
10
+ static cfEnumMap: Map<number, string>;
11
+
12
+ static {
13
+ CouponFrequency.cfEnumMap = new Map<number, string>();
14
+
15
+ Object.keys(CouponFrequencyProto).forEach(key => {
16
+ CouponFrequency.cfEnumMap.set(CouponFrequencyProto[key as keyof typeof CouponFrequencyProto], key);
17
+ });
18
+ }
19
+
20
+ /**
21
+ * NOTE that this method is not performant and should only be used for debugging purposes,
22
+ * or infrequently. If this is required for a high performance use case, please create a
23
+ * reverse map with the enum ID as the key and the enum descriptor as the value. There is
24
+ * nothing stopping this code from returning a value that does not map exactly to the enum
25
+ * value. E.g. rather than SEMIANNUALLY, you could return Semiannually.
26
+ *
27
+ * @returns CouponFrequency as a string
28
+ */
29
+ toString(): string {
30
+ return CouponFrequency.cfEnumMap.get(this.proto) ?? 'UNKNOWN_COUPON_FREQUENCY';
31
+ }
32
+ }
33
+
@@ -0,0 +1,16 @@
1
+ import { CouponTypeProto } from "../../../fintekkers/models/security/coupon_type_pb";
2
+ export declare class CouponType {
3
+ proto: CouponTypeProto;
4
+ constructor(proto: CouponTypeProto);
5
+ static ctEnumMap: Map<number, string>;
6
+ /**
7
+ * NOTE that this method is not performant and should only be used for debugging purposes,
8
+ * or infrequently. If this is required for a high performance use case, please create a
9
+ * reverse map with the enum ID as the key and the enum descriptor as the value. There is
10
+ * nothing stopping this code from returning a value that does not map exactly to the enum
11
+ * value. E.g. rather than FIXED, you could return Fixed.
12
+ *
13
+ * @returns CouponType as a string
14
+ */
15
+ name(): string;
16
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CouponType = void 0;
4
+ const coupon_type_pb_1 = require("../../../fintekkers/models/security/coupon_type_pb");
5
+ class CouponType {
6
+ constructor(proto) {
7
+ this.proto = proto;
8
+ }
9
+ /**
10
+ * NOTE that this method is not performant and should only be used for debugging purposes,
11
+ * or infrequently. If this is required for a high performance use case, please create a
12
+ * reverse map with the enum ID as the key and the enum descriptor as the value. There is
13
+ * nothing stopping this code from returning a value that does not map exactly to the enum
14
+ * value. E.g. rather than FIXED, you could return Fixed.
15
+ *
16
+ * @returns CouponType as a string
17
+ */
18
+ name() {
19
+ var _a;
20
+ return (_a = CouponType.ctEnumMap.get(this.proto)) !== null && _a !== void 0 ? _a : 'UNKNOWN_COUPON_TYPE';
21
+ }
22
+ }
23
+ exports.CouponType = CouponType;
24
+ (() => {
25
+ CouponType.ctEnumMap = new Map();
26
+ Object.keys(coupon_type_pb_1.CouponTypeProto).forEach(key => {
27
+ CouponType.ctEnumMap.set(coupon_type_pb_1.CouponTypeProto[key], key);
28
+ });
29
+ })();
30
+ //# sourceMappingURL=coupon_type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coupon_type.js","sourceRoot":"","sources":["coupon_type.ts"],"names":[],"mappings":";;;AAAA,uFAAqF;AAErF,MAAa,UAAU;IAGnB,YAAY,KAAsB;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAYD;;;;;;;;OAQG;IACH,IAAI;;QACA,OAAO,MAAA,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,mCAAI,qBAAqB,CAAC;IACzE,CAAC;CACJ;AA7BD,gCA6BC;AApBG;IACI,UAAU,CAAC,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEjD,MAAM,CAAC,IAAI,CAAC,gCAAe,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACvC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,gCAAe,CAAC,GAAmC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;AACP,CAAC,GAAA,CAAA"}