@zeniai/client-epic-state 5.1.22 → 5.1.23-betaNB1

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 (63) hide show
  1. package/README.md +2 -1
  2. package/lib/commonStateTypes/viewAndReport/agingReportStateTypes.d.ts +1 -1
  3. package/lib/entity/accountRecon/accountReconPayload.d.ts +23 -1
  4. package/lib/entity/accountRecon/accountReconPayload.js +26 -1
  5. package/lib/entity/accountRecon/accountReconReducer.d.ts +5 -2
  6. package/lib/entity/accountRecon/accountReconReducer.js +33 -2
  7. package/lib/entity/accountRecon/accountReconSelector.d.ts +6 -1
  8. package/lib/entity/accountRecon/accountReconSelector.js +5 -0
  9. package/lib/entity/accountRecon/accountReconState.d.ts +22 -0
  10. package/lib/entity/monthEndCloseChecks/monthEndCloseChecksPayload.d.ts +8 -0
  11. package/lib/entity/monthEndCloseChecks/monthEndCloseChecksPayload.js +10 -0
  12. package/lib/entity/monthEndCloseChecks/monthEndCloseChecksState.d.ts +8 -0
  13. package/lib/epic.d.ts +5 -1
  14. package/lib/epic.js +5 -1
  15. package/lib/esm/entity/accountRecon/accountReconPayload.js +26 -1
  16. package/lib/esm/entity/accountRecon/accountReconReducer.js +32 -1
  17. package/lib/esm/entity/accountRecon/accountReconSelector.js +5 -0
  18. package/lib/esm/entity/monthEndCloseChecks/monthEndCloseChecksPayload.js +10 -0
  19. package/lib/esm/epic.js +5 -1
  20. package/lib/esm/index.js +5 -5
  21. package/lib/esm/view/aiCfoView/aiCfoViewReducer.js +29 -3
  22. package/lib/esm/view/aiCfoView/aiCfoViewSelector.js +11 -0
  23. package/lib/esm/view/aiCfoView/epics/createSessionAndSubmitEpic.js +2 -2
  24. package/lib/esm/view/aiCfoView/epics/fetchSkillsEpic.js +34 -0
  25. package/lib/esm/view/aiCfoView/epics/submitQuestionEpic.js +7 -1
  26. package/lib/esm/view/expenseAutomationView/epics/accountRecon/parseStatementEpic.js +34 -0
  27. package/lib/esm/view/expenseAutomationView/epics/accountRecon/reparseStatementEpic.js +31 -0
  28. package/lib/esm/view/expenseAutomationView/epics/accountRecon/updateStatementInfoEpic.js +57 -0
  29. package/lib/esm/view/expenseAutomationView/epics/fluxAnalysis/fetchFluxAnalysisViewEpic.js +1 -3
  30. package/lib/esm/view/expenseAutomationView/payload/reconciliationPayload.js +142 -0
  31. package/lib/esm/view/expenseAutomationView/reducers/reconciliationViewReducer.js +178 -8
  32. package/lib/esm/view/expenseAutomationView/selectors/reconciliationViewSelector.js +27 -0
  33. package/lib/esm/view/expenseAutomationView/types/reconciliationViewState.js +29 -0
  34. package/lib/index.d.ts +10 -10
  35. package/lib/index.js +55 -37
  36. package/lib/view/aiCfoView/aiCfoViewPayload.d.ts +14 -0
  37. package/lib/view/aiCfoView/aiCfoViewReducer.d.ts +8 -4
  38. package/lib/view/aiCfoView/aiCfoViewReducer.js +30 -4
  39. package/lib/view/aiCfoView/aiCfoViewSelector.d.ts +2 -1
  40. package/lib/view/aiCfoView/aiCfoViewSelector.js +12 -0
  41. package/lib/view/aiCfoView/aiCfoViewState.d.ts +15 -0
  42. package/lib/view/aiCfoView/epics/createSessionAndSubmitEpic.js +2 -2
  43. package/lib/view/aiCfoView/epics/fetchSkillsEpic.d.ts +8 -0
  44. package/lib/view/aiCfoView/epics/fetchSkillsEpic.js +38 -0
  45. package/lib/view/aiCfoView/epics/submitQuestionEpic.js +7 -1
  46. package/lib/view/expenseAutomationView/epics/accountRecon/parseStatementEpic.d.ts +6 -0
  47. package/lib/view/expenseAutomationView/epics/accountRecon/parseStatementEpic.js +38 -0
  48. package/lib/view/expenseAutomationView/epics/accountRecon/reparseStatementEpic.d.ts +26 -0
  49. package/lib/view/expenseAutomationView/epics/accountRecon/reparseStatementEpic.js +35 -0
  50. package/lib/view/expenseAutomationView/epics/accountRecon/updateStatementInfoEpic.d.ts +27 -0
  51. package/lib/view/expenseAutomationView/epics/accountRecon/updateStatementInfoEpic.js +61 -0
  52. package/lib/view/expenseAutomationView/epics/fluxAnalysis/fetchFluxAnalysisViewEpic.js +1 -3
  53. package/lib/view/expenseAutomationView/payload/reconciliationPayload.d.ts +163 -9
  54. package/lib/view/expenseAutomationView/payload/reconciliationPayload.js +146 -0
  55. package/lib/view/expenseAutomationView/reducers/reconciliationViewReducer.d.ts +53 -3
  56. package/lib/view/expenseAutomationView/reducers/reconciliationViewReducer.js +180 -9
  57. package/lib/view/expenseAutomationView/selectorTypes/reconciliationViewSelectorTypes.d.ts +7 -1
  58. package/lib/view/expenseAutomationView/selectors/reconciliationViewSelector.d.ts +2 -0
  59. package/lib/view/expenseAutomationView/selectors/reconciliationViewSelector.js +29 -1
  60. package/lib/view/expenseAutomationView/types/reconciliationViewState.d.ts +172 -0
  61. package/lib/view/expenseAutomationView/types/reconciliationViewState.js +30 -0
  62. package/lib/view/vendorFiling1099/vendorFiling1099List/vendorFiling1099ListState.d.ts +1 -1
  63. package/package.json +4 -2
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.updateNodeCollapseState = exports.updateStatementUploadChosen = exports.uploadAccountStatementFailure = exports.uploadAccountStatementSuccess = exports.uploadAccountStatement = exports.includeAccountInReconciliationFailure = exports.includeAccountInReconciliationSuccess = exports.includeAccountInReconciliation = exports.excludeAccountFromReconciliationFailure = exports.excludeAccountFromReconciliationSuccess = exports.excludeAccountFromReconciliation = exports.deleteAccountStatementFailure = exports.deleteAccountStatementSuccess = exports.deleteAccountStatement = exports.updateAccountReconciliationLocalData = exports.updateReconListScrollPosition = exports.updateSaveReconciliationReviewFetchStatus = exports.saveReconciliationReview = exports.updateReviewTabLocalData = exports.initializeReconciliationReviewTabLocalData = exports.updateReviewTabSortState = exports.updateSelectedDrawerAccountId = exports.clearExpenseAutomationReconciliationView = exports.initialiseLocalDataForSelectedAccountId = exports.updateBalancesLocalData = exports.updateSelectedTab = exports.saveReconciliationDetailSuccess = exports.updateReconcileTabListScrollState = exports.updateReconcileTabListSortState = exports.updateReconcileTabLocalData = exports.setStatementParseInProgress = exports.setConnectionInProgressForAccount = exports.updateSelectedAccountId = exports.saveReconciliationDetailFailure = exports.saveReconciliationDetail = exports.fetchReconciliationSuccess = exports.fetchReconciliationFailure = exports.fetchReconciliation = exports.initialState = exports.initialActionFetchState = exports.initialReconciliationTabsState = void 0;
4
+ exports.submitStatementUpdate = exports.updateStatementUpdateLocalData = exports.updateParsedStatementData = exports.resetReparseStatementStatus = exports.reparseStatementFailure = exports.reparseStatementSuccess = exports.reparseStatement = exports.parseStatementFailure = exports.parseStatementSuccess = exports.parseStatement = exports.uploadAccountStatementFailure = exports.uploadAccountStatementSuccess = exports.uploadAccountStatement = exports.includeAccountInReconciliationFailure = exports.includeAccountInReconciliationSuccess = exports.includeAccountInReconciliation = exports.excludeAccountFromReconciliationFailure = exports.excludeAccountFromReconciliationSuccess = exports.excludeAccountFromReconciliation = exports.deleteAccountStatementFailure = exports.deleteAccountStatementSuccess = exports.deleteAccountStatement = exports.updateAccountReconciliationLocalData = exports.updateReconListScrollPosition = exports.updateSaveReconciliationReviewFetchStatus = exports.saveReconciliationReview = exports.updateReviewTabLocalData = exports.initializeReconciliationReviewTabLocalData = exports.updateReviewTabSortState = exports.updateStatementProcessingFailed = exports.updateSelectedDrawerAccountId = exports.clearExpenseAutomationReconciliationView = exports.initialiseLocalDataForSelectedAccountId = exports.updateBalancesLocalData = exports.updateSelectedTab = exports.saveReconciliationDetailSuccess = exports.updateReconcileTabListScrollState = exports.updateReconcileTabListSortState = exports.updateReconcileTabLocalData = exports.setStatementParseInProgress = exports.setConnectionInProgressForAccount = exports.updateSelectedAccountId = exports.saveReconciliationDetailFailure = exports.saveReconciliationDetail = exports.fetchReconciliationSuccess = exports.fetchReconciliationFailure = exports.fetchReconciliation = exports.initialState = exports.initialActionFetchState = exports.initialReconciliationTabsState = void 0;
5
+ exports.updateNodeCollapseState = exports.updateStatementUploadChosen = exports.clearStatementDateConflict = exports.submitStatementUpdateFailure = exports.submitStatementUpdateSuccess = void 0;
5
6
  const toolkit_1 = require("@reduxjs/toolkit");
