@zeniai/client-epic-state 5.0.55-betaML5 → 5.0.55-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 (84) 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 +3 -0
  30. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +1 -8
  31. package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +71 -79
  32. package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +2 -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.js +3 -0
  49. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.d.ts +2 -2
  50. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +0 -7
  51. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  52. package/lib/view/expenseAutomationView/payload/transactionCategorizationPayload.d.ts +8 -0
  53. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.d.ts +2 -1
  54. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +5 -22
  55. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +72 -80
  56. package/lib/view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes.d.ts +2 -1
  57. package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +3 -4
  58. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +0 -2
  59. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +2 -32
  60. package/lib/view/expenseAutomationView/types/completedSubTab.d.ts +2 -0
  61. package/lib/view/expenseAutomationView/types/completedSubTab.js +13 -0
  62. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.d.ts +1 -2
  63. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.js +1 -4
  64. package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +24 -15
  65. package/lib/view/expenseAutomationView/types/transactionsViewState.js +1 -6
  66. package/lib/view/financeStatement/financeStatementReducer.d.ts +1 -1
  67. package/lib/view/globalMerchantView/globalMerchantViewReducer.d.ts +2 -2
  68. package/lib/view/reimbursementCard/reimbursementCardSelector.d.ts +1 -1
  69. package/lib/view/reportsResync/reportsResyncReducer.d.ts +2 -2
  70. package/lib/view/tasksCard/tasksCardSelector.d.ts +1 -1
  71. package/lib/view/topEx/topExSelector.d.ts +1 -1
  72. package/lib/view/transactionDetail/epics/transactionDetailEpic.d.ts +1 -2
  73. package/lib/view/transactionDetail/epics/transactionDetailEpic.js +0 -10
  74. package/lib/view/transactionDetail/transactionDetailPayload.d.ts +1 -1
  75. package/lib/view/transactionDetail/transactionDetailSelector.d.ts +1 -6
  76. package/lib/view/transactionDetail/transactionDetailSelector.js +1 -23
  77. package/package.json +1 -1
  78. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.js +0 -81
  79. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransferAccountsEpic.js +0 -30
  80. package/lib/tsconfig.typecheck.tsbuildinfo +0 -1
  81. package/lib/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.d.ts +0 -9
  82. package/lib/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.js +0 -85
  83. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransferAccountsEpic.d.ts +0 -8
  84. 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,40 @@ 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',
49
- },
50
- lastTransferEntryReplacement: undefined,
44
+ autoCategorizedSubTabCache: {},
51
45
  selectedTransactionCategorizationTab: 'review',
46
+ selectedTransactionCategorizationCompletedSubTab: 'all',
52
47
  transactionCategorizationView: {
53
48
  review: { ...initialTransactionTabViewState },
54
49
  autoCategorized: { ...initialTransactionTabViewState },
55
50
  },
56
- transferAccounts: {
57
- accountIds: [],
58
- fetchState: 'Not-Started',
59
- },
60
51
  };
