@zeniai/client-epic-state 5.0.61-betaML1 → 5.0.61-betaSS1

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 (85) hide show
  1. package/lib/commonStateTypes/viewAndReport/viewAndReport.d.ts +2 -2
  2. package/lib/commonStateTypes/viewAndReport/viewAndReport.js +0 -2
  3. package/lib/entity/account/accountSelector.d.ts +0 -9
  4. package/lib/entity/account/accountSelector.js +1 -14
  5. package/lib/entity/account/accountState.d.ts +1 -1
  6. package/lib/entity/accountGroup/accountGroupState.d.ts +1 -1
  7. package/lib/entity/class/classReducer.d.ts +4 -4
  8. package/lib/entity/class/classState.d.ts +1 -1
  9. package/lib/entity/forecast/forecastState.d.ts +1 -1
  10. package/lib/entity/sectionAccountsView/sectionAccountsView.d.ts +1 -1
  11. package/lib/entity/sectionClassesViewV2/sectionClassesView.d.ts +1 -1
  12. package/lib/entity/sectionClassesViewV2/sectionClassesViewReducer.d.ts +2 -2
  13. package/lib/entity/sectionProjectView/sectionProjectView.d.ts +1 -1
  14. package/lib/entity/sectionProjectView/sectionProjectViewReducer.d.ts +2 -2
  15. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  16. package/lib/entity/snackbar/snackbarTypes.js +0 -2
  17. package/lib/entity/transaction/payloadTypes/transactionPayload.d.ts +0 -4
  18. package/lib/entity/transaction/payloadTypes/transactionPayload.js +0 -10
  19. package/lib/entity/transaction/stateTypes/transaction.d.ts +0 -3
  20. package/lib/epic.d.ts +1 -3
  21. package/lib/epic.js +1 -3
  22. package/lib/esm/commonStateTypes/viewAndReport/viewAndReport.js +0 -2
  23. package/lib/esm/entity/account/accountSelector.js +0 -11
  24. package/lib/esm/entity/snackbar/snackbarTypes.js +0 -2
  25. package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +0 -10
  26. package/lib/esm/epic.js +1 -3
  27. package/lib/esm/index.js +7 -6
  28. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +4 -0
  29. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +9 -1
  30. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +1 -8
  31. package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +79 -78
  32. package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +20 -31
  33. package/lib/esm/view/expenseAutomationView/types/completedSubTab.js +9 -0
  34. package/lib/esm/view/expenseAutomationView/types/missingReceiptsViewState.js +0 -2
  35. package/lib/esm/view/expenseAutomationView/types/transactionsViewState.js +0 -5
  36. package/lib/esm/view/transactionDetail/epics/transactionDetailEpic.js +0 -10
  37. package/lib/esm/view/transactionDetail/transactionDetailSelector.js +2 -24
  38. package/lib/index.d.ts +6 -5
  39. package/lib/index.js +37 -44
  40. package/lib/view/auditReportView/auditReportViewState.d.ts +1 -1
  41. package/lib/view/billPayCard/billPayCardSelector.d.ts +1 -1
  42. package/lib/view/cardBalance/cardBalanceSelector.d.ts +1 -1
  43. package/lib/view/cashBalance/cashBalanceSelector.d.ts +1 -1
  44. package/lib/view/cashInCashOut/cashInCashOutSelector.d.ts +1 -1
  45. package/lib/view/cashPosition/cashPositionSelector.d.ts +1 -1
  46. package/lib/view/dashboard/dashboardReducer.d.ts +2 -2
  47. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +4 -0
  48. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.d.ts +2 -2
  49. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +8 -0
  50. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.d.ts +2 -2
  51. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +0 -7
  52. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  53. package/lib/view/expenseAutomationView/payload/transactionCategorizationPayload.d.ts +15 -0
  54. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.d.ts +2 -1
  55. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +10 -23
  56. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +80 -79
  57. package/lib/view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes.d.ts +2 -1
  58. package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +15 -4
  59. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +0 -2
  60. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +20 -32
  61. package/lib/view/expenseAutomationView/types/completedSubTab.d.ts +2 -0
  62. package/lib/view/expenseAutomationView/types/completedSubTab.js +13 -0
  63. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.d.ts +1 -2
  64. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.js +1 -4
  65. package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +32 -15
  66. package/lib/view/expenseAutomationView/types/transactionsViewState.js +1 -6
  67. package/lib/view/financeStatement/financeStatementReducer.d.ts +1 -1
  68. package/lib/view/globalMerchantView/globalMerchantViewReducer.d.ts +2 -2
  69. package/lib/view/reimbursementCard/reimbursementCardSelector.d.ts +1 -1
  70. package/lib/view/reportsResync/reportsResyncReducer.d.ts +2 -2
  71. package/lib/view/tasksCard/tasksCardSelector.d.ts +1 -1
  72. package/lib/view/topEx/topExSelector.d.ts +1 -1
  73. package/lib/view/transactionDetail/epics/transactionDetailEpic.d.ts +1 -2
  74. package/lib/view/transactionDetail/epics/transactionDetailEpic.js +0 -10
  75. package/lib/view/transactionDetail/transactionDetailPayload.d.ts +1 -1
  76. package/lib/view/transactionDetail/transactionDetailSelector.d.ts +1 -6
  77. package/lib/view/transactionDetail/transactionDetailSelector.js +1 -23
  78. package/package.json +1 -1
  79. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.js +0 -81
  80. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransferAccountsEpic.js +0 -30
  81. package/lib/tsconfig.typecheck.tsbuildinfo +0 -1
  82. package/lib/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.d.ts +0 -9
  83. package/lib/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.js +0 -85
  84. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransferAccountsEpic.d.ts +0 -8
  85. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransferAccountsEpic.js +0 -34
@@ -4,7 +4,6 @@ import uniq from 'lodash/uniq';
4
4
  import { toMonthYearPeriodId, } from '../../../commonStateTypes/timePeriod';
5
5
  import { isVendorTransaction } from '../../../entity/transaction/stateTypes/vendorTransaction';
6
6
  import { MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, filterAutoTabLineItems, mergeTabSpecificLineItems, removeTransactionFromTabView, setEntityRecommendationForLineIdInLocalData, toSetAllLineItemsToCategoryClass, toTransactionDetailLocalData, } from '../helpers/transactionCategorizationLocalDataHelper';