6
7
  const timePeriod_1 = require("../../../commonStateTypes/timePeriod");
7
8
  const accountState_1 = require("../../../entity/account/accountState");
8
9
  const accountReconState_1 = require("../../../entity/accountRecon/accountReconState");
10
+ const reconciliationViewState_1 = require("../types/reconciliationViewState");
9
11
  // Initial state
10
12
  exports.initialReconciliationTabsState = {
11
13
  balances: {
@@ -71,6 +73,7 @@ exports.initialState = {
71
73
  refreshStatus: { fetchState: 'Not-Started', error: undefined },
72
74
  actionFetchState: exports.initialActionFetchState,
73
75
  selectedAccountId: undefined,
76
+ statementProcessingFailed: false,
74
77
  statementUploadChosen: false,
75
78
  reconListUIState: {
76
79
  nodeCollapseState: {},
@@ -79,6 +82,7 @@ exports.initialState = {
79
82
  },
80
83
  },
81
84
  excludedAccountIDs: [],
85
+ summary: undefined,
82
86
  };
83
87
  // Create slice with reducers
84
88
  const expenseAutomationReconciliationView = (0, toolkit_1.createSlice)({
@@ -147,7 +151,7 @@ const expenseAutomationReconciliationView = (0, toolkit_1.createSlice)({
147
151
  fetchReconciliationSuccess: {
148
152
  reducer(draft, action) {
149
153
  if (action.payload.accountId == null) {
150
- updateAllReconciliation(draft, action.payload.reconciliation.accounts, action.payload.selectedPeriod, action.payload.reconciliation.reconciliation, action.payload.refreshViewInBackground, action.payload.reconciliation.excluded_accounts ?? []);
154
+ updateAllReconciliation(draft, action.payload.reconciliation.accounts, action.payload.selectedPeriod, action.payload.reconciliation.reconciliation, action.payload.refreshViewInBackground, action.payload.reconciliation.excluded_accounts ?? [], action.payload.reconciliation.summary);
151
155
  }
152
156
  else if (action.payload.reconciliation.reconciliation.length > 0 &&
153
157
  action.payload.reconciliation.accounts.length > 0) {
@@ -291,6 +295,10 @@ const expenseAutomationReconciliationView = (0, toolkit_1.createSlice)({
291
295
  updateSelectedDrawerAccountId: (draft, action) => {
292
296
  draft.selectedDrawerAccountId = action.payload.selectedDrawerAccountId;
293
297
  },
298
+ updateStatementProcessingFailed: (draft, action) => {
299
+ draft.statementProcessingFailed =
300
+ action.payload.statementProcessingFailed;
301
+ },
294
302
  initialiseLocalDataForSelectedAccountId: () => { },
295
303
  updateSelectedTab: (draft, action) => {
296
304
  const { selectedTab } = action.payload;
@@ -382,10 +390,22 @@ const expenseAutomationReconciliationView = (0, toolkit_1.createSlice)({
382
390
  },
383
391
  uploadAccountStatement: (draft, action) => {
384
392
  const { accountId, selectedPeriod } = action.payload;
385
- draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)].reconciliationByAccountID[accountId].statementUploadStatus = {
386
- fetchState: 'In-Progress',
387
- error: undefined,
388
- };
393
+ const accountRecon = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
394
+ if (accountRecon != null) {
395
+ accountRecon.statementUploadStatus = {
396
+ fetchState: 'In-Progress',
397
+ error: undefined,
398
+ };
399
+ accountRecon.parsedStatementData = undefined;
400
+ accountRecon.statementParseStatus = {
401
+ fetchState: 'Not-Started',
402
+ error: undefined,
403
+ };
404
+ accountRecon.reparseStatementStatus = {
405
+ fetchState: 'Not-Started',
406
+ error: undefined,
407
+ };
408
+ }
389
409
  },
390
410
  uploadAccountStatementSuccess: (draft, action) => {
391
411
  const { accountId, selectedPeriod } = action.payload;
@@ -423,6 +443,138 @@ const expenseAutomationReconciliationView = (0, toolkit_1.createSlice)({
423
443
  error: action.payload.error,
424
444
  };
425
445
  },
446
+ parseStatement: (draft, action) => {
447
+ const { accountId, selectedPeriod } = action.payload;
448
+ const accountRecon = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
449
+ if (accountRecon != null) {
450
+ accountRecon.parsedStatementData = undefined;
451
+ accountRecon.statementParseStatus = {
452
+ fetchState: 'In-Progress',
453
+ error: undefined,
454
+ };
455
+ }
456
+ },
457
+ parseStatementSuccess: (draft, action) => {
458
+ const { accountId, selectedPeriod } = action.payload;
459
+ draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)].reconciliationByAccountID[accountId].statementParseStatus = {
460
+ fetchState: 'Completed',
461
+ error: undefined,
462
+ };
463
+ draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)].reconciliationByAccountID[accountId].statementParseInProgress = false;
464
+ draft.statementProcessingFailed = false;
465
+ },
466
+ parseStatementFailure: (draft, action) => {
467
+ const { accountId, selectedPeriod } = action.payload;
468
+ draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)].reconciliationByAccountID[accountId].statementParseStatus = {
469
+ fetchState: 'Error',
470
+ error: action.payload.error,
471
+ };
472
+ draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)].reconciliationByAccountID[accountId].statementParseInProgress = false;
473
+ draft.statementProcessingFailed = true;
474
+ },
475
+ reparseStatement: (draft, action) => {
476
+ const { accountId, selectedPeriod } = action.payload;
477
+ const accountRecon = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
478
+ if (accountRecon != null) {
479
+ accountRecon.parsedStatementData = undefined;
480
+ accountRecon.reparseStatementStatus = {
481
+ fetchState: 'In-Progress',
482
+ error: undefined,
483
+ };
484
+ }
485
+ },
486
+ reparseStatementSuccess: (draft, action) => {
487
+ const { accountId, selectedPeriod } = action.payload;
488
+ draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)].reconciliationByAccountID[accountId].reparseStatementStatus = {
489
+ fetchState: 'Completed',
490
+ error: undefined,
491
+ };
492
+ draft.statementProcessingFailed = false;
493
+ },
494
+ reparseStatementFailure: (draft, action) => {
495
+ const { accountId, selectedPeriod } = action.payload;
496
+ draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)].reconciliationByAccountID[accountId].reparseStatementStatus = {
497
+ fetchState: 'Error',
498
+ error: action.payload.error,
499
+ };
500
+ draft.statementProcessingFailed = true;
501
+ },
502
+ resetReparseStatementStatus: (draft, action) => {
503
+ const { accountId, selectedPeriod } = action.payload;
504
+ draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)].reconciliationByAccountID[accountId].reparseStatementStatus = {
505
+ fetchState: 'Not-Started',
506
+ error: undefined,
507
+ };
508
+ },
509
+ updateParsedStatementData: (draft, action) => {
510
+ const { accountId, selectedPeriod, parsedStatementData } = action.payload;
511
+ draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)].reconciliationByAccountID[accountId].parsedStatementData =
512
+ parsedStatementData;
513
+ },
514
+ updateStatementUpdateLocalData: (draft, action) => {
515
+ const { accountId, selectedPeriod, statementUpdateLocalData } = action.payload;
516
+ const accountRecon = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
517
+ if (accountRecon != null) {
518
+ if (accountRecon.localData == null) {
519
+ accountRecon.localData = {
520
+ statementUpdateLocalData,
521
+ };
522
+ }
523
+ else {
524
+ accountRecon.localData.statementUpdateLocalData =
525
+ statementUpdateLocalData;
526
+ }
527
+ }
528
+ },
529
+ submitStatementUpdate: (draft, action) => {
530
+ const { accountId, selectedPeriod } = action.payload;
531
+ const accountRecon = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
532
+ if (accountRecon != null) {
533
+ accountRecon.statementUpdateStatus = {
534
+ fetchState: 'In-Progress',
535
+ error: undefined,
536
+ };
537
+ // Clear any stale date conflict from a previous attempt.
538
+ accountRecon.statementDateConflict = null;
539
+ }
540
+ },
541
+ submitStatementUpdateSuccess: (draft, action) => {
542
+ const { accountId, selectedPeriod } = action.payload;
543
+ const accountRecon = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
544
+ if (accountRecon != null) {
545
+ accountRecon.statementUpdateStatus = {
546
+ fetchState: 'Completed',
547
+ error: undefined,
548
+ };
549
+ accountRecon.statementDateConflict = null;
550
+ if (accountRecon.localData != null) {
551
+ accountRecon.localData.statementUpdateLocalData = undefined;
552
+ }
553
+ }
554
+ },
555
+ submitStatementUpdateFailure: (draft, action) => {
556
+ const { accountId, selectedPeriod, dateConflict } = action.payload;
557
+ const accountRecon = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
558
+ if (accountRecon != null) {
559
+ accountRecon.statementUpdateStatus = {
560
+ fetchState: 'Error',
561
+ error: action.payload.error,
562
+ };
563
+ accountRecon.statementDateConflict = dateConflict ?? null;
564
+ // Keep the local edits around when the failure is a recoverable date
565
+ // conflict so the user can re-upload / re-edit without losing changes.
566
+ if (dateConflict == null && accountRecon.localData != null) {
567
+ accountRecon.localData.statementUpdateLocalData = undefined;
568
+ }
569
+ }
570
+ },
571
+ clearStatementDateConflict: (draft, action) => {
572
+ const { accountId, selectedPeriod } = action.payload;
573
+ const accountRecon = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
574
+ if (accountRecon != null) {
575
+ accountRecon.statementDateConflict = null;
576
+ }
577
+ },
426
578
  updateAccountReconciliationLocalData: (draft, action) => {
427
579
  const { accountId, selectedPeriod, localData } = action.payload;
428
580
  const oldLocalData = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)].reconciliationByAccountID[accountId].localData;
