@zeniai/client-epic-state 5.2.35-beta0MM → 5.2.35-beta2MM
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/entity/actualMatching/actualMatchingPayload.js +6 -4
- package/lib/esm/entity/actualMatching/actualMatchingPayload.js +6 -4
- package/lib/esm/index.js +2 -2
- package/lib/esm/view/expenseAutomationView/epics/actualMatching/fetchActualMatchingEpic.js +2 -4
- package/lib/esm/view/expenseAutomationView/epics/actualMatching/matchAndReverseAccrualsEpic.js +2 -3
- package/lib/esm/view/expenseAutomationView/epics/actualMatching/searchMatchAccrualsEpic.js +6 -2
- package/lib/esm/view/expenseAutomationView/epics/actualMatching/searchMatchTransactionsEpic.js +6 -2
- package/lib/esm/view/expenseAutomationView/epics/actualMatching/undoReversalAccrualsEpic.js +2 -3
- package/lib/esm/view/expenseAutomationView/expenseAutomationViewSelector.js +1 -0
- package/lib/esm/view/expenseAutomationView/expenseAutomationViewState.js +4 -2
- package/lib/esm/view/expenseAutomationView/reducers/actualMatchingViewReducer.js +13 -6
- package/lib/esm/view/expenseAutomationView/selectors/actualMatchingViewSelector.js +83 -36
- package/lib/esm/view/expenseAutomationView/selectors/jeSchedulesViewSelector.js +1 -0
- package/lib/esm/view/expenseAutomationView/types/jeSchedulesViewState.js +3 -0
- package/lib/index.d.ts +2 -2
- package/lib/index.js +49 -48
- package/lib/view/expenseAutomationView/epics/actualMatching/fetchActualMatchingEpic.js +2 -4
- package/lib/view/expenseAutomationView/epics/actualMatching/matchAndReverseAccrualsEpic.js +2 -3
- package/lib/view/expenseAutomationView/epics/actualMatching/searchMatchAccrualsEpic.d.ts +2 -1
- package/lib/view/expenseAutomationView/epics/actualMatching/searchMatchAccrualsEpic.js +5 -1
- package/lib/view/expenseAutomationView/epics/actualMatching/searchMatchTransactionsEpic.js +5 -1
- package/lib/view/expenseAutomationView/epics/actualMatching/undoReversalAccrualsEpic.js +2 -3
- package/lib/view/expenseAutomationView/expenseAutomationViewSelector.js +1 -0
- package/lib/view/expenseAutomationView/expenseAutomationViewState.d.ts +2 -1
- package/lib/view/expenseAutomationView/expenseAutomationViewState.js +6 -3
- package/lib/view/expenseAutomationView/reducers/actualMatchingViewReducer.d.ts +4 -2
- package/lib/view/expenseAutomationView/reducers/actualMatchingViewReducer.js +13 -6
- package/lib/view/expenseAutomationView/selectorTypes/actualMatchingViewSelectorTypes.d.ts +10 -8
- package/lib/view/expenseAutomationView/selectorTypes/expenseAutomationViewSelectorTypes.d.ts +9 -0
- package/lib/view/expenseAutomationView/selectors/actualMatchingViewSelector.d.ts +4 -1
- package/lib/view/expenseAutomationView/selectors/actualMatchingViewSelector.js +84 -35
- package/lib/view/expenseAutomationView/selectors/jeSchedulesViewSelector.js +1 -0
- package/lib/view/expenseAutomationView/types/jeSchedulesViewState.js +3 -0
- package/package.json +1 -1
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.toActualMatchingMatch = toActualMatchingMatch;
|
|
4
4
|
const amount_1 = require("../../commonStateTypes/amount");
|
|
5
|
+
const stringToUnion_1 = require("../../commonStateTypes/stringToUnion");
|
|
5
6
|
const jeSchedulesPayload_1 = require("../jeSchedules/jeSchedulesPayload");
|
|
6
7
|
const USD_CURRENCY_CODE = 'USD';
|
|
7
8
|
const USD_CURRENCY_SYMBOL = '$';
|
|
@@ -11,11 +12,12 @@ const MATCH_KINDS = [
|
|
|
11
12
|
'manually_reversed',
|
|
12
13
|
];
|
|
13
14
|
function toMatchKind(raw) {
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
const kind = (0, stringToUnion_1.stringToUnionStrict)(raw, MATCH_KINDS);
|
|
16
|
+
if (kind == null) {
|
|
17
|
+
console.error(`Unknown ActualMatchingMatchKind: ${raw}`);
|
|
18
|
+
return 'auto_reversed';
|
|
16
19
|
}
|
|
17
|
-
|
|
18
|
-
return 'auto_reversed';
|
|
20
|
+
return kind;
|
|
19
21
|
}
|
|
20
22
|
function toActualMatchingMatch(payload) {
|
|
21
23
|
const currencyCode = payload.currency_code != null && payload.currency_code !== ''
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { toAmount } from '../../commonStateTypes/amount';
|
|
2
|
+
import { stringToUnionStrict } from '../../commonStateTypes/stringToUnion';
|
|
2
3
|
import { toJEOneTimeAccrual, } from '../jeSchedules/jeSchedulesPayload';
|
|
3
4
|
const USD_CURRENCY_CODE = 'USD';
|
|
4
5
|
const USD_CURRENCY_SYMBOL = '$';
|
|
@@ -8,11 +9,12 @@ const MATCH_KINDS = [
|
|
|
8
9
|
'manually_reversed',
|
|
9
10
|
];
|
|
10
11
|
function toMatchKind(raw) {
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
const kind = stringToUnionStrict(raw, MATCH_KINDS);
|
|
13
|
+
if (kind == null) {
|
|
14
|
+
console.error(`Unknown ActualMatchingMatchKind: ${raw}`);
|
|
15
|
+
return 'auto_reversed';
|
|
13
16
|
}
|
|
14
|
-
|
|
15
|
-
return 'auto_reversed';
|
|
17
|
+
return kind;
|
|
16
18
|
}
|
|
17
19
|
export function toActualMatchingMatch(payload) {
|
|
18
20
|
const currencyCode = payload.currency_code != null && payload.currency_code !== ''
|
package/lib/esm/index.js
CHANGED
|
@@ -184,7 +184,7 @@ import { updateDashboardLayout } from './view/dashboardLayout/dashboardLayoutRed
|
|
|
184
184
|
import uploadAccountStatementIntoDocumentAI from './view/expenseAutomationView/epics/accountRecon/uploadAccountStatementDocumentAIHelper';
|
|
185
185
|
import { fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedPeriod, updateCurrentSelectedView, } from './view/expenseAutomationView/expenseAutomationViewReducer';
|
|
186
186
|
import { getExpenseAutomationView } from './view/expenseAutomationView/expenseAutomationViewSelector';
|
|
187
|
-
import { toExpenseAutomationViewType, } from './view/expenseAutomationView/expenseAutomationViewState';
|
|
187
|
+
import { toExpenseAutomationViewType, toExpenseAutomationViewTypeStrict, } from './view/expenseAutomationView/expenseAutomationViewState';
|
|
188
188
|
import { computeNewScheduleJeDetails } from './view/expenseAutomationView/helpers/newScheduleLocalDataHelper';
|
|
189
189
|
import { isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardCreditType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, } from './view/expenseAutomationView/helpers/reconciliationHelpers';
|
|
190
190
|
import { MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, } from './view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper';
|
|
@@ -491,7 +491,7 @@ export { stringToUnion, stringToUnionStrict };
|
|
|
491
491
|
export { fetchMonthEndCloseChecks, fetchMonthClosePerformanceTrend, getMonthEndCloseChecksViewByTenantId, ALL_MONTH_END_CLOSE_CHECKS_FREQUENCY, };
|
|
492
492
|
export {
|
|
493
493
|
// Bulk Upload Types
|
|
494
|
-
BATCH_FILE_STATUSES, isUnmatchedTabFileStatus, DEFAULT_COMPLETED_SUB_TAB, DEFAULT_TRANSACTION_GROUP, TRANSACTION_GROUPS, toTransactionGroup, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toCompletedSubTab, toMatchSource, toMissingReceiptsTab, ALL_JE_PAGE_TABS, 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, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationCompletedSubTab, updateTransactionGroup, fetchExpenseAutomationMissingReceipts,
|
|
494
|
+
BATCH_FILE_STATUSES, isUnmatchedTabFileStatus, DEFAULT_COMPLETED_SUB_TAB, DEFAULT_TRANSACTION_GROUP, TRANSACTION_GROUPS, toTransactionGroup, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toCompletedSubTab, toMatchSource, toMissingReceiptsTab, ALL_JE_PAGE_TABS, 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,
|
|
495
495
|
// Bulk Upload Actions
|
|
496
496
|
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, getExpenseAutomationFluxAnalysisView, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, getLastTransferEntryReplacement, updateFluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, excludeAccountFromReconciliation, includeAccountInReconciliation, saveExpenseAutomationReconciliationDetail, updateExpenseAutomationReconcileTabListScrollState, updateExpenseAutomationReconReviewTabListSortState, updateExpenseAutomationReconcileTabListSortState, updateExpenseAutomationReconcileTabLocalData, updateExpenseAutomationAccountReconciliationSelectedTab, updateExpenseAutomationAccountReconciliationSelectedAccountId, getExpenseAutomationReconciliationView, getLedgerAccountIdsWithStatementOverrideWarning, getLedgerAccountsForCombinedStatementMapping, getReparseStatementStatusByAccountId, getUnavailableLedgerAccountIds, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, getAccountReconByAccountIdAndSelectedPeriod, toReconciliationTabsType, isAccountReconReport, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, updateStatementProcessingFailed, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, toReconciliationAccountSource, deleteAccountStatement, deleteCombinedStatement, uploadAccountStatement, parseCombinedStatement, parseStatement, parseStatementSuccess, parseStatementFailure, reparseStatement, reparseStatementSuccess, reparseStatementFailure, resetReparseStatementStatus, updateParsedStatementData, updateNodeCollapseState, updateStatementUploadChosen, submitCombinedStatementUpdate, submitStatementUpdate, clearStatementDateConflict, confirmStatementMapping, updateStatementUpdateLocalData, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, setStatementProcessingDismissedToBackground, updateStatementProcessingBackgroundCompletedSteps, };
|
|
497
497
|
export { computeNewScheduleJeDetails, createOneTimeAccrual, createOneTimeAccrualFailure, createOneTimeAccrualSuccess, fetchOneTimeAccrual, getJeNewAccrualAccountsView, ignoreOneTimeAccrual, promoteOneTimeAccrual, revertJeSchedule, revertOneTimeAccrual, getJeNewScheduleSearchTransactionsView, getJeNewScheduleView, };
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import { from, of } from 'rxjs';
|
|
2
2
|
import { catchError, filter, mergeMap, switchMap, takeUntil, } from 'rxjs/operators';
|
|
3
3
|
import { updateActualMatchingMatches } from '../../../../entity/actualMatching/actualMatchingReducer';
|
|
4
|
-
import { getCurrentTenant } from '../../../../entity/tenant/tenantSelector';
|
|
5
4
|
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
|
|
6
5
|
import { clearAll } from '../../../../rootActions';
|
|
7
6
|
import { toServiceMonthFromPeriod, } from '../../payload/actualMatchingPayload';
|
|
8
7
|
import { fetchActualMatching, fetchActualMatchingFailure, fetchActualMatchingSuccess, } from '../../reducers/actualMatchingViewReducer';
|
|
8
|
+
import { getSelectedMonthYearForCurrentTenant } from '../../selectors/actualMatchingViewSelector';
|
|
9
9
|
export const fetchActualMatchingEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(fetchActualMatching.match), switchMap((action) => {
|
|
10
10
|
const state = state$.value;
|
|
11
11
|
const { period, refreshViewInBackground } = action.payload;
|
|
12
|
-
const
|
|
13
|
-
const selectedPeriod = state.expenseAutomationViewState
|
|
14
|
-
.selectedPeriodByTenantId[currentTenant?.tenantId ?? ''] ?? {
|
|
12
|
+
const selectedPeriod = getSelectedMonthYearForCurrentTenant(state) ?? {
|
|
15
13
|
month: period.start.month,
|
|
16
14
|
year: period.start.year,
|
|
17
15
|
};
|
package/lib/esm/view/expenseAutomationView/epics/actualMatching/matchAndReverseAccrualsEpic.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { from, of } from 'rxjs';
|
|
2
2
|
import { catchError, filter, mergeMap, takeUntil } from 'rxjs/operators';
|
|
3
3
|
import { convertToPeriod, toAbsoluteDay, } from '../../../../commonStateTypes/timePeriod';
|
|
4
|
-
import { getCurrentTenant } from '../../../../entity/tenant/tenantSelector';
|
|
5
4
|
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
|
|
6
5
|
import { clearAll } from '../../../../rootActions';
|
|
7
6
|
import { toMatchAndReverseResult, } from '../../payload/actualMatchingPayload';
|
|
8
7
|
import { clearMatchNewModal, fetchActualMatching, matchAndReverseAccruals, matchAndReverseAccrualsFailure, matchAndReverseAccrualsSuccess, } from '../../reducers/actualMatchingViewReducer';
|
|
8
|
+
import { getSelectedMonthYearForCurrentTenant } from '../../selectors/actualMatchingViewSelector';
|
|
9
9
|
function refreshActualMatchingList(state) {
|
|
10
|
-
const
|
|
11
|
-
const selectedMonthYear = state.expenseAutomationViewState.selectedPeriodByTenantId[currentTenant?.tenantId ?? ''];
|
|
10
|
+
const selectedMonthYear = getSelectedMonthYearForCurrentTenant(state);
|
|
12
11
|
if (selectedMonthYear == null) {
|
|
13
12
|
return [];
|
|
14
13
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { from, merge, of } from 'rxjs';
|
|
2
|
-
import { catchError, debounceTime, filter, mergeMap, switchMap, } from 'rxjs/operators';
|
|
2
|
+
import { catchError, debounceTime, filter, mergeMap, switchMap, takeUntil, } from 'rxjs/operators';
|
|
3
3
|
import { updateJEOneTimeAccruals } from '../../../../entity/jeSchedules/jeSchedulesReducer';
|
|
4
4
|
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
|
|
5
|
+
import { clearAll } from '../../../../rootActions';
|
|
5
6
|
import { searchMatchAccruals, searchMatchAccrualsFailure, searchMatchAccrualsSuccess, } from '../../reducers/actualMatchingViewReducer';
|
|
6
7
|
import { MATCH_ACCRUAL_SEARCH_LIMIT, MATCH_SEARCH_DEBOUNCE_MS, } from '../../types/actualMatchingViewState';
|
|
7
8
|
export const searchMatchAccrualsEpic = (actions$, _state$, zeniAPI) => {
|
|
@@ -39,6 +40,9 @@ export const searchMatchAccrualsEpic = (actions$, _state$, zeniAPI) => {
|
|
|
39
40
|
}), catchError((error) => of(searchMatchAccrualsFailure({
|
|
40
41
|
error: createZeniAPIStatus('Unexpected Error', 'Search match accruals REST API call errored out' +
|
|
41
42
|
JSON.stringify(error)),
|
|
42
|
-
})))
|
|
43
|
+
}))),
|
|
44
|
+
// On the HTTP stream only. Wrapping the outer merge would complete
|
|
45
|
+
// the epic on the first `clearAll` and drop later searches.
|
|
46
|
+
takeUntil(actions$.pipe(filter(clearAll.match))));
|
|
43
47
|
}));
|
|
44
48
|
};
|
package/lib/esm/view/expenseAutomationView/epics/actualMatching/searchMatchTransactionsEpic.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { from, merge, of } from 'rxjs';
|
|
2
|
-
import { catchError, debounceTime, filter, mergeMap, switchMap, } from 'rxjs/operators';
|
|
2
|
+
import { catchError, debounceTime, filter, mergeMap, switchMap, takeUntil, } from 'rxjs/operators';
|
|
3
3
|
import { getActualMatchingMatchById } from '../../../../entity/actualMatching/actualMatchingSelector';
|
|
4
4
|
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
|
|
5
|
+
import { clearAll } from '../../../../rootActions';
|
|
5
6
|
import { toActualMatchingTransactionSearchResult, } from '../../payload/actualMatchingPayload';
|
|
6
7
|
import { openMatchNewModal, searchMatchAccruals, searchMatchTransactions, searchMatchTransactionsFailure, searchMatchTransactionsSuccess, } from '../../reducers/actualMatchingViewReducer';
|
|
7
8
|
import { parseActualMatchingMatchId } from '../../selectors/actualMatchingViewSelector';
|
|
@@ -67,7 +68,10 @@ export const searchMatchTransactionsEpic = (actions$, state$, zeniAPI) => {
|
|
|
67
68
|
}), catchError((error) => of(searchMatchTransactionsFailure({
|
|
68
69
|
error: createZeniAPIStatus('Unexpected Error', 'Search match transactions REST API call errored out' +
|
|
69
70
|
JSON.stringify(error)),
|
|
70
|
-
})))
|
|
71
|
+
}))),
|
|
72
|
+
// On the HTTP stream only. Wrapping `merge(openModal$, search$)`
|
|
73
|
+
// would complete the epic on the first `clearAll` and drop later searches.
|
|
74
|
+
takeUntil(actions$.pipe(filter(clearAll.match))));
|
|
71
75
|
}));
|
|
72
76
|
return merge(openModal$, search$);
|
|
73
77
|
};
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { from, of } from 'rxjs';
|
|
2
2
|
import { catchError, filter, mergeMap, takeUntil } from 'rxjs/operators';
|
|
3
3
|
import { convertToPeriod, toAbsoluteDay, } from '../../../../commonStateTypes/timePeriod';
|
|
4
|
-
import { getCurrentTenant } from '../../../../entity/tenant/tenantSelector';
|
|
5
4
|
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
|
|
6
5
|
import { clearAll } from '../../../../rootActions';
|
|
7
6
|
import { toUndoReversalResult, } from '../../payload/actualMatchingPayload';
|
|
8
7
|
import { fetchActualMatching, fetchActualMatchingMatch, undoReversalAccruals, undoReversalAccrualsFailure, undoReversalAccrualsSuccess, } from '../../reducers/actualMatchingViewReducer';
|
|
8
|
+
import { getSelectedMonthYearForCurrentTenant } from '../../selectors/actualMatchingViewSelector';
|
|
9
9
|
function refreshActualMatchingList(state) {
|
|
10
|
-
const
|
|
11
|
-
const selectedMonthYear = state.expenseAutomationViewState.selectedPeriodByTenantId[currentTenant?.tenantId ?? ''];
|
|
10
|
+
const selectedMonthYear = getSelectedMonthYearForCurrentTenant(state);
|
|
12
11
|
if (selectedMonthYear == null) {
|
|
13
12
|
return [];
|
|
14
13
|
}
|
|
@@ -43,6 +43,7 @@ export function getExpenseAutomationView(state) {
|
|
|
43
43
|
const reconciliation = getExpenseAutomationReconciliationView(state);
|
|
44
44
|
const expenseAutomationTransactionsView = getExpenseAutomationTransactionView(state);
|
|
45
45
|
const jeSchedules = getExpenseAutomationJESchedulesView(state);
|
|
46
|
+
// Top-level sibling of `jeSchedules`: see ExpenseAutomationViewSelector.
|
|
46
47
|
const actualMatching = getExpenseAutomationActualMatchingView(state);
|
|
47
48
|
switch (currentSelectedView) {
|
|
48
49
|
case 'reconciliation':
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { stringToUnion } from '../../commonStateTypes/stringToUnion';
|
|
2
|
-
|
|
1
|
+
import { stringToUnion, stringToUnionStrict, } from '../../commonStateTypes/stringToUnion';
|
|
2
|
+
const EXPENSE_AUTOMATION_VIEW_TYPES = [
|
|
3
3
|
'transaction_categorization',
|
|
4
4
|
'je_schedules',
|
|
5
5
|
'reconciliation',
|
|
@@ -8,3 +8,5 @@ export const EXPENSE_AUTOMATION_VIEW_TYPES = [
|
|
|
8
8
|
'month_end_insights',
|
|
9
9
|
];
|
|
10
10
|
export const toExpenseAutomationViewType = (v) => stringToUnion(v, EXPENSE_AUTOMATION_VIEW_TYPES);
|
|
11
|
+
/** Unlike `toExpenseAutomationViewType`, unknown strings return `undefined`. */
|
|
12
|
+
export const toExpenseAutomationViewTypeStrict = (v) => stringToUnionStrict(v, EXPENSE_AUTOMATION_VIEW_TYPES);
|
|
@@ -197,10 +197,13 @@ const expenseAutomationActualMatchingView = createSlice({
|
|
|
197
197
|
}
|
|
198
198
|
},
|
|
199
199
|
},
|
|
200
|
+
// Dismiss (Cancel / overlay). Store reset matches `clearMatchNewModal`;
|
|
201
|
+
// the actions stay distinct so confirm-success vs user-dismiss stay observable.
|
|
200
202
|
closeMatchNewModal(draft) {
|
|
201
203
|
draft.matchModal.isOpen = false;
|
|
202
204
|
resetMatchModalSearches(draft);
|
|
203
205
|
},
|
|
206
|
+
// Confirm-success / host reset. Same slice write as close; different action type.
|
|
204
207
|
clearMatchNewModal(draft) {
|
|
205
208
|
draft.matchModal.isOpen = false;
|
|
206
209
|
resetMatchModalSearches(draft);
|
|
@@ -337,12 +340,16 @@ const expenseAutomationActualMatchingView = createSlice({
|
|
|
337
340
|
return { payload: params };
|
|
338
341
|
},
|
|
339
342
|
},
|
|
340
|
-
undoReversalAccrualsSuccess
|
|
341
|
-
draft
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
343
|
+
undoReversalAccrualsSuccess: {
|
|
344
|
+
reducer(draft) {
|
|
345
|
+
draft.undoReversalStatus = {
|
|
346
|
+
fetchState: 'Completed',
|
|
347
|
+
error: undefined,
|
|
348
|
+
};
|
|
349
|
+
},
|
|
350
|
+
prepare(payload) {
|
|
351
|
+
return { payload };
|
|
352
|
+
},
|
|
346
353
|
},
|
|
347
354
|
undoReversalAccrualsFailure(draft, action) {
|
|
348
355
|
draft.undoReversalStatus = {
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import orderBy from 'lodash/orderBy';
|
|
2
|
-
import { toMonthYearPeriodId } from '../../../commonStateTypes/timePeriod';
|
|
2
|
+
import { toMonthYearPeriodId, } from '../../../commonStateTypes/timePeriod';
|
|
3
3
|
import { getActualMatchingMatchById } from '../../../entity/actualMatching/actualMatchingSelector';
|
|
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
|
+
export function getSelectedMonthYearForCurrentTenant(state) {
|
|
8
|
+
const tenantId = getCurrentTenant(state)?.tenantId;
|
|
9
|
+
if (tenantId == null) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
return state.expenseAutomationViewState.selectedPeriodByTenantId[tenantId];
|
|
13
|
+
}
|
|
7
14
|
function toMatchModalAccrual(member) {
|
|
8
15
|
if ('jeOneTimeAccrualKey' in member && member.jeOneTimeAccrualKey != null) {
|
|
9
16
|
return member;
|
|
@@ -164,18 +171,82 @@ function sortActualMatchingRows(rows, uiState) {
|
|
|
164
171
|
const lodashOrder = uiState.sortOrder === 'ascending' ? 'asc' : 'desc';
|
|
165
172
|
return orderBy(rows, [(row) => getActualMatchingSortValue(row, uiState.sortKey)], [lodashOrder]);
|
|
166
173
|
}
|
|
174
|
+
const ESTIMATED_MINUTES_PER_PENDING_MATCH = 4;
|
|
167
175
|
function emptyKpiSummary() {
|
|
168
176
|
return {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
manual: { count: 0 },
|
|
177
|
+
actualsReceived: { count: 0, expectedCount: 0, vendorsPending: 0 },
|
|
178
|
+
autoReversed: { count: 0, percent: 0, clearedAmount: 0 },
|
|
179
|
+
pendingReview: { count: 0, amount: 0, estimatedMinutesToClear: 0 },
|
|
180
|
+
variance: { percent: 0, averagePercentPerMatch: 0, netAmount: 0 },
|
|
174
181
|
};
|
|
175
182
|
}
|
|
176
183
|
function sumRowAmounts(rows) {
|
|
177
184
|
return rows.reduce((sum, row) => sum + getActualMatchingAmount(row), 0);
|
|
178
185
|
}
|
|
186
|
+
function uniqueVendorCount(rows) {
|
|
187
|
+
const ids = new Set();
|
|
188
|
+
rows.forEach((row) => {
|
|
189
|
+
if (row.vendorId != null && row.vendorId !== '') {
|
|
190
|
+
ids.add(row.vendorId);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (row.vendorName !== '') {
|
|
194
|
+
ids.add(row.vendorName);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
return ids.size;
|
|
198
|
+
}
|
|
199
|
+
function rowVariancePercent(row) {
|
|
200
|
+
const accrued = row.accruedAmount?.amount ?? row.estimatedAmount.amount;
|
|
201
|
+
const actual = row.actualAmount?.amount;
|
|
202
|
+
if (actual == null || accrued === 0) {
|
|
203
|
+
return undefined;
|
|
204
|
+
}
|
|
205
|
+
return ((actual - accrued) / accrued) * 100;
|
|
206
|
+
}
|
|
207
|
+
export function buildActualMatchingKpiSummary(rows) {
|
|
208
|
+
if (rows.length === 0) {
|
|
209
|
+
return emptyKpiSummary();
|
|
210
|
+
}
|
|
211
|
+
const autoReversed = rows.filter((row) => row.kind === 'auto_reversed');
|
|
212
|
+
const pendingReview = rows.filter((row) => row.kind === 'pending_review');
|
|
213
|
+
const receivedCount = rows.length;
|
|
214
|
+
const rowsWithActual = rows.filter((row) => row.actualAmount?.amount != null);
|
|
215
|
+
const accruedTotal = rowsWithActual.reduce((sum, row) => sum + (row.accruedAmount?.amount ?? row.estimatedAmount.amount), 0);
|
|
216
|
+
const actualTotal = rowsWithActual.reduce((sum, row) => sum + (row.actualAmount?.amount ?? 0), 0);
|
|
217
|
+
const variancePercents = rows
|
|
218
|
+
.map(rowVariancePercent)
|
|
219
|
+
.filter((percent) => percent != null);
|
|
220
|
+
return {
|
|
221
|
+
actualsReceived: {
|
|
222
|
+
count: receivedCount,
|
|
223
|
+
// List API does not return still-expected accruals; hide "of N expected"
|
|
224
|
+
// in the strip until expectedCount is greater than received.
|
|
225
|
+
expectedCount: receivedCount,
|
|
226
|
+
vendorsPending: uniqueVendorCount(pendingReview),
|
|
227
|
+
},
|
|
228
|
+
autoReversed: {
|
|
229
|
+
count: autoReversed.length,
|
|
230
|
+
percent: Math.round((autoReversed.length / receivedCount) * 100),
|
|
231
|
+
clearedAmount: sumRowAmounts(autoReversed),
|
|
232
|
+
},
|
|
233
|
+
pendingReview: {
|
|
234
|
+
count: pendingReview.length,
|
|
235
|
+
amount: sumRowAmounts(pendingReview),
|
|
236
|
+
estimatedMinutesToClear: pendingReview.length * ESTIMATED_MINUTES_PER_PENDING_MATCH,
|
|
237
|
+
},
|
|
238
|
+
variance: {
|
|
239
|
+
percent: accruedTotal === 0
|
|
240
|
+
? 0
|
|
241
|
+
: ((actualTotal - accruedTotal) / accruedTotal) * 100,
|
|
242
|
+
averagePercentPerMatch: variancePercents.length === 0
|
|
243
|
+
? 0
|
|
244
|
+
: variancePercents.reduce((sum, percent) => sum + percent, 0) /
|
|
245
|
+
variancePercents.length,
|
|
246
|
+
netAmount: actualTotal - accruedTotal,
|
|
247
|
+
},
|
|
248
|
+
};
|
|
249
|
+
}
|
|
179
250
|
export function getExpenseAutomationActualMatchingMatchView(state, matchId) {
|
|
180
251
|
const view = state.expenseAutomationActualMatchingViewState;
|
|
181
252
|
return {
|
|
@@ -186,44 +257,20 @@ export function getExpenseAutomationActualMatchingMatchView(state, matchId) {
|
|
|
186
257
|
};
|
|
187
258
|
}
|
|
188
259
|
export function getExpenseAutomationActualMatchingView(state) {
|
|
189
|
-
const { expenseAutomationActualMatchingViewState
|
|
260
|
+
const { expenseAutomationActualMatchingViewState } = state;
|
|
190
261
|
const { matchIdsByPeriod, fetchState, error, refreshStatus, uiState, matchModal, undoReversalStatus, } = expenseAutomationActualMatchingViewState;
|
|
191
|
-
const
|
|
192
|
-
const selectedPeriod = expenseAutomationViewState.selectedPeriodByTenantId[currentTenant?.tenantId ?? ''];
|
|
262
|
+
const selectedPeriod = getSelectedMonthYearForCurrentTenant(state);
|
|
193
263
|
const monthYearPeriodId = selectedPeriod != null ? toMonthYearPeriodId(selectedPeriod) : undefined;
|
|
194
264
|
const matchIds = monthYearPeriodId != null ? matchIdsByPeriod[monthYearPeriodId] : undefined;
|
|
195
|
-
const
|
|
265
|
+
const allRows = (matchIds ?? [])
|
|
196
266
|
.map((matchId) => getActualMatchingMatchById(state.actualMatchingState, matchId))
|
|
197
267
|
.filter((match) => match != null)
|
|
198
268
|
.filter((match) => match.members.length > 0)
|
|
199
|
-
.map(toActualMatchingRow)
|
|
200
|
-
|
|
269
|
+
.map(toActualMatchingRow);
|
|
270
|
+
const rows = allRows.filter((row) => matchesSearch(row, uiState.searchString));
|
|
201
271
|
const reversed = sortActualMatchingRows(rows.filter((row) => isReversedMatchKind(row.kind)), uiState);
|
|
202
272
|
const pendingReview = sortActualMatchingRows(rows.filter((row) => row.kind === 'pending_review'), uiState);
|
|
203
|
-
const
|
|
204
|
-
const listedRows = [...reversed, ...pendingReview];
|
|
205
|
-
const kpiSummary = listedRows.length === 0
|
|
206
|
-
? emptyKpiSummary()
|
|
207
|
-
: {
|
|
208
|
-
autoReversed: {
|
|
209
|
-
count: autoReversedForKpi.length,
|
|
210
|
-
amount: sumRowAmounts(autoReversedForKpi),
|
|
211
|
-
},
|
|
212
|
-
pendingReview: {
|
|
213
|
-
count: pendingReview.length,
|
|
214
|
-
amount: sumRowAmounts(pendingReview),
|
|
215
|
-
},
|
|
216
|
-
totalThisClose: {
|
|
217
|
-
count: listedRows.length,
|
|
218
|
-
amount: sumRowAmounts(listedRows),
|
|
219
|
-
},
|
|
220
|
-
ai: {
|
|
221
|
-
count: listedRows.filter((row) => row.origin === 'agent').length,
|
|
222
|
-
},
|
|
223
|
-
manual: {
|
|
224
|
-
count: listedRows.filter((row) => row.origin === 'human').length,
|
|
225
|
-
},
|
|
226
|
-
};
|
|
273
|
+
const kpiSummary = buildActualMatchingKpiSummary(allRows);
|
|
227
274
|
const searchedAccruals = matchModal.accrualSearch.results
|
|
228
275
|
.map((key) => getJEOneTimeAccrualByKey(key, state.jeSchedulesState))
|
|
229
276
|
.filter((accrual) => accrual != null);
|
|
@@ -366,6 +366,7 @@ export function getExpenseAutomationJESchedulesView(state) {
|
|
|
366
366
|
// reports undefined rather than 0, so the UI can hide the badge instead of asserting "none".
|
|
367
367
|
const scheduleCountsByTab = {};
|
|
368
368
|
ALL_JE_PAGE_TABS.forEach((pageTab) => {
|
|
369
|
+
// AM's badge is `actualMatching.kpiSummary`, not schedule row keys.
|
|
369
370
|
if (pageTab === 'actual_matching') {
|
|
370
371
|
return;
|
|
371
372
|
}
|
|
@@ -16,6 +16,9 @@ const JE_SCHEDULE_SORT_KEYS = [
|
|
|
16
16
|
'memo',
|
|
17
17
|
];
|
|
18
18
|
export const toJEScheduleSortKey = (v) => stringToUnion(v, JE_SCHEDULE_SORT_KEYS);
|
|
19
|
+
// `actual_matching` is chrome only: the JE tab bar includes it, but AM data is
|
|
20
|
+
// `expenseAutomationActualMatchingViewState`, not the schedules period-tab
|
|
21
|
+
// cache below. Walks of ALL_JE_PAGE_TABS that read schedule keys must skip it.
|
|
19
22
|
const JE_PAGE_TABS = [
|
|
20
23
|
'schedules',
|
|
21
24
|
'actual_matching',
|
package/lib/index.d.ts
CHANGED
|
@@ -305,7 +305,7 @@ import { updateDashboardLayout } from './view/dashboardLayout/dashboardLayoutRed
|
|
|
305
305
|
import uploadAccountStatementIntoDocumentAI from './view/expenseAutomationView/epics/accountRecon/uploadAccountStatementDocumentAIHelper';
|
|
306
306
|
import { fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedPeriod, updateCurrentSelectedView } from './view/expenseAutomationView/expenseAutomationViewReducer';
|
|
307
307
|
import { getExpenseAutomationView } from './view/expenseAutomationView/expenseAutomationViewSelector';
|
|
308
|
-
import { ExpenseAutomationViewState, ExpenseAutomationViewType, toExpenseAutomationViewType } from './view/expenseAutomationView/expenseAutomationViewState';
|
|
308
|
+
import { ExpenseAutomationViewState, ExpenseAutomationViewType, toExpenseAutomationViewType, toExpenseAutomationViewTypeStrict } from './view/expenseAutomationView/expenseAutomationViewState';
|
|
309
309
|
import { computeNewScheduleJeDetails } from './view/expenseAutomationView/helpers/newScheduleLocalDataHelper';
|
|
310
310
|
import { isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardCreditType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType } from './view/expenseAutomationView/helpers/reconciliationHelpers';
|
|
311
311
|
import { MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount } from './view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper';
|
|
@@ -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, 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, 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, };
|