@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.
Files changed (192) hide show
  1. package/node/fintekkers/models/portfolio/portfolio_pb.d.ts +13 -0
  2. package/node/fintekkers/models/portfolio/portfolio_pb.js +123 -1
  3. package/node/fintekkers/models/position/position_filter_pb.d.ts +13 -0
  4. package/node/fintekkers/models/position/position_filter_pb.js +123 -1
  5. package/node/fintekkers/models/position/position_pb.d.ts +13 -0
  6. package/node/fintekkers/models/position/position_pb.js +123 -1
  7. package/node/fintekkers/models/price/price_pb.d.ts +13 -0
  8. package/node/fintekkers/models/price/price_pb.js +123 -1
  9. package/node/fintekkers/models/security/bond/issuance_pb.d.ts +13 -0
  10. package/node/fintekkers/models/security/bond/issuance_pb.js +123 -1
  11. package/node/fintekkers/models/security/identifier/identifier_pb.d.ts +13 -0
  12. package/node/fintekkers/models/security/identifier/identifier_pb.js +123 -1
  13. package/node/fintekkers/models/security/index_composition_pb.d.ts +13 -0
  14. package/node/fintekkers/models/security/index_composition_pb.js +123 -1
  15. package/node/fintekkers/models/security/security_pb.d.ts +13 -0
  16. package/node/fintekkers/models/security/security_pb.js +123 -1
  17. package/node/fintekkers/models/security/tenor_pb.d.ts +13 -0
  18. package/node/fintekkers/models/security/tenor_pb.js +123 -1
  19. package/node/fintekkers/models/strategy/strategy_allocation_pb.d.ts +13 -0
  20. package/node/fintekkers/models/strategy/strategy_allocation_pb.js +123 -1
  21. package/node/fintekkers/models/strategy/strategy_pb.d.ts +13 -0
  22. package/node/fintekkers/models/strategy/strategy_pb.js +123 -1
  23. package/node/fintekkers/models/transaction/transaction_pb.d.ts +13 -0
  24. package/node/fintekkers/models/transaction/transaction_pb.js +123 -1
  25. package/node/fintekkers/models/util/api/api_key_pb.d.ts +13 -0
  26. package/node/fintekkers/models/util/api/api_key_pb.js +123 -1
  27. package/node/fintekkers/models/util/date_range_pb.d.ts +13 -0
  28. package/node/fintekkers/models/util/date_range_pb.js +123 -1
  29. package/node/fintekkers/models/util/decimal_value_pb.d.ts +2 -0
  30. package/node/fintekkers/models/util/lock/node_partition_pb.d.ts +13 -0
  31. package/node/fintekkers/models/util/lock/node_partition_pb.js +123 -1
  32. package/node/fintekkers/models/util/lock/node_state_pb.d.ts +13 -0
  33. package/node/fintekkers/models/util/lock/node_state_pb.js +123 -1
  34. package/node/fintekkers/models/util/object_type_grpc_pb.js +1 -0
  35. package/node/fintekkers/models/util/object_type_pb.d.ts +63 -0
  36. package/node/fintekkers/models/util/object_type_pb.js +109 -0
  37. package/node/fintekkers/requests/index_composition/create_index_composition_request_pb.d.ts +25 -0
  38. package/node/fintekkers/requests/index_composition/create_index_composition_request_pb.js +244 -2
  39. package/node/fintekkers/requests/index_composition/get_index_composition_request_pb.d.ts +25 -0
  40. package/node/fintekkers/requests/index_composition/get_index_composition_request_pb.js +244 -2
  41. package/node/fintekkers/requests/portfolio/create_portfolio_request_pb.d.ts +13 -0
  42. package/node/fintekkers/requests/portfolio/create_portfolio_request_pb.js +123 -1
  43. package/node/fintekkers/requests/portfolio/create_portfolio_response_pb.d.ts +13 -0
  44. package/node/fintekkers/requests/portfolio/create_portfolio_response_pb.js +123 -1
  45. package/node/fintekkers/requests/portfolio/query_portfolio_request_pb.d.ts +13 -0
  46. package/node/fintekkers/requests/portfolio/query_portfolio_request_pb.js +123 -1
  47. package/node/fintekkers/requests/portfolio/query_portfolio_response_pb.d.ts +13 -0
  48. package/node/fintekkers/requests/portfolio/query_portfolio_response_pb.js +123 -1
  49. package/node/fintekkers/requests/position/query_position_request_pb.d.ts +13 -0
  50. package/node/fintekkers/requests/position/query_position_request_pb.js +123 -1
  51. package/node/fintekkers/requests/position/query_position_response_pb.d.ts +13 -0
  52. package/node/fintekkers/requests/position/query_position_response_pb.js +123 -1
  53. package/node/fintekkers/requests/price/create_price_request_pb.d.ts +13 -0
  54. package/node/fintekkers/requests/price/create_price_request_pb.js +123 -1
  55. package/node/fintekkers/requests/price/create_price_response_pb.d.ts +13 -0
  56. package/node/fintekkers/requests/price/create_price_response_pb.js +123 -1
  57. package/node/fintekkers/requests/price/query_price_request_pb.d.ts +13 -0
  58. package/node/fintekkers/requests/price/query_price_request_pb.js +123 -1
  59. package/node/fintekkers/requests/price/query_price_response_pb.d.ts +13 -0
  60. package/node/fintekkers/requests/price/query_price_response_pb.js +123 -1
  61. package/node/fintekkers/requests/security/create_security_request_pb.d.ts +13 -0
  62. package/node/fintekkers/requests/security/create_security_request_pb.js +123 -1
  63. package/node/fintekkers/requests/security/create_security_response_pb.d.ts +13 -0
  64. package/node/fintekkers/requests/security/create_security_response_pb.js +123 -1
  65. package/node/fintekkers/requests/security/get_field_values_request_pb.d.ts +13 -0
  66. package/node/fintekkers/requests/security/get_field_values_request_pb.js +123 -1
  67. package/node/fintekkers/requests/security/get_field_values_response_pb.d.ts +13 -0
  68. package/node/fintekkers/requests/security/get_field_values_response_pb.js +123 -1
  69. package/node/fintekkers/requests/security/get_fields_response_pb.d.ts +13 -0
  70. package/node/fintekkers/requests/security/get_fields_response_pb.js +123 -1
  71. package/node/fintekkers/requests/security/query_security_request_pb.d.ts +13 -0
  72. package/node/fintekkers/requests/security/query_security_request_pb.js +123 -1
  73. package/node/fintekkers/requests/security/query_security_response_pb.d.ts +13 -0
  74. package/node/fintekkers/requests/security/query_security_response_pb.js +123 -1
  75. package/node/fintekkers/requests/transaction/create_transaction_request_pb.d.ts +13 -0
  76. package/node/fintekkers/requests/transaction/create_transaction_request_pb.js +123 -1
  77. package/node/fintekkers/requests/transaction/create_transaction_response_pb.d.ts +13 -0
  78. package/node/fintekkers/requests/transaction/create_transaction_response_pb.js +123 -1
  79. package/node/fintekkers/requests/transaction/query_transaction_request_pb.d.ts +13 -0
  80. package/node/fintekkers/requests/transaction/query_transaction_request_pb.js +123 -1
  81. package/node/fintekkers/requests/transaction/query_transaction_response_pb.d.ts +13 -0
  82. package/node/fintekkers/requests/transaction/query_transaction_response_pb.js +123 -1
  83. package/node/fintekkers/requests/util/delete_request_pb.d.ts +25 -0
  84. package/node/fintekkers/requests/util/delete_request_pb.js +244 -2
  85. package/node/fintekkers/requests/util/lock/lock_request_pb.d.ts +13 -0
  86. package/node/fintekkers/requests/util/lock/lock_request_pb.js +123 -1
  87. package/node/fintekkers/requests/util/lock/lock_response_pb.d.ts +13 -0
  88. package/node/fintekkers/requests/util/lock/lock_response_pb.js +123 -1
  89. package/node/fintekkers/requests/valuation/curve_request_pb.d.ts +13 -0
  90. package/node/fintekkers/requests/valuation/curve_request_pb.js +123 -1
  91. package/node/fintekkers/requests/valuation/curve_response_pb.d.ts +13 -0
  92. package/node/fintekkers/requests/valuation/curve_response_pb.js +123 -1
  93. package/node/fintekkers/requests/valuation/valuation_request_pb.d.ts +13 -0
  94. package/node/fintekkers/requests/valuation/valuation_request_pb.js +123 -1
  95. package/node/fintekkers/requests/valuation/valuation_response_pb.d.ts +13 -0
  96. package/node/fintekkers/requests/valuation/valuation_response_pb.js +123 -1
  97. package/node/wrappers/models/position/position.d.ts +1 -1
  98. package/node/wrappers/models/position/position.js.map +1 -1
  99. package/node/wrappers/models/position/position.test.js +2 -2
  100. package/node/wrappers/models/position/position.test.js.map +1 -1
  101. package/node/wrappers/models/position/position.test.ts +2 -2
  102. package/node/wrappers/models/position/position.ts +2 -2
  103. package/node/wrappers/models/position/position_matcher.js +1 -0
  104. package/node/wrappers/models/position/position_matcher.js.map +1 -0
  105. package/node/wrappers/models/position/position_matcher.test.js +1 -0
  106. package/node/wrappers/models/position/position_matcher.test.js.map +1 -0
  107. package/node/wrappers/models/position/positionfilter.js +3 -2
  108. package/node/wrappers/models/position/positionfilter.js.map +1 -1
  109. package/node/wrappers/models/position/positionfilter.ts +3 -2
  110. package/node/wrappers/models/price/Price.js +20 -12
  111. package/node/wrappers/models/price/Price.js.map +1 -1
  112. package/node/wrappers/models/price/Price.ts +19 -10
  113. package/node/wrappers/models/price/price_rules.d.ts +2 -2
  114. package/node/wrappers/models/price/price_rules.js +6 -4
  115. package/node/wrappers/models/price/price_rules.js.map +1 -1
  116. package/node/wrappers/models/price/price_rules.ts +5 -3
  117. package/node/wrappers/models/security/BondSecurity.d.ts +1 -1
  118. package/node/wrappers/models/security/BondSecurity.js +5 -5
  119. package/node/wrappers/models/security/BondSecurity.js.map +1 -1
  120. package/node/wrappers/models/security/BondSecurity.ts +5 -4
  121. package/node/wrappers/models/security/FloatingRateNote.js +2 -2
  122. package/node/wrappers/models/security/FloatingRateNote.js.map +1 -1
  123. package/node/wrappers/models/security/FloatingRateNote.ts +2 -1
  124. package/node/wrappers/models/security/Issuance.js +3 -6
  125. package/node/wrappers/models/security/Issuance.js.map +1 -1
  126. package/node/wrappers/models/security/Issuance.ts +3 -2
  127. package/node/wrappers/models/security/MortgageBackedSecurity.js +7 -7
  128. package/node/wrappers/models/security/MortgageBackedSecurity.js.map +1 -1
  129. package/node/wrappers/models/security/MortgageBackedSecurity.ts +7 -6
  130. package/node/wrappers/models/security/TIPSBond.js +2 -2
  131. package/node/wrappers/models/security/TIPSBond.js.map +1 -1
  132. package/node/wrappers/models/security/TIPSBond.ts +2 -1
  133. package/node/wrappers/models/security/security_rules.js +10 -12
  134. package/node/wrappers/models/security/security_rules.js.map +1 -1
  135. package/node/wrappers/models/security/security_rules.ts +9 -9
  136. package/node/wrappers/models/transaction/transaction.js +20 -14
  137. package/node/wrappers/models/transaction/transaction.js.map +1 -1
  138. package/node/wrappers/models/transaction/transaction.ts +20 -11
  139. package/node/wrappers/models/transaction/transaction_constructor.test.js +29 -0
  140. package/node/wrappers/models/transaction/transaction_constructor.test.js.map +1 -1
  141. package/node/wrappers/models/utils/decimal.d.ts +96 -0
  142. package/node/wrappers/models/utils/decimal.js +328 -0
  143. package/node/wrappers/models/utils/decimal.js.map +1 -0
  144. package/node/wrappers/models/utils/decimal.legacy.test.d.ts +1 -0
  145. package/node/wrappers/models/utils/decimal.legacy.test.js +174 -0
  146. package/node/wrappers/models/utils/decimal.legacy.test.js.map +1 -0
  147. package/node/wrappers/models/utils/decimal.legacy.test.ts +158 -0
  148. package/node/wrappers/models/utils/decimal.test.d.ts +1 -0
  149. package/node/wrappers/models/utils/decimal.test.js +258 -0
  150. package/node/wrappers/models/utils/decimal.test.js.map +1 -0
  151. package/node/wrappers/models/utils/decimal.test.ts +272 -0
  152. package/node/wrappers/models/utils/decimal.ts +335 -0
  153. package/node/wrappers/models/utils/decimal.typings.test.d.ts +1 -0
  154. package/node/wrappers/models/utils/decimal.typings.test.js +39 -0
  155. package/node/wrappers/models/utils/decimal.typings.test.js.map +1 -0
  156. package/node/wrappers/models/utils/decimal.typings.test.ts +16 -0
  157. package/node/wrappers/models/utils/serialization.d.ts +2 -1
  158. package/node/wrappers/models/utils/serialization.js +12 -2
  159. package/node/wrappers/models/utils/serialization.js.map +1 -1
  160. package/node/wrappers/models/utils/serialization.ts +14 -3
  161. package/node/wrappers/requests/position/QueryPositionRequest.js +3 -2
  162. package/node/wrappers/requests/position/QueryPositionRequest.js.map +1 -1
  163. package/node/wrappers/requests/position/QueryPositionRequest.ts +3 -2
  164. package/node/wrappers/services/portfolio-service/PortfolioService.js +5 -6
  165. package/node/wrappers/services/portfolio-service/PortfolioService.js.map +1 -1
  166. package/node/wrappers/services/portfolio-service/PortfolioService.ts +5 -6
  167. package/node/wrappers/services/price-service/PriceService.js +5 -6
  168. package/node/wrappers/services/price-service/PriceService.js.map +1 -1
  169. package/node/wrappers/services/price-service/PriceService.ts +5 -6
  170. package/node/wrappers/services/security-service/SecurityService.js +5 -6
  171. package/node/wrappers/services/security-service/SecurityService.js.map +1 -1
  172. package/node/wrappers/services/security-service/SecurityService.ts +5 -6
  173. package/node/wrappers/services/security-service/security.maturityLadder.test.js +1 -1
  174. package/node/wrappers/services/security-service/security.maturityLadder.test.js.map +1 -1
  175. package/node/wrappers/services/security-service/security.maturityLadder.test.ts +3 -2
  176. package/node/wrappers/services/transaction-service/TransactionService.js +5 -6
  177. package/node/wrappers/services/transaction-service/TransactionService.js.map +1 -1
  178. package/node/wrappers/services/transaction-service/TransactionService.ts +5 -6
  179. package/node/wrappers/util/link-resolver.js +5 -6
  180. package/node/wrappers/util/link-resolver.js.map +1 -1
  181. package/node/wrappers/util/link-resolver.ts +5 -6
  182. package/node/wrappers/util/object-type-legacy.json +21 -0
  183. package/node/wrappers/util/object-types.d.ts +62 -0
  184. package/node/wrappers/util/object-types.js +193 -0
  185. package/node/wrappers/util/object-types.js.map +1 -0
  186. package/node/wrappers/util/object-types.test.d.ts +1 -0
  187. package/node/wrappers/util/object-types.test.js +311 -0
  188. package/node/wrappers/util/object-types.test.js.map +1 -0
  189. package/node/wrappers/util/object-types.test.ts +307 -0
  190. package/node/wrappers/util/object-types.ts +207 -0
  191. package/package.json +1 -1
  192. 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 = new decimal_value_pb_1.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.setObjectClass('Price');
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 = new decimal_value_pb_1.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.setObjectClass('Price');
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 new decimal_js_1.Decimal(priceValue.getArbitraryPrecisionValue());
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
- var _a, _b;
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;AAChF,uFAAqF;AACrF,iFAAgF;AAChF,oEAA4C;AAC5C,gDAAkD;AAClD,wCAAqC;AACrC,2CAAqC;AACrC,uEAAyD;AAEzD,MAAM,KAAK;IAGP,YAAY,KAAiB;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,UAAU,CACb,UAAkB,EAClB,KAAa,EACb,IAAU,EACV,YAA4B,8BAAc,CAAC,UAAU;QAErD,MAAM,iBAAiB,GAAG,IAAI,oCAAiB,EAAE,CAAC;QAClD,iBAAiB,CAAC,0BAA0B,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE/D,MAAM,aAAa,GAAG,IAAI,2BAAa,EAAE,CAAC;QAC1C,aAAa,CAAC,OAAO,CAAC,IAAI,WAAI,CAAC,WAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3E,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE9B,MAAM,UAAU,GAAG,IAAI,qBAAU,EAAE,CAAC;QACpC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACnC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC/B,UAAU,CAAC,OAAO,CAAC,WAAI,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAChD,UAAU,CAAC,OAAO,CAAC,wBAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACvD,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACvC,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QACtC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAEnC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,KAAc,EAAE,QAAkB,EAAE,IAAmB;QACjE,MAAM,iBAAiB,GAAG,IAAI,oCAAiB,EAAE,CAAC;QAClD,iBAAiB,CAAC,0BAA0B,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE/D,MAAM,UAAU,GAAG,IAAI,qBAAU,EAAE,CAAC;QACpC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACvC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACnC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC/B,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACnC,UAAU,CAAC,OAAO,CAAC,WAAI,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAChD,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEvC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,YAAsB,EAAE,IAAmB;QAC3D,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,oBAAO,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,KAAK;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC/C,OAAO,WAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,MAAM;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;IAClC,CAAC;IAED;;;OAGG;IACK,cAAc;QAClB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YAAE,OAAO;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACvC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC3F,MAAM,OAAO,GAAG,WAAI,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,wBAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACxD,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;YACpB,OAAO;SACV;QACD,MAAM,IAAI,KAAK,CACX,8CAA8C,OAAO,GAAG;cACtD,+CAA+C;cAC/C,sCAAsC,CAC3C,CAAC;IACN,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC5D,OAAO,IAAI,oBAAO,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,YAAY;QACR,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;IAED,WAAW;QACP,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC/C,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC5D,OAAO,kBAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC;IAED,aAAa;QACT,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC/C,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACxD,OAAO,WAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,OAAO;QACH,OAAO,wBAAa,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;IAC3E,CAAC;IAED,QAAQ;;QACJ,MAAM,QAAQ,GAAG,MAAA,MAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,0CAAE,0BAA0B,EAAE,mCAAI,KAAK,CAAC;QAC9E,OAAO,SAAS,QAAQ,gBAAgB,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC;IAC/E,CAAC;IAED,MAAM,CAAC,KAAY;QACf,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9C,CAAC;CACJ;AAED,kBAAe,KAAK,CAAC"}
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 = new 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.setObjectClass('Price');
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 = new 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.setObjectClass('Price');
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 new Decimal(priceValue.getArbitraryPrecisionValue());
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()?.getArbitraryPrecisionValue() ?? 'N/A';
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 a non-empty arbitrary_precision_value (zero is valid, see the
9
- * PriceProto comment), and `price_type` is not UNKNOWN_PRICE_TYPE. The price
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 a non-empty arbitrary_precision_value (zero is valid, see the
14
- * PriceProto comment), and `price_type` is not UNKNOWN_PRICE_TYPE. The price
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, _c;
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
- if (!((_c = p.getPrice()) === null || _c === void 0 ? void 0 : _c.getArbitraryPrecisionValue())) {
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;AAErC;;;;;;;;;;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,IAAI,CAAC,CAAA,MAAA,CAAC,CAAC,QAAQ,EAAE,0CAAE,0BAA0B,EAAE,CAAA,EAAE;QAC7C,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;AAdD,4BAcC;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"}
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 a non-empty arbitrary_precision_value (zero is valid, see the
13
- * PriceProto comment), and `price_type` is not UNKNOWN_PRICE_TYPE. The price
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
- if (!p.getPrice()?.getArbitraryPrecisionValue()) {
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
- /** Build a DecimalValueProto from a Decimal. */
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 new decimal_value_pb_1.DecimalValueProto().setArbitraryPrecisionValue(v.toString());
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 new decimal_js_1.Decimal(rate.getArbitraryPrecisionValue());
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 new decimal_js_1.Decimal(faceValue.getArbitraryPrecisionValue());
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":"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"}
1
+ {"version":3,"file":"BondSecurity.js","sourceRoot":"","sources":["BondSecurity.ts"],"names":[],"mappings":";;;;;;AAAA,0DAAkC;AAClC,iFAAkG;AAClG,yFAAuF;AAGvF,wCAA2E;AAE3E,yDAAqD;AACrD,+CAA2C;AAC3C,iCAAuC;AACvC,qFAAmF;AAGnF,2CAAqC;AACrC,2DAAqD;AACrD,0DAAkC;AAClC,8CAAuG;AAevG,wEAAwE;AACxE,SAAgB,cAAc,CAAC,CAAU;IACvC,OAAO,IAAA,uBAAa,EAAC,IAAA,uBAAa,EAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAFD,wCAEC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,IAAsB;IACrD,OAAO,IAAI,8BAAgB,EAAE;SAC1B,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC5C,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC9C,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;SAC9B,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC;SACxC,YAAY,CAAC,IAAA,2BAAoB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAClD,eAAe,CAAC,IAAA,2BAAoB,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAC9D,CAAC;AARD,4CAQC;AAED,MAAM,YAAa,SAAQ,kBAAQ;IACjC,YAAY,KAAoB;QAC9B,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,oEAAoE;QACpE,kEAAkE;QAClE,6DAA6D;QAC7D,yDAAyD;QACzD,8CAA8C;QAC9C,MAAM,MAAM,GAAI,MAAM,CAAC,IAAI,CAAC,kCAAgB,CAA0C;aACnF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,kCAAgB,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,IAAI,CAAC,IAAA,kCAAc,EAAC,MAAgB,EAAE,MAAM,CAAC,EAAE;YACxD,MAAM,IAAI,KAAK,CACb,+FAA+F,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,SAAS,EAAE,CACrH,CAAC;SACH;IACH,CAAC;IAED;;;;;;OAMG;IACH,QAAQ,CAAC,QAAe;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACvE,IAAI,CAAC,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAElD,4DAA4D;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAE7D,OAAO,IAAI,YAAK,CAAC,8BAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED;;;OAGG;IACK,eAAe,CAAC,SAAe,EAAE,OAAa;QACpD,IAAI,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QAC5D,IAAI,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvD,IAAI,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;QAEnD,kEAAkE;QAClE,IAAI,IAAI,GAAG,CAAC,EAAE;YACZ,MAAM,EAAE,CAAC;YACT,+CAA+C;YAC/C,MAAM,kBAAkB,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC5F,IAAI,IAAI,kBAAkB,CAAC;SAC5B;QAED,6BAA6B;QAC7B,IAAI,MAAM,GAAG,CAAC,EAAE;YACd,KAAK,EAAE,CAAC;YACR,MAAM,IAAI,EAAE,CAAC;SACd;QAED,OAAO;YACL,KAAK;YACL,MAAM;YACN,IAAI;SACL,CAAC;IACJ,CAAC;IAED,aAAa;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACrD,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,IAAA,qBAAW,EAAC,IAAA,mBAAS,EAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,IAAA,uBAAa,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,YAAY;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACzD,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5B,OAAO,IAAA,qBAAW,EAAC,IAAA,mBAAS,EAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,IAAA,uBAAa,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,aAAa;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D,IAAI,UAAU,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnF,OAAO,IAAI,wBAAU,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,kBAAkB;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvC,MAAM,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,IAAI,eAAe,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC7F,OAAO,IAAI,kCAAe,CAAC,eAAe,CAAC,CAAC;IAC9C,CAAC;IAED,YAAY;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACzD,OAAO,IAAA,2BAAoB,EAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,YAAY;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvC,MAAM,IAAI,GAAoB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,kBAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAsB;QAC5C,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,IAAI,2BAAa,EAAE;aACvB,cAAc,CAAC,kCAAgB,CAAC,aAAa,CAAC;aAC9C,cAAc,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,mBAAmB;QACjB,OAAO,IAAI,oBAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,cAAc;QACZ,6CAA6C;QAC7C,8DAA8D;QAC9D,IAAI,OAAQ,IAAY,CAAC,QAAQ,KAAK,UAAU,EAAE;YAChD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;SACxE;QAED,MAAM,KAAK,GAAI,IAAY,CAAC,QAAQ,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;SAChE;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;SACjE;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAE7B,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE;YAC9C,OAAO,MAAM,CAAC;SACf;aAAM,IAAI,KAAK,GAAG,EAAE,EAAE;YACrB,OAAO,MAAM,CAAC;SACf;aAAM;YACL,OAAO,MAAM,CAAC;SACf;IACH,CAAC;CACF;AAED,kBAAe,YAAY,CAAC"}
@@ -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 new DecimalValueProto().setArbitraryPrecisionValue(v.toString());
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 new Decimal(rate.getArbitraryPrecisionValue());
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 new Decimal(faceValue.getArbitraryPrecisionValue());
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 decimal_js_1 = require("decimal.js");
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 new decimal_js_1.Decimal(v.getArbitraryPrecisionValue());
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;AAC/F,2CAAqC;AAErC;;;;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,IAAI,oBAAO,CAAC,CAAC,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACrD,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"}
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 new Decimal(v.getArbitraryPrecisionValue());
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 decimal_js_1 = __importDefault(require("decimal.js"));
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 new decimal_js_1.default(value.getArbitraryPrecisionValue());
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":";;;;;AAGA,wCAAqD;AACrD,4DAAiC;AAEjC;;;;;;;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;YAAE,OAAO,IAAI,CAAC;QACxB,OAAO,IAAI,oBAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACzD,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"}
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 new Decimal(value.getArbitraryPrecisionValue());
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 decimal_js_1 = require("decimal.js");
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 new decimal_js_1.Decimal(v.getArbitraryPrecisionValue());
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 new decimal_js_1.Decimal(v.getArbitraryPrecisionValue());
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 new decimal_js_1.Decimal(v.getArbitraryPrecisionValue());
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 new decimal_js_1.Decimal(v.getArbitraryPrecisionValue());
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 new decimal_js_1.Decimal(v.getArbitraryPrecisionValue());
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 new decimal_js_1.Decimal(v.getArbitraryPrecisionValue());
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":"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"}
1
+ {"version":3,"file":"MortgageBackedSecurity.js","sourceRoot":"","sources":["MortgageBackedSecurity.ts"],"names":[],"mappings":"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"}