@@ -528,10 +680,10 @@ const expenseAutomationReconciliationView = (0, toolkit_1.createSlice)({
528
680
  },
529
681
  });
530
682
  // Export actions
531
- _a = expenseAutomationReconciliationView.actions, exports.fetchReconciliation = _a.fetchReconciliation, exports.fetchReconciliationFailure = _a.fetchReconciliationFailure, exports.fetchReconciliationSuccess = _a.fetchReconciliationSuccess, exports.saveReconciliationDetail = _a.saveReconciliationDetail, exports.saveReconciliationDetailFailure = _a.saveReconciliationDetailFailure, exports.updateSelectedAccountId = _a.updateSelectedAccountId, exports.setConnectionInProgressForAccount = _a.setConnectionInProgressForAccount, exports.setStatementParseInProgress = _a.setStatementParseInProgress, exports.updateReconcileTabLocalData = _a.updateReconcileTabLocalData, exports.updateReconcileTabListSortState = _a.updateReconcileTabListSortState, exports.updateReconcileTabListScrollState = _a.updateReconcileTabListScrollState, exports.saveReconciliationDetailSuccess = _a.saveReconciliationDetailSuccess, exports.updateSelectedTab = _a.updateSelectedTab, exports.updateBalancesLocalData = _a.updateBalancesLocalData, exports.initialiseLocalDataForSelectedAccountId = _a.initialiseLocalDataForSelectedAccountId, exports.clearExpenseAutomationReconciliationView = _a.clearExpenseAutomationReconciliationView, exports.updateSelectedDrawerAccountId = _a.updateSelectedDrawerAccountId, exports.updateReviewTabSortState = _a.updateReviewTabSortState, exports.initializeReconciliationReviewTabLocalData = _a.initializeReconciliationReviewTabLocalData, exports.updateReviewTabLocalData = _a.updateReviewTabLocalData, exports.saveReconciliationReview = _a.saveReconciliationReview, exports.updateSaveReconciliationReviewFetchStatus = _a.updateSaveReconciliationReviewFetchStatus, exports.updateReconListScrollPosition = _a.updateReconListScrollPosition, exports.updateAccountReconciliationLocalData = _a.updateAccountReconciliationLocalData, exports.deleteAccountStatement = _a.deleteAccountStatement, exports.deleteAccountStatementSuccess = _a.deleteAccountStatementSuccess, exports.deleteAccountStatementFailure = _a.deleteAccountStatementFailure, exports.excludeAccountFromReconciliation = _a.excludeAccountFromReconciliation, exports.excludeAccountFromReconciliationSuccess = _a.excludeAccountFromReconciliationSuccess, exports.excludeAccountFromReconciliationFailure = _a.excludeAccountFromReconciliationFailure, exports.includeAccountInReconciliation = _a.includeAccountInReconciliation, exports.includeAccountInReconciliationSuccess = _a.includeAccountInReconciliationSuccess, exports.includeAccountInReconciliationFailure = _a.includeAccountInReconciliationFailure, exports.uploadAccountStatement = _a.uploadAccountStatement, exports.uploadAccountStatementSuccess = _a.uploadAccountStatementSuccess, exports.uploadAccountStatementFailure = _a.uploadAccountStatementFailure, exports.updateStatementUploadChosen = _a.updateStatementUploadChosen, exports.updateNodeCollapseState = _a.updateNodeCollapseState;
683
+ _a = expenseAutomationReconciliationView.actions, exports.fetchReconciliation = _a.fetchReconciliation, exports.fetchReconciliationFailure = _a.fetchReconciliationFailure, exports.fetchReconciliationSuccess = _a.fetchReconciliationSuccess, exports.saveReconciliationDetail = _a.saveReconciliationDetail, exports.saveReconciliationDetailFailure = _a.saveReconciliationDetailFailure, exports.updateSelectedAccountId = _a.updateSelectedAccountId, exports.setConnectionInProgressForAccount = _a.setConnectionInProgressForAccount, exports.setStatementParseInProgress = _a.setStatementParseInProgress, exports.updateReconcileTabLocalData = _a.updateReconcileTabLocalData, exports.updateReconcileTabListSortState = _a.updateReconcileTabListSortState, exports.updateReconcileTabListScrollState = _a.updateReconcileTabListScrollState, exports.saveReconciliationDetailSuccess = _a.saveReconciliationDetailSuccess, exports.updateSelectedTab = _a.updateSelectedTab, exports.updateBalancesLocalData = _a.updateBalancesLocalData, exports.initialiseLocalDataForSelectedAccountId = _a.initialiseLocalDataForSelectedAccountId, exports.clearExpenseAutomationReconciliationView = _a.clearExpenseAutomationReconciliationView, exports.updateSelectedDrawerAccountId = _a.updateSelectedDrawerAccountId, exports.updateStatementProcessingFailed = _a.updateStatementProcessingFailed, exports.updateReviewTabSortState = _a.updateReviewTabSortState, exports.initializeReconciliationReviewTabLocalData = _a.initializeReconciliationReviewTabLocalData, exports.updateReviewTabLocalData = _a.updateReviewTabLocalData, exports.saveReconciliationReview = _a.saveReconciliationReview, exports.updateSaveReconciliationReviewFetchStatus = _a.updateSaveReconciliationReviewFetchStatus, exports.updateReconListScrollPosition = _a.updateReconListScrollPosition, exports.updateAccountReconciliationLocalData = _a.updateAccountReconciliationLocalData, exports.deleteAccountStatement = _a.deleteAccountStatement, exports.deleteAccountStatementSuccess = _a.deleteAccountStatementSuccess, exports.deleteAccountStatementFailure = _a.deleteAccountStatementFailure, exports.excludeAccountFromReconciliation = _a.excludeAccountFromReconciliation, exports.excludeAccountFromReconciliationSuccess = _a.excludeAccountFromReconciliationSuccess, exports.excludeAccountFromReconciliationFailure = _a.excludeAccountFromReconciliationFailure, exports.includeAccountInReconciliation = _a.includeAccountInReconciliation, exports.includeAccountInReconciliationSuccess = _a.includeAccountInReconciliationSuccess, exports.includeAccountInReconciliationFailure = _a.includeAccountInReconciliationFailure, exports.uploadAccountStatement = _a.uploadAccountStatement, exports.uploadAccountStatementSuccess = _a.uploadAccountStatementSuccess, exports.uploadAccountStatementFailure = _a.uploadAccountStatementFailure, exports.parseStatement = _a.parseStatement, exports.parseStatementSuccess = _a.parseStatementSuccess, exports.parseStatementFailure = _a.parseStatementFailure, exports.reparseStatement = _a.reparseStatement, exports.reparseStatementSuccess = _a.reparseStatementSuccess, exports.reparseStatementFailure = _a.reparseStatementFailure, exports.resetReparseStatementStatus = _a.resetReparseStatementStatus, exports.updateParsedStatementData = _a.updateParsedStatementData, exports.updateStatementUpdateLocalData = _a.updateStatementUpdateLocalData, exports.submitStatementUpdate = _a.submitStatementUpdate, exports.submitStatementUpdateSuccess = _a.submitStatementUpdateSuccess, exports.submitStatementUpdateFailure = _a.submitStatementUpdateFailure, exports.clearStatementDateConflict = _a.clearStatementDateConflict, exports.updateStatementUploadChosen = _a.updateStatementUploadChosen, exports.updateNodeCollapseState = _a.updateNodeCollapseState;
532
684
  // Export reducer
