@zeniai/client-epic-state 5.0.48-betaRD5 → 5.0.49-betaML1

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 (87) hide show
  1. package/lib/commonStateTypes/viewAndReport/viewAndReport.d.ts +2 -2
  2. package/lib/commonStateTypes/viewAndReport/viewAndReport.js +1 -0
  3. package/lib/entity/account/accountSelector.d.ts +5 -0
  4. package/lib/entity/account/accountSelector.js +8 -1
  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/project/projectPayload.d.ts +3 -3
  11. package/lib/entity/project/projectPayload.js +3 -3
  12. package/lib/entity/project/projectState.d.ts +2 -4
  13. package/lib/entity/sectionAccountsView/sectionAccountsView.d.ts +1 -1
  14. package/lib/entity/sectionClassesViewV2/sectionClassesView.d.ts +1 -1
  15. package/lib/entity/sectionClassesViewV2/sectionClassesViewReducer.d.ts +2 -2
  16. package/lib/entity/sectionProjectView/sectionProjectView.d.ts +1 -1
  17. package/lib/entity/sectionProjectView/sectionProjectViewReducer.d.ts +2 -2
  18. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  19. package/lib/entity/snackbar/snackbarTypes.js +2 -0
  20. package/lib/entity/tenant/SessionManager.d.ts +4 -0
  21. package/lib/entity/tenant/SessionManager.js +6 -0
  22. package/lib/entity/transaction/payloadTypes/transactionLinePayload.js +1 -1
  23. package/lib/entity/transaction/payloadTypes/transactionPayload.d.ts +6 -2
  24. package/lib/entity/transaction/payloadTypes/transactionPayload.js +10 -6
  25. package/lib/entity/transaction/stateTypes/transaction.d.ts +3 -2
  26. package/lib/entity/transaction/stateTypes/transactionLine.d.ts +2 -2
  27. package/lib/epic.d.ts +3 -1
  28. package/lib/epic.js +3 -1
  29. package/lib/esm/commonStateTypes/viewAndReport/viewAndReport.js +1 -0
  30. package/lib/esm/entity/account/accountSelector.js +6 -0
  31. package/lib/esm/entity/project/projectPayload.js +1 -1
  32. package/lib/esm/entity/snackbar/snackbarTypes.js +2 -0
  33. package/lib/esm/entity/tenant/SessionManager.js +6 -0
  34. package/lib/esm/entity/transaction/payloadTypes/transactionLinePayload.js +2 -2
  35. package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +10 -6
  36. package/lib/esm/epic.js +3 -1
  37. package/lib/esm/index.js +4 -4
  38. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.js +81 -0
  39. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +5 -7
  40. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransferAccountsEpic.js +25 -0
  41. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/updateTransactionCategorizationEpic.js +0 -3
  42. package/lib/esm/view/expenseAutomationView/helpers/saveTransactionHelper.js +0 -1
  43. package/lib/esm/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +2 -11
  44. package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +70 -14
  45. package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +21 -7
  46. package/lib/esm/view/transactionDetail/epics/transactionDetailEpic.js +6 -0
  47. package/lib/esm/view/transactionDetail/transactionDetailSelector.js +13 -2
  48. package/lib/index.d.ts +6 -6
  49. package/lib/index.js +42 -33
  50. package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
  51. package/lib/view/auditReportView/auditReportViewState.d.ts +1 -1
  52. package/lib/view/billPayCard/billPayCardSelector.d.ts +1 -1
  53. package/lib/view/cardBalance/cardBalanceSelector.d.ts +1 -1
  54. package/lib/view/cashBalance/cashBalanceSelector.d.ts +1 -1
  55. package/lib/view/cashInCashOut/cashInCashOutSelector.d.ts +1 -1
  56. package/lib/view/cashPosition/cashPositionSelector.d.ts +1 -1
  57. package/lib/view/dashboard/dashboardReducer.d.ts +2 -2
  58. package/lib/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.d.ts +9 -0
  59. package/lib/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.js +85 -0
  60. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.d.ts +2 -3
  61. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +4 -6
  62. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransferAccountsEpic.d.ts +8 -0
  63. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransferAccountsEpic.js +29 -0
  64. package/lib/view/expenseAutomationView/epics/transactionCategorization/updateTransactionCategorizationEpic.js +0 -3
  65. package/lib/view/expenseAutomationView/helpers/saveTransactionHelper.js +0 -1
  66. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +2 -3
  67. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +2 -11
  68. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +16 -4
  69. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +71 -15
  70. package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +3 -4
  71. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +2 -0
  72. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +21 -6
  73. package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +13 -4
  74. package/lib/view/financeStatement/financeStatementReducer.d.ts +1 -1
  75. package/lib/view/globalMerchantView/globalMerchantViewReducer.d.ts +2 -2
  76. package/lib/view/reimbursementCard/reimbursementCardSelector.d.ts +1 -1
  77. package/lib/view/reportsResync/reportsResyncReducer.d.ts +2 -2
  78. package/lib/view/tasksCard/tasksCardSelector.d.ts +1 -1
  79. package/lib/view/topEx/topExSelector.d.ts +1 -1
  80. package/lib/view/transactionDetail/epics/transactionDetailEpic.d.ts +2 -1
  81. package/lib/view/transactionDetail/epics/transactionDetailEpic.js +6 -0
  82. package/lib/view/transactionDetail/transactionDetailPayload.d.ts +1 -1
  83. package/lib/view/transactionDetail/transactionDetailSelector.d.ts +4 -1
  84. package/lib/view/transactionDetail/transactionDetailSelector.js +12 -1
  85. package/lib/view/transactionDetail/transactionDetailState.d.ts +2 -2
  86. package/lib/view/transactionDetail/transactionDetailTypes.d.ts +2 -2
  87. package/package.json +1 -1