7
- import { TRANSACTIONS_TABS, } from '../types/transactionsViewState';
8
7
  export const initialTransactionTabViewState = {
9
8
  saveStatus: {
10
9
  fetchState: 'Not-Started',
@@ -42,22 +41,44 @@ export const initialTransactionTabViewState = {
42
41
  selectedTransactionLineId: undefined,
43
42
  };
44
43
  export const initialState = {
45
- createTransferEntryStatus: 'Not-Started',
46
- creditCardAccountsForTransfer: {
47
- accountIds: [],
48
- fetchState: 'Not-Started',
44
+ autoCategorizedSubTabCache: {},
45
+ parentTotalCountByTab: {
46
+ review: {},
47
+ autoCategorized: {},
49
48
  },
50
- lastTransferEntryReplacement: undefined,
51
49
  selectedTransactionCategorizationTab: 'review',
50
+ selectedTransactionCategorizationCompletedSubTab: 'all',
52
51
  transactionCategorizationView: {
53
52
  review: { ...initialTransactionTabViewState },
54
53
  autoCategorized: { ...initialTransactionTabViewState },
55
54
  },
56
- transferAccounts: {
57
- accountIds: [],
58
- fetchState: 'Not-Started',
59
- },
60
55
  };
56
+ /**
57
+ * Capture the autoCategorized tab's current paginated dataset for a sub-tab.
58
+ * The mid-flight `'In-Progress'` state is normalised to `'Completed'` because
59
+ * the in-flight request is cancelled by `switchMap` in the fetch epic when the
60
+ * sub-tab changes — restoring `'In-Progress'` later would leave the UI stuck
61
+ * showing a phantom loading state with no fetch actually running. Length-zero
62
+ * datasets degrade to `'Not-Started'` so the next visit triggers a fresh
63
+ * fetch from page 1 instead of short-circuiting on stale empty caches.
64
+ */
65
+ function snapshotAutoCategorizedTab(autoCat) {
66
+ const transactionIdsBySelectedPeriod = {
67
+ ...autoCat.transactionIdsBySelectedPeriod,
68
+ };
69
+ const hasAnyLoadedRows = Object.values(transactionIdsBySelectedPeriod).some((ids) => ids.length > 0);
70
+ let normalisedFetchState = autoCat.fetchState;
71
+ if (normalisedFetchState === 'In-Progress') {
72
+ normalisedFetchState = hasAnyLoadedRows ? 'Completed' : 'Not-Started';
73
+ }
74
+ return {
75
+ error: autoCat.error,
76
+ fetchState: normalisedFetchState,
77
+ pageToken: autoCat.uiState.pageToken,
78
+ totalCount: { ...autoCat.uiState.totalCount },
79
+ transactionIdsBySelectedPeriod,
80
+ };
81
+ }
61
82
  const expenseAutomationTransactionsView = createSlice({
62
83
  name: 'expenseAutomationTransactionsView',
63
84
  initialState,
@@ -271,6 +292,48 @@ const expenseAutomationTransactionsView = createSlice({
271
292
  return { payload: { newSelectedTab } };
272
293
  },
273
294
  },
295
+ updateTransactionCategorizationCompletedSubTab: {
296
+ reducer(draft, action) {
297
+ const { newSubTab } = action.payload;
298
+ const previousSubTab = draft.selectedTransactionCategorizationCompletedSubTab;
299
+ if (previousSubTab === newSubTab) {
300
+ return;
301
+ }
302
+ const autoCat = draft.transactionCategorizationView.autoCategorized;
303
+ // Snapshot the outgoing sub-tab so a future revisit can short-circuit
304
+ // the fetch epic (mirrors the parent-tab "don't refetch what's
305
+ // already cached" behaviour). Period-scoped data is preserved as-is
306
+ // because the snapshot itself is keyed only by sub-tab; the active
307
+ // tab's per-period maps remain the source of truth while live.
308
+ draft.autoCategorizedSubTabCache[previousSubTab] =
309
+ snapshotAutoCategorizedTab(autoCat);
310
+ const cached = draft.autoCategorizedSubTabCache[newSubTab];
311
+ if (cached != null) {
312
+ autoCat.uiState.pageToken = cached.pageToken;
313
+ autoCat.uiState.totalCount = { ...cached.totalCount };
314
+ autoCat.transactionIdsBySelectedPeriod = {
315
+ ...cached.transactionIdsBySelectedPeriod,
316
+ };
317
+ autoCat.fetchState = cached.fetchState;
318
+ autoCat.error = cached.error;
319
+ }
320
+ else {
321
+ // Sub-tab has never been visited — clear the active slot so the
322
+ // view-epic's `fetchState === 'Not-Started' || transactionIds.length
323
+ // === 0` cache check falls through and triggers a fresh page-1
324
+ // fetch for the new dataset.
325
+ autoCat.uiState.pageToken = null;
326
+ autoCat.uiState.totalCount = {};
327
+ autoCat.transactionIdsBySelectedPeriod = {};
328
+ autoCat.fetchState = 'Not-Started';
329
+ autoCat.error = undefined;
330
+ }
331
+ draft.selectedTransactionCategorizationCompletedSubTab = newSubTab;
332
+ },
333
+ prepare(newSubTab) {
334
+ return { payload: { newSubTab } };
335
+ },
336
+ },
274
337
  updateTransactionCategorization: {
275
338
  reducer(draft, action) {
276
339
  const selectedTab = action.payload.selectedTab;
@@ -708,6 +771,10 @@ const expenseAutomationTransactionsView = createSlice({
708
771
  const { selectedTab, selectedPeriod, totalCount } = action.payload;
709
772
  draft.transactionCategorizationView[selectedTab].uiState.totalCount[toMonthYearPeriodId(selectedPeriod)] = totalCount;
710
773
  },
774
+ updateParentTotalCountForTab(draft, action) {
775
+ const { selectedTab, selectedPeriod, parentTotalCount } = action.payload;
776
+ draft.parentTotalCountByTab[selectedTab][toMonthYearPeriodId(selectedPeriod)] = parentTotalCount;
777
+ },
711
778
  updateSelectedCheckboxTransactionIds(draft, action) {
712
779
  const selectedTab = action.payload.selectedTab;
713
780
  const transactionIds = action.payload.transactionIds;
@@ -718,6 +785,7 @@ const expenseAutomationTransactionsView = createSlice({
718
785
  draft.transactionCategorizationView[selectedTab] = {
719
786
  ...initialTransactionTabViewState,
720
787
  };
788
+ draft.parentTotalCountByTab[selectedTab] = {};
721
789
  },
722
790
  clearExpenseAutomationTransactionsView(draft) {
723
791
  Object.assign(draft, initialState);
@@ -812,74 +880,7 @@ const expenseAutomationTransactionsView = createSlice({
812
880
  };
813
881
  },
814
882
  },
815
- fetchAccountsForTransferFlow(draft, action) {
816
- const slice = action.payload.kind === 'credit_card_only'
817
- ? draft.creditCardAccountsForTransfer
818
- : draft.transferAccounts;
819
- slice.fetchState = 'In-Progress';
820
- },
821
- updateAccountsForTransferFlow(draft, action) {
822
- const slice = action.payload.kind === 'credit_card_only'
823
- ? draft.creditCardAccountsForTransfer
824
- : draft.transferAccounts;
825
- slice.fetchState = 'Completed';
826
- slice.accountIds = action.payload.accountIds;
827
- },
828
- updateAccountsForTransferFlowFailure(draft, action) {
829
- const slice = action.payload.kind === 'credit_card_only'
830
- ? draft.creditCardAccountsForTransfer
831
- : draft.transferAccounts;
832
- slice.fetchState = 'Error';
833
- },
834
- createTransferEntry: {
835
- prepare(transactionId, creditAccountIntegrationId, debitAccountIntegrationId, memo, transactionType, sourceTransactionType) {
836
- return {
837
- payload: {
838
- transactionId,
839
- creditAccountIntegrationId,
840
- debitAccountIntegrationId,
841
- memo,
842
- transactionType,
843
- sourceTransactionType,
844
- },
845
- };
846
- },
847
- reducer(draft) {
848
- draft.createTransferEntryStatus = 'In-Progress';
849
- },
850
- },
851
- createTransferEntrySuccess(draft) {
852
- draft.createTransferEntryStatus = 'Completed';
853
- },
854
- createTransferEntryFailure(draft) {
855
- draft.createTransferEntryStatus = 'Error';
856
- },
857
- resetCreateTransferEntryStatus(draft) {
858
- draft.createTransferEntryStatus = 'Not-Started';
859
- },
860
- createTransferEntryReplacedTransaction: {
861
- prepare(previousTransactionId, newTransactionId) {
862
- return { payload: { newTransactionId, previousTransactionId } };
863
- },
864
- reducer(draft, action) {
865
- draft.lastTransferEntryReplacement = action.payload;
866
- },
867
- },
868
- acknowledgeTransferEntryRouteReplacement(draft) {
869
- draft.lastTransferEntryReplacement = undefined;
870
- },
871
- removeTransactionFromAllTabs: {
872
- prepare(transactionId) {
873
- return { payload: { transactionId } };
874
- },
875
- reducer(draft, action) {
876
- const { transactionId } = action.payload;
877
- for (const tab of TRANSACTIONS_TABS) {
878
- removeTransactionFromTabView(draft.transactionCategorizationView[tab], transactionId);
879
- }
880
- },
881
- },
882
883
  },
883
884
  });
884
- export const { fetchTransactionCategorization, updateTransactionCategorizationUIState, initializeTransactionCategorizationViewLocalData, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateStatusForTransactionNotMiscategorizedUpdateForCategorization, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, setAllItemsToCategoryClassInLocalDataForCategorization, updateTotalCountForTransactionCategorization, fetchTransactionCategorizationSuccess, resetOtherTabsFetchState, fetchTransactionCategorizationView, updateSelectedCheckboxTransactionIds, clearExpenseAutomationTransactionsViewPerTabView, clearExpenseAutomationTransactionsView, setEntityRecommendationForLineIdsForCategorization, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, fetchAccountsForTransferFlow, updateAccountsForTransferFlow, updateAccountsForTransferFlowFailure, createTransferEntry, createTransferEntrySuccess, createTransferEntryFailure, resetCreateTransferEntryStatus, createTransferEntryReplacedTransaction, acknowledgeTransferEntryRouteReplacement, removeTransactionFromAllTabs, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, } = expenseAutomationTransactionsView.actions;
885
+ export const { fetchTransactionCategorization, updateTransactionCategorizationUIState, initializeTransactionCategorizationViewLocalData, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationCompletedSubTab, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateStatusForTransactionNotMiscategorizedUpdateForCategorization, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, setAllItemsToCategoryClassInLocalDataForCategorization, updateTotalCountForTransactionCategorization, updateParentTotalCountForTab, fetchTransactionCategorizationSuccess, resetOtherTabsFetchState, fetchTransactionCategorizationView, updateSelectedCheckboxTransactionIds, clearExpenseAutomationTransactionsViewPerTabView, clearExpenseAutomationTransactionsView, setEntityRecommendationForLineIdsForCategorization, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, } = expenseAutomationTransactionsView.actions;
885
886
  export default expenseAutomationTransactionsView.reducer;
@@ -1,7 +1,6 @@
1
1
  import omit from 'lodash/omit';
2
2
  import { reduceAllFetchState, reduceAnyFetchState, } from '../../../commonStateTypes/reduceFetchState';
3
3
  import { toMonthYearPeriodId } from '../../../commonStateTypes/timePeriod';
4
- import { getAccountBase, getAccountBaseForCreditCardTransferAccounts, getAccountBaseForTransferAccounts, } from '../../../entity/account/accountSelector';
5
4
  import { getCurrentTenant, getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, } from '../../../entity/tenant/tenantSelector';
6
5
  import { getTransactionWithCOT } from '../../../entity/transaction/transactionHelper';
7
6
  import { getSupportedTransactionsByIds } from '../../../entity/transaction/transactionSelector';
@@ -9,12 +8,9 @@ import { getAccountList, getNestedAccountListHierarchy, getUncategorizedAccounts
9
8
  import { getClassList, getNestedClassListHierarchy, } from '../../classList/classListSelector';
10
9
  import { getProjectList } from '../../projectList/projectListSelector';
11
10
  import { getAllSteps } from '../selectorTypes/expenseAutomationViewSelectorTypes';
12
- export function getLastTransferEntryReplacement(state) {
13
- return state.expenseAutomationTransactionsViewState.lastTransferEntryReplacement;
14
- }
15
11
  export function getExpenseAutomationTransactionView(state) {
16
12
  const { accountState, classState, classListState, accountListState, expenseAutomationTransactionsViewState, expenseAutomationViewState, projectState, projectListState, transactionState, monthEndCloseChecksState, monthEndCloseChecksViewState, } = state;
17
- const { selectedTransactionCategorizationTab } = expenseAutomationTransactionsViewState;
13
+ const { selectedTransactionCategorizationCompletedSubTab, selectedTransactionCategorizationTab, } = expenseAutomationTransactionsViewState;
18
14
  const { uiState, refreshStatus, saveStatus, markAsNotMiscategorizedStatus, transactionIdsBySelectedPeriod, transactionReviewLocalDataById, selectedCheckBoxTransactionIds, transactionIdsWithUnsavedData, uploadReceiptStatusById, selectedTransactionId, selectedTransactionLineId, } = expenseAutomationTransactionsViewState.transactionCategorizationView[selectedTransactionCategorizationTab];
19
15
  const uncategorizedIncomeExpense = getUncategorizedAccounts(accountState, accountListState, 'accountList');
20
16
  const accountList = getAccountList(accountState, accountListState, 'accountList');
@@ -67,10 +63,27 @@ export function getExpenseAutomationTransactionView(state) {
67
63
  .uiState.totalCount;
68
64
  const totalCountByAutoCat = expenseAutomationTransactionsViewState.transactionCategorizationView
69
65
  .autoCategorized.uiState.totalCount;
66
+ // Per-(sub-)tab counts powering pagination, in-list "showing X of Y", and
67
+ // any save/refresh round-trips. Sourced from `uiState.totalCount` which
68
+ // mirrors the response's `total_count` for whatever tab/sub-tab the user is
69
+ // viewing (e.g. only the Manual sub-tab rows for Completed → Manual).
70
70
  const totalCountByTab = {
71
71
  review: monthYearPeriodId != null ? totalCountByReview[monthYearPeriodId] : 0,
72
72
  autoCategorized: monthYearPeriodId != null ? totalCountByAutoCat[monthYearPeriodId] : 0,
73
73
  };
74
+ // Parent-tab badge counts. Sourced from `parent_tab_total_count` in the
75
+ // listing response and used exclusively by the navbar / tab strip badges.
76
+ // Independent of which Completed sub-tab is active so the badge stays
77
+ // stable across sub-tab switches.
78
+ const parentTotalCountByTab = expenseAutomationTransactionsViewState.parentTotalCountByTab;
79
+ const parentTabTotalCountByTab = {
80
+ review: monthYearPeriodId != null
81
+ ? (parentTotalCountByTab.review[monthYearPeriodId] ?? 0)
82
+ : 0,
83
+ autoCategorized: monthYearPeriodId != null
84
+ ? (parentTotalCountByTab.autoCategorized[monthYearPeriodId] ?? 0)
85
+ : 0,
86
+ };
74
87
  const fetchStateByTab = {
75
88
  review: {
76
89
  fetchState: expenseAutomationTransactionsViewState.transactionCategorizationView
@@ -90,29 +103,6 @@ export function getExpenseAutomationTransactionView(state) {
90
103
  : [];
91
104
  const transactionCompletionStatus = allSteps.find((step) => step.step === 'transaction_categorization')?.completionStatus;
92
105
  const completionStatus = transactionCompletionStatus ?? 'incomplete';
93
- const transferAccountsFromApi = expenseAutomationTransactionsViewState.transferAccounts.accountIds
94
- .map((id) => getAccountBaseForTransferAccounts(accountState, id))
95
- .filter((account) => account != null);
96
- /**
97
- * Credit transfer picker uses transfer-account ids from a dedicated fetch. If that list
98
- * resolves to nothing while the COA list is loaded, fall back to the full COA list so the
99
- * credit dropdown is not empty.
100
- */
101
- const transferAccountsList = transferAccountsFromApi.length > 0
102
- ? transferAccountsFromApi
103
- : accountList.accounts
104
- .map((a) => getAccountBase(accountState, a.accountId, 'account_list'))
105
- .filter((account) => account != null);
106
- const creditCardAccountsFromApi = expenseAutomationTransactionsViewState.creditCardAccountsForTransfer.accountIds
107
- .map((id) => getAccountBaseForCreditCardTransferAccounts(accountState, id))
108
- .filter((account) => account != null);
109
- const coaCreditCardsFallback = accountList.accounts
110
- .map((a) => getAccountBase(accountState, a.accountId, 'account_list'))
111
- .filter((account) => account != null)
112
- .filter((a) => a.accountType === 'credit_card');
113
- const creditCardAccountsForTransferList = creditCardAccountsFromApi.length > 0
114
- ? creditCardAccountsFromApi
115
- : coaCreditCardsFallback;
116
106
  return {
117
107
  version: 0,
118
108
  fetchState: fetchStatus.fetchState,
@@ -133,14 +123,13 @@ export function getExpenseAutomationTransactionView(state) {
133
123
  refreshStatus,
134
124
  saveStatus,
135
125
  markAsNotMiscategorizedStatus,
136
- createTransferEntryStatus: expenseAutomationTransactionsViewState.createTransferEntryStatus,
137
126
  completionStatus,
138
127
  totalCountByTab,
128
+ parentTabTotalCountByTab,
139
129
  fetchStateByTransactionTabs: fetchStateByTab,
140
130
  uploadReceiptStatusById,
141
131
  selectedTransactionId,
142
132
  selectedTransactionLineId,
143
- creditCardAccountsForTransferList,
144
- transferAccounts: transferAccountsList,
133
+ selectedTransactionCategorizationCompletedSubTab,
145
134
  };
146
135
  }
@@ -0,0 +1,9 @@
1
+ import { stringToUnion } from '../../../commonStateTypes/stringToUnion';
2
+ /**
3
+ * Sub-tabs that can appear under any "Completed" tab in the Expense Automation
4
+ * surface (Transaction Categorization Completed and Missing Receipts Completed
5
+ * both use this exact union). Forwarded verbatim to listing APIs as `sub_tab`
6
+ * / `match_type`. `'all'` preserves parent-tab semantics on the backend.
7
+ */
8
+ const COMPLETED_SUB_TABS = ['all', 'ai_accountant', 'manual'];
9
+ export const toCompletedSubTab = (v) => stringToUnion(v.trim().toLowerCase(), COMPLETED_SUB_TABS);
@@ -39,8 +39,6 @@ const BULK_UPLOAD_RESULTS_TABS = ['completed', 'unmatched'];
39
39
  export const toBulkUploadResultsTab = (v) => stringToUnion(v.trim().toLowerCase(), BULK_UPLOAD_RESULTS_TABS);
40
40
  const MISSING_RECEIPTS_TABS = ['missing', 'completed', 'unmatched'];
41
41
  export const toMissingReceiptsTab = (v) => stringToUnion(v.trim().toLowerCase(), MISSING_RECEIPTS_TABS);
42
- const COMPLETED_SUB_TABS = ['all', 'ai_accountant', 'manual'];
43
- export const toCompletedSubTab = (v) => stringToUnion(v.trim().toLowerCase(), COMPLETED_SUB_TABS);
44
42
  const MATCH_SOURCES = ['ai', 'manual'];
45
43
  export const toMatchSource = (v) => stringToUnion(v.trim().toLowerCase(), MATCH_SOURCES);
46
44
  const BULK_UPLOAD_SORT_KEYS = [
@@ -25,8 +25,3 @@ export const initialSupportedTransactionCategorization = {
25
25
  tabSpecificLineItems: {},
26
26
  },
27
27
  };
28
- /** Which pool `fetchAccountsForTransferFlow` / transfer-flow epic should load. */
29
- export const TRANSFER_ACCOUNTS_FETCH_KIND = [
30
- 'transfer_eligible',
31
- 'credit_card_only',
32
- ];
@@ -13,7 +13,6 @@ import { fetchAccountList } from '../../accountList/accountListReducer';
13
13
  import { fetchClassList } from '../../classList/classListReducer';
14
14
  import { getInitializedTransactionVendorLocalData } from '../../commonVendorView/transactionVendorView/transactionVendorLocalDataHelper';
15
15
  import { updateTransactionVendorLocalData } from '../../commonVendorView/transactionVendorView/transactionVendorViewReducer';
16
- import { fetchAccountsForTransferFlow } from '../../expenseAutomationView/reducers/transactionsViewReducer';
17
16
  import { fetchOwnerList } from '../../ownerList/ownerListReducer';
18
17
  import { fetchProjectList } from '../../projectList/projectListReducer';
19
18
  import { fetchTransactionDetail, initializeTransactionDetailLocalData, removeTransactionDetail, updateTransactionDetailFetchState, } from '../transactionDetailReducer';
@@ -36,15 +35,6 @@ export const fetchTransactionDetailEpic = (actions$, state$, zeniAPI) => actions
36
35
  accountList.fetchState !== 'In-Progress') {
37
36
  transactionActions.push(fetchAccountList('accountList'));
38
37
  }
39
- const { transferAccounts, creditCardAccountsForTransfer, } = state$.value.expenseAutomationTransactionsViewState;
40
- if (transferAccounts.fetchState !== 'In-Progress' &&
41
- transferAccounts.fetchState !== 'Completed') {
42
- transactionActions.push(fetchAccountsForTransferFlow({ kind: 'transfer_eligible' }));
43
- }
44
- if (creditCardAccountsForTransfer.fetchState !== 'In-Progress' &&
45
- creditCardAccountsForTransfer.fetchState !== 'Completed') {
46
- transactionActions.push(fetchAccountsForTransferFlow({ kind: 'credit_card_only' }));
47
- }
48
38
  const classList = state$.value.classListState;
49
39
  if (classList.hasValidState() === false &&
50
40
  classList.fetchState !== 'In-Progress') {
@@ -1,7 +1,6 @@
1
1
  import recordGet from 'lodash/get';
2
2
  import { reduceFetchState } from '../../commonStateTypes/reduceFetchState';
3
- import { getAccountBase, getAccountBaseForCreditCardTransferAccounts, getAccountBaseForTransferAccounts, } from '../../entity/account/accountSelector';
4
- import { getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled } from '../../entity/tenant/tenantSelector';
3
+ import { getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, } from '../../entity/tenant/tenantSelector';
5
4
  import { toTransactionTypeStrict } from '../../entity/transaction/stateTypes/transactionType';
6
5
  import { getTransactionWithCOT } from '../../entity/transaction/transactionHelper';
7
6
  import { getSupportedTransactionById } from '../../entity/transaction/transactionSelector';
@@ -12,7 +11,7 @@ import { getClassList, getNestedClassListHierarchy, } from '../classList/classLi
12
11
  import { getProjectList, } from '../projectList/projectListSelector';
13
12
  import { getAllLinkedTransactions, getTransactionDetailKey, initialSupportedTransactionDetail, } from './transactionDetailState';
14
13
  export const getTransactionDetail = (state, transactionId, fetchLinkedTransactions = true) => {
15
- const { transactionDetailState, transactionState, vendorState, vendorListState, accountState, classState, classListState, accountListState, expenseAutomationTransactionsViewState, projectState, projectListState, } = state;
14
+ const { transactionDetailState, transactionState, vendorState, vendorListState, accountState, classState, classListState, accountListState, projectState, projectListState, } = state;
16
15
  const detailKey = getTransactionDetailKey(transactionId);
17
16
  const transactionDetail = recordGet(transactionDetailState.transactionDetailById, detailKey);
18
17
  let fetchState = {
@@ -73,24 +72,6 @@ export const getTransactionDetail = (state, transactionId, fetchLinkedTransactio
73
72
  : [];
74
73
  const transactionDetailAnyUpdateStatus = reduceUpdateFetchStates(transactionDetail);
75
74
  const vendors = getVendorsByVendorIds(vendorState, vendorListState.vendorIds);
76
- const transferAccountsFromApi = expenseAutomationTransactionsViewState.transferAccounts.accountIds
77
- .map((id) => getAccountBaseForTransferAccounts(accountState, id))
78
- .filter((account) => account != null);
79
- const transferAccountsList = transferAccountsFromApi.length > 0
80
- ? transferAccountsFromApi
81
- : accountsList.accounts
82
- .map((a) => getAccountBase(accountState, a.accountId, 'account_list'))
83
- .filter((account) => account != null);
84
- const creditCardAccountsFromApi = expenseAutomationTransactionsViewState.creditCardAccountsForTransfer.accountIds
85
- .map((id) => getAccountBaseForCreditCardTransferAccounts(accountState, id))
86
- .filter((account) => account != null);
87
- const coaCreditCardsFallback = accountsList.accounts
88
- .map((a) => getAccountBase(accountState, a.accountId, 'account_list'))
89
- .filter((account) => account != null)
90
- .filter((a) => a.accountType === 'credit_card');
91
- const creditCardAccountsForTransferList = creditCardAccountsFromApi.length > 0
92
- ? creditCardAccountsFromApi
93
- : coaCreditCardsFallback;
94
75
  return {
95
76
  reportId: 'transaction_detail',
96
77
  reportTitle: 'Transaction Detail',
@@ -107,9 +88,6 @@ export const getTransactionDetail = (state, transactionId, fetchLinkedTransactio
107
88
  accountsHierarchyList,
108
89
  classList: classList,
109
90
  isAccountingClassesEnabled,
110
- createTransferEntryStatus: expenseAutomationTransactionsViewState.createTransferEntryStatus,
111
- creditCardAccountsForTransferList,
112
- transferAccounts: transferAccountsList,
113
91
  isAccountingProjectsEnabled,
114
92
  projectList,
115
93
  isUpdateNotAllowed: transactionDetail?.isUpdateNotAllowed,
package/lib/index.d.ts CHANGED
@@ -273,7 +273,7 @@ import { clearExpenseAutomationFluxAnalysisView, fetchFluxAnalysisView, reviewFl
273
273
  import { clearJeScheduleLocalData as clearExpenseAutomationJEScheduleLocalData, clearExpenseAutomationJESchedulesView, fetchJeSchedulesPage as fetchExpenseAutomationJESchedulesPage, ignoreRecommendedJeSchedule as ignoreExpenseAutomationJESchedule, initializeAccountSettingsView as initializeJeAccountSettingsView, initializeJeScheduleLocalData, removeJeScheduleTransactionKey, retryJeSchedule as retryExpenseAutomationJESchedule, saveAccountSettings as saveJeAccountSettings, saveAccountSettingsLocalData as saveJeAccountSettingsLocalData, updateJESchedulesUIState as updateExpenseAutomationJESchedulesUIState, updateJeScheduleLocalDataById, updateJeScheduleTransactionKeys } from './view/expenseAutomationView/reducers/jeSchedulesViewReducer';
274
274
  import { acknowledgeBulkUploadConfirmMatchComplete, bulkUploadAutomatchingTimedOut, bulkUploadReceipts, bulkUploadReceiptsFailure, bulkUploadReceiptsSuccess, clearBulkUpload, clearManualSearchResults, clearMissingReceiptsTabNavigation, confirmBulkUploadMatch, confirmBulkUploadMatchFailure, confirmBulkUploadMatchSuccess, fetchBulkUploadBatchDetails, fetchBulkUploadBatchDetailsFailure, fetchBulkUploadBatchDetailsSuccess, fetchBulkUploadBatches, fetchBulkUploadBatchesFailure, fetchBulkUploadBatchesSuccess, fetchCompletedTransactions, fetchCompletedTransactionsFailure, fetchCompletedTransactionsSuccess, fetchMissingReceipts as fetchExpenseAutomationMissingReceipts, fetchMoreBatchDetails, fetchMoreBatchDetailsComplete, fetchMoreBatchDetailsFailure, markMissingReceiptAsDone as markExpenseAutomationMissingReceiptAsDone, pusherBatchStatusUpdate, requestMissingReceiptsTabNavigation, restoreBulkUploadAutomatchingOnMount, restoreBulkUploadMatchingState, searchTransactionsForManualMatch, searchTransactionsForManualMatchFailure, searchTransactionsForManualMatchSuccess, setBulkUploadCompletedSubTab, setBulkUploadResultsTab, setBulkUploadSortConfig, setBulkUploadUploadedFileCount, storeBatchDetails, updateBulkUploadProgress, updateMissingReceiptUploadState as updateExpenseAutomationMissingReceiptUploadState, updateMissingReceiptsUIState as updateExpenseAutomationMissingReceiptsUIState, uploadMissingReceiptSuccess as uploadExpenseAutomationMissingReceiptSuccess } from './view/expenseAutomationView/reducers/missingReceiptsViewReducer';
275
275
  import { deleteAccountStatement, excludeAccountFromReconciliation, fetchReconciliation as fetchReconciliationView, includeAccountInReconciliation, saveReconciliationDetail as saveExpenseAutomationReconciliationDetail, saveReconciliationReview as saveExpenseAutomationReconciliationReview, setConnectionInProgressForAccount as setConnectionInProgressForAccountReconciliation, setStatementParseInProgress, updateAccountReconciliationLocalData as updateExpenseAutomationAccountReconciliationLocalData, updateSelectedAccountId as updateExpenseAutomationAccountReconciliationSelectedAccountId, updateSelectedTab as updateExpenseAutomationAccountReconciliationSelectedTab, updateReconListScrollPosition as updateExpenseAutomationReconListScrollPosition, updateReviewTabSortState as updateExpenseAutomationReconReviewTabListSortState, updateReviewTabLocalData as updateExpenseAutomationReconReviewTabLocalData, updateReconcileTabListScrollState as updateExpenseAutomationReconcileTabListScrollState, updateReconcileTabListSortState as updateExpenseAutomationReconcileTabListSortState, updateReconcileTabLocalData as updateExpenseAutomationReconcileTabLocalData, updateSelectedDrawerAccountId as updateExpenseAutomationSelectedDrawerAccountId, updateNodeCollapseState, updateStatementUploadChosen, uploadAccountStatement } from './view/expenseAutomationView/reducers/reconciliationViewReducer';
276
- import { acknowledgeTransferEntryRouteReplacement, backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, createTransferEntry, createTransferEntryFailure, createTransferEntryReplacedTransaction, createTransferEntrySuccess, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, fetchAccountsForTransferFlow, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, removeTransactionFromAllTabs, resetCreateTransferEntryStatus, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization, syncTransactionCategorizationFromDetailSave, updateCurrentSelectedTransactionCategorizationTab, updateSelectedCheckboxTransactionIds, updateSelectedCustomerForTransaction, updateSelectedTransactionId, updateSelectedVendorForTransaction, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, updateTransactionCategorizationUIState, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess } from './view/expenseAutomationView/reducers/transactionsViewReducer';
276
+ import { backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization, syncTransactionCategorizationFromDetailSave, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationCompletedSubTab, updateSelectedCheckboxTransactionIds, updateSelectedCustomerForTransaction, updateSelectedTransactionId, updateSelectedVendorForTransaction, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, updateTransactionCategorizationUIState, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess } from './view/expenseAutomationView/reducers/transactionsViewReducer';
277
277
  import { ExpenseAutomationStepDetails, ExpenseAutomationViewSelector } from './view/expenseAutomationView/selectorTypes/expenseAutomationViewSelectorTypes';
278
278
  import { ExpenseAutomationFluxAnalysisViewSelector, FluxAnalysisOperatingExpenseView, FluxAnalysisSectionType, FluxAnalysisVendorView, FluxAnalysisViewSectionReport, FluxVendorAccountsAndClassesView } from './view/expenseAutomationView/selectorTypes/fluxAnalysisViewSelectorTypes';
279
279
  import { JEAccountSettingsView } from './view/expenseAutomationView/selectorTypes/jeAccountSettingsViewSelectorTypes';
@@ -285,10 +285,11 @@ import { ExpenseAutomationTransactionViewSelector, TransactionReviewLocalDataSel
285
285
  import { getExpenseAutomationFluxAnalysisView } from './view/expenseAutomationView/selectors/fluxAnalysisViewSelector';
286
286
  import { JEScheduledTransactionWithFailedEntries } from './view/expenseAutomationView/selectors/jeSchedulesViewSelector';
287
287
  import { getExpenseAutomationReconciliationView, isAccountReconReport } from './view/expenseAutomationView/selectors/reconciliationViewSelector';
288
- import { getExpenseAutomationTransactionView, getLastTransferEntryReplacement } from './view/expenseAutomationView/selectors/transactionCategorizationSelector';
288
+ import { getExpenseAutomationTransactionView } from './view/expenseAutomationView/selectors/transactionCategorizationSelector';
289
289
  import { FluxAnalysisActionType, FluxAnalysisReviewStatus, FluxAnalysisSortKey, FluxAnalysisViewUIState, FluxBalancesByMonth } from './view/expenseAutomationView/types/fluxAnalysisViewState';
290
290
  import { AccountSettingsLocalData, JEScheduleMainTab as ExpenseAutomationJEScheduleMainTab, JEScheduleSortKey as ExpenseAutomationJEScheduleSortKey, JESchedulesViewUIState as ExpenseAutomationJESchedulesViewUIState, JEScheduleLocalData, toJEScheduleMainTab as toExpenseAutomationJEScheduleMainTab, toJEScheduleSortKey as toExpenseAutomationJEScheduleSortKey } from './view/expenseAutomationView/types/jeSchedulesViewState';
291
- import { BATCH_FILE_STATUSES, BatchDetails, BatchFile, BatchFileStatus, BatchListItem, BatchStatus, BatchStatusValue, BatchSummary, BulkUploadPhase, BulkUploadResultsTab, BulkUploadSortKey, BulkUploadState, CandidateRef, CompletedSubTab, MatchCandidate, MatchSource, MissingReceiptsTab, isUnmatchedTabFileStatus, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toCompletedSubTab, toMatchSource, toMissingReceiptsTab } from './view/expenseAutomationView/types/missingReceiptsViewState';
291
+ import { BATCH_FILE_STATUSES, BatchDetails, BatchFile, BatchFileStatus, BatchListItem, BatchStatus, BatchStatusValue, BatchSummary, BulkUploadPhase, BulkUploadResultsTab, BulkUploadSortKey, BulkUploadState, CandidateRef, MatchCandidate, MatchSource, MissingReceiptsTab, isUnmatchedTabFileStatus, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toMatchSource, toMissingReceiptsTab } from './view/expenseAutomationView/types/missingReceiptsViewState';
292
+ import { CompletedSubTab, toCompletedSubTab } from './view/expenseAutomationView/types/completedSubTab';
292
293
  import { MissingReceiptsSortKey as ExpenseAutomationMissingReceiptsSortKey, MissingReceiptsViewState as ExpenseAutomationMissingReceiptsViewState, MissingReceiptsViewUIState as ExpenseAutomationMissingReceiptsViewUIState, toMissingReceiptsSortKey as toExpenseAutomationMissingReceiptsSortKey } from './view/expenseAutomationView/types/missingReceiptsViewState';
293
294
  import { AccountReconciliationLocalData, ExcludeAccountFromReconciliationPayload, ReconciliationViewTabType as ExpenseAutomationReconciliationViewTab, ReconReconcileSortKey, ReconReviewSortKey, ReconciliationReconcileTabLocalData, ReconciliationReviewTabLocalData, SaveReconcileDetailActionPayload as SaveExpenseAutomationReconciliationActionType, toReconciliationTabsType } from './view/expenseAutomationView/types/reconciliationViewState';
294
295
  import { TransactionsTab as ExpenseAutomationTransactionsTab, TransactionsViewState as ExpenseAutomationTransactionsViewState, TransactionsViewUIState as ExpenseAutomationTransactionsViewUIState, SupportedTransactionCategorization, TransactionCategorizationLineItemData, TransactionReviewLocalData, TransactionsSortKey, TransactionsTab, toTransactionsTabKey as toExpenseAutomationTransactionsTabKey, toTransactionsSortKey } from './view/expenseAutomationView/types/transactionsViewState';
@@ -656,10 +657,10 @@ export { TransactionsOrder, COABalancesSliceOrder, EntityOrder, Section, Section
656
657
  export { ClassesViewSelectorReportV2 };
657
658
  export { BalancesTimeseries, TrendTimeseries, BalanceKind };
658
659
  export { fetchMonthEndCloseChecks, fetchMonthClosePerformanceTrend, MonthClosePerformanceTrend, MonthEndCloseCheck, getMonthEndCloseChecksViewByTenantId, MonthEndCloseChecksView, MonthEndCloseCheckFrequency, MonthCloseCheckMetrics, ALL_MONTH_END_CLOSE_CHECKS_FREQUENCY, MonthEndAuditSummary, };
659
- export { ExpenseAutomationViewSelector, ExpenseAutomationStepDetails, ExpenseAutomationViewType, ExpenseAutomationMissingReceiptsViewSelector, BulkUploadSelectorData, ExpenseAutomationFluxAnalysisViewSelector, FluxAnalysisVendorView, FluxAnalysisViewSectionReport, FluxVendorAccountsAndClassesView, ExpenseAutomationMissingReceiptsViewUIState, ExpenseAutomationMissingReceiptsViewState, ExpenseAutomationViewState, ExpenseAutomationTransactionsTab, ExpenseAutomationMissingReceiptsSortKey, BATCH_FILE_STATUSES, BatchDetails, BatchFile, BatchFileStatus, BatchListItem, isUnmatchedTabFileStatus, BatchStatus, BatchStatusValue, BatchSummary, BulkUploadPhase, BulkUploadResultsTab, BulkUploadSortKey, BulkUploadState, CandidateRef, CompletedSubTab, CompletedTransactionsSelectorData, MatchCandidate, MatchSource, MissingReceiptsTab, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toCompletedSubTab, toMatchSource, toMissingReceiptsTab, ResolvedBatchFile, ResolvedBatchDetails, ResolvedCandidate, ExpenseAutomationJEScheduleMainTab, ExpenseAutomationJEScheduleSortKey, ExpenseAutomationJESchedulesViewUIState, toExpenseAutomationJEScheduleMainTab, toExpenseAutomationJEScheduleSortKey, getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, fetchExpenseAutomationMissingReceipts, bulkUploadReceipts, bulkUploadAutomatchingTimedOut, bulkUploadReceiptsSuccess, bulkUploadReceiptsFailure, restoreBulkUploadAutomatchingOnMount, restoreBulkUploadMatchingState, updateBulkUploadProgress, pusherBatchStatusUpdate, requestMissingReceiptsTabNavigation, clearMissingReceiptsTabNavigation, fetchBulkUploadBatchDetails, fetchBulkUploadBatchDetailsSuccess, fetchBulkUploadBatchDetailsFailure, storeBatchDetails, fetchMoreBatchDetails, fetchMoreBatchDetailsComplete, fetchMoreBatchDetailsFailure, fetchBulkUploadBatches, fetchBulkUploadBatchesSuccess, fetchBulkUploadBatchesFailure, confirmBulkUploadMatch, confirmBulkUploadMatchSuccess, confirmBulkUploadMatchFailure, setBulkUploadResultsTab, setBulkUploadCompletedSubTab, setBulkUploadSortConfig, setBulkUploadUploadedFileCount, clearBulkUpload, searchTransactionsForManualMatch, searchTransactionsForManualMatchSuccess, searchTransactionsForManualMatchFailure, clearManualSearchResults, acknowledgeBulkUploadConfirmMatchComplete, fetchCompletedTransactions, fetchCompletedTransactionsSuccess, fetchCompletedTransactionsFailure, fetchFluxAnalysisView, clearExpenseAutomationFluxAnalysisView, updateOperatingExpensesIdsForReview as updateFluxOperatingExpensesIdsForReview, updateSelectedSectionIdsForReview as updateFluxAnalysisSelectedSectionIdsForReview, reviewFluxAnalysisView, updateExpenseAutomationMissingReceiptUploadState, updateExpenseAutomationMissingReceiptsUIState, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, FluxAnalysisOperatingExpenseView, FluxAnalysisSectionType, getExpenseAutomationFluxAnalysisView, FluxAnalysisSortKey, FluxAnalysisActionType, FluxBalancesByMonth, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, getLastTransferEntryReplacement, ReconReconcileSortKey, ReconciliationReconcileTabLocalData, FluxAnalysisReviewStatus, updateFluxAnalysisViewUIState, FluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, SaveExpenseAutomationReconciliationActionType, ExcludeAccountFromReconciliationPayload, excludeAccountFromReconciliation, includeAccountInReconciliation, saveExpenseAutomationReconciliationDetail, updateExpenseAutomationReconcileTabListScrollState, updateExpenseAutomationReconReviewTabListSortState, updateExpenseAutomationReconcileTabListSortState, updateExpenseAutomationReconcileTabLocalData, updateExpenseAutomationAccountReconciliationSelectedTab, updateExpenseAutomationAccountReconciliationSelectedAccountId, ExpenseAutomationReconciliationViewSelector, getExpenseAutomationReconciliationView, AccountReconciliationBySection, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, UploadStatementDocumentAIResponse, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, AccountReconciliationByAccount, AccountReconciliationEntity, getAccountReconByAccountIdAndSelectedPeriod, ExpenseAutomationReconciliationViewTab, toReconciliationTabsType, isAccountReconReport, ReconReviewSortKey, AccountReconSectionID, ReconciliationReviewTabLocalData, TransactionsToReview, RecommendedActionCodeType, ReconciliationStatusCodeType, BalanceDataStatusCodeType, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, BankStatusCodeType, ReconciliationAccountSourceType, toReconciliationAccountSource, StatementStatusCodeType, AccountReconciliationLocalData, StatementDataStatusCodeType, deleteAccountStatement, uploadAccountStatement, updateNodeCollapseState, UploadStatementDocumentAIPayload, updateStatementUploadChosen, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, };
660
+ export { ExpenseAutomationViewSelector, ExpenseAutomationStepDetails, ExpenseAutomationViewType, ExpenseAutomationMissingReceiptsViewSelector, BulkUploadSelectorData, ExpenseAutomationFluxAnalysisViewSelector, FluxAnalysisVendorView, FluxAnalysisViewSectionReport, FluxVendorAccountsAndClassesView, ExpenseAutomationMissingReceiptsViewUIState, ExpenseAutomationMissingReceiptsViewState, ExpenseAutomationViewState, ExpenseAutomationTransactionsTab, ExpenseAutomationMissingReceiptsSortKey, BATCH_FILE_STATUSES, BatchDetails, BatchFile, BatchFileStatus, BatchListItem, isUnmatchedTabFileStatus, BatchStatus, BatchStatusValue, BatchSummary, BulkUploadPhase, BulkUploadResultsTab, BulkUploadSortKey, BulkUploadState, CandidateRef, CompletedSubTab, CompletedTransactionsSelectorData, MatchCandidate, MatchSource, MissingReceiptsTab, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toCompletedSubTab, toMatchSource, toMissingReceiptsTab, ResolvedBatchFile, ResolvedBatchDetails, ResolvedCandidate, ExpenseAutomationJEScheduleMainTab, ExpenseAutomationJEScheduleSortKey, ExpenseAutomationJESchedulesViewUIState, toExpenseAutomationJEScheduleMainTab, toExpenseAutomationJEScheduleSortKey, getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationCompletedSubTab, fetchExpenseAutomationMissingReceipts, bulkUploadReceipts, bulkUploadAutomatchingTimedOut, bulkUploadReceiptsSuccess, bulkUploadReceiptsFailure, restoreBulkUploadAutomatchingOnMount, restoreBulkUploadMatchingState, updateBulkUploadProgress, pusherBatchStatusUpdate, requestMissingReceiptsTabNavigation, clearMissingReceiptsTabNavigation, fetchBulkUploadBatchDetails, fetchBulkUploadBatchDetailsSuccess, fetchBulkUploadBatchDetailsFailure, storeBatchDetails, fetchMoreBatchDetails, fetchMoreBatchDetailsComplete, fetchMoreBatchDetailsFailure, fetchBulkUploadBatches, fetchBulkUploadBatchesSuccess, fetchBulkUploadBatchesFailure, confirmBulkUploadMatch, confirmBulkUploadMatchSuccess, confirmBulkUploadMatchFailure, setBulkUploadResultsTab, setBulkUploadCompletedSubTab, setBulkUploadSortConfig, setBulkUploadUploadedFileCount, clearBulkUpload, searchTransactionsForManualMatch, searchTransactionsForManualMatchSuccess, searchTransactionsForManualMatchFailure, clearManualSearchResults, acknowledgeBulkUploadConfirmMatchComplete, fetchCompletedTransactions, fetchCompletedTransactionsSuccess, fetchCompletedTransactionsFailure, fetchFluxAnalysisView, clearExpenseAutomationFluxAnalysisView, updateOperatingExpensesIdsForReview as updateFluxOperatingExpensesIdsForReview, updateSelectedSectionIdsForReview as updateFluxAnalysisSelectedSectionIdsForReview, reviewFluxAnalysisView, updateExpenseAutomationMissingReceiptUploadState, updateExpenseAutomationMissingReceiptsUIState, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, FluxAnalysisOperatingExpenseView, FluxAnalysisSectionType, getExpenseAutomationFluxAnalysisView, FluxAnalysisSortKey, FluxAnalysisActionType, FluxBalancesByMonth, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, ReconReconcileSortKey, ReconciliationReconcileTabLocalData, FluxAnalysisReviewStatus, updateFluxAnalysisViewUIState, FluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, SaveExpenseAutomationReconciliationActionType, ExcludeAccountFromReconciliationPayload, excludeAccountFromReconciliation, includeAccountInReconciliation, saveExpenseAutomationReconciliationDetail, updateExpenseAutomationReconcileTabListScrollState, updateExpenseAutomationReconReviewTabListSortState, updateExpenseAutomationReconcileTabListSortState, updateExpenseAutomationReconcileTabLocalData, updateExpenseAutomationAccountReconciliationSelectedTab, updateExpenseAutomationAccountReconciliationSelectedAccountId, ExpenseAutomationReconciliationViewSelector, getExpenseAutomationReconciliationView, AccountReconciliationBySection, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, UploadStatementDocumentAIResponse, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, AccountReconciliationByAccount, AccountReconciliationEntity, getAccountReconByAccountIdAndSelectedPeriod, ExpenseAutomationReconciliationViewTab, toReconciliationTabsType, isAccountReconReport, ReconReviewSortKey, AccountReconSectionID, ReconciliationReviewTabLocalData, TransactionsToReview, RecommendedActionCodeType, ReconciliationStatusCodeType, BalanceDataStatusCodeType, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, BankStatusCodeType, ReconciliationAccountSourceType, toReconciliationAccountSource, StatementStatusCodeType, AccountReconciliationLocalData, StatementDataStatusCodeType, deleteAccountStatement, uploadAccountStatement, updateNodeCollapseState, UploadStatementDocumentAIPayload, updateStatementUploadChosen, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, };
660
661
  export { JEScheduleLocalData };
661
662
  export { ExpenseAutomationJESchedulesViewSelector, JEAccountSettingsView, JEScheduledTransactionWithFailedEntries, };
662
- export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateSelectedCheckboxTransactionIds, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, createTransferEntry, createTransferEntryFailure, createTransferEntryReplacedTransaction, createTransferEntrySuccess, resetCreateTransferEntryStatus, acknowledgeTransferEntryRouteReplacement, fetchAccountsForTransferFlow, removeTransactionFromAllTabs, clearExpenseAutomationTransactionsView, TransactionsSortKey, toTransactionsSortKey, TransactionsTab, TransactionCategorizationLineItemData, TransactionReviewLocalData, SupportedTransactionCategorization, ExpenseAutomationTransactionsViewState, ExpenseAutomationTransactionsViewUIState, ExpenseAutomationTransactionViewSelector, TransactionReviewLocalDataSelectorView, };
663
+ export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateSelectedCheckboxTransactionIds, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, TransactionsSortKey, toTransactionsSortKey, TransactionsTab, TransactionCategorizationLineItemData, TransactionReviewLocalData, SupportedTransactionCategorization, ExpenseAutomationTransactionsViewState, ExpenseAutomationTransactionsViewUIState, ExpenseAutomationTransactionViewSelector, TransactionReviewLocalDataSelectorView, };
663
664
  export { TopExpense, TopExTimePeriod, TOP_EX_TIME_PERIODS };
664
665
  export { TimeframeTick, TimeframeTickWithMetaData, toTimeframeTick, mapTimePeriodtoTimeframeTick, toTimePeriod, toAbsoluteDay, toMonthYearPeriodId, convertToPeriod, MonthYearPeriod, };
665
666
  export { VendorSpendTrendFilterTabType, toVendorSpendTrendFilterTabsTypeStrict, } from './entity/vendorExpense/vendorExpenseSelector';