533
685
  exports.default = expenseAutomationReconciliationView.reducer;
534
- function updateAllReconciliation(draft, accounts, selectedPeriod, reconciliationData, refreshViewInBackground, excludedAccounts) {
686
+ function updateAllReconciliation(draft, accounts, selectedPeriod, reconciliationData, refreshViewInBackground, excludedAccounts, summary) {
535
687
  draft.excludedAccountIDs = excludedAccounts.map((ea) => ea.account_id);
536
688
  draft.excludedAccountExclusionInfo = {};
537
689
  excludedAccounts.forEach((ea) => {
@@ -560,6 +712,7 @@ function updateAllReconciliation(draft, accounts, selectedPeriod, reconciliation
560
712
  : undefined,
561
713
  };
562
714
  });
715
+ const oldReconciliationByAccountID = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID ?? {};
563
716
  draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)] = {
564
717
  accountIDs: [],
565
718
  reconciliationByAccountID: {},
@@ -583,6 +736,7 @@ function updateAllReconciliation(draft, accounts, selectedPeriod, reconciliation
583
736
  paymentAccountId: account?.payment_account_id ?? undefined,
584
737
  };
585
738
  }
739
+ const oldRecord = oldReconciliationByAccountID[reconciliation.account_id];
586
740
  accountReconciliationRecords.reconciliationByAccountID[reconciliation.account_id] = {
587
741
  accountId: reconciliation.account_id,
588
742
  reconciliationId: reconciliation.reconciliation_id ?? undefined,
@@ -592,14 +746,25 @@ function updateAllReconciliation(draft, accounts, selectedPeriod, reconciliation
592
746
  statementUploadStatus: { fetchState: 'Not-Started', error: undefined },
593
747
  statementUpdateStatus: { fetchState: 'Not-Started', error: undefined },
594
748
  statementParseInProgress: reconciliation.bank_status.code === 'parsing',
749
+ statementParseStatus: oldRecord?.statementParseStatus ?? {
750
+ fetchState: 'Not-Started',
751
+ error: undefined,
752
+ },
753
+ reparseStatementStatus: oldRecord?.reparseStatementStatus ?? {
754
+ fetchState: 'Not-Started',
755
+ error: undefined,
756
+ },
757
+ statementDateConflict: oldRecord?.statementDateConflict ?? null,
595
758
  localData: {
759
+ ...oldRecord?.localData,
596
760
  accountSource: account?.reconciliation_source != null
597
761
  ? (0, accountState_1.toReconciliationAccountSource)(account.reconciliation_source)
598
- : undefined,
762
+ : oldRecord?.localData?.accountSource,
599
763
  },
600
764
  accountDetectionReason: account?.detection_info != null && account.detection_reason != null
601
765
  ? account.detection_reason
602
766
  : undefined,
767
+ parsedStatementData: oldRecord?.parsedStatementData,
603
768
  };
604
769
  accountReconciliationRecords.accountIDs.push(reconciliation.account_id);
605
770
  });
