@cranberry-money/shared-services 4.0.0 → 8.0.0
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/package.json +4 -3
- package/dist/api/functional-client.d.ts +0 -66
- package/dist/api/functional-client.d.ts.map +0 -1
- package/dist/api/functional-client.js +0 -165
- package/dist/auth/functional/auth-operations.d.ts +0 -116
- package/dist/auth/functional/auth-operations.d.ts.map +0 -1
- package/dist/auth/functional/auth-operations.js +0 -246
- package/dist/auth/functional/auth-state.d.ts +0 -38
- package/dist/auth/functional/auth-state.d.ts.map +0 -1
- package/dist/auth/functional/auth-state.js +0 -87
- package/dist/auth/functional/token-storage.d.ts +0 -44
- package/dist/auth/functional/token-storage.d.ts.map +0 -1
- package/dist/auth/functional/token-storage.js +0 -178
- package/dist/auth/react/AuthProvider.d.ts +0 -92
- package/dist/auth/react/AuthProvider.d.ts.map +0 -1
- package/dist/auth/react/AuthProvider.js +0 -207
- package/dist/integration/blueberry-integration.d.ts +0 -21
- package/dist/integration/blueberry-integration.d.ts.map +0 -1
- package/dist/integration/blueberry-integration.js +0 -109
- package/dist/integration/index.d.ts +0 -8
- package/dist/integration/index.d.ts.map +0 -1
- package/dist/integration/index.js +0 -18
- package/dist/services/accounts.d.ts +0 -220
- package/dist/services/accounts.d.ts.map +0 -1
- package/dist/services/accounts.js +0 -175
- package/dist/services/banks.d.ts +0 -123
- package/dist/services/banks.d.ts.map +0 -1
- package/dist/services/banks.js +0 -151
- package/dist/services/cash-accounts.d.ts +0 -112
- package/dist/services/cash-accounts.d.ts.map +0 -1
- package/dist/services/cash-accounts.js +0 -222
- package/dist/services/documents.d.ts +0 -143
- package/dist/services/documents.d.ts.map +0 -1
- package/dist/services/documents.js +0 -253
- package/dist/services/factories/account-factory.d.ts +0 -16
- package/dist/services/factories/account-factory.d.ts.map +0 -1
- package/dist/services/factories/account-factory.js +0 -79
- package/dist/services/factories/auth-factory.d.ts +0 -23
- package/dist/services/factories/auth-factory.d.ts.map +0 -1
- package/dist/services/factories/auth-factory.js +0 -75
- package/dist/services/factories/bank-factory.d.ts +0 -16
- package/dist/services/factories/bank-factory.d.ts.map +0 -1
- package/dist/services/factories/bank-factory.js +0 -72
- package/dist/services/factories/cash-account-factory.d.ts +0 -16
- package/dist/services/factories/cash-account-factory.d.ts.map +0 -1
- package/dist/services/factories/cash-account-factory.js +0 -74
- package/dist/services/factories/document-factory.d.ts +0 -16
- package/dist/services/factories/document-factory.d.ts.map +0 -1
- package/dist/services/factories/document-factory.js +0 -85
- package/dist/services/factories/index.d.ts +0 -21
- package/dist/services/factories/index.d.ts.map +0 -1
- package/dist/services/factories/index.js +0 -40
- package/dist/services/factories/instrument-factory.d.ts +0 -16
- package/dist/services/factories/instrument-factory.d.ts.map +0 -1
- package/dist/services/factories/instrument-factory.js +0 -68
- package/dist/services/factories/master-factory.d.ts +0 -74
- package/dist/services/factories/master-factory.d.ts.map +0 -1
- package/dist/services/factories/master-factory.js +0 -183
- package/dist/services/factories/portfolio-factory.d.ts +0 -16
- package/dist/services/factories/portfolio-factory.d.ts.map +0 -1
- package/dist/services/factories/portfolio-factory.js +0 -74
- package/dist/services/factories/portfolio-template-factory.d.ts +0 -16
- package/dist/services/factories/portfolio-template-factory.d.ts.map +0 -1
- package/dist/services/factories/portfolio-template-factory.js +0 -76
- package/dist/services/factories/reference-data-factory.d.ts +0 -16
- package/dist/services/factories/reference-data-factory.d.ts.map +0 -1
- package/dist/services/factories/reference-data-factory.js +0 -86
- package/dist/services/factories/tax-residency-factory.d.ts +0 -16
- package/dist/services/factories/tax-residency-factory.d.ts.map +0 -1
- package/dist/services/factories/tax-residency-factory.js +0 -73
- package/dist/services/factories/trade-factory.d.ts +0 -16
- package/dist/services/factories/trade-factory.d.ts.map +0 -1
- package/dist/services/factories/trade-factory.js +0 -79
- package/dist/services/factories/types.d.ts +0 -250
- package/dist/services/factories/types.d.ts.map +0 -1
- package/dist/services/factories/types.js +0 -32
- package/dist/services/factories/withdrawal-factory.d.ts +0 -16
- package/dist/services/factories/withdrawal-factory.d.ts.map +0 -1
- package/dist/services/factories/withdrawal-factory.js +0 -78
- package/dist/services/instruments.d.ts +0 -138
- package/dist/services/instruments.d.ts.map +0 -1
- package/dist/services/instruments.js +0 -178
- package/dist/services/portfolio-templates.d.ts +0 -142
- package/dist/services/portfolio-templates.d.ts.map +0 -1
- package/dist/services/portfolio-templates.js +0 -201
- package/dist/services/portfolios.d.ts +0 -157
- package/dist/services/portfolios.d.ts.map +0 -1
- package/dist/services/portfolios.js +0 -144
- package/dist/services/reference-data.d.ts +0 -185
- package/dist/services/reference-data.d.ts.map +0 -1
- package/dist/services/reference-data.js +0 -245
- package/dist/services/tax-residencies.d.ts +0 -83
- package/dist/services/tax-residencies.d.ts.map +0 -1
- package/dist/services/tax-residencies.js +0 -179
- package/dist/services/trades.d.ts +0 -190
- package/dist/services/trades.d.ts.map +0 -1
- package/dist/services/trades.js +0 -207
- package/dist/services/withdrawals.d.ts +0 -236
- package/dist/services/withdrawals.d.ts.map +0 -1
- package/dist/services/withdrawals.js +0 -345
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Tax Residency Services - Pure Functional Implementation
|
|
4
|
-
*
|
|
5
|
-
* Tax residency management operations as pure functions with explicit dependencies.
|
|
6
|
-
* No global state, no side effects - everything is explicit and testable.
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.canHaveMultipleResidencies = exports.validateTaxIdentificationNumber = exports.formatTaxResidencyPeriod = exports.isTaxResidencyActive = exports.getTaxResidenciesByCountry = exports.getPrimaryTaxResidency = exports.getActiveTaxResidencies = exports.getUserTaxResidencies = exports.setPrimaryTaxResidency = exports.deleteTaxResidency = exports.updateTaxResidency = exports.createTaxResidency = exports.getTaxResidency = exports.getTaxResidencies = void 0;
|
|
10
|
-
// Tax residency operations with explicit dependencies
|
|
11
|
-
const getTaxResidencies = async ({ apiClient }, filters) => {
|
|
12
|
-
const params = {};
|
|
13
|
-
if (filters?.userProfile)
|
|
14
|
-
params.user_profile = filters.userProfile;
|
|
15
|
-
if (filters?.country)
|
|
16
|
-
params.country = filters.country;
|
|
17
|
-
if (filters?.isPrimary !== undefined)
|
|
18
|
-
params.is_primary = String(filters.isPrimary);
|
|
19
|
-
if (filters?.isActive !== undefined)
|
|
20
|
-
params.is_active = String(filters.isActive);
|
|
21
|
-
if (filters?.ordering) {
|
|
22
|
-
params.ordering = filters.ordering;
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
// Default ordering: primary first, then by country name
|
|
26
|
-
params.ordering = '-is_primary,country';
|
|
27
|
-
}
|
|
28
|
-
return apiClient.get('/api/tax-residencies/', { params });
|
|
29
|
-
};
|
|
30
|
-
exports.getTaxResidencies = getTaxResidencies;
|
|
31
|
-
const getTaxResidency = async ({ apiClient }, uuid) => {
|
|
32
|
-
if (!uuid?.trim()) {
|
|
33
|
-
throw new Error('Tax residency UUID is required');
|
|
34
|
-
}
|
|
35
|
-
return apiClient.get(`/api/tax-residencies/${uuid}/`);
|
|
36
|
-
};
|
|
37
|
-
exports.getTaxResidency = getTaxResidency;
|
|
38
|
-
const createTaxResidency = async ({ apiClient }, data) => {
|
|
39
|
-
// Validation
|
|
40
|
-
if (!data.userProfile?.trim()) {
|
|
41
|
-
throw new Error('User profile UUID is required');
|
|
42
|
-
}
|
|
43
|
-
if (!data.country?.trim()) {
|
|
44
|
-
throw new Error('Country UUID is required');
|
|
45
|
-
}
|
|
46
|
-
if (!data.startDate?.trim()) {
|
|
47
|
-
throw new Error('Start date is required');
|
|
48
|
-
}
|
|
49
|
-
// Validate date format (YYYY-MM-DD)
|
|
50
|
-
const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
|
|
51
|
-
if (!dateRegex.test(data.startDate)) {
|
|
52
|
-
throw new Error('Start date must be in YYYY-MM-DD format');
|
|
53
|
-
}
|
|
54
|
-
if (data.endDate && !dateRegex.test(data.endDate)) {
|
|
55
|
-
throw new Error('End date must be in YYYY-MM-DD format');
|
|
56
|
-
}
|
|
57
|
-
// Validate end date is after start date
|
|
58
|
-
if (data.endDate && new Date(data.endDate) <= new Date(data.startDate)) {
|
|
59
|
-
throw new Error('End date must be after start date');
|
|
60
|
-
}
|
|
61
|
-
return apiClient.post('/api/tax-residencies/', data);
|
|
62
|
-
};
|
|
63
|
-
exports.createTaxResidency = createTaxResidency;
|
|
64
|
-
const updateTaxResidency = async ({ apiClient }, uuid, data) => {
|
|
65
|
-
if (!uuid?.trim()) {
|
|
66
|
-
throw new Error('Tax residency UUID is required');
|
|
67
|
-
}
|
|
68
|
-
// Validate date formats if provided
|
|
69
|
-
const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
|
|
70
|
-
if (data.startDate && !dateRegex.test(data.startDate)) {
|
|
71
|
-
throw new Error('Start date must be in YYYY-MM-DD format');
|
|
72
|
-
}
|
|
73
|
-
if (data.endDate && !dateRegex.test(data.endDate)) {
|
|
74
|
-
throw new Error('End date must be in YYYY-MM-DD format');
|
|
75
|
-
}
|
|
76
|
-
return apiClient.patch(`/api/tax-residencies/${uuid}/`, data);
|
|
77
|
-
};
|
|
78
|
-
exports.updateTaxResidency = updateTaxResidency;
|
|
79
|
-
const deleteTaxResidency = async ({ apiClient }, uuid) => {
|
|
80
|
-
if (!uuid?.trim()) {
|
|
81
|
-
throw new Error('Tax residency UUID is required');
|
|
82
|
-
}
|
|
83
|
-
await apiClient.delete(`/api/tax-residencies/${uuid}/`);
|
|
84
|
-
};
|
|
85
|
-
exports.deleteTaxResidency = deleteTaxResidency;
|
|
86
|
-
const setPrimaryTaxResidency = async ({ apiClient }, uuid) => {
|
|
87
|
-
if (!uuid?.trim()) {
|
|
88
|
-
throw new Error('Tax residency UUID is required');
|
|
89
|
-
}
|
|
90
|
-
return apiClient.post(`/api/tax-residencies/${uuid}/set-primary/`, {});
|
|
91
|
-
};
|
|
92
|
-
exports.setPrimaryTaxResidency = setPrimaryTaxResidency;
|
|
93
|
-
// Helper functions
|
|
94
|
-
const getUserTaxResidencies = async ({ apiClient }, userProfileUuid) => {
|
|
95
|
-
if (!userProfileUuid?.trim()) {
|
|
96
|
-
throw new Error('User profile UUID is required');
|
|
97
|
-
}
|
|
98
|
-
return (0, exports.getTaxResidencies)({ apiClient }, {
|
|
99
|
-
userProfile: userProfileUuid,
|
|
100
|
-
ordering: '-is_primary,start_date',
|
|
101
|
-
});
|
|
102
|
-
};
|
|
103
|
-
exports.getUserTaxResidencies = getUserTaxResidencies;
|
|
104
|
-
const getActiveTaxResidencies = async ({ apiClient }, userProfileUuid) => {
|
|
105
|
-
return (0, exports.getTaxResidencies)({ apiClient }, {
|
|
106
|
-
userProfile: userProfileUuid,
|
|
107
|
-
isActive: true,
|
|
108
|
-
ordering: '-is_primary,country',
|
|
109
|
-
});
|
|
110
|
-
};
|
|
111
|
-
exports.getActiveTaxResidencies = getActiveTaxResidencies;
|
|
112
|
-
const getPrimaryTaxResidency = async ({ apiClient }, userProfileUuid) => {
|
|
113
|
-
if (!userProfileUuid?.trim()) {
|
|
114
|
-
throw new Error('User profile UUID is required');
|
|
115
|
-
}
|
|
116
|
-
const response = await (0, exports.getTaxResidencies)({ apiClient }, {
|
|
117
|
-
userProfile: userProfileUuid,
|
|
118
|
-
isPrimary: true,
|
|
119
|
-
isActive: true,
|
|
120
|
-
});
|
|
121
|
-
return response.results[0] || null;
|
|
122
|
-
};
|
|
123
|
-
exports.getPrimaryTaxResidency = getPrimaryTaxResidency;
|
|
124
|
-
const getTaxResidenciesByCountry = async ({ apiClient }, countryUuid, userProfileUuid) => {
|
|
125
|
-
if (!countryUuid?.trim()) {
|
|
126
|
-
throw new Error('Country UUID is required');
|
|
127
|
-
}
|
|
128
|
-
return (0, exports.getTaxResidencies)({ apiClient }, {
|
|
129
|
-
country: countryUuid,
|
|
130
|
-
userProfile: userProfileUuid,
|
|
131
|
-
ordering: '-is_primary,start_date',
|
|
132
|
-
});
|
|
133
|
-
};
|
|
134
|
-
exports.getTaxResidenciesByCountry = getTaxResidenciesByCountry;
|
|
135
|
-
// Utility functions
|
|
136
|
-
const isTaxResidencyActive = (taxResidency) => {
|
|
137
|
-
if (!taxResidency.endDate)
|
|
138
|
-
return true;
|
|
139
|
-
return new Date(taxResidency.endDate) >= new Date();
|
|
140
|
-
};
|
|
141
|
-
exports.isTaxResidencyActive = isTaxResidencyActive;
|
|
142
|
-
const formatTaxResidencyPeriod = (taxResidency) => {
|
|
143
|
-
const startDate = new Date(taxResidency.startDate).toLocaleDateString();
|
|
144
|
-
if (!taxResidency.endDate) {
|
|
145
|
-
return `Since ${startDate}`;
|
|
146
|
-
}
|
|
147
|
-
const endDate = new Date(taxResidency.endDate).toLocaleDateString();
|
|
148
|
-
return `${startDate} - ${endDate}`;
|
|
149
|
-
};
|
|
150
|
-
exports.formatTaxResidencyPeriod = formatTaxResidencyPeriod;
|
|
151
|
-
const validateTaxIdentificationNumber = (tin, countryCode) => {
|
|
152
|
-
// Basic validation - can be enhanced with country-specific rules
|
|
153
|
-
if (!tin?.trim())
|
|
154
|
-
return false;
|
|
155
|
-
// Remove spaces and special characters
|
|
156
|
-
const cleanTin = tin.replace(/[\s-]/g, '');
|
|
157
|
-
// Country-specific validation rules (examples)
|
|
158
|
-
switch (countryCode) {
|
|
159
|
-
case 'AU':
|
|
160
|
-
// Australian TFN: 8 or 9 digits
|
|
161
|
-
return /^\d{8,9}$/.test(cleanTin);
|
|
162
|
-
case 'US':
|
|
163
|
-
// US SSN: 9 digits (XXX-XX-XXXX format)
|
|
164
|
-
return /^\d{9}$/.test(cleanTin);
|
|
165
|
-
case 'GB':
|
|
166
|
-
// UK NI Number: 2 letters, 6 digits, 1 letter
|
|
167
|
-
return /^[A-Z]{2}\d{6}[A-Z]$/.test(cleanTin.toUpperCase());
|
|
168
|
-
default:
|
|
169
|
-
// Generic validation: at least 6 alphanumeric characters
|
|
170
|
-
return /^[A-Z0-9]{6,}$/i.test(cleanTin);
|
|
171
|
-
}
|
|
172
|
-
};
|
|
173
|
-
exports.validateTaxIdentificationNumber = validateTaxIdentificationNumber;
|
|
174
|
-
const canHaveMultipleResidencies = (countryCode) => {
|
|
175
|
-
// Some countries allow dual/multiple tax residencies
|
|
176
|
-
const multiResidencyCountries = ['AU', 'CA', 'NZ', 'GB', 'IE'];
|
|
177
|
-
return multiResidencyCountries.includes(countryCode);
|
|
178
|
-
};
|
|
179
|
-
exports.canHaveMultipleResidencies = canHaveMultipleResidencies;
|
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Trade Services - Pure Functional Implementation
|
|
3
|
-
*
|
|
4
|
-
* Complete trading system including Target Trades and Trade Sheets workflow.
|
|
5
|
-
* No global state, no side effects - everything is explicit and testable.
|
|
6
|
-
*/
|
|
7
|
-
import type { ApiClient } from '../api/functional-client';
|
|
8
|
-
export type TradeAction = 'BUY' | 'SELL';
|
|
9
|
-
export type TargetTradeStatus = 'PENDING' | 'APPROVED' | 'SUBMITTED' | 'CANCELLED' | 'EXPIRED';
|
|
10
|
-
export type TradeStatus = 'EXECUTED' | 'SETTLED' | 'CANCELLED' | 'FAILED';
|
|
11
|
-
export interface TargetTrade {
|
|
12
|
-
readonly uuid: string;
|
|
13
|
-
readonly targetTradesheet: string;
|
|
14
|
-
readonly instrument: string;
|
|
15
|
-
readonly instrumentSymbol: string;
|
|
16
|
-
readonly instrumentName: string;
|
|
17
|
-
readonly quantity: number;
|
|
18
|
-
readonly action: TradeAction;
|
|
19
|
-
readonly targetPrice: string;
|
|
20
|
-
readonly status: TargetTradeStatus;
|
|
21
|
-
readonly expiresAt: string | null;
|
|
22
|
-
readonly createdAt: string;
|
|
23
|
-
readonly updatedAt: string;
|
|
24
|
-
}
|
|
25
|
-
export interface TargetTradeSheet {
|
|
26
|
-
readonly uuid: string;
|
|
27
|
-
readonly portfolio: string;
|
|
28
|
-
readonly status: string;
|
|
29
|
-
readonly submittedAt: string | null;
|
|
30
|
-
readonly createdAt: string;
|
|
31
|
-
readonly updatedAt: string;
|
|
32
|
-
}
|
|
33
|
-
export interface TradeSheet {
|
|
34
|
-
readonly uuid: string;
|
|
35
|
-
readonly portfolio: string;
|
|
36
|
-
readonly target_sheet: string;
|
|
37
|
-
readonly created_at: string;
|
|
38
|
-
readonly updated_at: string;
|
|
39
|
-
}
|
|
40
|
-
export interface Trade {
|
|
41
|
-
readonly uuid: string;
|
|
42
|
-
readonly tradesheet: string;
|
|
43
|
-
readonly targetTrade: string | null;
|
|
44
|
-
readonly instrument: string;
|
|
45
|
-
readonly instrumentSymbol: string;
|
|
46
|
-
readonly instrumentName: string;
|
|
47
|
-
readonly quantity: number;
|
|
48
|
-
readonly action: TradeAction;
|
|
49
|
-
readonly executedPrice: string;
|
|
50
|
-
readonly executedDate: string;
|
|
51
|
-
readonly status: TradeStatus;
|
|
52
|
-
readonly settlementDate: string | null;
|
|
53
|
-
readonly currency: string | null;
|
|
54
|
-
readonly createdAt: string;
|
|
55
|
-
readonly updatedAt: string;
|
|
56
|
-
}
|
|
57
|
-
export interface TargetTradePayload {
|
|
58
|
-
readonly targetTradesheet: string;
|
|
59
|
-
readonly instrument: string;
|
|
60
|
-
readonly quantity: number;
|
|
61
|
-
readonly action: TradeAction;
|
|
62
|
-
readonly targetPrice: string | number;
|
|
63
|
-
}
|
|
64
|
-
export interface TargetTradeSheetPayload {
|
|
65
|
-
readonly portfolio: string;
|
|
66
|
-
}
|
|
67
|
-
export interface TargetTradeFilters {
|
|
68
|
-
readonly portfolio?: string;
|
|
69
|
-
readonly instrument?: string;
|
|
70
|
-
readonly action?: TradeAction;
|
|
71
|
-
readonly status?: TargetTradeStatus;
|
|
72
|
-
readonly start_date?: string;
|
|
73
|
-
readonly end_date?: string;
|
|
74
|
-
readonly min_price?: number;
|
|
75
|
-
readonly max_price?: number;
|
|
76
|
-
}
|
|
77
|
-
export interface TargetTradeSheetFilters {
|
|
78
|
-
readonly portfolio?: string;
|
|
79
|
-
readonly startDate?: string;
|
|
80
|
-
readonly endDate?: string;
|
|
81
|
-
}
|
|
82
|
-
export interface TradeFilters {
|
|
83
|
-
readonly portfolio?: string;
|
|
84
|
-
readonly instrument?: string;
|
|
85
|
-
readonly action?: TradeAction;
|
|
86
|
-
readonly status?: TradeStatus;
|
|
87
|
-
readonly currency?: string;
|
|
88
|
-
readonly start_date?: string;
|
|
89
|
-
readonly end_date?: string;
|
|
90
|
-
readonly settlement_start_date?: string;
|
|
91
|
-
readonly settlement_end_date?: string;
|
|
92
|
-
readonly min_price?: number;
|
|
93
|
-
readonly max_price?: number;
|
|
94
|
-
readonly tradesheet?: string;
|
|
95
|
-
readonly target_trade?: string;
|
|
96
|
-
}
|
|
97
|
-
export interface TradeSheetFilters {
|
|
98
|
-
readonly portfolio?: string;
|
|
99
|
-
readonly start_date?: string;
|
|
100
|
-
readonly end_date?: string;
|
|
101
|
-
}
|
|
102
|
-
export interface TargetTradeSheetApprovalResponse {
|
|
103
|
-
readonly uuid: string;
|
|
104
|
-
readonly status: string;
|
|
105
|
-
readonly approvedAt: string;
|
|
106
|
-
readonly approvedTradesCount: number;
|
|
107
|
-
readonly message?: string;
|
|
108
|
-
}
|
|
109
|
-
export interface TargetTradeSheetCleanResponse {
|
|
110
|
-
readonly uuid: string;
|
|
111
|
-
readonly status: string;
|
|
112
|
-
readonly deletedTradesCount: number;
|
|
113
|
-
readonly message?: string;
|
|
114
|
-
}
|
|
115
|
-
export interface PaginatedTargetTrades {
|
|
116
|
-
readonly results: TargetTrade[];
|
|
117
|
-
readonly count: number;
|
|
118
|
-
readonly next: string | null;
|
|
119
|
-
readonly previous: string | null;
|
|
120
|
-
}
|
|
121
|
-
export interface PaginatedTargetTradeSheets {
|
|
122
|
-
readonly results: TargetTradeSheet[];
|
|
123
|
-
readonly count: number;
|
|
124
|
-
readonly next: string | null;
|
|
125
|
-
readonly previous: string | null;
|
|
126
|
-
}
|
|
127
|
-
export interface PaginatedTrades {
|
|
128
|
-
readonly results: Trade[];
|
|
129
|
-
readonly count: number;
|
|
130
|
-
readonly next: string | null;
|
|
131
|
-
readonly previous: string | null;
|
|
132
|
-
}
|
|
133
|
-
export interface PaginatedTradeSheets {
|
|
134
|
-
readonly results: TradeSheet[];
|
|
135
|
-
readonly count: number;
|
|
136
|
-
readonly next: string | null;
|
|
137
|
-
readonly previous: string | null;
|
|
138
|
-
}
|
|
139
|
-
export declare const getTargetTrades: ({ apiClient }: {
|
|
140
|
-
apiClient: ApiClient;
|
|
141
|
-
}, filters?: TargetTradeFilters) => Promise<PaginatedTargetTrades>;
|
|
142
|
-
export declare const getTargetTrade: ({ apiClient }: {
|
|
143
|
-
apiClient: ApiClient;
|
|
144
|
-
}, uuid: string) => Promise<TargetTrade>;
|
|
145
|
-
export declare const createTargetTrade: ({ apiClient }: {
|
|
146
|
-
apiClient: ApiClient;
|
|
147
|
-
}, data: TargetTradePayload) => Promise<TargetTrade>;
|
|
148
|
-
export declare const updateTargetTrade: ({ apiClient }: {
|
|
149
|
-
apiClient: ApiClient;
|
|
150
|
-
}, uuid: string, data: Partial<TargetTradePayload>) => Promise<TargetTrade>;
|
|
151
|
-
export declare const deleteTargetTrade: ({ apiClient }: {
|
|
152
|
-
apiClient: ApiClient;
|
|
153
|
-
}, uuid: string) => Promise<void>;
|
|
154
|
-
export declare const getTargetTradeSheets: ({ apiClient }: {
|
|
155
|
-
apiClient: ApiClient;
|
|
156
|
-
}, filters?: TargetTradeSheetFilters) => Promise<PaginatedTargetTradeSheets>;
|
|
157
|
-
export declare const getTargetTradeSheet: ({ apiClient }: {
|
|
158
|
-
apiClient: ApiClient;
|
|
159
|
-
}, uuid: string) => Promise<TargetTradeSheet>;
|
|
160
|
-
export declare const createTargetTradeSheet: ({ apiClient }: {
|
|
161
|
-
apiClient: ApiClient;
|
|
162
|
-
}, data: TargetTradeSheetPayload) => Promise<TargetTradeSheet>;
|
|
163
|
-
export declare const updateTargetTradeSheet: ({ apiClient }: {
|
|
164
|
-
apiClient: ApiClient;
|
|
165
|
-
}, uuid: string, data: Partial<TargetTradeSheetPayload>) => Promise<TargetTradeSheet>;
|
|
166
|
-
export declare const deleteTargetTradeSheet: ({ apiClient }: {
|
|
167
|
-
apiClient: ApiClient;
|
|
168
|
-
}, uuid: string) => Promise<void>;
|
|
169
|
-
export declare const approveTargetTradeSheet: ({ apiClient }: {
|
|
170
|
-
apiClient: ApiClient;
|
|
171
|
-
}, uuid: string) => Promise<TargetTradeSheetApprovalResponse>;
|
|
172
|
-
export declare const cleanTargetTradeSheet: ({ apiClient }: {
|
|
173
|
-
apiClient: ApiClient;
|
|
174
|
-
}, uuid: string) => Promise<TargetTradeSheetCleanResponse>;
|
|
175
|
-
export declare const getOrCreateDraftTargetTradeSheet: ({ apiClient }: {
|
|
176
|
-
apiClient: ApiClient;
|
|
177
|
-
}, portfolioUuid: string) => Promise<string>;
|
|
178
|
-
export declare const getTrades: ({ apiClient }: {
|
|
179
|
-
apiClient: ApiClient;
|
|
180
|
-
}, filters?: TradeFilters) => Promise<PaginatedTrades>;
|
|
181
|
-
export declare const getTrade: ({ apiClient }: {
|
|
182
|
-
apiClient: ApiClient;
|
|
183
|
-
}, uuid: string) => Promise<Trade>;
|
|
184
|
-
export declare const getTradeSheets: ({ apiClient }: {
|
|
185
|
-
apiClient: ApiClient;
|
|
186
|
-
}, filters?: TradeSheetFilters) => Promise<PaginatedTradeSheets>;
|
|
187
|
-
export declare const getTradeSheet: ({ apiClient }: {
|
|
188
|
-
apiClient: ApiClient;
|
|
189
|
-
}, uuid: string) => Promise<TradeSheet>;
|
|
190
|
-
//# sourceMappingURL=trades.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trades.d.ts","sourceRoot":"","sources":["../../src/services/trades.ts"],"names":[],"mappings":"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"}
|
package/dist/services/trades.js
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Trade Services - Pure Functional Implementation
|
|
4
|
-
*
|
|
5
|
-
* Complete trading system including Target Trades and Trade Sheets workflow.
|
|
6
|
-
* No global state, no side effects - everything is explicit and testable.
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.getTradeSheet = exports.getTradeSheets = exports.getTrade = exports.getTrades = exports.getOrCreateDraftTargetTradeSheet = exports.cleanTargetTradeSheet = exports.approveTargetTradeSheet = exports.deleteTargetTradeSheet = exports.updateTargetTradeSheet = exports.createTargetTradeSheet = exports.getTargetTradeSheet = exports.getTargetTradeSheets = exports.deleteTargetTrade = exports.updateTargetTrade = exports.createTargetTrade = exports.getTargetTrade = exports.getTargetTrades = void 0;
|
|
10
|
-
// =============================================================================
|
|
11
|
-
// TARGET TRADES OPERATIONS
|
|
12
|
-
// =============================================================================
|
|
13
|
-
const getTargetTrades = async ({ apiClient }, filters) => {
|
|
14
|
-
const params = {};
|
|
15
|
-
if (filters?.portfolio)
|
|
16
|
-
params.portfolio = filters.portfolio;
|
|
17
|
-
if (filters?.instrument)
|
|
18
|
-
params.instrument = filters.instrument;
|
|
19
|
-
if (filters?.action)
|
|
20
|
-
params.action = filters.action;
|
|
21
|
-
if (filters?.status)
|
|
22
|
-
params.status = filters.status;
|
|
23
|
-
if (filters?.start_date)
|
|
24
|
-
params.start_date = filters.start_date;
|
|
25
|
-
if (filters?.end_date)
|
|
26
|
-
params.end_date = filters.end_date;
|
|
27
|
-
if (filters?.min_price !== undefined)
|
|
28
|
-
params.min_price = String(filters.min_price);
|
|
29
|
-
if (filters?.max_price !== undefined)
|
|
30
|
-
params.max_price = String(filters.max_price);
|
|
31
|
-
return apiClient.get('/api/target-trades/', { params });
|
|
32
|
-
};
|
|
33
|
-
exports.getTargetTrades = getTargetTrades;
|
|
34
|
-
const getTargetTrade = async ({ apiClient }, uuid) => {
|
|
35
|
-
if (!uuid?.trim()) {
|
|
36
|
-
throw new Error('Target trade UUID is required');
|
|
37
|
-
}
|
|
38
|
-
return apiClient.get(`/api/target-trades/${uuid}/`);
|
|
39
|
-
};
|
|
40
|
-
exports.getTargetTrade = getTargetTrade;
|
|
41
|
-
const createTargetTrade = async ({ apiClient }, data) => {
|
|
42
|
-
if (!data.targetTradesheet?.trim()) {
|
|
43
|
-
throw new Error('Target trade sheet UUID is required');
|
|
44
|
-
}
|
|
45
|
-
if (!data.instrument?.trim()) {
|
|
46
|
-
throw new Error('Instrument UUID is required');
|
|
47
|
-
}
|
|
48
|
-
if (!data.quantity || data.quantity <= 0) {
|
|
49
|
-
throw new Error('Valid quantity is required');
|
|
50
|
-
}
|
|
51
|
-
const payload = {
|
|
52
|
-
...data,
|
|
53
|
-
targetPrice: String(data.targetPrice),
|
|
54
|
-
};
|
|
55
|
-
return apiClient.post('/api/target-trades/', payload);
|
|
56
|
-
};
|
|
57
|
-
exports.createTargetTrade = createTargetTrade;
|
|
58
|
-
const updateTargetTrade = async ({ apiClient }, uuid, data) => {
|
|
59
|
-
if (!uuid?.trim()) {
|
|
60
|
-
throw new Error('Target trade UUID is required');
|
|
61
|
-
}
|
|
62
|
-
const payload = data.targetPrice !== undefined
|
|
63
|
-
? { ...data, targetPrice: String(data.targetPrice) }
|
|
64
|
-
: data;
|
|
65
|
-
return apiClient.patch(`/api/target-trades/${uuid}/`, payload);
|
|
66
|
-
};
|
|
67
|
-
exports.updateTargetTrade = updateTargetTrade;
|
|
68
|
-
const deleteTargetTrade = async ({ apiClient }, uuid) => {
|
|
69
|
-
if (!uuid?.trim()) {
|
|
70
|
-
throw new Error('Target trade UUID is required');
|
|
71
|
-
}
|
|
72
|
-
await apiClient.delete(`/api/target-trades/${uuid}/`);
|
|
73
|
-
};
|
|
74
|
-
exports.deleteTargetTrade = deleteTargetTrade;
|
|
75
|
-
// =============================================================================
|
|
76
|
-
// TARGET TRADE SHEETS OPERATIONS
|
|
77
|
-
// =============================================================================
|
|
78
|
-
const getTargetTradeSheets = async ({ apiClient }, filters) => {
|
|
79
|
-
const params = {};
|
|
80
|
-
if (filters?.portfolio)
|
|
81
|
-
params.portfolio = filters.portfolio;
|
|
82
|
-
if (filters?.startDate)
|
|
83
|
-
params.start_date = filters.startDate;
|
|
84
|
-
if (filters?.endDate)
|
|
85
|
-
params.end_date = filters.endDate;
|
|
86
|
-
return apiClient.get('/api/target-trade-sheets/', { params });
|
|
87
|
-
};
|
|
88
|
-
exports.getTargetTradeSheets = getTargetTradeSheets;
|
|
89
|
-
const getTargetTradeSheet = async ({ apiClient }, uuid) => {
|
|
90
|
-
if (!uuid?.trim()) {
|
|
91
|
-
throw new Error('Target trade sheet UUID is required');
|
|
92
|
-
}
|
|
93
|
-
return apiClient.get(`/api/target-trade-sheets/${uuid}/`);
|
|
94
|
-
};
|
|
95
|
-
exports.getTargetTradeSheet = getTargetTradeSheet;
|
|
96
|
-
const createTargetTradeSheet = async ({ apiClient }, data) => {
|
|
97
|
-
if (!data.portfolio?.trim()) {
|
|
98
|
-
throw new Error('Portfolio UUID is required');
|
|
99
|
-
}
|
|
100
|
-
return apiClient.post('/api/target-trade-sheets/', data);
|
|
101
|
-
};
|
|
102
|
-
exports.createTargetTradeSheet = createTargetTradeSheet;
|
|
103
|
-
const updateTargetTradeSheet = async ({ apiClient }, uuid, data) => {
|
|
104
|
-
if (!uuid?.trim()) {
|
|
105
|
-
throw new Error('Target trade sheet UUID is required');
|
|
106
|
-
}
|
|
107
|
-
return apiClient.patch(`/api/target-trade-sheets/${uuid}/`, data);
|
|
108
|
-
};
|
|
109
|
-
exports.updateTargetTradeSheet = updateTargetTradeSheet;
|
|
110
|
-
const deleteTargetTradeSheet = async ({ apiClient }, uuid) => {
|
|
111
|
-
if (!uuid?.trim()) {
|
|
112
|
-
throw new Error('Target trade sheet UUID is required');
|
|
113
|
-
}
|
|
114
|
-
await apiClient.delete(`/api/target-trade-sheets/${uuid}/`);
|
|
115
|
-
};
|
|
116
|
-
exports.deleteTargetTradeSheet = deleteTargetTradeSheet;
|
|
117
|
-
const approveTargetTradeSheet = async ({ apiClient }, uuid) => {
|
|
118
|
-
if (!uuid?.trim()) {
|
|
119
|
-
throw new Error('Target trade sheet UUID is required');
|
|
120
|
-
}
|
|
121
|
-
return apiClient.post(`/api/target-trade-sheets/${uuid}/approve/`, {});
|
|
122
|
-
};
|
|
123
|
-
exports.approveTargetTradeSheet = approveTargetTradeSheet;
|
|
124
|
-
const cleanTargetTradeSheet = async ({ apiClient }, uuid) => {
|
|
125
|
-
if (!uuid?.trim()) {
|
|
126
|
-
throw new Error('Target trade sheet UUID is required');
|
|
127
|
-
}
|
|
128
|
-
return apiClient.post(`/api/target-trade-sheets/${uuid}/clean/`, {});
|
|
129
|
-
};
|
|
130
|
-
exports.cleanTargetTradeSheet = cleanTargetTradeSheet;
|
|
131
|
-
const getOrCreateDraftTargetTradeSheet = async ({ apiClient }, portfolioUuid) => {
|
|
132
|
-
if (!portfolioUuid?.trim()) {
|
|
133
|
-
throw new Error('Portfolio UUID is required');
|
|
134
|
-
}
|
|
135
|
-
// Check if there's already a draft target trade sheet
|
|
136
|
-
const response = await (0, exports.getTargetTradeSheets)({ apiClient }, { portfolio: portfolioUuid });
|
|
137
|
-
const draftSheet = response.results.find(sheet => sheet.status === 'DRAFT');
|
|
138
|
-
if (draftSheet) {
|
|
139
|
-
return draftSheet.uuid;
|
|
140
|
-
}
|
|
141
|
-
// Create new draft target trade sheet
|
|
142
|
-
const newSheet = await (0, exports.createTargetTradeSheet)({ apiClient }, { portfolio: portfolioUuid });
|
|
143
|
-
return newSheet.uuid;
|
|
144
|
-
};
|
|
145
|
-
exports.getOrCreateDraftTargetTradeSheet = getOrCreateDraftTargetTradeSheet;
|
|
146
|
-
// =============================================================================
|
|
147
|
-
// TRADES OPERATIONS (READ-ONLY)
|
|
148
|
-
// =============================================================================
|
|
149
|
-
const getTrades = async ({ apiClient }, filters) => {
|
|
150
|
-
const params = {};
|
|
151
|
-
if (filters?.portfolio)
|
|
152
|
-
params.portfolio = filters.portfolio;
|
|
153
|
-
if (filters?.instrument)
|
|
154
|
-
params.instrument = filters.instrument;
|
|
155
|
-
if (filters?.action)
|
|
156
|
-
params.action = filters.action;
|
|
157
|
-
if (filters?.status)
|
|
158
|
-
params.status = filters.status;
|
|
159
|
-
if (filters?.currency)
|
|
160
|
-
params.currency = filters.currency;
|
|
161
|
-
if (filters?.start_date)
|
|
162
|
-
params.start_date = filters.start_date;
|
|
163
|
-
if (filters?.end_date)
|
|
164
|
-
params.end_date = filters.end_date;
|
|
165
|
-
if (filters?.settlement_start_date)
|
|
166
|
-
params.settlement_start_date = filters.settlement_start_date;
|
|
167
|
-
if (filters?.settlement_end_date)
|
|
168
|
-
params.settlement_end_date = filters.settlement_end_date;
|
|
169
|
-
if (filters?.min_price !== undefined)
|
|
170
|
-
params.min_price = String(filters.min_price);
|
|
171
|
-
if (filters?.max_price !== undefined)
|
|
172
|
-
params.max_price = String(filters.max_price);
|
|
173
|
-
if (filters?.tradesheet)
|
|
174
|
-
params.tradesheet = filters.tradesheet;
|
|
175
|
-
if (filters?.target_trade)
|
|
176
|
-
params.target_trade = filters.target_trade;
|
|
177
|
-
return apiClient.get('/api/trades/', { params });
|
|
178
|
-
};
|
|
179
|
-
exports.getTrades = getTrades;
|
|
180
|
-
const getTrade = async ({ apiClient }, uuid) => {
|
|
181
|
-
if (!uuid?.trim()) {
|
|
182
|
-
throw new Error('Trade UUID is required');
|
|
183
|
-
}
|
|
184
|
-
return apiClient.get(`/api/trades/${uuid}/`);
|
|
185
|
-
};
|
|
186
|
-
exports.getTrade = getTrade;
|
|
187
|
-
// =============================================================================
|
|
188
|
-
// TRADE SHEETS OPERATIONS (READ-ONLY)
|
|
189
|
-
// =============================================================================
|
|
190
|
-
const getTradeSheets = async ({ apiClient }, filters) => {
|
|
191
|
-
const params = {};
|
|
192
|
-
if (filters?.portfolio)
|
|
193
|
-
params.portfolio = filters.portfolio;
|
|
194
|
-
if (filters?.start_date)
|
|
195
|
-
params.start_date = filters.start_date;
|
|
196
|
-
if (filters?.end_date)
|
|
197
|
-
params.end_date = filters.end_date;
|
|
198
|
-
return apiClient.get('/api/trade-sheets/', { params });
|
|
199
|
-
};
|
|
200
|
-
exports.getTradeSheets = getTradeSheets;
|
|
201
|
-
const getTradeSheet = async ({ apiClient }, uuid) => {
|
|
202
|
-
if (!uuid?.trim()) {
|
|
203
|
-
throw new Error('Trade sheet UUID is required');
|
|
204
|
-
}
|
|
205
|
-
return apiClient.get(`/api/trade-sheets/${uuid}/`);
|
|
206
|
-
};
|
|
207
|
-
exports.getTradeSheet = getTradeSheet;
|