@zeniai/client-epic-state 5.2.35-beta2MM → 5.2.35-beta4MM

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 (38) hide show
  1. package/lib/entity/actualMatching/actualMatchingPayload.d.ts +6 -1
  2. package/lib/entity/actualMatching/actualMatchingPayload.js +8 -13
  3. package/lib/entity/actualMatching/actualMatchingReducer.d.ts +3 -2
  4. package/lib/entity/actualMatching/actualMatchingReducer.js +3 -3
  5. package/lib/entity/actualMatching/actualMatchingState.d.ts +3 -2
  6. package/lib/esm/entity/actualMatching/actualMatchingPayload.js +9 -14
  7. package/lib/esm/entity/actualMatching/actualMatchingReducer.js +3 -3
  8. package/lib/esm/index.js +2 -2
  9. package/lib/esm/view/expenseAutomationView/epics/actualMatching/fetchActualMatchingEpic.js +2 -2
  10. package/lib/esm/view/expenseAutomationView/epics/actualMatching/fetchActualMatchingMatchEpic.js +3 -2
  11. package/lib/esm/view/expenseAutomationView/epics/actualMatching/matchAndReverseAccrualsEpic.js +21 -24
  12. package/lib/esm/view/expenseAutomationView/epics/actualMatching/refreshActualMatchingList.js +16 -0
  13. package/lib/esm/view/expenseAutomationView/epics/actualMatching/searchMatchTransactionsEpic.js +6 -9
  14. package/lib/esm/view/expenseAutomationView/epics/actualMatching/undoReversalAccrualsEpic.js +15 -28
  15. package/lib/esm/view/expenseAutomationView/payload/actualMatchingPayload.js +9 -9
  16. package/lib/esm/view/expenseAutomationView/reducers/actualMatchingViewReducer.js +34 -16
  17. package/lib/esm/view/expenseAutomationView/selectors/actualMatchingViewSelector.js +65 -21
  18. package/lib/esm/view/expenseAutomationView/types/actualMatchingViewState.js +3 -0
  19. package/lib/index.d.ts +3 -2
  20. package/lib/index.js +49 -48
  21. package/lib/view/expenseAutomationView/epics/actualMatching/fetchActualMatchingEpic.js +1 -1
  22. package/lib/view/expenseAutomationView/epics/actualMatching/fetchActualMatchingMatchEpic.d.ts +1 -1
  23. package/lib/view/expenseAutomationView/epics/actualMatching/fetchActualMatchingMatchEpic.js +3 -2
  24. package/lib/view/expenseAutomationView/epics/actualMatching/matchAndReverseAccrualsEpic.js +17 -20
  25. package/lib/view/expenseAutomationView/epics/actualMatching/refreshActualMatchingList.d.ts +3 -0
  26. package/lib/view/expenseAutomationView/epics/actualMatching/refreshActualMatchingList.js +19 -0
  27. package/lib/view/expenseAutomationView/epics/actualMatching/searchMatchTransactionsEpic.js +5 -8
  28. package/lib/view/expenseAutomationView/epics/actualMatching/undoReversalAccrualsEpic.js +13 -26
  29. package/lib/view/expenseAutomationView/payload/actualMatchingPayload.d.ts +2 -2
  30. package/lib/view/expenseAutomationView/payload/actualMatchingPayload.js +9 -9
  31. package/lib/view/expenseAutomationView/reducers/actualMatchingViewReducer.d.ts +19 -16
  32. package/lib/view/expenseAutomationView/reducers/actualMatchingViewReducer.js +33 -15
  33. package/lib/view/expenseAutomationView/selectorTypes/actualMatchingViewSelectorTypes.d.ts +0 -1
  34. package/lib/view/expenseAutomationView/selectors/actualMatchingViewSelector.d.ts +6 -1
  35. package/lib/view/expenseAutomationView/selectors/actualMatchingViewSelector.js +66 -21
  36. package/lib/view/expenseAutomationView/types/actualMatchingViewState.d.ts +5 -1
  37. package/lib/view/expenseAutomationView/types/actualMatchingViewState.js +4 -0
  38. package/package.json +1 -1