@@ -613,6 +778,9 @@ function updateAllReconciliation(draft, accounts, selectedPeriod, reconciliation
613
778
  draft.fetchState = 'Completed';
614
779
  draft.error = undefined;
615
780
  }
781
+ if (summary !== undefined) {
782
+ draft.summary = (0, reconciliationViewState_1.toReconciliationViewSummary)(summary);
783
+ }
616
784
  }
617
785
  function updateReconciliationByAccountID(draft, accounts, selectedPeriod, accountId, reconciliationData, refreshViewInBackground) {
618
786
  const oldRecord = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)].reconciliationByAccountID[accountId];
@@ -680,6 +848,9 @@ const updateReconciliationByAccountIDOnIncludeAccount = (draft, accountId, recon
680
848
  statementUploadStatus: { fetchState: 'Not-Started', error: undefined },
681
849
  statementUpdateStatus: { fetchState: 'Not-Started', error: undefined },
682
850
  statementParseInProgress: reconciliation.bank_status.code === 'parsing',
851
+ statementParseStatus: { fetchState: 'Not-Started', error: undefined },
852
+ reparseStatementStatus: { fetchState: 'Not-Started', error: undefined },
853
+ statementDateConflict: null,
683
854
  localData: {},
684
855
  accountDetectionReason: undefined,
685
856
  };
