@fintekkers/ledger-models 0.1.114 → 0.1.116
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/position/position.d.ts +2 -1
- package/node/wrappers/models/position/position.js +21 -4
- package/node/wrappers/models/position/position.js.map +1 -1
- package/node/wrappers/models/position/position.test.js +25 -3
- package/node/wrappers/models/position/position.test.js.map +1 -1
- package/node/wrappers/models/position/position.test.ts +32 -4
- package/node/wrappers/models/position/position.ts +21 -5
- package/node/wrappers/models/security/BondSecurity.js +87 -0
- package/node/wrappers/models/security/BondSecurity.js.map +1 -0
- package/node/wrappers/models/security/term.d.ts +50 -0
- package/node/wrappers/models/security/term.js +157 -0
- package/node/wrappers/models/security/term.js.map +1 -0
- package/node/wrappers/models/security/term.test.d.ts +1 -0
- package/node/wrappers/models/security/term.test.js +253 -0
- package/node/wrappers/models/security/term.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -9,6 +9,7 @@ import { ProtoEnum } from "../utils/protoEnum";
|
|
|
9
9
|
import { UUID } from "../utils/uuid";
|
|
10
10
|
import { ZonedDateTime } from "../utils/datetime";
|
|
11
11
|
import { PriceProto } from "../../../fintekkers/models/price/price_pb";
|
|
12
|
+
import { Tenor } from "../security/term";
|
|
12
13
|
export declare class Position {
|
|
13
14
|
proto: PositionProto;
|
|
14
15
|
constructor(positionProto: PositionProto);
|
|
@@ -21,7 +22,7 @@ export declare class Position {
|
|
|
21
22
|
*/
|
|
22
23
|
static fromJSON(json: any): Position;
|
|
23
24
|
getFieldValue(field: FieldProto): any;
|
|
24
|
-
getField(fieldToGet: FieldMapEntry): string | ProtoEnum | Security | Portfolio | UUID | Date | ZonedDateTime | number | PriceProto;
|
|
25
|
+
getField(fieldToGet: FieldMapEntry): string | ProtoEnum | Security | Portfolio | UUID | Date | ZonedDateTime | number | PriceProto | Tenor;
|
|
25
26
|
getMeasureValue(measure: MeasureProto): Decimal;
|
|
26
27
|
private getMeasure;
|
|
27
28
|
getFieldDisplay(fieldToGet: FieldMapEntry): string;
|
|
@@ -27,6 +27,7 @@ const tenor_pb_1 = require("../../../fintekkers/models/security/tenor_pb");
|
|
|
27
27
|
const portfolio_pb_1 = require("../../../fintekkers/models/portfolio/portfolio_pb");
|
|
28
28
|
const security_pb_1 = require("../../../fintekkers/models/security/security_pb");
|
|
29
29
|
const wrappers_pb_1 = require("google-protobuf/google/protobuf/wrappers_pb");
|
|
30
|
+
const term_1 = require("../security/term");
|
|
30
31
|
class Position {
|
|
31
32
|
constructor(positionProto) {
|
|
32
33
|
this.proto = positionProto;
|
|
@@ -67,9 +68,19 @@ class Position {
|
|
|
67
68
|
return proto;
|
|
68
69
|
}
|
|
69
70
|
const unpackedValue = Position.unpackField(tmpField);
|
|
70
|
-
if (field_pb_1.FieldProto.PRICE == fieldToGet.getField()
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
if (field_pb_1.FieldProto.PRICE == fieldToGet.getField()) {
|
|
72
|
+
return unpackedValue; //instanceof PriceProto
|
|
73
|
+
}
|
|
74
|
+
if (field_pb_1.FieldProto.TENOR == fieldToGet.getField()) {
|
|
75
|
+
const tenorProto = unpackedValue;
|
|
76
|
+
const tenorType = tenorProto.getTenorType();
|
|
77
|
+
const termValue = tenorProto.getTermValue();
|
|
78
|
+
if (termValue && termValue.length > 0) {
|
|
79
|
+
return new term_1.Tenor(tenorType, termValue);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
return new term_1.Tenor(tenorType);
|
|
83
|
+
}
|
|
73
84
|
}
|
|
74
85
|
if (field_pb_1.FieldProto.SECURITY == fieldToGet.getField()) {
|
|
75
86
|
return security_1.default.create(unpackedValue);
|
|
@@ -120,7 +131,10 @@ class Position {
|
|
|
120
131
|
return value.toString();
|
|
121
132
|
}
|
|
122
133
|
else if (value instanceof Date) {
|
|
123
|
-
|
|
134
|
+
const year = value.getFullYear();
|
|
135
|
+
const month = String(value.getMonth() + 1).padStart(2, '0'); // getMonth() returns 0-11, so add 1
|
|
136
|
+
const day = String(value.getDate()).padStart(2, '0'); // getDate() returns day of month (1-31)
|
|
137
|
+
return `${year}-${month}-${day}`;
|
|
124
138
|
}
|
|
125
139
|
else if (value instanceof datetime_1.ZonedDateTime) {
|
|
126
140
|
const tmpDateTime = value.toDateTime();
|
|
@@ -129,6 +143,9 @@ class Position {
|
|
|
129
143
|
else if (value instanceof protoEnum_1.ProtoEnum) {
|
|
130
144
|
return value.toString();
|
|
131
145
|
}
|
|
146
|
+
else if (value instanceof term_1.Tenor) {
|
|
147
|
+
return value.toString();
|
|
148
|
+
}
|
|
132
149
|
break;
|
|
133
150
|
default:
|
|
134
151
|
return "Can't display this field: " + fieldToGet.getField();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"position.js","sourceRoot":"","sources":["position.ts"],"names":[],"mappings":";;;;;;AAAA,QAAQ;AACR,2EAA0E;AAC1E,iFAAgF;AAChF,2FAAsG;AACtG,uEAA+C;AAC/C,oEAA4C;AAC5C,+EAA8E;AAE9E,0DAAgE;AAChE,kDAA+C;AAC/C,mCAAgC;AAChC,wCAAqC;AACrC,gDAAkD;AAClD,wEAAuE;AACvE,6EAAqD;AAErD,qEAAoE;AACpE,2FAAyF;AACzF,iFAA+E;AAC/E,gGAA+F;AAC/F,iFAAgF;AAChF,2EAA0E;AAC1E,oFAAmF;AACnF,iFAAgF;AAEhF,6EAA0E;AAC1E,MAAa,QAAQ;IAGnB,YAAY,aAA4B;QACtC,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC;IAC7B,CAAC;IAED,OAAO;IACP,MAAM;QACJ,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,wCAAwC;SAC9E,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAS;QACvB,OAAO,IAAI,QAAQ,CAAC,2BAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAEM,aAAa,CAAC,KAAiB;QACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,CAAC;IAEM,QAAQ,CAAC,UAAyB;QACvC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC;YAClD,IAAI,QAAQ,CAAC,QAAQ,EAAE,KAAK,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAElD,IAAI,QAAQ,CAAC,cAAc,EAAE,KAAK,SAAS,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpF,OAAO,QAAQ,CAAC,cAAc,EAAE,CAAC;gBACnC,CAAC;gBAED,IAAI,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC;oBAChC,IAAI,SAAS,GAAW,IAAI,aAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;oBACnE,IAAI,KAAK,GAAc,qBAAS,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;oBAClF,OAAO,KAAK,CAAC;gBACf,CAAC;qBAAM,IAAI,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;oBACnE,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,4FAA4F,CAAC,CAAC;oBAC1G,IAAI,SAAS,GAAW,IAAI,aAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;oBACnE,IAAI,KAAK,GAAc,qBAAS,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;oBAC5D,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAErD,IAAI,qBAAU,CAAC,KAAK,IAAI,UAAU,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"position.js","sourceRoot":"","sources":["position.ts"],"names":[],"mappings":"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"}
|
|
@@ -94,6 +94,23 @@ function testJsonSerialization() {
|
|
|
94
94
|
return true;
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
|
+
test('test testTenorSerialization', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
98
|
+
let isTrue = yield testTenorSerialization();
|
|
99
|
+
expect(isTrue).toBe(true);
|
|
100
|
+
}));
|
|
101
|
+
function testTenorSerialization() {
|
|
102
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
103
|
+
let { position, tenor } = getPosition(false);
|
|
104
|
+
console.log("tenor", tenor);
|
|
105
|
+
let tenorPosition = position.getFieldValue(field_pb_1.FieldProto.TENOR);
|
|
106
|
+
// tenorPosition is now a Tenor wrapper, not TenorProto
|
|
107
|
+
expect(tenorPosition.getTenorDescription()).toBe(tenor.getTermValue());
|
|
108
|
+
let tenorFieldDisplay = position.getFieldDisplay(new position_util_pb_1.FieldMapEntry().setField(field_pb_1.FieldProto.TENOR));
|
|
109
|
+
// The field display should be the Tenor wrapper's toString(), which returns something like "TERM: 3M"
|
|
110
|
+
expect(tenorFieldDisplay).toBe(tenorPosition.toString());
|
|
111
|
+
return true;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
97
114
|
function testSerialization() {
|
|
98
115
|
var _a;
|
|
99
116
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -101,7 +118,12 @@ function testSerialization() {
|
|
|
101
118
|
let tradeDatePosition = position.getFieldValue(field_pb_1.FieldProto.TRADE_DATE);
|
|
102
119
|
expect(tradeDate.getFullYear()).toBe(tradeDatePosition.getFullYear());
|
|
103
120
|
expect(tradeDate.getMonth()).toBe(tradeDatePosition.getMonth());
|
|
104
|
-
expect(tradeDate.
|
|
121
|
+
expect(tradeDate.getDate()).toBe(tradeDatePosition.getDate());
|
|
122
|
+
let tradeDateFieldDisplay = position.getFieldDisplay(new position_util_pb_1.FieldMapEntry().setField(field_pb_1.FieldProto.TRADE_DATE));
|
|
123
|
+
const year = tradeDate.getFullYear();
|
|
124
|
+
const month = String(tradeDate.getMonth() + 1).padStart(2, '0');
|
|
125
|
+
const day = String(tradeDate.getDate()).padStart(2, '0');
|
|
126
|
+
expect(tradeDateFieldDisplay).toBe(`${year}-${month}-${day}`);
|
|
105
127
|
let securityPosition = position.getFieldValue(field_pb_1.FieldProto.SECURITY);
|
|
106
128
|
expect(securityPosition.getAssetClass()).toBe(security.getAssetClass());
|
|
107
129
|
let portfolioPosition = position.getFieldValue(field_pb_1.FieldProto.PORTFOLIO);
|
|
@@ -114,7 +136,7 @@ function testSerialization() {
|
|
|
114
136
|
let price = position.getFieldValue(field_pb_1.FieldProto.PRICE);
|
|
115
137
|
expect((_a = price.getPrice()) === null || _a === void 0 ? void 0 : _a.getArbitraryPrecisionValue()).toBe("1.0");
|
|
116
138
|
let tenor = position.getFieldValue(field_pb_1.FieldProto.TENOR);
|
|
117
|
-
expect(tenor.
|
|
139
|
+
expect(tenor.getTenorDescription()).toBe("3M");
|
|
118
140
|
return true;
|
|
119
141
|
});
|
|
120
142
|
}
|
|
@@ -178,6 +200,6 @@ function getPosition(includeUnknownEnumValue) {
|
|
|
178
200
|
new position_util_pb_1.MeasureMapEntry().setMeasure(measure).setMeasureDecimalValue(measureValue)
|
|
179
201
|
]);
|
|
180
202
|
let position = new position_1.Position(positionProto);
|
|
181
|
-
return { position, tradeDate, security, portfolio, productType, id };
|
|
203
|
+
return { position, tradeDate, security, portfolio, productType, id, tenor };
|
|
182
204
|
}
|
|
183
205
|
//# sourceMappingURL=position.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"position.test.js","sourceRoot":"","sources":["position.test.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,wCAAqC;AACrC,mEAA6D;AAE7D,uFAAqF;AACrF,iFAAgF;AAChF,2FAAsG;AACtG,2EAA0E;AAC1E,+EAA8E;AAC9E,iFAAgF;AAChF,oFAAmF;AACnF,yCAAsC;AACtC,wCAA0C;AAC1C,+FAA6F;AAE7F,oGAAkG;AAClG,wEAAuE;AACvE,2EAA0E;AAC1E,qFAAmF;
|
|
1
|
+
{"version":3,"file":"position.test.js","sourceRoot":"","sources":["position.test.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,wCAAqC;AACrC,mEAA6D;AAE7D,uFAAqF;AACrF,iFAAgF;AAChF,2FAAsG;AACtG,2EAA0E;AAC1E,+EAA8E;AAC9E,iFAAgF;AAChF,oFAAmF;AACnF,yCAAsC;AACtC,wCAA0C;AAC1C,+FAA6F;AAE7F,oGAAkG;AAClG,wEAAuE;AACvE,2EAA0E;AAC1E,qFAAmF;AAGnF,IAAI,CAAC,6BAA6B,EAAE,GAAS,EAAE;IAC3C,IAAI,MAAM,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC,CAAA,CAAC,CAAC;AAEH,IAAI,CAAC,yCAAyC,EAAE,GAAS,EAAE;IACvD,IAAI,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;IACvC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC,CAAA,CAAC,CAAC;AAEH,IAAI,CAAC,yBAAyB,EAAE,GAAS,EAAE;IACvC,IAAI,MAAM,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC,CAAA,CAAC,CAAC;AAEH,IAAI,CAAC,8CAA8C,EAAE,GAAS,EAAE;IAC5D,IAAI,MAAM,GAAG,MAAM,mCAAmC,EAAE,CAAC;IACzD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC,CAAA,CAAC,CAAC;AAGH,SAAe,qBAAqB;;QAChC,IAAI,aAAa,GAAG,IAAI,2BAAa,EAAE,CAAC;QACxC,aAAa,CAAC,aAAa,CAAC;YACxB,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,wCAAmB,CAAC,QAAQ,CAAC;SACtG,CAAC,CAAC;QAEH,IAAI,YAAY,GAAG,IAAI,oCAAiB,EAAE,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC9E,aAAa,CAAC,eAAe,CAAC;YAC1B,IAAI,kCAAe,EAAE,CAAC,UAAU,CAAC,yBAAY,CAAC,iBAAiB,CAAC,CAAC,sBAAsB,CAAC,YAAY,CAAC;SACxG,CAAC,CAAC;QAEH,IAAI,QAAQ,GAAG,IAAI,mBAAQ,CAAC,aAAa,CAAC,CAAC;QAE3C,IAAI,MAAM,GAAc,QAAQ,CAAC,aAAa,CAAC,qBAAU,CAAC,eAAe,CAAC,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,wCAAmB,CAAC,QAAQ,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,wCAAmB,CAAC,CAAC;QAE7D,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;YAC7C,eAAe,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,yBAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5E,OAAO,IAAI,CAAC;IAChB,CAAC;CAAA;AAED,SAAe,qBAAqB;;QAChC,IAAI,SAAS,GAAG,gBAAS,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC;QAC3C,IAAI,WAAW,GAAG,mBAAmB,CAAC;QACtC,IAAI,EAAE,GAAG,IAAI,WAAI,CAAC,WAAI,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAE3C,MAAM,eAAe,GAAG,IAAI,YAAG,EAAE,CAAC;QAClC,eAAe,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAC7C,eAAe,CAAC,QAAQ,CAAC,gBAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;QAEhF,MAAM,QAAQ,GAAG,IAAI,YAAG,EAAE,CAAC;QAC3B,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;QAEtD,IAAI,aAAa,GAAG,IAAI,2BAAa,EAAE,CAAC;QACxC,aAAa,CAAC,aAAa,CAAC;YACxB,mFAAmF;YACnF,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,UAAU,CAAC,CAAC,mBAAmB,CAAC,eAAe,CAAC;YACxF,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,wCAAmB,CAAC,QAAQ,CAAC;YACnG,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,YAAY,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC;YACjF,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,oBAAoB,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;YACrF,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC;SAC5E,CAAC,CAAC;QACH,IAAI,QAAQ,GAAG,IAAI,mBAAQ,CAAC,aAAa,CAAC,CAAC;QAE3C,IAAI,SAAS,GAAG,mBAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAErD,IAAI,iBAAiB,GAAG,SAAS,CAAC,aAAa,CAAC,qBAAU,CAAC,UAAU,CAAC,CAAC;QACvE,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,CAAC;QACtE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEhE,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,qBAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/E,OAAO,IAAI,CAAC;IAChB,CAAC;CAAA;AAGD,IAAI,CAAC,6BAA6B,EAAE,GAAS,EAAE;IAC3C,IAAI,MAAM,GAAG,MAAM,sBAAsB,EAAE,CAAC;IAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC,CAAA,CAAC,CAAC;AAEH,SAAe,sBAAsB;;QACjC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAE7C,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5B,IAAI,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAU,CAAC,KAAK,CAAC,CAAC;QAC7D,uDAAuD;QACvD,MAAM,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QAEvE,IAAI,iBAAiB,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACjG,sGAAsG;QACtG,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEzD,OAAO,IAAI,CAAC;IAChB,CAAC;CAAA;AAGD,SAAe,iBAAiB;;;QAC5B,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAEvF,IAAI,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAU,CAAC,UAAU,CAAC,CAAC;QACtE,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,CAAC;QACtE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC;QAE9D,IAAI,qBAAqB,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,UAAU,CAAC,CAAC,CAAC;QAC1G,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzD,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;QAE9D,IAAI,gBAAgB,GAAkB,QAAQ,CAAC,aAAa,CAAC,qBAAU,CAAC,QAAQ,CAAC,CAAC;QAClF,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;QAExE,IAAI,iBAAiB,GAAmB,QAAQ,CAAC,aAAa,CAAC,qBAAU,CAAC,SAAS,CAAC,CAAC;QACrF,MAAM,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAEhF,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,qBAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE1E,IAAI,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAU,CAAC,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QAElD,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,qBAAU,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEvF,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,yBAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEzE,IAAI,KAAK,GAAe,QAAQ,CAAC,aAAa,CAAC,qBAAU,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,CAAC,MAAA,KAAK,CAAC,QAAQ,EAAE,0CAAE,0BAA0B,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAU,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/C,OAAO,IAAI,CAAC;;CACf;AAED,SAAe,mCAAmC;;QAC9C,IAAI,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAErC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,qBAAU,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtF,OAAO,IAAI,CAAC;IAChB,CAAC;CAAA;AAED,SAAS,WAAW,CAAC,uBAAgC;IACjD,IAAI,QAAQ,GAAG,IAAI,2BAAa,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,SAAS,GAAG,IAAI,6BAAc,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IACxE,IAAI,SAAS,GAAG,gBAAS,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC;IAC3C,IAAI,WAAW,GAAG,mBAAmB,CAAC;IACtC,IAAI,EAAE,GAAG,IAAI,WAAI,CAAC,WAAI,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAE3C,IAAI,KAAK,GAAG,IAAI,qBAAU,EAAE;SACvB,QAAQ,CAAC,IAAI,oCAAiB,EAAE,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;SACnE,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;SACzB,WAAW,CAAC,QAAQ,CAAC,CAAC;IAE3B,IAAI,KAAK,GAAG,IAAI,qBAAU,EAAE;SACvB,YAAY,CAAC,8BAAc,CAAC,IAAI,CAAC;SACjC,YAAY,CAAC,IAAI,CAAC,CAAC;IAAA,CAAC;IAEzB,IAAI,OAAO,GAAG,yBAAY,CAAC,iBAAiB,CAAC;IAC7C,IAAI,YAAY,GAAG,IAAI,oCAAiB,EAAE,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;IAE7E,MAAM,eAAe,GAAG,IAAI,YAAG,EAAE,CAAC;IAClC,eAAe,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC7C,eAAe,CAAC,QAAQ,CAAC,gBAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;IAEhF,MAAM,QAAQ,GAAG,IAAI,YAAG,EAAE,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;IAEtD,MAAM,WAAW,GAAG,IAAI,YAAG,EAAE,CAAC;IAC9B,WAAW,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC1C,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;IAE9C,MAAM,WAAW,GAAG,IAAI,YAAG,EAAE,CAAC;IAC9B,WAAW,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC1C,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;IAE9C,MAAM,cAAc,GAAG,IAAI,YAAG,EAAE,CAAC;IACjC,cAAc,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAChD,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;IAEpD,MAAM,eAAe,GAAG,IAAI,YAAG,EAAE,CAAC;IAClC,eAAe,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAClD,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC;IAEtD,IAAI,cAAc,GAAG,uBAAuB,CAAC,CAAC;QAC1C,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,wCAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;QACpG,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,wCAAmB,CAAC,QAAQ,CAAC,CAAC;IAExG,IAAI,aAAa,GAAG,IAAI,2BAAa,EAAE,CAAC;IACxC,aAAa,CAAC,aAAa,CAAC;QACxB,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,cAAc,CAAC;QACrF,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,eAAe,CAAC;QACvF,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,UAAU,CAAC,CAAC,mBAAmB,CAAC,eAAe,CAAC;QACxF,cAAc;QACd,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,0CAAoB,CAAC,GAAG,CAAC;QAChG,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC;QAC/E,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,YAAY,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC;QACjF,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC;QACzE,IAAI,gCAAa,EAAE,CAAC,QAAQ,CAAC,qBAAU,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC;KAClF,CAAC,CAAC;IAEH,aAAa,CAAC,eAAe,CAAC;QAC1B,IAAI,kCAAe,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,YAAY,CAAC;KACjF,CAAC,CAAC;IAEH,IAAI,QAAQ,GAAG,IAAI,mBAAQ,CAAC,aAAa,CAAC,CAAC;IAC3C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;AAChF,CAAC"}
|
|
@@ -16,6 +16,7 @@ import { TransactionTypeProto } from '../../../fintekkers/models/transaction/tra
|
|
|
16
16
|
import { PriceProto } from '../../../fintekkers/models/price/price_pb';
|
|
17
17
|
import { TenorProto } from '../../../fintekkers/models/security/tenor_pb';
|
|
18
18
|
import { TenorTypeProto } from '../../../fintekkers/models/security/tenor_type_pb';
|
|
19
|
+
import { Tenor } from '../security/term';
|
|
19
20
|
|
|
20
21
|
test('test the enum Serialization', async () => {
|
|
21
22
|
let isTrue = await testEnumSerialization();
|
|
@@ -102,13 +103,40 @@ async function testJsonSerialization(): Promise<boolean> {
|
|
|
102
103
|
}
|
|
103
104
|
|
|
104
105
|
|
|
106
|
+
test('test testTenorSerialization', async () => {
|
|
107
|
+
let isTrue = await testTenorSerialization();
|
|
108
|
+
expect(isTrue).toBe(true);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
async function testTenorSerialization(): Promise<boolean> {
|
|
112
|
+
let { position, tenor } = getPosition(false);
|
|
113
|
+
|
|
114
|
+
console.log("tenor", tenor);
|
|
115
|
+
let tenorPosition = position.getFieldValue(FieldProto.TENOR);
|
|
116
|
+
// tenorPosition is now a Tenor wrapper, not TenorProto
|
|
117
|
+
expect(tenorPosition.getTenorDescription()).toBe(tenor.getTermValue());
|
|
118
|
+
|
|
119
|
+
let tenorFieldDisplay = position.getFieldDisplay(new FieldMapEntry().setField(FieldProto.TENOR));
|
|
120
|
+
// The field display should be the Tenor wrapper's toString(), which returns something like "TERM: 3M"
|
|
121
|
+
expect(tenorFieldDisplay).toBe(tenorPosition.toString());
|
|
122
|
+
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
|
|
105
127
|
async function testSerialization(): Promise<boolean> {
|
|
106
128
|
let { position, tradeDate, security, portfolio, productType, id } = getPosition(false);
|
|
107
129
|
|
|
108
130
|
let tradeDatePosition = position.getFieldValue(FieldProto.TRADE_DATE);
|
|
109
131
|
expect(tradeDate.getFullYear()).toBe(tradeDatePosition.getFullYear());
|
|
110
132
|
expect(tradeDate.getMonth()).toBe(tradeDatePosition.getMonth());
|
|
111
|
-
expect(tradeDate.
|
|
133
|
+
expect(tradeDate.getDate()).toBe(tradeDatePosition.getDate());
|
|
134
|
+
|
|
135
|
+
let tradeDateFieldDisplay = position.getFieldDisplay(new FieldMapEntry().setField(FieldProto.TRADE_DATE));
|
|
136
|
+
const year = tradeDate.getFullYear();
|
|
137
|
+
const month = String(tradeDate.getMonth() + 1).padStart(2, '0');
|
|
138
|
+
const day = String(tradeDate.getDate()).padStart(2, '0');
|
|
139
|
+
expect(tradeDateFieldDisplay).toBe(`${year}-${month}-${day}`);
|
|
112
140
|
|
|
113
141
|
let securityPosition: SecurityProto = position.getFieldValue(FieldProto.SECURITY);
|
|
114
142
|
expect(securityPosition.getAssetClass()).toBe(security.getAssetClass());
|
|
@@ -128,8 +156,8 @@ async function testSerialization(): Promise<boolean> {
|
|
|
128
156
|
let price: PriceProto = position.getFieldValue(FieldProto.PRICE);
|
|
129
157
|
expect(price.getPrice()?.getArbitraryPrecisionValue()).toBe("1.0");
|
|
130
158
|
|
|
131
|
-
let tenor
|
|
132
|
-
expect(tenor.
|
|
159
|
+
let tenor = position.getFieldValue(FieldProto.TENOR);
|
|
160
|
+
expect(tenor.getTenorDescription()).toBe("3M");
|
|
133
161
|
|
|
134
162
|
return true;
|
|
135
163
|
}
|
|
@@ -206,5 +234,5 @@ function getPosition(includeUnknownEnumValue: boolean) {
|
|
|
206
234
|
]);
|
|
207
235
|
|
|
208
236
|
let position = new Position(positionProto);
|
|
209
|
-
return { position, tradeDate, security, portfolio, productType, id };
|
|
237
|
+
return { position, tradeDate, security, portfolio, productType, id, tenor };
|
|
210
238
|
}
|
|
@@ -24,6 +24,7 @@ import { PortfolioProto } from "../../../fintekkers/models/portfolio/portfolio_p
|
|
|
24
24
|
import { SecurityProto } from "../../../fintekkers/models/security/security_pb";
|
|
25
25
|
|
|
26
26
|
import { StringValue } from 'google-protobuf/google/protobuf/wrappers_pb';
|
|
27
|
+
import { Tenor } from "../security/term";
|
|
27
28
|
export class Position {
|
|
28
29
|
proto: PositionProto;
|
|
29
30
|
|
|
@@ -51,7 +52,7 @@ export class Position {
|
|
|
51
52
|
return this.getField(new FieldMapEntry().setField(field));
|
|
52
53
|
}
|
|
53
54
|
|
|
54
|
-
public getField(fieldToGet: FieldMapEntry): string | ProtoEnum | Security | Portfolio | UUID | Date | ZonedDateTime | number | PriceProto {
|
|
55
|
+
public getField(fieldToGet: FieldMapEntry): string | ProtoEnum | Security | Portfolio | UUID | Date | ZonedDateTime | number | PriceProto | Tenor {
|
|
55
56
|
for (const tmpField of this.proto.getFieldsList()) {
|
|
56
57
|
if (tmpField.getField() === fieldToGet.getField()) {
|
|
57
58
|
|
|
@@ -73,9 +74,19 @@ export class Position {
|
|
|
73
74
|
|
|
74
75
|
const unpackedValue = Position.unpackField(tmpField);
|
|
75
76
|
|
|
76
|
-
if (FieldProto.PRICE == fieldToGet.getField()
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
if (FieldProto.PRICE == fieldToGet.getField()) {
|
|
78
|
+
return unpackedValue; //instanceof PriceProto
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (FieldProto.TENOR == fieldToGet.getField()) {
|
|
82
|
+
const tenorProto = unpackedValue as TenorProto;
|
|
83
|
+
const tenorType = tenorProto.getTenorType();
|
|
84
|
+
const termValue = tenorProto.getTermValue();
|
|
85
|
+
if (termValue && termValue.length > 0) {
|
|
86
|
+
return new Tenor(tenorType, termValue);
|
|
87
|
+
} else {
|
|
88
|
+
return new Tenor(tenorType);
|
|
89
|
+
}
|
|
79
90
|
}
|
|
80
91
|
|
|
81
92
|
if (FieldProto.SECURITY == fieldToGet.getField()) {
|
|
@@ -129,12 +140,17 @@ export class Position {
|
|
|
129
140
|
} else if (value instanceof UUID) {
|
|
130
141
|
return value.toString();
|
|
131
142
|
} else if (value instanceof Date) {
|
|
132
|
-
|
|
143
|
+
const year = value.getFullYear();
|
|
144
|
+
const month = String(value.getMonth() + 1).padStart(2, '0'); // getMonth() returns 0-11, so add 1
|
|
145
|
+
const day = String(value.getDate()).padStart(2, '0'); // getDate() returns day of month (1-31)
|
|
146
|
+
return `${year}-${month}-${day}`;
|
|
133
147
|
} else if (value instanceof ZonedDateTime) {
|
|
134
148
|
const tmpDateTime: DateTime = value.toDateTime();
|
|
135
149
|
return tmpDateTime.toFormat('yyyy/MM/dd hh:mm:ss');
|
|
136
150
|
} else if (value instanceof ProtoEnum) {
|
|
137
151
|
return value.toString();
|
|
152
|
+
} else if (value instanceof Tenor) {
|
|
153
|
+
return value.toString();
|
|
138
154
|
}
|
|
139
155
|
break;
|
|
140
156
|
default:
|
|
@@ -0,0 +1,87 @@
|
|
|
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 security_1 = __importDefault(require("./security"));
|
|
7
|
+
const security_type_pb_1 = require("../../../fintekkers/models/security/security_type_pb");
|
|
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");
|
|
13
|
+
class BondSecurity extends security_1.default {
|
|
14
|
+
constructor(proto) {
|
|
15
|
+
super(proto);
|
|
16
|
+
if (proto.getSecurityType() !== security_type_pb_1.SecurityTypeProto.BOND_SECURITY) {
|
|
17
|
+
throw new Error(`BondSecurity requires BOND_SECURITY type, got ${security_type_pb_1.SecurityTypeProto[proto.getSecurityType()]}`);
|
|
18
|
+
}
|
|
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
|
+
}
|
|
54
|
+
getCouponRate() {
|
|
55
|
+
const rate = this.proto.getCouponRate();
|
|
56
|
+
if (!rate)
|
|
57
|
+
throw new Error("Coupon rate is required for bonds");
|
|
58
|
+
return rate;
|
|
59
|
+
}
|
|
60
|
+
getFaceValue() {
|
|
61
|
+
const faceValue = this.proto.getFaceValue();
|
|
62
|
+
if (!faceValue)
|
|
63
|
+
throw new Error("Face value is required for bonds");
|
|
64
|
+
return faceValue;
|
|
65
|
+
}
|
|
66
|
+
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);
|
|
71
|
+
}
|
|
72
|
+
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);
|
|
77
|
+
}
|
|
78
|
+
getDatedDate() {
|
|
79
|
+
const datedDate = this.proto.getDatedDate();
|
|
80
|
+
return datedDate ? new date_1.LocalDate(datedDate) : undefined;
|
|
81
|
+
}
|
|
82
|
+
getIssuanceInfo() {
|
|
83
|
+
return this.proto.getIssuanceInfoList();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.default = BondSecurity;
|
|
87
|
+
//# sourceMappingURL=BondSecurity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BondSecurity.js","sourceRoot":"","sources":["BondSecurity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { TenorTypeProto } from '../../../fintekkers/models/security/tenor_type_pb';
|
|
2
|
+
/**
|
|
3
|
+
* Represents a period of time with years, months, and total days.
|
|
4
|
+
* Similar to Java's Period class. Days includes weeks converted to days.
|
|
5
|
+
*/
|
|
6
|
+
export interface Period {
|
|
7
|
+
years: number;
|
|
8
|
+
months: number;
|
|
9
|
+
days: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Tenor class representing the maturity or term of a security.
|
|
13
|
+
* Can be UNKNOWN, PERPETUAL, or TERM (with a specific period).
|
|
14
|
+
*/
|
|
15
|
+
export declare class Tenor {
|
|
16
|
+
static readonly UNKNOWN_TENOR: Tenor;
|
|
17
|
+
static tenorTypeEnumMap: Map<number, string>;
|
|
18
|
+
private type;
|
|
19
|
+
private tenor;
|
|
20
|
+
constructor(type: TenorTypeProto);
|
|
21
|
+
constructor(type: TenorTypeProto, term: string);
|
|
22
|
+
constructor(type: TenorTypeProto, tenor: Period);
|
|
23
|
+
getType(): TenorTypeProto;
|
|
24
|
+
getTenor(): Period | null;
|
|
25
|
+
getTenorDescription(): string;
|
|
26
|
+
toString(): string;
|
|
27
|
+
/**
|
|
28
|
+
* Parses a tenor description string (e.g., "2Y3M") into a Period object.
|
|
29
|
+
* @param tenorDescription - String like "2Y3M", "1Y6M2W", "5D", etc.
|
|
30
|
+
* @returns Period object or null if the description is empty
|
|
31
|
+
*/
|
|
32
|
+
static fromTenorDescription(tenorDescription: string): Period | null;
|
|
33
|
+
/**
|
|
34
|
+
* Converts a Period object to a string representation (e.g., "2Y3M").
|
|
35
|
+
* @param period - Period object to convert
|
|
36
|
+
* @returns String representation like "2Y3M" or empty string if period is negative
|
|
37
|
+
*/
|
|
38
|
+
static periodToString(period: Period): string;
|
|
39
|
+
/**
|
|
40
|
+
* Checks if a period is negative (has any negative component).
|
|
41
|
+
*/
|
|
42
|
+
private static isPeriodNegative;
|
|
43
|
+
/**
|
|
44
|
+
* Parses a period string (e.g., "2Y3M", "1Y6M2W5D") into a Period object.
|
|
45
|
+
* @param periodString - String like "2Y3M", "1Y6M2W", "5D", etc.
|
|
46
|
+
* @returns Period object
|
|
47
|
+
* @throws Error if the period string contains invalid characters
|
|
48
|
+
*/
|
|
49
|
+
static parsePeriod(periodString: string): Period;
|
|
50
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Tenor = void 0;
|
|
4
|
+
const tenor_type_pb_1 = require("../../../fintekkers/models/security/tenor_type_pb");
|
|
5
|
+
/**
|
|
6
|
+
* Tenor class representing the maturity or term of a security.
|
|
7
|
+
* Can be UNKNOWN, PERPETUAL, or TERM (with a specific period).
|
|
8
|
+
*/
|
|
9
|
+
class Tenor {
|
|
10
|
+
constructor(type, termOrTenor) {
|
|
11
|
+
this.type = type;
|
|
12
|
+
if (termOrTenor === undefined) {
|
|
13
|
+
this.tenor = null;
|
|
14
|
+
}
|
|
15
|
+
else if (typeof termOrTenor === 'string') {
|
|
16
|
+
this.tenor = Tenor.fromTenorDescription(termOrTenor);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
if (type !== tenor_type_pb_1.TenorTypeProto.TERM) {
|
|
20
|
+
throw new Error('Cannot instantiate a tenor with a term unless the TenorType is TERM');
|
|
21
|
+
}
|
|
22
|
+
this.tenor = termOrTenor;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
getType() {
|
|
26
|
+
return this.type;
|
|
27
|
+
}
|
|
28
|
+
getTenor() {
|
|
29
|
+
return this.tenor;
|
|
30
|
+
}
|
|
31
|
+
getTenorDescription() {
|
|
32
|
+
const tenor = this.getTenor();
|
|
33
|
+
if (!tenor) {
|
|
34
|
+
return '';
|
|
35
|
+
}
|
|
36
|
+
return Tenor.periodToString(tenor);
|
|
37
|
+
}
|
|
38
|
+
toString() {
|
|
39
|
+
var _a;
|
|
40
|
+
let str = (_a = Tenor.tenorTypeEnumMap.get(this.type)) !== null && _a !== void 0 ? _a : 'UNKNOWN';
|
|
41
|
+
if (this.type === tenor_type_pb_1.TenorTypeProto.TERM) {
|
|
42
|
+
str += ': ';
|
|
43
|
+
str += this.getTenorDescription();
|
|
44
|
+
}
|
|
45
|
+
return str;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Parses a tenor description string (e.g., "2Y3M") into a Period object.
|
|
49
|
+
* @param tenorDescription - String like "2Y3M", "1Y6M2W", "5D", etc.
|
|
50
|
+
* @returns Period object or null if the description is empty
|
|
51
|
+
*/
|
|
52
|
+
static fromTenorDescription(tenorDescription) {
|
|
53
|
+
if (!tenorDescription || tenorDescription.trim() === '') {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return Tenor.parsePeriod(tenorDescription);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Converts a Period object to a string representation (e.g., "2Y3M").
|
|
60
|
+
* @param period - Period object to convert
|
|
61
|
+
* @returns String representation like "2Y3M" or empty string if period is negative
|
|
62
|
+
*/
|
|
63
|
+
static periodToString(period) {
|
|
64
|
+
if (Tenor.isPeriodNegative(period)) {
|
|
65
|
+
return '';
|
|
66
|
+
}
|
|
67
|
+
const years = period.years;
|
|
68
|
+
const months = period.months;
|
|
69
|
+
// Extract weeks and remaining days from total days (matching Java behavior)
|
|
70
|
+
const weeks = Math.floor(period.days / 7);
|
|
71
|
+
const days = period.days % 7;
|
|
72
|
+
const parts = [];
|
|
73
|
+
if (years > 0) {
|
|
74
|
+
parts.push(`${years}Y`);
|
|
75
|
+
}
|
|
76
|
+
if (months > 0) {
|
|
77
|
+
parts.push(`${months}M`);
|
|
78
|
+
}
|
|
79
|
+
if (weeks > 0) {
|
|
80
|
+
parts.push(`${weeks}W`);
|
|
81
|
+
}
|
|
82
|
+
if (days > 0) {
|
|
83
|
+
parts.push(`${days}D`);
|
|
84
|
+
}
|
|
85
|
+
return parts.join('');
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Checks if a period is negative (has any negative component).
|
|
89
|
+
*/
|
|
90
|
+
static isPeriodNegative(period) {
|
|
91
|
+
return period.years < 0 || period.months < 0 || period.days < 0;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Parses a period string (e.g., "2Y3M", "1Y6M2W5D") into a Period object.
|
|
95
|
+
* @param periodString - String like "2Y3M", "1Y6M2W", "5D", etc.
|
|
96
|
+
* @returns Period object
|
|
97
|
+
* @throws Error if the period string contains invalid characters
|
|
98
|
+
*/
|
|
99
|
+
static parsePeriod(periodString) {
|
|
100
|
+
let years = 0;
|
|
101
|
+
let months = 0;
|
|
102
|
+
let weeks = 0;
|
|
103
|
+
let days = 0;
|
|
104
|
+
let numberString = '';
|
|
105
|
+
for (let i = 0; i < periodString.length; i++) {
|
|
106
|
+
const c = periodString.charAt(i);
|
|
107
|
+
if (/\d/.test(c)) {
|
|
108
|
+
numberString += c;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
if (numberString === '') {
|
|
112
|
+
throw new Error(`Invalid period string: expected number before '${c}'`);
|
|
113
|
+
}
|
|
114
|
+
const number = parseInt(numberString, 10);
|
|
115
|
+
switch (c) {
|
|
116
|
+
case 'Y':
|
|
117
|
+
years = number;
|
|
118
|
+
break;
|
|
119
|
+
case 'M':
|
|
120
|
+
// Check if next character is 'W' (for months-weeks ambiguity)
|
|
121
|
+
if (i < periodString.length - 1 && periodString.charAt(i + 1) === 'W') {
|
|
122
|
+
weeks = number;
|
|
123
|
+
i++; // Skip next character (W)
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
months = number;
|
|
127
|
+
}
|
|
128
|
+
break;
|
|
129
|
+
case 'W':
|
|
130
|
+
weeks = number;
|
|
131
|
+
break;
|
|
132
|
+
case 'D':
|
|
133
|
+
days = number;
|
|
134
|
+
break;
|
|
135
|
+
default:
|
|
136
|
+
throw new Error(`Invalid character in period string: ${c}`);
|
|
137
|
+
}
|
|
138
|
+
numberString = '';
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Convert weeks to days and combine with days (matching Java Period.of behavior)
|
|
142
|
+
return {
|
|
143
|
+
years,
|
|
144
|
+
months,
|
|
145
|
+
days: days + weeks * 7
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
exports.Tenor = Tenor;
|
|
150
|
+
Tenor.UNKNOWN_TENOR = new Tenor(tenor_type_pb_1.TenorTypeProto.UNKNOWN_TENOR_TYPE);
|
|
151
|
+
(() => {
|
|
152
|
+
Tenor.tenorTypeEnumMap = new Map();
|
|
153
|
+
Object.keys(tenor_type_pb_1.TenorTypeProto).forEach(key => {
|
|
154
|
+
Tenor.tenorTypeEnumMap.set(tenor_type_pb_1.TenorTypeProto[key], key);
|
|
155
|
+
});
|
|
156
|
+
})();
|
|
157
|
+
//# sourceMappingURL=term.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"term.js","sourceRoot":"","sources":["term.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const assert = require("assert");
|
|
4
|
+
const term_1 = require("./term");
|
|
5
|
+
const tenor_type_pb_1 = require("../../../fintekkers/models/security/tenor_type_pb");
|
|
6
|
+
test('test Tenor.UNKNOWN_TENOR has correct type', () => {
|
|
7
|
+
testUnknownTenor();
|
|
8
|
+
});
|
|
9
|
+
test('test Tenor constructor with type only', () => {
|
|
10
|
+
testTenorConstructorTypeOnly();
|
|
11
|
+
});
|
|
12
|
+
test('test Tenor constructor with type and string term', () => {
|
|
13
|
+
testTenorConstructorWithString();
|
|
14
|
+
});
|
|
15
|
+
test('test Tenor constructor with type and Period', () => {
|
|
16
|
+
testTenorConstructorWithPeriod();
|
|
17
|
+
});
|
|
18
|
+
test('test Tenor constructor throws error for non-TERM type with Period', () => {
|
|
19
|
+
testTenorConstructorError();
|
|
20
|
+
});
|
|
21
|
+
test('test Tenor.getType() returns correct type', () => {
|
|
22
|
+
testGetType();
|
|
23
|
+
});
|
|
24
|
+
test('test Tenor.getTenor() returns correct period', () => {
|
|
25
|
+
testGetTenor();
|
|
26
|
+
});
|
|
27
|
+
test('test Tenor.getTenorDescription() returns correct string', () => {
|
|
28
|
+
testGetTenorDescription();
|
|
29
|
+
});
|
|
30
|
+
test('test Tenor.toString() returns correct representation', () => {
|
|
31
|
+
testToString();
|
|
32
|
+
});
|
|
33
|
+
test('test Tenor.fromTenorDescription() parses various formats', () => {
|
|
34
|
+
testFromTenorDescription();
|
|
35
|
+
});
|
|
36
|
+
test('test Tenor.periodToString() converts period to string', () => {
|
|
37
|
+
testPeriodToString();
|
|
38
|
+
});
|
|
39
|
+
test('test Tenor.parsePeriod() parses period strings', () => {
|
|
40
|
+
testParsePeriod();
|
|
41
|
+
});
|
|
42
|
+
test('test Tenor.parsePeriod() handles edge cases', () => {
|
|
43
|
+
testParsePeriodEdgeCases();
|
|
44
|
+
});
|
|
45
|
+
test('test Tenor.parsePeriod() throws error for invalid input', () => {
|
|
46
|
+
testParsePeriodErrors();
|
|
47
|
+
});
|
|
48
|
+
function testUnknownTenor() {
|
|
49
|
+
const unknownTenor = term_1.Tenor.UNKNOWN_TENOR;
|
|
50
|
+
assert(unknownTenor.getType() === tenor_type_pb_1.TenorTypeProto.UNKNOWN_TENOR_TYPE, 'UNKNOWN_TENOR should have UNKNOWN_TENOR_TYPE');
|
|
51
|
+
assert(unknownTenor.getTenor() === null, 'UNKNOWN_TENOR should have null tenor');
|
|
52
|
+
}
|
|
53
|
+
function testTenorConstructorTypeOnly() {
|
|
54
|
+
const perpetualTenor = new term_1.Tenor(tenor_type_pb_1.TenorTypeProto.PERPETUAL);
|
|
55
|
+
assert(perpetualTenor.getType() === tenor_type_pb_1.TenorTypeProto.PERPETUAL, 'Should create PERPETUAL tenor');
|
|
56
|
+
assert(perpetualTenor.getTenor() === null, 'Should have null tenor when only type is provided');
|
|
57
|
+
}
|
|
58
|
+
function testTenorConstructorWithString() {
|
|
59
|
+
const termTenor = new term_1.Tenor(tenor_type_pb_1.TenorTypeProto.TERM, '2Y3M');
|
|
60
|
+
assert(termTenor.getType() === tenor_type_pb_1.TenorTypeProto.TERM, 'Should create TERM tenor');
|
|
61
|
+
const period = termTenor.getTenor();
|
|
62
|
+
assert(period !== null, 'Should have a period');
|
|
63
|
+
if (period) {
|
|
64
|
+
assert(period.years === 2, 'Should parse 2 years');
|
|
65
|
+
assert(period.months === 3, 'Should parse 3 months');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function testTenorConstructorWithPeriod() {
|
|
69
|
+
const period = { years: 5, months: 6, days: 14 };
|
|
70
|
+
const termTenor = new term_1.Tenor(tenor_type_pb_1.TenorTypeProto.TERM, period);
|
|
71
|
+
assert(termTenor.getType() === tenor_type_pb_1.TenorTypeProto.TERM, 'Should create TERM tenor');
|
|
72
|
+
const returnedPeriod = termTenor.getTenor();
|
|
73
|
+
assert(returnedPeriod !== null, 'Should have a period');
|
|
74
|
+
if (returnedPeriod) {
|
|
75
|
+
assert(returnedPeriod.years === 5, 'Should have 5 years');
|
|
76
|
+
assert(returnedPeriod.months === 6, 'Should have 6 months');
|
|
77
|
+
assert(returnedPeriod.days === 14, 'Should have 14 days');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function testTenorConstructorError() {
|
|
81
|
+
const period = { years: 1, months: 0, days: 0 };
|
|
82
|
+
try {
|
|
83
|
+
new term_1.Tenor(tenor_type_pb_1.TenorTypeProto.PERPETUAL, period);
|
|
84
|
+
assert(false, 'Should have thrown an error');
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
assert(error instanceof Error, 'Should throw Error');
|
|
88
|
+
assert(error.message.includes('TERM'), 'Error message should mention TERM');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function testGetType() {
|
|
92
|
+
const tenor1 = new term_1.Tenor(tenor_type_pb_1.TenorTypeProto.UNKNOWN_TENOR_TYPE);
|
|
93
|
+
assert(tenor1.getType() === tenor_type_pb_1.TenorTypeProto.UNKNOWN_TENOR_TYPE, 'Should return UNKNOWN_TENOR_TYPE');
|
|
94
|
+
const tenor2 = new term_1.Tenor(tenor_type_pb_1.TenorTypeProto.PERPETUAL);
|
|
95
|
+
assert(tenor2.getType() === tenor_type_pb_1.TenorTypeProto.PERPETUAL, 'Should return PERPETUAL');
|
|
96
|
+
const tenor3 = new term_1.Tenor(tenor_type_pb_1.TenorTypeProto.TERM, '1Y');
|
|
97
|
+
assert(tenor3.getType() === tenor_type_pb_1.TenorTypeProto.TERM, 'Should return TERM');
|
|
98
|
+
}
|
|
99
|
+
function testGetTenor() {
|
|
100
|
+
const tenor1 = new term_1.Tenor(tenor_type_pb_1.TenorTypeProto.PERPETUAL);
|
|
101
|
+
assert(tenor1.getTenor() === null, 'PERPETUAL should have null tenor');
|
|
102
|
+
const period = { years: 3, months: 4, days: 21 };
|
|
103
|
+
const tenor2 = new term_1.Tenor(tenor_type_pb_1.TenorTypeProto.TERM, period);
|
|
104
|
+
const returnedPeriod = tenor2.getTenor();
|
|
105
|
+
assert(returnedPeriod !== null, 'TERM should have a period');
|
|
106
|
+
if (returnedPeriod) {
|
|
107
|
+
assert(returnedPeriod.years === 3, 'Should return correct years');
|
|
108
|
+
assert(returnedPeriod.months === 4, 'Should return correct months');
|
|
109
|
+
assert(returnedPeriod.days === 21, 'Should return correct days');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function testGetTenorDescription() {
|
|
113
|
+
const tenor1 = new term_1.Tenor(tenor_type_pb_1.TenorTypeProto.PERPETUAL);
|
|
114
|
+
assert(tenor1.getTenorDescription() === '', 'PERPETUAL should return empty string');
|
|
115
|
+
const tenor2 = new term_1.Tenor(tenor_type_pb_1.TenorTypeProto.TERM, '2Y3M');
|
|
116
|
+
assert(tenor2.getTenorDescription() === '2Y3M', 'Should return "2Y3M"');
|
|
117
|
+
const tenor3 = new term_1.Tenor(tenor_type_pb_1.TenorTypeProto.TERM, '1Y6M2W5D');
|
|
118
|
+
assert(tenor3.getTenorDescription() === '1Y6M2W5D', 'Should return "1Y6M2W5D"');
|
|
119
|
+
}
|
|
120
|
+
function testToString() {
|
|
121
|
+
const tenor1 = term_1.Tenor.UNKNOWN_TENOR;
|
|
122
|
+
assert(tenor1.toString() === 'UNKNOWN_TENOR_TYPE', 'UNKNOWN should return "UNKNOWN_TENOR_TYPE"');
|
|
123
|
+
const tenor2 = new term_1.Tenor(tenor_type_pb_1.TenorTypeProto.PERPETUAL);
|
|
124
|
+
assert(tenor2.toString() === 'PERPETUAL', 'PERPETUAL should return "PERPETUAL"');
|
|
125
|
+
const tenor3 = new term_1.Tenor(tenor_type_pb_1.TenorTypeProto.TERM, '2Y3M');
|
|
126
|
+
assert(tenor3.toString() === 'TERM: 2Y3M', 'TERM should return "TERM: 2Y3M"');
|
|
127
|
+
}
|
|
128
|
+
function testFromTenorDescription() {
|
|
129
|
+
// Test empty string
|
|
130
|
+
const period1 = term_1.Tenor.fromTenorDescription('');
|
|
131
|
+
assert(period1 === null, 'Empty string should return null');
|
|
132
|
+
// Test whitespace
|
|
133
|
+
const period2 = term_1.Tenor.fromTenorDescription(' ');
|
|
134
|
+
assert(period2 === null, 'Whitespace should return null');
|
|
135
|
+
// Test various formats
|
|
136
|
+
const period3 = term_1.Tenor.fromTenorDescription('2Y');
|
|
137
|
+
assert(period3 !== null, 'Should parse "2Y"');
|
|
138
|
+
if (period3) {
|
|
139
|
+
assert(period3.years === 2, 'Should have 2 years');
|
|
140
|
+
assert(period3.months === 0, 'Should have 0 months');
|
|
141
|
+
assert(period3.days === 0, 'Should have 0 days');
|
|
142
|
+
}
|
|
143
|
+
const period4 = term_1.Tenor.fromTenorDescription('3M');
|
|
144
|
+
assert(period4 !== null, 'Should parse "3M"');
|
|
145
|
+
if (period4) {
|
|
146
|
+
assert(period4.years === 0, 'Should have 0 years');
|
|
147
|
+
assert(period4.months === 3, 'Should have 3 months');
|
|
148
|
+
}
|
|
149
|
+
const period5 = term_1.Tenor.fromTenorDescription('2W');
|
|
150
|
+
assert(period5 !== null, 'Should parse "2W"');
|
|
151
|
+
if (period5) {
|
|
152
|
+
assert(period5.days === 14, 'Should convert 2 weeks to 14 days');
|
|
153
|
+
}
|
|
154
|
+
const period6 = term_1.Tenor.fromTenorDescription('5D');
|
|
155
|
+
assert(period6 !== null, 'Should parse "5D"');
|
|
156
|
+
if (period6) {
|
|
157
|
+
assert(period6.days === 5, 'Should have 5 days');
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function testPeriodToString() {
|
|
161
|
+
// Test simple periods
|
|
162
|
+
const period1 = { years: 2, months: 3, days: 0 };
|
|
163
|
+
assert(term_1.Tenor.periodToString(period1) === '2Y3M', 'Should return "2Y3M"');
|
|
164
|
+
const period2 = { years: 0, months: 6, days: 14 };
|
|
165
|
+
assert(term_1.Tenor.periodToString(period2) === '6M2W', 'Should convert 14 days to 2W');
|
|
166
|
+
const period3 = { years: 1, months: 0, days: 21 };
|
|
167
|
+
assert(term_1.Tenor.periodToString(period3) === '1Y3W', 'Should convert 21 days to 3W');
|
|
168
|
+
const period4 = { years: 0, months: 0, days: 10 };
|
|
169
|
+
assert(term_1.Tenor.periodToString(period4) === '1W3D', 'Should convert 10 days to 1W3D');
|
|
170
|
+
// Test negative period
|
|
171
|
+
const period5 = { years: -1, months: 0, days: 0 };
|
|
172
|
+
assert(term_1.Tenor.periodToString(period5) === '', 'Negative period should return empty string');
|
|
173
|
+
// Test zero period
|
|
174
|
+
const period6 = { years: 0, months: 0, days: 0 };
|
|
175
|
+
assert(term_1.Tenor.periodToString(period6) === '', 'Zero period should return empty string');
|
|
176
|
+
}
|
|
177
|
+
function testParsePeriod() {
|
|
178
|
+
// Test years only
|
|
179
|
+
const period1 = term_1.Tenor.parsePeriod('2Y');
|
|
180
|
+
assert(period1.years === 2, 'Should parse 2 years');
|
|
181
|
+
assert(period1.months === 0, 'Should have 0 months');
|
|
182
|
+
assert(period1.days === 0, 'Should have 0 days');
|
|
183
|
+
// Test months only
|
|
184
|
+
const period2 = term_1.Tenor.parsePeriod('3M');
|
|
185
|
+
assert(period2.years === 0, 'Should have 0 years');
|
|
186
|
+
assert(period2.months === 3, 'Should parse 3 months');
|
|
187
|
+
assert(period2.days === 0, 'Should have 0 days');
|
|
188
|
+
// Test weeks only
|
|
189
|
+
const period3 = term_1.Tenor.parsePeriod('2W');
|
|
190
|
+
assert(period3.years === 0, 'Should have 0 years');
|
|
191
|
+
assert(period3.months === 0, 'Should have 0 months');
|
|
192
|
+
assert(period3.days === 14, 'Should convert 2 weeks to 14 days');
|
|
193
|
+
// Test days only
|
|
194
|
+
const period4 = term_1.Tenor.parsePeriod('5D');
|
|
195
|
+
assert(period4.years === 0, 'Should have 0 years');
|
|
196
|
+
assert(period4.months === 0, 'Should have 0 months');
|
|
197
|
+
assert(period4.days === 5, 'Should parse 5 days');
|
|
198
|
+
// Test combined
|
|
199
|
+
const period5 = term_1.Tenor.parsePeriod('1Y6M2W5D');
|
|
200
|
+
assert(period5.years === 1, 'Should parse 1 year');
|
|
201
|
+
assert(period5.months === 6, 'Should parse 6 months');
|
|
202
|
+
assert(period5.days === 19, 'Should convert 2W + 5D to 19 days');
|
|
203
|
+
// Test MW ambiguity (MW should be interpreted as months + weeks, not just months)
|
|
204
|
+
const period6 = term_1.Tenor.parsePeriod('2MW');
|
|
205
|
+
assert(period6.months === 0, 'MW should be interpreted as weeks, not months');
|
|
206
|
+
assert(period6.days === 14, 'MW should convert 2 weeks to 14 days');
|
|
207
|
+
}
|
|
208
|
+
function testParsePeriodEdgeCases() {
|
|
209
|
+
// Test large numbers
|
|
210
|
+
const period1 = term_1.Tenor.parsePeriod('10Y12M');
|
|
211
|
+
assert(period1.years === 10, 'Should parse 10 years');
|
|
212
|
+
assert(period1.months === 12, 'Should parse 12 months');
|
|
213
|
+
// Test single digit
|
|
214
|
+
const period2 = term_1.Tenor.parsePeriod('1Y1M1W1D');
|
|
215
|
+
assert(period2.years === 1, 'Should parse 1 year');
|
|
216
|
+
assert(period2.months === 1, 'Should parse 1 month');
|
|
217
|
+
assert(period2.days === 8, 'Should convert 1W + 1D to 8 days');
|
|
218
|
+
// Test multiple weeks
|
|
219
|
+
const period3 = term_1.Tenor.parsePeriod('4W');
|
|
220
|
+
assert(period3.days === 28, 'Should convert 4 weeks to 28 days');
|
|
221
|
+
// Test weeks and days
|
|
222
|
+
const period4 = term_1.Tenor.parsePeriod('2W3D');
|
|
223
|
+
assert(period4.days === 17, 'Should convert 2W + 3D to 17 days');
|
|
224
|
+
}
|
|
225
|
+
function testParsePeriodErrors() {
|
|
226
|
+
// Test invalid character
|
|
227
|
+
try {
|
|
228
|
+
term_1.Tenor.parsePeriod('2X');
|
|
229
|
+
assert(false, 'Should have thrown an error for invalid character');
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
assert(error instanceof Error, 'Should throw Error');
|
|
233
|
+
assert(error.message.includes('Invalid character'), 'Error message should mention invalid character');
|
|
234
|
+
}
|
|
235
|
+
// Test missing number before unit
|
|
236
|
+
try {
|
|
237
|
+
term_1.Tenor.parsePeriod('Y');
|
|
238
|
+
assert(false, 'Should have thrown an error for missing number');
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
assert(error instanceof Error, 'Should throw Error');
|
|
242
|
+
assert(error.message.includes('expected number'), 'Error message should mention expected number');
|
|
243
|
+
}
|
|
244
|
+
// Test invalid format
|
|
245
|
+
try {
|
|
246
|
+
term_1.Tenor.parsePeriod('2YM');
|
|
247
|
+
assert(false, 'Should have thrown an error for invalid format');
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
assert(error instanceof Error, 'Should throw Error');
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=term.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"term.test.js","sourceRoot":"","sources":["term.test.ts"],"names":[],"mappings":"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"}
|