@@ -41,7 +41,6 @@ export const toTransactionUpdatesFromTransactionCategorizationLocalData = (trans
41
41
  lineDescription: lineItem.lineDescription,
42
42
  class: lineItem.class,
43
43
  account: lineItem.account,
44
- project: lineItem.project,
45
44
  recommendation: convertCOTRecommendationsToRegular(lineItem.recommendationsWithCOT),
46
45
  };
47
46
  if (line.type === 'journal_entry_transaction_line' ||
@@ -183,7 +183,6 @@ const buildLineItemById = (transaction, uncategorizedIncomeExpense, recommendati
183
183
  const lineId = line.id;
184
184
  record.account = accountLine.account;
185
185
  record.class = accountLine.class;
186
- record.project = accountLine.project;
187
186
  record.vendor =
188
187
  accountLine.vendor != null
189
188
  ? {
@@ -306,7 +305,7 @@ const buildLineItemById = (transaction, uncategorizedIncomeExpense, recommendati
306
305
  });
307
306
  return lineItemData;
308
307
  };
309
- export const toSetAllLineItemsToCategoryClass = (draft, transaction, transactionId, transactionLineId, transactionDetailLocalData, updatedItem, uncategorizedAccounts, selectedTab, vendorId, customerId, selectedAccount, selectedClassBase, selectedProjectBase, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled) => {
308
+ export const toSetAllLineItemsToCategoryClass = (draft, transaction, transactionId, transactionLineId, transactionDetailLocalData, updatedItem, uncategorizedAccounts, selectedTab, vendorId, customerId, selectedAccount, selectedClassBase, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled) => {
310
309
  let newLineItems = {};
311
310
  let selectedCheckBoxTransactionIds = draft.selectedCheckBoxTransactionIds;
312
311
  let similarTransactionUpdated = false;
@@ -326,7 +325,7 @@ export const toSetAllLineItemsToCategoryClass = (draft, transaction, transaction
326
325
  const record = {
327
326
  ...transactionDetailLocalData.lineItemById[lineId],
328
327
  };
329
- // if the line is the one that is being updated, then set the account, class, and project
328
+ // if the line is the one that is being updated, then set the account and class
330
329
  if (transactionId === record.transactionId &&
331
330
  transactionLineId === lineId) {
332
331
  if (selectedAccount != null) {
@@ -335,9 +334,6 @@ export const toSetAllLineItemsToCategoryClass = (draft, transaction, transaction
335
334
  if (selectedClassBase != null) {
336
335
  record.class = selectedClassBase;
337
336
  }
338
- if (selectedProjectBase != null) {
339
- record.project = selectedProjectBase;
340
- }
341
337
  const isClassSatisfied = isAccountingClassesEnabled === false || record.class != null;
342
338
  if (isClassSatisfied && record.account != null) {
343
339
  if (selectedCheckBoxTransactionIds.length < MAX_SELECTION_LIMIT &&
@@ -389,10 +385,6 @@ export const toSetAllLineItemsToCategoryClass = (draft, transaction, transaction
389
385
  selectedCheckBoxTransactionIds.push(transaction.id);
390
386
  }
391
387
  }
392
- // Project intentionally does NOT propagate to other rows of
393
- // the same vendor: each line can carry a different project,
394
- // and auto-filling siblings (the way class does) leads to
395
- // unexpected bulk selection.
396
388
  }
397
389
  }
398
390
  if (line.type === 'transaction_with_product_or_service_line') {
@@ -522,7 +514,6 @@ export const setEntityRecommendationForLineIdInLocalData = (draft, transaction,
522
514
  ...newLineItem,
523
515
  class: matchingRecord.class,
524
516
  account: matchingRecord.account,
525
- project: matchingRecord.project,
526
517
  lineEntity: matchingRecord.lineEntity,
527
518
  };
528
519
  }
@@ -4,6 +4,7 @@ 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';
7
8
  export const initialTransactionTabViewState = {
8
9
  saveStatus: {
9
10
  fetchState: 'Not-Started',
@@ -41,11 +42,17 @@ export const initialTransactionTabViewState = {
41
42
  selectedTransactionLineId: undefined,
42
43
  };
43
44
  export const initialState = {
45
+ createTransferEntryStatus: 'Not-Started',
46
+ lastTransferEntryReplacement: undefined,
44
47
  selectedTransactionCategorizationTab: 'review',
45
48
  transactionCategorizationView: {
46
49
  review: { ...initialTransactionTabViewState },
47
50
  autoCategorized: { ...initialTransactionTabViewState },
48
51
  },
52
+ transferAccounts: {
53
+ fetchState: 'Not-Started',
54
+ accountIds: [],
55
+ },
49
56
  };
50
57
  const expenseAutomationTransactionsView = createSlice({
51
58
  name: 'expenseAutomationTransactionsView',
@@ -282,7 +289,7 @@ const expenseAutomationTransactionsView = createSlice({
282
289
  },
283
290
  setAllItemsToCategoryClassInLocalDataForCategorization: {
284
291
  reducer(draft, action) {
285
- const { vendorId, customerId, selectedAccount, selectedClassBase, selectedProjectBase, transactions, transactionId, lineId, selectedTab, uncategorizedAccounts, isAccountingClassesEnabled, isUncategorizedExpenseCategoryEnabled, } = action.payload;
292
+ const { vendorId, customerId, selectedAccount, selectedClassBase, transactions, transactionId, lineId, selectedTab, uncategorizedAccounts, isAccountingClassesEnabled, isUncategorizedExpenseCategoryEnabled, } = action.payload;
286
293
  const transactionLocalData = recordGet(draft.transactionCategorizationView[selectedTab]
287
294
  .transactionReviewLocalDataById, transactionId, undefined);
288
295
  const existingAccount = transactionLocalData?.transactionReviewLocalData.lineItemById[lineId]
@@ -296,7 +303,6 @@ const expenseAutomationTransactionsView = createSlice({
296
303
  ...transactionLocalData.transactionReviewLocalData.lineItemById[lineId],
297
304
  account: selectedAccount,
298
305
  class: selectedClassBase,
299
- project: selectedProjectBase,
300
306
  },
301
307
  },
302
308
  };
@@ -325,16 +331,9 @@ const expenseAutomationTransactionsView = createSlice({
325
331
  const transactionLocalData = recordGet(draft.transactionCategorizationView[selectedTab]
326
332
  .transactionReviewLocalDataById, transaction.id, undefined);
327
333
  if (transactionLocalData != null) {
328
- const existingClassId = transactionLocalData.transactionReviewLocalData.lineItemById[lineId]?.class?.classId;
329
- const existingProjectId = transactionLocalData.transactionReviewLocalData.lineItemById[lineId]?.project?.projectId;
330
- const updatedItem = existingAccount?.accountId !== selectedAccount?.accountId
334
+ const { localData, similarTransactionUpdated } = toSetAllLineItemsToCategoryClass(draft.transactionCategorizationView[selectedTab], transaction, transactionId, lineId, transactionLocalData.transactionReviewLocalData, existingAccount?.accountId !== selectedAccount?.accountId
331
335
  ? 'category'
332
- : existingClassId !== selectedClassBase?.classId
333
- ? 'class'
334
- : existingProjectId !== selectedProjectBase?.projectId
335
- ? 'project'
336
- : 'class';
337
- const { localData, similarTransactionUpdated } = toSetAllLineItemsToCategoryClass(draft.transactionCategorizationView[selectedTab], transaction, transactionId, lineId, transactionLocalData.transactionReviewLocalData, updatedItem, uncategorizedAccounts, selectedTab, vendorId, customerId, selectedAccount, selectedClassBase, selectedProjectBase, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled);
336
+ : 'class', uncategorizedAccounts, selectedTab, vendorId, customerId, selectedAccount, selectedClassBase, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled);
338
337
  draft.transactionCategorizationView[selectedTab].transactionReviewLocalDataById[transaction.id] = {
339
338
  transactionId: transaction.id,
340
339
  transactionReviewLocalData: localData,
@@ -353,7 +352,7 @@ const expenseAutomationTransactionsView = createSlice({
353
352
  ...dirtyIds,
354
353
  ]);
355
354
  },
356
- prepare(selectedTab, transactionId, lineId, transactions, uncategorizedAccounts, vendorId, customerId, selectedAccount, selectedClassBase, lineEntity, recommendations, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled, selectedProjectBase) {
355
+ prepare(selectedTab, transactionId, lineId, transactions, uncategorizedAccounts, vendorId, customerId, selectedAccount, selectedClassBase, lineEntity, recommendations, isUncategorizedExpenseCategoryEnabled, isAccountingClassesEnabled) {
357
356
  return {
358
357
  payload: {
359
358
  selectedTab,
@@ -365,7 +364,6 @@ const expenseAutomationTransactionsView = createSlice({
365
364
  lineEntity,
366
365
  selectedAccount,
367
366
  selectedClassBase,
368
- selectedProjectBase,
369
367
  recommendations,
370
368
  uncategorizedAccounts,
371
369
  isAccountingClassesEnabled,
@@ -801,7 +799,65 @@ const expenseAutomationTransactionsView = createSlice({
801
799
  };
802
800
  },
803
801
  },
802
+ fetchTransferAccounts(draft) {
803
+ draft.transferAccounts.fetchState = 'In-Progress';
804
+ },
805
+ updateTransferAccounts(draft, action) {
806
+ draft.transferAccounts.fetchState = 'Completed';
807
+ draft.transferAccounts.accountIds = action.payload.accountIds;
808
+ },
809
+ updateTransferAccountsFailure(draft) {
810
+ draft.transferAccounts.fetchState = 'Error';
811
+ },
812
+ createTransferEntry: {
813
+ prepare(transactionId, creditAccountIntegrationId, debitAccountIntegrationId, memo, transactionType, sourceTransactionType) {
814
+ return {
815
+ payload: {
816
+ transactionId,
817
+ creditAccountIntegrationId,
818
+ debitAccountIntegrationId,
819
+ memo,
820
+ transactionType,
821
+ sourceTransactionType,
822
+ },
823
+ };
824
+ },
825
+ reducer(draft) {
826
+ draft.createTransferEntryStatus = 'In-Progress';
827
+ },
828
+ },
829
+ createTransferEntrySuccess(draft) {
830
+ draft.createTransferEntryStatus = 'Completed';
831
+ },
832
+ createTransferEntryFailure(draft) {
833
+ draft.createTransferEntryStatus = 'Error';
834
+ },
835
+ resetCreateTransferEntryStatus(draft) {
836
+ draft.createTransferEntryStatus = 'Not-Started';
837
+ },
838
+ createTransferEntryReplacedTransaction: {
839
+ prepare(previousTransactionId, newTransactionId) {
840
+ return { payload: { newTransactionId, previousTransactionId } };
841
+ },
842
+ reducer(draft, action) {
843
+ draft.lastTransferEntryReplacement = action.payload;
844
+ },
845
+ },
846
+ acknowledgeTransferEntryRouteReplacement(draft) {
847
+ draft.lastTransferEntryReplacement = undefined;
848
+ },
849
+ removeTransactionFromAllTabs: {
850
+ prepare(transactionId) {
851
+ return { payload: { transactionId } };
852
+ },
853
+ reducer(draft, action) {
854
+ const { transactionId } = action.payload;
855
+ for (const tab of TRANSACTIONS_TABS) {
856
+ removeTransactionFromTabView(draft.transactionCategorizationView[tab], transactionId);
857
+ }
858
+ },
859
+ },
804
860
  },
805
861
  });
806
- 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, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, } = expenseAutomationTransactionsView.actions;
862
+ 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, fetchTransferAccounts, updateTransferAccounts, updateTransferAccountsFailure, createTransferEntry, createTransferEntrySuccess, createTransferEntryFailure, resetCreateTransferEntryStatus, createTransferEntryReplacedTransaction, acknowledgeTransferEntryRouteReplacement, removeTransactionFromAllTabs, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, } = expenseAutomationTransactionsView.actions;
807
863
  export default expenseAutomationTransactionsView.reducer;
@@ -1,15 +1,18 @@
1
1
  import omit from 'lodash/omit';
2
2
  import { reduceAllFetchState, reduceAnyFetchState, } from '../../../commonStateTypes/reduceFetchState';
3
3
  import { toMonthYearPeriodId } from '../../../commonStateTypes/timePeriod';
4
- import { getCurrentTenant, getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, } from '../../../entity/tenant/tenantSelector';
4
+ import { getAccountBase, getAccountBaseForTransferAccounts, } from '../../../entity/account/accountSelector';
5
+ import { getIsAccountingClassesEnabled, getCurrentTenant, } from '../../../entity/tenant/tenantSelector';
5
6
  import { getTransactionWithCOT } from '../../../entity/transaction/transactionHelper';
6
7
  import { getSupportedTransactionsByIds } from '../../../entity/transaction/transactionSelector';
7
8
  import { getAccountList, getNestedAccountListHierarchy, getUncategorizedAccounts, } from '../../accountList/accountListSelector';
8
9
  import { getClassList, getNestedClassListHierarchy, } from '../../classList/classListSelector';
9
- import { getProjectList } from '../../projectList/projectListSelector';
10
10
  import { getAllSteps } from '../selectorTypes/expenseAutomationViewSelectorTypes';
11
+ export function getLastTransferEntryReplacement(state) {
12
+ return state.expenseAutomationTransactionsViewState.lastTransferEntryReplacement;
13
+ }
11
14
  export function getExpenseAutomationTransactionView(state) {
12
- const { accountState, classState, classListState, accountListState, expenseAutomationTransactionsViewState, expenseAutomationViewState, projectState, projectListState, transactionState, monthEndCloseChecksState, monthEndCloseChecksViewState, } = state;
15
+ const { accountState, classState, classListState, accountListState, expenseAutomationTransactionsViewState, expenseAutomationViewState, transactionState, monthEndCloseChecksState, monthEndCloseChecksViewState, } = state;
13
16
  const { selectedTransactionCategorizationTab } = expenseAutomationTransactionsViewState;
14
17
  const { uiState, refreshStatus, saveStatus, markAsNotMiscategorizedStatus, transactionIdsBySelectedPeriod, transactionReviewLocalDataById, selectedCheckBoxTransactionIds, transactionIdsWithUnsavedData, uploadReceiptStatusById, selectedTransactionId, selectedTransactionLineId, } = expenseAutomationTransactionsViewState.transactionCategorizationView[selectedTransactionCategorizationTab];
15
18
  const uncategorizedIncomeExpense = getUncategorizedAccounts(accountState, accountListState, 'accountList');
@@ -18,8 +21,6 @@ export function getExpenseAutomationTransactionView(state) {
18
21
  const allClasses = classList.classes.map((classData) => {
19
22
  return omit(classData, ['accountIds', 'key']);
20
23
  });
21
- const projectList = getProjectList(projectState, projectListState);
22
- const isAccountingProjectsEnabled = getIsAccountingProjectsEnabled(state);
23
24
  const accountsHierarchyList = getNestedAccountListHierarchy(accountListState, 'accountList');
24
25
  const classHierarchyList = getNestedClassListHierarchy(classListState);
25
26
  const currentTenant = getCurrentTenant(state);
@@ -86,6 +87,19 @@ export function getExpenseAutomationTransactionView(state) {
86
87
  : [];
87
88
  const transactionCompletionStatus = allSteps.find((step) => step.step === 'transaction_categorization')?.completionStatus;
88
89
  const completionStatus = transactionCompletionStatus ?? 'incomplete';
90
+ const transferAccountsFromApi = expenseAutomationTransactionsViewState.transferAccounts.accountIds
91
+ .map((id) => getAccountBaseForTransferAccounts(accountState, id))
92
+ .filter((account) => account != null);
93
+ /**
94
+ * Credit transfer picker uses transfer-account ids from a dedicated fetch. If that list
95
+ * resolves to nothing while the COA list is loaded, fall back to the full COA list so the
96
+ * credit dropdown is not empty.
97
+ */
98
+ const transferAccountsList = transferAccountsFromApi.length > 0
99
+ ? transferAccountsFromApi
100
+ : accountList.accounts
101
+ .map((a) => getAccountBase(accountState, a.accountId, 'account_list'))
102
+ .filter((account) => account != null);
89
103
  return {
90
104
  version: 0,
91
105
  fetchState: fetchStatus.fetchState,
@@ -99,18 +113,18 @@ export function getExpenseAutomationTransactionView(state) {
99
113
  classList: allClasses,
100
114
  accountsHierarchyList,
101
115
  classHierarchyList,
102
- isAccountingProjectsEnabled,
103
- projectList,
104
116
  transactionLocalData,
105
117
  uiState,
106
118
  refreshStatus,
107
119
  saveStatus,
108
120
  markAsNotMiscategorizedStatus,
121
+ createTransferEntryStatus: expenseAutomationTransactionsViewState.createTransferEntryStatus,
109
122
  completionStatus,
110
123
  totalCountByTab,
111
124
  fetchStateByTransactionTabs: fetchStateByTab,
112
125
  uploadReceiptStatusById,
113
126
  selectedTransactionId,
114
127
  selectedTransactionLineId,
128
+ transferAccounts: transferAccountsList,
115
129
  };
116
130
  }
@@ -13,6 +13,7 @@ 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 { fetchTransferAccounts } from '../../expenseAutomationView/reducers/transactionsViewReducer';
16
17
  import { fetchOwnerList } from '../../ownerList/ownerListReducer';
17
18
  import { fetchProjectList } from '../../projectList/projectListReducer';
18
19
  import { fetchTransactionDetail, initializeTransactionDetailLocalData, removeTransactionDetail, updateTransactionDetailFetchState, } from '../transactionDetailReducer';
@@ -35,6 +36,11 @@ export const fetchTransactionDetailEpic = (actions$, state$, zeniAPI) => actions
35
36
  accountList.fetchState !== 'In-Progress') {
36
37
  transactionActions.push(fetchAccountList('accountList'));
37
38
  }
39
+ const { transferAccounts } = state$.value.expenseAutomationTransactionsViewState;
40
+ if (transferAccounts.fetchState !== 'In-Progress' &&
41
+ transferAccounts.fetchState !== 'Completed') {
42
+ transactionActions.push(fetchTransferAccounts());
43
+ }
38
44
  const classList = state$.value.classListState;
39
45
  if (classList.hasValidState() === false &&
40
46
  classList.fetchState !== 'In-Progress') {
@@ -1,6 +1,7 @@
1
1
  import recordGet from 'lodash/get';
2
2
  import { reduceFetchState } from '../../commonStateTypes/reduceFetchState';
3
- import { getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, } from '../../entity/tenant/tenantSelector';
3
+ import { getAccountBase, getAccountBaseForTransferAccounts, } from '../../entity/account/accountSelector';
4
+ import { getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled } from '../../entity/tenant/tenantSelector';
4
5
  import { toTransactionTypeStrict } from '../../entity/transaction/stateTypes/transactionType';
5
6
  import { getTransactionWithCOT } from '../../entity/transaction/transactionHelper';
6
7
  import { getSupportedTransactionById } from '../../entity/transaction/transactionSelector';
@@ -11,7 +12,7 @@ import { getClassList, getNestedClassListHierarchy, } from '../classList/classLi
11
12
  import { getProjectList, } from '../projectList/projectListSelector';
12
13
  import { getAllLinkedTransactions, getTransactionDetailKey, initialSupportedTransactionDetail, } from './transactionDetailState';
13
14
  export const getTransactionDetail = (state, transactionId, fetchLinkedTransactions = true) => {
14
- const { transactionDetailState, transactionState, vendorState, vendorListState, accountState, classState, classListState, accountListState, projectState, projectListState, } = state;
15
+ const { transactionDetailState, transactionState, vendorState, vendorListState, accountState, classState, classListState, accountListState, expenseAutomationTransactionsViewState, projectState, projectListState, } = state;
15
16
  const detailKey = getTransactionDetailKey(transactionId);
16
17
  const transactionDetail = recordGet(transactionDetailState.transactionDetailById, detailKey);
17
18
  let fetchState = {
@@ -72,6 +73,14 @@ export const getTransactionDetail = (state, transactionId, fetchLinkedTransactio
72
73
  : [];
73
74
  const transactionDetailAnyUpdateStatus = reduceUpdateFetchStates(transactionDetail);
74
75
  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);
75
84
  return {
76
85
  reportId: 'transaction_detail',
77
86
  reportTitle: 'Transaction Detail',
@@ -88,6 +97,8 @@ export const getTransactionDetail = (state, transactionId, fetchLinkedTransactio
88
97
  accountsHierarchyList,
89
98
  classList: classList,
90
99
  isAccountingClassesEnabled,
100
+ createTransferEntryStatus: expenseAutomationTransactionsViewState.createTransferEntryStatus,
101
+ transferAccounts: transferAccountsList,
91
102
  isAccountingProjectsEnabled,
92
103
  projectList,
93
104
  isUpdateNotAllowed: transactionDetail?.isUpdateNotAllowed,
package/lib/index.d.ts CHANGED
@@ -103,7 +103,7 @@ import { ExternalNotificationData, NotificationActivityType, NotificationGroup,
103
103
  import { Logo, PaymentAccount, VERIFIED_PAYMENT_ACCOUNT_PROVIDER_VERIFICATION_STATUS } from './entity/paymentAccount/paymentAccountState';
104
104
  import { PaymentInstrument } from './entity/paymentInstrument/paymentInstrument';
105
105
  import { AccountingSummary, Runway } from './entity/portfolio/accountingSummary/accountingSummaryState';
106
- import { Project, ProjectBase } from './entity/project/projectState';
106
+ import { Project } from './entity/project/projectState';
107
107
  import { MilageReimbursementLine, OutofPocketReimbursementLine, Reimbursement, ReimbursementLine, ReimbursementTypeCode } from './entity/reimbursement/reimbursementState';
108
108
  import { SectionAccountsViewReport } from './entity/sectionAccountsView/sectionAccountsViewSelector';
109
109
  import { SectionClassesView as SectionClassesViewV2 } from './entity/sectionClassesViewV2/sectionClassesView';
@@ -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 { backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization, syncTransactionCategorizationFromDetailSave, updateCurrentSelectedTransactionCategorizationTab, updateSelectedCheckboxTransactionIds, updateSelectedCustomerForTransaction, updateSelectedTransactionId, updateSelectedVendorForTransaction, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, updateTransactionCategorizationUIState, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess } from './view/expenseAutomationView/reducers/transactionsViewReducer';
276
+ import { acknowledgeTransferEntryRouteReplacement, backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, createTransferEntry, createTransferEntryFailure, createTransferEntryReplacedTransaction, createTransferEntrySuccess, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, fetchTransferAccounts, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, removeTransactionFromAllTabs, resetCreateTransferEntryStatus, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization, syncTransactionCategorizationFromDetailSave, updateCurrentSelectedTransactionCategorizationTab, 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,7 +285,7 @@ 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 } from './view/expenseAutomationView/selectors/transactionCategorizationSelector';
288
+ import { getExpenseAutomationTransactionView, getLastTransferEntryReplacement } 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
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';
@@ -656,10 +656,10 @@ export { TransactionsOrder, COABalancesSliceOrder, EntityOrder, Section, Section
656
656
  export { ClassesViewSelectorReportV2 };
657
657
  export { BalancesTimeseries, TrendTimeseries, BalanceKind };
658
658
  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, 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, };
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
660
  export { JEScheduleLocalData };
661
661
  export { ExpenseAutomationJESchedulesViewSelector, JEAccountSettingsView, JEScheduledTransactionWithFailedEntries, };
662
- 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, };
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, fetchTransferAccounts, removeTransactionFromAllTabs, clearExpenseAutomationTransactionsView, TransactionsSortKey, toTransactionsSortKey, TransactionsTab, TransactionCategorizationLineItemData, TransactionReviewLocalData, SupportedTransactionCategorization, ExpenseAutomationTransactionsViewState, ExpenseAutomationTransactionsViewUIState, ExpenseAutomationTransactionViewSelector, TransactionReviewLocalDataSelectorView, };
663
663
  export { TopExpense, TopExTimePeriod, TOP_EX_TIME_PERIODS };
664
664
  export { TimeframeTick, TimeframeTickWithMetaData, toTimeframeTick, mapTimePeriodtoTimeframeTick, toTimePeriod, toAbsoluteDay, toMonthYearPeriodId, convertToPeriod, MonthYearPeriod, };
665
665
  export { VendorSpendTrendFilterTabType, toVendorSpendTrendFilterTabsTypeStrict, } from './entity/vendorExpense/vendorExpenseSelector';
@@ -698,7 +698,7 @@ export { updateDashboardLayout };
698
698
  export { PandLWithForecastView, getPandLWithForecast, } from './view/profitAndLoss/pAndLWithForecast/pAndLWithForecastSelector';
699
699
  export { fetchProfitAndLoss, resetProfitAndLossNodeCollapseState, updateProfitAndLossUIState, ProfitAndLossState, ProfitAndLossUIState, getProfitAndLossReport, ProfitAndLossReport, getPandLReportFetchState, fetchProfitAndLossForTimeframe, };
700
700
  export { fetchProfitAndLossClassesView, updateProfitAndLossClassesToFilterOut, resetProfitAndLossClassesNodeCollapseState, updateProfitAndLossClassesViewUIState, updateProfitAndLossAccountViewMode, updateClassViewLayout, ProfitAndLossClassesViewUIState, ProfitAndLossClassesViewReport, getProfitAndLossClassesView, aggregateHorizontalDescendantBalances, getEmptyHorizontalSectionBalancesSlice, getProfitAndLossClassesHorizontalView, PandLReportViewSectionID, PandLReportViewCalculatedSectionID, isPandLReportViewCalculatedSectionID, isPandLReportViewSectionID, ClassViewLayout, ProfitAndLossByClassHorizontalReport, ClassColumnDefinition, HORIZONTAL_CLASS_TOTAL_BALANCE_ID, HorizontalAccountReportData, HorizontalAccountRow, HorizontalClassBalance, HorizontalSectionReport, HorizontalSectionTreeLayout, HorizontalCalculatedSection, isHorizontalAccountReportData, };
701
- export { clearProfitAndLossProjectView, fetchProfitAndLossForTimeframeProjectView, fetchProfitAndLossProjectView, resetProfitAndLossProjectNodeCollapseState, updateProjectViewAccountViewMode, updateProjectsToFilterOut, updateProfitAndLossProjectViewUIState, ProfitAndLossProjectViewUIState, getProfitAndLossProjectView, ProfitAndLossProjectViewReport, Project, ProjectBase, ProjectReportWithBalances, SectionProjectViewReport, };
701
+ export { clearProfitAndLossProjectView, fetchProfitAndLossForTimeframeProjectView, fetchProfitAndLossProjectView, resetProfitAndLossProjectNodeCollapseState, updateProjectViewAccountViewMode, updateProjectsToFilterOut, updateProfitAndLossProjectViewUIState, ProfitAndLossProjectViewUIState, getProfitAndLossProjectView, ProfitAndLossProjectViewReport, Project, ProjectReportWithBalances, SectionProjectViewReport, };
702
702
  export { AccountingProviderAttachmentSelector, getAccountingProviderAttachment };
703
703
  export { fetchUserListByType, getUserList, UserListSelectorView };
704
704
  export { fetchAllPeopleRequiredViews, fetchPeoplePage, fetchPeople, deletePerson, resendInvite, changeZeniPersonRoles, invitePeople, inviteZeniPeople, updatePeopleUIState, peopleSaveUpdates, resetUpdateErrorMessage, peopleSaveDataInLocalStore, peopleClearDataInLocalStore, PeopleSelectorView, PeopleLocalDataView, Person, getPeople, getPeopleLocalData, PeopleState, PersonUpdateType, PeoplePageMode, ZeniPersonUserRoleType, PeopleUIState, PeopleLocalData, initializeEditPerson, };