@fintekkers/ledger-models 0.4.1 → 0.4.3

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 (56) hide show
  1. package/hierarchy.json +2 -2
  2. package/node/fintekkers/models/security/bond/agency_grpc_pb.js +1 -0
  3. package/node/fintekkers/models/security/bond/agency_pb.d.ts +14 -0
  4. package/node/fintekkers/models/security/bond/agency_pb.js +35 -0
  5. package/node/fintekkers/models/security/product_type_pb.d.ts +1 -0
  6. package/node/fintekkers/models/security/product_type_pb.js +1 -0
  7. package/node/fintekkers/models/security/security_pb.d.ts +69 -0
  8. package/node/fintekkers/models/security/security_pb.js +572 -1
  9. package/node/wrappers/models/security/BondSecurity.d.ts +5 -21
  10. package/node/wrappers/models/security/BondSecurity.fromPricerInputs.test.js +17 -11
  11. package/node/wrappers/models/security/BondSecurity.fromPricerInputs.test.js.map +1 -1
  12. package/node/wrappers/models/security/BondSecurity.fromPricerInputs.test.ts +17 -11
  13. package/node/wrappers/models/security/BondSecurity.js +15 -32
  14. package/node/wrappers/models/security/BondSecurity.js.map +1 -1
  15. package/node/wrappers/models/security/BondSecurity.ts +18 -37
  16. package/node/wrappers/models/security/Issuance.d.ts +3 -5
  17. package/node/wrappers/models/security/Issuance.js +3 -8
  18. package/node/wrappers/models/security/Issuance.js.map +1 -1
  19. package/node/wrappers/models/security/Issuance.test.js +16 -8
  20. package/node/wrappers/models/security/Issuance.test.js.map +1 -1
  21. package/node/wrappers/models/security/Issuance.test.ts +10 -2
  22. package/node/wrappers/models/security/Issuance.ts +6 -12
  23. package/node/wrappers/models/security/MortgageBackedSecurity.d.ts +48 -0
  24. package/node/wrappers/models/security/MortgageBackedSecurity.fromPricerInputs.test.d.ts +1 -0
  25. package/node/wrappers/models/security/MortgageBackedSecurity.fromPricerInputs.test.js +97 -0
  26. package/node/wrappers/models/security/MortgageBackedSecurity.fromPricerInputs.test.js.map +1 -0
  27. package/node/wrappers/models/security/MortgageBackedSecurity.fromPricerInputs.test.ts +111 -0
  28. package/node/wrappers/models/security/MortgageBackedSecurity.js +131 -0
  29. package/node/wrappers/models/security/MortgageBackedSecurity.js.map +1 -0
  30. package/node/wrappers/models/security/MortgageBackedSecurity.ts +125 -0
  31. package/node/wrappers/models/security/TIPSBond.d.ts +2 -3
  32. package/node/wrappers/models/security/TIPSBond.js +2 -4
  33. package/node/wrappers/models/security/TIPSBond.js.map +1 -1
  34. package/node/wrappers/models/security/TIPSBond.ts +5 -7
  35. package/node/wrappers/models/security/security.d.ts +39 -12
  36. package/node/wrappers/models/security/security.js +64 -16
  37. package/node/wrappers/models/security/security.js.map +1 -1
  38. package/node/wrappers/models/security/security.test.js +91 -10
  39. package/node/wrappers/models/security/security.test.js.map +1 -1
  40. package/node/wrappers/models/security/security.test.ts +106 -11
  41. package/node/wrappers/models/security/security.ts +70 -17
  42. package/node/wrappers/models/transaction/transaction.d.ts +2 -3
  43. package/node/wrappers/models/transaction/transaction.js +23 -21
  44. package/node/wrappers/models/transaction/transaction.js.map +1 -1
  45. package/node/wrappers/models/transaction/transaction.ts +22 -21
  46. package/node/wrappers/models/transaction/transaction_constructor.test.js +4 -2
  47. package/node/wrappers/models/transaction/transaction_constructor.test.js.map +1 -1
  48. package/node/wrappers/models/transaction/transaction_constructor.test.ts +10 -8
  49. package/node/wrappers/models/utils/date.d.ts +13 -1
  50. package/node/wrappers/models/utils/date.js +26 -1
  51. package/node/wrappers/models/utils/date.js.map +1 -1
  52. package/node/wrappers/models/utils/date.ts +25 -1
  53. package/node/wrappers/services/security-service/security.maturityLadder.test.js +4 -2
  54. package/node/wrappers/services/security-service/security.maturityLadder.test.js.map +1 -1
  55. package/node/wrappers/services/security-service/security.maturityLadder.test.ts +3 -2
  56. package/package.json +1 -1
