@fintekkers/ledger-models 0.4.37 → 0.4.39
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/fintekkers/models/portfolio/portfolio_pb.d.ts +13 -0
- package/node/fintekkers/models/portfolio/portfolio_pb.js +123 -1
- package/node/fintekkers/models/position/position_filter_pb.d.ts +13 -0
- package/node/fintekkers/models/position/position_filter_pb.js +123 -1
- package/node/fintekkers/models/position/position_pb.d.ts +13 -0
- package/node/fintekkers/models/position/position_pb.js +123 -1
- package/node/fintekkers/models/price/price_pb.d.ts +13 -0
- package/node/fintekkers/models/price/price_pb.js +123 -1
- package/node/fintekkers/models/security/bond/issuance_pb.d.ts +13 -0
- package/node/fintekkers/models/security/bond/issuance_pb.js +123 -1
- package/node/fintekkers/models/security/identifier/identifier_pb.d.ts +13 -0
- package/node/fintekkers/models/security/identifier/identifier_pb.js +123 -1
- package/node/fintekkers/models/security/index_composition_pb.d.ts +13 -0
- package/node/fintekkers/models/security/index_composition_pb.js +123 -1
- package/node/fintekkers/models/security/security_pb.d.ts +13 -0
- package/node/fintekkers/models/security/security_pb.js +123 -1
- package/node/fintekkers/models/security/tenor_pb.d.ts +13 -0
- package/node/fintekkers/models/security/tenor_pb.js +123 -1
- package/node/fintekkers/models/strategy/strategy_allocation_pb.d.ts +13 -0
- package/node/fintekkers/models/strategy/strategy_allocation_pb.js +123 -1
- package/node/fintekkers/models/strategy/strategy_pb.d.ts +13 -0
- package/node/fintekkers/models/strategy/strategy_pb.js +123 -1
- package/node/fintekkers/models/transaction/transaction_pb.d.ts +13 -0
- package/node/fintekkers/models/transaction/transaction_pb.js +123 -1
- package/node/fintekkers/models/util/api/api_key_pb.d.ts +13 -0
- package/node/fintekkers/models/util/api/api_key_pb.js +123 -1
- package/node/fintekkers/models/util/date_range_pb.d.ts +13 -0
- package/node/fintekkers/models/util/date_range_pb.js +123 -1
- package/node/fintekkers/models/util/decimal_value_pb.d.ts +2 -0
- package/node/fintekkers/models/util/lock/node_partition_pb.d.ts +13 -0
- package/node/fintekkers/models/util/lock/node_partition_pb.js +123 -1
- package/node/fintekkers/models/util/lock/node_state_pb.d.ts +13 -0
- package/node/fintekkers/models/util/lock/node_state_pb.js +123 -1
- package/node/fintekkers/models/util/object_type_grpc_pb.js +1 -0
- package/node/fintekkers/models/util/object_type_pb.d.ts +63 -0
- package/node/fintekkers/models/util/object_type_pb.js +109 -0
- package/node/fintekkers/requests/index_composition/create_index_composition_request_pb.d.ts +25 -0
- package/node/fintekkers/requests/index_composition/create_index_composition_request_pb.js +244 -2
- package/node/fintekkers/requests/index_composition/get_index_composition_request_pb.d.ts +25 -0
- package/node/fintekkers/requests/index_composition/get_index_composition_request_pb.js +244 -2
- package/node/fintekkers/requests/portfolio/create_portfolio_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/portfolio/create_portfolio_request_pb.js +123 -1
- package/node/fintekkers/requests/portfolio/create_portfolio_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/portfolio/create_portfolio_response_pb.js +123 -1
- package/node/fintekkers/requests/portfolio/query_portfolio_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/portfolio/query_portfolio_request_pb.js +123 -1
- package/node/fintekkers/requests/portfolio/query_portfolio_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/portfolio/query_portfolio_response_pb.js +123 -1
- package/node/fintekkers/requests/position/query_position_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/position/query_position_request_pb.js +123 -1
- package/node/fintekkers/requests/position/query_position_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/position/query_position_response_pb.js +123 -1
- package/node/fintekkers/requests/price/create_price_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/price/create_price_request_pb.js +123 -1
- package/node/fintekkers/requests/price/create_price_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/price/create_price_response_pb.js +123 -1
- package/node/fintekkers/requests/price/query_price_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/price/query_price_request_pb.js +123 -1
- package/node/fintekkers/requests/price/query_price_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/price/query_price_response_pb.js +123 -1
- package/node/fintekkers/requests/security/create_security_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/security/create_security_request_pb.js +123 -1
- package/node/fintekkers/requests/security/create_security_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/security/create_security_response_pb.js +123 -1
- package/node/fintekkers/requests/security/get_field_values_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/security/get_field_values_request_pb.js +123 -1
- package/node/fintekkers/requests/security/get_field_values_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/security/get_field_values_response_pb.js +123 -1
- package/node/fintekkers/requests/security/get_fields_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/security/get_fields_response_pb.js +123 -1
- package/node/fintekkers/requests/security/query_security_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/security/query_security_request_pb.js +123 -1
- package/node/fintekkers/requests/security/query_security_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/security/query_security_response_pb.js +123 -1
- package/node/fintekkers/requests/transaction/create_transaction_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/transaction/create_transaction_request_pb.js +123 -1
- package/node/fintekkers/requests/transaction/create_transaction_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/transaction/create_transaction_response_pb.js +123 -1
- package/node/fintekkers/requests/transaction/query_transaction_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/transaction/query_transaction_request_pb.js +123 -1
- package/node/fintekkers/requests/transaction/query_transaction_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/transaction/query_transaction_response_pb.js +123 -1
- package/node/fintekkers/requests/util/delete_request_pb.d.ts +25 -0
- package/node/fintekkers/requests/util/delete_request_pb.js +244 -2
- package/node/fintekkers/requests/util/lock/lock_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/util/lock/lock_request_pb.js +123 -1
- package/node/fintekkers/requests/util/lock/lock_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/util/lock/lock_response_pb.js +123 -1
- package/node/fintekkers/requests/valuation/curve_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/valuation/curve_request_pb.js +123 -1
- package/node/fintekkers/requests/valuation/curve_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/valuation/curve_response_pb.js +123 -1
- package/node/fintekkers/requests/valuation/valuation_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/valuation/valuation_request_pb.js +123 -1
- package/node/fintekkers/requests/valuation/valuation_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/valuation/valuation_response_pb.js +123 -1
- package/node/wrappers/models/position/position.d.ts +1 -1
- package/node/wrappers/models/position/position.js.map +1 -1
- package/node/wrappers/models/position/position.test.js +2 -2
- package/node/wrappers/models/position/position.test.js.map +1 -1
- package/node/wrappers/models/position/position.test.ts +2 -2
- package/node/wrappers/models/position/position.ts +2 -2
- package/node/wrappers/models/position/position_matcher.js +1 -0
- package/node/wrappers/models/position/position_matcher.js.map +1 -0
- package/node/wrappers/models/position/position_matcher.test.js +1 -0
- package/node/wrappers/models/position/position_matcher.test.js.map +1 -0
- package/node/wrappers/models/position/positionfilter.js +3 -2
- package/node/wrappers/models/position/positionfilter.js.map +1 -1
- package/node/wrappers/models/position/positionfilter.ts +3 -2
- package/node/wrappers/models/price/Price.js +20 -12
- package/node/wrappers/models/price/Price.js.map +1 -1
- package/node/wrappers/models/price/Price.ts +19 -10
- package/node/wrappers/models/price/price_rules.d.ts +2 -2
- package/node/wrappers/models/price/price_rules.js +6 -4
- package/node/wrappers/models/price/price_rules.js.map +1 -1
- package/node/wrappers/models/price/price_rules.ts +5 -3
- package/node/wrappers/models/security/BondSecurity.d.ts +1 -1
- package/node/wrappers/models/security/BondSecurity.js +5 -5
- package/node/wrappers/models/security/BondSecurity.js.map +1 -1
- package/node/wrappers/models/security/BondSecurity.ts +5 -4
- package/node/wrappers/models/security/FloatingRateNote.js +2 -2
- package/node/wrappers/models/security/FloatingRateNote.js.map +1 -1
- package/node/wrappers/models/security/FloatingRateNote.ts +2 -1
- package/node/wrappers/models/security/Issuance.js +3 -6
- package/node/wrappers/models/security/Issuance.js.map +1 -1
- package/node/wrappers/models/security/Issuance.ts +3 -2
- package/node/wrappers/models/security/MortgageBackedSecurity.js +7 -7
- package/node/wrappers/models/security/MortgageBackedSecurity.js.map +1 -1
- package/node/wrappers/models/security/MortgageBackedSecurity.ts +7 -6
- package/node/wrappers/models/security/TIPSBond.js +2 -2
- package/node/wrappers/models/security/TIPSBond.js.map +1 -1
- package/node/wrappers/models/security/TIPSBond.ts +2 -1
- package/node/wrappers/models/security/security_rules.js +10 -12
- package/node/wrappers/models/security/security_rules.js.map +1 -1
- package/node/wrappers/models/security/security_rules.ts +9 -9
- package/node/wrappers/models/transaction/transaction.js +20 -14
- package/node/wrappers/models/transaction/transaction.js.map +1 -1
- package/node/wrappers/models/transaction/transaction.ts +20 -11
- package/node/wrappers/models/transaction/transaction_constructor.test.js +29 -0
- package/node/wrappers/models/transaction/transaction_constructor.test.js.map +1 -1
- package/node/wrappers/models/utils/decimal.d.ts +96 -0
- package/node/wrappers/models/utils/decimal.js +328 -0
- package/node/wrappers/models/utils/decimal.js.map +1 -0
- package/node/wrappers/models/utils/decimal.legacy.test.d.ts +1 -0
- package/node/wrappers/models/utils/decimal.legacy.test.js +174 -0
- package/node/wrappers/models/utils/decimal.legacy.test.js.map +1 -0
- package/node/wrappers/models/utils/decimal.legacy.test.ts +158 -0
- package/node/wrappers/models/utils/decimal.test.d.ts +1 -0
- package/node/wrappers/models/utils/decimal.test.js +258 -0
- package/node/wrappers/models/utils/decimal.test.js.map +1 -0
- package/node/wrappers/models/utils/decimal.test.ts +272 -0
- package/node/wrappers/models/utils/decimal.ts +335 -0
- package/node/wrappers/models/utils/decimal.typings.test.d.ts +1 -0
- package/node/wrappers/models/utils/decimal.typings.test.js +39 -0
- package/node/wrappers/models/utils/decimal.typings.test.js.map +1 -0
- package/node/wrappers/models/utils/decimal.typings.test.ts +16 -0
- package/node/wrappers/models/utils/serialization.d.ts +2 -1
- package/node/wrappers/models/utils/serialization.js +12 -2
- package/node/wrappers/models/utils/serialization.js.map +1 -1
- package/node/wrappers/models/utils/serialization.ts +14 -3
- package/node/wrappers/requests/position/QueryPositionRequest.js +3 -2
- package/node/wrappers/requests/position/QueryPositionRequest.js.map +1 -1
- package/node/wrappers/requests/position/QueryPositionRequest.ts +3 -2
- package/node/wrappers/services/portfolio-service/PortfolioService.js +5 -6
- package/node/wrappers/services/portfolio-service/PortfolioService.js.map +1 -1
- package/node/wrappers/services/portfolio-service/PortfolioService.ts +5 -6
- package/node/wrappers/services/price-service/PriceService.js +5 -6
- package/node/wrappers/services/price-service/PriceService.js.map +1 -1
- package/node/wrappers/services/price-service/PriceService.ts +5 -6
- package/node/wrappers/services/security-service/SecurityService.js +5 -6
- package/node/wrappers/services/security-service/SecurityService.js.map +1 -1
- package/node/wrappers/services/security-service/SecurityService.ts +5 -6
- package/node/wrappers/services/security-service/security.maturityLadder.test.js +1 -1
- 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/node/wrappers/services/transaction-service/TransactionService.js +5 -6
- package/node/wrappers/services/transaction-service/TransactionService.js.map +1 -1
- package/node/wrappers/services/transaction-service/TransactionService.ts +5 -6
- package/node/wrappers/util/link-resolver.js +5 -6
- package/node/wrappers/util/link-resolver.js.map +1 -1
- package/node/wrappers/util/link-resolver.ts +5 -6
- package/node/wrappers/util/object-type-legacy.json +21 -0
- package/node/wrappers/util/object-types.d.ts +62 -0
- package/node/wrappers/util/object-types.js +193 -0
- package/node/wrappers/util/object-types.js.map +1 -0
- package/node/wrappers/util/object-types.test.d.ts +1 -0
- package/node/wrappers/util/object-types.test.js +311 -0
- package/node/wrappers/util/object-types.test.js.map +1 -0
- package/node/wrappers/util/object-types.test.ts +307 -0
- package/node/wrappers/util/object-types.ts +207 -0
- package/package.json +1 -1
- package/tsconfig.json +1 -0
|
@@ -28,13 +28,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
const price_pb_1 = require("../../../fintekkers/models/price/price_pb");
|
|
30
30
|
const price_type_pb_1 = require("../../../fintekkers/models/price/price_type_pb");
|
|
31
|
-
const decimal_value_pb_1 = require("../../../fintekkers/models/util/decimal_value_pb");
|
|
32
31
|
const security_pb_1 = require("../../../fintekkers/models/security/security_pb");
|
|
33
32
|
const security_1 = __importDefault(require("../security/security"));
|
|
34
33
|
const datetime_1 = require("../utils/datetime");
|
|
35
34
|
const uuid_1 = require("../utils/uuid");
|
|
36
35
|
const decimal_js_1 = require("decimal.js");
|
|
37
36
|
const LinkCacheModule = __importStar(require("../../util/link-cache"));
|
|
37
|
+
const decimal_1 = require("../utils/decimal");
|
|
38
|
+
const object_type_pb_1 = require("../../../fintekkers/models/util/object_type_pb");
|
|
39
|
+
const object_types_1 = require("../../util/object-types");
|
|
38
40
|
class Price {
|
|
39
41
|
constructor(proto) {
|
|
40
42
|
this.proto = proto;
|
|
@@ -50,14 +52,12 @@ class Price {
|
|
|
50
52
|
* @param priceType - Optional price type, defaults to PERCENTAGE
|
|
51
53
|
*/
|
|
52
54
|
static fromSimple(securityId, price, date, priceType = price_type_pb_1.PriceTypeProto.PERCENTAGE) {
|
|
53
|
-
const decimalValueProto =
|
|
54
|
-
decimalValueProto.setArbitraryPrecisionValue(price.toString());
|
|
55
|
+
const decimalValueProto = (0, decimal_1.encodeDecimal)((0, decimal_1.parseDecimalString)(price.toString()));
|
|
55
56
|
const securityProto = new security_pb_1.SecurityProto();
|
|
56
57
|
securityProto.setUuid(new uuid_1.UUID(uuid_1.UUID.fromString(securityId)).toUUIDProto());
|
|
57
58
|
securityProto.setIsLink(true);
|
|
58
59
|
const priceProto = new price_pb_1.PriceProto();
|
|
59
|
-
priceProto.
|
|
60
|
-
priceProto.setVersion('0.0.1');
|
|
60
|
+
(0, object_types_1.stamp)(priceProto, object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_PRICE, 'Price', '0.0.1');
|
|
61
61
|
priceProto.setUuid(uuid_1.UUID.random().toUUIDProto());
|
|
62
62
|
priceProto.setAsOf(datetime_1.ZonedDateTime.from(date).toProto());
|
|
63
63
|
priceProto.setPrice(decimalValueProto);
|
|
@@ -69,12 +69,10 @@ class Price {
|
|
|
69
69
|
* Factory method to create a Price from a Decimal value, Security, and ZonedDateTime
|
|
70
70
|
*/
|
|
71
71
|
static create(price, security, asOf) {
|
|
72
|
-
const decimalValueProto =
|
|
73
|
-
decimalValueProto.setArbitraryPrecisionValue(price.toString());
|
|
72
|
+
const decimalValueProto = (0, decimal_1.encodeDecimal)((0, decimal_1.fromDecimalJs)(price));
|
|
74
73
|
const priceProto = new price_pb_1.PriceProto();
|
|
75
74
|
priceProto.setPrice(decimalValueProto);
|
|
76
|
-
priceProto.
|
|
77
|
-
priceProto.setVersion('0.0.1');
|
|
75
|
+
(0, object_types_1.stamp)(priceProto, object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_PRICE, 'Price', '0.0.1');
|
|
78
76
|
priceProto.setAsOf(asOf.toProto());
|
|
79
77
|
priceProto.setUuid(uuid_1.UUID.random().toUUIDProto());
|
|
80
78
|
priceProto.setSecurity(security.proto);
|
|
@@ -126,7 +124,7 @@ class Price {
|
|
|
126
124
|
const priceValue = this.proto.getPrice();
|
|
127
125
|
if (!priceValue)
|
|
128
126
|
throw new Error("Price value is required");
|
|
129
|
-
return
|
|
127
|
+
return (0, decimal_1.toDecimalJs)((0, decimal_1.withField)('price', () => (0, decimal_1.decodeDecimal)(priceValue)));
|
|
130
128
|
}
|
|
131
129
|
getPriceType() {
|
|
132
130
|
this.ensureHydrated();
|
|
@@ -151,13 +149,23 @@ class Price {
|
|
|
151
149
|
return datetime_1.ZonedDateTime.fromRequired(this.proto.getAsOf(), 'price.as_of');
|
|
152
150
|
}
|
|
153
151
|
toString() {
|
|
154
|
-
|
|
155
|
-
const priceStr = (_b = (_a = this.proto.getPrice()) === null || _a === void 0 ? void 0 : _a.getArbitraryPrecisionValue()) !== null && _b !== void 0 ? _b : 'N/A';
|
|
152
|
+
const priceStr = priceDisplay(this.proto.getPrice());
|
|
156
153
|
return `Price[${priceStr}, securityId=${this.getSecurityID().toString()}]`;
|
|
157
154
|
}
|
|
158
155
|
equals(other) {
|
|
159
156
|
return this.getID().equals(other.getID());
|
|
160
157
|
}
|
|
161
158
|
}
|
|
159
|
+
/** The canonical string of a price, keeping its scale, or 'N/A' when unset or unreadable. */
|
|
160
|
+
function priceDisplay(p) {
|
|
161
|
+
if (!p || (0, decimal_1.isUnsetDecimal)(p))
|
|
162
|
+
return 'N/A';
|
|
163
|
+
try {
|
|
164
|
+
return (0, decimal_1.toCanonicalString)((0, decimal_1.decodeDecimal)(p));
|
|
165
|
+
}
|
|
166
|
+
catch (e) {
|
|
167
|
+
return 'N/A';
|
|
168
|
+
}
|
|
169
|
+
}
|
|
162
170
|
exports.default = Price;
|
|
163
171
|
//# sourceMappingURL=Price.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Price.js","sourceRoot":"","sources":["Price.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wEAAuE;AACvE,kFAAgF;
|
|
1
|
+
{"version":3,"file":"Price.js","sourceRoot":"","sources":["Price.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,9 @@ import { ZonedDateTime } from "../utils/datetime";
|
|
|
7
7
|
import { UUID } from "../utils/uuid";
|
|
8
8
|
import { Decimal } from "decimal.js";
|
|
9
9
|
import * as LinkCacheModule from "../../util/link-cache";
|
|
10
|
+
import { decodeDecimal, encodeDecimal, fromDecimalJs, isUnsetDecimal, parseDecimalString, toCanonicalString, toDecimalJs, withField } from "../utils/decimal";
|
|
11
|
+
import { ObjectTypeProto } from '../../../fintekkers/models/util/object_type_pb';
|
|
12
|
+
import { stamp } from '../../util/object-types';
|
|
10
13
|
|
|
11
14
|
class Price {
|
|
12
15
|
proto: PriceProto;
|
|
@@ -31,16 +34,14 @@ class Price {
|
|
|
31
34
|
date: Date,
|
|
32
35
|
priceType: PriceTypeProto = PriceTypeProto.PERCENTAGE
|
|
33
36
|
): Price {
|
|
34
|
-
const decimalValueProto =
|
|
35
|
-
decimalValueProto.setArbitraryPrecisionValue(price.toString());
|
|
37
|
+
const decimalValueProto = encodeDecimal(parseDecimalString(price.toString()));
|
|
36
38
|
|
|
37
39
|
const securityProto = new SecurityProto();
|
|
38
40
|
securityProto.setUuid(new UUID(UUID.fromString(securityId)).toUUIDProto());
|
|
39
41
|
securityProto.setIsLink(true);
|
|
40
42
|
|
|
41
43
|
const priceProto = new PriceProto();
|
|
42
|
-
priceProto.
|
|
43
|
-
priceProto.setVersion('0.0.1');
|
|
44
|
+
stamp(priceProto, ObjectTypeProto.OBJECT_TYPE_PRICE, 'Price', '0.0.1');
|
|
44
45
|
priceProto.setUuid(UUID.random().toUUIDProto());
|
|
45
46
|
priceProto.setAsOf(ZonedDateTime.from(date).toProto());
|
|
46
47
|
priceProto.setPrice(decimalValueProto);
|
|
@@ -54,13 +55,11 @@ class Price {
|
|
|
54
55
|
* Factory method to create a Price from a Decimal value, Security, and ZonedDateTime
|
|
55
56
|
*/
|
|
56
57
|
static create(price: Decimal, security: Security, asOf: ZonedDateTime): Price {
|
|
57
|
-
const decimalValueProto =
|
|
58
|
-
decimalValueProto.setArbitraryPrecisionValue(price.toString());
|
|
58
|
+
const decimalValueProto = encodeDecimal(fromDecimalJs(price));
|
|
59
59
|
|
|
60
60
|
const priceProto = new PriceProto();
|
|
61
61
|
priceProto.setPrice(decimalValueProto);
|
|
62
|
-
priceProto.
|
|
63
|
-
priceProto.setVersion('0.0.1');
|
|
62
|
+
stamp(priceProto, ObjectTypeProto.OBJECT_TYPE_PRICE, 'Price', '0.0.1');
|
|
64
63
|
priceProto.setAsOf(asOf.toProto());
|
|
65
64
|
priceProto.setUuid(UUID.random().toUUIDProto());
|
|
66
65
|
priceProto.setSecurity(security.proto);
|
|
@@ -116,7 +115,7 @@ class Price {
|
|
|
116
115
|
this.ensureHydrated();
|
|
117
116
|
const priceValue = this.proto.getPrice();
|
|
118
117
|
if (!priceValue) throw new Error("Price value is required");
|
|
119
|
-
return
|
|
118
|
+
return toDecimalJs(withField('price', () => decodeDecimal(priceValue)));
|
|
120
119
|
}
|
|
121
120
|
|
|
122
121
|
getPriceType(): PriceTypeProto {
|
|
@@ -143,7 +142,7 @@ class Price {
|
|
|
143
142
|
}
|
|
144
143
|
|
|
145
144
|
toString(): string {
|
|
146
|
-
const priceStr = this.proto.getPrice()
|
|
145
|
+
const priceStr = priceDisplay(this.proto.getPrice());
|
|
147
146
|
return `Price[${priceStr}, securityId=${this.getSecurityID().toString()}]`;
|
|
148
147
|
}
|
|
149
148
|
|
|
@@ -152,4 +151,14 @@ class Price {
|
|
|
152
151
|
}
|
|
153
152
|
}
|
|
154
153
|
|
|
154
|
+
/** The canonical string of a price, keeping its scale, or 'N/A' when unset or unreadable. */
|
|
155
|
+
function priceDisplay(p: DecimalValueProto | undefined): string {
|
|
156
|
+
if (!p || isUnsetDecimal(p)) return 'N/A';
|
|
157
|
+
try {
|
|
158
|
+
return toCanonicalString(decodeDecimal(p));
|
|
159
|
+
} catch (e) {
|
|
160
|
+
return 'N/A';
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
155
164
|
export default Price;
|
|
@@ -5,8 +5,8 @@ import { FieldViolationProto } from '../../../fintekkers/requests/util/errors/fi
|
|
|
5
5
|
* (docs/adr/typed-input-errors.md). Pure: proto in, violations out.
|
|
6
6
|
*
|
|
7
7
|
* Three rules, checked in this order: `security` has a non-empty UUID,
|
|
8
|
-
* `price` has
|
|
9
|
-
*
|
|
8
|
+
* `price` has either decimal form set (zero is valid, see the PriceProto
|
|
9
|
+
* comment), and `price_type` is not UNKNOWN_PRICE_TYPE. The price
|
|
10
10
|
* value is not parsed. Never throws on bad or unset input; null or undefined
|
|
11
11
|
* is checked as an empty PriceProto. Unlike security_rules, a link price is
|
|
12
12
|
* not skipped: hydrate it first. The Price wrapper does not call these rules.
|
|
@@ -5,13 +5,14 @@ const price_pb_1 = require("../../../fintekkers/models/price/price_pb");
|
|
|
5
5
|
const price_type_pb_1 = require("../../../fintekkers/models/price/price_type_pb");
|
|
6
6
|
const errors_1 = require("../errors");
|
|
7
7
|
const uuid_1 = require("../utils/uuid");
|
|
8
|
+
const decimal_1 = require("../utils/decimal");
|
|
8
9
|
/**
|
|
9
10
|
* Price input rules (LM-289): JS counterpart of Java's PriceRules
|
|
10
11
|
* (docs/adr/typed-input-errors.md). Pure: proto in, violations out.
|
|
11
12
|
*
|
|
12
13
|
* Three rules, checked in this order: `security` has a non-empty UUID,
|
|
13
|
-
* `price` has
|
|
14
|
-
*
|
|
14
|
+
* `price` has either decimal form set (zero is valid, see the PriceProto
|
|
15
|
+
* comment), and `price_type` is not UNKNOWN_PRICE_TYPE. The price
|
|
15
16
|
* value is not parsed. Never throws on bad or unset input; null or undefined
|
|
16
17
|
* is checked as an empty PriceProto. Unlike security_rules, a link price is
|
|
17
18
|
* not skipped: hydrate it first. The Price wrapper does not call these rules.
|
|
@@ -21,14 +22,15 @@ exports.PRICE = 'price';
|
|
|
21
22
|
exports.PRICE_TYPE = 'price_type';
|
|
22
23
|
/** Returns every field-level violation on this price, or an empty array when it is valid. */
|
|
23
24
|
function validate(proto) {
|
|
24
|
-
var _a, _b
|
|
25
|
+
var _a, _b;
|
|
25
26
|
const p = proto !== null && proto !== void 0 ? proto : new price_pb_1.PriceProto();
|
|
26
27
|
const id = objectIdOf(p);
|
|
27
28
|
const out = [];
|
|
28
29
|
if (!((_b = (_a = p.getSecurity()) === null || _a === void 0 ? void 0 : _a.getUuid()) === null || _b === void 0 ? void 0 : _b.getRawUuid_asU8().length)) {
|
|
29
30
|
out.push((0, errors_1.violation)(exports.SECURITY, id, 'security with a non-empty uuid is required'));
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
+
const price = p.getPrice();
|
|
33
|
+
if (!price || (0, decimal_1.isUnsetDecimal)(price)) {
|
|
32
34
|
out.push((0, errors_1.violation)(exports.PRICE, id, 'price is required'));
|
|
33
35
|
}
|
|
34
36
|
if (p.getPriceType() === price_type_pb_1.PriceTypeProto.UNKNOWN_PRICE_TYPE) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"price_rules.js","sourceRoot":"","sources":["price_rules.ts"],"names":[],"mappings":";;;AAAA,wEAAuE;AACvE,kFAAgF;AAEhF,sCAA4D;AAC5D,wCAAqC;
|
|
1
|
+
{"version":3,"file":"price_rules.js","sourceRoot":"","sources":["price_rules.ts"],"names":[],"mappings":";;;AAAA,wEAAuE;AACvE,kFAAgF;AAEhF,sCAA4D;AAC5D,wCAAqC;AACrC,8CAAkD;AAElD;;;;;;;;;;GAUG;AAEU,QAAA,QAAQ,GAAG,UAAU,CAAC;AACtB,QAAA,KAAK,GAAG,OAAO,CAAC;AAChB,QAAA,UAAU,GAAG,YAAY,CAAC;AAEvC,6FAA6F;AAC7F,SAAgB,QAAQ,CAAC,KAAoC;;IACzD,MAAM,CAAC,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,IAAI,qBAAU,EAAE,CAAC;IACpC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAA0B,EAAE,CAAC;IACtC,IAAI,CAAC,CAAA,MAAA,MAAA,CAAC,CAAC,WAAW,EAAE,0CAAE,OAAO,EAAE,0CAAE,eAAe,GAAG,MAAM,CAAA,EAAE;QACvD,GAAG,CAAC,IAAI,CAAC,IAAA,kBAAS,EAAC,gBAAQ,EAAE,EAAE,EAAE,4CAA4C,CAAC,CAAC,CAAC;KACnF;IACD,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3B,IAAI,CAAC,KAAK,IAAI,IAAA,wBAAc,EAAC,KAAK,CAAC,EAAE;QACjC,GAAG,CAAC,IAAI,CAAC,IAAA,kBAAS,EAAC,aAAK,EAAE,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;KACvD;IACD,IAAI,CAAC,CAAC,YAAY,EAAE,KAAK,8BAAc,CAAC,kBAAkB,EAAE;QACxD,GAAG,CAAC,IAAI,CAAC,IAAA,kBAAS,EAAC,kBAAU,EAAE,EAAE,EAAE,2CAA2C,CAAC,CAAC,CAAC;KACpF;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAfD,4BAeC;AAED,oFAAoF;AACpF,SAAgB,YAAY,CAAC,KAAoC;IAC7D,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,6BAAoB,CAAC,UAAU,CAAC,CAAC;AAC1E,CAAC;AAHD,oCAGC;AAED,6EAA6E;AAC7E,SAAS,UAAU,CAAC,KAAiB;;IACjC,MAAM,GAAG,GAAG,MAAA,KAAK,CAAC,OAAO,EAAE,0CAAE,eAAe,EAAE,CAAC;IAC/C,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,WAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACxE,CAAC"}
|
|
@@ -3,14 +3,15 @@ import { PriceTypeProto } from '../../../fintekkers/models/price/price_type_pb';
|
|
|
3
3
|
import { FieldViolationProto } from '../../../fintekkers/requests/util/errors/field_violation_pb';
|
|
4
4
|
import { ModelValidationError, violation } from '../errors';
|
|
5
5
|
import { UUID } from '../utils/uuid';
|
|
6
|
+
import { isUnsetDecimal } from '../utils/decimal';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Price input rules (LM-289): JS counterpart of Java's PriceRules
|
|
9
10
|
* (docs/adr/typed-input-errors.md). Pure: proto in, violations out.
|
|
10
11
|
*
|
|
11
12
|
* Three rules, checked in this order: `security` has a non-empty UUID,
|
|
12
|
-
* `price` has
|
|
13
|
-
*
|
|
13
|
+
* `price` has either decimal form set (zero is valid, see the PriceProto
|
|
14
|
+
* comment), and `price_type` is not UNKNOWN_PRICE_TYPE. The price
|
|
14
15
|
* value is not parsed. Never throws on bad or unset input; null or undefined
|
|
15
16
|
* is checked as an empty PriceProto. Unlike security_rules, a link price is
|
|
16
17
|
* not skipped: hydrate it first. The Price wrapper does not call these rules.
|
|
@@ -28,7 +29,8 @@ export function validate(proto: PriceProto | null | undefined): FieldViolationPr
|
|
|
28
29
|
if (!p.getSecurity()?.getUuid()?.getRawUuid_asU8().length) {
|
|
29
30
|
out.push(violation(SECURITY, id, 'security with a non-empty uuid is required'));
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
+
const price = p.getPrice();
|
|
33
|
+
if (!price || isUnsetDecimal(price)) {
|
|
32
34
|
out.push(violation(PRICE, id, 'price is required'));
|
|
33
35
|
}
|
|
34
36
|
if (p.getPriceType() === PriceTypeProto.UNKNOWN_PRICE_TYPE) {
|
|
@@ -20,7 +20,7 @@ export interface BondPricerInputs {
|
|
|
20
20
|
issueDate: Date;
|
|
21
21
|
maturityDate: Date;
|
|
22
22
|
}
|
|
23
|
-
/** Build a DecimalValueProto from a Decimal. */
|
|
23
|
+
/** Build a DecimalValueProto from a Decimal, in both forms (LM-306). */
|
|
24
24
|
export declare function decimalToProto(v: Decimal): DecimalValueProto;
|
|
25
25
|
/**
|
|
26
26
|
* Build a populated BondDetailsProto from BondPricerInputs. Shared helper
|
|
@@ -7,7 +7,6 @@ exports.buildBondDetails = exports.decimalToProto = void 0;
|
|
|
7
7
|
const security_1 = __importDefault(require("./security"));
|
|
8
8
|
const security_pb_1 = require("../../../fintekkers/models/security/security_pb");
|
|
9
9
|
const product_type_pb_1 = require("../../../fintekkers/models/security/product_type_pb");
|
|
10
|
-
const decimal_value_pb_1 = require("../../../fintekkers/models/util/decimal_value_pb");
|
|
11
10
|
const date_1 = require("../utils/date");
|
|
12
11
|
const coupon_frequency_1 = require("./coupon_frequency");
|
|
13
12
|
const coupon_type_1 = require("./coupon_type");
|
|
@@ -16,9 +15,10 @@ const tenor_type_pb_1 = require("../../../fintekkers/models/security/tenor_type_
|
|
|
16
15
|
const decimal_js_1 = require("decimal.js");
|
|
17
16
|
const product_hierarchy_1 = require("./product_hierarchy");
|
|
18
17
|
const Issuance_1 = __importDefault(require("./Issuance"));
|
|
19
|
-
|
|
18
|
+
const decimal_1 = require("../utils/decimal");
|
|
19
|
+
/** Build a DecimalValueProto from a Decimal, in both forms (LM-306). */
|
|
20
20
|
function decimalToProto(v) {
|
|
21
|
-
return
|
|
21
|
+
return (0, decimal_1.encodeDecimal)((0, decimal_1.fromDecimalJs)(v));
|
|
22
22
|
}
|
|
23
23
|
exports.decimalToProto = decimalToProto;
|
|
24
24
|
/**
|
|
@@ -99,14 +99,14 @@ class BondSecurity extends security_1.default {
|
|
|
99
99
|
const rate = bond ? bond.getCouponRate() : undefined;
|
|
100
100
|
if (!rate)
|
|
101
101
|
return null;
|
|
102
|
-
return
|
|
102
|
+
return (0, decimal_1.toDecimalJs)((0, decimal_1.withField)('bond_details.coupon_rate', () => (0, decimal_1.decodeDecimal)(rate)));
|
|
103
103
|
}
|
|
104
104
|
getFaceValue() {
|
|
105
105
|
const bond = this.getBondLikeDetails();
|
|
106
106
|
const faceValue = bond ? bond.getFaceValue() : undefined;
|
|
107
107
|
if (!faceValue)
|
|
108
108
|
return null;
|
|
109
|
-
return
|
|
109
|
+
return (0, decimal_1.toDecimalJs)((0, decimal_1.withField)('bond_details.face_value', () => (0, decimal_1.decodeDecimal)(faceValue)));
|
|
110
110
|
}
|
|
111
111
|
getCouponType() {
|
|
112
112
|
const bond = this.getBondLikeDetails();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BondSecurity.js","sourceRoot":"","sources":["BondSecurity.ts"],"names":[],"mappings":";;;;;;AAAA,0DAAkC;AAClC,iFAAkG;AAClG,yFAAuF;
|
|
1
|
+
{"version":3,"file":"BondSecurity.js","sourceRoot":"","sources":["BondSecurity.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ import { CouponFrequencyProto } from '../../../fintekkers/models/security/coupon
|
|
|
14
14
|
import { Decimal } from 'decimal.js';
|
|
15
15
|
import { isDescendantOf } from './product_hierarchy';
|
|
16
16
|
import Issuance from './Issuance';
|
|
17
|
+
import { decodeDecimal, encodeDecimal, fromDecimalJs, toDecimalJs, withField } from '../utils/decimal';
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* Inputs required to mint a SecurityProto for the bond pricer. Shared by
|
|
@@ -28,9 +29,9 @@ export interface BondPricerInputs {
|
|
|
28
29
|
maturityDate: Date;
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
/** Build a DecimalValueProto from a Decimal. */
|
|
32
|
+
/** Build a DecimalValueProto from a Decimal, in both forms (LM-306). */
|
|
32
33
|
export function decimalToProto(v: Decimal): DecimalValueProto {
|
|
33
|
-
return
|
|
34
|
+
return encodeDecimal(fromDecimalJs(v));
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
/**
|
|
@@ -118,14 +119,14 @@ class BondSecurity extends Security {
|
|
|
118
119
|
const bond = this.getBondLikeDetails();
|
|
119
120
|
const rate = bond ? bond.getCouponRate() : undefined;
|
|
120
121
|
if (!rate) return null;
|
|
121
|
-
return
|
|
122
|
+
return toDecimalJs(withField('bond_details.coupon_rate', () => decodeDecimal(rate)));
|
|
122
123
|
}
|
|
123
124
|
|
|
124
125
|
getFaceValue(): Decimal | null {
|
|
125
126
|
const bond = this.getBondLikeDetails();
|
|
126
127
|
const faceValue = bond ? bond.getFaceValue() : undefined;
|
|
127
128
|
if (!faceValue) return null;
|
|
128
|
-
return
|
|
129
|
+
return toDecimalJs(withField('bond_details.face_value', () => decodeDecimal(faceValue)));
|
|
129
130
|
}
|
|
130
131
|
|
|
131
132
|
getCouponType(): CouponType {
|
|
@@ -28,7 +28,7 @@ const security_pb_1 = require("../../../fintekkers/models/security/security_pb")
|
|
|
28
28
|
const product_type_pb_1 = require("../../../fintekkers/models/security/product_type_pb");
|
|
29
29
|
const index_type_pb_1 = require("../../../fintekkers/models/security/index/index_type_pb");
|
|
30
30
|
const coupon_frequency_pb_1 = require("../../../fintekkers/models/security/coupon_frequency_pb");
|
|
31
|
-
const
|
|
31
|
+
const decimal_1 = require("../utils/decimal");
|
|
32
32
|
/**
|
|
33
33
|
* FRN-specific accessors layered on top of BondSecurity. The floating-rate
|
|
34
34
|
* fields live in the parallel frn_extension sub-message; bond_details
|
|
@@ -48,7 +48,7 @@ class FloatingRateNote extends BondSecurity_1.default {
|
|
|
48
48
|
const v = ext ? ext.getSpread() : undefined;
|
|
49
49
|
if (!v)
|
|
50
50
|
return null;
|
|
51
|
-
return
|
|
51
|
+
return (0, decimal_1.toDecimalJs)((0, decimal_1.withField)('frn_extension.spread', () => (0, decimal_1.decodeDecimal)(v)));
|
|
52
52
|
}
|
|
53
53
|
/** Which index the coupon resets off (SOFR on a US TREASURY_FRN). */
|
|
54
54
|
getReferenceRateIndex() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingRateNote.js","sourceRoot":"","sources":["FloatingRateNote.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAIwB;AACxB,iFAAmG;AACnG,yFAAuF;AACvF,2FAAyF;AACzF,iGAA+F;
|
|
1
|
+
{"version":3,"file":"FloatingRateNote.js","sourceRoot":"","sources":["FloatingRateNote.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAIwB;AACxB,iFAAmG;AACnG,yFAAuF;AACvF,2FAAyF;AACzF,iGAA+F;AAE/F,8CAAyE;AAEzE;;;;GAIG;AACH,MAAM,gBAAiB,SAAQ,sBAAY;IACzC,YAAY,KAAoB;QAC9B,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;IAEO,eAAe;;QACrB,OAAO,MAAA,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,mCAAI,SAAS,CAAC;IACnD,CAAC;IAED,+DAA+D;IAC/D,SAAS;QACP,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5C,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,OAAO,IAAA,qBAAW,EAAC,IAAA,mBAAS,EAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,IAAA,uBAAa,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,qEAAqE;IACrE,qBAAqB;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,8BAAc,CAAC,kBAAkB,CAAC;IAC/E,CAAC;IAED,sCAAsC;IACtC,iBAAiB;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,0CAAoB,CAAC,wBAAwB,CAAC;IACvF,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAIvB;QACC,MAAM,IAAI,GAAG,IAAA,+BAAgB,EAAC,IAAI,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,+BAAiB,EAAE;aAChC,SAAS,CAAC,IAAA,6BAAc,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACtC,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,CAAC;aAC9C,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1C,OAAO,IAAI,2BAAa,EAAE;aACvB,cAAc,CAAC,kCAAgB,CAAC,YAAY,CAAC;aAC7C,cAAc,CAAC,IAAI,CAAC;aACpB,eAAe,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;CACF;AAED,kBAAe,gBAAgB,CAAC"}
|
|
@@ -8,6 +8,7 @@ import { ProductTypeProto } from '../../../fintekkers/models/security/product_ty
|
|
|
8
8
|
import { IndexTypeProto } from '../../../fintekkers/models/security/index/index_type_pb';
|
|
9
9
|
import { CouponFrequencyProto } from '../../../fintekkers/models/security/coupon_frequency_pb';
|
|
10
10
|
import { Decimal } from 'decimal.js';
|
|
11
|
+
import { decodeDecimal, toDecimalJs, withField } from '../utils/decimal';
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* FRN-specific accessors layered on top of BondSecurity. The floating-rate
|
|
@@ -28,7 +29,7 @@ class FloatingRateNote extends BondSecurity {
|
|
|
28
29
|
const ext = this.getFrnExtension();
|
|
29
30
|
const v = ext ? ext.getSpread() : undefined;
|
|
30
31
|
if (!v) return null;
|
|
31
|
-
return
|
|
32
|
+
return toDecimalJs(withField('frn_extension.spread', () => decodeDecimal(v)));
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
/** Which index the coupon resets off (SOFR on a US TREASURY_FRN). */
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
const date_1 = require("../utils/date");
|
|
7
|
-
const
|
|
4
|
+
const decimal_1 = require("../utils/decimal");
|
|
8
5
|
/**
|
|
9
6
|
* Typed wrapper around a single IssuanceProto. Returns null for unset
|
|
10
7
|
* sub-messages and Decimal/Date for populated ones — callers no longer
|
|
@@ -18,9 +15,9 @@ class Issuance {
|
|
|
18
15
|
this.proto = proto;
|
|
19
16
|
}
|
|
20
17
|
static _toDecimal(value) {
|
|
21
|
-
if (!value)
|
|
18
|
+
if (!value || (0, decimal_1.isUnsetDecimal)(value))
|
|
22
19
|
return null;
|
|
23
|
-
return
|
|
20
|
+
return (0, decimal_1.toDecimalJs)((0, decimal_1.decodeDecimal)(value));
|
|
24
21
|
}
|
|
25
22
|
/** Auction issue (settlement) date. Null if unset. */
|
|
26
23
|
getIssueDate() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Issuance.js","sourceRoot":"","sources":["Issuance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Issuance.js","sourceRoot":"","sources":["Issuance.ts"],"names":[],"mappings":";;AAGA,wCAAqD;AAErD,8CAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,QAAQ;IAGZ,YAAY,KAAoB;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,UAAU,CAAC,KAAoC;QAC5D,IAAI,CAAC,KAAK,IAAI,IAAA,wBAAc,EAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACjD,OAAO,IAAA,qBAAW,EAAC,IAAA,uBAAa,EAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,sDAAsD;IACtD,YAAY;QACV,OAAO,IAAA,2BAAoB,EAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,gDAAgD;IAChD,mBAAmB;QACjB,OAAO,IAAA,2BAAoB,EAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;QAClB,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,yDAAyD;IACzD,gBAAgB;QACd,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,iEAAiE;IACjE,iCAAiC;QAC/B,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,iCAAiC,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,yEAAyE;IACzE,uBAAuB;QACrB,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,8EAA8E;IAC9E,6BAA6B;QAC3B,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,6BAA6B,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,qEAAqE;IACrE,cAAc;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;IACrC,CAAC;CACF;AAED,kBAAe,QAAQ,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { AuctionTypeProto } from "../../../fintekkers/models/security/bond/aucti
|
|
|
3
3
|
import { DecimalValueProto } from "../../../fintekkers/models/util/decimal_value_pb";
|
|
4
4
|
import { localDateProtoToDate } from "../utils/date";
|
|
5
5
|
import Decimal from "decimal.js";
|
|
6
|
+
import { decodeDecimal, isUnsetDecimal, toDecimalJs } from "../utils/decimal";
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Typed wrapper around a single IssuanceProto. Returns null for unset
|
|
@@ -20,8 +21,8 @@ class Issuance {
|
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
private static _toDecimal(value: DecimalValueProto | undefined): Decimal | null {
|
|
23
|
-
if (!value) return null;
|
|
24
|
-
return
|
|
24
|
+
if (!value || isUnsetDecimal(value)) return null;
|
|
25
|
+
return toDecimalJs(decodeDecimal(value));
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
/** Auction issue (settlement) date. Null if unset. */
|
|
@@ -27,7 +27,7 @@ const BondSecurity_1 = __importStar(require("./BondSecurity"));
|
|
|
27
27
|
const security_pb_1 = require("../../../fintekkers/models/security/security_pb");
|
|
28
28
|
const agency_pb_1 = require("../../../fintekkers/models/security/bond/agency_pb");
|
|
29
29
|
const product_type_pb_1 = require("../../../fintekkers/models/security/product_type_pb");
|
|
30
|
-
const
|
|
30
|
+
const decimal_1 = require("../utils/decimal");
|
|
31
31
|
/**
|
|
32
32
|
* MBS-specific accessors layered on top of BondSecurity. Pool-level fields
|
|
33
33
|
* (agency, WAC, WAM, pass-through rate, factors, balances, PSA) live in
|
|
@@ -58,7 +58,7 @@ class MortgageBackedSecurity extends BondSecurity_1.default {
|
|
|
58
58
|
const v = ext ? ext.getWac() : undefined;
|
|
59
59
|
if (!v)
|
|
60
60
|
return null;
|
|
61
|
-
return
|
|
61
|
+
return (0, decimal_1.toDecimalJs)((0, decimal_1.withField)('mbs_extension.wac', () => (0, decimal_1.decodeDecimal)(v)));
|
|
62
62
|
}
|
|
63
63
|
/** Weighted Average Maturity, in months. */
|
|
64
64
|
getWam() {
|
|
@@ -71,7 +71,7 @@ class MortgageBackedSecurity extends BondSecurity_1.default {
|
|
|
71
71
|
const v = ext ? ext.getPassThroughRate() : undefined;
|
|
72
72
|
if (!v)
|
|
73
73
|
return null;
|
|
74
|
-
return
|
|
74
|
+
return (0, decimal_1.toDecimalJs)((0, decimal_1.withField)('mbs_extension.pass_through_rate', () => (0, decimal_1.decodeDecimal)(v)));
|
|
75
75
|
}
|
|
76
76
|
/** Current pool factor (remaining UPB / original face). */
|
|
77
77
|
getCurrentFactor() {
|
|
@@ -79,7 +79,7 @@ class MortgageBackedSecurity extends BondSecurity_1.default {
|
|
|
79
79
|
const v = ext ? ext.getCurrentFactor() : undefined;
|
|
80
80
|
if (!v)
|
|
81
81
|
return null;
|
|
82
|
-
return
|
|
82
|
+
return (0, decimal_1.toDecimalJs)((0, decimal_1.withField)('mbs_extension.current_factor', () => (0, decimal_1.decodeDecimal)(v)));
|
|
83
83
|
}
|
|
84
84
|
/** Original face value at issuance. */
|
|
85
85
|
getOriginalFaceValue() {
|
|
@@ -87,7 +87,7 @@ class MortgageBackedSecurity extends BondSecurity_1.default {
|
|
|
87
87
|
const v = ext ? ext.getOriginalFaceValue() : undefined;
|
|
88
88
|
if (!v)
|
|
89
89
|
return null;
|
|
90
|
-
return
|
|
90
|
+
return (0, decimal_1.toDecimalJs)((0, decimal_1.withField)('mbs_extension.original_face_value', () => (0, decimal_1.decodeDecimal)(v)));
|
|
91
91
|
}
|
|
92
92
|
/** Current Unpaid Principal Balance. */
|
|
93
93
|
getCurrentUpb() {
|
|
@@ -95,7 +95,7 @@ class MortgageBackedSecurity extends BondSecurity_1.default {
|
|
|
95
95
|
const v = ext ? ext.getCurrentUpb() : undefined;
|
|
96
96
|
if (!v)
|
|
97
97
|
return null;
|
|
98
|
-
return
|
|
98
|
+
return (0, decimal_1.toDecimalJs)((0, decimal_1.withField)('mbs_extension.current_upb', () => (0, decimal_1.decodeDecimal)(v)));
|
|
99
99
|
}
|
|
100
100
|
/** PSA prepayment speed assumption. */
|
|
101
101
|
getPsaSpeed() {
|
|
@@ -103,7 +103,7 @@ class MortgageBackedSecurity extends BondSecurity_1.default {
|
|
|
103
103
|
const v = ext ? ext.getPsaSpeed() : undefined;
|
|
104
104
|
if (!v)
|
|
105
105
|
return null;
|
|
106
|
-
return
|
|
106
|
+
return (0, decimal_1.toDecimalJs)((0, decimal_1.withField)('mbs_extension.psa_speed', () => (0, decimal_1.decodeDecimal)(v)));
|
|
107
107
|
}
|
|
108
108
|
/**
|
|
109
109
|
* Build a fresh SecurityProto for an agency MBS pass-through. product_type
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MortgageBackedSecurity.js","sourceRoot":"","sources":["MortgageBackedSecurity.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAIwB;AACxB,iFAAmG;AACnG,kFAAiF;AACjF,yFAAuF;
|
|
1
|
+
{"version":3,"file":"MortgageBackedSecurity.js","sourceRoot":"","sources":["MortgageBackedSecurity.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAIwB;AACxB,iFAAmG;AACnG,kFAAiF;AACjF,yFAAuF;AAEvF,8CAAyE;AAEzE;;;;;GAKG;AACH,MAAM,sBAAuB,SAAQ,sBAAY;IAC/C,YAAY,KAAoB;QAC9B,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;IAEO,eAAe;;QACrB,OAAO,MAAA,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,mCAAI,SAAS,CAAC;IACnD,CAAC;IAED,0CAA0C;IAC1C,aAAa;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,CAAC;IAED,4CAA4C;IAC5C,SAAS;QACP,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,uBAAW,CAAC,cAAc,CAAC;IAC5D,CAAC;IAED,uDAAuD;IACvD,MAAM;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACzC,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,OAAO,IAAA,qBAAW,EAAC,IAAA,mBAAS,EAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAA,uBAAa,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,4CAA4C;IAC5C,MAAM;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,6EAA6E;IAC7E,kBAAkB;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACrD,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,OAAO,IAAA,qBAAW,EAAC,IAAA,mBAAS,EAAC,iCAAiC,EAAE,GAAG,EAAE,CAAC,IAAA,uBAAa,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,2DAA2D;IAC3D,gBAAgB;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACnD,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,OAAO,IAAA,qBAAW,EAAC,IAAA,mBAAS,EAAC,8BAA8B,EAAE,GAAG,EAAE,CAAC,IAAA,uBAAa,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,uCAAuC;IACvC,oBAAoB;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACvD,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,OAAO,IAAA,qBAAW,EAAC,IAAA,mBAAS,EAAC,mCAAmC,EAAE,GAAG,EAAE,CAAC,IAAA,uBAAa,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,wCAAwC;IACxC,aAAa;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAChD,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,OAAO,IAAA,qBAAW,EAAC,IAAA,mBAAS,EAAC,2BAA2B,EAAE,GAAG,EAAE,CAAC,IAAA,uBAAa,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,uCAAuC;IACvC,WAAW;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9C,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,OAAO,IAAA,qBAAW,EAAC,IAAA,mBAAS,EAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,IAAA,uBAAa,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAUvB;QACC,MAAM,IAAI,GAAG,IAAA,+BAAgB,EAAC,IAAI,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,+BAAiB,EAAE;aAChC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;aAC9B,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;aACtB,MAAM,CAAC,IAAA,6BAAc,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAChC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;aAChB,kBAAkB,CAAC,IAAA,6BAAc,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC;aACxD,gBAAgB,CAAC,IAAA,6BAAc,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aACpD,oBAAoB,CAAC,IAAA,6BAAc,EAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;aAC5D,aAAa,CAAC,IAAA,6BAAc,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAC9C,WAAW,CAAC,IAAA,6BAAc,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9C,OAAO,IAAI,2BAAa,EAAE;aACvB,cAAc,CAAC,kCAAgB,CAAC,eAAe,CAAC;aAChD,cAAc,CAAC,IAAI,CAAC;aACpB,eAAe,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;CACF;AAED,kBAAe,sBAAsB,CAAC"}
|