@zeniai/client-epic-state 5.2.0 → 5.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/entity/accountRecon/accountReconReducer.js +4 -0
- package/lib/entity/accountRecon/accountReconState.d.ts +4 -1
- package/lib/entity/accountRecon/accountReconState.js +1 -0
- package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
- package/lib/entity/snackbar/snackbarTypes.js +1 -0
- package/lib/epic.d.ts +4 -1
- package/lib/epic.js +4 -1
- package/lib/esm/entity/accountRecon/accountReconReducer.js +4 -0
- package/lib/esm/entity/accountRecon/accountReconState.js +1 -0
- package/lib/esm/entity/snackbar/snackbarTypes.js +1 -0
- package/lib/esm/epic.js +4 -1
- package/lib/esm/index.js +3 -3
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/confirmStatementMappingEpic.js +43 -0
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/deleteAccountStatementEpic.js +1 -2
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/parseCombinedStatementEpic.js +31 -0
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/parseStatementEpic.js +15 -18
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/updateCombinedStatementInfoEpic.js +68 -0
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/updateStatementInfoEpic.js +10 -10
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/uploadAccountStatementDocumentAIHelper.js +12 -4
- package/lib/esm/view/expenseAutomationView/epics/accountRecon/uploadAccountStatementEpic.js +8 -2
- package/lib/esm/view/expenseAutomationView/helpers/mapStatementUpdateLocalDataToRequestBody.js +20 -5
- package/lib/esm/view/expenseAutomationView/payload/reconciliationPayload.js +135 -0
- package/lib/esm/view/expenseAutomationView/reducers/reconciliationViewReducer.js +120 -16
- package/lib/esm/view/expenseAutomationView/selectors/reconciliationViewSelector.js +38 -7
- package/lib/esm/view/expenseAutomationView/selectors/statementParseViewSelector.js +43 -10
- package/lib/esm/view/expenseAutomationView/types/reconciliationViewState.js +15 -1
- package/lib/index.d.ts +4 -4
- package/lib/index.js +51 -46
- package/lib/view/expenseAutomationView/epics/accountRecon/confirmStatementMappingEpic.d.ts +34 -0
- package/lib/view/expenseAutomationView/epics/accountRecon/confirmStatementMappingEpic.js +47 -0
- package/lib/view/expenseAutomationView/epics/accountRecon/deleteAccountStatementEpic.d.ts +2 -2
- package/lib/view/expenseAutomationView/epics/accountRecon/deleteAccountStatementEpic.js +0 -1
- package/lib/view/expenseAutomationView/epics/accountRecon/parseCombinedStatementEpic.d.ts +26 -0
- package/lib/view/expenseAutomationView/epics/accountRecon/parseCombinedStatementEpic.js +35 -0
- package/lib/view/expenseAutomationView/epics/accountRecon/parseStatementEpic.d.ts +21 -1
- package/lib/view/expenseAutomationView/epics/accountRecon/parseStatementEpic.js +15 -18
- package/lib/view/expenseAutomationView/epics/accountRecon/updateCombinedStatementInfoEpic.d.ts +27 -0
- package/lib/view/expenseAutomationView/epics/accountRecon/updateCombinedStatementInfoEpic.js +72 -0
- package/lib/view/expenseAutomationView/epics/accountRecon/updateStatementInfoEpic.js +10 -10
- package/lib/view/expenseAutomationView/epics/accountRecon/uploadAccountStatementDocumentAIHelper.d.ts +1 -1
- package/lib/view/expenseAutomationView/epics/accountRecon/uploadAccountStatementDocumentAIHelper.js +12 -4
- package/lib/view/expenseAutomationView/epics/accountRecon/uploadAccountStatementEpic.js +7 -1
- package/lib/view/expenseAutomationView/helpers/mapStatementUpdateLocalDataToRequestBody.d.ts +1 -0
- package/lib/view/expenseAutomationView/helpers/mapStatementUpdateLocalDataToRequestBody.js +20 -4
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/lib/view/expenseAutomationView/payload/reconciliationPayload.d.ts +109 -4
- package/lib/view/expenseAutomationView/payload/reconciliationPayload.js +143 -0
- package/lib/view/expenseAutomationView/reducers/reconciliationViewReducer.d.ts +32 -4
- package/lib/view/expenseAutomationView/reducers/reconciliationViewReducer.js +122 -18
- package/lib/view/expenseAutomationView/selectorTypes/reconciliationViewSelectorTypes.d.ts +5 -1
- package/lib/view/expenseAutomationView/selectors/reconciliationViewSelector.d.ts +4 -1
- package/lib/view/expenseAutomationView/selectors/reconciliationViewSelector.js +40 -7
- package/lib/view/expenseAutomationView/selectors/statementParseViewSelector.d.ts +3 -2
- package/lib/view/expenseAutomationView/selectors/statementParseViewSelector.js +44 -10
- package/lib/view/expenseAutomationView/types/reconciliationViewState.d.ts +74 -1
- package/lib/view/expenseAutomationView/types/reconciliationViewState.js +19 -1
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
5
|
-
exports.updateNodeCollapseState = exports.updateStatementUploadChosen = exports.clearStatementDateConflict = exports.submitStatementUpdateFailure = exports.submitStatementUpdateSuccess = exports.submitStatementUpdate = exports.updateStatementUpdateLocalData = void 0;
|
|
4
|
+
exports.resetReparseStatementStatus = exports.reparseStatementFailure = exports.reparseStatementSuccess = exports.reparseStatement = exports.parseStatementFailure = exports.parseStatementSuccess = exports.parseCombinedStatement = 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.updateStatementProcessingBackgroundCompletedSteps = exports.setStatementProcessingDismissedToBackground = 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.confirmStatementMappingFailure = exports.confirmStatementMappingSuccess = exports.confirmStatementMapping = exports.clearStatementDateConflict = exports.submitStatementUpdateFailure = exports.submitStatementUpdateSuccess = exports.submitCombinedStatementUpdate = exports.submitStatementUpdate = exports.updateStatementUpdateLocalData = exports.updateParsedStatementData = void 0;
|
|
6
6
|
const toolkit_1 = require("@reduxjs/toolkit");
|
|
7
7
|
const timePeriod_1 = require("../../../commonStateTypes/timePeriod");
|
|
8
8
|
const accountState_1 = require("../../../entity/account/accountState");
|
|
@@ -435,7 +435,7 @@ const expenseAutomationReconciliationView = (0, toolkit_1.createSlice)({
|
|
|
435
435
|
}
|
|
436
436
|
},
|
|
437
437
|
uploadAccountStatement: (draft, action) => {
|
|
438
|
-
const { accountId, selectedPeriod } = action.payload;
|
|
438
|
+
const { accountId, selectedPeriod, statementAccountScope } = action.payload;
|
|
439
439
|
const accountRecon = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
|
|
440
440
|
if (accountRecon != null) {
|
|
441
441
|
accountRecon.statementUploadStatus = {
|
|
@@ -460,6 +460,22 @@ const expenseAutomationReconciliationView = (0, toolkit_1.createSlice)({
|
|
|
460
460
|
fetchState: 'Not-Started',
|
|
461
461
|
error: undefined,
|
|
462
462
|
};
|
|
463
|
+
accountRecon.combinedStatementGroupId = undefined;
|
|
464
|
+
accountRecon.confirmedCombinedStatementUploads = undefined;
|
|
465
|
+
accountRecon.confirmStatementMappingStatus = {
|
|
466
|
+
fetchState: 'Not-Started',
|
|
467
|
+
error: undefined,
|
|
468
|
+
};
|
|
469
|
+
accountRecon.confirmStatementMappingConflict = null;
|
|
470
|
+
if (accountRecon.localData != null) {
|
|
471
|
+
accountRecon.localData.statementUpdateLocalDataByUploadId = undefined;
|
|
472
|
+
}
|
|
473
|
+
if (statementAccountScope != null) {
|
|
474
|
+
accountRecon.localData = {
|
|
475
|
+
...accountRecon.localData,
|
|
476
|
+
statementAccountScope,
|
|
477
|
+
};
|
|
478
|
+
}
|
|
463
479
|
}
|
|
464
480
|
},
|
|
465
481
|
uploadAccountStatementSuccess: (draft, action) => {
|
|
@@ -522,8 +538,16 @@ const expenseAutomationReconciliationView = (0, toolkit_1.createSlice)({
|
|
|
522
538
|
fetchState: 'Not-Started',
|
|
523
539
|
error: undefined,
|
|
524
540
|
};
|
|
541
|
+
accountRecon.combinedStatementGroupId = undefined;
|
|
542
|
+
accountRecon.confirmedCombinedStatementUploads = undefined;
|
|
543
|
+
accountRecon.confirmStatementMappingStatus = {
|
|
544
|
+
fetchState: 'Not-Started',
|
|
545
|
+
error: undefined,
|
|
546
|
+
};
|
|
547
|
+
accountRecon.confirmStatementMappingConflict = null;
|
|
525
548
|
if (accountRecon.localData != null) {
|
|
526
|
-
accountRecon.localData.
|
|
549
|
+
accountRecon.localData.statementUpdateLocalDataByUploadId = undefined;
|
|
550
|
+
accountRecon.localData.statementAccountScope = undefined;
|
|
527
551
|
}
|
|
528
552
|
}
|
|
529
553
|
},
|
|
@@ -549,6 +573,17 @@ const expenseAutomationReconciliationView = (0, toolkit_1.createSlice)({
|
|
|
549
573
|
};
|
|
550
574
|
}
|
|
551
575
|
},
|
|
576
|
+
parseCombinedStatement: (draft, action) => {
|
|
577
|
+
const { accountId, selectedPeriod } = action.payload;
|
|
578
|
+
const accountRecon = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
|
|
579
|
+
if (accountRecon != null) {
|
|
580
|
+
accountRecon.parsedStatementData = undefined;
|
|
581
|
+
accountRecon.statementParseStatus = {
|
|
582
|
+
fetchState: 'In-Progress',
|
|
583
|
+
error: undefined,
|
|
584
|
+
};
|
|
585
|
+
}
|
|
586
|
+
},
|
|
552
587
|
parseStatementSuccess: (draft, action) => {
|
|
553
588
|
const { accountId, selectedPeriod } = action.payload;
|
|
554
589
|
const accountRecon = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
|
|
@@ -603,7 +638,7 @@ const expenseAutomationReconciliationView = (0, toolkit_1.createSlice)({
|
|
|
603
638
|
accountRecon.statementProcessingFailed = false;
|
|
604
639
|
accountRecon.statementParseInProgress = true;
|
|
605
640
|
if (accountRecon.localData != null) {
|
|
606
|
-
accountRecon.localData.
|
|
641
|
+
accountRecon.localData.statementUpdateLocalDataByUploadId = undefined;
|
|
607
642
|
}
|
|
608
643
|
}
|
|
609
644
|
},
|
|
@@ -649,19 +684,18 @@ const expenseAutomationReconciliationView = (0, toolkit_1.createSlice)({
|
|
|
649
684
|
parsedStatementData;
|
|
650
685
|
},
|
|
651
686
|
updateStatementUpdateLocalData: (draft, action) => {
|
|
652
|
-
const { accountId, selectedPeriod, statementUpdateLocalData } = action.payload;
|
|
687
|
+
const { accountId, selectedPeriod, statementUpdateLocalData, statementUploadId, } = action.payload;
|
|
653
688
|
const accountRecon = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
|
|
654
|
-
if (accountRecon
|
|
655
|
-
|
|
656
|
-
accountRecon.localData = {
|
|
657
|
-
statementUpdateLocalData,
|
|
658
|
-
};
|
|
659
|
-
}
|
|
660
|
-
else {
|
|
661
|
-
accountRecon.localData.statementUpdateLocalData =
|
|
662
|
-
statementUpdateLocalData;
|
|
663
|
-
}
|
|
689
|
+
if (accountRecon == null || statementUploadId === '') {
|
|
690
|
+
return;
|
|
664
691
|
}
|
|
692
|
+
if (accountRecon.localData == null) {
|
|
693
|
+
accountRecon.localData = {};
|
|
694
|
+
}
|
|
695
|
+
accountRecon.localData.statementUpdateLocalDataByUploadId = {
|
|
696
|
+
...accountRecon.localData.statementUpdateLocalDataByUploadId,
|
|
697
|
+
[statementUploadId]: statementUpdateLocalData,
|
|
698
|
+
};
|
|
665
699
|
},
|
|
666
700
|
submitStatementUpdate: (draft, action) => {
|
|
667
701
|
const { accountId, selectedPeriod } = action.payload;
|
|
@@ -675,6 +709,17 @@ const expenseAutomationReconciliationView = (0, toolkit_1.createSlice)({
|
|
|
675
709
|
accountRecon.statementDateConflict = null;
|
|
676
710
|
}
|
|
677
711
|
},
|
|
712
|
+
submitCombinedStatementUpdate: (draft, action) => {
|
|
713
|
+
const { accountId, selectedPeriod } = action.payload;
|
|
714
|
+
const accountRecon = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
|
|
715
|
+
if (accountRecon != null) {
|
|
716
|
+
accountRecon.statementUpdateStatus = {
|
|
717
|
+
fetchState: 'In-Progress',
|
|
718
|
+
error: undefined,
|
|
719
|
+
};
|
|
720
|
+
accountRecon.statementDateConflict = null;
|
|
721
|
+
}
|
|
722
|
+
},
|
|
678
723
|
submitStatementUpdateSuccess: (draft, action) => {
|
|
679
724
|
const { accountId, selectedPeriod } = action.payload;
|
|
680
725
|
const accountRecon = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
|
|
@@ -689,7 +734,7 @@ const expenseAutomationReconciliationView = (0, toolkit_1.createSlice)({
|
|
|
689
734
|
accountRecon.statementProcessingStartedAtMs = undefined;
|
|
690
735
|
accountRecon.statementProcessingTotalDurationSeconds = undefined;
|
|
691
736
|
if (accountRecon.localData != null) {
|
|
692
|
-
accountRecon.localData.
|
|
737
|
+
accountRecon.localData.statementUpdateLocalDataByUploadId = undefined;
|
|
693
738
|
}
|
|
694
739
|
}
|
|
695
740
|
},
|
|
@@ -711,6 +756,52 @@ const expenseAutomationReconciliationView = (0, toolkit_1.createSlice)({
|
|
|
711
756
|
accountRecon.statementDateConflict = null;
|
|
712
757
|
}
|
|
713
758
|
},
|
|
759
|
+
confirmStatementMapping: (draft, action) => {
|
|
760
|
+
const { accountId, selectedPeriod } = action.payload;
|
|
761
|
+
const accountRecon = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
|
|
762
|
+
if (accountRecon != null) {
|
|
763
|
+
accountRecon.confirmStatementMappingStatus = {
|
|
764
|
+
fetchState: 'In-Progress',
|
|
765
|
+
error: undefined,
|
|
766
|
+
};
|
|
767
|
+
accountRecon.confirmStatementMappingConflict = null;
|
|
768
|
+
}
|
|
769
|
+
},
|
|
770
|
+
confirmStatementMappingSuccess: (draft, action) => {
|
|
771
|
+
const { accountId, selectedPeriod, statementUploads } = action.payload;
|
|
772
|
+
const accountRecon = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
|
|
773
|
+
if (accountRecon != null) {
|
|
774
|
+
accountRecon.confirmStatementMappingStatus = {
|
|
775
|
+
fetchState: 'Completed',
|
|
776
|
+
error: undefined,
|
|
777
|
+
};
|
|
778
|
+
accountRecon.confirmStatementMappingConflict = null;
|
|
779
|
+
accountRecon.confirmedCombinedStatementUploads = statementUploads;
|
|
780
|
+
const combinedStatementDetails = accountRecon.parsedStatementData?.statementUpload
|
|
781
|
+
.combinedStatementDetails;
|
|
782
|
+
if (combinedStatementDetails != null) {
|
|
783
|
+
combinedStatementDetails.isMappingConfirmed = true;
|
|
784
|
+
}
|
|
785
|
+
const combinedStatementGroupId = combinedStatementDetails?.combinedStatementGroupId ??
|
|
786
|
+
accountRecon.parsedStatementData?.statementUpload.statementMeta
|
|
787
|
+
.combinedStatementGroupId;
|
|
788
|
+
if (combinedStatementGroupId != null &&
|
|
789
|
+
combinedStatementGroupId !== '') {
|
|
790
|
+
accountRecon.combinedStatementGroupId = combinedStatementGroupId;
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
},
|
|
794
|
+
confirmStatementMappingFailure: (draft, action) => {
|
|
795
|
+
const { accountId, selectedPeriod, mappingConflict } = action.payload;
|
|
796
|
+
const accountRecon = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)]?.reconciliationByAccountID[accountId];
|
|
797
|
+
if (accountRecon != null) {
|
|
798
|
+
accountRecon.confirmStatementMappingStatus = {
|
|
799
|
+
fetchState: 'Error',
|
|
800
|
+
error: action.payload.error,
|
|
801
|
+
};
|
|
802
|
+
accountRecon.confirmStatementMappingConflict = mappingConflict ?? null;
|
|
803
|
+
}
|
|
804
|
+
},
|
|
714
805
|
updateAccountReconciliationLocalData: (draft, action) => {
|
|
715
806
|
const { accountId, selectedPeriod, localData } = action.payload;
|
|
716
807
|
const oldLocalData = draft.accountReconciliationRecordsBySelectedPeriod[(0, timePeriod_1.toMonthYearPeriodId)(selectedPeriod)].reconciliationByAccountID[accountId].localData;
|
|
@@ -821,7 +912,7 @@ const expenseAutomationReconciliationView = (0, toolkit_1.createSlice)({
|
|
|
821
912
|
},
|
|
822
913
|
});
|
|
823
914
|
// Export actions
|
|
824
|
-
_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.setStatementProcessingDismissedToBackground = _a.setStatementProcessingDismissedToBackground, exports.updateStatementProcessingBackgroundCompletedSteps = _a.updateStatementProcessingBackgroundCompletedSteps, 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;
|
|
915
|
+
_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.setStatementProcessingDismissedToBackground = _a.setStatementProcessingDismissedToBackground, exports.updateStatementProcessingBackgroundCompletedSteps = _a.updateStatementProcessingBackgroundCompletedSteps, 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.parseCombinedStatement = _a.parseCombinedStatement, 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.submitCombinedStatementUpdate = _a.submitCombinedStatementUpdate, exports.submitStatementUpdateSuccess = _a.submitStatementUpdateSuccess, exports.submitStatementUpdateFailure = _a.submitStatementUpdateFailure, exports.clearStatementDateConflict = _a.clearStatementDateConflict, exports.confirmStatementMapping = _a.confirmStatementMapping, exports.confirmStatementMappingSuccess = _a.confirmStatementMappingSuccess, exports.confirmStatementMappingFailure = _a.confirmStatementMappingFailure, exports.updateStatementUploadChosen = _a.updateStatementUploadChosen, exports.updateNodeCollapseState = _a.updateNodeCollapseState;
|
|
825
916
|
// Export reducer
|
|
826
917
|
exports.default = expenseAutomationReconciliationView.reducer;
|
|
827
918
|
function isEntityStatementParsing(reconciliation) {
|
|
@@ -835,6 +926,7 @@ function isEntityStatementParseTerminal(reconciliation) {
|
|
|
835
926
|
statusCode === 'parsing_failed' ||
|
|
836
927
|
statusCode === 'validation_failed' ||
|
|
837
928
|
statusCode === 'processing_failed' ||
|
|
929
|
+
statusCode === 'parsed_awaiting_mapping' ||
|
|
838
930
|
statusCode === 'deleting' ||
|
|
839
931
|
statusCode === 'deleted');
|
|
840
932
|
}
|
|
@@ -970,6 +1062,13 @@ function updateAllReconciliation(draft, accounts, selectedPeriod, reconciliation
|
|
|
970
1062
|
error: undefined,
|
|
971
1063
|
},
|
|
972
1064
|
statementDateConflict: oldRecord?.statementDateConflict ?? null,
|
|
1065
|
+
confirmStatementMappingStatus: oldRecord?.confirmStatementMappingStatus ?? {
|
|
1066
|
+
fetchState: 'Not-Started',
|
|
1067
|
+
error: undefined,
|
|
1068
|
+
},
|
|
1069
|
+
confirmStatementMappingConflict: oldRecord?.confirmStatementMappingConflict ?? null,
|
|
1070
|
+
confirmedCombinedStatementUploads: oldRecord?.confirmedCombinedStatementUploads,
|
|
1071
|
+
combinedStatementGroupId: oldRecord?.combinedStatementGroupId,
|
|
973
1072
|
localData: {
|
|
974
1073
|
...oldRecord?.localData,
|
|
975
1074
|
accountSource: account?.reconciliation_source != null
|
|
@@ -1068,6 +1167,11 @@ const updateReconciliationByAccountIDOnIncludeAccount = (draft, accountId, recon
|
|
|
1068
1167
|
statementParseStatus: { fetchState: 'Not-Started', error: undefined },
|
|
1069
1168
|
reparseStatementStatus: { fetchState: 'Not-Started', error: undefined },
|
|
1070
1169
|
statementDateConflict: null,
|
|
1170
|
+
confirmStatementMappingStatus: {
|
|
1171
|
+
fetchState: 'Not-Started',
|
|
1172
|
+
error: undefined,
|
|
1173
|
+
},
|
|
1174
|
+
confirmStatementMappingConflict: null,
|
|
1071
1175
|
localData: {},
|
|
1072
1176
|
accountDetectionReason: undefined,
|
|
1073
1177
|
};
|
|
@@ -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, ParsedStatementData, ReconListUIState, ReconciliationTabsState, ReconciliationViewSummary, ReconciliationViewTabType, StatementDateConflict, StatementTransaction } from '../types/reconciliationViewState';
|
|
12
|
+
import { AccountReconciliationLocalData, ActionFetchStates, ConfirmStatementMappingConflict, ConfirmedCombinedStatementUpload, ParsedStatementData, ReconListUIState, ReconciliationTabsState, ReconciliationViewSummary, ReconciliationViewTabType, StatementDateConflict, StatementTransaction } 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>;
|
|
@@ -55,6 +55,8 @@ export interface AccountReconciliationBySection {
|
|
|
55
55
|
export interface AccountReconciliationByAccount {
|
|
56
56
|
accountConnectionStatus: BankStatusCodeType;
|
|
57
57
|
accountReconEntity: AccountReconciliationEntity;
|
|
58
|
+
confirmStatementMappingConflict: ConfirmStatementMappingConflict | null;
|
|
59
|
+
confirmStatementMappingStatus: FetchStateAndError;
|
|
58
60
|
connectionInProgress: boolean;
|
|
59
61
|
localData: AccountReconciliationLocalData;
|
|
60
62
|
refreshStatus: FetchStateAndError;
|
|
@@ -72,6 +74,8 @@ export interface AccountReconciliationByAccount {
|
|
|
72
74
|
accountDetectionReason?: string;
|
|
73
75
|
/** Unfiltered parsed transactions for PDF citation highlights. */
|
|
74
76
|
allCitationTransactions?: StatementTransaction[];
|
|
77
|
+
combinedStatementGroupId?: string;
|
|
78
|
+
confirmedCombinedStatementUploads?: ConfirmedCombinedStatementUpload[];
|
|
75
79
|
parsedStatementData?: ParsedStatementData;
|
|
76
80
|
paymentAccountId?: ID;
|
|
77
81
|
statementProcessingStartedAtMs?: number;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { ID } from '../../../commonStateTypes/common';
|
|
2
2
|
import { ReportIDPlusForecastID } from '../../../commonStateTypes/viewAndReport/viewAndReport';
|
|
3
|
+
import { AccountBase } from '../../../entity/account/accountState';
|
|
3
4
|
import { RootState } from '../../../reducer';
|
|
4
|
-
import { ExpenseAutomationReconciliationViewSelector } from '../selectorTypes/reconciliationViewSelectorTypes';
|
|
5
|
+
import { AccountReconciliationByAccount, ExpenseAutomationReconciliationViewSelector } from '../selectorTypes/reconciliationViewSelectorTypes';
|
|
5
6
|
export declare const getExpenseAutomationReconciliationView: (state: RootState) => ExpenseAutomationReconciliationViewSelector;
|
|
6
7
|
export declare const getReparseStatementStatusByAccountId: (state: RootState, accountId: ID) => import("../../../commonStateTypes/common").FetchStateAndError;
|
|
8
|
+
export declare function getLedgerAccountsForCombinedStatementMapping(accountReconciliationsByAccountID: Record<ID, AccountReconciliationByAccount>): AccountBase[];
|
|
9
|
+
export declare function getUnavailableLedgerAccountIds(accountReconciliationsByAccountID: Record<ID, AccountReconciliationByAccount>): ID[];
|
|
7
10
|
export declare const isAccountReconReport: (reportId: ReportIDPlusForecastID) => boolean;
|
|
@@ -4,6 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.isAccountReconReport = exports.getReparseStatementStatusByAccountId = exports.getExpenseAutomationReconciliationView = void 0;
|
|
7
|
+
exports.getLedgerAccountsForCombinedStatementMapping = getLedgerAccountsForCombinedStatementMapping;
|
|
8
|
+
exports.getUnavailableLedgerAccountIds = getUnavailableLedgerAccountIds;
|
|
7
9
|
const toolkit_1 = require("@reduxjs/toolkit");
|
|
8
10
|
const big_js_1 = __importDefault(require("big.js"));
|
|
9
11
|
const keys_1 = __importDefault(require("lodash/keys"));
|
|
@@ -251,8 +253,23 @@ exports.getExpenseAutomationReconciliationView = (0, toolkit_1.createSelector)((
|
|
|
251
253
|
}
|
|
252
254
|
const accountReconState = accountReconForMonthYearPeriod.reconciliationByAccountID[accountID];
|
|
253
255
|
const rawParsedStatementData = accountReconState.parsedStatementData;
|
|
254
|
-
const
|
|
255
|
-
const
|
|
256
|
+
const statementUpdateLocalDataByUploadId = accountReconState.localData?.statementUpdateLocalDataByUploadId;
|
|
257
|
+
const statementAccountScope = accountReconState.localData?.statementAccountScope;
|
|
258
|
+
const parsedStatementDataForView = (0, statementParseViewSelector_1.getParsedStatementDataForView)(rawParsedStatementData, statementUpdateLocalDataByUploadId, statementAccountScope);
|
|
259
|
+
const rawStatementUploads = rawParsedStatementData?.statementUploads != null &&
|
|
260
|
+
rawParsedStatementData.statementUploads.length > 0
|
|
261
|
+
? rawParsedStatementData.statementUploads
|
|
262
|
+
: rawParsedStatementData?.statementUpload != null
|
|
263
|
+
? [rawParsedStatementData.statementUpload]
|
|
264
|
+
: [];
|
|
265
|
+
const allCitationTransactions = rawStatementUploads.flatMap((statementUpload) => statementUpload.statementTransactions);
|
|
266
|
+
const statementTransactionPeriodById = rawStatementUploads.length > 0
|
|
267
|
+
? Object.assign({}, ...rawStatementUploads.map((statementUpload) => {
|
|
268
|
+
const uploadId = statementUpload.statementMeta.statementUploadId;
|
|
269
|
+
const localMeta = statementUpdateLocalDataByUploadId?.[uploadId]?.statementMeta;
|
|
270
|
+
return (0, statementParseViewSelector_1.getStatementTransactionPeriodById)(statementUpload.statementTransactions, statementUpload.statementMeta, localMeta);
|
|
271
|
+
}))
|
|
272
|
+
: undefined;
|
|
256
273
|
reconList[accountID] = {
|
|
257
274
|
accountConnectionStatus: accountConnectionStatus.status,
|
|
258
275
|
paymentAccountId: accountConnectionStatus.paymentAccountId,
|
|
@@ -263,6 +280,10 @@ exports.getExpenseAutomationReconciliationView = (0, toolkit_1.createSelector)((
|
|
|
263
280
|
statementParseStatus: accountReconState.statementParseStatus,
|
|
264
281
|
reparseStatementStatus: accountReconState.reparseStatementStatus,
|
|
265
282
|
statementDateConflict: accountReconState.statementDateConflict,
|
|
283
|
+
confirmStatementMappingStatus: accountReconState.confirmStatementMappingStatus,
|
|
284
|
+
confirmStatementMappingConflict: accountReconState.confirmStatementMappingConflict,
|
|
285
|
+
confirmedCombinedStatementUploads: accountReconState.confirmedCombinedStatementUploads,
|
|
286
|
+
combinedStatementGroupId: accountReconState.combinedStatementGroupId,
|
|
266
287
|
statementUpdateStatus: accountReconState.statementUpdateStatus,
|
|
267
288
|
statementUploadStatus: accountReconState.statementUploadStatus,
|
|
268
289
|
localData: accountReconState.localData,
|
|
@@ -273,11 +294,8 @@ exports.getExpenseAutomationReconciliationView = (0, toolkit_1.createSelector)((
|
|
|
273
294
|
statementProcessingTotalDurationSeconds: accountReconState.statementProcessingTotalDurationSeconds,
|
|
274
295
|
statementProcessingFailed: accountReconState.statementProcessingFailed,
|
|
275
296
|
parsedStatementData: parsedStatementDataForView,
|
|
276
|
-
allCitationTransactions
|
|
277
|
-
statementTransactionPeriodById
|
|
278
|
-
? (0, statementParseViewSelector_1.getStatementTransactionPeriodById)(rawParsedStatementData.statementUpload.statementTransactions, rawParsedStatementData.statementUpload.statementMeta, accountReconState.localData?.statementUpdateLocalData
|
|
279
|
-
?.statementMeta)
|
|
280
|
-
: undefined,
|
|
297
|
+
allCitationTransactions,
|
|
298
|
+
statementTransactionPeriodById,
|
|
281
299
|
transactionFetchState: (0, reduceFetchState_1.reduceAnyFetchState)([
|
|
282
300
|
accountReconState.transactionFetchState,
|
|
283
301
|
accountListState.byReportId.accountList,
|
|
@@ -347,6 +365,8 @@ exports.getExpenseAutomationReconciliationView = (0, toolkit_1.createSelector)((
|
|
|
347
365
|
statementParseStatus: { fetchState: 'Not-Started' },
|
|
348
366
|
reparseStatementStatus: { fetchState: 'Not-Started' },
|
|
349
367
|
statementDateConflict: null,
|
|
368
|
+
confirmStatementMappingStatus: { fetchState: 'Not-Started' },
|
|
369
|
+
confirmStatementMappingConflict: null,
|
|
350
370
|
localData: {},
|
|
351
371
|
connectionInProgress: false,
|
|
352
372
|
statementParseInProgress: false,
|
|
@@ -464,6 +484,19 @@ exports.getExpenseAutomationReconciliationView = (0, toolkit_1.createSelector)((
|
|
|
464
484
|
const getReparseStatementStatusByAccountId = (state, accountId) => (0, exports.getExpenseAutomationReconciliationView)(state)
|
|
465
485
|
.accountReconciliationsByAccountID[accountId]?.reparseStatementStatus;
|
|
466
486
|
exports.getReparseStatementStatusByAccountId = getReparseStatementStatusByAccountId;
|
|
487
|
+
function getLedgerAccountsForCombinedStatementMapping(accountReconciliationsByAccountID) {
|
|
488
|
+
return Object.values(accountReconciliationsByAccountID).map((accountReconciliation) => accountReconciliation.accountReconEntity.account);
|
|
489
|
+
}
|
|
490
|
+
const UNAVAILABLE_LEDGER_ACCOUNT_RECON_STATUSES = new Set(['in_progress', 'reconciled', 'reconciled_on_qbo']);
|
|
491
|
+
function getUnavailableLedgerAccountIds(accountReconciliationsByAccountID) {
|
|
492
|
+
return Object.values(accountReconciliationsByAccountID)
|
|
493
|
+
.filter((accountReconciliation) => {
|
|
494
|
+
const statusCode = accountReconciliation.accountReconEntity.reconciliationStatus?.code;
|
|
495
|
+
return (statusCode != null &&
|
|
496
|
+
UNAVAILABLE_LEDGER_ACCOUNT_RECON_STATUSES.has(statusCode));
|
|
497
|
+
})
|
|
498
|
+
.map((accountReconciliation) => accountReconciliation.accountReconEntity.account.accountId);
|
|
499
|
+
}
|
|
467
500
|
const isAccountReconReport = (reportId) => {
|
|
468
501
|
return reportId.endsWith('reconciliation');
|
|
469
502
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { ParsedStatementData, StatementMeta, StatementTransaction, StatementUpdateLocalData } from '../types/reconciliationViewState';
|
|
1
|
+
import { ParsedStatementData, StatementAccountScope, StatementMeta, StatementTransaction, StatementUpdateLocalData, StatementUpload } from '../types/reconciliationViewState';
|
|
2
|
+
export declare function getStatementUploadsFromParsedData(parsedStatementData: ParsedStatementData | undefined): StatementUpload[];
|
|
2
3
|
export interface StatementPeriod {
|
|
3
4
|
statementEndDate: string;
|
|
4
5
|
statementStartDate: string;
|
|
@@ -6,7 +7,7 @@ export interface StatementPeriod {
|
|
|
6
7
|
export declare const getEffectiveStatementPeriod: (parsedMeta: StatementMeta, localMeta: StatementMeta | undefined) => StatementPeriod;
|
|
7
8
|
export declare const isStatementTransactionInPeriod: (transactionDate: string, statementStartDate: string, statementEndDate: string) => boolean;
|
|
8
9
|
export declare const filterStatementTransactionsByPeriod: (transactions: StatementTransaction[], statementPeriod: StatementPeriod) => StatementTransaction[];
|
|
9
|
-
export declare const getParsedStatementDataForView: (parsedStatementData: ParsedStatementData | undefined,
|
|
10
|
+
export declare const getParsedStatementDataForView: (parsedStatementData: ParsedStatementData | undefined, statementUpdateLocalDataByUploadId?: Record<string, StatementUpdateLocalData>, statementAccountScope?: StatementAccountScope) => ParsedStatementData | undefined;
|
|
10
11
|
export declare const getStatementTransactionPeriodById: (allParsedTransactions: StatementTransaction[], parsedMeta: StatementMeta, localMeta: StatementMeta | undefined) => Record<string, boolean>;
|
|
11
12
|
export declare const getDateFilteredDeletedTransactionIds: (allParsedTransactions: StatementTransaction[], statementPeriod: StatementPeriod) => string[];
|
|
12
13
|
export declare const mergeStatementParseDeletedTransactionIds: (originalTransactions: StatementTransaction[], statementPeriod: StatementPeriod, currentTransactionIds: Set<string>) => string[];
|
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.mergeStatementParseDeletedTransactionIds = exports.getDateFilteredDeletedTransactionIds = exports.getStatementTransactionPeriodById = exports.getParsedStatementDataForView = exports.filterStatementTransactionsByPeriod = exports.isStatementTransactionInPeriod = exports.getEffectiveStatementPeriod = void 0;
|
|
4
|
+
exports.getStatementUploadsFromParsedData = getStatementUploadsFromParsedData;
|
|
4
5
|
const zeniDayJS_1 = require("../../../zeniDayJS");
|
|
6
|
+
function getStatementUploadsFromParsedData(parsedStatementData) {
|
|
7
|
+
if (parsedStatementData == null) {
|
|
8
|
+
return [];
|
|
9
|
+
}
|
|
10
|
+
if (parsedStatementData.statementUploads != null &&
|
|
11
|
+
parsedStatementData.statementUploads.length > 0) {
|
|
12
|
+
return parsedStatementData.statementUploads;
|
|
13
|
+
}
|
|
14
|
+
if (parsedStatementData.statementUpload != null) {
|
|
15
|
+
return [parsedStatementData.statementUpload];
|
|
16
|
+
}
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
5
19
|
const getEffectiveStatementPeriod = (parsedMeta, localMeta) => ({
|
|
6
20
|
statementStartDate: localMeta?.statementStartDate != null && localMeta.statementStartDate !== ''
|
|
7
21
|
? localMeta.statementStartDate
|
|
@@ -31,24 +45,44 @@ const filterStatementTransactionsByPeriod = (transactions, statementPeriod) => {
|
|
|
31
45
|
return transactions.filter((transaction) => (0, exports.isStatementTransactionInPeriod)(transaction.transactionDate, statementStartDate, statementEndDate));
|
|
32
46
|
};
|
|
33
47
|
exports.filterStatementTransactionsByPeriod = filterStatementTransactionsByPeriod;
|
|
34
|
-
const
|
|
48
|
+
const getStatementUploadForView = (statementUpload, statementUpdateLocalData) => {
|
|
49
|
+
const parsedMeta = statementUpload.statementMeta;
|
|
50
|
+
const localMeta = statementUpdateLocalData?.statementMeta;
|
|
51
|
+
const effectiveMeta = localMeta ?? parsedMeta;
|
|
52
|
+
const statementPeriod = (0, exports.getEffectiveStatementPeriod)(parsedMeta, localMeta);
|
|
53
|
+
return {
|
|
54
|
+
...statementUpload,
|
|
55
|
+
statementMeta: effectiveMeta,
|
|
56
|
+
statementTransactions: (0, exports.filterStatementTransactionsByPeriod)(statementUpload.statementTransactions, statementPeriod),
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
const getParsedStatementDataForView = (parsedStatementData, statementUpdateLocalDataByUploadId, statementAccountScope) => {
|
|
35
60
|
if (parsedStatementData == null) {
|
|
36
61
|
return undefined;
|
|
37
62
|
}
|
|
63
|
+
const statementUploads = getStatementUploadsFromParsedData(parsedStatementData);
|
|
64
|
+
if (statementUploads.length === 0) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
if (statementAccountScope === 'multi_account') {
|
|
68
|
+
const viewedUploads = statementUploads.map((statementUpload) => {
|
|
69
|
+
const uploadId = statementUpload.statementMeta.statementUploadId;
|
|
70
|
+
return getStatementUploadForView(statementUpload, statementUpdateLocalDataByUploadId?.[uploadId]);
|
|
71
|
+
});
|
|
72
|
+
const anchorUploadId = parsedStatementData.statementUpload.statementMeta.statementUploadId;
|
|
73
|
+
const viewedAnchor = viewedUploads.find((upload) => upload.statementMeta.statementUploadId === anchorUploadId) ?? viewedUploads[0];
|
|
74
|
+
return {
|
|
75
|
+
statementUpload: viewedAnchor,
|
|
76
|
+
statementUploads: viewedUploads,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
38
79
|
const statementUpload = parsedStatementData.statementUpload;
|
|
39
80
|
if (statementUpload == null) {
|
|
40
81
|
return undefined;
|
|
41
82
|
}
|
|
42
|
-
const
|
|
43
|
-
const localMeta = statementUpdateLocalData?.statementMeta;
|
|
44
|
-
const effectiveMeta = localMeta ?? parsedMeta;
|
|
45
|
-
const statementPeriod = (0, exports.getEffectiveStatementPeriod)(parsedMeta, localMeta);
|
|
83
|
+
const uploadId = statementUpload.statementMeta.statementUploadId;
|
|
46
84
|
return {
|
|
47
|
-
statementUpload:
|
|
48
|
-
...statementUpload,
|
|
49
|
-
statementMeta: effectiveMeta,
|
|
50
|
-
statementTransactions: (0, exports.filterStatementTransactionsByPeriod)(statementUpload.statementTransactions, statementPeriod),
|
|
51
|
-
},
|
|
85
|
+
statementUpload: getStatementUploadForView(statementUpload, statementUpdateLocalDataByUploadId?.[uploadId]),
|
|
52
86
|
};
|
|
53
87
|
};
|
|
54
88
|
exports.getParsedStatementDataForView = getParsedStatementDataForView;
|
|
@@ -29,6 +29,9 @@ export interface StatementTransaction {
|
|
|
29
29
|
transactionDirection: 'debit' | 'credit';
|
|
30
30
|
transactionMemo: string;
|
|
31
31
|
}
|
|
32
|
+
export declare const toStatementBalanceSource: (v: string) => "ocr" | "prior_recon" | "default_zero";
|
|
33
|
+
export type StatementBalanceSource = ReturnType<typeof toStatementBalanceSource>;
|
|
34
|
+
export declare const toStatementBalanceSourceStrict: (v: string | null | undefined) => StatementBalanceSource | undefined;
|
|
32
35
|
export interface StatementMeta {
|
|
33
36
|
closingBalance: number;
|
|
34
37
|
openingBalance: number;
|
|
@@ -45,6 +48,10 @@ export interface StatementMeta {
|
|
|
45
48
|
statementUploadId: string;
|
|
46
49
|
totalDeposits: number;
|
|
47
50
|
totalPayments: number;
|
|
51
|
+
balanceSource?: StatementBalanceSource;
|
|
52
|
+
combinedStatementGroupId?: string;
|
|
53
|
+
isCombinedStatement?: boolean;
|
|
54
|
+
isCombinedStatementAnchor?: boolean;
|
|
48
55
|
}
|
|
49
56
|
export interface AccountInfo {
|
|
50
57
|
accountId: string;
|
|
@@ -92,15 +99,63 @@ export interface AiSummary {
|
|
|
92
99
|
fieldsCaptured: AiSummaryField[];
|
|
93
100
|
transactionsExtracted: number;
|
|
94
101
|
}
|
|
102
|
+
export interface CombinedStatementAccountSuggestion {
|
|
103
|
+
accountId: ID;
|
|
104
|
+
accountName: string;
|
|
105
|
+
matchConfidence: number;
|
|
106
|
+
matchedBy: string;
|
|
107
|
+
}
|
|
108
|
+
export interface CombinedStatementAccount {
|
|
109
|
+
accountName: string;
|
|
110
|
+
accountType: string;
|
|
111
|
+
closingBalance: number;
|
|
112
|
+
isUploadContext: boolean;
|
|
113
|
+
ledgerIdentifier: string;
|
|
114
|
+
maskedAccountNumber: string;
|
|
115
|
+
openingBalance: number;
|
|
116
|
+
transactionCount: number;
|
|
117
|
+
existingStatementStatus?: {
|
|
118
|
+
code: string;
|
|
119
|
+
label: string;
|
|
120
|
+
} | null;
|
|
121
|
+
suggestion?: CombinedStatementAccountSuggestion | null;
|
|
122
|
+
}
|
|
123
|
+
export interface CombinedStatementDetails {
|
|
124
|
+
accounts: CombinedStatementAccount[];
|
|
125
|
+
combinedStatementGroupId: string;
|
|
126
|
+
isMappingConfirmed: boolean;
|
|
127
|
+
statementUploads: ConfirmedCombinedStatementUpload[];
|
|
128
|
+
}
|
|
129
|
+
export interface ConfirmedCombinedStatementUpload {
|
|
130
|
+
accountId: ID;
|
|
131
|
+
isCombinedStatementAnchor: boolean;
|
|
132
|
+
ledgerIdentifiers: string[];
|
|
133
|
+
statementUploadId: ID;
|
|
134
|
+
}
|
|
135
|
+
export interface ConfirmStatementMappingConflict {
|
|
136
|
+
collidingLedgerIdentifiers: string[];
|
|
137
|
+
collidingAccountId?: ID;
|
|
138
|
+
previousReconciliationInfo?: PreviousReconciliationInfo | null;
|
|
139
|
+
}
|
|
95
140
|
export interface StatementUpload {
|
|
96
141
|
account: AccountInfo;
|
|
97
142
|
file: FileInfo | null;
|
|
98
143
|
statementMeta: StatementMeta;
|
|
99
144
|
statementTransactions: StatementTransaction[];
|
|
100
145
|
aiSummary?: AiSummary | null;
|
|
146
|
+
combinedStatementDetails?: CombinedStatementDetails;
|
|
101
147
|
}
|
|
102
148
|
export interface ParsedStatementData {
|
|
149
|
+
/**
|
|
150
|
+
* Single-account parse: the only upload.
|
|
151
|
+
* Combined-account parse: the anchor / PDF-owning upload (also in statementUploads).
|
|
152
|
+
*/
|
|
103
153
|
statementUpload: StatementUpload;
|
|
154
|
+
/**
|
|
155
|
+
* Present only for combined multi-account parse responses after mapping.
|
|
156
|
+
* When set, ParseInfo renders one section per upload.
|
|
157
|
+
*/
|
|
158
|
+
statementUploads?: StatementUpload[];
|
|
104
159
|
}
|
|
105
160
|
export interface ReconciliationSummaryAccounts {
|
|
106
161
|
done: number;
|
|
@@ -264,9 +319,16 @@ export interface StatementTransactionsUpdate {
|
|
|
264
319
|
deletedIds: string[];
|
|
265
320
|
updated: StatementTransactionForUpdate[];
|
|
266
321
|
}
|
|
322
|
+
/** Client-only totals derived from in-period transactions; not sent on PUT. */
|
|
323
|
+
export interface StatementBalancesFromTransactions {
|
|
324
|
+
closingBalance: number;
|
|
325
|
+
totalDeposits: number;
|
|
326
|
+
totalPayments: number;
|
|
327
|
+
}
|
|
267
328
|
export interface StatementUpdateLocalData {
|
|
268
329
|
statementMeta: StatementMeta;
|
|
269
330
|
statementTransactions: StatementTransactionsUpdate;
|
|
331
|
+
balancesFromTransactions?: StatementBalancesFromTransactions;
|
|
270
332
|
}
|
|
271
333
|
export interface StatementUpdateLocalDataPayload {
|
|
272
334
|
statement_meta: {
|
|
@@ -294,12 +356,20 @@ export interface StatementUpdateLocalDataPayload {
|
|
|
294
356
|
}>;
|
|
295
357
|
};
|
|
296
358
|
}
|
|
359
|
+
export declare const toStatementAccountScope: (v: string) => "single_account" | "multi_account";
|
|
360
|
+
export type StatementAccountScope = ReturnType<typeof toStatementAccountScope>;
|
|
361
|
+
export declare const toStatementAccountScopeStrict: (v: string | null | undefined) => StatementAccountScope | undefined;
|
|
362
|
+
export declare const STATEMENT_ACCOUNT_SCOPES: readonly StatementAccountScope[];
|
|
297
363
|
export interface AccountReconciliationLocalData {
|
|
298
364
|
accountSource?: ReconciliationAccountSourceType;
|
|
299
|
-
|
|
365
|
+
statementAccountScope?: StatementAccountScope;
|
|
366
|
+
/** Confirm & Save drafts keyed by statementUploadId (single and combined). */
|
|
367
|
+
statementUpdateLocalDataByUploadId?: Record<string, StatementUpdateLocalData>;
|
|
300
368
|
}
|
|
301
369
|
export interface AccountReconciliationDataWithTransactionFetchState {
|
|
302
370
|
accountId: ID;
|
|
371
|
+
confirmStatementMappingConflict: ConfirmStatementMappingConflict | null;
|
|
372
|
+
confirmStatementMappingStatus: FetchStateAndError;
|
|
303
373
|
localData: AccountReconciliationLocalData;
|
|
304
374
|
refreshStatus: FetchStateAndError;
|
|
305
375
|
reparseStatementStatus: FetchStateAndError;
|
|
@@ -319,6 +389,9 @@ export interface AccountReconciliationDataWithTransactionFetchState {
|
|
|
319
389
|
statementUploadStatus: FetchStateAndError;
|
|
320
390
|
transactionFetchState: FetchStateAndError;
|
|
321
391
|
accountDetectionReason?: string;
|
|
392
|
+
/** Persisted after mapping confirm for batch GET / group pusher resolution. */
|
|
393
|
+
combinedStatementGroupId?: string;
|
|
394
|
+
confirmedCombinedStatementUploads?: ConfirmedCombinedStatementUpload[];
|
|
322
395
|
parsedStatementData?: ParsedStatementData;
|
|
323
396
|
reconciliationId?: ID;
|
|
324
397
|
/** Wall-clock start used to recompute UI step progress after backgrounding. */
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.toReconciliationTabsType = exports.toReconcileActions = exports.RECONCILE_ACTIONS = void 0;
|
|
3
|
+
exports.STATEMENT_ACCOUNT_SCOPES = exports.toStatementAccountScopeStrict = exports.toStatementAccountScope = exports.toReconciliationTabsType = exports.toReconcileActions = exports.RECONCILE_ACTIONS = exports.toStatementBalanceSourceStrict = exports.toStatementBalanceSource = void 0;
|
|
4
4
|
exports.toReconciliationViewSummary = toReconciliationViewSummary;
|
|
5
5
|
const stringToUnion_1 = require("../../../commonStateTypes/stringToUnion");
|
|
6
|
+
const ALL_STATEMENT_BALANCE_SOURCES = [
|
|
7
|
+
'ocr',
|
|
8
|
+
'prior_recon',
|
|
9
|
+
'default_zero',
|
|
10
|
+
];
|
|
11
|
+
const toStatementBalanceSource = (v) => (0, stringToUnion_1.stringToUnion)(v, ALL_STATEMENT_BALANCE_SOURCES);
|
|
12
|
+
exports.toStatementBalanceSource = toStatementBalanceSource;
|
|
13
|
+
const toStatementBalanceSourceStrict = (v) => (0, stringToUnion_1.stringToUnionStrict)(v ?? '', ALL_STATEMENT_BALANCE_SOURCES);
|
|
14
|
+
exports.toStatementBalanceSourceStrict = toStatementBalanceSourceStrict;
|
|
6
15
|
function toReconciliationViewSummary(payload) {
|
|
7
16
|
return {
|
|
8
17
|
accounts: {
|
|
@@ -65,3 +74,12 @@ const RECON_REVIEW_SORT_KEYS = [
|
|
|
65
74
|
];
|
|
66
75
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
67
76
|
const toReconReviewSortKey = (v) => (0, stringToUnion_1.stringToUnion)(v, RECON_REVIEW_SORT_KEYS);
|
|
77
|
+
const ALL_STATEMENT_ACCOUNT_SCOPES = [
|
|
78
|
+
'single_account',
|
|
79
|
+
'multi_account',
|
|
80
|
+
];
|
|
81
|
+
const toStatementAccountScope = (v) => (0, stringToUnion_1.stringToUnion)(v, ALL_STATEMENT_ACCOUNT_SCOPES);
|
|
82
|
+
exports.toStatementAccountScope = toStatementAccountScope;
|
|
83
|
+
const toStatementAccountScopeStrict = (v) => (0, stringToUnion_1.stringToUnionStrict)(v ?? '', ALL_STATEMENT_ACCOUNT_SCOPES);
|
|
84
|
+
exports.toStatementAccountScopeStrict = toStatementAccountScopeStrict;
|
|
85
|
+
exports.STATEMENT_ACCOUNT_SCOPES = ALL_STATEMENT_ACCOUNT_SCOPES;
|