@fintekkers/ledger-models 0.1.119 → 0.1.129
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/.npmrc.example +4 -0
- package/catalog/fields.json +275 -0
- package/catalog/measures.json +259 -0
- package/node/fintekkers/models/portfolio/portfolio_pb.js +13 -19
- package/node/fintekkers/models/position/field_pb.js +1 -7
- package/node/fintekkers/models/position/measure_pb.d.ts +18 -0
- package/node/fintekkers/models/position/measure_pb.js +20 -8
- package/node/fintekkers/models/position/position_filter_pb.js +7 -13
- package/node/fintekkers/models/position/position_pb.d.ts +7 -0
- package/node/fintekkers/models/position/position_pb.js +64 -17
- package/node/fintekkers/models/position/position_status_pb.js +1 -7
- package/node/fintekkers/models/position/position_util_pb.js +11 -17
- package/node/fintekkers/models/price/price_pb.d.ts +4 -0
- package/node/fintekkers/models/price/price_pb.js +45 -19
- package/node/fintekkers/models/price/price_type_grpc_pb.js +1 -0
- package/node/fintekkers/models/price/price_type_pb.d.ts +15 -0
- package/node/fintekkers/models/price/price_type_pb.js +30 -0
- package/node/fintekkers/models/security/bond/auction_type_pb.js +1 -7
- package/node/fintekkers/models/security/bond/issuance_pb.js +17 -23
- package/node/fintekkers/models/security/coupon_frequency_pb.js +1 -7
- package/node/fintekkers/models/security/coupon_type_pb.js +1 -7
- package/node/fintekkers/models/security/identifier/identifier_pb.js +9 -15
- package/node/fintekkers/models/security/identifier/identifier_type_pb.d.ts +1 -0
- package/node/fintekkers/models/security/identifier/identifier_type_pb.js +2 -7
- package/node/fintekkers/models/security/index/index_type_grpc_pb.js +1 -0
- package/node/fintekkers/models/security/index/index_type_pb.d.ts +26 -0
- package/node/fintekkers/models/security/index/index_type_pb.js +41 -0
- package/node/fintekkers/models/security/index_composition_pb.d.ts +126 -0
- package/node/fintekkers/models/security/index_composition_pb.js +992 -0
- package/node/fintekkers/models/security/security_pb.d.ts +382 -0
- package/node/fintekkers/models/security/security_pb.js +3183 -57
- package/node/fintekkers/models/security/security_quantity_type_pb.js +1 -7
- package/node/fintekkers/models/security/security_type_pb.d.ts +3 -0
- package/node/fintekkers/models/security/security_type_pb.js +5 -8
- package/node/fintekkers/models/security/tenor_pb.js +9 -15
- package/node/fintekkers/models/security/tenor_type_pb.js +1 -7
- package/node/fintekkers/models/strategy/strategy_allocation_pb.js +13 -19
- package/node/fintekkers/models/strategy/strategy_pb.js +14 -20
- package/node/fintekkers/models/transaction/transaction_pb.js +24 -30
- package/node/fintekkers/models/transaction/transaction_type_pb.js +1 -7
- package/node/fintekkers/models/util/api/api_key_pb.js +10 -16
- package/node/fintekkers/models/util/currency_pb.d.ts +27 -0
- package/node/fintekkers/models/util/currency_pb.js +170 -0
- package/node/fintekkers/models/util/date_range_pb.js +8 -14
- package/node/fintekkers/models/util/decimal_value_pb.js +4 -10
- package/node/fintekkers/models/util/endpoint_pb.js +7 -13
- package/node/fintekkers/models/util/local_date_pb.js +5 -11
- package/node/fintekkers/models/util/local_timestamp_pb.js +5 -11
- package/node/fintekkers/models/util/lock/node_partition_pb.js +9 -15
- package/node/fintekkers/models/util/lock/node_state_pb.js +10 -16
- package/node/fintekkers/models/util/uuid_pb.js +3 -9
- package/node/fintekkers/models/valuation/cashflow_pb.d.ts +57 -0
- package/node/fintekkers/models/valuation/cashflow_pb.js +401 -0
- package/node/fintekkers/requests/index_composition/create_index_composition_request_pb.d.ts +79 -0
- package/node/fintekkers/requests/index_composition/create_index_composition_request_pb.js +599 -0
- package/node/fintekkers/requests/index_composition/get_index_composition_request_pb.d.ts +84 -0
- package/node/fintekkers/requests/index_composition/get_index_composition_request_pb.js +624 -0
- package/node/fintekkers/requests/portfolio/create_portfolio_request_pb.js +7 -13
- package/node/fintekkers/requests/portfolio/create_portfolio_response_pb.js +8 -14
- package/node/fintekkers/requests/portfolio/query_portfolio_request_pb.d.ts +3 -0
- package/node/fintekkers/requests/portfolio/query_portfolio_request_pb.js +39 -15
- package/node/fintekkers/requests/portfolio/query_portfolio_response_pb.js +8 -14
- package/node/fintekkers/requests/position/query_position_request_pb.js +15 -27
- package/node/fintekkers/requests/position/query_position_response_pb.js +10 -16
- package/node/fintekkers/requests/price/create_price_request_pb.js +7 -13
- package/node/fintekkers/requests/price/create_price_response_pb.js +8 -14
- package/node/fintekkers/requests/price/query_price_request_pb.js +12 -18
- package/node/fintekkers/requests/price/query_price_response_pb.js +8 -14
- package/node/fintekkers/requests/security/create_security_request_pb.js +7 -13
- package/node/fintekkers/requests/security/create_security_response_pb.js +9 -15
- package/node/fintekkers/requests/security/get_field_values_request_pb.js +7 -13
- package/node/fintekkers/requests/security/get_field_values_response_pb.js +7 -13
- package/node/fintekkers/requests/security/get_fields_response_pb.js +8 -17
- package/node/fintekkers/requests/security/query_security_request_pb.d.ts +3 -0
- package/node/fintekkers/requests/security/query_security_request_pb.js +39 -15
- package/node/fintekkers/requests/security/query_security_response_pb.js +9 -15
- package/node/fintekkers/requests/transaction/create_transaction_request_pb.js +7 -13
- package/node/fintekkers/requests/transaction/create_transaction_response_pb.js +8 -14
- package/node/fintekkers/requests/transaction/query_transaction_request_pb.js +10 -16
- package/node/fintekkers/requests/transaction/query_transaction_response_pb.js +9 -15
- package/node/fintekkers/requests/util/delete_request_pb.d.ts +135 -0
- package/node/fintekkers/requests/util/delete_request_pb.js +1051 -0
- package/node/fintekkers/requests/util/errors/error_pb.js +7 -13
- package/node/fintekkers/requests/util/errors/message_pb.js +6 -12
- package/node/fintekkers/requests/util/errors/summary_pb.js +4 -10
- package/node/fintekkers/requests/util/lock/lock_request_pb.js +8 -14
- package/node/fintekkers/requests/util/lock/lock_response_pb.js +9 -15
- package/node/fintekkers/requests/util/operation_pb.js +1 -7
- package/node/fintekkers/requests/valuation/curve_request_pb.d.ts +85 -0
- package/node/fintekkers/requests/valuation/curve_request_pb.js +646 -0
- package/node/fintekkers/requests/valuation/curve_response_pb.d.ts +105 -0
- package/node/fintekkers/requests/valuation/curve_response_pb.js +806 -0
- package/node/fintekkers/requests/valuation/product_inputs.test.ts +172 -0
- package/node/fintekkers/requests/valuation/product_inputs_pb.d.ts +239 -0
- package/node/fintekkers/requests/valuation/product_inputs_pb.js +1801 -0
- package/node/fintekkers/requests/valuation/valuation_request_pb.d.ts +19 -0
- package/node/fintekkers/requests/valuation/valuation_request_pb.js +168 -22
- package/node/fintekkers/requests/valuation/valuation_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/valuation/valuation_response_pb.js +118 -16
- package/node/fintekkers/services/index-composition-service/index_composition_service_grpc_pb.d.ts +60 -0
- package/node/fintekkers/services/index-composition-service/index_composition_service_grpc_pb.js +87 -0
- package/node/fintekkers/services/index-composition-service/index_composition_service_pb.d.ts +9 -0
- package/node/fintekkers/services/index-composition-service/index_composition_service_pb.js +21 -0
- package/node/fintekkers/services/lock-service/lock_service_grpc_pb.js +22 -22
- package/node/fintekkers/services/lock-service/lock_service_pb.js +15 -21
- package/node/fintekkers/services/portfolio-service/portfolio_service_grpc_pb.d.ts +18 -0
- package/node/fintekkers/services/portfolio-service/portfolio_service_grpc_pb.js +39 -5
- package/node/fintekkers/services/portfolio-service/portfolio_service_pb.d.ts +1 -0
- package/node/fintekkers/services/portfolio-service/portfolio_service_pb.js +3 -7
- package/node/fintekkers/services/position-service/position_service_grpc_pb.d.ts +37 -0
- package/node/fintekkers/services/position-service/position_service_grpc_pb.js +64 -6
- package/node/fintekkers/services/position-service/position_service_pb.d.ts +3 -0
- package/node/fintekkers/services/position-service/position_service_pb.js +7 -7
- package/node/fintekkers/services/price-service/price_service_grpc_pb.js +5 -5
- package/node/fintekkers/services/price-service/price_service_pb.js +1 -7
- package/node/fintekkers/services/security-service/security_service_grpc_pb.d.ts +18 -0
- package/node/fintekkers/services/security-service/security_service_grpc_pb.js +43 -9
- package/node/fintekkers/services/security-service/security_service_pb.d.ts +1 -0
- package/node/fintekkers/services/security-service/security_service_pb.js +3 -7
- package/node/fintekkers/services/transaction-service/transaction_service_grpc_pb.d.ts +55 -0
- package/node/fintekkers/services/transaction-service/transaction_service_grpc_pb.js +97 -5
- package/node/fintekkers/services/transaction-service/transaction_service_pb.d.ts +4 -0
- package/node/fintekkers/services/transaction-service/transaction_service_pb.js +9 -7
- package/node/fintekkers/services/valuation-service/valuation_service_grpc_pb.d.ts +19 -0
- package/node/fintekkers/services/valuation-service/valuation_service_grpc_pb.js +37 -2
- package/node/fintekkers/services/valuation-service/valuation_service_pb.d.ts +2 -0
- package/node/fintekkers/services/valuation-service/valuation_service_pb.js +5 -7
- package/node/wrappers/models/portfolio/portfolio.js.map +1 -1
- package/node/wrappers/models/portfolio/portfolio.test.d.ts +2 -0
- package/node/wrappers/models/portfolio/portfolio.test.js +29 -0
- package/node/wrappers/models/portfolio/portfolio.test.js.map +1 -0
- package/node/wrappers/models/portfolio/portfolio.test.ts +28 -0
- package/node/wrappers/models/position/position.js +25 -13
- package/node/wrappers/models/position/position.js.map +1 -1
- package/node/wrappers/models/position/position.test.js +20 -0
- package/node/wrappers/models/position/position.test.js.map +1 -1
- package/node/wrappers/models/position/position.test.ts +23 -0
- package/node/wrappers/models/position/position.ts +27 -13
- package/node/wrappers/models/position/positionfilter.js +1 -1
- package/node/wrappers/models/position/positionfilter.js.map +1 -1
- package/node/wrappers/models/position/positionfilter.test.js.map +1 -1
- package/node/wrappers/models/price/Price.cash.test.d.ts +1 -0
- package/node/wrappers/models/price/Price.cash.test.js +42 -0
- package/node/wrappers/models/price/Price.cash.test.js.map +1 -0
- package/node/wrappers/models/price/Price.cash.test.ts +43 -0
- package/node/wrappers/models/price/Price.d.ts +38 -0
- package/node/wrappers/models/price/Price.js +111 -0
- package/node/wrappers/models/price/Price.js.map +1 -0
- package/node/wrappers/models/price/Price.test.d.ts +1 -0
- package/node/wrappers/models/price/Price.test.js +55 -0
- package/node/wrappers/models/price/Price.test.js.map +1 -0
- package/node/wrappers/models/price/Price.test.ts +63 -0
- package/node/wrappers/models/price/Price.ts +123 -0
- package/node/wrappers/models/security/BondSecurity.d.ts +17 -2
- package/node/wrappers/models/security/BondSecurity.js +59 -11
- package/node/wrappers/models/security/BondSecurity.js.map +1 -1
- package/node/wrappers/models/security/BondSecurity.priceScale.test.d.ts +1 -0
- package/node/wrappers/models/security/BondSecurity.priceScale.test.js +36 -0
- package/node/wrappers/models/security/BondSecurity.priceScale.test.js.map +1 -0
- package/node/wrappers/models/security/BondSecurity.priceScale.test.ts +36 -0
- package/node/wrappers/models/security/BondSecurity.test.js +34 -1
- package/node/wrappers/models/security/BondSecurity.test.js.map +1 -1
- package/node/wrappers/models/security/BondSecurity.test.ts +42 -1
- package/node/wrappers/models/security/BondSecurity.ts +63 -11
- package/node/wrappers/models/security/security-roundtrip.test.d.ts +1 -0
- package/node/wrappers/models/security/security-roundtrip.test.js +173 -0
- package/node/wrappers/models/security/security-roundtrip.test.js.map +1 -0
- package/node/wrappers/models/security/security-roundtrip.test.ts +192 -0
- package/node/wrappers/models/security/security.d.ts +8 -0
- package/node/wrappers/models/security/security.js +24 -2
- package/node/wrappers/models/security/security.js.map +1 -1
- package/node/wrappers/models/security/security.ts +26 -2
- package/node/wrappers/models/security/term.js +31 -6
- package/node/wrappers/models/security/term.js.map +1 -1
- package/node/wrappers/models/security/term.test.js +21 -2
- package/node/wrappers/models/security/term.test.js.map +1 -1
- package/node/wrappers/models/security/term.test.ts +28 -2
- package/node/wrappers/models/security/term.ts +34 -6
- package/node/wrappers/models/transaction/transaction.d.ts +59 -1
- package/node/wrappers/models/transaction/transaction.derived.test.d.ts +1 -0
- package/node/wrappers/models/transaction/transaction.derived.test.js +199 -0
- package/node/wrappers/models/transaction/transaction.derived.test.js.map +1 -0
- package/node/wrappers/models/transaction/transaction.derived.test.ts +251 -0
- package/node/wrappers/models/transaction/transaction.js +350 -2
- package/node/wrappers/models/transaction/transaction.js.map +1 -1
- package/node/wrappers/models/transaction/transaction.ts +416 -2
- package/node/wrappers/models/transaction/transaction_constructor.test.d.ts +1 -0
- package/node/wrappers/models/transaction/transaction_constructor.test.js +100 -0
- package/node/wrappers/models/transaction/transaction_constructor.test.js.map +1 -0
- package/node/wrappers/models/transaction/transaction_constructor.test.ts +111 -0
- package/node/wrappers/models/transaction/transaction_type.js.map +1 -1
- package/node/wrappers/models/utils/datetime.d.ts +6 -0
- package/node/wrappers/models/utils/datetime.js +14 -6
- package/node/wrappers/models/utils/datetime.js.map +1 -1
- package/node/wrappers/models/utils/datetime.ts +15 -6
- package/node/wrappers/models/utils/protoEnum.js.map +1 -1
- package/node/wrappers/models/utils/requestcontext.d.ts +17 -3
- package/node/wrappers/models/utils/requestcontext.js +39 -7
- package/node/wrappers/models/utils/requestcontext.js.map +1 -1
- package/node/wrappers/models/utils/requestcontext.test.d.ts +1 -0
- package/node/wrappers/models/utils/requestcontext.test.js +108 -0
- package/node/wrappers/models/utils/requestcontext.test.js.map +1 -0
- package/node/wrappers/models/utils/requestcontext.test.ts +85 -0
- package/node/wrappers/models/utils/requestcontext.ts +49 -9
- package/node/wrappers/models/utils/serialization.d.ts +2 -1
- package/node/wrappers/models/utils/serialization.js +4 -0
- package/node/wrappers/models/utils/serialization.js.map +1 -1
- package/node/wrappers/models/utils/serialization.test.js +15 -0
- package/node/wrappers/models/utils/serialization.test.js.map +1 -1
- package/node/wrappers/models/utils/serialization.test.ts +19 -1
- package/node/wrappers/models/utils/serialization.ts +5 -4
- package/node/wrappers/models/utils/serialization.util.js.map +1 -1
- package/node/wrappers/models/utils/uuid.js +9 -1
- package/node/wrappers/models/utils/uuid.js.map +1 -1
- package/node/wrappers/models/utils/uuid.test.js +22 -4
- package/node/wrappers/models/utils/uuid.test.js.map +1 -1
- package/node/wrappers/models/utils/uuid.test.ts +26 -5
- package/node/wrappers/models/utils/uuid.ts +7 -1
- package/node/wrappers/services/apikey.test.d.ts +7 -0
- package/node/wrappers/services/apikey.test.js +56 -0
- package/node/wrappers/services/apikey.test.js.map +1 -0
- package/node/wrappers/services/apikey.test.ts +65 -0
- package/node/wrappers/services/portfolio-service/PortfolioService.d.ts +1 -1
- package/node/wrappers/services/portfolio-service/PortfolioService.js +8 -2
- package/node/wrappers/services/portfolio-service/PortfolioService.js.map +1 -1
- package/node/wrappers/services/portfolio-service/PortfolioService.ts +7 -2
- package/node/wrappers/services/position-service/PositionService.d.ts +1 -1
- package/node/wrappers/services/position-service/PositionService.js +8 -2
- package/node/wrappers/services/position-service/PositionService.js.map +1 -1
- package/node/wrappers/services/position-service/PositionService.ts +7 -2
- package/node/wrappers/services/position-service/position.test.js.map +1 -1
- package/node/wrappers/services/price-service/PriceService.d.ts +29 -0
- package/node/wrappers/services/price-service/PriceService.js +151 -0
- package/node/wrappers/services/price-service/PriceService.js.map +1 -0
- package/node/wrappers/services/price-service/PriceService.ts +127 -0
- package/node/wrappers/services/price-service/price-wrapper.test.d.ts +1 -0
- package/node/wrappers/services/price-service/price-wrapper.test.js +132 -0
- package/node/wrappers/services/price-service/price-wrapper.test.js.map +1 -0
- package/node/wrappers/services/price-service/price-wrapper.test.ts +120 -0
- package/node/wrappers/services/price-service/price.test.d.ts +1 -0
- package/node/wrappers/services/price-service/price.test.js +198 -0
- package/node/wrappers/services/price-service/price.test.js.map +1 -0
- package/node/wrappers/services/price-service/price.test.ts +205 -0
- package/node/wrappers/services/security-service/SecurityService.d.ts +1 -1
- package/node/wrappers/services/security-service/SecurityService.js +8 -2
- package/node/wrappers/services/security-service/SecurityService.js.map +1 -1
- package/node/wrappers/services/security-service/SecurityService.searchByUuid.test.d.ts +1 -0
- package/node/wrappers/services/security-service/SecurityService.searchByUuid.test.js +38 -0
- package/node/wrappers/services/security-service/SecurityService.searchByUuid.test.js.map +1 -0
- package/node/wrappers/services/security-service/SecurityService.searchByUuid.test.ts +32 -0
- package/node/wrappers/services/security-service/SecurityService.ts +7 -2
- package/node/wrappers/services/security-service/security.maturityLadder.test.js.map +1 -1
- package/node/wrappers/services/transaction-service/TransactionService.d.ts +1 -1
- package/node/wrappers/services/transaction-service/TransactionService.js +8 -2
- package/node/wrappers/services/transaction-service/TransactionService.js.map +1 -1
- package/node/wrappers/services/transaction-service/TransactionService.ts +7 -2
- package/node/wrappers/services/transaction-service/transaction.search.test.js.map +1 -1
- package/node/wrappers/services/transaction-service/transaction.test.js.map +1 -1
- package/package.json +3 -2
- package/.env +0 -3
|
@@ -10,9 +10,23 @@ import { ZonedDateTime } from "../utils/datetime";
|
|
|
10
10
|
import { UUID } from "../utils/uuid";
|
|
11
11
|
import { LocalDate } from "../utils/date";
|
|
12
12
|
import { Decimal } from "decimal.js";
|
|
13
|
+
interface TransactionConstructorParams {
|
|
14
|
+
tradeDate: Date;
|
|
15
|
+
settlementDate: Date;
|
|
16
|
+
asOfDate: Date;
|
|
17
|
+
price: Decimal;
|
|
18
|
+
security: Security;
|
|
19
|
+
transactionType: TransactionType;
|
|
20
|
+
portfolio: Portfolio;
|
|
21
|
+
quantity: Decimal;
|
|
22
|
+
}
|
|
13
23
|
declare class Transaction {
|
|
14
24
|
proto: TransactionProto;
|
|
15
|
-
constructor(
|
|
25
|
+
constructor(protoOrParams: TransactionProto | TransactionConstructorParams);
|
|
26
|
+
/**
|
|
27
|
+
* Builds a complete TransactionProto from constructor parameters
|
|
28
|
+
*/
|
|
29
|
+
private buildProtoFromParams;
|
|
16
30
|
toString(): string;
|
|
17
31
|
getFields(): FieldProto[];
|
|
18
32
|
getField(field: FieldProto): any;
|
|
@@ -31,6 +45,50 @@ declare class Transaction {
|
|
|
31
45
|
getTradeName(): string;
|
|
32
46
|
getPositionStatus(): PositionStatusProto;
|
|
33
47
|
getChildrenTransactions(): TransactionProto[];
|
|
48
|
+
/**
|
|
49
|
+
* Adds a child transaction to this transaction's proto
|
|
50
|
+
* @param child - The child transaction to add
|
|
51
|
+
*/
|
|
52
|
+
addChildTransaction(child: Transaction): void;
|
|
53
|
+
/**
|
|
54
|
+
* Checks if this transaction's security is cash
|
|
55
|
+
* @returns true if the security is cash, false otherwise
|
|
56
|
+
*/
|
|
57
|
+
isCashSecurity(): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Searches child transactions for a cash transaction
|
|
60
|
+
* @returns The cash transaction if found, null otherwise
|
|
61
|
+
*/
|
|
62
|
+
getCashTransaction(): Transaction | null;
|
|
34
63
|
equals(other: Transaction): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Creates a cash transaction associated with a parent transaction.
|
|
66
|
+
* The cash transaction represents the cash impact of the parent transaction.
|
|
67
|
+
* @param cashSecurity - The cash security (e.g., USD)
|
|
68
|
+
* @param parentTransaction - The parent transaction for which to create the cash transaction
|
|
69
|
+
* @returns The created cash transaction
|
|
70
|
+
*/
|
|
71
|
+
static createCashTransaction(cashSecurity: Security, parentTransaction: Transaction): Transaction;
|
|
72
|
+
/**
|
|
73
|
+
* Creates a maturation transaction for a bond.
|
|
74
|
+
* @param transaction - The parent transaction (must be for a bond security)
|
|
75
|
+
* @param transactionType - The transaction type (MATURATION or MATURATION_OFFSET)
|
|
76
|
+
* @param cashSecurity - The cash security to use for the cash impact
|
|
77
|
+
*/
|
|
78
|
+
static addMaturationTransaction(transaction: Transaction, transactionType: TransactionType, cashSecurity: Security): void;
|
|
79
|
+
/**
|
|
80
|
+
* Generates additional transactions associated with this transaction.
|
|
81
|
+
* For instance, a Buy transaction on a bond will also create the maturation transaction.
|
|
82
|
+
* @param transaction - The parent transaction
|
|
83
|
+
* @param cashSecurity - The cash security to use for cash impacts
|
|
84
|
+
*/
|
|
85
|
+
static addDerivedTransactions(transaction: Transaction, cashSecurity: Security): void;
|
|
86
|
+
/**
|
|
87
|
+
* Adds a cash impact transaction to this transaction.
|
|
88
|
+
* If the transaction's security is not cash, creates a cash transaction.
|
|
89
|
+
* @param transaction - The transaction to add cash impact to
|
|
90
|
+
* @param cashSecurity - The cash security (e.g., USD) to use for the cash transaction
|
|
91
|
+
*/
|
|
92
|
+
static addCashImpact(transaction: Transaction, cashSecurity: Security): void;
|
|
35
93
|
}
|
|
36
94
|
export default Transaction;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert = require("assert");
|
|
7
|
+
const transaction_1 = __importDefault(require("./transaction"));
|
|
8
|
+
const transaction_type_1 = require("./transaction_type");
|
|
9
|
+
const transaction_type_pb_1 = require("../../../fintekkers/models/transaction/transaction_type_pb");
|
|
10
|
+
const security_1 = __importDefault(require("../security/security"));
|
|
11
|
+
const security_pb_1 = require("../../../fintekkers/models/security/security_pb");
|
|
12
|
+
const security_type_pb_1 = require("../../../fintekkers/models/security/security_type_pb");
|
|
13
|
+
const local_date_pb_1 = require("../../../fintekkers/models/util/local_date_pb");
|
|
14
|
+
const decimal_value_pb_1 = require("../../../fintekkers/models/util/decimal_value_pb");
|
|
15
|
+
const security_quantity_type_pb_1 = require("../../../fintekkers/models/security/security_quantity_type_pb");
|
|
16
|
+
const coupon_frequency_pb_1 = require("../../../fintekkers/models/security/coupon_frequency_pb");
|
|
17
|
+
const coupon_type_pb_1 = require("../../../fintekkers/models/security/coupon_type_pb");
|
|
18
|
+
const uuid_1 = require("../utils/uuid");
|
|
19
|
+
const datetime_1 = require("../utils/datetime");
|
|
20
|
+
const decimal_js_1 = require("decimal.js");
|
|
21
|
+
const portfolio_test_1 = require("../portfolio/portfolio.test");
|
|
22
|
+
test('test Transaction createCashTransaction', () => {
|
|
23
|
+
testCreateCashTransaction();
|
|
24
|
+
});
|
|
25
|
+
test('test Transaction addMaturationTransaction', () => {
|
|
26
|
+
testAddMaturationTransaction();
|
|
27
|
+
});
|
|
28
|
+
test('test Transaction addDerivedTransactions', () => {
|
|
29
|
+
testAddDerivedTransactions();
|
|
30
|
+
});
|
|
31
|
+
test('test Transaction addCashImpact', () => {
|
|
32
|
+
testAddCashImpact();
|
|
33
|
+
});
|
|
34
|
+
test('test Transaction helper methods', () => {
|
|
35
|
+
testHelperMethods();
|
|
36
|
+
});
|
|
37
|
+
function testCreateCashTransaction() {
|
|
38
|
+
// Test BUY transaction -> WITHDRAWAL
|
|
39
|
+
const buyTransaction = createBondTransaction(transaction_type_pb_1.TransactionTypeProto.BUY);
|
|
40
|
+
const cashSecurity = createCashSecurity();
|
|
41
|
+
const cashTransaction = transaction_1.default.createCashTransaction(cashSecurity, buyTransaction);
|
|
42
|
+
assert(cashTransaction.getTransactionType().proto === transaction_type_pb_1.TransactionTypeProto.WITHDRAWAL, 'BUY transaction should create WITHDRAWAL cash transaction');
|
|
43
|
+
assert(cashTransaction.getSecurity().proto.getSecurityType() === security_type_pb_1.SecurityTypeProto.CASH_SECURITY, 'Cash transaction should have cash security');
|
|
44
|
+
assert(buyTransaction.getChildrenTransactions().length === 1, 'Parent transaction should have one child');
|
|
45
|
+
const foundCash = buyTransaction.getCashTransaction();
|
|
46
|
+
assert(foundCash !== null && foundCash.getID().toString() === cashTransaction.getID().toString(), 'getCashTransaction should return the created cash transaction');
|
|
47
|
+
// Test SELL transaction -> DEPOSIT
|
|
48
|
+
const sellTransaction = createBondTransaction(transaction_type_pb_1.TransactionTypeProto.SELL);
|
|
49
|
+
const cashTransaction2 = transaction_1.default.createCashTransaction(cashSecurity, sellTransaction);
|
|
50
|
+
assert(cashTransaction2.getTransactionType().proto === transaction_type_pb_1.TransactionTypeProto.DEPOSIT, 'SELL transaction should create DEPOSIT cash transaction');
|
|
51
|
+
}
|
|
52
|
+
function testAddMaturationTransaction() {
|
|
53
|
+
const bondTransaction = createBondTransaction(transaction_type_pb_1.TransactionTypeProto.BUY);
|
|
54
|
+
const maturationType = new transaction_type_1.TransactionType(transaction_type_pb_1.TransactionTypeProto.MATURATION);
|
|
55
|
+
const cashSecurity = createCashSecurity();
|
|
56
|
+
transaction_1.default.addMaturationTransaction(bondTransaction, maturationType, cashSecurity);
|
|
57
|
+
const children = bondTransaction.getChildrenTransactions();
|
|
58
|
+
assert(children.length === 1, 'Should have one child transaction');
|
|
59
|
+
const maturation = new transaction_1.default(children[0]);
|
|
60
|
+
assert(maturation.getTransactionType().proto === transaction_type_pb_1.TransactionTypeProto.MATURATION, 'Child should be MATURATION transaction');
|
|
61
|
+
assert(maturation.getSecurity().getID().toString() === bondTransaction.getSecurity().getID().toString(), 'Maturation should have same security');
|
|
62
|
+
assert(maturation.getQuantity().equals(bondTransaction.getQuantity()), 'Maturation should have same quantity');
|
|
63
|
+
}
|
|
64
|
+
function testAddDerivedTransactions() {
|
|
65
|
+
const cashSecurity = createCashSecurity();
|
|
66
|
+
// Test BUY bond transaction -> should add MATURATION
|
|
67
|
+
const buyTransaction = createBondTransaction(transaction_type_pb_1.TransactionTypeProto.BUY);
|
|
68
|
+
transaction_1.default.addDerivedTransactions(buyTransaction, cashSecurity);
|
|
69
|
+
const children = buyTransaction.getChildrenTransactions();
|
|
70
|
+
assert(children.length === 1, 'BUY bond should have one derived transaction');
|
|
71
|
+
const maturation = new transaction_1.default(children[0]);
|
|
72
|
+
assert(maturation.getTransactionType().proto === transaction_type_pb_1.TransactionTypeProto.MATURATION, 'BUY bond should create MATURATION transaction');
|
|
73
|
+
// Test SELL bond transaction -> should add MATURATION_OFFSET
|
|
74
|
+
const sellTransaction = createBondTransaction(transaction_type_pb_1.TransactionTypeProto.SELL);
|
|
75
|
+
transaction_1.default.addDerivedTransactions(sellTransaction, cashSecurity);
|
|
76
|
+
const children2 = sellTransaction.getChildrenTransactions();
|
|
77
|
+
assert(children2.length === 1, 'SELL bond should have one derived transaction');
|
|
78
|
+
const maturationOffset = new transaction_1.default(children2[0]);
|
|
79
|
+
assert(maturationOffset.getTransactionType().proto === transaction_type_pb_1.TransactionTypeProto.MATURATION_OFFSET, 'SELL bond should create MATURATION_OFFSET transaction');
|
|
80
|
+
// Test non-bond transaction -> should not add derived transactions
|
|
81
|
+
const equityTransaction = createEquityTransaction();
|
|
82
|
+
transaction_1.default.addDerivedTransactions(equityTransaction, cashSecurity);
|
|
83
|
+
assert(equityTransaction.getChildrenTransactions().length === 0, 'Non-bond transaction should not have derived transactions');
|
|
84
|
+
}
|
|
85
|
+
function testAddCashImpact() {
|
|
86
|
+
const bondTransaction = createBondTransaction(transaction_type_pb_1.TransactionTypeProto.BUY);
|
|
87
|
+
const cashSecurity = createCashSecurity();
|
|
88
|
+
transaction_1.default.addCashImpact(bondTransaction, cashSecurity);
|
|
89
|
+
assert(bondTransaction.getCashTransaction() !== null, 'Transaction should have cash transaction after addCashImpact');
|
|
90
|
+
// Test that adding cash impact twice throws error
|
|
91
|
+
try {
|
|
92
|
+
transaction_1.default.addCashImpact(bondTransaction, cashSecurity);
|
|
93
|
+
assert(false, 'Should throw error when cash transaction already exists');
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
assert(e instanceof Error && e.message.includes('already has a cash impact'), 'Should throw error about existing cash impact');
|
|
97
|
+
}
|
|
98
|
+
// Test that cash security transaction doesn't create cash impact
|
|
99
|
+
const cashTransaction = createCashTransaction();
|
|
100
|
+
transaction_1.default.addCashImpact(cashTransaction, cashSecurity);
|
|
101
|
+
assert(cashTransaction.getChildrenTransactions().length === 0, 'Cash security transaction should not create cash impact');
|
|
102
|
+
}
|
|
103
|
+
function testHelperMethods() {
|
|
104
|
+
const transaction = createBondTransaction(transaction_type_pb_1.TransactionTypeProto.BUY);
|
|
105
|
+
// Test isCashSecurity
|
|
106
|
+
assert(!transaction.isCashSecurity(), 'Bond transaction should not be cash security');
|
|
107
|
+
const cashTransaction = createCashTransaction();
|
|
108
|
+
assert(cashTransaction.isCashSecurity(), 'Cash transaction should be cash security');
|
|
109
|
+
// Test addChildTransaction
|
|
110
|
+
const child = createBondTransaction(transaction_type_pb_1.TransactionTypeProto.SELL);
|
|
111
|
+
transaction.addChildTransaction(child);
|
|
112
|
+
assert(transaction.getChildrenTransactions().length === 1, 'Should have one child after addChildTransaction');
|
|
113
|
+
// Test getCashTransaction
|
|
114
|
+
const cashSecurity = createCashSecurity();
|
|
115
|
+
const cashTxn = transaction_1.default.createCashTransaction(cashSecurity, transaction);
|
|
116
|
+
const foundCash = transaction.getCashTransaction();
|
|
117
|
+
assert(foundCash !== null && foundCash.getID().toString() === cashTxn.getID().toString(), 'getCashTransaction should find the cash child transaction');
|
|
118
|
+
}
|
|
119
|
+
function createBondTransaction(transactionType) {
|
|
120
|
+
const security = createBondSecurity();
|
|
121
|
+
const portfolio = (0, portfolio_test_1.dummyPortfolio)();
|
|
122
|
+
const tradeDate = new Date(2024, 0, 15);
|
|
123
|
+
const settlementDate = new Date(2024, 0, 17);
|
|
124
|
+
const asOfDate = new Date(2024, 0, 15, 10, 30, 0);
|
|
125
|
+
const price = new decimal_js_1.Decimal('99.50');
|
|
126
|
+
const quantity = new decimal_js_1.Decimal('1000.00');
|
|
127
|
+
return new transaction_1.default({
|
|
128
|
+
tradeDate,
|
|
129
|
+
settlementDate,
|
|
130
|
+
asOfDate,
|
|
131
|
+
price,
|
|
132
|
+
security,
|
|
133
|
+
transactionType: new transaction_type_1.TransactionType(transactionType),
|
|
134
|
+
portfolio,
|
|
135
|
+
quantity
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
function createBondSecurity() {
|
|
139
|
+
return security_1.default.create(new security_pb_1.SecurityProto()
|
|
140
|
+
.setObjectClass('Security')
|
|
141
|
+
.setVersion('0.0.1')
|
|
142
|
+
.setUuid(uuid_1.UUID.random().toUUIDProto())
|
|
143
|
+
.setSecurityType(security_type_pb_1.SecurityTypeProto.BOND_SECURITY)
|
|
144
|
+
.setFaceValue(new decimal_value_pb_1.DecimalValueProto().setArbitraryPrecisionValue('1000.00'))
|
|
145
|
+
.setQuantityType(security_quantity_type_pb_1.SecurityQuantityTypeProto.ORIGINAL_FACE_VALUE)
|
|
146
|
+
.setAssetClass('FixedIncome')
|
|
147
|
+
.setIssuerName('Test Issuer')
|
|
148
|
+
.setCouponRate(new decimal_value_pb_1.DecimalValueProto().setArbitraryPrecisionValue('0.05'))
|
|
149
|
+
.setCouponFrequency(coupon_frequency_pb_1.CouponFrequencyProto.SEMIANNUALLY)
|
|
150
|
+
.setCouponType(coupon_type_pb_1.CouponTypeProto.FIXED)
|
|
151
|
+
.setMaturityDate(new local_date_pb_1.LocalDateProto().setYear(2034).setMonth(1).setDay(1))
|
|
152
|
+
.setIssueDate(new local_date_pb_1.LocalDateProto().setYear(2024).setMonth(1).setDay(1))
|
|
153
|
+
.setAsOf(datetime_1.ZonedDateTime.now().toProto())
|
|
154
|
+
.setDescription('Test bond security'));
|
|
155
|
+
}
|
|
156
|
+
function createEquityTransaction() {
|
|
157
|
+
const security = security_1.default.create(new security_pb_1.SecurityProto()
|
|
158
|
+
.setObjectClass('Security')
|
|
159
|
+
.setVersion('0.0.1')
|
|
160
|
+
.setUuid(uuid_1.UUID.random().toUUIDProto())
|
|
161
|
+
.setSecurityType(security_type_pb_1.SecurityTypeProto.EQUITY_SECURITY)
|
|
162
|
+
.setAssetClass('Equity')
|
|
163
|
+
.setAsOf(datetime_1.ZonedDateTime.now().toProto()));
|
|
164
|
+
const portfolio = (0, portfolio_test_1.dummyPortfolio)();
|
|
165
|
+
return new transaction_1.default({
|
|
166
|
+
tradeDate: new Date(2024, 0, 15),
|
|
167
|
+
settlementDate: new Date(2024, 0, 17),
|
|
168
|
+
asOfDate: new Date(2024, 0, 15, 10, 30, 0),
|
|
169
|
+
price: new decimal_js_1.Decimal('100.00'),
|
|
170
|
+
security,
|
|
171
|
+
transactionType: new transaction_type_1.TransactionType(transaction_type_pb_1.TransactionTypeProto.BUY),
|
|
172
|
+
portfolio,
|
|
173
|
+
quantity: new decimal_js_1.Decimal('100.00')
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
function createCashSecurity() {
|
|
177
|
+
return security_1.default.create(new security_pb_1.SecurityProto()
|
|
178
|
+
.setObjectClass('Security')
|
|
179
|
+
.setVersion('0.0.1')
|
|
180
|
+
.setUuid(uuid_1.UUID.random().toUUIDProto())
|
|
181
|
+
.setSecurityType(security_type_pb_1.SecurityTypeProto.CASH_SECURITY)
|
|
182
|
+
.setAssetClass('Cash')
|
|
183
|
+
.setAsOf(datetime_1.ZonedDateTime.now().toProto()));
|
|
184
|
+
}
|
|
185
|
+
function createCashTransaction() {
|
|
186
|
+
const cashSecurity = createCashSecurity();
|
|
187
|
+
const portfolio = (0, portfolio_test_1.dummyPortfolio)();
|
|
188
|
+
return new transaction_1.default({
|
|
189
|
+
tradeDate: new Date(2024, 0, 15),
|
|
190
|
+
settlementDate: new Date(2024, 0, 17),
|
|
191
|
+
asOfDate: new Date(2024, 0, 15, 10, 30, 0),
|
|
192
|
+
price: new decimal_js_1.Decimal('1.0'),
|
|
193
|
+
security: cashSecurity,
|
|
194
|
+
transactionType: new transaction_type_1.TransactionType(transaction_type_pb_1.TransactionTypeProto.DEPOSIT),
|
|
195
|
+
portfolio,
|
|
196
|
+
quantity: new decimal_js_1.Decimal('1000.00')
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=transaction.derived.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.derived.test.js","sourceRoot":"","sources":["transaction.derived.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import assert = require('assert');
|
|
2
|
+
import Transaction from './transaction';
|
|
3
|
+
import { TransactionType } from './transaction_type';
|
|
4
|
+
import { TransactionTypeProto } from '../../../fintekkers/models/transaction/transaction_type_pb';
|
|
5
|
+
import { PositionStatusProto } from '../../../fintekkers/models/position/position_status_pb';
|
|
6
|
+
import Security from '../security/security';
|
|
7
|
+
import Portfolio from '../portfolio/portfolio';
|
|
8
|
+
import { SecurityProto } from '../../../fintekkers/models/security/security_pb';
|
|
9
|
+
import { SecurityTypeProto } from '../../../fintekkers/models/security/security_type_pb';
|
|
10
|
+
import { LocalDateProto } from '../../../fintekkers/models/util/local_date_pb';
|
|
11
|
+
import { DecimalValueProto } from '../../../fintekkers/models/util/decimal_value_pb';
|
|
12
|
+
import { SecurityQuantityTypeProto } from '../../../fintekkers/models/security/security_quantity_type_pb';
|
|
13
|
+
import { CouponFrequencyProto } from '../../../fintekkers/models/security/coupon_frequency_pb';
|
|
14
|
+
import { CouponTypeProto } from '../../../fintekkers/models/security/coupon_type_pb';
|
|
15
|
+
import { UUID } from '../utils/uuid';
|
|
16
|
+
import { ZonedDateTime } from '../utils/datetime';
|
|
17
|
+
import { Decimal } from 'decimal.js';
|
|
18
|
+
import { dummyPortfolio } from '../portfolio/portfolio.test';
|
|
19
|
+
|
|
20
|
+
test('test Transaction createCashTransaction', () => {
|
|
21
|
+
testCreateCashTransaction();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test('test Transaction addMaturationTransaction', () => {
|
|
25
|
+
testAddMaturationTransaction();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test('test Transaction addDerivedTransactions', () => {
|
|
29
|
+
testAddDerivedTransactions();
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test('test Transaction addCashImpact', () => {
|
|
33
|
+
testAddCashImpact();
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test('test Transaction helper methods', () => {
|
|
37
|
+
testHelperMethods();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
function testCreateCashTransaction(): void {
|
|
41
|
+
// Test BUY transaction -> WITHDRAWAL
|
|
42
|
+
const buyTransaction = createBondTransaction(TransactionTypeProto.BUY);
|
|
43
|
+
const cashSecurity = createCashSecurity();
|
|
44
|
+
|
|
45
|
+
const cashTransaction = Transaction.createCashTransaction(cashSecurity, buyTransaction);
|
|
46
|
+
|
|
47
|
+
assert(cashTransaction.getTransactionType().proto === TransactionTypeProto.WITHDRAWAL,
|
|
48
|
+
'BUY transaction should create WITHDRAWAL cash transaction');
|
|
49
|
+
assert(cashTransaction.getSecurity().proto.getSecurityType() === SecurityTypeProto.CASH_SECURITY,
|
|
50
|
+
'Cash transaction should have cash security');
|
|
51
|
+
assert(buyTransaction.getChildrenTransactions().length === 1,
|
|
52
|
+
'Parent transaction should have one child');
|
|
53
|
+
const foundCash = buyTransaction.getCashTransaction();
|
|
54
|
+
assert(foundCash !== null && foundCash.getID().toString() === cashTransaction.getID().toString(),
|
|
55
|
+
'getCashTransaction should return the created cash transaction');
|
|
56
|
+
|
|
57
|
+
// Test SELL transaction -> DEPOSIT
|
|
58
|
+
const sellTransaction = createBondTransaction(TransactionTypeProto.SELL);
|
|
59
|
+
const cashTransaction2 = Transaction.createCashTransaction(cashSecurity, sellTransaction);
|
|
60
|
+
|
|
61
|
+
assert(cashTransaction2.getTransactionType().proto === TransactionTypeProto.DEPOSIT,
|
|
62
|
+
'SELL transaction should create DEPOSIT cash transaction');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function testAddMaturationTransaction(): void {
|
|
66
|
+
const bondTransaction = createBondTransaction(TransactionTypeProto.BUY);
|
|
67
|
+
const maturationType = new TransactionType(TransactionTypeProto.MATURATION);
|
|
68
|
+
const cashSecurity = createCashSecurity();
|
|
69
|
+
|
|
70
|
+
Transaction.addMaturationTransaction(bondTransaction, maturationType, cashSecurity);
|
|
71
|
+
|
|
72
|
+
const children = bondTransaction.getChildrenTransactions();
|
|
73
|
+
assert(children.length === 1, 'Should have one child transaction');
|
|
74
|
+
|
|
75
|
+
const maturation = new Transaction(children[0]);
|
|
76
|
+
assert(maturation.getTransactionType().proto === TransactionTypeProto.MATURATION,
|
|
77
|
+
'Child should be MATURATION transaction');
|
|
78
|
+
assert(maturation.getSecurity().getID().toString() === bondTransaction.getSecurity().getID().toString(),
|
|
79
|
+
'Maturation should have same security');
|
|
80
|
+
assert(maturation.getQuantity().equals(bondTransaction.getQuantity()),
|
|
81
|
+
'Maturation should have same quantity');
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function testAddDerivedTransactions(): void {
|
|
85
|
+
const cashSecurity = createCashSecurity();
|
|
86
|
+
|
|
87
|
+
// Test BUY bond transaction -> should add MATURATION
|
|
88
|
+
const buyTransaction = createBondTransaction(TransactionTypeProto.BUY);
|
|
89
|
+
Transaction.addDerivedTransactions(buyTransaction, cashSecurity);
|
|
90
|
+
|
|
91
|
+
const children = buyTransaction.getChildrenTransactions();
|
|
92
|
+
assert(children.length === 1, 'BUY bond should have one derived transaction');
|
|
93
|
+
const maturation = new Transaction(children[0]);
|
|
94
|
+
assert(maturation.getTransactionType().proto === TransactionTypeProto.MATURATION,
|
|
95
|
+
'BUY bond should create MATURATION transaction');
|
|
96
|
+
|
|
97
|
+
// Test SELL bond transaction -> should add MATURATION_OFFSET
|
|
98
|
+
const sellTransaction = createBondTransaction(TransactionTypeProto.SELL);
|
|
99
|
+
Transaction.addDerivedTransactions(sellTransaction, cashSecurity);
|
|
100
|
+
|
|
101
|
+
const children2 = sellTransaction.getChildrenTransactions();
|
|
102
|
+
assert(children2.length === 1, 'SELL bond should have one derived transaction');
|
|
103
|
+
const maturationOffset = new Transaction(children2[0]);
|
|
104
|
+
assert(maturationOffset.getTransactionType().proto === TransactionTypeProto.MATURATION_OFFSET,
|
|
105
|
+
'SELL bond should create MATURATION_OFFSET transaction');
|
|
106
|
+
|
|
107
|
+
// Test non-bond transaction -> should not add derived transactions
|
|
108
|
+
const equityTransaction = createEquityTransaction();
|
|
109
|
+
Transaction.addDerivedTransactions(equityTransaction, cashSecurity);
|
|
110
|
+
assert(equityTransaction.getChildrenTransactions().length === 0,
|
|
111
|
+
'Non-bond transaction should not have derived transactions');
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function testAddCashImpact(): void {
|
|
115
|
+
const bondTransaction = createBondTransaction(TransactionTypeProto.BUY);
|
|
116
|
+
const cashSecurity = createCashSecurity();
|
|
117
|
+
|
|
118
|
+
Transaction.addCashImpact(bondTransaction, cashSecurity);
|
|
119
|
+
|
|
120
|
+
assert(bondTransaction.getCashTransaction() !== null,
|
|
121
|
+
'Transaction should have cash transaction after addCashImpact');
|
|
122
|
+
|
|
123
|
+
// Test that adding cash impact twice throws error
|
|
124
|
+
try {
|
|
125
|
+
Transaction.addCashImpact(bondTransaction, cashSecurity);
|
|
126
|
+
assert(false, 'Should throw error when cash transaction already exists');
|
|
127
|
+
} catch (e) {
|
|
128
|
+
assert(e instanceof Error && e.message.includes('already has a cash impact'),
|
|
129
|
+
'Should throw error about existing cash impact');
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Test that cash security transaction doesn't create cash impact
|
|
133
|
+
const cashTransaction = createCashTransaction();
|
|
134
|
+
Transaction.addCashImpact(cashTransaction, cashSecurity);
|
|
135
|
+
assert(cashTransaction.getChildrenTransactions().length === 0,
|
|
136
|
+
'Cash security transaction should not create cash impact');
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function testHelperMethods(): void {
|
|
140
|
+
const transaction = createBondTransaction(TransactionTypeProto.BUY);
|
|
141
|
+
|
|
142
|
+
// Test isCashSecurity
|
|
143
|
+
assert(!transaction.isCashSecurity(), 'Bond transaction should not be cash security');
|
|
144
|
+
|
|
145
|
+
const cashTransaction = createCashTransaction();
|
|
146
|
+
assert(cashTransaction.isCashSecurity(), 'Cash transaction should be cash security');
|
|
147
|
+
|
|
148
|
+
// Test addChildTransaction
|
|
149
|
+
const child = createBondTransaction(TransactionTypeProto.SELL);
|
|
150
|
+
transaction.addChildTransaction(child);
|
|
151
|
+
assert(transaction.getChildrenTransactions().length === 1,
|
|
152
|
+
'Should have one child after addChildTransaction');
|
|
153
|
+
|
|
154
|
+
// Test getCashTransaction
|
|
155
|
+
const cashSecurity = createCashSecurity();
|
|
156
|
+
const cashTxn = Transaction.createCashTransaction(cashSecurity, transaction);
|
|
157
|
+
const foundCash = transaction.getCashTransaction();
|
|
158
|
+
assert(foundCash !== null && foundCash.getID().toString() === cashTxn.getID().toString(),
|
|
159
|
+
'getCashTransaction should find the cash child transaction');
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function createBondTransaction(transactionType: TransactionTypeProto): Transaction {
|
|
163
|
+
const security = createBondSecurity();
|
|
164
|
+
const portfolio = dummyPortfolio();
|
|
165
|
+
const tradeDate = new Date(2024, 0, 15);
|
|
166
|
+
const settlementDate = new Date(2024, 0, 17);
|
|
167
|
+
const asOfDate = new Date(2024, 0, 15, 10, 30, 0);
|
|
168
|
+
const price = new Decimal('99.50');
|
|
169
|
+
const quantity = new Decimal('1000.00');
|
|
170
|
+
|
|
171
|
+
return new Transaction({
|
|
172
|
+
tradeDate,
|
|
173
|
+
settlementDate,
|
|
174
|
+
asOfDate,
|
|
175
|
+
price,
|
|
176
|
+
security,
|
|
177
|
+
transactionType: new TransactionType(transactionType),
|
|
178
|
+
portfolio,
|
|
179
|
+
quantity
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function createBondSecurity(): Security {
|
|
184
|
+
return Security.create(new SecurityProto()
|
|
185
|
+
.setObjectClass('Security')
|
|
186
|
+
.setVersion('0.0.1')
|
|
187
|
+
.setUuid(UUID.random().toUUIDProto())
|
|
188
|
+
.setSecurityType(SecurityTypeProto.BOND_SECURITY)
|
|
189
|
+
.setFaceValue(new DecimalValueProto().setArbitraryPrecisionValue('1000.00'))
|
|
190
|
+
.setQuantityType(SecurityQuantityTypeProto.ORIGINAL_FACE_VALUE)
|
|
191
|
+
.setAssetClass('FixedIncome')
|
|
192
|
+
.setIssuerName('Test Issuer')
|
|
193
|
+
.setCouponRate(new DecimalValueProto().setArbitraryPrecisionValue('0.05'))
|
|
194
|
+
.setCouponFrequency(CouponFrequencyProto.SEMIANNUALLY)
|
|
195
|
+
.setCouponType(CouponTypeProto.FIXED)
|
|
196
|
+
.setMaturityDate(new LocalDateProto().setYear(2034).setMonth(1).setDay(1))
|
|
197
|
+
.setIssueDate(new LocalDateProto().setYear(2024).setMonth(1).setDay(1))
|
|
198
|
+
.setAsOf(ZonedDateTime.now().toProto())
|
|
199
|
+
.setDescription('Test bond security')
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
function createEquityTransaction(): Transaction {
|
|
204
|
+
const security = Security.create(new SecurityProto()
|
|
205
|
+
.setObjectClass('Security')
|
|
206
|
+
.setVersion('0.0.1')
|
|
207
|
+
.setUuid(UUID.random().toUUIDProto())
|
|
208
|
+
.setSecurityType(SecurityTypeProto.EQUITY_SECURITY)
|
|
209
|
+
.setAssetClass('Equity')
|
|
210
|
+
.setAsOf(ZonedDateTime.now().toProto())
|
|
211
|
+
);
|
|
212
|
+
const portfolio = dummyPortfolio();
|
|
213
|
+
|
|
214
|
+
return new Transaction({
|
|
215
|
+
tradeDate: new Date(2024, 0, 15),
|
|
216
|
+
settlementDate: new Date(2024, 0, 17),
|
|
217
|
+
asOfDate: new Date(2024, 0, 15, 10, 30, 0),
|
|
218
|
+
price: new Decimal('100.00'),
|
|
219
|
+
security,
|
|
220
|
+
transactionType: new TransactionType(TransactionTypeProto.BUY),
|
|
221
|
+
portfolio,
|
|
222
|
+
quantity: new Decimal('100.00')
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
function createCashSecurity(): Security {
|
|
227
|
+
return Security.create(new SecurityProto()
|
|
228
|
+
.setObjectClass('Security')
|
|
229
|
+
.setVersion('0.0.1')
|
|
230
|
+
.setUuid(UUID.random().toUUIDProto())
|
|
231
|
+
.setSecurityType(SecurityTypeProto.CASH_SECURITY)
|
|
232
|
+
.setAssetClass('Cash')
|
|
233
|
+
.setAsOf(ZonedDateTime.now().toProto())
|
|
234
|
+
);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
function createCashTransaction(): Transaction {
|
|
238
|
+
const cashSecurity = createCashSecurity();
|
|
239
|
+
const portfolio = dummyPortfolio();
|
|
240
|
+
|
|
241
|
+
return new Transaction({
|
|
242
|
+
tradeDate: new Date(2024, 0, 15),
|
|
243
|
+
settlementDate: new Date(2024, 0, 17),
|
|
244
|
+
asOfDate: new Date(2024, 0, 15, 10, 30, 0),
|
|
245
|
+
price: new Decimal('1.0'),
|
|
246
|
+
security: cashSecurity,
|
|
247
|
+
transactionType: new TransactionType(TransactionTypeProto.DEPOSIT),
|
|
248
|
+
portfolio,
|
|
249
|
+
quantity: new Decimal('1000.00')
|
|
250
|
+
});
|
|
251
|
+
}
|