52
+ /**
53
+ * Capture the autoCategorized tab's current paginated dataset for a sub-tab.
54
+ * The mid-flight `'In-Progress'` state is normalised to `'Completed'` because
55
+ * the in-flight request is cancelled by `switchMap` in the fetch epic when the
56
+ * sub-tab changes — restoring `'In-Progress'` later would leave the UI stuck
57
+ * showing a phantom loading state with no fetch actually running. Length-zero
58
+ * datasets degrade to `'Not-Started'` so the next visit triggers a fresh
59
+ * fetch from page 1 instead of short-circuiting on stale empty caches.
60
+ */
61
+ function snapshotAutoCategorizedTab(autoCat) {
62
+ const transactionIdsBySelectedPeriod = {
63
+ ...autoCat.transactionIdsBySelectedPeriod,
64
+ };
65
+ const hasAnyLoadedRows = Object.values(transactionIdsBySelectedPeriod).some((ids) => ids.length > 0);
66
+ let normalisedFetchState = autoCat.fetchState;
67
+ if (normalisedFetchState === 'In-Progress') {
68
+ normalisedFetchState = hasAnyLoadedRows ? 'Completed' : 'Not-Started';
69
+ }
70
+ return {
71
+ error: autoCat.error,
72
+ fetchState: normalisedFetchState,
73
+ pageToken: autoCat.uiState.pageToken,
74
+ totalCount: { ...autoCat.uiState.totalCount },
75
+ transactionIdsBySelectedPeriod,
76
+ };
77
+ }
61
78
  const expenseAutomationTransactionsView = createSlice({
62
79
  name: 'expenseAutomationTransactionsView',
63
80
  initialState,
@@ -271,6 +288,48 @@ const expenseAutomationTransactionsView = createSlice({
271
288
  return { payload: { newSelectedTab } };
272
289
  },
273
290
  },
291
+ updateTransactionCategorizationCompletedSubTab: {
292
+ reducer(draft, action) {
293
+ const { newSubTab } = action.payload;
294
+ const previousSubTab = draft.selectedTransactionCategorizationCompletedSubTab;
295
+ if (previousSubTab === newSubTab) {
296
+ return;
297
+ }
298
+ const autoCat = draft.transactionCategorizationView.autoCategorized;
299
+ // Snapshot the outgoing sub-tab so a future revisit can short-circuit
300
+ // the fetch epic (mirrors the parent-tab "don't refetch what's
301
+ // already cached" behaviour). Period-scoped data is preserved as-is
302
+ // because the snapshot itself is keyed only by sub-tab; the active
303
+ // tab's per-period maps remain the source of truth while live.
304
+ draft.autoCategorizedSubTabCache[previousSubTab] =
305
+ snapshotAutoCategorizedTab(autoCat);
306
+ const cached = draft.autoCategorizedSubTabCache[newSubTab];
307
+ if (cached != null) {
308
+ autoCat.uiState.pageToken = cached.pageToken;
309
+ autoCat.uiState.totalCount = { ...cached.totalCount };
310
+ autoCat.transactionIdsBySelectedPeriod = {
311
+ ...cached.transactionIdsBySelectedPeriod,
312
+ };
313
+ autoCat.fetchState = cached.fetchState;
314
+ autoCat.error = cached.error;
315
+ }
316
+ else {
317
+ // Sub-tab has never been visited — clear the active slot so the
318
+ // view-epic's `fetchState === 'Not-Started' || transactionIds.length
319
+ // === 0` cache check falls through and triggers a fresh page-1
320
+ // fetch for the new dataset.
321
+ autoCat.uiState.pageToken = null;
322
+ autoCat.uiState.totalCount = {};
323
+ autoCat.transactionIdsBySelectedPeriod = {};
324
+ autoCat.fetchState = 'Not-Started';
325
+ autoCat.error = undefined;
326
+ }
327
+ draft.selectedTransactionCategorizationCompletedSubTab = newSubTab;
328
+ },
329
+ prepare(newSubTab) {
330
+ return { payload: { newSubTab } };
331
+ },
332
+ },
274
333
  updateTransactionCategorization: {
275
334
  reducer(draft, action) {
276
335
  const selectedTab = action.payload.selectedTab;
@@ -812,74 +871,7 @@ const expenseAutomationTransactionsView = createSlice({
812
871
  };
813
872
  },
814
873
  },
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
874
  },
883
875
  });
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;
876
+ export const { fetchTransactionCategorization, updateTransactionCategorizationUIState, initializeTransactionCategorizationViewLocalData, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationCompletedSubTab, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateStatusForTransactionNotMiscategorizedUpdateForCategorization, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, setAllItemsToCategoryClassInLocalDataForCategorization, updateTotalCountForTransactionCategorization, fetchTransactionCategorizationSuccess, resetOtherTabsFetchState, fetchTransactionCategorizationView, updateSelectedCheckboxTransactionIds, clearExpenseAutomationTransactionsViewPerTabView, clearExpenseAutomationTransactionsView, setEntityRecommendationForLineIdsForCategorization, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, } = expenseAutomationTransactionsView.actions;
885
877
  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');
@@ -90,29 +86,6 @@ export function getExpenseAutomationTransactionView(state) {
90
86
  : [];
91
87
  const transactionCompletionStatus = allSteps.find((step) => step.step === 'transaction_categorization')?.completionStatus;
92
88
  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
89
  return {
117
90
  version: 0,
118
91
  fetchState: fetchStatus.fetchState,
@@ -133,14 +106,12 @@ export function getExpenseAutomationTransactionView(state) {
133
106
  refreshStatus,
134
107
  saveStatus,
135
108
  markAsNotMiscategorizedStatus,
136
- createTransferEntryStatus: expenseAutomationTransactionsViewState.createTransferEntryStatus,
137
109
  completionStatus,
138
110
  totalCountByTab,
139
111
  fetchStateByTransactionTabs: fetchStateByTab,
140
112
  uploadReceiptStatusById,
141
113
  selectedTransactionId,
142
114
  selectedTransactionLineId,
143
- creditCardAccountsForTransferList,
144
- transferAccounts: transferAccountsList,
115
+ selectedTransactionCategorizationCompletedSubTab,
145
116
  };
146
117
  }
@@ -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';