@zeniai/client-epic-state 4.19.37-betaVR8 → 4.19.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  2. package/lib/entity/snackbar/snackbarTypes.js +0 -1
  3. package/lib/epic.d.ts +1 -9
  4. package/lib/epic.js +1 -9
  5. package/lib/esm/entity/snackbar/snackbarTypes.js +0 -1
  6. package/lib/esm/epic.js +1 -9
  7. package/lib/esm/index.js +2 -4
  8. package/lib/esm/view/expenseAutomationView/payload/missingReceiptsPayload.js +1 -100
  9. package/lib/esm/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +1 -264
  10. package/lib/esm/view/expenseAutomationView/selectors/missingReceiptsSelector.js +1 -128
  11. package/lib/esm/zeniAPI.js +3 -41
  12. package/lib/index.d.ts +5 -7
  13. package/lib/index.js +30 -58
  14. package/lib/tsconfig.typecheck.tsbuildinfo +1 -0
  15. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  16. package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.d.ts +0 -108
  17. package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.js +0 -107
  18. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.d.ts +3 -51
  19. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +2 -265
  20. package/lib/view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes.d.ts +1 -61
  21. package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.d.ts +1 -1
  22. package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.js +0 -127
  23. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.d.ts +0 -104
  24. package/lib/zeniAPI.d.ts +0 -9
  25. package/lib/zeniAPI.js +2 -40
  26. package/package.json +2 -2
  27. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +0 -24
  28. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.js +0 -49
  29. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.js +0 -31
  30. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +0 -41
  31. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +0 -57
  32. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.js +0 -35
  33. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +0 -27
  34. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +0 -41
  35. package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.d.ts +0 -15
  36. package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +0 -28
  37. package/lib/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.d.ts +0 -7
  38. package/lib/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.js +0 -53
  39. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.d.ts +0 -8
  40. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.js +0 -35
  41. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.d.ts +0 -7
  42. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +0 -45
  43. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.d.ts +0 -8
  44. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +0 -61
  45. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.d.ts +0 -8
  46. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.js +0 -39
  47. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.d.ts +0 -6
  48. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +0 -31
  49. package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.d.ts +0 -15
  50. package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +0 -46
@@ -1,28 +1,6 @@
1
1
  import { createSlice } from '@reduxjs/toolkit';
2
2
  import { toMonthYearPeriodId } from '../../../commonStateTypes/timePeriod';
