@zeniai/client-epic-state 5.2.0 → 5.2.1
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/lib/entity/accountRecon/accountReconReducer.js +4 -0
- package/lib/entity/accountRecon/accountReconState.d.ts +4 -1
- package/lib/entity/accountRecon/accountReconState.js +1 -0
- package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
- package/lib/entity/snackbar/snackbarTypes.js +1 -0
- package/lib/epic.d.ts +4 -1
- package/lib/epic.js +4 -1
- package/lib/esm/entity/accountRecon/accountReconReducer.js +4 -0
- package/lib/esm/entity/accountRecon/accountReconState.js +1 -0
- package/lib/esm/entity/snackbar/snackbarTypes.js +1 -0
- package/lib/esm/epic.js +4 -1
- package/lib/esm/index.js +3 -3
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/confirmStatementMappingEpic.js +43 -0
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/deleteAccountStatementEpic.js +1 -2
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/parseCombinedStatementEpic.js +31 -0
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/parseStatementEpic.js +15 -18
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/updateCombinedStatementInfoEpic.js +68 -0
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/updateStatementInfoEpic.js +10 -10
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/uploadAccountStatementDocumentAIHelper.js +12 -4
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/uploadAccountStatementEpic.js +8 -2
- package/lib/esm/view/expenseAutomationView/helpers/mapStatementUpdateLocalDataToRequestBody.js +20 -5
- package/lib/esm/view/expenseAutomationView/payload/reconciliationPayload.js +135 -0
- package/lib/esm/view/expenseAutomationView/reducers/reconciliationViewReducer.js +120 -16
- package/lib/esm/view/expenseAutomationView/selectors/reconciliationViewSelector.js +38 -7
- package/lib/esm/view/expenseAutomationView/selectors/statementParseViewSelector.js +43 -10
- package/lib/esm/view/expenseAutomationView/types/reconciliationViewState.js +15 -1
- package/lib/index.d.ts +4 -4
- package/lib/index.js +51 -46
- package/lib/view/expenseAutomationView/epics/accountRecon/confirmStatementMappingEpic.d.ts +34 -0
- package/lib/view/expenseAutomationView/epics/accountRecon/confirmStatementMappingEpic.js +47 -0
- package/lib/view/expenseAutomationView/epics/accountRecon/deleteAccountStatementEpic.d.ts +2 -2
- package/lib/view/expenseAutomationView/epics/accountRecon/deleteAccountStatementEpic.js +0 -1
- package/lib/view/expenseAutomationView/epics/accountRecon/parseCombinedStatementEpic.d.ts +26 -0
- package/lib/view/expenseAutomationView/epics/accountRecon/parseCombinedStatementEpic.js +35 -0
- package/lib/view/expenseAutomationView/epics/accountRecon/parseStatementEpic.d.ts +21 -1
- package/lib/view/expenseAutomationView/epics/accountRecon/parseStatementEpic.js +15 -18
- package/lib/view/expenseAutomationView/epics/accountRecon/updateCombinedStatementInfoEpic.d.ts +27 -0
- package/lib/view/expenseAutomationView/epics/accountRecon/updateCombinedStatementInfoEpic.js +72 -0
- package/lib/view/expenseAutomationView/epics/accountRecon/updateStatementInfoEpic.js +10 -10
- package/lib/view/expenseAutomationView/epics/accountRecon/uploadAccountStatementDocumentAIHelper.d.ts +1 -1
- package/lib/view/expenseAutomationView/epics/accountRecon/uploadAccountStatementDocumentAIHelper.js +12 -4
- package/lib/view/expenseAutomationView/epics/accountRecon/uploadAccountStatementEpic.js +7 -1
- package/lib/view/expenseAutomationView/helpers/mapStatementUpdateLocalDataToRequestBody.d.ts +1 -0
- package/lib/view/expenseAutomationView/helpers/mapStatementUpdateLocalDataToRequestBody.js +20 -4
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/lib/view/expenseAutomationView/payload/reconciliationPayload.d.ts +109 -4
- package/lib/view/expenseAutomationView/payload/reconciliationPayload.js +143 -0
- package/lib/view/expenseAutomationView/reducers/reconciliationViewReducer.d.ts +32 -4
- package/lib/view/expenseAutomationView/reducers/reconciliationViewReducer.js +122 -18
- package/lib/view/expenseAutomationView/selectorTypes/reconciliationViewSelectorTypes.d.ts +5 -1
- package/lib/view/expenseAutomationView/selectors/reconciliationViewSelector.d.ts +4 -1
- package/lib/view/expenseAutomationView/selectors/reconciliationViewSelector.js +40 -7
- package/lib/view/expenseAutomationView/selectors/statementParseViewSelector.d.ts +3 -2
- package/lib/view/expenseAutomationView/selectors/statementParseViewSelector.js +44 -10
- package/lib/view/expenseAutomationView/types/reconciliationViewState.d.ts +74 -1
- package/lib/view/expenseAutomationView/types/reconciliationViewState.js +19 -1
- package/package.json +1 -1
|
@@ -9,7 +9,7 @@ import { MatchedTransactionPayload } from '../../../entity/transaction/payloadTy
|
|
|
9
9
|
import { UserPayload } from '../../../entity/user/userPayload';
|
|
10
10
|
import { RootState } from '../../../reducer';
|
|
11
11
|
import { ZeniAPIResponse, ZeniAPIStatus } from '../../../responsePayload';
|
|
12
|
-
import { BalancesLocalData, ParsedStatementData, SaveReconcileDetailActionPayload, StatementDateConflict, StatementUpdateLocalData, StatementUpdateLocalDataPayload } from '../types/reconciliationViewState';
|
|
12
|
+
import { BalancesLocalData, ConfirmStatementMappingConflict, ConfirmedCombinedStatementUpload, ParsedStatementData, SaveReconcileDetailActionPayload, StatementDateConflict, StatementUpdateLocalData, StatementUpdateLocalDataPayload } from '../types/reconciliationViewState';
|
|
13
13
|
export interface DetectionInfoPayload {
|
|
14
14
|
account_id: string;
|
|
15
15
|
bank_balance: number | null;
|
|
@@ -119,6 +119,9 @@ export interface StatementUploadSummaryPayload {
|
|
|
119
119
|
statement_start_date: string;
|
|
120
120
|
statement_status: StatusCodeWithLabelPayload;
|
|
121
121
|
statement_upload_id: string;
|
|
122
|
+
combined_statement_group_id?: string | null;
|
|
123
|
+
is_combined_statement?: boolean | null;
|
|
124
|
+
is_combined_statement_anchor?: boolean | null;
|
|
122
125
|
}
|
|
123
126
|
export interface UploadStatementResponsePayload {
|
|
124
127
|
file: FilePayload;
|
|
@@ -162,6 +165,10 @@ export interface StatementMetaPayload {
|
|
|
162
165
|
statement_upload_id: string;
|
|
163
166
|
total_deposits: number;
|
|
164
167
|
total_payments: number;
|
|
168
|
+
balance_source?: string | null;
|
|
169
|
+
combined_statement_group_id?: string | null;
|
|
170
|
+
is_combined_statement?: boolean | null;
|
|
171
|
+
is_combined_statement_anchor?: boolean | null;
|
|
165
172
|
}
|
|
166
173
|
export interface AccountInfoPayload {
|
|
167
174
|
account_id: string;
|
|
@@ -199,17 +206,85 @@ export interface AiSummaryPayload {
|
|
|
199
206
|
fields_captured: AiSummaryFieldPayload[];
|
|
200
207
|
transactions_extracted: number;
|
|
201
208
|
}
|
|
209
|
+
export interface CombinedStatementAccountSuggestionPayload {
|
|
210
|
+
account_id: string;
|
|
211
|
+
account_name: string;
|
|
212
|
+
match_confidence: number;
|
|
213
|
+
matched_by: string;
|
|
214
|
+
}
|
|
215
|
+
export interface CombinedStatementAccountPayload {
|
|
216
|
+
account_name: string;
|
|
217
|
+
account_type: string;
|
|
218
|
+
closing_balance: number;
|
|
219
|
+
is_upload_context: boolean;
|
|
220
|
+
ledger_identifier: string;
|
|
221
|
+
masked_account_number: string;
|
|
222
|
+
opening_balance: number;
|
|
223
|
+
transaction_count: number;
|
|
224
|
+
existing_statement_status?: StatusCodeWithLabelPayload | null;
|
|
225
|
+
suggestion?: CombinedStatementAccountSuggestionPayload | null;
|
|
226
|
+
}
|
|
227
|
+
export interface ConfirmedCombinedStatementUploadPayload {
|
|
228
|
+
account_id: string;
|
|
229
|
+
is_combined_statement_anchor: boolean;
|
|
230
|
+
ledger_identifiers: string[];
|
|
231
|
+
statement_upload_id: string;
|
|
232
|
+
}
|
|
233
|
+
export interface CombinedStatementDetailsPayload {
|
|
234
|
+
accounts: CombinedStatementAccountPayload[];
|
|
235
|
+
combined_statement_group_id: string;
|
|
236
|
+
is_mapping_confirmed: boolean;
|
|
237
|
+
statement_uploads: ConfirmedCombinedStatementUploadPayload[];
|
|
238
|
+
}
|
|
202
239
|
export interface StatementUploadPayload {
|
|
203
240
|
account: AccountInfoPayload;
|
|
204
241
|
file: FileInfoPayload | null;
|
|
205
242
|
statement_meta: StatementMetaPayload;
|
|
206
243
|
statement_transactions: StatementTransactionPayload[];
|
|
207
244
|
ai_summary?: AiSummaryPayload | null;
|
|
245
|
+
combined_statement_details?: CombinedStatementDetailsPayload | null;
|
|
208
246
|
}
|
|
209
|
-
|
|
210
|
-
|
|
247
|
+
/** Single-account parse GET — unchanged. */
|
|
248
|
+
export interface ParseStatementSingleResponsePayload {
|
|
249
|
+
reconciliation: ReconciliationMetaPayload | null;
|
|
250
|
+
statement_upload: StatementUploadPayload;
|
|
251
|
+
}
|
|
252
|
+
/** Combined multi-account parse GET (after mapping confirm). */
|
|
253
|
+
export interface ParseStatementCombinedResponsePayload {
|
|
254
|
+
reconciliation: ReconciliationMetaPayload | null;
|
|
255
|
+
statement_uploads: StatementUploadPayload[];
|
|
256
|
+
}
|
|
257
|
+
export type ParseStatementResponsePayload = ParseStatementSingleResponsePayload | ParseStatementCombinedResponsePayload;
|
|
258
|
+
export declare function isParseStatementCombinedResponsePayload(payload: ParseStatementResponsePayload): payload is ParseStatementCombinedResponsePayload;
|
|
259
|
+
/** Batch GET …/combined-statement-groups/<id> — one entry per mapped account. */
|
|
260
|
+
export interface CombinedStatementGroupUploadEntryPayload {
|
|
261
|
+
reconciliation: ReconciliationMetaPayload | null;
|
|
211
262
|
statement_upload: StatementUploadPayload;
|
|
212
263
|
}
|
|
264
|
+
export interface CombinedStatementGroupResponsePayload {
|
|
265
|
+
combined_statement_group_id: string;
|
|
266
|
+
statement_uploads: CombinedStatementGroupUploadEntryPayload[];
|
|
267
|
+
}
|
|
268
|
+
export type CombinedStatementGroupResponse = ZeniAPIResponse<CombinedStatementGroupResponsePayload>;
|
|
269
|
+
export interface ConfirmStatementMappingRequestPayload {
|
|
270
|
+
account_mappings: Array<{
|
|
271
|
+
account_id: string;
|
|
272
|
+
ledger_identifier: string;
|
|
273
|
+
}>;
|
|
274
|
+
}
|
|
275
|
+
export interface ConfirmStatementMappingResponsePayload {
|
|
276
|
+
statement_uploads: ConfirmedCombinedStatementUploadPayload[];
|
|
277
|
+
}
|
|
278
|
+
export type ConfirmStatementMappingSuccessResponse = ZeniAPIResponse<ConfirmStatementMappingResponsePayload>;
|
|
279
|
+
export interface ConfirmStatementMappingConflictResponse extends ZeniAPIResponse<ConfirmStatementMappingResponsePayload | undefined> {
|
|
280
|
+
status: ZeniAPIStatus & {
|
|
281
|
+
code: 409;
|
|
282
|
+
};
|
|
283
|
+
colliding_account_id?: string | null;
|
|
284
|
+
colliding_ledger_identifiers?: string[] | null;
|
|
285
|
+
previous_reconciliation_info?: PreviousReconciliationInfoPayload | null;
|
|
286
|
+
}
|
|
287
|
+
export type ConfirmStatementMappingResponse = ConfirmStatementMappingSuccessResponse | ConfirmStatementMappingConflictResponse;
|
|
213
288
|
export interface ReparseStatementResponsePayload {
|
|
214
289
|
statement_upload: StatementUploadSummaryPayload;
|
|
215
290
|
}
|
|
@@ -232,11 +307,28 @@ export interface StatementDateAdjustmentPayload {
|
|
|
232
307
|
previous_reconciliation_info: PreviousReconciliationInfoPayload;
|
|
233
308
|
reason: string;
|
|
234
309
|
}
|
|
235
|
-
|
|
310
|
+
/** Single-account Confirm & Save response — unchanged. */
|
|
311
|
+
export interface UpdateStatementInfoSingleResponsePayload {
|
|
236
312
|
reconciliation: ReconciliationMetaPayload;
|
|
237
313
|
statement_upload: StatementUploadPayload;
|
|
238
314
|
date_adjustment?: StatementDateAdjustmentPayload | null;
|
|
239
315
|
}
|
|
316
|
+
/** Combined multi-account bulk Confirm & Save response. */
|
|
317
|
+
export interface UpdateStatementInfoCombinedResponsePayload {
|
|
318
|
+
reconciliation: ReconciliationMetaPayload;
|
|
319
|
+
statement_uploads: StatementUploadPayload[];
|
|
320
|
+
date_adjustment?: StatementDateAdjustmentPayload | null;
|
|
321
|
+
}
|
|
322
|
+
export type UpdateStatementInfoResponsePayload = UpdateStatementInfoSingleResponsePayload | UpdateStatementInfoCombinedResponsePayload;
|
|
323
|
+
export declare function isUpdateStatementInfoCombinedResponsePayload(payload: UpdateStatementInfoResponsePayload): payload is UpdateStatementInfoCombinedResponsePayload;
|
|
324
|
+
export interface BulkStatementUpdateUploadPayload {
|
|
325
|
+
statement_meta: StatementUpdateLocalDataPayload['statement_meta'];
|
|
326
|
+
statement_transactions: StatementUpdateLocalDataPayload['statement_transactions'];
|
|
327
|
+
statement_upload_id: string;
|
|
328
|
+
}
|
|
329
|
+
export interface BulkStatementUpdateRequestPayload {
|
|
330
|
+
statement_uploads: BulkStatementUpdateUploadPayload[];
|
|
331
|
+
}
|
|
240
332
|
/** 2xx Confirm & Save — carries parsed statement data, no chain-validation errors. */
|
|
241
333
|
export interface UpdateStatementInfoSuccessResponse extends ZeniAPIResponse<UpdateStatementInfoResponsePayload> {
|
|
242
334
|
error_code?: undefined;
|
|
@@ -260,8 +352,21 @@ export declare function isStatementDateConflictResponse(response: UpdateStatemen
|
|
|
260
352
|
*/
|
|
261
353
|
export declare function transformStatementDateConflictToState(response: UpdateStatementInfoResponse): StatementDateConflict | null;
|
|
262
354
|
export declare function transformParseStatementPayloadToState(payload: ParseStatementResponsePayload): ParsedStatementData;
|
|
355
|
+
export declare function transformCombinedStatementGroupPayloadToState(payload: CombinedStatementGroupResponsePayload): ParsedStatementData;
|
|
356
|
+
export declare function isConfirmStatementMappingConflictResponse(response: ConfirmStatementMappingResponse): response is ConfirmStatementMappingConflictResponse;
|
|
357
|
+
export declare function transformConfirmStatementMappingPayloadToState(payload: ConfirmStatementMappingResponsePayload): ConfirmedCombinedStatementUpload[];
|
|
358
|
+
export declare function transformConfirmStatementMappingConflictToState(response: ConfirmStatementMappingResponse): ConfirmStatementMappingConflict | null;
|
|
263
359
|
export declare function transformUpdateStatementInfoPayloadToState(payload: UpdateStatementInfoResponsePayload): ParsedStatementData;
|
|
264
360
|
export declare function transformStatementUpdateStateToPayload(localData: StatementUpdateLocalData): StatementUpdateLocalDataPayload;
|
|
265
361
|
/** API request body for PUT statement-uploads; cast lives here for putAndGetJSON. */
|
|
266
362
|
export declare function toStatementUpdateRequestBody(localData: StatementUpdateLocalData): Record<string, unknown>;
|
|
363
|
+
export declare function transformBulkStatementUpdateStateToPayload(updates: Array<{
|
|
364
|
+
localData: StatementUpdateLocalData;
|
|
365
|
+
statementUploadId: string;
|
|
366
|
+
}>): BulkStatementUpdateRequestPayload;
|
|
367
|
+
/** Bulk PUT body for combined multi-account Confirm & Save. */
|
|
368
|
+
export declare function toBulkStatementUpdateRequestBody(updates: Array<{
|
|
369
|
+
localData: StatementUpdateLocalData;
|
|
370
|
+
statementUploadId: string;
|
|
371
|
+
}>): Record<string, unknown>;
|
|
267
372
|
export {};
|
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createSaveReconciliationPayloadBasedOnActionAndMethod = createSaveReconciliationPayloadBasedOnActionAndMethod;
|
|
4
|
+
exports.isParseStatementCombinedResponsePayload = isParseStatementCombinedResponsePayload;
|
|
5
|
+
exports.isUpdateStatementInfoCombinedResponsePayload = isUpdateStatementInfoCombinedResponsePayload;
|
|
4
6
|
exports.isStatementDateConflictResponse = isStatementDateConflictResponse;
|
|
5
7
|
exports.transformStatementDateConflictToState = transformStatementDateConflictToState;
|
|
6
8
|
exports.transformParseStatementPayloadToState = transformParseStatementPayloadToState;
|
|
9
|
+
exports.transformCombinedStatementGroupPayloadToState = transformCombinedStatementGroupPayloadToState;
|
|
10
|
+
exports.isConfirmStatementMappingConflictResponse = isConfirmStatementMappingConflictResponse;
|
|
11
|
+
exports.transformConfirmStatementMappingPayloadToState = transformConfirmStatementMappingPayloadToState;
|
|
12
|
+
exports.transformConfirmStatementMappingConflictToState = transformConfirmStatementMappingConflictToState;
|
|
7
13
|
exports.transformUpdateStatementInfoPayloadToState = transformUpdateStatementInfoPayloadToState;
|
|
8
14
|
exports.transformStatementUpdateStateToPayload = transformStatementUpdateStateToPayload;
|
|
9
15
|
exports.toStatementUpdateRequestBody = toStatementUpdateRequestBody;
|
|
16
|
+
exports.transformBulkStatementUpdateStateToPayload = transformBulkStatementUpdateStateToPayload;
|
|
17
|
+
exports.toBulkStatementUpdateRequestBody = toBulkStatementUpdateRequestBody;
|
|
10
18
|
const timePeriod_1 = require("../../../commonStateTypes/timePeriod");
|
|
11
19
|
const accountReconPayload_1 = require("../../../entity/accountRecon/accountReconPayload");
|
|
12
20
|
const reconciliationTransactionPayloads_1 = require("../../../entity/transaction/payloadTypes/reconciliationTransactionPayloads");
|
|
21
|
+
const reconciliationViewState_1 = require("../types/reconciliationViewState");
|
|
13
22
|
function createSaveReconciliationPayloadBasedOnActionAndMethod(state, selectedPeriod, localData, accountReconciliationEntity, action, method) {
|
|
14
23
|
const { balance, initialClearedBalance } = accountReconciliationEntity;
|
|
15
24
|
const { expenseAutomationReconciliationViewState: { selectedAccountId, reconTabsState: { reconcile: { localData: { selectedTransactionIds }, }, }, }, } = state;
|
|
@@ -76,10 +85,60 @@ function createReviewTransactionPayload(accountReconciliationEntity) {
|
|
|
76
85
|
});
|
|
77
86
|
return reviewTransactionsPayload;
|
|
78
87
|
}
|
|
88
|
+
function isParseStatementCombinedResponsePayload(payload) {
|
|
89
|
+
return ('statement_uploads' in payload &&
|
|
90
|
+
Array.isArray(payload.statement_uploads) &&
|
|
91
|
+
payload.statement_uploads.length > 0 &&
|
|
92
|
+
// Batch group GET nests each upload under statement_upload — exclude that shape.
|
|
93
|
+
'statement_upload' in (payload.statement_uploads[0] ?? {}) === false);
|
|
94
|
+
}
|
|
95
|
+
function isUpdateStatementInfoCombinedResponsePayload(payload) {
|
|
96
|
+
return ('statement_uploads' in payload &&
|
|
97
|
+
Array.isArray(payload.statement_uploads) &&
|
|
98
|
+
payload.statement_uploads.length > 0);
|
|
99
|
+
}
|
|
79
100
|
function isStatementDateConflictResponse(response) {
|
|
80
101
|
return response.status.code === 409 && response.error_code != null;
|
|
81
102
|
}
|
|
103
|
+
function transformConfirmedCombinedStatementUploadsToState(statementUploads) {
|
|
104
|
+
return (statementUploads ?? []).map((statementUpload) => ({
|
|
105
|
+
accountId: statementUpload.account_id,
|
|
106
|
+
isCombinedStatementAnchor: statementUpload.is_combined_statement_anchor,
|
|
107
|
+
ledgerIdentifiers: statementUpload.ledger_identifiers ?? [],
|
|
108
|
+
statementUploadId: statementUpload.statement_upload_id,
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
function transformCombinedStatementDetailsToState(details) {
|
|
112
|
+
if (details == null) {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
combinedStatementGroupId: details.combined_statement_group_id,
|
|
117
|
+
isMappingConfirmed: details.is_mapping_confirmed,
|
|
118
|
+
accounts: (details.accounts ?? []).map((account) => ({
|
|
119
|
+
ledgerIdentifier: account.ledger_identifier,
|
|
120
|
+
accountName: account.account_name,
|
|
121
|
+
accountType: account.account_type,
|
|
122
|
+
maskedAccountNumber: account.masked_account_number,
|
|
123
|
+
openingBalance: account.opening_balance,
|
|
124
|
+
closingBalance: account.closing_balance,
|
|
125
|
+
transactionCount: account.transaction_count,
|
|
126
|
+
isUploadContext: account.is_upload_context,
|
|
127
|
+
existingStatementStatus: account.existing_statement_status ?? null,
|
|
128
|
+
suggestion: account.suggestion != null
|
|
129
|
+
? {
|
|
130
|
+
accountId: account.suggestion.account_id,
|
|
131
|
+
accountName: account.suggestion.account_name,
|
|
132
|
+
matchedBy: account.suggestion.matched_by,
|
|
133
|
+
matchConfidence: account.suggestion.match_confidence,
|
|
134
|
+
}
|
|
135
|
+
: null,
|
|
136
|
+
})),
|
|
137
|
+
statementUploads: transformConfirmedCombinedStatementUploadsToState(details.statement_uploads),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
82
140
|
function transformStatementUploadPayloadToState(statementUploadPayload) {
|
|
141
|
+
const balanceSource = (0, reconciliationViewState_1.toStatementBalanceSourceStrict)(statementUploadPayload.statement_meta.balance_source);
|
|
83
142
|
return {
|
|
84
143
|
account: {
|
|
85
144
|
accountId: statementUploadPayload.account.account_id,
|
|
@@ -105,6 +164,13 @@ function transformStatementUploadPayloadToState(statementUploadPayload) {
|
|
|
105
164
|
statementUploadId: statementUploadPayload.statement_meta.statement_upload_id,
|
|
106
165
|
totalDeposits: statementUploadPayload.statement_meta.total_deposits,
|
|
107
166
|
totalPayments: statementUploadPayload.statement_meta.total_payments,
|
|
167
|
+
isCombinedStatement: statementUploadPayload.statement_meta.is_combined_statement ??
|
|
168
|
+
undefined,
|
|
169
|
+
isCombinedStatementAnchor: statementUploadPayload.statement_meta.is_combined_statement_anchor ??
|
|
170
|
+
undefined,
|
|
171
|
+
combinedStatementGroupId: statementUploadPayload.statement_meta.combined_statement_group_id ??
|
|
172
|
+
undefined,
|
|
173
|
+
...(balanceSource != null ? { balanceSource } : {}),
|
|
108
174
|
},
|
|
109
175
|
statementTransactions: (statementUploadPayload.statement_transactions ?? []).map((txn) => ({
|
|
110
176
|
amount: txn.amount,
|
|
@@ -126,6 +192,7 @@ function transformStatementUploadPayloadToState(statementUploadPayload) {
|
|
|
126
192
|
transactionMemo: txn.transaction_memo,
|
|
127
193
|
})),
|
|
128
194
|
aiSummary: transformAiSummaryPayloadToState(statementUploadPayload.ai_summary),
|
|
195
|
+
combinedStatementDetails: transformCombinedStatementDetailsToState(statementUploadPayload.combined_statement_details),
|
|
129
196
|
};
|
|
130
197
|
}
|
|
131
198
|
function transformPreviousReconciliationInfoToState(payload) {
|
|
@@ -186,11 +253,71 @@ function transformStatementDateConflictToState(response) {
|
|
|
186
253
|
};
|
|
187
254
|
}
|
|
188
255
|
function transformParseStatementPayloadToState(payload) {
|
|
256
|
+
if (isParseStatementCombinedResponsePayload(payload) === true) {
|
|
257
|
+
const statementUploads = payload.statement_uploads.map(transformStatementUploadPayloadToState);
|
|
258
|
+
const anchorUpload = statementUploads.find((upload) => upload.statementMeta.isCombinedStatementAnchor === true) ?? statementUploads[0];
|
|
259
|
+
return {
|
|
260
|
+
statementUpload: anchorUpload,
|
|
261
|
+
statementUploads,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
189
264
|
return {
|
|
190
265
|
statementUpload: transformStatementUploadPayloadToState(payload.statement_upload),
|
|
191
266
|
};
|
|
192
267
|
}
|
|
268
|
+
function transformCombinedStatementGroupPayloadToState(payload) {
|
|
269
|
+
const groupId = payload.combined_statement_group_id;
|
|
270
|
+
const statementUploads = (payload.statement_uploads ?? []).map((entry) => {
|
|
271
|
+
const upload = transformStatementUploadPayloadToState(entry.statement_upload);
|
|
272
|
+
if ((upload.statementMeta.combinedStatementGroupId == null ||
|
|
273
|
+
upload.statementMeta.combinedStatementGroupId === '') &&
|
|
274
|
+
groupId !== '') {
|
|
275
|
+
return {
|
|
276
|
+
...upload,
|
|
277
|
+
statementMeta: {
|
|
278
|
+
...upload.statementMeta,
|
|
279
|
+
combinedStatementGroupId: groupId,
|
|
280
|
+
},
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
return upload;
|
|
284
|
+
});
|
|
285
|
+
if (statementUploads.length === 0) {
|
|
286
|
+
throw new Error('Combined statement response has no statement uploads');
|
|
287
|
+
}
|
|
288
|
+
const anchorUpload = statementUploads.find((upload) => upload.statementMeta.isCombinedStatementAnchor === true) ?? statementUploads[0];
|
|
289
|
+
return {
|
|
290
|
+
statementUpload: anchorUpload,
|
|
291
|
+
statementUploads,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
function isConfirmStatementMappingConflictResponse(response) {
|
|
295
|
+
return response.status.code === 409;
|
|
296
|
+
}
|
|
297
|
+
function transformConfirmStatementMappingPayloadToState(payload) {
|
|
298
|
+
return transformConfirmedCombinedStatementUploadsToState(payload.statement_uploads);
|
|
299
|
+
}
|
|
300
|
+
function transformConfirmStatementMappingConflictToState(response) {
|
|
301
|
+
if (isConfirmStatementMappingConflictResponse(response) === false) {
|
|
302
|
+
return null;
|
|
303
|
+
}
|
|
304
|
+
return {
|
|
305
|
+
collidingAccountId: response.colliding_account_id != null
|
|
306
|
+
? response.colliding_account_id
|
|
307
|
+
: undefined,
|
|
308
|
+
collidingLedgerIdentifiers: response.colliding_ledger_identifiers ?? [],
|
|
309
|
+
previousReconciliationInfo: transformPreviousReconciliationInfoToState(response.previous_reconciliation_info),
|
|
310
|
+
};
|
|
311
|
+
}
|
|
193
312
|
function transformUpdateStatementInfoPayloadToState(payload) {
|
|
313
|
+
if (isUpdateStatementInfoCombinedResponsePayload(payload) === true) {
|
|
314
|
+
const statementUploads = payload.statement_uploads.map(transformStatementUploadPayloadToState);
|
|
315
|
+
const anchorUpload = statementUploads.find((upload) => upload.statementMeta.isCombinedStatementAnchor === true) ?? statementUploads[0];
|
|
316
|
+
return {
|
|
317
|
+
statementUpload: anchorUpload,
|
|
318
|
+
statementUploads,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
194
321
|
return {
|
|
195
322
|
statementUpload: transformStatementUploadPayloadToState(payload.statement_upload),
|
|
196
323
|
};
|
|
@@ -230,3 +357,19 @@ function transformStatementUpdateStateToPayload(localData) {
|
|
|
230
357
|
function toStatementUpdateRequestBody(localData) {
|
|
231
358
|
return transformStatementUpdateStateToPayload(localData);
|
|
232
359
|
}
|
|
360
|
+
function transformBulkStatementUpdateStateToPayload(updates) {
|
|
361
|
+
return {
|
|
362
|
+
statement_uploads: updates.map(({ localData, statementUploadId }) => {
|
|
363
|
+
const body = transformStatementUpdateStateToPayload(localData);
|
|
364
|
+
return {
|
|
365
|
+
statement_upload_id: statementUploadId,
|
|
366
|
+
statement_meta: body.statement_meta,
|
|
367
|
+
statement_transactions: body.statement_transactions,
|
|
368
|
+
};
|
|
369
|
+
}),
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
/** Bulk PUT body for combined multi-account Confirm & Save. */
|
|
373
|
+
function toBulkStatementUpdateRequestBody(updates) {
|
|
374
|
+
return transformBulkStatementUpdateStateToPayload(updates);
|
|
375
|
+
}
|
|
@@ -5,7 +5,7 @@ import { MonthYearPeriod } from '../../../commonStateTypes/timePeriod';
|
|
|
5
5
|
import { ReconciliationDataPayload } from '../../../entity/accountRecon/accountReconPayload';
|
|
6
6
|
import { ZeniAPIStatus } from '../../../responsePayload';
|
|
7
7
|
import { ExcludedAccountFromReconciliationPayload, ReconciliationPayload, UploadStatementDocumentAIPayload } from '../payload/reconciliationPayload';
|
|
8
|
-
import { AccountReconciliationLocalData, ActionFetchStates, ExcludeAccountFromReconciliationPayload, ParsedStatementData, ReconReconcileSortKey, ReconReviewSortKey, ReconciliationReviewTabLocalData, ReconciliationTabsState, ReconciliationViewState, ReconciliationViewTabType, SaveReconcileDetailActionPayload, SaveReconciliationDetailFailurePayload, StatementDateConflict, StatementUpdateLocalData, TransactionSummary } from '../types/reconciliationViewState';
|
|
8
|
+
import { AccountReconciliationLocalData, ActionFetchStates, ConfirmStatementMappingConflict, ConfirmedCombinedStatementUpload, ExcludeAccountFromReconciliationPayload, ParsedStatementData, ReconReconcileSortKey, ReconReviewSortKey, ReconciliationReviewTabLocalData, ReconciliationTabsState, ReconciliationViewState, ReconciliationViewTabType, SaveReconcileDetailActionPayload, SaveReconciliationDetailFailurePayload, StatementAccountScope, StatementDateConflict, StatementUpdateLocalData, TransactionSummary } from '../types/reconciliationViewState';
|
|
9
9
|
export declare const initialReconciliationTabsState: ReconciliationTabsState;
|
|
10
10
|
export declare const initialActionFetchState: ActionFetchStates;
|
|
11
11
|
export declare const initialState: ReconciliationViewState;
|
|
@@ -116,6 +116,7 @@ export declare const fetchReconciliation: import("@reduxjs/toolkit").ActionCreat
|
|
|
116
116
|
accountId: ID;
|
|
117
117
|
payload: UploadStatementDocumentAIPayload;
|
|
118
118
|
selectedPeriod: MonthYearPeriod;
|
|
119
|
+
statementAccountScope?: StatementAccountScope;
|
|
119
120
|
}, "expenseAutomationReconciliationView/uploadAccountStatement">, uploadAccountStatementSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
120
121
|
accountId: ID;
|
|
121
122
|
selectedPeriod: MonthYearPeriod;
|
|
@@ -127,7 +128,12 @@ export declare const fetchReconciliation: import("@reduxjs/toolkit").ActionCreat
|
|
|
127
128
|
accountId: ID;
|
|
128
129
|
selectedPeriod: MonthYearPeriod;
|
|
129
130
|
statementUploadId: ID;
|
|
130
|
-
}, "expenseAutomationReconciliationView/parseStatement">,
|
|
131
|
+
}, "expenseAutomationReconciliationView/parseStatement">, parseCombinedStatement: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
132
|
+
accountId: ID;
|
|
133
|
+
combinedStatementGroupId: string;
|
|
134
|
+
selectedPeriod: MonthYearPeriod;
|
|
135
|
+
statementUploadId: ID;
|
|
136
|
+
}, "expenseAutomationReconciliationView/parseCombinedStatement">, parseStatementSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
131
137
|
accountId: ID;
|
|
132
138
|
selectedPeriod: MonthYearPeriod;
|
|
133
139
|
}, "expenseAutomationReconciliationView/parseStatementSuccess">, parseStatementFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
@@ -156,11 +162,16 @@ export declare const fetchReconciliation: import("@reduxjs/toolkit").ActionCreat
|
|
|
156
162
|
accountId: ID;
|
|
157
163
|
selectedPeriod: MonthYearPeriod;
|
|
158
164
|
statementUpdateLocalData: StatementUpdateLocalData;
|
|
165
|
+
statementUploadId: ID | string;
|
|
159
166
|
}, "expenseAutomationReconciliationView/updateStatementUpdateLocalData">, submitStatementUpdate: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
160
167
|
accountId: ID;
|
|
161
168
|
selectedPeriod: MonthYearPeriod;
|
|
162
169
|
statementUploadId: ID;
|
|
163
|
-
}, "expenseAutomationReconciliationView/submitStatementUpdate">,
|
|
170
|
+
}, "expenseAutomationReconciliationView/submitStatementUpdate">, submitCombinedStatementUpdate: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
171
|
+
accountId: ID;
|
|
172
|
+
selectedPeriod: MonthYearPeriod;
|
|
173
|
+
statementUploadId: ID;
|
|
174
|
+
}, "expenseAutomationReconciliationView/submitCombinedStatementUpdate">, submitStatementUpdateSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
164
175
|
accountId: ID;
|
|
165
176
|
selectedPeriod: MonthYearPeriod;
|
|
166
177
|
}, "expenseAutomationReconciliationView/submitStatementUpdateSuccess">, submitStatementUpdateFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
@@ -171,7 +182,24 @@ export declare const fetchReconciliation: import("@reduxjs/toolkit").ActionCreat
|
|
|
171
182
|
}, "expenseAutomationReconciliationView/submitStatementUpdateFailure">, clearStatementDateConflict: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
172
183
|
accountId: ID;
|
|
173
184
|
selectedPeriod: MonthYearPeriod;
|
|
174
|
-
}, "expenseAutomationReconciliationView/clearStatementDateConflict">,
|
|
185
|
+
}, "expenseAutomationReconciliationView/clearStatementDateConflict">, confirmStatementMapping: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
186
|
+
accountId: ID;
|
|
187
|
+
accountMappings: Array<{
|
|
188
|
+
accountId: ID;
|
|
189
|
+
ledgerIdentifier: string;
|
|
190
|
+
}>;
|
|
191
|
+
selectedPeriod: MonthYearPeriod;
|
|
192
|
+
statementUploadId: ID;
|
|
193
|
+
}, "expenseAutomationReconciliationView/confirmStatementMapping">, confirmStatementMappingSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
194
|
+
accountId: ID;
|
|
195
|
+
selectedPeriod: MonthYearPeriod;
|
|
196
|
+
statementUploads: ConfirmedCombinedStatementUpload[];
|
|
197
|
+
}, "expenseAutomationReconciliationView/confirmStatementMappingSuccess">, confirmStatementMappingFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
198
|
+
accountId: ID;
|
|
199
|
+
error: ZeniAPIStatus;
|
|
200
|
+
selectedPeriod: MonthYearPeriod;
|
|
201
|
+
mappingConflict?: ConfirmStatementMappingConflict | null;
|
|
202
|
+
}, "expenseAutomationReconciliationView/confirmStatementMappingFailure">, updateStatementUploadChosen: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
175
203
|
statementUploadChosen: boolean;
|
|
176
204
|
}, "expenseAutomationReconciliationView/updateStatementUploadChosen">, updateNodeCollapseState: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
177
205
|
collapsed: boolean;
|