@fintekkers/ledger-models 0.4.2 → 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.
- package/node/wrappers/models/security/BondSecurity.d.ts +5 -21
- package/node/wrappers/models/security/BondSecurity.fromPricerInputs.test.js +17 -11
- package/node/wrappers/models/security/BondSecurity.fromPricerInputs.test.js.map +1 -1
- package/node/wrappers/models/security/BondSecurity.fromPricerInputs.test.ts +17 -11
- package/node/wrappers/models/security/BondSecurity.js +15 -32
- package/node/wrappers/models/security/BondSecurity.js.map +1 -1
- package/node/wrappers/models/security/BondSecurity.ts +18 -37
- package/node/wrappers/models/security/Issuance.d.ts +3 -5
- package/node/wrappers/models/security/Issuance.js +3 -8
- package/node/wrappers/models/security/Issuance.js.map +1 -1
- package/node/wrappers/models/security/Issuance.test.js +16 -8
- package/node/wrappers/models/security/Issuance.test.js.map +1 -1
- package/node/wrappers/models/security/Issuance.test.ts +10 -2
- package/node/wrappers/models/security/Issuance.ts +6 -12
- package/node/wrappers/models/security/MortgageBackedSecurity.fromPricerInputs.test.js +11 -7
- package/node/wrappers/models/security/MortgageBackedSecurity.fromPricerInputs.test.js.map +1 -1
- package/node/wrappers/models/security/MortgageBackedSecurity.fromPricerInputs.test.ts +12 -8
- package/node/wrappers/models/security/TIPSBond.d.ts +2 -3
- package/node/wrappers/models/security/TIPSBond.js +2 -4
- package/node/wrappers/models/security/TIPSBond.js.map +1 -1
- package/node/wrappers/models/security/TIPSBond.ts +5 -7
- package/node/wrappers/models/security/security.d.ts +38 -12
- package/node/wrappers/models/security/security.js +58 -15
- package/node/wrappers/models/security/security.js.map +1 -1
- package/node/wrappers/models/security/security.test.js +91 -10
- package/node/wrappers/models/security/security.test.js.map +1 -1
- package/node/wrappers/models/security/security.test.ts +106 -11
- package/node/wrappers/models/security/security.ts +64 -16
- package/node/wrappers/models/transaction/transaction.d.ts +2 -3
- package/node/wrappers/models/transaction/transaction.js +23 -21
- package/node/wrappers/models/transaction/transaction.js.map +1 -1
- package/node/wrappers/models/transaction/transaction.ts +22 -21
- package/node/wrappers/models/transaction/transaction_constructor.test.js +4 -2
- package/node/wrappers/models/transaction/transaction_constructor.test.js.map +1 -1
- package/node/wrappers/models/transaction/transaction_constructor.test.ts +10 -8
- package/node/wrappers/models/utils/date.d.ts +13 -1
- package/node/wrappers/models/utils/date.js +26 -1
- package/node/wrappers/models/utils/date.js.map +1 -1
- package/node/wrappers/models/utils/date.ts +25 -1
- package/node/wrappers/services/security-service/security.maturityLadder.test.js +4 -2
- package/node/wrappers/services/security-service/security.maturityLadder.test.js.map +1 -1
- package/node/wrappers/services/security-service/security.maturityLadder.test.ts +3 -2
- package/package.json +1 -1
|
@@ -11,11 +11,11 @@ const product_type_pb_1 = require("../../../fintekkers/models/security/product_t
|
|
|
11
11
|
const coupon_type_pb_1 = require("../../../fintekkers/models/security/coupon_type_pb");
|
|
12
12
|
const coupon_frequency_pb_1 = require("../../../fintekkers/models/security/coupon_frequency_pb");
|
|
13
13
|
const agency_pb_1 = require("../../../fintekkers/models/security/bond/agency_pb");
|
|
14
|
-
const date_1 = require("../utils/date");
|
|
15
|
-
const local_date_pb_1 = require("../../../fintekkers/models/util/local_date_pb");
|
|
16
14
|
const decimal_js_1 = require("decimal.js");
|
|
17
15
|
function makeDate(y, m, d) {
|
|
18
|
-
|
|
16
|
+
const date = new Date(y, m - 1, d);
|
|
17
|
+
date.setHours(0, 0, 0, 0);
|
|
18
|
+
return date;
|
|
19
19
|
}
|
|
20
20
|
const baseInputs = {
|
|
21
21
|
faceValue: new decimal_js_1.Decimal('250000000'),
|
|
@@ -75,10 +75,14 @@ test('MortgageBackedSecurity typed accessors read back the expected values', ()
|
|
|
75
75
|
const proto = MortgageBackedSecurity_1.default.fromPricerInputs(mbsInputs);
|
|
76
76
|
const sec = security_1.default.create(proto);
|
|
77
77
|
// Bond-side checks (inherited from BondSecurity).
|
|
78
|
-
expect(sec.getCouponRate().
|
|
79
|
-
expect(sec.getFaceValue().
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
expect(sec.getCouponRate().equals(new decimal_js_1.Decimal('0.04'))).toBe(true);
|
|
79
|
+
expect(sec.getFaceValue().equals(new decimal_js_1.Decimal('250000000'))).toBe(true);
|
|
80
|
+
const issueDate = sec.getIssueDate();
|
|
81
|
+
const maturityDate = sec.getMaturityDate();
|
|
82
|
+
expect(issueDate).toBeInstanceOf(Date);
|
|
83
|
+
expect(maturityDate).toBeInstanceOf(Date);
|
|
84
|
+
expect(issueDate.getFullYear()).toBe(2024);
|
|
85
|
+
expect(maturityDate.getFullYear()).toBe(2054);
|
|
82
86
|
// MBS-specific accessor checks.
|
|
83
87
|
expect(sec.getPoolNumber()).toBe('FN AS1234');
|
|
84
88
|
expect(sec.getAgency()).toBe(agency_pb_1.AgencyProto.FNMA);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MortgageBackedSecurity.fromPricerInputs.test.js","sourceRoot":"","sources":["MortgageBackedSecurity.fromPricerInputs.test.ts"],"names":[],"mappings":";;;;;AAAA,0DAAkC;AAClC,kEAA0C;AAC1C,sFAA8D;AAC9D,iFAAgF;AAChF,yFAAuF;AACvF,uFAAqF;AACrF,iGAA+F;AAC/F,kFAAiF;AACjF,
|
|
1
|
+
{"version":3,"file":"MortgageBackedSecurity.fromPricerInputs.test.js","sourceRoot":"","sources":["MortgageBackedSecurity.fromPricerInputs.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,12 +6,12 @@ import { ProductTypeProto } from '../../../fintekkers/models/security/product_ty
|
|
|
6
6
|
import { CouponTypeProto } from '../../../fintekkers/models/security/coupon_type_pb';
|
|
7
7
|
import { CouponFrequencyProto } from '../../../fintekkers/models/security/coupon_frequency_pb';
|
|
8
8
|
import { AgencyProto } from '../../../fintekkers/models/security/bond/agency_pb';
|
|
9
|
-
import { LocalDate } from '../utils/date';
|
|
10
|
-
import { LocalDateProto } from '../../../fintekkers/models/util/local_date_pb';
|
|
11
9
|
import { Decimal } from 'decimal.js';
|
|
12
10
|
|
|
13
|
-
function makeDate(y: number, m: number, d: number):
|
|
14
|
-
|
|
11
|
+
function makeDate(y: number, m: number, d: number): Date {
|
|
12
|
+
const date = new Date(y, m - 1, d);
|
|
13
|
+
date.setHours(0, 0, 0, 0);
|
|
14
|
+
return date;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
const baseInputs = {
|
|
@@ -89,10 +89,14 @@ test('MortgageBackedSecurity typed accessors read back the expected values', ()
|
|
|
89
89
|
const sec = Security.create(proto) as MortgageBackedSecurity;
|
|
90
90
|
|
|
91
91
|
// Bond-side checks (inherited from BondSecurity).
|
|
92
|
-
expect(sec.getCouponRate()
|
|
93
|
-
expect(sec.getFaceValue()
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
expect(sec.getCouponRate()!.equals(new Decimal('0.04'))).toBe(true);
|
|
93
|
+
expect(sec.getFaceValue()!.equals(new Decimal('250000000'))).toBe(true);
|
|
94
|
+
const issueDate = sec.getIssueDate();
|
|
95
|
+
const maturityDate = sec.getMaturityDate();
|
|
96
|
+
expect(issueDate).toBeInstanceOf(Date);
|
|
97
|
+
expect(maturityDate).toBeInstanceOf(Date);
|
|
98
|
+
expect(issueDate!.getFullYear()).toBe(2024);
|
|
99
|
+
expect(maturityDate!.getFullYear()).toBe(2054);
|
|
96
100
|
|
|
97
101
|
// MBS-specific accessor checks.
|
|
98
102
|
expect(sec.getPoolNumber()).toBe('FN AS1234');
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import BondSecurity, { BondPricerInputs } from './BondSecurity';
|
|
2
2
|
import { SecurityProto } from '../../../fintekkers/models/security/security_pb';
|
|
3
3
|
import { IndexTypeProto } from '../../../fintekkers/models/security/index/index_type_pb';
|
|
4
|
-
import { LocalDate } from '../utils/date';
|
|
5
4
|
import { Decimal } from 'decimal.js';
|
|
6
5
|
/**
|
|
7
6
|
* TIPS-specific accessors layered on top of BondSecurity. The inflation
|
|
@@ -14,7 +13,7 @@ declare class TIPSBond extends BondSecurity {
|
|
|
14
13
|
/** Base CPI value at issue, used to scale inflation-adjusted principal. */
|
|
15
14
|
getBaseCpi(): Decimal | null;
|
|
16
15
|
/** Reference date for the base CPI fixing. */
|
|
17
|
-
getIndexDate():
|
|
16
|
+
getIndexDate(): Date | null;
|
|
18
17
|
/** Which inflation index drives accruals (CPI_U on US TIPS). */
|
|
19
18
|
getInflationIndexType(): IndexTypeProto;
|
|
20
19
|
/**
|
|
@@ -23,7 +22,7 @@ declare class TIPSBond extends BondSecurity {
|
|
|
23
22
|
*/
|
|
24
23
|
static fromPricerInputs(args: BondPricerInputs & {
|
|
25
24
|
baseCpi: Decimal;
|
|
26
|
-
indexDate:
|
|
25
|
+
indexDate: Date;
|
|
27
26
|
inflationIndexType: IndexTypeProto;
|
|
28
27
|
}): SecurityProto;
|
|
29
28
|
}
|
|
@@ -54,9 +54,7 @@ class TIPSBond extends BondSecurity_1.default {
|
|
|
54
54
|
getIndexDate() {
|
|
55
55
|
const ext = this.getTipsExtension();
|
|
56
56
|
const d = ext ? ext.getIndexDate() : undefined;
|
|
57
|
-
|
|
58
|
-
return null;
|
|
59
|
-
return new date_1.LocalDate(d);
|
|
57
|
+
return (0, date_1.localDateProtoToDate)(d);
|
|
60
58
|
}
|
|
61
59
|
/** Which inflation index drives accruals (CPI_U on US TIPS). */
|
|
62
60
|
getInflationIndexType() {
|
|
@@ -71,7 +69,7 @@ class TIPSBond extends BondSecurity_1.default {
|
|
|
71
69
|
const bond = (0, BondSecurity_1.buildBondDetails)(args);
|
|
72
70
|
const tips = new security_pb_1.TipsExtensionProto()
|
|
73
71
|
.setBaseCpi((0, BondSecurity_1.decimalToProto)(args.baseCpi))
|
|
74
|
-
.setIndexDate((0,
|
|
72
|
+
.setIndexDate((0, date_1.dateToLocalDateProto)(args.indexDate))
|
|
75
73
|
.setInflationIndexType(args.inflationIndexType);
|
|
76
74
|
return new security_pb_1.SecurityProto()
|
|
77
75
|
.setProductType(product_type_pb_1.ProductTypeProto.TIPS)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TIPSBond.js","sourceRoot":"","sources":["TIPSBond.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+
|
|
1
|
+
{"version":3,"file":"TIPSBond.js","sourceRoot":"","sources":["TIPSBond.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAIwB;AACxB,iFAAoG;AACpG,yFAAuF;AACvF,2FAAyF;AACzF,wCAA2E;AAC3E,2CAAqC;AAErC;;;;GAIG;AACH,MAAM,QAAS,SAAQ,sBAAY;IACjC,YAAY,KAAoB;QAC9B,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;IAEO,gBAAgB;;QACtB,OAAO,MAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,mCAAI,SAAS,CAAC;IACpD,CAAC;IAED,2EAA2E;IAC3E,UAAU;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,OAAO,IAAI,oBAAO,CAAC,CAAC,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,8CAA8C;IAC9C,YAAY;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/C,OAAO,IAAA,2BAAoB,EAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,gEAAgE;IAChE,qBAAqB;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,8BAAc,CAAC,kBAAkB,CAAC;IAC/E,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAIvB;QACC,MAAM,IAAI,GAAG,IAAA,+BAAgB,EAAC,IAAI,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,gCAAkB,EAAE;aAClC,UAAU,CAAC,IAAA,6BAAc,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACxC,YAAY,CAAC,IAAA,2BAAoB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAClD,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClD,OAAO,IAAI,2BAAa,EAAE;aACvB,cAAc,CAAC,kCAAgB,CAAC,IAAI,CAAC;aACrC,cAAc,CAAC,IAAI,CAAC;aACpB,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF;AAED,kBAAe,QAAQ,CAAC"}
|
|
@@ -2,12 +2,11 @@ import BondSecurity, {
|
|
|
2
2
|
BondPricerInputs,
|
|
3
3
|
buildBondDetails,
|
|
4
4
|
decimalToProto,
|
|
5
|
-
localDateToProto,
|
|
6
5
|
} from './BondSecurity';
|
|
7
6
|
import { SecurityProto, TipsExtensionProto } from '../../../fintekkers/models/security/security_pb';
|
|
8
7
|
import { ProductTypeProto } from '../../../fintekkers/models/security/product_type_pb';
|
|
9
8
|
import { IndexTypeProto } from '../../../fintekkers/models/security/index/index_type_pb';
|
|
10
|
-
import {
|
|
9
|
+
import { dateToLocalDateProto, localDateProtoToDate } from '../utils/date';
|
|
11
10
|
import { Decimal } from 'decimal.js';
|
|
12
11
|
|
|
13
12
|
/**
|
|
@@ -33,11 +32,10 @@ class TIPSBond extends BondSecurity {
|
|
|
33
32
|
}
|
|
34
33
|
|
|
35
34
|
/** Reference date for the base CPI fixing. */
|
|
36
|
-
getIndexDate():
|
|
35
|
+
getIndexDate(): Date | null {
|
|
37
36
|
const ext = this.getTipsExtension();
|
|
38
37
|
const d = ext ? ext.getIndexDate() : undefined;
|
|
39
|
-
|
|
40
|
-
return new LocalDate(d);
|
|
38
|
+
return localDateProtoToDate(d);
|
|
41
39
|
}
|
|
42
40
|
|
|
43
41
|
/** Which inflation index drives accruals (CPI_U on US TIPS). */
|
|
@@ -52,13 +50,13 @@ class TIPSBond extends BondSecurity {
|
|
|
52
50
|
*/
|
|
53
51
|
static fromPricerInputs(args: BondPricerInputs & {
|
|
54
52
|
baseCpi: Decimal;
|
|
55
|
-
indexDate:
|
|
53
|
+
indexDate: Date;
|
|
56
54
|
inflationIndexType: IndexTypeProto;
|
|
57
55
|
}): SecurityProto {
|
|
58
56
|
const bond = buildBondDetails(args);
|
|
59
57
|
const tips = new TipsExtensionProto()
|
|
60
58
|
.setBaseCpi(decimalToProto(args.baseCpi))
|
|
61
|
-
.setIndexDate(
|
|
59
|
+
.setIndexDate(dateToLocalDateProto(args.indexDate))
|
|
62
60
|
.setInflationIndexType(args.inflationIndexType);
|
|
63
61
|
return new SecurityProto()
|
|
64
62
|
.setProductType(ProductTypeProto.TIPS)
|
|
@@ -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 {
|
|
@@ -57,6 +56,36 @@ declare class Security {
|
|
|
57
56
|
* works regardless of how the wrapper was constructed.
|
|
58
57
|
*/
|
|
59
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;
|
|
60
89
|
toString(): string;
|
|
61
90
|
getFields(): FieldProto[];
|
|
62
91
|
getField(field: FieldProto): any;
|
|
@@ -91,20 +120,17 @@ declare class Security {
|
|
|
91
120
|
* Returns null on equities/cash/etc. that don't have an issue date set,
|
|
92
121
|
* rather than throwing — issue date is optional on the base Security.
|
|
93
122
|
* For bond-specific code paths, prefer narrowing first via isBond() and
|
|
94
|
-
* calling BondSecurity.getIssueDate() (which
|
|
123
|
+
* calling BondSecurity.getIssueDate() (which is non-nullable on a
|
|
124
|
+
* properly-formed bond).
|
|
95
125
|
*/
|
|
96
|
-
getIssueDate():
|
|
126
|
+
getIssueDate(): Date | null;
|
|
97
127
|
/**
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
* narrowing first
|
|
101
|
-
*
|
|
102
|
-
* if (sec.isBond()) sec.getMaturityDate(); // BondSecurity, returns LocalDate
|
|
103
|
-
*
|
|
104
|
-
* In a future major version this method will move to BondSecurity only
|
|
105
|
-
* 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.
|
|
106
132
|
*/
|
|
107
|
-
getMaturityDate():
|
|
133
|
+
getMaturityDate(): Date | null;
|
|
108
134
|
/**
|
|
109
135
|
* Returns the canonical bond_details sub-message if set, else undefined.
|
|
110
136
|
* TIPS and FRN extras live in their own tips_extension / frn_extension
|
|
@@ -123,6 +123,56 @@ class Security {
|
|
|
123
123
|
return false;
|
|
124
124
|
return (0, product_hierarchy_1.isDescendantOf)(ptName, 'BOND');
|
|
125
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
|
+
}
|
|
126
176
|
toString() {
|
|
127
177
|
const ids = this.proto.getIsLink() ? [] : this.proto.getIdentifiersList();
|
|
128
178
|
const idStr = ids && ids.length > 0
|
|
@@ -232,33 +282,26 @@ class Security {
|
|
|
232
282
|
* Returns null on equities/cash/etc. that don't have an issue date set,
|
|
233
283
|
* rather than throwing — issue date is optional on the base Security.
|
|
234
284
|
* For bond-specific code paths, prefer narrowing first via isBond() and
|
|
235
|
-
* calling BondSecurity.getIssueDate() (which
|
|
285
|
+
* calling BondSecurity.getIssueDate() (which is non-nullable on a
|
|
286
|
+
* properly-formed bond).
|
|
236
287
|
*/
|
|
237
288
|
getIssueDate() {
|
|
238
289
|
this.assertNotLink('issueDate');
|
|
239
290
|
const bond = this.getBondLikeDetails();
|
|
240
291
|
const date = bond ? bond.getIssueDate() : undefined;
|
|
241
|
-
|
|
242
|
-
return null;
|
|
243
|
-
return new date_1.LocalDate(date);
|
|
292
|
+
return (0, date_1.localDateProtoToDate)(date);
|
|
244
293
|
}
|
|
245
294
|
/**
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
* narrowing first
|
|
249
|
-
*
|
|
250
|
-
* if (sec.isBond()) sec.getMaturityDate(); // BondSecurity, returns LocalDate
|
|
251
|
-
*
|
|
252
|
-
* In a future major version this method will move to BondSecurity only
|
|
253
|
-
* 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.
|
|
254
299
|
*/
|
|
255
300
|
getMaturityDate() {
|
|
256
301
|
this.assertNotLink('maturityDate');
|
|
257
302
|
const bond = this.getBondLikeDetails();
|
|
258
303
|
const date = bond ? bond.getMaturityDate() : undefined;
|
|
259
|
-
|
|
260
|
-
throw new Error("Maturity date is required");
|
|
261
|
-
return new date_1.LocalDate(date);
|
|
304
|
+
return (0, date_1.localDateProtoToDate)(date);
|
|
262
305
|
}
|
|
263
306
|
/**
|
|
264
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":";;AAAA,2EAA0E;AAC1E,iFAAgF;AAGhF,gDAAkD;AAClD,wCAAqC;AACrC,
|
|
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
|
-
|
|
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
|
|
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
|
|
55
|
+
expect(issueDate).toBeInstanceOf(Date);
|
|
56
|
+
expect(issueDate.getFullYear()).toBe(2021);
|
|
53
57
|
});
|
|
54
|
-
test('Security.getMaturityDate
|
|
58
|
+
test('Security.getMaturityDate returns null on equity (no throw)', () => {
|
|
55
59
|
const equity = dummyEquity();
|
|
56
|
-
|
|
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
|
-
|
|
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
|
|
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":";;;;;AAAA,iFAA+E;AAC/E,wCAAqC;AAErC,iCAAkC;AAClC,0DAAkC;AAClC,kEAA0C;
|
|
1
|
+
{"version":3,"file":"security.test.js","sourceRoot":"","sources":["security.test.ts"],"names":[],"mappings":"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"}
|