3
- export const initialBulkUploadState = {
4
- batchDetailsById: {},
5
- batchListByPeriod: {},
6
- batchListFetchState: { fetchState: 'Not-Started', error: undefined },
7
- batchStatusById: {},
8
- completedSubTab: 'all',
9
- completedTransactionsByPeriod: {},
10
- confirmMatchStatus: { fetchState: 'Not-Started', error: undefined },
11
- currentBatchId: undefined,
12
- currentResultsTab: 'unmatched',
13
- manualSearch: {
14
- fetchState: { fetchState: 'Not-Started', error: undefined },
15
- results: [],
16
- searchQuery: '',
17
- },
18
- phase: 'idle',
19
- sortKey: 'date',
20
- sortOrder: 'descending',
21
- uploadProgress: 0,
22
- uploadStatus: { fetchState: 'Not-Started', error: undefined },
23
- };
24
3
  export const initialState = {
25
- bulkUpload: initialBulkUploadState,
26
4
  uploadReceiptStatusById: {},
27
5
  refreshStatus: {
28
6
  fetchState: 'Not-Started',
@@ -142,248 +120,7 @@ const expenseAutomationMissingReceiptsView = createSlice({
142
120
  clearExpenseAutomationMissingReceiptsView(draft) {
143
121
  Object.assign(draft, initialState);
144
122
  },
145
- // -- Bulk Upload Actions --
146
- bulkUploadReceipts: {
147
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
148
- reducer(draft, _action) {
149
- draft.bulkUpload.phase = 'uploading';
150
- draft.bulkUpload.uploadProgress = 0;
151
- draft.bulkUpload.uploadStatus = {
152
- fetchState: 'In-Progress',
153
- error: undefined,
154
- };
155
- },
156
- prepare(files) {
157
- return { payload: { files } };
158
- },
159
- },
160
- updateBulkUploadProgress(draft, action) {
161
- draft.bulkUpload.uploadProgress = action.payload;
162
- },
163
- bulkUploadReceiptsSuccess(draft, action) {
164
- draft.bulkUpload.currentBatchId = action.payload.batchId;
165
- draft.bulkUpload.uploadStatus = {
166
- fetchState: 'Completed',
167
- error: undefined,
168
- };
169
- draft.bulkUpload.phase = 'matching';
170
- },
171
- bulkUploadReceiptsFailure(draft, action) {
172
- draft.bulkUpload.uploadStatus = {
173
- fetchState: 'Error',
174
- error: action.payload.error,
175
- };
176
- draft.bulkUpload.phase = 'idle';
177
- },
178
- updateBulkUploadBatchStatus(draft, action) {
179
- const batchStatus = action.payload;
180
- draft.bulkUpload.batchStatusById[batchStatus.batchId] = batchStatus;
181
- },
182
- pusherBatchStatusUpdate(draft, action) {
183
- const batchStatus = action.payload;
184
- draft.bulkUpload.batchStatusById[batchStatus.batchId] = batchStatus;
185
- },
186
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
187
- fetchBulkUploadBatchDetails(_draft) {
188
- // trigger epic, no state change needed
189
- },
190
- fetchBulkUploadBatchDetailsSuccess(draft, action) {
191
- const details = action.payload;
192
- draft.bulkUpload.batchDetailsById[details.batchId] = details;
193
- draft.bulkUpload.phase = 'completed';
194
- },
195
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
196
- fetchBulkUploadBatchDetailsFailure(draft, _action) {
197
- draft.bulkUpload.phase = 'completed';
198
- },
199
- storeBatchDetails(draft, action) {
200
- const details = action.payload;
201
- draft.bulkUpload.batchDetailsById[details.batchId] = details;
202
- },
203
- fetchBulkUploadBatches: {
204
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
205
- reducer(draft, _action) {
206
- draft.bulkUpload.batchListFetchState = {
207
- fetchState: 'In-Progress',
208
- error: undefined,
209
- };
210
- },
211
- prepare(cacheOverride = false) {
212
- return { payload: { cacheOverride } };
213
- },
214
- },
215
- fetchBulkUploadBatchesSuccess(draft, action) {
216
- const periodId = toMonthYearPeriodId(action.payload.selectedPeriod);
217
- draft.bulkUpload.batchListByPeriod[periodId] = action.payload.batchList;
218
- draft.bulkUpload.batchListFetchState = {
219
- fetchState: 'Completed',
220
- error: undefined,
221
- };
222
- },
223
- fetchBulkUploadBatchesFailure(draft, action) {
224
- draft.bulkUpload.batchListFetchState = {
225
- fetchState: 'Error',
226
- error: action.payload.error,
227
- };
228
- },
229
- confirmBulkUploadMatch: {
230
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
231
- reducer(draft, _action) {
232
- draft.bulkUpload.confirmMatchStatus = {
233
- fetchState: 'In-Progress',
234
- error: undefined,
235
- };
236
- },
237
- prepare(batchId, attachmentId, transactionId, transactionType, fileName) {
238
- return { payload: { batchId, attachmentId, transactionId, transactionType, fileName } };
239
- },
240
- },
241
- confirmBulkUploadMatchSuccess(draft, action) {
242
- const { batchId, attachmentId, transactionId } = action.payload;
243
- draft.bulkUpload.confirmMatchStatus = {
244
- fetchState: 'Completed',
245
- error: undefined,
246
- };
247
- const details = draft.bulkUpload.batchDetailsById[batchId];
248
- if (details != null) {
249
- const file = details.files.find((f) => f.attachmentId === attachmentId);
250
- if (file != null) {
251
- const originalStatus = file.status;
252
- file.status = 'matched';
253
- file.matchedTransactionId = transactionId;
254
- file.candidates = undefined;
255
- details.summary.matched += 1;
256
- if (originalStatus === 'no_match') {
257
- details.summary.noMatch = Math.max(0, details.summary.noMatch - 1);
258
- }
259
- else {
260
- details.summary.possibleMatches = Math.max(0, details.summary.possibleMatches - 1);
261
- }
262
- }
263
- }
264
- },
265
- confirmBulkUploadMatchFailure(draft, action) {
266
- draft.bulkUpload.confirmMatchStatus = {
267
- fetchState: 'Error',
268
- error: action.payload.error,
269
- };
270
- },
271
- setBulkUploadResultsTab(draft, action) {
272
- draft.bulkUpload.currentResultsTab = action.payload;
273
- },
274
- setBulkUploadCompletedSubTab(draft, action) {
275
- draft.bulkUpload.completedSubTab = action.payload;
276
- draft.bulkUpload.completedTransactionsByPeriod = {};
277
- },
278
- setBulkUploadSortConfig(draft, action) {
279
- draft.bulkUpload.sortKey = action.payload.sortKey;
280
- draft.bulkUpload.sortOrder = action.payload.sortOrder;
281
- },
282
- clearBulkUpload(draft) {
283
- Object.assign(draft.bulkUpload, initialBulkUploadState);
284
- },
285
- searchTransactionsForManualMatch: {
286
- reducer(draft, action) {
287
- draft.bulkUpload.manualSearch.searchQuery = action.payload.query;
288
- draft.bulkUpload.manualSearch.fetchState = {
289
- fetchState: 'In-Progress',
290
- error: undefined,
291
- };
292
- draft.bulkUpload.manualSearch.results = [];
293
- },
294
- prepare(query) {
295
- return { payload: { query } };
296
- },
297
- },
298
- searchTransactionsForManualMatchSuccess(draft, action) {
299
- draft.bulkUpload.manualSearch.results = action.payload;
300
- draft.bulkUpload.manualSearch.fetchState = {
301
- fetchState: 'Completed',
302
- error: undefined,
303
- };
304
- },
305
- searchTransactionsForManualMatchFailure(draft, action) {
306
- draft.bulkUpload.manualSearch.fetchState = {
307
- fetchState: 'Error',
308
- error: action.payload.error,
309
- };
310
- },
311
- clearManualSearchResults(draft) {
312
- draft.bulkUpload.manualSearch = initialBulkUploadState.manualSearch;
313
- },
314
- // -- Completed Transactions Actions --
315
- fetchCompletedTransactions: {
316
- reducer(draft, action) {
317
- const { pageToken } = action.payload;
318
- if (pageToken != null) {
319
- const periods = draft.bulkUpload.completedTransactionsByPeriod;
320
- for (const entry of Object.values(periods)) {
321
- if (entry.nextPageToken === pageToken) {
322
- entry.fetchState = {
323
- fetchState: 'In-Progress',
324
- error: undefined,
325
- };
326
- break;
327
- }
328
- }
329
- }
330
- },
331
- prepare(pageToken) {
332
- return { payload: { pageToken } };
333
- },
334
- },
335
- fetchCompletedTransactionsSuccess(draft, action) {
336
- const { transactionIds, nextPageToken, totalCount, selectedPeriod, isInitialLoad } = action.payload;
337
- const periodId = toMonthYearPeriodId(selectedPeriod);
338
- if (isInitialLoad) {
339
- draft.bulkUpload.completedTransactionsByPeriod[periodId] = {
340
- transactionIds,
341
- nextPageToken,
342
- totalCount,
343
- fetchState: { fetchState: 'Completed', error: undefined },
344
- };
345
- }
346
- else {
347
- const existing = draft.bulkUpload.completedTransactionsByPeriod[periodId];
348
- if (existing != null) {
349
- existing.transactionIds.push(...transactionIds);
350
- existing.nextPageToken = nextPageToken;
351
- existing.totalCount = totalCount;
352
- existing.fetchState = { fetchState: 'Completed', error: undefined };
353
- }
354
- else {
355
- draft.bulkUpload.completedTransactionsByPeriod[periodId] = {
356
- transactionIds,
357
- nextPageToken,
358
- totalCount,
359
- fetchState: { fetchState: 'Completed', error: undefined },
360
- };
361
- }
362
- }
363
- },
364
- fetchCompletedTransactionsFailure(draft, action) {
365
- const periodId = toMonthYearPeriodId(action.payload.selectedPeriod);
366
- const existing = draft.bulkUpload.completedTransactionsByPeriod[periodId];
367
- if (existing != null) {
368
- existing.fetchState = {
369
- fetchState: 'Error',
370
- error: action.payload.error,
371
- };
372
- }
373
- else {
374
- draft.bulkUpload.completedTransactionsByPeriod[periodId] = {
375
- fetchState: { fetchState: 'Error', error: action.payload.error },
376
- nextPageToken: null,
377
- totalCount: 0,
378
- transactionIds: [],
379
- };
380
- }
381
- },
382
123
  },
383
124
  });
384
- export const { fetchMissingReceipts, fetchMissingReceiptsSuccess, fetchMissingReceiptsFailure, uploadMissingReceiptSuccess, updateMissingReceiptUploadState, updateMissingReceiptsUIState, markMissingReceiptAsDone, clearExpenseAutomationMissingReceiptsView,
385
- // Bulk Upload
386
- bulkUploadReceipts, updateBulkUploadProgress, bulkUploadReceiptsSuccess, bulkUploadReceiptsFailure, updateBulkUploadBatchStatus, pusherBatchStatusUpdate, fetchBulkUploadBatchDetails, fetchBulkUploadBatchDetailsSuccess, fetchBulkUploadBatchDetailsFailure, storeBatchDetails, fetchBulkUploadBatches, fetchBulkUploadBatchesSuccess, fetchBulkUploadBatchesFailure, confirmBulkUploadMatch, confirmBulkUploadMatchSuccess, confirmBulkUploadMatchFailure, setBulkUploadResultsTab, setBulkUploadCompletedSubTab, setBulkUploadSortConfig, clearBulkUpload, searchTransactionsForManualMatch, searchTransactionsForManualMatchSuccess, searchTransactionsForManualMatchFailure, clearManualSearchResults,
387
- // Completed Transactions
388
- fetchCompletedTransactions, fetchCompletedTransactionsSuccess, fetchCompletedTransactionsFailure, } = expenseAutomationMissingReceiptsView.actions;
125
+ export const { fetchMissingReceipts, fetchMissingReceiptsSuccess, fetchMissingReceiptsFailure, uploadMissingReceiptSuccess, updateMissingReceiptUploadState, updateMissingReceiptsUIState, markMissingReceiptAsDone, clearExpenseAutomationMissingReceiptsView, } = expenseAutomationMissingReceiptsView.actions;
389
126
  export default expenseAutomationMissingReceiptsView.reducer;
@@ -1,7 +1,7 @@
1
1
  import orderBy from 'lodash/orderBy';
2
2
  import { toMonthYearPeriodId } from '../../../commonStateTypes/timePeriod';
3
3
  import { getCurrentTenant } from '../../../entity/tenant/tenantSelector';
4
- import { getSupportedTransactionById, getSupportedTransactionsByIds, } from '../../../entity/transaction/transactionSelector';
4
+ import { getSupportedTransactionsByIds } from '../../../entity/transaction/transactionSelector';
5
5
  import { getAllSteps } from '../selectorTypes/expenseAutomationViewSelectorTypes';
6
6
  export function getExpenseAutomationMissingReceiptsView(state) {
7
7
  const { expenseAutomationMissingReceiptsViewState, expenseAutomationViewState, transactionState, monthEndCloseChecksState, } = state;
@@ -47,79 +47,6 @@ export function getExpenseAutomationMissingReceiptsView(state) {
47
47
  const completionStatus = missingReceiptsCompletionStatus != null
48
48
  ? missingReceiptsCompletionStatus
49
49
  : 'incomplete';
50
- const { bulkUpload } = expenseAutomationMissingReceiptsViewState;
51
- const currentBatchStatus = bulkUpload.currentBatchId != null
52
- ? bulkUpload.batchStatusById[bulkUpload.currentBatchId]
53
- : undefined;
54
- const currentBatchDetails = bulkUpload.currentBatchId != null
55
- ? bulkUpload.batchDetailsById[bulkUpload.currentBatchId]
56
- : undefined;
57
- const resolvedFiles = currentBatchDetails?.files.map((file) => resolveBatchFile(file, transactionState));
58
- const getSortValue = (file) => {
59
- const t = file.matchedTransaction;
60
- if (t == null) {
61
- return null;
62
- }
63
- switch (bulkUpload.sortKey) {
64
- case 'vendor':
65
- return (t.vendorName ?? t.description)?.toLowerCase() ?? null;
66
- case 'category': {
67
- const line = t.lines?.[0];
68
- return line?.account?.accountName?.toLowerCase() ?? null;
69
- }
70
- case 'class': {
71
- const line = t.lines?.[0];
72
- return line?.class?.className?.toLowerCase() ?? null;
73
- }
74
- case 'date':
75
- return t.date.valueOf();
76
- case 'amount':
77
- return t.amount.amount;
78
- default:
79
- return null;
80
- }
81
- };
82
- const bulkUploadSortDirection = bulkUpload.sortOrder === 'ascending' ? 'asc' : 'desc';
83
- const matchedFiles = orderBy(resolvedFiles?.filter((f) => f.status === 'matched') ?? [], getSortValue, bulkUploadSortDirection);
84
- const unmatchedFiles = orderBy(resolvedFiles?.filter((f) => f.status === 'un_matched' || f.status === 'no_match') ?? [], getSortValue, bulkUploadSortDirection);
85
- const progress = currentBatchStatus != null
86
- ? {
87
- ...currentBatchStatus.progress,
88
- percentage: currentBatchStatus.progress.total > 0
89
- ? Math.round((currentBatchStatus.progress.processed /
90
- currentBatchStatus.progress.total) *
91
- 100)
92
- : 0,
93
- }
94
- : { total: 0, processed: 0, percentage: 0 };
95
- const batchList = monthYearPeriodId != null
96
- ? bulkUpload.batchListByPeriod[monthYearPeriodId] ?? []
97
- : [];
98
- const batchListFetchState = bulkUpload.batchListFetchState;
99
- const pastBatches = batchList.filter((b) => b.batchId !== bulkUpload.currentBatchId);
100
- const pastUnmatchedFiles = pastBatches.flatMap((b) => {
101
- const details = bulkUpload.batchDetailsById[b.batchId];
102
- if (details == null) {
103
- return [];
104
- }
105
- return details.files
106
- .filter((f) => f.status === 'un_matched' || f.status === 'no_match')
107
- .map((f) => resolveBatchFile(f, transactionState));
108
- });
109
- const completedTransactionsForPeriod = monthYearPeriodId != null
110
- ? bulkUpload.completedTransactionsByPeriod[monthYearPeriodId]
111
- : undefined;
112
- const completedTransactionIds = completedTransactionsForPeriod?.transactionIds ?? [];
113
- const resolvedCompletedTransactions = getSupportedTransactionsByIds(transactionState, completedTransactionIds);
114
- const resolvedBatchDetails = currentBatchDetails != null && resolvedFiles != null
115
- ? {
116
- batchId: currentBatchDetails.batchId,
117
- createdAt: currentBatchDetails.createdAt,
118
- files: resolvedFiles,
119
- status: currentBatchDetails.status,
120
- summary: currentBatchDetails.summary,
121
- }
122
- : undefined;
123
50
  return {
124
51
  fetchState,
125
52
  error,
@@ -128,59 +55,5 @@ export function getExpenseAutomationMissingReceiptsView(state) {
128
55
  refreshStatus,
129
56
  transactions: sortedTransactions,
130
57
  completionStatus,
131
- bulkUpload: {
132
- phase: bulkUpload.phase,
133
- uploadStatus: bulkUpload.uploadStatus,
134
- batchStatus: currentBatchStatus,
135
- batchDetails: resolvedBatchDetails,
136
- completedSubTab: bulkUpload.completedSubTab,
137
- completedTransactions: {
138
- fetchState: completedTransactionsForPeriod?.fetchState ?? {
139
- fetchState: 'Not-Started',
140
- error: undefined,
141
- },
142
- nextPageToken: completedTransactionsForPeriod?.nextPageToken ?? null,
143
- totalCount: completedTransactionsForPeriod?.totalCount ?? 0,
144
- transactions: resolvedCompletedTransactions,
145
- },
146
- matchedFiles,
147
- unmatchedFiles,
148
- progress,
149
- currentResultsTab: bulkUpload.currentResultsTab,
150
- sortKey: bulkUpload.sortKey,
151
- sortOrder: bulkUpload.sortOrder,
152
- batchList,
153
- batchListFetchState,
154
- pastBatches,
155
- pastUnmatchedFiles,
156
- confirmMatchStatus: bulkUpload.confirmMatchStatus,
157
- manualSearch: bulkUpload.manualSearch,
158
- uploadProgress: bulkUpload.uploadProgress,
159
- },
160
- };
161
- }
162
- function resolveBatchFile(file, transactionState) {
163
- const matchedTransaction = file.matchedTransactionId != null
164
- ? getSupportedTransactionById(transactionState, file.matchedTransactionId)
165
- : undefined;
166
- const candidates = file.candidates
167
- ?.map((ref) => {
168
- const transaction = getSupportedTransactionById(transactionState, ref.transactionId);
169
- return transaction != null
170
- ? { transaction, matchScore: ref.matchScore }
171
- : undefined;
172
- })
173
- .filter((c) => c != null);
174
- return {
175
- attachmentId: file.attachmentId,
176
- fileId: file.fileId,
177
- filename: file.filename,
178
- filePreviewUrl: file.filePreviewUrl,
179
- status: file.status,
180
- matchedTransaction,
181
- candidates: candidates != null && candidates.length > 0
182
- ? candidates
183
- : undefined,
184
- matchSource: file.matchSource,
185
58
  };
186
59
  }
@@ -1,5 +1,5 @@
1
1
  import { fetch } from 'cross-fetch';
2
- import { Observable, from } from 'rxjs';
2
+ import { from } from 'rxjs';
3
3
  import { isInvalidSessionError } from './responsePayload';
4
4
  export class ZeniAPIClient {
5
5
  constructor(apiEndPoints, userId, sessionId, tenantId, onSessionInvalidated) {
@@ -79,6 +79,8 @@ export class ZeniAPIClient {
79
79
  return from(promise);
80
80
  }
81
81
  postFormData(restEndPoint, formData, signal) {
82
+ // Use apiHeaders for auth headers, then remove Content-Type
83
+ // so the browser sets multipart/form-data with the correct boundary
82
84
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
83
85
  const { 'Content-Type': _contentType, ...headers } = this.apiHeaders();
84
86
  const promise = fetch(restEndPoint, {
@@ -89,46 +91,6 @@ export class ZeniAPIClient {
89
91
  }).then((response) => this.processJsonResponse(response));
90
92
  return from(promise);
91
93
  }
92
- postFormDataWithProgress(restEndPoint, formData, signal) {
93
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
94
- const { 'Content-Type': _ct, ...headers } = this.apiHeaders();
95
- return new Observable((subscriber) => {
96
- const xhr = new XMLHttpRequest();
97
- xhr.upload.onprogress = (event) => {
98
- if (event.lengthComputable) {
99
- const percentage = Math.round((event.loaded / event.total) * 100);
100
- subscriber.next({ type: 'progress', percentage });
101
- }
102
- };
103
- xhr.onload = () => {
104
- try {
105
- const json = JSON.parse(xhr.responseText);
106
- this.checkSessionValidity(json);
107
- subscriber.next({ type: 'response', data: json });
108
- subscriber.complete();
109
- }
110
- catch (e) {
111
- subscriber.error(e);
112
- }
113
- };
114
- xhr.onerror = () => {
115
- subscriber.error(new Error('Upload failed'));
116
- };
117
- xhr.open('POST', restEndPoint);
118
- Object.entries(headers).forEach(([key, value]) => {
119
- xhr.setRequestHeader(key, String(value));
120
- });
121
- xhr.send(formData);
122
- if (signal != null) {
123
- signal.addEventListener('abort', () => xhr.abort());
124
- }
125
- return () => {
126
- if (xhr.readyState !== XMLHttpRequest.DONE) {
127
- xhr.abort();
128
- }
129
- };
130
- });
131
- }
132
94
  deleteAndGetJSON(restEndPoint, body, headers, signal) {
133
95
  let apiHeaders = this.apiHeaders(headers);
134
96
  if (body != null) {
package/lib/index.d.ts CHANGED
@@ -263,14 +263,14 @@ import { MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLine
263
263
  import { UploadStatementDocumentAIPayload, UploadStatementDocumentAIResponse } from './view/expenseAutomationView/payload/reconciliationPayload';
264
264
  import { clearExpenseAutomationFluxAnalysisView, fetchFluxAnalysisView, reviewFluxAnalysisView, updateFluxAnalysisViewPageMetaData, updateFluxAnalysisViewUIState, updateOperatingExpensesIdsForReview, updateSelectedSectionIdsForReview } from './view/expenseAutomationView/reducers/fluxAnalysisViewReducer';
265
265
  import { clearJeScheduleLocalData as clearExpenseAutomationJEScheduleLocalData, clearExpenseAutomationJESchedulesView, fetchJeSchedulesPage as fetchExpenseAutomationJESchedulesPage, ignoreRecommendedJeSchedule as ignoreExpenseAutomationJESchedule, initializeAccountSettingsView as initializeJeAccountSettingsView, initializeJeScheduleLocalData, removeJeScheduleTransactionKey, retryJeSchedule as retryExpenseAutomationJESchedule, saveAccountSettings as saveJeAccountSettings, saveAccountSettingsLocalData as saveJeAccountSettingsLocalData, updateJeScheduleLocalDataById, updateJeScheduleTransactionKeys } from './view/expenseAutomationView/reducers/jeSchedulesViewReducer';
266
- import { bulkUploadReceipts, bulkUploadReceiptsFailure, bulkUploadReceiptsSuccess, clearBulkUpload, confirmBulkUploadMatch, confirmBulkUploadMatchFailure, confirmBulkUploadMatchSuccess, fetchBulkUploadBatchDetails, fetchBulkUploadBatchDetailsFailure, fetchBulkUploadBatchDetailsSuccess, storeBatchDetails, fetchBulkUploadBatches, fetchBulkUploadBatchesFailure, fetchBulkUploadBatchesSuccess, fetchMissingReceipts as fetchExpenseAutomationMissingReceipts, markMissingReceiptAsDone as markExpenseAutomationMissingReceiptAsDone, pusherBatchStatusUpdate, setBulkUploadResultsTab, setBulkUploadCompletedSubTab, setBulkUploadSortConfig, searchTransactionsForManualMatch, searchTransactionsForManualMatchSuccess, searchTransactionsForManualMatchFailure, clearManualSearchResults, fetchCompletedTransactions, fetchCompletedTransactionsSuccess, fetchCompletedTransactionsFailure, updateBulkUploadBatchStatus, updateBulkUploadProgress, updateMissingReceiptUploadState as updateExpenseAutomationMissingReceiptUploadState, updateMissingReceiptsUIState as updateExpenseAutomationMissingReceiptsUIState, uploadMissingReceiptSuccess as uploadExpenseAutomationMissingReceiptSuccess } from './view/expenseAutomationView/reducers/missingReceiptsViewReducer';
266
+ import { fetchMissingReceipts as fetchExpenseAutomationMissingReceipts, markMissingReceiptAsDone as markExpenseAutomationMissingReceiptAsDone, updateMissingReceiptUploadState as updateExpenseAutomationMissingReceiptUploadState, updateMissingReceiptsUIState as updateExpenseAutomationMissingReceiptsUIState, uploadMissingReceiptSuccess as uploadExpenseAutomationMissingReceiptSuccess } from './view/expenseAutomationView/reducers/missingReceiptsViewReducer';
267
267
  import { deleteAccountStatement, fetchReconciliation as fetchReconciliationView, saveReconciliationDetail as saveExpenseAutomationReconciliationDetail, saveReconciliationReview as saveExpenseAutomationReconciliationReview, setConnectionInProgressForAccount as setConnectionInProgressForAccountReconciliation, setStatementParseInProgress, updateAccountReconciliationLocalData as updateExpenseAutomationAccountReconciliationLocalData, updateSelectedAccountId as updateExpenseAutomationAccountReconciliationSelectedAccountId, updateSelectedTab as updateExpenseAutomationAccountReconciliationSelectedTab, updateReconListScrollPosition as updateExpenseAutomationReconListScrollPosition, updateReviewTabSortState as updateExpenseAutomationReconReviewTabListSortState, updateReviewTabLocalData as updateExpenseAutomationReconReviewTabLocalData, updateReconcileTabListScrollState as updateExpenseAutomationReconcileTabListScrollState, updateReconcileTabListSortState as updateExpenseAutomationReconcileTabListSortState, updateReconcileTabLocalData as updateExpenseAutomationReconcileTabLocalData, updateSelectedDrawerAccountId as updateExpenseAutomationSelectedDrawerAccountId, updateStatementUploadChosen, uploadAccountStatement } from './view/expenseAutomationView/reducers/reconciliationViewReducer';
268
268
  import { clearExpenseAutomationTransactionsView, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization, updateCurrentSelectedTransactionCategorizationTab, updateSelectedCheckboxTransactionIds, updateSelectedCustomerForTransaction, updateSelectedTransactionId, updateSelectedVendorForTransaction, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, updateTransactionCategorizationUIState } from './view/expenseAutomationView/reducers/transactionsViewReducer';
269
269
  import { ExpenseAutomationStepDetails, ExpenseAutomationViewSelector } from './view/expenseAutomationView/selectorTypes/expenseAutomationViewSelectorTypes';
270
270
  import { ExpenseAutomationFluxAnalysisViewSelector, FluxAnalysisOperatingExpenseView, FluxAnalysisSectionType, FluxAnalysisVendorView, FluxAnalysisViewSectionReport, FluxVendorAccountsAndClassesView } from './view/expenseAutomationView/selectorTypes/fluxAnalysisViewSelectorTypes';
271
271
  import { JEAccountSettingsView } from './view/expenseAutomationView/selectorTypes/jeAccountSettingsViewSelectorTypes';
272
272
  import { ExpenseAutomationJESchedulesViewSelector } from './view/expenseAutomationView/selectorTypes/jeSchedulesSelectorTypes';
273
- import { BulkUploadSelectorData, ExpenseAutomationMissingReceiptsViewSelector } from './view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes';
273
+ import { ExpenseAutomationMissingReceiptsViewSelector } from './view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes';
274
274
  import { AccountReconSectionID, AccountReconciliationByAccount, AccountReconciliationBySection, ExpenseAutomationReconciliationViewSelector } from './view/expenseAutomationView/selectorTypes/reconciliationViewSelectorTypes';
275
275
  import { ExpenseAutomationTransactionViewSelector, TransactionReviewLocalDataSelectorView } from './view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes';
276
276
  import { getExpenseAutomationFluxAnalysisView } from './view/expenseAutomationView/selectors/fluxAnalysisViewSelector';
@@ -279,8 +279,6 @@ import { getExpenseAutomationReconciliationView, isAccountReconReport } from './
279
279
  import { getExpenseAutomationTransactionView } from './view/expenseAutomationView/selectors/transactionCategorizationSelector';
280
280
  import { FluxAnalysisActionType, FluxAnalysisReviewStatus, FluxAnalysisSortKey, FluxAnalysisViewUIState, FluxBalancesByMonth } from './view/expenseAutomationView/types/fluxAnalysisViewState';
281
281
  import { AccountSettingsLocalData, JEScheduleLocalData } from './view/expenseAutomationView/types/jeSchedulesViewState';
282
- import { BatchDetails, BatchFile, BatchFileStatus, BatchListItem, BatchStatus, BatchStatusValue, BatchSummary, BulkUploadPhase, BulkUploadResultsTab, BulkUploadSortKey, BulkUploadState, CandidateRef, CompletedSubTab, MatchCandidate, MatchSource, MissingReceiptsTab } from './view/expenseAutomationView/types/missingReceiptsViewState';
283
- import { CompletedTransactionsSelectorData, ResolvedBatchFile, ResolvedCandidate, ResolvedBatchDetails } from './view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes';
284
282
  import { MissingReceiptsSortKey as ExpenseAutomationMissingReceiptsSortKey, MissingReceiptsViewState as ExpenseAutomationMissingReceiptsViewState, MissingReceiptsViewUIState as ExpenseAutomationMissingReceiptsViewUIState, toMissingReceiptsSortKey as toExpenseAutomationMissingReceiptsSortKey } from './view/expenseAutomationView/types/missingReceiptsViewState';
285
283
  import { AccountReconciliationLocalData, ReconciliationViewTabType as ExpenseAutomationReconciliationViewTab, ReconReconcileSortKey, ReconReviewSortKey, ReconciliationReconcileTabLocalData, ReconciliationReviewTabLocalData, SaveReconcileDetailActionPayload as SaveExpenseAutomationReconciliationActionType, toReconciliationTabsType } from './view/expenseAutomationView/types/reconciliationViewState';
286
284
  import { TransactionsTab as ExpenseAutomationTransactionsTab, TransactionsViewState as ExpenseAutomationTransactionsViewState, TransactionsViewUIState as ExpenseAutomationTransactionsViewUIState, SupportedTransactionCategorization, TransactionCategorizationLineItemData, TransactionReviewLocalData, TransactionsSortKey, TransactionsTab, toTransactionsTabKey as toExpenseAutomationTransactionsTabKey, toTransactionsSortKey } from './view/expenseAutomationView/types/transactionsViewState';
@@ -589,13 +587,13 @@ import { ZeniAccStatementsSelectorView, getZeniAccStatements } from './view/zeni
589
587
  import { fetchZeniAccountsPromoCard } from './view/zeniAccountsPromoCard/zeniAccountsPromoCardReducer';
590
588
  import { ZeniAccountsPromoCardReport, getZeniAccountsPromoCard } from './view/zeniAccountsPromoCard/zeniAccountsPromoCardSelector';
591
589
  import { ZeniAccountsPromoCardState } from './view/zeniAccountsPromoCard/zeniAccountsPromoCardState';
592
- import { FormDataUploadEvent, RESTAPIEndpoints } from './zeniAPI';
590
+ import { RESTAPIEndpoints } from './zeniAPI';
593
591
  import { Dayjs, ZeniDate, date, dateFromYearMonthDate, dateInLocal, dateLocal, dateNow, getBusinessDayOfDate, getLocalTimezone, getMinDate, getMonthIndex, setLocalTimezone, updateZeniDateLocaleID } from './zeniDayJS';
594
592
  import { ZeniUrl, toZeniUrl, toZeniUrlWithoutBaseURL } from './zeniUrl';
595
593
  export { AccountSettingsLocalData };
596
594
  export { saveJeAccountSettings, saveJeAccountSettingsLocalData };
597
595
  export default initialize;
598
- export { initializePusher, disconnectPusher, Dayjs, ZeniDate, dateInLocal as zeniDateInLocal, date as zeniDate, dateLocal, dateNow, getBusinessDayOfDate, formatZeniDateFY as formatZeniDate, getFYMonths, getFYQuarterAndYear, getStartOfAndEndOfTimeframeForFY, getActualPeriodOfFYQtr, getActualPeriodOfFY, getLocalTimezone, addPeriod, subtractPeriod, setLocalTimezone, updateZeniDateLocaleID, ZeniUrl, toZeniUrl, toZeniUrlWithoutBaseURL, FormDataUploadEvent, RESTAPIEndpoints, RootState, updateZeniAPIClientConfig, zeniAPIClientConfig, injectFeatureEpics, injectFeatureModules, initializeWithNewStore, ZeniStore, ZeniAPIStatus, getTimeframeTickTag, TimeFrameTickTag, isIncompleteMonthPresentInTimeframeTick, getLastMonthOfFYQuarter, getLastMonthOfFYYear, getMonthIndex, dateFromYearMonthDate, getMinDate, ExternalAPIEndpoints, };
596
+ export { initializePusher, disconnectPusher, Dayjs, ZeniDate, dateInLocal as zeniDateInLocal, date as zeniDate, dateLocal, dateNow, getBusinessDayOfDate, formatZeniDateFY as formatZeniDate, getFYMonths, getFYQuarterAndYear, getStartOfAndEndOfTimeframeForFY, getActualPeriodOfFYQtr, getActualPeriodOfFY, getLocalTimezone, addPeriod, subtractPeriod, setLocalTimezone, updateZeniDateLocaleID, ZeniUrl, toZeniUrl, toZeniUrlWithoutBaseURL, RESTAPIEndpoints, RootState, updateZeniAPIClientConfig, zeniAPIClientConfig, injectFeatureEpics, injectFeatureModules, initializeWithNewStore, ZeniStore, ZeniAPIStatus, getTimeframeTickTag, TimeFrameTickTag, isIncompleteMonthPresentInTimeframeTick, getLastMonthOfFYQuarter, getLastMonthOfFYYear, getMonthIndex, dateFromYearMonthDate, getMinDate, ExternalAPIEndpoints, };
599
597
  export { ID, FetchState, FetchStateAndError, FetchedState, UpdateType, Mode, AccountViewMode, CompletionStatusType, };
600
598
  export { Amount, toAmount, Currency };
601
599
  export { View, SelectorView, Report, ReportID, toReportID, ReportIDPlusForecastID, SelectorReport, ReportFormat, toReportFormatStrict, isCashFlowOrBalanceSheetReport, isDashboardReport, isDashboardClassesViewReport, isPAndLReport, isPAndLClassesViewReport, isAgingReport, isOpExByVendorReport, isFluxAnalysisOpExReport, PageToken, };
@@ -615,7 +613,7 @@ export { TransactionsOrder, COABalancesSliceOrder, EntityOrder, Section, Section
615
613
  export { ClassesViewSelectorReportV2 };
616
614
  export { BalancesTimeseries, TrendTimeseries, BalanceKind };
617
615
  export { fetchMonthEndCloseChecks, fetchMonthClosePerformanceTrend, MonthClosePerformanceTrend, MonthEndCloseCheck, getMonthEndCloseChecksViewByTenantId, MonthEndCloseChecksView, MonthEndCloseCheckFrequency, MonthCloseCheckMetrics, ALL_MONTH_END_CLOSE_CHECKS_FREQUENCY, MonthEndAuditSummary, };
618
- export { ExpenseAutomationViewSelector, ExpenseAutomationStepDetails, ExpenseAutomationViewType, ExpenseAutomationMissingReceiptsViewSelector, BulkUploadSelectorData, ExpenseAutomationFluxAnalysisViewSelector, FluxAnalysisVendorView, FluxAnalysisViewSectionReport, FluxVendorAccountsAndClassesView, ExpenseAutomationMissingReceiptsViewUIState, ExpenseAutomationMissingReceiptsViewState, ExpenseAutomationViewState, ExpenseAutomationTransactionsTab, ExpenseAutomationMissingReceiptsSortKey, BatchDetails, BatchFile, BatchFileStatus, BatchListItem, BatchStatus, BatchStatusValue, BatchSummary, BulkUploadPhase, BulkUploadResultsTab, BulkUploadSortKey, BulkUploadState, CandidateRef, CompletedSubTab, CompletedTransactionsSelectorData, MatchCandidate, MatchSource, MissingReceiptsTab, ResolvedBatchFile, ResolvedBatchDetails, ResolvedCandidate, getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, fetchExpenseAutomationMissingReceipts, bulkUploadReceipts, bulkUploadReceiptsSuccess, bulkUploadReceiptsFailure, updateBulkUploadBatchStatus, updateBulkUploadProgress, pusherBatchStatusUpdate, fetchBulkUploadBatchDetails, fetchBulkUploadBatchDetailsSuccess, fetchBulkUploadBatchDetailsFailure, storeBatchDetails, fetchBulkUploadBatches, fetchBulkUploadBatchesSuccess, fetchBulkUploadBatchesFailure, confirmBulkUploadMatch, confirmBulkUploadMatchSuccess, confirmBulkUploadMatchFailure, setBulkUploadResultsTab, setBulkUploadCompletedSubTab, setBulkUploadSortConfig, clearBulkUpload, searchTransactionsForManualMatch, searchTransactionsForManualMatchSuccess, searchTransactionsForManualMatchFailure, clearManualSearchResults, fetchCompletedTransactions, fetchCompletedTransactionsSuccess, fetchCompletedTransactionsFailure, fetchFluxAnalysisView, clearExpenseAutomationFluxAnalysisView, updateOperatingExpensesIdsForReview as updateFluxOperatingExpensesIdsForReview, updateSelectedSectionIdsForReview as updateFluxAnalysisSelectedSectionIdsForReview, reviewFluxAnalysisView, updateExpenseAutomationMissingReceiptUploadState, updateExpenseAutomationMissingReceiptsUIState, FluxAnalysisOperatingExpenseView, FluxAnalysisSectionType, getExpenseAutomationFluxAnalysisView, FluxAnalysisSortKey, FluxAnalysisActionType, FluxBalancesByMonth, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, ReconReconcileSortKey, ReconciliationReconcileTabLocalData, FluxAnalysisReviewStatus, updateFluxAnalysisViewUIState, FluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, SaveExpenseAutomationReconciliationActionType, saveExpenseAutomationReconciliationDetail, updateExpenseAutomationReconcileTabListScrollState, updateExpenseAutomationReconReviewTabListSortState, updateExpenseAutomationReconcileTabListSortState, updateExpenseAutomationReconcileTabLocalData, updateExpenseAutomationAccountReconciliationSelectedTab, updateExpenseAutomationAccountReconciliationSelectedAccountId, ExpenseAutomationReconciliationViewSelector, getExpenseAutomationReconciliationView, AccountReconciliationBySection, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, UploadStatementDocumentAIResponse, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, AccountReconciliationByAccount, AccountReconciliationEntity, getAccountReconByAccountIdAndSelectedPeriod, ExpenseAutomationReconciliationViewTab, toReconciliationTabsType, isAccountReconReport, ReconReviewSortKey, AccountReconSectionID, ReconciliationReviewTabLocalData, TransactionsToReview, RecommendedActionCodeType, ReconciliationStatusCodeType, BalanceDataStatusCodeType, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, BankStatusCodeType, ReconciliationAccountSourceType, toReconciliationAccountSource, StatementStatusCodeType, AccountReconciliationLocalData, StatementDataStatusCodeType, deleteAccountStatement, uploadAccountStatement, UploadStatementDocumentAIPayload, updateStatementUploadChosen, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, };
616
+ export { ExpenseAutomationViewSelector, ExpenseAutomationStepDetails, ExpenseAutomationViewType, ExpenseAutomationMissingReceiptsViewSelector, ExpenseAutomationFluxAnalysisViewSelector, FluxAnalysisVendorView, FluxAnalysisViewSectionReport, FluxVendorAccountsAndClassesView, ExpenseAutomationMissingReceiptsViewUIState, ExpenseAutomationMissingReceiptsViewState, ExpenseAutomationViewState, ExpenseAutomationTransactionsTab, ExpenseAutomationMissingReceiptsSortKey, getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, fetchExpenseAutomationMissingReceipts, fetchFluxAnalysisView, clearExpenseAutomationFluxAnalysisView, updateOperatingExpensesIdsForReview as updateFluxOperatingExpensesIdsForReview, updateSelectedSectionIdsForReview as updateFluxAnalysisSelectedSectionIdsForReview, reviewFluxAnalysisView, updateExpenseAutomationMissingReceiptUploadState, updateExpenseAutomationMissingReceiptsUIState, FluxAnalysisOperatingExpenseView, FluxAnalysisSectionType, getExpenseAutomationFluxAnalysisView, FluxAnalysisSortKey, FluxAnalysisActionType, FluxBalancesByMonth, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, ReconReconcileSortKey, ReconciliationReconcileTabLocalData, FluxAnalysisReviewStatus, updateFluxAnalysisViewUIState, FluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, SaveExpenseAutomationReconciliationActionType, saveExpenseAutomationReconciliationDetail, updateExpenseAutomationReconcileTabListScrollState, updateExpenseAutomationReconReviewTabListSortState, updateExpenseAutomationReconcileTabListSortState, updateExpenseAutomationReconcileTabLocalData, updateExpenseAutomationAccountReconciliationSelectedTab, updateExpenseAutomationAccountReconciliationSelectedAccountId, ExpenseAutomationReconciliationViewSelector, getExpenseAutomationReconciliationView, AccountReconciliationBySection, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, UploadStatementDocumentAIResponse, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, AccountReconciliationByAccount, AccountReconciliationEntity, getAccountReconByAccountIdAndSelectedPeriod, ExpenseAutomationReconciliationViewTab, toReconciliationTabsType, isAccountReconReport, ReconReviewSortKey, AccountReconSectionID, ReconciliationReviewTabLocalData, TransactionsToReview, RecommendedActionCodeType, ReconciliationStatusCodeType, BalanceDataStatusCodeType, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, BankStatusCodeType, ReconciliationAccountSourceType, toReconciliationAccountSource, StatementStatusCodeType, AccountReconciliationLocalData, StatementDataStatusCodeType, deleteAccountStatement, uploadAccountStatement, UploadStatementDocumentAIPayload, updateStatementUploadChosen, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, };
619
617
  export { JEScheduleLocalData };
620
618
  export { ExpenseAutomationJESchedulesViewSelector, JEAccountSettingsView, JEScheduledTransactionWithFailedEntries, };
621
619
  export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateSelectedCheckboxTransactionIds, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId, clearExpenseAutomationTransactionsView, TransactionsSortKey, toTransactionsSortKey, TransactionsTab, TransactionCategorizationLineItemData, TransactionReviewLocalData, SupportedTransactionCategorization, ExpenseAutomationTransactionsViewState, ExpenseAutomationTransactionsViewUIState, ExpenseAutomationTransactionViewSelector, TransactionReviewLocalDataSelectorView, };