@@ -2,7 +2,6 @@ import { FieldProto } from "../../../fintekkers/models/position/field_pb";
2
2
  import { SecurityProto } from "../../../fintekkers/models/security/security_pb";
3
3
  import { ZonedDateTime } from "../utils/datetime";
4
4
  import { UUID } from "../utils/uuid";
5
- import { LocalDate } from "../utils/date";
6
5
  import { IdentifierTypeProto } from "../../../fintekkers/models/security/identifier/identifier_type_pb";
7
6
  import { Identifier } from "./identifier";
8
7
  declare class Security {
@@ -38,6 +37,7 @@ declare class Security {
38
37
  * the proto's product_type. Dispatch rules:
39
38
  * - TIPS -> TIPSBond
40
39
  * - TREASURY_FRN -> FloatingRateNote
40
+ * - MORTGAGE_BACKED -> MortgageBackedSecurity
41
41
  * - any other descendant of BOND in hierarchy.json -> BondSecurity
42
42
  * - any descendant of INDEX in hierarchy.json -> IndexSecurity
43
43
  * - everything else (equity, cash, fx, etc.) -> base Security
@@ -56,6 +56,36 @@ declare class Security {
56
56
  * works regardless of how the wrapper was constructed.
57
57
  */
58
58
  isBond(): this is import('./BondSecurity').default;
59
+ /**
60
+ * Type guard: true iff this Security is a MortgageBackedSecurity (a
61
+ * descendant of STRUCTURED_BOND in hierarchy.json — MBS_PASSTHROUGH today,
62
+ * CMBS/ABS/CLO when those leaves become active).
63
+ */
64
+ isMbs(): this is import('./MortgageBackedSecurity').default;
65
+ /**
66
+ * Type guard: true iff this Security is an IndexSecurity (any descendant
67
+ * of INDEX in hierarchy.json — CPI_SERIES, SOFR_SERIES, EQUITY_INDEX, ...).
68
+ */
69
+ isIndex(): this is import('./IndexSecurity').default;
70
+ /**
71
+ * Runtime predicate: true iff this Security wraps a cash currency
72
+ * (product_type == CURRENCY). No dedicated CashSecurity wrapper exists
73
+ * yet so this isn't a TS type-guard — the return is base Security.
74
+ */
75
+ isCash(): boolean;
76
+ /**
77
+ * Runtime predicate: true iff this Security wraps a stock-shape product
78
+ * type (any descendant of STOCK in hierarchy.json — COMMON_STOCK,
79
+ * PREFERRED_STOCK, ADR, ETF). No dedicated EquitySecurity wrapper exists
80
+ * yet so this isn't a TS type-guard — the return is base Security.
81
+ */
82
+ isEquity(): boolean;
83
+ /**
84
+ * Runtime predicate: true iff this Security wraps an FX spot
85
+ * (product_type == FX_SPOT). No dedicated FxSpotSecurity wrapper exists
86
+ * yet so this isn't a TS type-guard — the return is base Security.
87
+ */
88
+ isFxSpot(): boolean;
59
89
  toString(): string;
60
90
  getFields(): FieldProto[];
61
91
  getField(field: FieldProto): any;
@@ -90,20 +120,17 @@ declare class Security {
90
120
  * Returns null on equities/cash/etc. that don't have an issue date set,
91
121
  * rather than throwing — issue date is optional on the base Security.
92
122
  * For bond-specific code paths, prefer narrowing first via isBond() and
93
- * calling BondSecurity.getIssueDate() (which returns LocalDate, not null).
123
+ * calling BondSecurity.getIssueDate() (which is non-nullable on a
124
+ * properly-formed bond).
94
125
  */
95
- getIssueDate(): LocalDate | null;
126
+ getIssueDate(): Date | null;
96
127
  /**
97
- * @deprecated Maturity date is a bond-only concept. On the base Security
98
- * this still throws when unset for backwards compatibility. Prefer
99
- * narrowing first:
100
- *
101
- * if (sec.isBond()) sec.getMaturityDate(); // BondSecurity, returns LocalDate
102
- *
103
- * In a future major version this method will move to BondSecurity only
104
- * and TS will catch the misuse at compile time.
128
+ * Returns the maturity date if set, else null. Maturity date is a
129
+ * bond-only concept; on non-bond securities this returns null rather
130
+ * than throwing. Prefer narrowing first via isBond() for bond-specific
131
+ * code paths.
105
132
  */
106
- getMaturityDate(): LocalDate;
133
+ getMaturityDate(): Date | null;
107
134
  /**
108
135
  * Returns the canonical bond_details sub-message if set, else undefined.
109
136
  * TIPS and FRN extras live in their own tips_extension / frn_extension
@@ -69,6 +69,7 @@ class Security {
69
69
  * the proto's product_type. Dispatch rules:
70
70
  * - TIPS -> TIPSBond
71
71
  * - TREASURY_FRN -> FloatingRateNote
72
+ * - MORTGAGE_BACKED -> MortgageBackedSecurity
72
73
  * - any other descendant of BOND in hierarchy.json -> BondSecurity
73
74
  * - any descendant of INDEX in hierarchy.json -> IndexSecurity
74
75
  * - everything else (equity, cash, fx, etc.) -> base Security
@@ -77,7 +78,7 @@ class Security {
77
78
  const productType = proto.getProductType();
78
79
  const ptName = Object.keys(product_type_pb_1.ProductTypeProto)
79
80
  .find(k => product_type_pb_1.ProductTypeProto[k] === productType);
80
- // TIPS / FRN have dedicated wrappers with extension-specific accessors.
81
+ // TIPS / FRN / MBS have dedicated wrappers with extension-specific accessors.
81
82
  if (productType === product_type_pb_1.ProductTypeProto.TIPS) {
82
83
  const TIPSBond = require('./TIPSBond').default;
83
84
  return new TIPSBond(proto);
@@ -86,6 +87,10 @@ class Security {
86
87
  const FloatingRateNote = require('./FloatingRateNote').default;
87
88
  return new FloatingRateNote(proto);
88
89
  }
90
+ if (productType === product_type_pb_1.ProductTypeProto.MORTGAGE_BACKED) {
91
+ const MortgageBackedSecurity = require('./MortgageBackedSecurity').default;
92
+ return new MortgageBackedSecurity(proto);
93
+ }
89
94
  // Any other BOND descendant -> generic BondSecurity wrapper.
90
95
  if (ptName && (0, product_hierarchy_1.isDescendantOf)(ptName, 'BOND')) {
91
96
  const BondSecurity = require('./BondSecurity').default;
@@ -118,6 +123,56 @@ class Security {
118
123
  return false;
119
124
  return (0, product_hierarchy_1.isDescendantOf)(ptName, 'BOND');
120
125
  }
126
+ /**
127
+ * Type guard: true iff this Security is a MortgageBackedSecurity (a
128
+ * descendant of STRUCTURED_BOND in hierarchy.json — MBS_PASSTHROUGH today,
129
+ * CMBS/ABS/CLO when those leaves become active).
130
+ */
131
+ isMbs() {
132
+ return this.proto.getProductType() === product_type_pb_1.ProductTypeProto.MORTGAGE_BACKED;
133
+ }
134
+ /**
135
+ * Type guard: true iff this Security is an IndexSecurity (any descendant
136
+ * of INDEX in hierarchy.json — CPI_SERIES, SOFR_SERIES, EQUITY_INDEX, ...).
137
+ */
138
+ isIndex() {
139
+ const t = this.proto.getProductType();
140
+ const ptName = Object.keys(product_type_pb_1.ProductTypeProto)
141
+ .find(k => product_type_pb_1.ProductTypeProto[k] === t);
142
+ if (!ptName)
143
+ return false;
144
+ return (0, product_hierarchy_1.isDescendantOf)(ptName, 'INDEX');
145
+ }
146
+ /**
147
+ * Runtime predicate: true iff this Security wraps a cash currency
148
+ * (product_type == CURRENCY). No dedicated CashSecurity wrapper exists
149
+ * yet so this isn't a TS type-guard — the return is base Security.
150
+ */
151
+ isCash() {
152
+ return this.proto.getProductType() === product_type_pb_1.ProductTypeProto.CURRENCY;
153
+ }
154
+ /**
155
+ * Runtime predicate: true iff this Security wraps a stock-shape product
156
+ * type (any descendant of STOCK in hierarchy.json — COMMON_STOCK,
157
+ * PREFERRED_STOCK, ADR, ETF). No dedicated EquitySecurity wrapper exists
158
+ * yet so this isn't a TS type-guard — the return is base Security.
159
+ */
160
+ isEquity() {
161
+ const t = this.proto.getProductType();
162
+ const ptName = Object.keys(product_type_pb_1.ProductTypeProto)
163
+ .find(k => product_type_pb_1.ProductTypeProto[k] === t);
164
+ if (!ptName)
165
+ return false;
166
+ return (0, product_hierarchy_1.isDescendantOf)(ptName, 'STOCK');
167
+ }
168
+ /**
169
+ * Runtime predicate: true iff this Security wraps an FX spot
170
+ * (product_type == FX_SPOT). No dedicated FxSpotSecurity wrapper exists
171
+ * yet so this isn't a TS type-guard — the return is base Security.
172
+ */
173
+ isFxSpot() {
174
+ return this.proto.getProductType() === product_type_pb_1.ProductTypeProto.FX_SPOT;
175
+ }
121
176
  toString() {
122
177
  const ids = this.proto.getIsLink() ? [] : this.proto.getIdentifiersList();
123
178
  const idStr = ids && ids.length > 0
@@ -227,33 +282,26 @@ class Security {
227
282
  * Returns null on equities/cash/etc. that don't have an issue date set,
228
283
  * rather than throwing — issue date is optional on the base Security.
229
284
  * For bond-specific code paths, prefer narrowing first via isBond() and
230
- * calling BondSecurity.getIssueDate() (which returns LocalDate, not null).
285
+ * calling BondSecurity.getIssueDate() (which is non-nullable on a
286
+ * properly-formed bond).
231
287
  */
232
288
  getIssueDate() {
233
289
  this.assertNotLink('issueDate');
234
290
  const bond = this.getBondLikeDetails();
235
291
  const date = bond ? bond.getIssueDate() : undefined;
236
- if (!date)
237
- return null;
238
- return new date_1.LocalDate(date);
292
+ return (0, date_1.localDateProtoToDate)(date);
239
293
  }
240
294
  /**
241
- * @deprecated Maturity date is a bond-only concept. On the base Security
242
- * this still throws when unset for backwards compatibility. Prefer
243
- * narrowing first:
244
- *
245
- * if (sec.isBond()) sec.getMaturityDate(); // BondSecurity, returns LocalDate
246
- *
247
- * In a future major version this method will move to BondSecurity only
248
- * and TS will catch the misuse at compile time.
295
+ * Returns the maturity date if set, else null. Maturity date is a
296
+ * bond-only concept; on non-bond securities this returns null rather
297
+ * than throwing. Prefer narrowing first via isBond() for bond-specific
298
+ * code paths.
249
299
  */
250
300
  getMaturityDate() {
251
301
  this.assertNotLink('maturityDate');
252
302
  const bond = this.getBondLikeDetails();
253
303
  const date = bond ? bond.getMaturityDate() : undefined;
254
- if (!date)
255
- throw new Error("Maturity date is required");
256
- return new date_1.LocalDate(date);
304
+ return (0, date_1.localDateProtoToDate)(date);
257
305
  }
258
306
  /**
259
307
  * Returns the canonical bond_details sub-message if set, else undefined.
@@ -1 +1 @@
1
- {"version":3,"file":"security.js","sourceRoot":"","sources":["security.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["security.ts"],"names":[],"mappings":"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"}
@@ -13,13 +13,16 @@ const security_pb_1 = require("../../../fintekkers/models/security/security_pb")
13
13
  const product_type_pb_1 = require("../../../fintekkers/models/security/product_type_pb");
14
14
  const coupon_frequency_pb_1 = require("../../../fintekkers/models/security/coupon_frequency_pb");
15
15
  const coupon_type_pb_1 = require("../../../fintekkers/models/security/coupon_type_pb");
16
+ const index_type_pb_1 = require("../../../fintekkers/models/security/index/index_type_pb");
16
17
  const security_quantity_type_pb_1 = require("../../../fintekkers/models/security/security_quantity_type_pb");
17
18
  test('test the security wrapper', () => {
18
19
  testSerialization();
19
20
  });
20
21
  function testSerialization() {
21
22
  const security = dummySecurity();
22
- assert(security.getMaturityDate().toDate().getFullYear() == 2026);
23
+ const maturityDate = security.getMaturityDate();
24
+ assert(maturityDate !== null);
25
+ assert(maturityDate.getFullYear() == 2026);
23
26
  }
24
27
  test('equity routes to base Security and isBond() returns false', () => {
25
28
  const equity = dummyEquity();
@@ -43,25 +46,63 @@ test('Security.getIssueDate returns null on equity (no throw)', () => {
43
46
  // explode on per-record post-processing in ui-service.
44
47
  expect(equity.getIssueDate()).toBeNull();
45
48
  });
46
- test('BondSecurity.getIssueDate returns LocalDate (non-nullable) on bond', () => {
49
+ test('BondSecurity.getIssueDate returns Date on bond', () => {
47
50
  const bond = dummyBondSecurity();
48
51
  if (!bond.isBond())
49
52
  throw new Error('test setup: expected bond');
50
53
  const issueDate = bond.getIssueDate();
51
54
  expect(issueDate).not.toBeNull();
52
- expect(issueDate.toDate().getFullYear()).toBe(2021);
55
+ expect(issueDate).toBeInstanceOf(Date);
56
+ expect(issueDate.getFullYear()).toBe(2021);
53
57
  });
54
- test('Security.getMaturityDate still throws on equity (Phase 1 deprecation, not removal)', () => {
58
+ test('Security.getMaturityDate returns null on equity (no throw)', () => {
55
59
  const equity = dummyEquity();
56
- // Behavior preserved deliberately for Phase 1 — callers still get a
57
- // loud error if they don't narrow first. Removal happens in Phase 2.
58
- expect(() => equity.getMaturityDate()).toThrow('Maturity date is required');
60
+ expect(equity.getMaturityDate()).toBeNull();
59
61
  });
60
62
  test('BondSecurity.getMaturityDate works on bond (inherited from Security)', () => {
61
63
  const bond = dummyBondSecurity();
62
64
  if (!bond.isBond())
63
65
  throw new Error('test setup: expected bond');
64
- expect(bond.getMaturityDate().toDate().getFullYear()).toBe(2026);
66
+ const maturityDate = bond.getMaturityDate();
67
+ expect(maturityDate).not.toBeNull();
68
+ expect(maturityDate).toBeInstanceOf(Date);
69
+ expect(maturityDate.getFullYear()).toBe(2026);
70
+ });
71
+ test('isMbs(): true on MORTGAGE_BACKED, narrows to MortgageBackedSecurity', () => {
72
+ const mbs = dummyMbs();
73
+ expect(mbs.isMbs()).toBe(true);
74
+ if (mbs.isMbs()) {
75
+ // Inside the narrowed branch TS knows mbs: MortgageBackedSecurity.
76
+ expect(mbs.getPoolNumber()).toBe('FN AS1234');
77
+ }
78
+ // Non-MBS bonds return false.
79
+ expect(dummyBondSecurity().isMbs()).toBe(false);
80
+ expect(dummyEquity().isMbs()).toBe(false);
81
+ });
82
+ test('isIndex(): true on EQUITY_INDEX / CPI_SERIES, narrows to IndexSecurity', () => {
83
+ const idx = dummyIndex();
84
+ expect(idx.isIndex()).toBe(true);
85
+ if (idx.isIndex()) {
86
+ // Inside the narrowed branch TS knows idx: IndexSecurity.
87
+ expect(idx.getIndexType()).toBe(index_type_pb_1.IndexTypeProto.CPI_U);
88
+ }
89
+ expect(dummyBondSecurity().isIndex()).toBe(false);
90
+ expect(dummyEquity().isIndex()).toBe(false);
91
+ });
92
+ test('isCash(): runtime predicate, true on CURRENCY only', () => {
93
+ expect(dummyCash().isCash()).toBe(true);
94
+ expect(dummyBondSecurity().isCash()).toBe(false);
95
+ expect(dummyEquity().isCash()).toBe(false);
96
+ });
97
+ test('isEquity(): runtime predicate, true on STOCK descendants', () => {
98
+ expect(dummyEquity().isEquity()).toBe(true);
99
+ expect(dummyBondSecurity().isEquity()).toBe(false);
100
+ expect(dummyCash().isEquity()).toBe(false);
101
+ });
102
+ test('isFxSpot(): runtime predicate, true on FX_SPOT only', () => {
103
+ expect(dummyFxSpot().isFxSpot()).toBe(true);
104
+ expect(dummyCash().isFxSpot()).toBe(false);
105
+ expect(dummyEquity().isFxSpot()).toBe(false);
65
106
  });
66
107
  function dummySecurity() {
67
108
  const bond = new security_pb_1.BondDetailsProto()
@@ -100,8 +141,7 @@ function dummyBondSecurity() {
100
141
  }
101
142
  function dummyEquity() {
102
143
  // Equity has no maturity / issue date in the proto, exercising the
103
- // null-return behavior on getIssueDate and the throw-on-missing
104
- // behavior on getMaturityDate.
144
+ // null-return behavior on the date accessors.
105
145
  return security_1.default.create(new security_pb_1.SecurityProto()
106
146
  .setObjectClass('Security').setVersion('0.0.1').setUuid(uuid_1.UUID.random().toUUIDProto())
107
147
  .setProductType(product_type_pb_1.ProductTypeProto.COMMON_STOCK)
@@ -109,4 +149,45 @@ function dummyEquity() {
109
149
  .setIssuerName("Dummy issuer Inc.")
110
150
  .setDescription("Dummy equity"));
111
151
  }
152
+ function dummyMbs() {
153
+ const bond = new security_pb_1.BondDetailsProto()
154
+ .setCouponRate(new decimal_value_pb_1.DecimalValueProto().setArbitraryPrecisionValue('0.04'))
155
+ .setCouponFrequency(coupon_frequency_pb_1.CouponFrequencyProto.MONTHLY)
156
+ .setCouponType(coupon_type_pb_1.CouponTypeProto.FIXED)
157
+ .setFaceValue(new decimal_value_pb_1.DecimalValueProto().setArbitraryPrecisionValue('250000000'))
158
+ .setIssueDate(new local_date_pb_1.LocalDateProto().setYear(2024).setMonth(1).setDay(1))
159
+ .setMaturityDate(new local_date_pb_1.LocalDateProto().setYear(2054).setMonth(1).setDay(1));
160
+ const proto = new security_pb_1.SecurityProto()
161
+ .setObjectClass('Security').setVersion('0.0.1').setUuid(uuid_1.UUID.random().toUUIDProto())
162
+ .setProductType(product_type_pb_1.ProductTypeProto.MORTGAGE_BACKED)
163
+ .setAssetClass("FixedIncome")
164
+ .setIssuerName("FNMA")
165
+ .setBondDetails(bond);
166
+ // Pool number lives on the mbs_extension sub-message.
167
+ const MbsExtension = require('../../../fintekkers/models/security/security_pb').MbsExtensionProto;
168
+ proto.setMbsExtension(new MbsExtension().setPoolNumber('FN AS1234'));
169
+ return security_1.default.create(proto);
170
+ }
171
+ function dummyIndex() {
172
+ return security_1.default.create(new security_pb_1.SecurityProto()
173
+ .setObjectClass('Security').setVersion('0.0.1').setUuid(uuid_1.UUID.random().toUUIDProto())
174
+ .setProductType(product_type_pb_1.ProductTypeProto.CPI_SERIES)
175
+ .setAssetClass("Index")
176
+ .setIssuerName("BLS")
177
+ .setIndexDetails(new security_pb_1.IndexDetailsProto().setIndexType(index_type_pb_1.IndexTypeProto.CPI_U)));
178
+ }
179
+ function dummyCash() {
180
+ return security_1.default.create(new security_pb_1.SecurityProto()
181
+ .setObjectClass('Security').setVersion('0.0.1').setUuid(uuid_1.UUID.random().toUUIDProto())
182
+ .setProductType(product_type_pb_1.ProductTypeProto.CURRENCY)
183
+ .setAssetClass("Cash")
184
+ .setIssuerName("Federal Reserve"));
185
+ }
186
+ function dummyFxSpot() {
187
+ return security_1.default.create(new security_pb_1.SecurityProto()
188
+ .setObjectClass('Security').setVersion('0.0.1').setUuid(uuid_1.UUID.random().toUUIDProto())
189
+ .setProductType(product_type_pb_1.ProductTypeProto.FX_SPOT)
190
+ .setAssetClass("FX")
191
+ .setIssuerName("FX"));
192
+ }
112
193
  //# sourceMappingURL=security.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"security.test.js","sourceRoot":"","sources":["security.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"security.test.js","sourceRoot":"","sources":["security.test.ts"],"names":[],"mappings":"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"}
@@ -4,12 +4,15 @@ import { UUID } from '../utils/uuid';
4
4
  import assert = require('assert');
5
5
  import Security from './security';
6
6
  import BondSecurity from './BondSecurity';
7
+ import IndexSecurity from './IndexSecurity';
8
+ import MortgageBackedSecurity from './MortgageBackedSecurity';
7
9
 
8
10
  import { DecimalValueProto } from '../../../fintekkers/models/util/decimal_value_pb';
9
- import { SecurityProto, BondDetailsProto } from '../../../fintekkers/models/security/security_pb';
11
+ import { SecurityProto, BondDetailsProto, IndexDetailsProto } from '../../../fintekkers/models/security/security_pb';
10
12
  import { ProductTypeProto } from "../../../fintekkers/models/security/product_type_pb";
11
13
  import { CouponFrequencyProto } from '../../../fintekkers/models/security/coupon_frequency_pb';
12
14
  import { CouponTypeProto } from '../../../fintekkers/models/security/coupon_type_pb';
15
+ import { IndexTypeProto } from '../../../fintekkers/models/security/index/index_type_pb';
13
16
  import { SecurityQuantityTypeProto } from '../../../fintekkers/models/security/security_quantity_type_pb';
14
17
 
15
18
 
@@ -20,7 +23,9 @@ test('test the security wrapper', () => {
20
23
  function testSerialization(): void {
21
24
  const security = dummySecurity();
22
25
 
23
- assert(security.getMaturityDate().toDate().getFullYear() == 2026);
26
+ const maturityDate = security.getMaturityDate();
27
+ assert(maturityDate !== null);
28
+ assert(maturityDate.getFullYear() == 2026);
24
29
  }
25
30
 
26
31
  test('equity routes to base Security and isBond() returns false', () => {
@@ -48,25 +53,68 @@ test('Security.getIssueDate returns null on equity (no throw)', () => {
48
53
  expect(equity.getIssueDate()).toBeNull();
49
54
  });
50
55
 
51
- test('BondSecurity.getIssueDate returns LocalDate (non-nullable) on bond', () => {
56
+ test('BondSecurity.getIssueDate returns Date on bond', () => {
52
57
  const bond = dummyBondSecurity();
53
58
  if (!bond.isBond()) throw new Error('test setup: expected bond');
54
59
  const issueDate = bond.getIssueDate();
55
60
  expect(issueDate).not.toBeNull();
56
- expect(issueDate.toDate().getFullYear()).toBe(2021);
61
+ expect(issueDate).toBeInstanceOf(Date);
62
+ expect(issueDate!.getFullYear()).toBe(2021);
57
63
  });
58
64
 
59
- test('Security.getMaturityDate still throws on equity (Phase 1 deprecation, not removal)', () => {
65
+ test('Security.getMaturityDate returns null on equity (no throw)', () => {
60
66
  const equity = dummyEquity();
61
- // Behavior preserved deliberately for Phase 1 — callers still get a
62
- // loud error if they don't narrow first. Removal happens in Phase 2.
63
- expect(() => equity.getMaturityDate()).toThrow('Maturity date is required');
67
+ expect(equity.getMaturityDate()).toBeNull();
64
68
  });
65
69
 
66
70
  test('BondSecurity.getMaturityDate works on bond (inherited from Security)', () => {
67
71
  const bond = dummyBondSecurity();
68
72
  if (!bond.isBond()) throw new Error('test setup: expected bond');
69
- expect(bond.getMaturityDate().toDate().getFullYear()).toBe(2026);
73
+ const maturityDate = bond.getMaturityDate();
74
+ expect(maturityDate).not.toBeNull();
75
+ expect(maturityDate).toBeInstanceOf(Date);
76
+ expect(maturityDate!.getFullYear()).toBe(2026);
77
+ });
78
+
79
+ test('isMbs(): true on MORTGAGE_BACKED, narrows to MortgageBackedSecurity', () => {
80
+ const mbs = dummyMbs();
81
+ expect(mbs.isMbs()).toBe(true);
82
+ if (mbs.isMbs()) {
83
+ // Inside the narrowed branch TS knows mbs: MortgageBackedSecurity.
84
+ expect(mbs.getPoolNumber()).toBe('FN AS1234');
85
+ }
86
+ // Non-MBS bonds return false.
87
+ expect(dummyBondSecurity().isMbs()).toBe(false);
88
+ expect(dummyEquity().isMbs()).toBe(false);
89
+ });
90
+
91
+ test('isIndex(): true on EQUITY_INDEX / CPI_SERIES, narrows to IndexSecurity', () => {
92
+ const idx = dummyIndex();
93
+ expect(idx.isIndex()).toBe(true);
94
+ if (idx.isIndex()) {
95
+ // Inside the narrowed branch TS knows idx: IndexSecurity.
96
+ expect(idx.getIndexType()).toBe(IndexTypeProto.CPI_U);
97
+ }
98
+ expect(dummyBondSecurity().isIndex()).toBe(false);
99
+ expect(dummyEquity().isIndex()).toBe(false);
100
+ });
101
+
102
+ test('isCash(): runtime predicate, true on CURRENCY only', () => {
103
+ expect(dummyCash().isCash()).toBe(true);
104
+ expect(dummyBondSecurity().isCash()).toBe(false);
105
+ expect(dummyEquity().isCash()).toBe(false);
106
+ });
107
+
108
+ test('isEquity(): runtime predicate, true on STOCK descendants', () => {
109
+ expect(dummyEquity().isEquity()).toBe(true);
110
+ expect(dummyBondSecurity().isEquity()).toBe(false);
111
+ expect(dummyCash().isEquity()).toBe(false);
112
+ });
113
+
114
+ test('isFxSpot(): runtime predicate, true on FX_SPOT only', () => {
115
+ expect(dummyFxSpot().isFxSpot()).toBe(true);
116
+ expect(dummyCash().isFxSpot()).toBe(false);
117
+ expect(dummyEquity().isFxSpot()).toBe(false);
70
118
  });
71
119
 
72
120
  function dummySecurity() {
@@ -110,8 +158,7 @@ function dummyBondSecurity() {
110
158
 
111
159
  function dummyEquity() {
112
160
  // Equity has no maturity / issue date in the proto, exercising the
113
- // null-return behavior on getIssueDate and the throw-on-missing
114
- // behavior on getMaturityDate.
161
+ // null-return behavior on the date accessors.
115
162
  return Security.create(new SecurityProto()
116
163
  .setObjectClass('Security').setVersion('0.0.1').setUuid(UUID.random().toUUIDProto())
117
164
  .setProductType(ProductTypeProto.COMMON_STOCK)
@@ -121,3 +168,51 @@ function dummyEquity() {
121
168
  );
122
169
  }
123
170
 
171
+ function dummyMbs() {
172
+ const bond = new BondDetailsProto()
173
+ .setCouponRate(new DecimalValueProto().setArbitraryPrecisionValue('0.04'))
174
+ .setCouponFrequency(CouponFrequencyProto.MONTHLY)
175
+ .setCouponType(CouponTypeProto.FIXED)
176
+ .setFaceValue(new DecimalValueProto().setArbitraryPrecisionValue('250000000'))
177
+ .setIssueDate(new LocalDateProto().setYear(2024).setMonth(1).setDay(1))
178
+ .setMaturityDate(new LocalDateProto().setYear(2054).setMonth(1).setDay(1));
179
+ const proto = new SecurityProto()
180
+ .setObjectClass('Security').setVersion('0.0.1').setUuid(UUID.random().toUUIDProto())
181
+ .setProductType(ProductTypeProto.MORTGAGE_BACKED)
182
+ .setAssetClass("FixedIncome")
183
+ .setIssuerName("FNMA")
184
+ .setBondDetails(bond);
185
+ // Pool number lives on the mbs_extension sub-message.
186
+ const MbsExtension = require('../../../fintekkers/models/security/security_pb').MbsExtensionProto;
187
+ proto.setMbsExtension(new MbsExtension().setPoolNumber('FN AS1234'));
188
+ return Security.create(proto);
189
+ }
190
+
191
+ function dummyIndex() {
192
+ return Security.create(new SecurityProto()
193
+ .setObjectClass('Security').setVersion('0.0.1').setUuid(UUID.random().toUUIDProto())
194
+ .setProductType(ProductTypeProto.CPI_SERIES)
195
+ .setAssetClass("Index")
196
+ .setIssuerName("BLS")
197
+ .setIndexDetails(new IndexDetailsProto().setIndexType(IndexTypeProto.CPI_U))
198
+ );
199
+ }
200
+
201
+ function dummyCash() {
202
+ return Security.create(new SecurityProto()
203
+ .setObjectClass('Security').setVersion('0.0.1').setUuid(UUID.random().toUUIDProto())
204
+ .setProductType(ProductTypeProto.CURRENCY)
205
+ .setAssetClass("Cash")
206
+ .setIssuerName("Federal Reserve")
207
+ );
208
+ }
209
+
210
+ function dummyFxSpot() {
211
+ return Security.create(new SecurityProto()
212
+ .setObjectClass('Security').setVersion('0.0.1').setUuid(UUID.random().toUUIDProto())
213
+ .setProductType(ProductTypeProto.FX_SPOT)
214
+ .setAssetClass("FX")
215
+ .setIssuerName("FX")
216
+ );
217
+ }
218
+