@zeniai/client-epic-state 5.1.34-betaRD1 → 5.1.35
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/commonStateTypes/viewAndReport/agingReportStateTypes.d.ts +1 -1
- package/lib/entity/accountRecon/accountReconPayload.d.ts +22 -0
- package/lib/entity/accountRecon/accountReconPayload.js +26 -1
- package/lib/entity/accountRecon/accountReconReducer.d.ts +5 -2
- package/lib/entity/accountRecon/accountReconReducer.js +36 -2
- package/lib/entity/accountRecon/accountReconSelector.d.ts +6 -1
- package/lib/entity/accountRecon/accountReconSelector.js +5 -0
- package/lib/entity/accountRecon/accountReconState.d.ts +22 -0
- package/lib/entity/monthEndCloseChecks/monthEndCloseChecksPayload.d.ts +8 -0
- package/lib/entity/monthEndCloseChecks/monthEndCloseChecksPayload.js +10 -0
- package/lib/entity/monthEndCloseChecks/monthEndCloseChecksState.d.ts +8 -0
- package/lib/epic.d.ts +4 -1
- package/lib/epic.js +4 -1
- package/lib/esm/entity/accountRecon/accountReconPayload.js +26 -1
- package/lib/esm/entity/accountRecon/accountReconReducer.js +35 -1
- package/lib/esm/entity/accountRecon/accountReconSelector.js +5 -0
- package/lib/esm/entity/monthEndCloseChecks/monthEndCloseChecksPayload.js +10 -0
- package/lib/esm/epic.js +4 -1
- package/lib/esm/index.js +3 -3
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/parseStatementEpic.js +34 -0
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/reparseStatementEpic.js +31 -0
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/updateStatementInfoEpic.js +57 -0
- package/lib/esm/view/expenseAutomationView/payload/reconciliationPayload.js +153 -0
- package/lib/esm/view/expenseAutomationView/reducers/reconciliationViewReducer.js +188 -9
- package/lib/esm/view/expenseAutomationView/selectors/reconciliationViewSelector.js +27 -0
- package/lib/esm/view/expenseAutomationView/types/reconciliationViewState.js +29 -0
- package/lib/index.d.ts +6 -6
- package/lib/index.js +51 -37
- package/lib/view/expenseAutomationView/epics/accountRecon/parseStatementEpic.d.ts +6 -0
- package/lib/view/expenseAutomationView/epics/accountRecon/parseStatementEpic.js +38 -0
- package/lib/view/expenseAutomationView/epics/accountRecon/reparseStatementEpic.d.ts +26 -0
- package/lib/view/expenseAutomationView/epics/accountRecon/reparseStatementEpic.js +35 -0
- package/lib/view/expenseAutomationView/epics/accountRecon/updateStatementInfoEpic.d.ts +27 -0
- package/lib/view/expenseAutomationView/epics/accountRecon/updateStatementInfoEpic.js +61 -0
- package/lib/view/expenseAutomationView/payload/reconciliationPayload.d.ts +176 -10
- package/lib/view/expenseAutomationView/payload/reconciliationPayload.js +159 -0
- package/lib/view/expenseAutomationView/reducers/reconciliationViewReducer.d.ts +53 -3
- package/lib/view/expenseAutomationView/reducers/reconciliationViewReducer.js +190 -10
- package/lib/view/expenseAutomationView/selectorTypes/reconciliationViewSelectorTypes.d.ts +7 -1
- package/lib/view/expenseAutomationView/selectors/reconciliationViewSelector.d.ts +2 -0
- package/lib/view/expenseAutomationView/selectors/reconciliationViewSelector.js +29 -1
- package/lib/view/expenseAutomationView/types/reconciliationViewState.d.ts +175 -0
- package/lib/view/expenseAutomationView/types/reconciliationViewState.js +30 -0
- package/lib/view/vendorFiling1099/vendorFiling1099List/vendorFiling1099ListState.d.ts +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ActionsObservable, StateObservable } from 'redux-observable';
|
|
2
|
+
import { RootState } from '../../../../reducer';
|
|
3
|
+
import { updateAccountReconReparseStatement } from '../../../../entity/accountRecon/accountReconReducer';
|
|
4
|
+
import { ZeniAPI } from '../../../../zeniAPI';
|
|
5
|
+
import { reparseStatement, reparseStatementFailure, reparseStatementSuccess } from '../../reducers/reconciliationViewReducer';
|
|
6
|
+
export type ActionType = ReturnType<typeof reparseStatement> | ReturnType<typeof reparseStatementSuccess> | ReturnType<typeof reparseStatementFailure> | ReturnType<typeof updateAccountReconReparseStatement>;
|
|
7
|
+
export declare const reparseStatementEpic: (actions$: ActionsObservable<ActionType>, _state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => import("rxjs").Observable<{
|
|
8
|
+
payload: {
|
|
9
|
+
accountId: import("../../../..").ID;
|
|
10
|
+
selectedPeriod: import("../../../..").MonthYearPeriod;
|
|
11
|
+
};
|
|
12
|
+
type: "expenseAutomationReconciliationView/reparseStatementSuccess";
|
|
13
|
+
} | {
|
|
14
|
+
payload: {
|
|
15
|
+
accountId: import("../../../..").ID;
|
|
16
|
+
error: import("../../../../responsePayload").ZeniAPIStatus;
|
|
17
|
+
selectedPeriod: import("../../../..").MonthYearPeriod;
|
|
18
|
+
};
|
|
19
|
+
type: "expenseAutomationReconciliationView/reparseStatementFailure";
|
|
20
|
+
} | {
|
|
21
|
+
payload: {
|
|
22
|
+
accountReconKey: string;
|
|
23
|
+
payload: import("../../payload/reconciliationPayload").ReparseStatementResponsePayload;
|
|
24
|
+
};
|
|
25
|
+
type: "accountRecon/updateAccountReconReparseStatement";
|
|
26
|
+
}>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.reparseStatementEpic = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const operators_1 = require("rxjs/operators");
|
|
6
|
+
const accountReconReducer_1 = require("../../../../entity/accountRecon/accountReconReducer");
|
|
7
|
+
const accountReconState_1 = require("../../../../entity/accountRecon/accountReconState");
|
|
8
|
+
const responsePayload_1 = require("../../../../responsePayload");
|
|
9
|
+
const reconciliationViewReducer_1 = require("../../reducers/reconciliationViewReducer");
|
|
10
|
+
const reparseStatementEpic = (actions$, _state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(reconciliationViewReducer_1.reparseStatement.match), (0, operators_1.switchMap)((action) => {
|
|
11
|
+
const { accountId, selectedPeriod, statementUploadId } = action.payload;
|
|
12
|
+
const reparseStatementApi$ = zeniAPI.postAndGetJSON(`${zeniAPI.apiEndPoints.reconciliationMicroServiceBaseUrl}/1.0/reconciliation/statements/${statementUploadId}/reparse`);
|
|
13
|
+
return reparseStatementApi$.pipe((0, operators_1.mergeMap)((response) => {
|
|
14
|
+
if ((0, responsePayload_1.isSuccessResponse)(response) === true && response.data != null) {
|
|
15
|
+
const accountReconKey = (0, accountReconState_1.toAccountReconKey)(accountId, selectedPeriod);
|
|
16
|
+
return (0, rxjs_1.from)([
|
|
17
|
+
(0, accountReconReducer_1.updateAccountReconReparseStatement)(accountReconKey, response.data),
|
|
18
|
+
(0, reconciliationViewReducer_1.reparseStatementSuccess)({ accountId, selectedPeriod }),
|
|
19
|
+
]);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
return (0, rxjs_1.of)((0, reconciliationViewReducer_1.reparseStatementFailure)({
|
|
23
|
+
accountId,
|
|
24
|
+
selectedPeriod,
|
|
25
|
+
error: response.status,
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
}), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, reconciliationViewReducer_1.reparseStatementFailure)({
|
|
29
|
+
accountId,
|
|
30
|
+
selectedPeriod,
|
|
31
|
+
error: (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'Reparse Statement REST API call errored out ' +
|
|
32
|
+
(error instanceof Error ? error.message : String(error))),
|
|
33
|
+
}))));
|
|
34
|
+
}));
|
|
35
|
+
exports.reparseStatementEpic = reparseStatementEpic;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ActionsObservable, StateObservable } from 'redux-observable';
|
|
2
|
+
import { RootState } from '../../../../reducer';
|
|
3
|
+
import { ZeniAPI } from '../../../../zeniAPI';
|
|
4
|
+
import { submitStatementUpdate, submitStatementUpdateFailure, submitStatementUpdateSuccess, updateParsedStatementData } from '../../reducers/reconciliationViewReducer';
|
|
5
|
+
export type ActionType = ReturnType<typeof submitStatementUpdate> | ReturnType<typeof submitStatementUpdateSuccess> | ReturnType<typeof submitStatementUpdateFailure> | ReturnType<typeof updateParsedStatementData>;
|
|
6
|
+
export declare const updateStatementInfoEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => import("rxjs").Observable<{
|
|
7
|
+
payload: {
|
|
8
|
+
accountId: import("../../../..").ID;
|
|
9
|
+
parsedStatementData: import("../../types/reconciliationViewState").ParsedStatementData;
|
|
10
|
+
selectedPeriod: import("../../../../commonStateTypes/timePeriod").MonthYearPeriod;
|
|
11
|
+
};
|
|
12
|
+
type: "expenseAutomationReconciliationView/updateParsedStatementData";
|
|
13
|
+
} | {
|
|
14
|
+
payload: {
|
|
15
|
+
accountId: import("../../../..").ID;
|
|
16
|
+
selectedPeriod: import("../../../../commonStateTypes/timePeriod").MonthYearPeriod;
|
|
17
|
+
};
|
|
18
|
+
type: "expenseAutomationReconciliationView/submitStatementUpdateSuccess";
|
|
19
|
+
} | {
|
|
20
|
+
payload: {
|
|
21
|
+
accountId: import("../../../..").ID;
|
|
22
|
+
error: import("../../../../responsePayload").ZeniAPIStatus;
|
|
23
|
+
selectedPeriod: import("../../../../commonStateTypes/timePeriod").MonthYearPeriod;
|
|
24
|
+
dateConflict?: import("../../types/reconciliationViewState").StatementDateConflict | null;
|
|
25
|
+
};
|
|
26
|
+
type: "expenseAutomationReconciliationView/submitStatementUpdateFailure";
|
|
27
|
+
}>;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateStatementInfoEpic = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const operators_1 = require("rxjs/operators");
|
|
6
|
+
const timePeriod_1 = require("../../../../commonStateTypes/timePeriod");
|
|
7
|
+
const responsePayload_1 = require("../../../../responsePayload");
|
|
8
|
+
const reconciliationPayload_1 = require("../../payload/reconciliationPayload");
|
|
9
|
+
const reconciliationViewReducer_1 = require("../../reducers/reconciliationViewReducer");
|
|
10
|
+
const updateStatementInfoEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(reconciliationViewReducer_1.submitStatementUpdate.match), (0, operators_1.switchMap)((action) => {
|
|
11
|
+
const { accountId, selectedPeriod, statementUploadId } = action.payload;
|
|
12
|
+
const state = state$.value;
|
|
13
|
+
const reconciliationView = state.expenseAutomationReconciliationViewState;
|
|
14
|
+
const accountRecon = reconciliationView.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
|
|
15
|
+
const localData = accountRecon?.localData?.statementUpdateLocalData;
|
|
16
|
+
if (!localData) {
|
|
17
|
+
return (0, rxjs_1.of)((0, reconciliationViewReducer_1.submitStatementUpdateFailure)({
|
|
18
|
+
accountId,
|
|
19
|
+
selectedPeriod,
|
|
20
|
+
error: (0, responsePayload_1.createZeniAPIStatus)('Missing Data', 'No statement update data found'),
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
const hasInvalidUpdates = localData.statementTransactions.updated.some((txn) => txn.statementTransactionId == null);
|
|
24
|
+
if (hasInvalidUpdates) {
|
|
25
|
+
return (0, rxjs_1.of)((0, reconciliationViewReducer_1.submitStatementUpdateFailure)({
|
|
26
|
+
accountId,
|
|
27
|
+
selectedPeriod,
|
|
28
|
+
error: (0, responsePayload_1.createZeniAPIStatus)('Invalid Data', 'One or more edited transactions are missing statement transaction ids'),
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
const body = (0, reconciliationPayload_1.toStatementUpdateRequestBody)(localData);
|
|
32
|
+
const updateStatementApi$ = zeniAPI.putAndGetJSON(`${zeniAPI.apiEndPoints.reconciliationMicroServiceBaseUrl}/2.0/statement-uploads/${statementUploadId}`, body);
|
|
33
|
+
return updateStatementApi$.pipe((0, operators_1.mergeMap)((response) => {
|
|
34
|
+
if ((0, responsePayload_1.isSuccessResponse)(response) === true && response.data != null) {
|
|
35
|
+
const parsedStatementData = (0, reconciliationPayload_1.transformUpdateStatementInfoPayloadToState)(response.data);
|
|
36
|
+
return (0, rxjs_1.of)((0, reconciliationViewReducer_1.updateParsedStatementData)({
|
|
37
|
+
accountId,
|
|
38
|
+
selectedPeriod,
|
|
39
|
+
parsedStatementData,
|
|
40
|
+
}), (0, reconciliationViewReducer_1.submitStatementUpdateSuccess)({
|
|
41
|
+
accountId,
|
|
42
|
+
selectedPeriod,
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
const dateConflict = (0, reconciliationPayload_1.isStatementDateConflictResponse)(response)
|
|
46
|
+
? (0, reconciliationPayload_1.transformStatementDateConflictToState)(response)
|
|
47
|
+
: null;
|
|
48
|
+
return (0, rxjs_1.of)((0, reconciliationViewReducer_1.submitStatementUpdateFailure)({
|
|
49
|
+
accountId,
|
|
50
|
+
selectedPeriod,
|
|
51
|
+
error: response.status,
|
|
52
|
+
dateConflict,
|
|
53
|
+
}));
|
|
54
|
+
}), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, reconciliationViewReducer_1.submitStatementUpdateFailure)({
|
|
55
|
+
accountId,
|
|
56
|
+
selectedPeriod,
|
|
57
|
+
error: (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'Update Statement REST API call errored out ' +
|
|
58
|
+
(error instanceof Error ? error.message : String(error))),
|
|
59
|
+
}))));
|
|
60
|
+
}));
|
|
61
|
+
exports.updateStatementInfoEpic = updateStatementInfoEpic;
|
|
@@ -8,8 +8,8 @@ import { FilePayload } from '../../../entity/file/filePayload';
|
|
|
8
8
|
import { MatchedTransactionPayload } from '../../../entity/transaction/payloadTypes/reconciliationTransactionPayloads';
|
|
9
9
|
import { UserPayload } from '../../../entity/user/userPayload';
|
|
10
10
|
import { RootState } from '../../../reducer';
|
|
11
|
-
import { ZeniAPIResponse } from '../../../responsePayload';
|
|
12
|
-
import { BalancesLocalData, SaveReconcileDetailActionPayload } from '../types/reconciliationViewState';
|
|
11
|
+
import { ZeniAPIResponse, ZeniAPIStatus } from '../../../responsePayload';
|
|
12
|
+
import { BalancesLocalData, ParsedStatementData, SaveReconcileDetailActionPayload, StatementDateConflict, StatementUpdateLocalData, StatementUpdateLocalDataPayload } from '../types/reconciliationViewState';
|
|
13
13
|
export interface DetectionInfoPayload {
|
|
14
14
|
account_id: string;
|
|
15
15
|
bank_balance: number | null;
|
|
@@ -31,6 +31,31 @@ interface ExclusionInfoPayload {
|
|
|
31
31
|
export interface ExcludedAccountPayload extends AccountAndPaymentAccountPayload {
|
|
32
32
|
exclusion_info: ExclusionInfoPayload;
|
|
33
33
|
}
|
|
34
|
+
export interface ReconciliationProgressBarPayload {
|
|
35
|
+
ai_percentage_share: number;
|
|
36
|
+
complete_percentage: number;
|
|
37
|
+
human_percentage_share: number;
|
|
38
|
+
remaining_percentage: number;
|
|
39
|
+
}
|
|
40
|
+
export interface ReconciliationSummaryPayload {
|
|
41
|
+
accounts: {
|
|
42
|
+
done: number;
|
|
43
|
+
failed: number;
|
|
44
|
+
in_progress: number;
|
|
45
|
+
total: number;
|
|
46
|
+
};
|
|
47
|
+
accounts_to_connect_count: number;
|
|
48
|
+
auto_matched: {
|
|
49
|
+
matched_txns: number;
|
|
50
|
+
total_txns: number;
|
|
51
|
+
};
|
|
52
|
+
needs_review: {
|
|
53
|
+
account_count: number;
|
|
54
|
+
txn_count: number;
|
|
55
|
+
};
|
|
56
|
+
time_saved_percentage: number;
|
|
57
|
+
progress_bar?: ReconciliationProgressBarPayload;
|
|
58
|
+
}
|
|
34
59
|
export interface ReconciliationPayload {
|
|
35
60
|
accounts: AccountAndPaymentAccountPayload[];
|
|
36
61
|
files: FilePayload[];
|
|
@@ -39,6 +64,7 @@ export interface ReconciliationPayload {
|
|
|
39
64
|
detection_info?: DetectionInfoPayload;
|
|
40
65
|
detection_reason?: string;
|
|
41
66
|
excluded_accounts?: ExcludedAccountPayload[];
|
|
67
|
+
summary?: ReconciliationSummaryPayload;
|
|
42
68
|
}
|
|
43
69
|
export type ReconciliationResponse = ZeniAPIResponse<ReconciliationPayload>;
|
|
44
70
|
export interface SaveReconciliationReviewPayload {
|
|
@@ -86,16 +112,156 @@ export interface UploadStatementDocumentAIPayload {
|
|
|
86
112
|
processor_run_id: string;
|
|
87
113
|
}
|
|
88
114
|
export type UploadStatementDocumentAIResponse = ZeniAPIResponse<UploadStatementDocumentAIPayload>;
|
|
115
|
+
export interface StatementUploadSummaryPayload {
|
|
116
|
+
account_type: string;
|
|
117
|
+
statement_data_status: StatusCodeWithLabelPayload;
|
|
118
|
+
statement_end_date: string;
|
|
119
|
+
statement_start_date: string;
|
|
120
|
+
statement_status: StatusCodeWithLabelPayload;
|
|
121
|
+
statement_upload_id: string;
|
|
122
|
+
}
|
|
89
123
|
export interface UploadStatementResponsePayload {
|
|
90
124
|
file: FilePayload;
|
|
91
|
-
statement_upload:
|
|
92
|
-
account_type: string;
|
|
93
|
-
statement_data_status: StatusCodeWithLabelPayload;
|
|
94
|
-
statement_end_date: string;
|
|
95
|
-
statement_start_date: string;
|
|
96
|
-
statement_status: StatusCodeWithLabelPayload;
|
|
97
|
-
statement_upload_id: string;
|
|
98
|
-
};
|
|
125
|
+
statement_upload: StatementUploadSummaryPayload;
|
|
99
126
|
}
|
|
100
127
|
export type UploadStatementResponse = ZeniAPIResponse<UploadStatementResponsePayload>;
|
|
128
|
+
export interface PolygonPointPayload {
|
|
129
|
+
x: number;
|
|
130
|
+
y: number;
|
|
131
|
+
}
|
|
132
|
+
export interface CitationPayload {
|
|
133
|
+
page: number;
|
|
134
|
+
page_height: number;
|
|
135
|
+
page_width: number;
|
|
136
|
+
polygon: PolygonPointPayload[];
|
|
137
|
+
reference_text: string;
|
|
138
|
+
}
|
|
139
|
+
export interface StatementTransactionPayload {
|
|
140
|
+
amount: number;
|
|
141
|
+
citation: CitationPayload[];
|
|
142
|
+
is_user_added: boolean;
|
|
143
|
+
is_user_edited: boolean;
|
|
144
|
+
statement_transaction_id: string;
|
|
145
|
+
transaction_date: string;
|
|
146
|
+
transaction_direction: 'debit' | 'credit';
|
|
147
|
+
transaction_memo: string;
|
|
148
|
+
}
|
|
149
|
+
export interface ReconciliationMetaPayload {
|
|
150
|
+
end_date: string;
|
|
151
|
+
reconciliation_id: string;
|
|
152
|
+
start_date: string;
|
|
153
|
+
status: string;
|
|
154
|
+
}
|
|
155
|
+
export interface StatementMetaPayload {
|
|
156
|
+
closing_balance: number;
|
|
157
|
+
opening_balance: number;
|
|
158
|
+
statement_data_status: StatusCodeWithLabelPayload;
|
|
159
|
+
statement_end_date: string;
|
|
160
|
+
statement_start_date: string;
|
|
161
|
+
statement_status: StatusCodeWithLabelPayload;
|
|
162
|
+
statement_upload_id: string;
|
|
163
|
+
total_deposits: number;
|
|
164
|
+
total_payments: number;
|
|
165
|
+
}
|
|
166
|
+
export interface AccountInfoPayload {
|
|
167
|
+
account_id: string;
|
|
168
|
+
account_name: string;
|
|
169
|
+
account_type: string;
|
|
170
|
+
currency_code: string;
|
|
171
|
+
last_4_digits: string | null;
|
|
172
|
+
}
|
|
173
|
+
export interface FileInfoPayload {
|
|
174
|
+
file_id: string;
|
|
175
|
+
file_name: string;
|
|
176
|
+
signed_url: string;
|
|
177
|
+
}
|
|
178
|
+
export interface AiSummaryFieldPayload {
|
|
179
|
+
code: string;
|
|
180
|
+
label: string;
|
|
181
|
+
}
|
|
182
|
+
export interface PreviousReconciliationInfoPayload {
|
|
183
|
+
end_date: string;
|
|
184
|
+
reconciled_at: string;
|
|
185
|
+
reconciled_by_user_id: string;
|
|
186
|
+
reconciliation_id: string;
|
|
187
|
+
start_date: string;
|
|
188
|
+
}
|
|
189
|
+
export interface AiSummaryChainStatusPayload {
|
|
190
|
+
code: string;
|
|
191
|
+
expected_start_date: string | null;
|
|
192
|
+
label: string;
|
|
193
|
+
previous_reconciliation_info: PreviousReconciliationInfoPayload | null;
|
|
194
|
+
}
|
|
195
|
+
export interface AiSummaryPayload {
|
|
196
|
+
account_identified: string | null;
|
|
197
|
+
chain_status: AiSummaryChainStatusPayload;
|
|
198
|
+
exceptions_detected: number;
|
|
199
|
+
fields_captured: AiSummaryFieldPayload[];
|
|
200
|
+
transactions_extracted: number;
|
|
201
|
+
}
|
|
202
|
+
export interface StatementUploadPayload {
|
|
203
|
+
account: AccountInfoPayload;
|
|
204
|
+
file: FileInfoPayload | null;
|
|
205
|
+
statement_meta: StatementMetaPayload;
|
|
206
|
+
statement_transactions: StatementTransactionPayload[];
|
|
207
|
+
ai_summary?: AiSummaryPayload | null;
|
|
208
|
+
}
|
|
209
|
+
export interface ParseStatementResponsePayload {
|
|
210
|
+
reconciliation: ReconciliationMetaPayload;
|
|
211
|
+
statement_upload: StatementUploadPayload;
|
|
212
|
+
}
|
|
213
|
+
export interface ReparseStatementResponsePayload {
|
|
214
|
+
statement_upload: StatementUploadSummaryPayload;
|
|
215
|
+
}
|
|
216
|
+
export type ParseStatementResponse = ZeniAPIResponse<ParseStatementResponsePayload>;
|
|
217
|
+
export type ReparseStatementResponse = ZeniAPIResponse<ReparseStatementResponsePayload>;
|
|
218
|
+
/**
|
|
219
|
+
* Statement period chain validation (Confirm & Save).
|
|
220
|
+
*
|
|
221
|
+
* - 200 (auto-trim): the BE trimmed the start date and returns a
|
|
222
|
+
* `date_adjustment` block alongside the usual reconciliation /
|
|
223
|
+
* statement_upload data.
|
|
224
|
+
* - 409: the upload was rejected (total overlap or gap). The error fields
|
|
225
|
+
* (`error_code`, `expected_start_date`, `previous_reconciliation_info`)
|
|
226
|
+
* live at the top level of the response, next to `status`.
|
|
227
|
+
*/
|
|
228
|
+
export type StatementChainErrorCode = 'STATEMENT_RANGE_ALREADY_RECONCILED' | 'STATEMENT_RANGE_HAS_GAP';
|
|
229
|
+
export interface StatementDateAdjustmentPayload {
|
|
230
|
+
adjusted_start_date: string;
|
|
231
|
+
original_start_date: string;
|
|
232
|
+
previous_reconciliation_info: PreviousReconciliationInfoPayload;
|
|
233
|
+
reason: string;
|
|
234
|
+
}
|
|
235
|
+
export interface UpdateStatementInfoResponsePayload {
|
|
236
|
+
reconciliation: ReconciliationMetaPayload;
|
|
237
|
+
statement_upload: StatementUploadPayload;
|
|
238
|
+
date_adjustment?: StatementDateAdjustmentPayload | null;
|
|
239
|
+
}
|
|
240
|
+
/** 2xx Confirm & Save — carries parsed statement data, no chain-validation errors. */
|
|
241
|
+
export interface UpdateStatementInfoSuccessResponse extends ZeniAPIResponse<UpdateStatementInfoResponsePayload> {
|
|
242
|
+
error_code?: undefined;
|
|
243
|
+
expected_start_date?: undefined;
|
|
244
|
+
previous_reconciliation_info?: undefined;
|
|
245
|
+
}
|
|
246
|
+
/** 409 Confirm & Save — chain validation rejected the statement period. */
|
|
247
|
+
export interface UpdateStatementInfoConflictResponse extends ZeniAPIResponse<UpdateStatementInfoResponsePayload | undefined> {
|
|
248
|
+
error_code: StatementChainErrorCode;
|
|
249
|
+
status: ZeniAPIStatus & {
|
|
250
|
+
code: 409;
|
|
251
|
+
};
|
|
252
|
+
expected_start_date?: string | null;
|
|
253
|
+
previous_reconciliation_info?: PreviousReconciliationInfoPayload | null;
|
|
254
|
+
}
|
|
255
|
+
export type UpdateStatementInfoResponse = UpdateStatementInfoSuccessResponse | UpdateStatementInfoConflictResponse;
|
|
256
|
+
export declare function isStatementDateConflictResponse(response: UpdateStatementInfoResponse): response is UpdateStatementInfoConflictResponse;
|
|
257
|
+
/**
|
|
258
|
+
* Builds date-conflict state from a 409 Confirm & Save response.
|
|
259
|
+
* Returns null for non-409 responses or 409s without a recognized error code.
|
|
260
|
+
*/
|
|
261
|
+
export declare function transformStatementDateConflictToState(response: UpdateStatementInfoResponse): StatementDateConflict | null;
|
|
262
|
+
export declare function transformParseStatementPayloadToState(payload: ParseStatementResponsePayload): ParsedStatementData;
|
|
263
|
+
export declare function transformUpdateStatementInfoPayloadToState(payload: UpdateStatementInfoResponsePayload): ParsedStatementData;
|
|
264
|
+
export declare function transformStatementUpdateStateToPayload(localData: StatementUpdateLocalData): StatementUpdateLocalDataPayload;
|
|
265
|
+
/** API request body for PUT statement-uploads; cast lives here for putAndGetJSON. */
|
|
266
|
+
export declare function toStatementUpdateRequestBody(localData: StatementUpdateLocalData): Record<string, unknown>;
|
|
101
267
|
export {};
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createSaveReconciliationPayloadBasedOnActionAndMethod = createSaveReconciliationPayloadBasedOnActionAndMethod;
|
|
4
|
+
exports.isStatementDateConflictResponse = isStatementDateConflictResponse;
|
|
5
|
+
exports.transformStatementDateConflictToState = transformStatementDateConflictToState;
|
|
6
|
+
exports.transformParseStatementPayloadToState = transformParseStatementPayloadToState;
|
|
7
|
+
exports.transformUpdateStatementInfoPayloadToState = transformUpdateStatementInfoPayloadToState;
|
|
8
|
+
exports.transformStatementUpdateStateToPayload = transformStatementUpdateStateToPayload;
|
|
9
|
+
exports.toStatementUpdateRequestBody = toStatementUpdateRequestBody;
|
|
4
10
|
const timePeriod_1 = require("../../../commonStateTypes/timePeriod");
|
|
5
11
|
const accountReconPayload_1 = require("../../../entity/accountRecon/accountReconPayload");
|
|
6
12
|
const reconciliationTransactionPayloads_1 = require("../../../entity/transaction/payloadTypes/reconciliationTransactionPayloads");
|
|
@@ -70,3 +76,156 @@ function createReviewTransactionPayload(accountReconciliationEntity) {
|
|
|
70
76
|
});
|
|
71
77
|
return reviewTransactionsPayload;
|
|
72
78
|
}
|
|
79
|
+
function isStatementDateConflictResponse(response) {
|
|
80
|
+
return response.status.code === 409 && response.error_code != null;
|
|
81
|
+
}
|
|
82
|
+
function transformStatementUploadPayloadToState(statementUploadPayload) {
|
|
83
|
+
return {
|
|
84
|
+
account: {
|
|
85
|
+
accountId: statementUploadPayload.account.account_id,
|
|
86
|
+
accountName: statementUploadPayload.account.account_name,
|
|
87
|
+
accountType: statementUploadPayload.account.account_type,
|
|
88
|
+
currencyCode: statementUploadPayload.account.currency_code,
|
|
89
|
+
last4Digits: statementUploadPayload.account.last_4_digits,
|
|
90
|
+
},
|
|
91
|
+
file: statementUploadPayload.file != null
|
|
92
|
+
? {
|
|
93
|
+
fileId: statementUploadPayload.file.file_id,
|
|
94
|
+
fileName: statementUploadPayload.file.file_name,
|
|
95
|
+
signedUrl: statementUploadPayload.file.signed_url,
|
|
96
|
+
}
|
|
97
|
+
: null,
|
|
98
|
+
statementMeta: {
|
|
99
|
+
closingBalance: statementUploadPayload.statement_meta.closing_balance,
|
|
100
|
+
openingBalance: statementUploadPayload.statement_meta.opening_balance,
|
|
101
|
+
statementDataStatus: statementUploadPayload.statement_meta.statement_data_status,
|
|
102
|
+
statementEndDate: statementUploadPayload.statement_meta.statement_end_date,
|
|
103
|
+
statementStartDate: statementUploadPayload.statement_meta.statement_start_date,
|
|
104
|
+
statementStatus: statementUploadPayload.statement_meta.statement_status,
|
|
105
|
+
statementUploadId: statementUploadPayload.statement_meta.statement_upload_id,
|
|
106
|
+
totalDeposits: statementUploadPayload.statement_meta.total_deposits,
|
|
107
|
+
totalPayments: statementUploadPayload.statement_meta.total_payments,
|
|
108
|
+
},
|
|
109
|
+
statementTransactions: (statementUploadPayload.statement_transactions ?? []).map((txn) => ({
|
|
110
|
+
amount: txn.amount,
|
|
111
|
+
citations: (txn.citation ?? []).map((c) => ({
|
|
112
|
+
page: c.page,
|
|
113
|
+
pageHeight: c.page_height,
|
|
114
|
+
pageWidth: c.page_width,
|
|
115
|
+
polygon: (c.polygon ?? []).map((point) => ({
|
|
116
|
+
x: point.x,
|
|
117
|
+
y: point.y,
|
|
118
|
+
})),
|
|
119
|
+
referenceText: c.reference_text,
|
|
120
|
+
})),
|
|
121
|
+
isUserAdded: txn.is_user_added,
|
|
122
|
+
isUserEdited: txn.is_user_edited,
|
|
123
|
+
statementTransactionId: txn.statement_transaction_id,
|
|
124
|
+
transactionDate: txn.transaction_date,
|
|
125
|
+
transactionDirection: txn.transaction_direction,
|
|
126
|
+
transactionMemo: txn.transaction_memo,
|
|
127
|
+
})),
|
|
128
|
+
aiSummary: transformAiSummaryPayloadToState(statementUploadPayload.ai_summary),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
function transformPreviousReconciliationInfoToState(payload) {
|
|
132
|
+
if (payload == null) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
endDate: payload.end_date,
|
|
137
|
+
reconciledAt: payload.reconciled_at,
|
|
138
|
+
reconciledByUserId: payload.reconciled_by_user_id,
|
|
139
|
+
reconciliationId: payload.reconciliation_id,
|
|
140
|
+
startDate: payload.start_date,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
function transformAiSummaryPayloadToState(aiSummaryPayload) {
|
|
144
|
+
if (aiSummaryPayload == null) {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
const { chain_status: chainStatus } = aiSummaryPayload;
|
|
148
|
+
return {
|
|
149
|
+
accountIdentified: aiSummaryPayload.account_identified,
|
|
150
|
+
transactionsExtracted: aiSummaryPayload.transactions_extracted,
|
|
151
|
+
exceptionsDetected: aiSummaryPayload.exceptions_detected,
|
|
152
|
+
fieldsCaptured: (aiSummaryPayload.fields_captured ?? []).map((field) => ({
|
|
153
|
+
code: field.code,
|
|
154
|
+
label: field.label,
|
|
155
|
+
})),
|
|
156
|
+
chainStatus: {
|
|
157
|
+
code: chainStatus?.code ?? '',
|
|
158
|
+
label: chainStatus?.label ?? '',
|
|
159
|
+
expectedStartDate: chainStatus?.expected_start_date ?? null,
|
|
160
|
+
previousReconciliationInfo: transformPreviousReconciliationInfoToState(chainStatus?.previous_reconciliation_info),
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Builds date-conflict state from a 409 Confirm & Save response.
|
|
166
|
+
* Returns null for non-409 responses or 409s without a recognized error code.
|
|
167
|
+
*/
|
|
168
|
+
function transformStatementDateConflictToState(response) {
|
|
169
|
+
if (isStatementDateConflictResponse(response) === false) {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
const previousReconciliationInfo = transformPreviousReconciliationInfoToState(response.previous_reconciliation_info);
|
|
173
|
+
if (response.error_code === 'STATEMENT_RANGE_ALREADY_RECONCILED' &&
|
|
174
|
+
previousReconciliationInfo == null) {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
if (response.error_code === 'STATEMENT_RANGE_HAS_GAP' &&
|
|
178
|
+
response.expected_start_date == null &&
|
|
179
|
+
previousReconciliationInfo == null) {
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
errorCode: response.error_code,
|
|
184
|
+
expectedStartDate: response.expected_start_date ?? null,
|
|
185
|
+
...(previousReconciliationInfo != null ? { previousReconciliationInfo } : {}),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function transformParseStatementPayloadToState(payload) {
|
|
189
|
+
return {
|
|
190
|
+
statementUpload: transformStatementUploadPayloadToState(payload.statement_upload),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
function transformUpdateStatementInfoPayloadToState(payload) {
|
|
194
|
+
return {
|
|
195
|
+
statementUpload: transformStatementUploadPayloadToState(payload.statement_upload),
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
function transformStatementUpdateStateToPayload(localData) {
|
|
199
|
+
const { statementMeta, statementTransactions } = localData;
|
|
200
|
+
return {
|
|
201
|
+
statement_meta: {
|
|
202
|
+
opening_balance: statementMeta.openingBalance,
|
|
203
|
+
statement_end_date: statementMeta.statementEndDate,
|
|
204
|
+
statement_start_date: statementMeta.statementStartDate,
|
|
205
|
+
total_deposits: statementMeta.totalDeposits,
|
|
206
|
+
total_payments: statementMeta.totalPayments,
|
|
207
|
+
},
|
|
208
|
+
statement_transactions: {
|
|
209
|
+
added: statementTransactions.added.map((txn) => ({
|
|
210
|
+
amount: txn.amount,
|
|
211
|
+
transaction_date: txn.transactionDate,
|
|
212
|
+
transaction_direction: txn.transactionDirection,
|
|
213
|
+
transaction_memo: txn.transactionMemo,
|
|
214
|
+
})),
|
|
215
|
+
deleted_ids: statementTransactions.deletedIds,
|
|
216
|
+
updated: statementTransactions.updated
|
|
217
|
+
.filter((txn) => txn.statementTransactionId != null)
|
|
218
|
+
.map((txn) => ({
|
|
219
|
+
amount: txn.amount,
|
|
220
|
+
statement_transaction_id: txn.statementTransactionId,
|
|
221
|
+
transaction_date: txn.transactionDate,
|
|
222
|
+
transaction_direction: txn.transactionDirection,
|
|
223
|
+
transaction_memo: txn.transactionMemo,
|
|
224
|
+
})),
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/** API request body for PUT statement-uploads; cast lives here for putAndGetJSON. */
|
|
229
|
+
function toStatementUpdateRequestBody(localData) {
|
|
230
|
+
return transformStatementUpdateStateToPayload(localData);
|
|
231
|
+
}
|
|
@@ -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, ReconReconcileSortKey, ReconReviewSortKey, ReconciliationReviewTabLocalData, ReconciliationTabsState, ReconciliationViewState, ReconciliationViewTabType, SaveReconcileDetailActionPayload, SaveReconciliationDetailFailurePayload, TransactionSummary } from '../types/reconciliationViewState';
|
|
8
|
+
import { AccountReconciliationLocalData, ActionFetchStates, ExcludeAccountFromReconciliationPayload, ParsedStatementData, ReconReconcileSortKey, ReconReviewSortKey, ReconciliationReviewTabLocalData, ReconciliationTabsState, ReconciliationViewState, ReconciliationViewTabType, SaveReconcileDetailActionPayload, SaveReconciliationDetailFailurePayload, 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;
|
|
@@ -52,7 +52,9 @@ export declare const fetchReconciliation: import("@reduxjs/toolkit").ActionCreat
|
|
|
52
52
|
variancePercentage?: number;
|
|
53
53
|
}, "expenseAutomationReconciliationView/updateBalancesLocalData">, initialiseLocalDataForSelectedAccountId: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"expenseAutomationReconciliationView/initialiseLocalDataForSelectedAccountId">, clearExpenseAutomationReconciliationView: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"expenseAutomationReconciliationView/clearExpenseAutomationReconciliationView">, updateSelectedDrawerAccountId: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
54
54
|
selectedDrawerAccountId?: ID;
|
|
55
|
-
}, "expenseAutomationReconciliationView/updateSelectedDrawerAccountId">,
|
|
55
|
+
}, "expenseAutomationReconciliationView/updateSelectedDrawerAccountId">, updateStatementProcessingFailed: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
56
|
+
statementProcessingFailed: boolean;
|
|
57
|
+
}, "expenseAutomationReconciliationView/updateStatementProcessingFailed">, updateReviewTabSortState: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
56
58
|
sortKey: ReconReviewSortKey;
|
|
57
59
|
sortOrder: SortOrder;
|
|
58
60
|
}, "expenseAutomationReconciliationView/updateReviewTabSortState">, initializeReconciliationReviewTabLocalData: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[localData: Record<string, ReconciliationReviewTabLocalData>], {
|
|
@@ -108,7 +110,55 @@ export declare const fetchReconciliation: import("@reduxjs/toolkit").ActionCreat
|
|
|
108
110
|
accountId: ID;
|
|
109
111
|
error: ZeniAPIStatus;
|
|
110
112
|
selectedPeriod: MonthYearPeriod;
|
|
111
|
-
}, "expenseAutomationReconciliationView/uploadAccountStatementFailure">,
|
|
113
|
+
}, "expenseAutomationReconciliationView/uploadAccountStatementFailure">, parseStatement: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
114
|
+
accountId: ID;
|
|
115
|
+
selectedPeriod: MonthYearPeriod;
|
|
116
|
+
statementUploadId: ID;
|
|
117
|
+
}, "expenseAutomationReconciliationView/parseStatement">, parseStatementSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
118
|
+
accountId: ID;
|
|
119
|
+
selectedPeriod: MonthYearPeriod;
|
|
120
|
+
}, "expenseAutomationReconciliationView/parseStatementSuccess">, parseStatementFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
121
|
+
accountId: ID;
|
|
122
|
+
error: ZeniAPIStatus;
|
|
123
|
+
selectedPeriod: MonthYearPeriod;
|
|
124
|
+
}, "expenseAutomationReconciliationView/parseStatementFailure">, reparseStatement: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
125
|
+
accountId: ID;
|
|
126
|
+
selectedPeriod: MonthYearPeriod;
|
|
127
|
+
statementUploadId: ID;
|
|
128
|
+
}, "expenseAutomationReconciliationView/reparseStatement">, reparseStatementSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
129
|
+
accountId: ID;
|
|
130
|
+
selectedPeriod: MonthYearPeriod;
|
|
131
|
+
}, "expenseAutomationReconciliationView/reparseStatementSuccess">, reparseStatementFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
132
|
+
accountId: ID;
|
|
133
|
+
error: ZeniAPIStatus;
|
|
134
|
+
selectedPeriod: MonthYearPeriod;
|
|
135
|
+
}, "expenseAutomationReconciliationView/reparseStatementFailure">, resetReparseStatementStatus: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
136
|
+
accountId: ID;
|
|
137
|
+
selectedPeriod: MonthYearPeriod;
|
|
138
|
+
}, "expenseAutomationReconciliationView/resetReparseStatementStatus">, updateParsedStatementData: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
139
|
+
accountId: ID;
|
|
140
|
+
parsedStatementData: ParsedStatementData;
|
|
141
|
+
selectedPeriod: MonthYearPeriod;
|
|
142
|
+
}, "expenseAutomationReconciliationView/updateParsedStatementData">, updateStatementUpdateLocalData: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
143
|
+
accountId: ID;
|
|
144
|
+
selectedPeriod: MonthYearPeriod;
|
|
145
|
+
statementUpdateLocalData: StatementUpdateLocalData;
|
|
146
|
+
}, "expenseAutomationReconciliationView/updateStatementUpdateLocalData">, submitStatementUpdate: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
147
|
+
accountId: ID;
|
|
148
|
+
selectedPeriod: MonthYearPeriod;
|
|
149
|
+
statementUploadId: ID;
|
|
150
|
+
}, "expenseAutomationReconciliationView/submitStatementUpdate">, submitStatementUpdateSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
151
|
+
accountId: ID;
|
|
152
|
+
selectedPeriod: MonthYearPeriod;
|
|
153
|
+
}, "expenseAutomationReconciliationView/submitStatementUpdateSuccess">, submitStatementUpdateFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
154
|
+
accountId: ID;
|
|
155
|
+
error: ZeniAPIStatus;
|
|
156
|
+
selectedPeriod: MonthYearPeriod;
|
|
157
|
+
dateConflict?: StatementDateConflict | null;
|
|
158
|
+
}, "expenseAutomationReconciliationView/submitStatementUpdateFailure">, clearStatementDateConflict: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
159
|
+
accountId: ID;
|
|
160
|
+
selectedPeriod: MonthYearPeriod;
|
|
161
|
+
}, "expenseAutomationReconciliationView/clearStatementDateConflict">, updateStatementUploadChosen: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
112
162
|
statementUploadChosen: boolean;
|
|
113
163
|
}, "expenseAutomationReconciliationView/updateStatementUploadChosen">, updateNodeCollapseState: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
114
164
|
collapsed: boolean;
|