@@ -4,6 +4,7 @@ import { getActualMatchingMatchById } from '../../../entity/actualMatching/actua
4
4
  import { generateJEOneTimeAccrualKey } from '../../../entity/jeSchedules/jeScheduleHelper';
5
5
  import { getJEOneTimeAccrualByKey, } from '../../../entity/jeSchedules/jeSchedulesSelector';
6
6
  import { getCurrentTenant } from '../../../entity/tenant/tenantSelector';
7
+ import { actualMatchingTransactionLineKey, } from '../types/actualMatchingViewState';
7
8
  export function getSelectedMonthYearForCurrentTenant(state) {
8
9
  const tenantId = getCurrentTenant(state)?.tenantId;
9
10
  if (tenantId == null) {
@@ -11,6 +12,18 @@ export function getSelectedMonthYearForCurrentTenant(state) {
11
12
  }
12
13
  return state.expenseAutomationViewState.selectedPeriodByTenantId[tenantId];
13
14
  }
15
+ export function getTenantDisplayCurrency(state) {
16
+ const locale = getCurrentTenant(state)?.company?.companyLocaleInfo;
17
+ if (locale?.currencyCode == null || locale.currencyCode === '') {
18
+ return undefined;
19
+ }
20
+ return {
21
+ currencyCode: locale.currencyCode,
22
+ currencySymbol: locale.currencySymbol != null && locale.currencySymbol !== ''
23
+ ? locale.currencySymbol
24
+ : locale.currencyCode,
25
+ };
26
+ }
14
27
  function toMatchModalAccrual(member) {
15
28
  if ('jeOneTimeAccrualKey' in member && member.jeOneTimeAccrualKey != null) {
16
29
  return member;
@@ -32,9 +45,9 @@ function uniqueMatchModalAccruals(pinned, searched) {
32
45
  }
33
46
  function uniqueTransactionSearchResults(pinned, searched) {
34
47
  const byKey = new Map();
35
- pinned.forEach((row) => byKey.set(`${row.transactionId}:${row.lineId}`, row));
48
+ pinned.forEach((row) => byKey.set(actualMatchingTransactionLineKey(row.transactionType, row.transactionIntegrationId, row.lineId), row));
36
49
  searched.forEach((row) => {
37
- const key = `${row.transactionId}:${row.lineId}`;
50
+ const key = actualMatchingTransactionLineKey(row.transactionType, row.transactionIntegrationId, row.lineId);
38
51
  if (!byKey.has(key)) {
39
52
  byKey.set(key, row);
40
53
  }
@@ -116,7 +129,9 @@ function toActualMatchingRow(match) {
116
129
  groupedAccrualIds: match.members.map((member) => member.accrualId),
117
130
  groupedMembers: collectGroupedMembers(match.members),
118
131
  reversalDate: getActualMatchingReversalDate(first),
119
- vendorName: match.vendorName !== '' ? match.vendorName : first.vendorName,
132
+ vendorName: match.vendorName != null && match.vendorName !== ''
133
+ ? match.vendorName
134
+ : first.vendorName,
120
135
  estimatedAmount: match.accruedAmount,
121
136
  };
122
137
  }
@@ -125,10 +140,10 @@ function matchesSearch(row, searchString) {
125
140
  if (trimmed.length === 0) {
126
141
  return true;
127
142
  }
128
- if (row.vendorName.toLowerCase().includes(trimmed)) {
143
+ if ((row.vendorName ?? '').toLowerCase().includes(trimmed)) {
129
144
  return true;
130
145
  }
131
- if (row.memo.toLowerCase().includes(trimmed)) {
146
+ if ((row.memo ?? '').toLowerCase().includes(trimmed)) {
132
147
  return true;
133
148
  }
134
149
  return (row.groupedMembers ?? []).some((member) => (member.memo ?? '').toLowerCase().includes(trimmed));
@@ -136,7 +151,7 @@ function matchesSearch(row, searchString) {
136
151
  function getActualMatchingSortValue(row, sortKey) {
137
152
  switch (sortKey) {
138
153
  case 'vendor':
139
- return row.vendorName.toLowerCase();
154
+ return (row.vendorName ?? '').toLowerCase();
140
155
  case 'date':
141
156
  return row.reversalDate?.valueOf() ?? row.transactionDate;
142
157
  case 'amount':
@@ -180,8 +195,14 @@ function emptyKpiSummary() {
180
195
  variance: { percent: 0, averagePercentPerMatch: 0, netAmount: 0 },
181
196
  };
182
197
  }
183
- function sumRowAmounts(rows) {
184
- return rows.reduce((sum, row) => sum + getActualMatchingAmount(row), 0);
198
+ function sumRowAmounts(rows, displayCurrencyCode) {
199
+ return rows.reduce((sum, row) => {
200
+ if (displayCurrencyCode != null &&
201
+ row.accruedAmount.currencyCode !== displayCurrencyCode) {
202
+ return sum;
203
+ }
204
+ return sum + getActualMatchingAmount(row);
205
+ }, 0);
185
206
  }
186
207
  function uniqueVendorCount(rows) {
187
208
  const ids = new Set();
@@ -190,7 +211,7 @@ function uniqueVendorCount(rows) {
190
211
  ids.add(row.vendorId);
191
212
  return;
192
213
  }
193
- if (row.vendorName !== '') {
214
+ if (row.vendorName != null && row.vendorName !== '') {
194
215
  ids.add(row.vendorName);
195
216
  }
196
217
  });
@@ -202,19 +223,35 @@ function rowVariancePercent(row) {
202
223
  if (actual == null || accrued === 0) {
203
224
  return undefined;
204
225
  }
205
- return ((actual - accrued) / accrued) * 100;
226
+ return ((actual - accrued) / Math.abs(accrued)) * 100;
206
227
  }
207
- export function buildActualMatchingKpiSummary(rows) {
228
+ export function buildActualMatchingKpiSummary(rows, displayCurrencyCode) {
208
229
  if (rows.length === 0) {
209
230
  return emptyKpiSummary();
210
231
  }
211
232
  const autoReversed = rows.filter((row) => row.kind === 'auto_reversed');
212
233
  const pendingReview = rows.filter((row) => row.kind === 'pending_review');
213
234
  const receivedCount = rows.length;
214
- const rowsWithActual = rows.filter((row) => row.actualAmount?.amount != null);
235
+ const rowsWithActual = rows.filter((row) => {
236
+ if (row.actualAmount?.amount == null) {
237
+ return false;
238
+ }
239
+ if (displayCurrencyCode == null) {
240
+ return true;
241
+ }
242
+ const rowCurrency = row.accruedAmount?.currencyCode ?? row.estimatedAmount.currencyCode;
243
+ return rowCurrency === displayCurrencyCode;
244
+ });
215
245
  const accruedTotal = rowsWithActual.reduce((sum, row) => sum + (row.accruedAmount?.amount ?? row.estimatedAmount.amount), 0);
216
246
  const actualTotal = rowsWithActual.reduce((sum, row) => sum + (row.actualAmount?.amount ?? 0), 0);
217
247
  const variancePercents = rows
248
+ .filter((row) => {
249
+ if (displayCurrencyCode == null) {
250
+ return true;
251
+ }
252
+ const rowCurrency = row.accruedAmount?.currencyCode ?? row.estimatedAmount.currencyCode;
253
+ return rowCurrency === displayCurrencyCode;
254
+ })
218
255
  .map(rowVariancePercent)
219
256
  .filter((percent) => percent != null);
220
257
  return {
@@ -228,17 +265,17 @@ export function buildActualMatchingKpiSummary(rows) {
228
265
  autoReversed: {
229
266
  count: autoReversed.length,
230
267
  percent: Math.round((autoReversed.length / receivedCount) * 100),
231
- clearedAmount: sumRowAmounts(autoReversed),
268
+ clearedAmount: sumRowAmounts(autoReversed, displayCurrencyCode),
232
269
  },
233
270
  pendingReview: {
234
271
  count: pendingReview.length,
235
- amount: sumRowAmounts(pendingReview),
272
+ amount: sumRowAmounts(pendingReview, displayCurrencyCode),
236
273
  estimatedMinutesToClear: pendingReview.length * ESTIMATED_MINUTES_PER_PENDING_MATCH,
237
274
  },
238
275
  variance: {
239
276
  percent: accruedTotal === 0
240
277
  ? 0
241
- : ((actualTotal - accruedTotal) / accruedTotal) * 100,
278
+ : ((actualTotal - accruedTotal) / Math.abs(accruedTotal)) * 100,
242
279
  averagePercentPerMatch: variancePercents.length === 0
243
280
  ? 0
244
281
  : variancePercents.reduce((sum, percent) => sum + percent, 0) /
@@ -253,12 +290,14 @@ export function getExpenseAutomationActualMatchingMatchView(state, matchId) {
253
290
  match: getActualMatchingMatchById(state.actualMatchingState, matchId),
254
291
  detailFetchState: view.detailFetchStateByMatchId[matchId] ?? NOT_STARTED,
255
292
  refreshStatus: view.detailRefreshStatusByMatchId[matchId] ?? NOT_STARTED,
256
- undoReversalStatus: view.undoReversalStatus ?? NOT_STARTED,
293
+ undoReversalStatus: view.undoReversalStatusByMatchId[matchId] ?? NOT_STARTED,
294
+ lastUndoResults: view.lastUndoResultsByMatchId[matchId],
295
+ lastMatchResults: view.lastMatchResultsByMatchId?.[matchId],
257
296
  };
258
297
  }
259
298
  export function getExpenseAutomationActualMatchingView(state) {
260
299
  const { expenseAutomationActualMatchingViewState } = state;
261
- const { matchIdsByPeriod, fetchState, error, refreshStatus, uiState, matchModal, undoReversalStatus, } = expenseAutomationActualMatchingViewState;
300
+ const { matchIdsByPeriod, fetchState, error, refreshStatus, uiState, matchModal, } = expenseAutomationActualMatchingViewState;
262
301
  const selectedPeriod = getSelectedMonthYearForCurrentTenant(state);
263
302
  const monthYearPeriodId = selectedPeriod != null ? toMonthYearPeriodId(selectedPeriod) : undefined;
264
303
  const matchIds = monthYearPeriodId != null ? matchIdsByPeriod[monthYearPeriodId] : undefined;
@@ -270,19 +309,25 @@ export function getExpenseAutomationActualMatchingView(state) {
270
309
  const rows = allRows.filter((row) => matchesSearch(row, uiState.searchString));
271
310
  const reversed = sortActualMatchingRows(rows.filter((row) => isReversedMatchKind(row.kind)), uiState);
272
311
  const pendingReview = sortActualMatchingRows(rows.filter((row) => row.kind === 'pending_review'), uiState);
273
- const kpiSummary = buildActualMatchingKpiSummary(allRows);
312
+ const kpiSummary = buildActualMatchingKpiSummary(allRows, getTenantDisplayCurrency(state)?.currencyCode);
274
313
  const searchedAccruals = matchModal.accrualSearch.results
275
314
  .map((key) => getJEOneTimeAccrualByKey(key, state.jeSchedulesState))
276
315
  .filter((accrual) => accrual != null);
277
316
  const openedMatch = matchModal.openedFromMatchId != null
278
317
  ? getActualMatchingMatchById(state.actualMatchingState, matchModal.openedFromMatchId)
279
318
  : undefined;
280
- const pinnedAccruals = (openedMatch?.members ?? []).map(toMatchModalAccrual);
319
+ const pinnedAccruals = [
320
+ ...(openedMatch?.members ?? []),
321
+ ...(openedMatch?.leftovers ?? []),
322
+ ].map(toMatchModalAccrual);
281
323
  const firstSuggestion = openedMatch?.members[0]?.matchSuggestion;
282
324
  const prefill = openedMatch == null
283
325
  ? undefined
284
326
  : {
285
- selectedAccrualIds: openedMatch.members.map((member) => member.accrualId),
327
+ selectedAccrualIds: [
328
+ ...openedMatch.members.map((member) => member.accrualId),
329
+ ...(openedMatch.leftovers ?? []).map((leftover) => leftover.accrualId),
330
+ ],
286
331
  actualAmount: openedMatch.actualAmount.amount,
287
332
  matchedLineId: firstSuggestion?.matchedLineId,
288
333
  matchedTransactionId: firstSuggestion?.matchedTransactionId,
@@ -296,7 +341,6 @@ export function getExpenseAutomationActualMatchingView(state) {
296
341
  uiState,
297
342
  refreshStatus,
298
343
  hasLoadedForSelectedPeriod: matchIds != null,
299
- undoReversalStatus,
300
344
  matchModal: {
301
345
  isOpen: matchModal.isOpen,
302
346
  openedFromMatchId: matchModal.openedFromMatchId,
@@ -30,3 +30,6 @@ const UNDO_REVERSAL_RESULT_STATUSES = [
30
30
  'error',
31
31
  ];
32
32
  export const toUndoReversalResultStatus = (v) => stringToUnion(v, UNDO_REVERSAL_RESULT_STATUSES);
33
+ export function actualMatchingTransactionLineKey(transactionType, transactionIntegrationId, lineId) {
34
+ return `${transactionType}:${transactionIntegrationId}:${lineId}`;
35
+ }
package/lib/index.d.ts CHANGED
@@ -334,7 +334,7 @@ import { getExpenseAutomationReconciliationView, getLedgerAccountIdsWithStatemen
334
334
  import { getExpenseAutomationTransactionView, getLastTransferEntryReplacement } from './view/expenseAutomationView/selectors/transactionCategorizationSelector';
335
335
  import { applyTransactionFilters } from './view/expenseAutomationView/transactionFilterHelpers';
336
336
  import { TRANSACTION_FILTER_CATEGORIES, TransactionFilterAmountMatchingOperator, TransactionFilterCategory, TransactionFilterCategoryDropdownOption, TransactionFilterCategoryField, TransactionFilterEntityType, TransactionFilters } from './view/expenseAutomationView/transactionFilterTypes';
337
- import { ActualMatchingTransactionSearchResult, ActualMatchingSortKey as ExpenseAutomationActualMatchingSortKey, ActualMatchingViewUIState as ExpenseAutomationActualMatchingViewUIState, MATCH_ACCRUAL_SEARCH_LIMIT, MATCH_SEARCH_DEBOUNCE_MS, MATCH_TRANSACTION_SEARCH_PAGE_SIZE, MatchAndReverseAccrualsParams, MatchAndReverseResult, MatchAndReverseResultStatus, UndoReversalAccrualsParams, UndoReversalResult, UndoReversalResultStatus, toActualMatchingSortKey as toExpenseAutomationActualMatchingSortKey, toMatchAndReverseResultStatus, toUndoReversalResultStatus } from './view/expenseAutomationView/types/actualMatchingViewState';
337
+ import { ActualMatchingTransactionSearchResult, ActualMatchingSortKey as ExpenseAutomationActualMatchingSortKey, ActualMatchingViewUIState as ExpenseAutomationActualMatchingViewUIState, MATCH_ACCRUAL_SEARCH_LIMIT, MATCH_SEARCH_DEBOUNCE_MS, MATCH_TRANSACTION_SEARCH_PAGE_SIZE, MatchAndReverseAccrualsParams, MatchAndReverseResult, MatchAndReverseResultStatus, UndoReversalAccrualsParams, UndoReversalResult, UndoReversalResultStatus, actualMatchingTransactionLineKey, toActualMatchingSortKey as toExpenseAutomationActualMatchingSortKey, toMatchAndReverseResultStatus, toUndoReversalResultStatus } from './view/expenseAutomationView/types/actualMatchingViewState';
338
338
  import { CompletedSubTab, DEFAULT_COMPLETED_SUB_TAB, toCompletedSubTab } from './view/expenseAutomationView/types/completedSubTab';
339
339
  import { FluxAnalysisActionType, FluxAnalysisReviewStatus, FluxAnalysisSectionType, FluxAnalysisSortKey, FluxAnalysisViewUIState, FluxBalancesByMonth } from './view/expenseAutomationView/types/fluxAnalysisViewState';
340
340
  import { ALL_JE_PAGE_TABS, AccountSettingsLocalData, JEScheduleSortKey as ExpenseAutomationJEScheduleSortKey, JESchedulesViewUIState as ExpenseAutomationJESchedulesViewUIState, JEPageTab, JEScheduleLocalData, NewJeDetailLocalData, NewJeScheduleState, NewOneTimeAccrualLocalData, NewScheduleLocalData, NewScheduleLocalDataFixedAssets, SearchTransactionsState, toJEScheduleSortKey as toExpenseAutomationJEScheduleSortKey, toJEPageTab } from './view/expenseAutomationView/types/jeSchedulesViewState';
@@ -735,7 +735,7 @@ export { TransactionsOrder, COABalancesSliceOrder, EntityOrder, Section, Section
735
735
  export { ClassesViewSelectorReportV2 };
736
736
  export { BalancesTimeseries, TrendTimeseries, BalanceKind };
737
737
  export { fetchMonthEndCloseChecks, fetchMonthClosePerformanceTrend, MonthClosePerformanceTrend, MonthEndCloseCheck, getMonthEndCloseChecksViewByTenantId, MonthEndCloseChecksView, MonthEndCloseCheckFrequency, MonthCloseCheckMetrics, MonthCloseCheckProgressJson, ALL_MONTH_END_CLOSE_CHECKS_FREQUENCY, MonthEndAuditSummary, };
738
- 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, DEFAULT_COMPLETED_SUB_TAB, DEFAULT_TRANSACTION_GROUP, TRANSACTION_GROUPS, TransactionGroup, toTransactionGroup, MatchCandidate, MatchSource, MissingReceiptsTab, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toCompletedSubTab, toMatchSource, toMissingReceiptsTab, ResolvedBatchFile, ResolvedBatchDetails, ResolvedCandidate, ExpenseAutomationJEScheduleSortKey, ExpenseAutomationJESchedulesViewUIState, ExpenseAutomationActualMatchingViewSelector, ActualMatchingKpiSummary, ActualMatchingMatchModalView, ActualMatchingRow, ActualMatchingRowKind, ExpenseAutomationActualMatchingSortKey, ExpenseAutomationActualMatchingViewUIState, ActualMatchingTransactionSearchResult, MatchAndReverseAccrualsParams, MatchAndReverseResult, MatchAndReverseResultStatus, UndoReversalAccrualsParams, UndoReversalResult, UndoReversalResultStatus, JEKpiSummary, ALL_JE_PAGE_TABS, JEPageTab, MATCH_ACCRUAL_SEARCH_LIMIT, MATCH_SEARCH_DEBOUNCE_MS, MATCH_TRANSACTION_SEARCH_PAGE_SIZE, toExpenseAutomationJEScheduleSortKey, toExpenseAutomationActualMatchingSortKey, toJEPageTab, toMatchAndReverseResultStatus, toUndoReversalResultStatus, toggleJECreatedGroupCollapsed, toggleJEPendingGroupCollapsed, updateJEScheduleTypeFilter, getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, toExpenseAutomationViewTypeStrict, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationCompletedSubTab, updateTransactionGroup, fetchExpenseAutomationMissingReceipts, bulkUploadReceipts, bulkUploadAutomatchingTimedOut, bulkUploadReceiptsSuccess, bulkUploadReceiptsFailure, restoreBulkUploadAutomatchingOnMount, restoreBulkUploadMatchingState, updateBulkUploadProgress, pusherBatchStatusUpdate, requestMissingReceiptsTabNavigation, clearMissingReceiptsTabNavigation, fetchBulkUploadBatchDetails, fetchBulkUploadBatchDetailsSuccess, fetchBulkUploadBatchDetailsFailure, storeBatchDetails, fetchMoreBatchDetails, fetchMoreBatchDetailsComplete, fetchMoreBatchDetailsFailure, fetchBulkUploadBatches, fetchBulkUploadBatchesSuccess, fetchBulkUploadBatchesFailure, clearBulkUploadBatchDetailsForScopeChange, markBatchDetailRefreshAttempted, refreshBatchDetailsForBatchId, 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, getLedgerAccountIdsWithStatementOverrideWarning, getLedgerAccountsForCombinedStatementMapping, getReparseStatementStatusByAccountId, getUnavailableLedgerAccountIds, AccountReconciliationBySection, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, UploadStatementDocumentAIResponse, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, AccountReconciliationByAccount, AccountReconciliationEntity, getAccountReconByAccountIdAndSelectedPeriod, ExpenseAutomationReconciliationViewTab, toReconciliationTabsType, isAccountReconReport, ReconReviewSortKey, AccountReconSectionID, ReconciliationReviewTabLocalData, TransactionsToReview, RecommendedActionCodeType, ReconciliationStatusCodeType, BalanceDataStatusCodeType, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, updateStatementProcessingFailed, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, BankStatusCodeType, ReconciliationAccountSourceType, toReconciliationAccountSource, StatementStatusCodeType, AccountReconciliationLocalData, CombinedStatementAccount, StatementAccountScope, StatementDataStatusCodeType, deleteAccountStatement, deleteCombinedStatement, uploadAccountStatement, parseCombinedStatement, parseStatement, parseStatementSuccess, parseStatementFailure, reparseStatement, reparseStatementSuccess, reparseStatementFailure, resetReparseStatementStatus, updateParsedStatementData, updateNodeCollapseState, UploadStatementDocumentAIPayload, updateStatementUploadChosen, submitCombinedStatementUpdate, submitStatementUpdate, clearStatementDateConflict, confirmStatementMapping, StatementDateConflict, updateStatementUpdateLocalData, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, setStatementProcessingDismissedToBackground, updateStatementProcessingBackgroundCompletedSteps, ParsedStatementData, StatementUpdateLocalData, StatementMeta, StatementTransaction, StatementTransactionForUpdate, StatementTransactionsUpdate, };
738
+ 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, DEFAULT_COMPLETED_SUB_TAB, DEFAULT_TRANSACTION_GROUP, TRANSACTION_GROUPS, TransactionGroup, toTransactionGroup, MatchCandidate, MatchSource, MissingReceiptsTab, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toCompletedSubTab, toMatchSource, toMissingReceiptsTab, ResolvedBatchFile, ResolvedBatchDetails, ResolvedCandidate, ExpenseAutomationJEScheduleSortKey, ExpenseAutomationJESchedulesViewUIState, ExpenseAutomationActualMatchingViewSelector, ActualMatchingKpiSummary, ActualMatchingMatchModalView, ActualMatchingRow, ActualMatchingRowKind, ExpenseAutomationActualMatchingSortKey, ExpenseAutomationActualMatchingViewUIState, ActualMatchingTransactionSearchResult, MatchAndReverseAccrualsParams, MatchAndReverseResult, MatchAndReverseResultStatus, UndoReversalAccrualsParams, UndoReversalResult, UndoReversalResultStatus, actualMatchingTransactionLineKey, JEKpiSummary, ALL_JE_PAGE_TABS, JEPageTab, MATCH_ACCRUAL_SEARCH_LIMIT, MATCH_SEARCH_DEBOUNCE_MS, MATCH_TRANSACTION_SEARCH_PAGE_SIZE, toExpenseAutomationJEScheduleSortKey, toExpenseAutomationActualMatchingSortKey, toJEPageTab, toMatchAndReverseResultStatus, toUndoReversalResultStatus, toggleJECreatedGroupCollapsed, toggleJEPendingGroupCollapsed, updateJEScheduleTypeFilter, getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, toExpenseAutomationViewTypeStrict, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationCompletedSubTab, updateTransactionGroup, fetchExpenseAutomationMissingReceipts, bulkUploadReceipts, bulkUploadAutomatchingTimedOut, bulkUploadReceiptsSuccess, bulkUploadReceiptsFailure, restoreBulkUploadAutomatchingOnMount, restoreBulkUploadMatchingState, updateBulkUploadProgress, pusherBatchStatusUpdate, requestMissingReceiptsTabNavigation, clearMissingReceiptsTabNavigation, fetchBulkUploadBatchDetails, fetchBulkUploadBatchDetailsSuccess, fetchBulkUploadBatchDetailsFailure, storeBatchDetails, fetchMoreBatchDetails, fetchMoreBatchDetailsComplete, fetchMoreBatchDetailsFailure, fetchBulkUploadBatches, fetchBulkUploadBatchesSuccess, fetchBulkUploadBatchesFailure, clearBulkUploadBatchDetailsForScopeChange, markBatchDetailRefreshAttempted, refreshBatchDetailsForBatchId, 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, getLedgerAccountIdsWithStatementOverrideWarning, getLedgerAccountsForCombinedStatementMapping, getReparseStatementStatusByAccountId, getUnavailableLedgerAccountIds, AccountReconciliationBySection, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, UploadStatementDocumentAIResponse, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, AccountReconciliationByAccount, AccountReconciliationEntity, getAccountReconByAccountIdAndSelectedPeriod, ExpenseAutomationReconciliationViewTab, toReconciliationTabsType, isAccountReconReport, ReconReviewSortKey, AccountReconSectionID, ReconciliationReviewTabLocalData, TransactionsToReview, RecommendedActionCodeType, ReconciliationStatusCodeType, BalanceDataStatusCodeType, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, updateStatementProcessingFailed, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, BankStatusCodeType, ReconciliationAccountSourceType, toReconciliationAccountSource, StatementStatusCodeType, AccountReconciliationLocalData, CombinedStatementAccount, StatementAccountScope, StatementDataStatusCodeType, deleteAccountStatement, deleteCombinedStatement, uploadAccountStatement, parseCombinedStatement, parseStatement, parseStatementSuccess, parseStatementFailure, reparseStatement, reparseStatementSuccess, reparseStatementFailure, resetReparseStatementStatus, updateParsedStatementData, updateNodeCollapseState, UploadStatementDocumentAIPayload, updateStatementUploadChosen, submitCombinedStatementUpdate, submitStatementUpdate, clearStatementDateConflict, confirmStatementMapping, StatementDateConflict, updateStatementUpdateLocalData, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, setStatementProcessingDismissedToBackground, updateStatementProcessingBackgroundCompletedSteps, ParsedStatementData, StatementUpdateLocalData, StatementMeta, StatementTransaction, StatementTransactionForUpdate, StatementTransactionsUpdate, };
739
739
  export { JEScheduleLocalData };
740
740
  export { ExpenseAutomationJESchedulesViewSelector, JEAccountSettingsView, ExpenseAutomationJEOneTimeAccrualDetailView, JEScheduleRow, JEScheduledTransactionWithFailedEntries, NewJeDetailLocalData, NewJeScheduleState, NewOneTimeAccrualLocalData, NewAccrualAccountsView, NewScheduleLocalData, NewScheduleLocalDataFixedAssets, NewScheduleSearchTransactionsView, NewScheduleView, SearchTransactionsState, computeNewScheduleJeDetails, createOneTimeAccrual, createOneTimeAccrualFailure, createOneTimeAccrualSuccess, fetchOneTimeAccrual, getJeNewAccrualAccountsView, ignoreOneTimeAccrual, promoteOneTimeAccrual, revertJeSchedule, revertOneTimeAccrual, getJeNewScheduleSearchTransactionsView, getJeNewScheduleView, };
741
741
  export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateTransactionFilters, updateSelectedCheckboxTransactionIds, markCategoryClassRecommendationsFailureForCategorization, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, createTransferEntry, createTransferEntryFailure, createTransferEntryReplacedTransaction, createTransferEntrySuccess, resetCreateTransferEntryStatus, clearTransferEntryRouteReplacement, fetchAccountsForTransferFlow, removeTransactionFromAllTabs, clearExpenseAutomationTransactionsView, TransactionsSortKey, toTransactionsSortKey, TransactionsTab, TransactionCategorizationLineItemData, TransactionReviewLocalData, SupportedTransactionCategorization, ExpenseAutomationTransactionsViewState, ExpenseAutomationTransactionsViewUIState, ExpenseAutomationTransactionViewSelector, TransactionReviewLocalDataSelectorView, };
@@ -1262,3 +1262,4 @@ export { getActualMatchingAmount, getActualMatchingReversalDate, parseActualMatc
1262
1262
  export type { ExpenseAutomationActualMatchingMatchView } from './view/expenseAutomationView/selectors/actualMatchingViewSelector';
1263
1263
  export type { ActualMatchingMatch, ActualMatchingMatchKind, } from './entity/actualMatching/actualMatchingState';
1264
1264
  export type { ActualMatchingMatchId } from './entity/actualMatching/actualMatchingTypes';
1265
+ export type { DisplayCurrencyFallback } from './entity/actualMatching/actualMatchingPayload';