@@ -9,7 +9,7 @@ import { BankStatusCodeType } from '../../../entity/accountRecon/accountReconSta
9
9
  import { ClassBase } from '../../../entity/class/classState';
10
10
  import { Vendor } from '../../../entity/vendor/vendorState';
11
11
  import { PlaidConnectionDetails } from '../../spendManagement/plaidAccount/plaidAccountViewState';
12
- import { AccountReconciliationLocalData, ActionFetchStates, ReconListUIState, ReconciliationTabsState, ReconciliationViewTabType } from '../types/reconciliationViewState';
12
+ import { AccountReconciliationLocalData, ActionFetchStates, ParsedStatementData, ReconListUIState, ReconciliationTabsState, ReconciliationViewSummary, ReconciliationViewTabType, StatementDateConflict } from '../types/reconciliationViewState';
13
13
  export declare const ALL_ACCOUNT_RECON_SECTION_IDS: readonly ["assets", "liabilities"];
14
14
  export declare const toAccountReconSectionID: (v: string) => "assets" | "liabilities";
15
15
  export type AccountReconSectionID = ReturnType<typeof toAccountReconSectionID>;
@@ -37,10 +37,12 @@ export interface ExpenseAutomationReconciliationViewSelector {
37
37
  refreshStatus: FetchStateAndError;
38
38
  reviewTabSelectedVendorByTransactionId: Record<ID, Vendor>;
39
39
  selectedTab: ReconciliationViewTabType;
40
+ statementProcessingFailed: boolean;
40
41
  statementUploadChosen: boolean;
41
42
  selectedAccountId?: ID;
42
43
  selectedDrawerAccountId?: ID;
43
44
  selectedReconAccount?: AccountReconciliationByAccount;
45
+ summary?: ReconciliationViewSummary;
44
46
  }
45
47
  export interface AccountReconciliationBySection {
46
48
  accountIDs: ID[];
@@ -57,11 +59,15 @@ export interface AccountReconciliationByAccount {
57
59
  connectionInProgress: boolean;
58
60
  localData: AccountReconciliationLocalData;
59
61
  refreshStatus: FetchStateAndError;
62
+ reparseStatementStatus: FetchStateAndError;
63
+ statementDateConflict: StatementDateConflict | null;
60
64
  statementDeleteStatus: FetchStateAndError;
61
65
  statementParseInProgress: boolean;
66
+ statementParseStatus: FetchStateAndError;
62
67
  statementUpdateStatus: FetchStateAndError;
63
68
  statementUploadStatus: FetchStateAndError;
64
69
  transactionFetchState: FetchStateAndError;
65
70
  accountDetectionReason?: string;
71
+ parsedStatementData?: ParsedStatementData;
66
72
  paymentAccountId?: ID;
67
73
  }
@@ -1,5 +1,7 @@
1
+ import { ID } from '../../../commonStateTypes/common';
1
2
  import { ReportIDPlusForecastID } from '../../../commonStateTypes/viewAndReport/viewAndReport';
2
3
  import { RootState } from '../../../reducer';
3
4
  import { ExpenseAutomationReconciliationViewSelector } from '../selectorTypes/reconciliationViewSelectorTypes';
4
5
  export declare const getExpenseAutomationReconciliationView: (state: RootState) => ExpenseAutomationReconciliationViewSelector;
6
+ export declare const getReparseStatementStatusByAccountId: (state: RootState, accountId: ID) => import("../../../commonStateTypes/common").FetchStateAndError;
5
7
  export declare const isAccountReconReport: (reportId: ReportIDPlusForecastID) => boolean;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.isAccountReconReport = exports.getExpenseAutomationReconciliationView = void 0;
6
+ exports.isAccountReconReport = exports.getReparseStatementStatusByAccountId = exports.getExpenseAutomationReconciliationView = void 0;
7
7
  const toolkit_1 = require("@reduxjs/toolkit");
8
8
  const big_js_1 = __importDefault(require("big.js"));
9
9
  const keys_1 = __importDefault(require("lodash/keys"));
@@ -49,6 +49,17 @@ exports.getExpenseAutomationReconciliationView = (0, toolkit_1.createSelector)((
49
49
  error: undefined,
50
50
  })
51
51
  : { fetchState: 'Not-Started', error: undefined };
52
+ const monthEndChecksForPeriod = selectedPeriod != null
53
+ ? monthEndCloseChecksState.monthEndCloseChecksByTenantId[currentTenant.tenantId]?.[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]
54
+ : undefined;
55
+ const reconCheckTimeSavedHours = monthEndChecksForPeriod?.monthEndCloseCheckList?.find((check) => check.id === 'reconciliation')?.progressJson?.timeSavedHours;
56
+ const summaryWithTimeSaved = reconciliationViewState.summary != null
57
+ ? {
58
+ ...reconciliationViewState.summary,
59
+ timeSavedHours: reconCheckTimeSavedHours ??
60
+ reconciliationViewState.summary.timeSavedHours,
61
+ }
62
+ : undefined;
52
63
  if (accountReconForMonthYearPeriod == null) {
53
64
  return {
54
65
  bankAccounts: [],
@@ -72,6 +83,7 @@ exports.getExpenseAutomationReconciliationView = (0, toolkit_1.createSelector)((
72
83
  selectedTab: reconciliationViewState.selectedTab,
73
84
  monthYearPeriod: selectedPeriod,
74
85
  selectedAccountId: reconciliationViewState.selectedAccountId,
86
+ statementProcessingFailed: reconciliationViewState.statementProcessingFailed,
75
87
  statementUploadChosen: reconciliationViewState.statementUploadChosen,
76
88
  accountReconciliationsByAccountID: {},
77
89
  reconciliationTabsState: reconciliationViewReducer_1.initialReconciliationTabsState,
@@ -121,6 +133,7 @@ exports.getExpenseAutomationReconciliationView = (0, toolkit_1.createSelector)((
121
133
  excludeAccountFetchState: reconciliationViewState.actionFetchState.excludeAccountFetch,
122
134
  includeAccountFetchState: reconciliationViewState.actionFetchState.includeAccountFetch,
123
135
  excludedAccountIDs: reconciliationViewState.excludedAccountIDs,
136
+ summary: summaryWithTimeSaved,
124
137
  };
125
138
  }
126
139
  const allAccountIDs = accountReconForMonthYearPeriod.accountIDs;
@@ -245,6 +258,12 @@ exports.getExpenseAutomationReconciliationView = (0, toolkit_1.createSelector)((
245
258
  .refreshStatus,
246
259
  statementDeleteStatus: accountReconForMonthYearPeriod.reconciliationByAccountID[accountID]
247
260
  .statementDeleteStatus,
261
+ statementParseStatus: accountReconForMonthYearPeriod.reconciliationByAccountID[accountID]
262
+ .statementParseStatus,
263
+ reparseStatementStatus: accountReconForMonthYearPeriod.reconciliationByAccountID[accountID]
264
+ .reparseStatementStatus,
265
+ statementDateConflict: accountReconForMonthYearPeriod.reconciliationByAccountID[accountID]
266
+ .statementDateConflict,
248
267
  statementUpdateStatus: accountReconForMonthYearPeriod.reconciliationByAccountID[accountID]
249
268
  .statementUpdateStatus,
250
269
  statementUploadStatus: accountReconForMonthYearPeriod.reconciliationByAccountID[accountID]
@@ -253,6 +272,8 @@ exports.getExpenseAutomationReconciliationView = (0, toolkit_1.createSelector)((
253
272
  .localData,
254
273
  statementParseInProgress: accountReconForMonthYearPeriod.reconciliationByAccountID[accountID]
255
274
  .statementParseInProgress,
275
+ parsedStatementData: accountReconForMonthYearPeriod.reconciliationByAccountID[accountID]
276
+ .parsedStatementData,
256
277
  transactionFetchState: (0, reduceFetchState_1.reduceAnyFetchState)([
257
278
  accountReconForMonthYearPeriod.reconciliationByAccountID[accountID]
258
279
  .transactionFetchState,
@@ -321,6 +342,9 @@ exports.getExpenseAutomationReconciliationView = (0, toolkit_1.createSelector)((
321
342
  statementUpdateStatus: { fetchState: 'Not-Started' },
322
343
  statementUploadStatus: { fetchState: 'Not-Started' },
323
344
  statementDeleteStatus: { fetchState: 'Not-Started' },
345
+ statementParseStatus: { fetchState: 'Not-Started' },
346
+ reparseStatementStatus: { fetchState: 'Not-Started' },
347
+ statementDateConflict: null,
324
348
  localData: {},
325
349
  connectionInProgress: false,
326
350
  statementParseInProgress: false,
@@ -409,6 +433,7 @@ exports.getExpenseAutomationReconciliationView = (0, toolkit_1.createSelector)((
409
433
  refreshStatus: reconciliationViewState.refreshStatus,
410
434
  selectedTab: reconciliationViewState.selectedTab,
411
435
  selectedDrawerAccountId: reconciliationViewState.selectedDrawerAccountId,
436
+ statementProcessingFailed: reconciliationViewState.statementProcessingFailed,
412
437
  statementUploadChosen: reconciliationViewState.statementUploadChosen,
413
438
  monthYearPeriod: selectedPeriod,
414
439
  accountReconciliationBySectionID,
@@ -429,8 +454,11 @@ exports.getExpenseAutomationReconciliationView = (0, toolkit_1.createSelector)((
429
454
  excludeAccountFetchState: reconciliationViewState.actionFetchState.excludeAccountFetch,
430
455
  includeAccountFetchState: reconciliationViewState.actionFetchState.includeAccountFetch,
431
456
  excludedAccountIDs: reconciliationViewState.excludedAccountIDs,
457
+ summary: summaryWithTimeSaved,
432
458
  };
433
459
  });
460
+ const getReparseStatementStatusByAccountId = (state, accountId) => (0, exports.getExpenseAutomationReconciliationView)(state).accountReconciliationsByAccountID[accountId]?.reparseStatementStatus;
461
+ exports.getReparseStatementStatusByAccountId = getReparseStatementStatusByAccountId;
434
462
  const isAccountReconReport = (reportId) => {
435
463
  return reportId.endsWith('reconciliation');
436
464
  };
@@ -7,6 +7,130 @@ import { BankStatusCodeType } from '../../../entity/accountRecon/accountReconSta
7
7
  import { CustomerBase } from '../../../entity/customer/customerState';
8
8
  import { VendorBase } from '../../../entity/vendor/vendorState';
9
9
  import { ZeniAPIStatus } from '../../../responsePayload';
10
+ import { ReconciliationSummaryPayload } from '../payload/reconciliationPayload';
11
+ export interface PolygonPoint {
12
+ x: number;
13
+ y: number;
14
+ }
15
+ export interface Citation {
16
+ page: number;
17
+ pageHeight: number;
18
+ pageWidth: number;
19
+ polygon: PolygonPoint[];
20
+ referenceText: string;
21
+ }
22
+ export interface StatementTransaction {
23
+ amount: number;
24
+ citations: Citation[];
25
+ isUserAdded: boolean;
26
+ isUserEdited: boolean;
27
+ statementTransactionId: string;
28
+ transactionDate: string;
29
+ transactionDirection: 'debit' | 'credit';
30
+ transactionMemo: string;
31
+ }
32
+ export interface StatementMeta {
33
+ closingBalance: number;
34
+ openingBalance: number;
35
+ statementDataStatus: {
36
+ code: string;
37
+ label: string;
38
+ };
39
+ statementEndDate: string;
40
+ statementStartDate: string;
41
+ statementStatus: {
42
+ code: string;
43
+ label: string;
44
+ };
45
+ statementUploadId: string;
46
+ totalDeposits: number;
47
+ totalPayments: number;
48
+ }
49
+ export interface AccountInfo {
50
+ accountId: string;
51
+ accountName: string;
52
+ accountType: string;
53
+ currencyCode: string;
54
+ last4Digits: string | null;
55
+ }
56
+ export interface FileInfo {
57
+ fileId: string;
58
+ fileName: string;
59
+ signedUrl: string;
60
+ }
61
+ export interface AiSummaryField {
62
+ code: string;
63
+ label: string;
64
+ }
65
+ export interface PreviousReconciliationInfo {
66
+ endDate: string;
67
+ reconciledAt: string;
68
+ reconciledByUserId: string;
69
+ reconciliationId: string;
70
+ startDate: string;
71
+ }
72
+ export interface AiSummaryChainStatus {
73
+ code: string;
74
+ expectedStartDate: string | null;
75
+ label: string;
76
+ previousReconciliationInfo: PreviousReconciliationInfo | null;
77
+ }
78
+ /**
79
+ * Surfaced when Confirm & Save is rejected with a 409 because the statement
80
+ * period overlaps with / leaves a gap after an already-reconciled period.
81
+ */
82
+ export interface StatementDateConflict {
83
+ errorCode: string;
84
+ expectedStartDate: string | null;
85
+ previousReconciliationInfo: PreviousReconciliationInfo;
86
+ }
87
+ export interface AiSummary {
88
+ accountIdentified: string | null;
89
+ chainStatus: AiSummaryChainStatus;
90
+ exceptionsDetected: number;
91
+ fieldsCaptured: AiSummaryField[];
92
+ transactionsExtracted: number;
93
+ }
94
+ export interface StatementUpload {
95
+ account: AccountInfo;
96
+ file: FileInfo | null;
97
+ statementMeta: StatementMeta;
98
+ statementTransactions: StatementTransaction[];
99
+ aiSummary?: AiSummary | null;
100
+ }
101
+ export interface ParsedStatementData {
102
+ statementUpload: StatementUpload;
103
+ }
104
+ export interface ReconciliationSummaryAccounts {
105
+ done: number;
106
+ failed: number;
107
+ inProgress: number;
108
+ total: number;
109
+ }
110
+ export interface ReconciliationSummaryAutoMatched {
111
+ matchedTxns: number;
112
+ totalTxns: number;
113
+ }
114
+ export interface ReconciliationSummaryNeedsReview {
115
+ accountCount: number;
116
+ txnCount: number;
117
+ }
118
+ export interface ReconciliationSummaryProgressBar {
119
+ aiPercentageShare: number;
120
+ completePercentage: number;
121
+ humanPercentageShare: number;
122
+ remainingPercentage: number;
123
+ }
124
+ export interface ReconciliationViewSummary {
125
+ accounts: ReconciliationSummaryAccounts;
126
+ accountsToConnectCount: number;
127
+ autoMatched: ReconciliationSummaryAutoMatched;
128
+ needsReview: ReconciliationSummaryNeedsReview;
129
+ timeSavedHours: number;
130
+ timeSavedPercentage: number;
131
+ progressBar?: ReconciliationSummaryProgressBar;
132
+ }
133
+ export declare function toReconciliationViewSummary(payload: ReconciliationSummaryPayload): ReconciliationViewSummary;
10
134
  export declare const RECONCILE_ACTIONS: readonly ["reconcile", "save_reconcile_for_later", "exclude"];
11
135
  export declare const toReconcileActions: (v: string) => "reconcile" | "save_reconcile_for_later" | "exclude";
12
136
  export type ReconcileActionType = ReturnType<typeof toReconcileActions>;
@@ -107,9 +231,11 @@ export interface ReconciliationViewState extends FetchStateAndError {
107
231
  reconTabsState: ReconciliationTabsState;
108
232
  refreshStatus: FetchStateAndError;
109
233
  selectedTab: ReconciliationViewTabType;
234
+ statementProcessingFailed: boolean;
110
235
  statementUploadChosen: boolean;
111
236
  selectedAccountId?: ID;
112
237
  selectedDrawerAccountId?: ID;
238
+ summary?: ReconciliationViewSummary;
113
239
  }
114
240
  export interface BankConnectionStatus {
115
241
  connectionInProgress: boolean;
@@ -120,19 +246,65 @@ export interface AccountReconciliationRecords {
120
246
  accountIDs: ID[];
121
247
  reconciliationByAccountID: Record<ID, AccountReconciliationDataWithTransactionFetchState>;
122
248
  }
249
+ export interface StatementTransactionForUpdate {
250
+ amount: number;
251
+ transactionDate: string;
252
+ transactionDirection: 'debit' | 'credit';
253
+ transactionMemo: string;
254
+ statementTransactionId?: string;
255
+ }
256
+ export interface StatementTransactionsUpdate {
257
+ added: StatementTransactionForUpdate[];
258
+ deletedIds: string[];
259
+ updated: StatementTransactionForUpdate[];
260
+ }
261
+ export interface StatementUpdateLocalData {
262
+ statementMeta: StatementMeta;
263
+ statementTransactions: StatementTransactionsUpdate;
264
+ }
265
+ export interface StatementUpdateLocalDataPayload {
266
+ statement_meta: {
267
+ opening_balance: number;
268
+ statement_end_date: string;
269
+ statement_start_date: string;
270
+ total_deposits: number;
271
+ total_payments: number;
272
+ };
273
+ statement_transactions: {
274
+ added: Array<{
275
+ amount: number;
276
+ transaction_date: string;
277
+ transaction_direction: 'debit' | 'credit';
278
+ transaction_memo: string;
279
+ }>;
280
+ deleted_ids: string[];
281
+ updated: Array<{
282
+ amount: number;
283
+ statement_transaction_id: string;
284
+ transaction_date: string;
285
+ transaction_direction: 'debit' | 'credit';
286
+ transaction_memo: string;
287
+ }>;
288
+ };
289
+ }
123
290
  export interface AccountReconciliationLocalData {
124
291
  accountSource?: ReconciliationAccountSourceType;
292
+ statementUpdateLocalData?: StatementUpdateLocalData;
125
293
  }
126
294
  export interface AccountReconciliationDataWithTransactionFetchState {
127
295
  accountId: ID;
128
296
  localData: AccountReconciliationLocalData;
129
297
  refreshStatus: FetchStateAndError;
298
+ reparseStatementStatus: FetchStateAndError;
299
+ statementDateConflict: StatementDateConflict | null;
130
300
  statementDeleteStatus: FetchStateAndError;
131
301
  statementParseInProgress: boolean;
302
+ statementParseStatus: FetchStateAndError;
132
303
  statementUpdateStatus: FetchStateAndError;
133
304
  statementUploadStatus: FetchStateAndError;
134
305
  transactionFetchState: FetchStateAndError;
135
306
  accountDetectionReason?: string;
307
+ parsedStatementData?: ParsedStatementData;
136
308
  reconciliationId?: ID;
137
309
  }
138
310
  export {};