@zeniai/client-epic-state 5.0.66-betaAR6 → 5.0.66-betaJK2
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/account/accountSelector.d.ts +1 -20
- package/lib/entity/account/accountSelector.js +1 -35
- package/lib/entity/account/accountState.d.ts +0 -5
- package/lib/entity/account/accountState.js +4 -11
- package/lib/entity/class/classSelector.d.ts +0 -35
- package/lib/entity/class/classSelector.js +0 -44
- package/lib/entity/monthEndCloseChecks/monthEndCloseChecksPayload.d.ts +2 -0
- package/lib/entity/monthEndCloseChecks/monthEndCloseChecksPayload.js +2 -0
- package/lib/entity/monthEndCloseChecks/monthEndCloseChecksState.d.ts +2 -0
- package/lib/esm/entity/account/accountSelector.js +1 -33
- package/lib/esm/entity/account/accountState.js +1 -7
- package/lib/esm/entity/class/classSelector.js +0 -42
- package/lib/esm/entity/monthEndCloseChecks/monthEndCloseChecksPayload.js +2 -0
- package/lib/esm/index.js +4 -10
- package/lib/esm/view/companyHealthMetricView/companyHealthMetricViewSelector.js +1 -1
- package/lib/esm/view/companyView/helpers/cockpitHelpers.js +1 -1
- package/lib/esm/view/companyView/selector/companyManagementViewSelector.js +1 -1
- package/lib/esm/view/companyView/selector/companyPortfolioViewSelector.js +1 -1
- package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +1 -11
- package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +12 -64
- package/lib/esm/view/spendManagement/spendManagementFilterHelpers.js +2 -4
- package/lib/esm/view/subscriptionView/subscriptionViewSelector.js +1 -1
- package/lib/esm/view/taskManager/taskListView/taskListReducer.js +1 -1
- package/lib/index.d.ts +5 -7
- package/lib/index.js +32 -41
- package/lib/view/companyHealthMetricView/companyHealthMetricViewSelector.js +1 -1
- package/lib/view/companyView/helpers/cockpitHelpers.js +1 -1
- package/lib/view/companyView/selector/companyManagementViewSelector.js +1 -1
- package/lib/view/companyView/selector/companyPortfolioViewSelector.js +1 -1
- package/lib/view/companyView/types/cockpitTypes.d.ts +1 -1
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +1 -5
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +2 -12
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +1 -4
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +12 -66
- package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +0 -2
- package/lib/view/spendManagement/billPay/billList/billListState.d.ts +1 -1
- package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistory.d.ts +1 -1
- package/lib/view/spendManagement/reimbursement/remiListView/remiListState.d.ts +1 -1
- package/lib/view/spendManagement/spendManagementFilterHelpers.d.ts +1 -1
- package/lib/view/spendManagement/spendManagementFilterHelpers.js +2 -4
- package/lib/view/subscriptionView/subscriptionViewSelector.js +1 -1
- package/lib/view/taskManager/taskListView/taskList.d.ts +1 -1
- package/lib/view/taskManager/taskListView/taskListReducer.js +1 -1
- package/package.json +1 -1
- package/lib/esm/view/expenseAutomationView/transactionFilterHelpers.js +0 -193
- package/lib/tsconfig.typecheck.tsbuildinfo +0 -1
- package/lib/view/expenseAutomationView/transactionFilterHelpers.d.ts +0 -65
- package/lib/view/expenseAutomationView/transactionFilterHelpers.js +0 -197
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { AccountsViewParentID } from '../../commonStateTypes/accountView/nestedAccountID';
|
|
2
2
|
import { ClassesViewParentID } from '../../commonStateTypes/classesView/nestedClassID';
|
|
3
|
+
import { ProjectsViewParentID } from '../../commonStateTypes/projectView/projectViewParentID';
|
|
3
4
|
import { AdditionalBalancesOptions } from '../../commonStateTypes/coaBalance/additionalBalances/getAdditionalBalances';
|
|
4
5
|
import { COABalancesFilter } from '../../commonStateTypes/coaBalance/coaBalancesFilter';
|
|
5
6
|
import { ID } from '../../commonStateTypes/common';
|
|
6
|
-
import { ProjectsViewParentID } from '../../commonStateTypes/projectView/projectViewParentID';
|
|
7
7
|
import { EntityOrder } from '../../commonStateTypes/selectorTypes/selectorTypes';
|
|
8
8
|
import { ReportIDPlusForecastID } from '../../commonStateTypes/viewAndReport/viewAndReport';
|
|
9
9
|
import { Account, AccountBase, AccountState, AccountType } from './accountState';
|
|
@@ -123,22 +123,3 @@ export declare const getAccountsOrdered: (filter: COABalancesFilter, accountStat
|
|
|
123
123
|
export declare const getAccountsByType: (accountState: AccountState, accountTypes: AccountType[]) => Partial<Record<AccountType, Account[]>>;
|
|
124
124
|
export declare const getAccountIdsForTypes: (accountState: AccountState, accountTypes: AccountType[]) => ID[];
|
|
125
125
|
export declare const getAccountIdsForLabels: (accountState: AccountState, labels: string[]) => ID[];
|
|
126
|
-
/**
|
|
127
|
-
* Returns all accounts currently in state (single pass over accountsByKey).
|
|
128
|
-
* Use for dropdowns that need account names and types; map to
|
|
129
|
-
* { accountId, accountName, accountType } as needed.
|
|
130
|
-
*/
|
|
131
|
-
export declare const getAllAccounts: (accountState: AccountState) => Account[];
|
|
132
|
-
export interface AccountFilterOption {
|
|
133
|
-
accountId: ID;
|
|
134
|
-
accountName: string;
|
|
135
|
-
accountType: AccountType;
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Partitions accounts for transaction filter dropdowns: bank/credit_card → paymentAccountNames,
|
|
139
|
-
* all other account types → categoryOptions. Use for payment_account_name and category filter options.
|
|
140
|
-
*/
|
|
141
|
-
export declare const getTransactionFilterAccountOptions: (accountState: AccountState) => {
|
|
142
|
-
categoryOptions: AccountFilterOption[];
|
|
143
|
-
paymentAccountNames: AccountFilterOption[];
|
|
144
|
-
};
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.getAccountIdsForLabels = exports.getAccountIdsForTypes = exports.getAccountsByType = exports.getAccountsOrdered = exports.getAccountBase = void 0;
|
|
7
7
|
exports.getAccount = getAccount;
|
|
8
8
|
exports.getAccountWithBalance = getAccountWithBalance;
|
|
9
9
|
const flatMap_1 = __importDefault(require("lodash/flatMap"));
|
|
@@ -192,37 +192,3 @@ const getAccountIdsForLabels = (accountState, labels) => {
|
|
|
192
192
|
return allAccountIdsForLabels;
|
|
193
193
|
};
|
|
194
194
|
exports.getAccountIdsForLabels = getAccountIdsForLabels;
|
|
195
|
-
/**
|
|
196
|
-
* Returns all accounts currently in state (single pass over accountsByKey).
|
|
197
|
-
* Use for dropdowns that need account names and types; map to
|
|
198
|
-
* { accountId, accountName, accountType } as needed.
|
|
199
|
-
*/
|
|
200
|
-
const getAllAccounts = (accountState) => Object.values(accountState.accountsByKey);
|
|
201
|
-
exports.getAllAccounts = getAllAccounts;
|
|
202
|
-
/**
|
|
203
|
-
* Partitions accounts for transaction filter dropdowns: bank/credit_card → paymentAccountNames,
|
|
204
|
-
* all other account types → categoryOptions. Use for payment_account_name and category filter options.
|
|
205
|
-
*/
|
|
206
|
-
const getTransactionFilterAccountOptions = (accountState) => {
|
|
207
|
-
const accounts = (0, exports.getAllAccounts)(accountState);
|
|
208
|
-
const paymentAccountNames = [];
|
|
209
|
-
const categoryOptions = [];
|
|
210
|
-
for (const account of accounts) {
|
|
211
|
-
if (account.accountType == null) {
|
|
212
|
-
continue;
|
|
213
|
-
}
|
|
214
|
-
const option = {
|
|
215
|
-
accountId: account.accountId,
|
|
216
|
-
accountName: account.accountName,
|
|
217
|
-
accountType: account.accountType,
|
|
218
|
-
};
|
|
219
|
-
if ((0, accountState_1.isPaymentAccountType)(account.accountType)) {
|
|
220
|
-
paymentAccountNames.push(option);
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
223
|
-
categoryOptions.push(option);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
return { categoryOptions, paymentAccountNames };
|
|
227
|
-
};
|
|
228
|
-
exports.getTransactionFilterAccountOptions = getTransactionFilterAccountOptions;
|
|
@@ -8,14 +8,9 @@ import { RecommendationBase } from '../../commonStateTypes/recommendationBase';
|
|
|
8
8
|
import { Status } from '../../commonStateTypes/status';
|
|
9
9
|
import { ReportIDPlusForecastID } from '../../commonStateTypes/viewAndReport/viewAndReport';
|
|
10
10
|
import { ZeniUrl } from '../../zeniUrl';
|
|
11
|
-
export declare const ALL_ACCOUNT_TYPES: readonly ["bank", "credit_card", "expenses", "cogs", "income", "cash_in", "cash_out", "cash_position", "other_income", "other_expense", "accounts_receivable", "other_current_assets", "fixed_assets", "other_assets", "accounts_payable", "other_current_liabilities", "long_term_liabilities", "equity", "current_liabilities", "current_assets"];
|
|
12
11
|
export declare const toAccountType: (v: string) => "cash_position" | "fixed_assets" | "bank" | "credit_card" | "expenses" | "cogs" | "income" | "cash_in" | "cash_out" | "other_income" | "other_expense" | "accounts_receivable" | "other_current_assets" | "other_assets" | "accounts_payable" | "other_current_liabilities" | "long_term_liabilities" | "equity" | "current_liabilities" | "current_assets";
|
|
13
12
|
export type AccountType = ReturnType<typeof toAccountType>;
|
|
14
13
|
export declare const toAccountTypeStrict: (v: string | null | undefined) => AccountType | undefined;
|
|
15
|
-
/** Account types used for payment-account filters (e.g. transaction filter "payment account name"). */
|
|
16
|
-
export declare const PAYMENT_ACCOUNT_TYPES: readonly ["bank", "credit_card"];
|
|
17
|
-
export type PaymentAccountType = (typeof PAYMENT_ACCOUNT_TYPES)[number];
|
|
18
|
-
export declare function isPaymentAccountType(accountType: AccountType | undefined): accountType is PaymentAccountType;
|
|
19
14
|
export type UncategorizedAccountTypes = 'expense' | 'income';
|
|
20
15
|
declare const toAccountLabel: (v: string) => "prepaid_expenses" | "fixed_assets" | "uncategorized_income" | "uncategorized_expense" | "bank_charges_and_fees" | "travel_transportation" | "accrued_expenses";
|
|
21
16
|
export type AccountLabel = ReturnType<typeof toAccountLabel>;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.toReconciliationAccountSourceStrict = exports.toReconciliationAccountSource = exports.toAccountLabelStrict = exports.
|
|
4
|
-
exports.isPaymentAccountType = isPaymentAccountType;
|
|
3
|
+
exports.toReconciliationAccountSourceStrict = exports.toReconciliationAccountSource = exports.toAccountLabelStrict = exports.toAccountTypeStrict = exports.toAccountType = void 0;
|
|
5
4
|
exports.getAccountKey = getAccountKey;
|
|
6
5
|
const nestedAccountID_1 = require("../../commonStateTypes/accountView/nestedAccountID");
|
|
7
6
|
const nestedClassID_1 = require("../../commonStateTypes/classesView/nestedClassID");
|
|
8
7
|
const stringToUnion_1 = require("../../commonStateTypes/stringToUnion");
|
|
9
|
-
|
|
8
|
+
const ALL_ACCOUNT_TYPES = [
|
|
10
9
|
'bank',
|
|
11
10
|
'credit_card',
|
|
12
11
|
'expenses',
|
|
@@ -28,16 +27,10 @@ exports.ALL_ACCOUNT_TYPES = [
|
|
|
28
27
|
'current_liabilities',
|
|
29
28
|
'current_assets',
|
|
30
29
|
];
|
|
31
|
-
const toAccountType = (v) => (0, stringToUnion_1.stringToUnion)(v,
|
|
30
|
+
const toAccountType = (v) => (0, stringToUnion_1.stringToUnion)(v, ALL_ACCOUNT_TYPES);
|
|
32
31
|
exports.toAccountType = toAccountType;
|
|
33
|
-
const toAccountTypeStrict = (v) => (0, stringToUnion_1.stringToUnionStrict)(v ?? '',
|
|
32
|
+
const toAccountTypeStrict = (v) => (0, stringToUnion_1.stringToUnionStrict)(v ?? '', ALL_ACCOUNT_TYPES);
|
|
34
33
|
exports.toAccountTypeStrict = toAccountTypeStrict;
|
|
35
|
-
/** Account types used for payment-account filters (e.g. transaction filter "payment account name"). */
|
|
36
|
-
exports.PAYMENT_ACCOUNT_TYPES = ['bank', 'credit_card'];
|
|
37
|
-
function isPaymentAccountType(accountType) {
|
|
38
|
-
return (accountType != null &&
|
|
39
|
-
exports.PAYMENT_ACCOUNT_TYPES.includes(accountType));
|
|
40
|
-
}
|
|
41
34
|
const ALL_ACCOUNT_LABELS = [
|
|
42
35
|
'uncategorized_income',
|
|
43
36
|
'uncategorized_expense',
|
|
@@ -5,16 +5,6 @@ import { ReportID } from '../../commonStateTypes/viewAndReport/viewAndReport';
|
|
|
5
5
|
import { AccountState } from '../account/accountState';
|
|
6
6
|
import { ClassReport } from './classSelectorTypes';
|
|
7
7
|
import { Class, ClassState } from './classState';
|
|
8
|
-
/**
|
|
9
|
-
* Minimal class shape consumed by filter dropdowns. Only the identity and
|
|
10
|
-
* the display label are needed — payload size and prop-type breadth are
|
|
11
|
-
* kept small so consumers can't accidentally rely on `Class` fields that
|
|
12
|
-
* the projection does not carry.
|
|
13
|
-
*/
|
|
14
|
-
export interface ClassFilterOption {
|
|
15
|
-
classId: ID;
|
|
16
|
-
className: string;
|
|
17
|
-
}
|
|
18
8
|
export declare function getClassesByIds(classState: ClassState, id: {
|
|
19
9
|
classIds: ID[];
|
|
20
10
|
reportId: ReportID;
|
|
@@ -30,28 +20,3 @@ export declare function getClassReport(classState: ClassState, accountState: Acc
|
|
|
30
20
|
reportId: ReportID;
|
|
31
21
|
classesViewParentId?: ClassesViewParentID;
|
|
32
22
|
}, filter: COABalancesFilter): ClassReport | undefined;
|
|
33
|
-
/**
|
|
34
|
-
* Returns all classes currently in state (single pass over classesByKey).
|
|
35
|
-
* Use for dropdowns that need class names; map to { classId, className } as needed.
|
|
36
|
-
*/
|
|
37
|
-
export declare function getAllClasses(classState: ClassState): Class[];
|
|
38
|
-
/**
|
|
39
|
-
* Memoised projection of `getAllClasses` to the `{classId, className}` shape
|
|
40
|
-
* expected by filter dropdowns. Consumers should prefer this over inlining a
|
|
41
|
-
* `getAllClasses(...).map(...)` inside `useSelector`: the inline map allocates
|
|
42
|
-
* a fresh array on every Redux dispatch, breaking `useSelector`'s
|
|
43
|
-
* reference-equality optimisation and triggering re-renders on every state
|
|
44
|
-
* change unrelated to class data.
|
|
45
|
-
*
|
|
46
|
-
* Two cleanups happen here, intentionally inside the selector so every
|
|
47
|
-
* consumer benefits uniformly:
|
|
48
|
-
* 1. **Drop entries with a blank `className`.** Soft-deleted classes can
|
|
49
|
-
* retain their classId in state while the human name is blanked, which
|
|
50
|
-
* would otherwise render as an empty row in the filter dropdown.
|
|
51
|
-
* 2. **Dedupe by `classId`.** `classesByKey` is keyed by
|
|
52
|
-
* `${classId}-${reportId}` (see `getClassKey`), so a class loaded under
|
|
53
|
-
* multiple report contexts appears as multiple entries from
|
|
54
|
-
* `Object.values(classesByKey)`. The first non-blank entry per
|
|
55
|
-
* `classId` wins.
|
|
56
|
-
*/
|
|
57
|
-
export declare const getClassFilterOptions: (classState: ClassState) => ClassFilterOption[];
|
|
@@ -3,12 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getClassFilterOptions = void 0;
|
|
7
6
|
exports.getClassesByIds = getClassesByIds;
|
|
8
7
|
exports.getClassById = getClassById;
|
|
9
8
|
exports.getClassReport = getClassReport;
|
|
10
|
-
exports.getAllClasses = getAllClasses;
|
|
11
|
-
const toolkit_1 = require("@reduxjs/toolkit");
|
|
12
9
|
const get_1 = __importDefault(require("lodash/get"));
|
|
13
10
|
const coaBalance_1 = require("../../commonStateTypes/coaBalance/coaBalance");
|
|
14
11
|
const accountSelector_1 = require("../account/accountSelector");
|
|
@@ -61,44 +58,3 @@ function getClassReport(classState, accountState, id, filter) {
|
|
|
61
58
|
accounts: accountReport,
|
|
62
59
|
};
|
|
63
60
|
}
|
|
64
|
-
/**
|
|
65
|
-
* Returns all classes currently in state (single pass over classesByKey).
|
|
66
|
-
* Use for dropdowns that need class names; map to { classId, className } as needed.
|
|
67
|
-
*/
|
|
68
|
-
function getAllClasses(classState) {
|
|
69
|
-
return Object.values(classState.classesByKey);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Memoised projection of `getAllClasses` to the `{classId, className}` shape
|
|
73
|
-
* expected by filter dropdowns. Consumers should prefer this over inlining a
|
|
74
|
-
* `getAllClasses(...).map(...)` inside `useSelector`: the inline map allocates
|
|
75
|
-
* a fresh array on every Redux dispatch, breaking `useSelector`'s
|
|
76
|
-
* reference-equality optimisation and triggering re-renders on every state
|
|
77
|
-
* change unrelated to class data.
|
|
78
|
-
*
|
|
79
|
-
* Two cleanups happen here, intentionally inside the selector so every
|
|
80
|
-
* consumer benefits uniformly:
|
|
81
|
-
* 1. **Drop entries with a blank `className`.** Soft-deleted classes can
|
|
82
|
-
* retain their classId in state while the human name is blanked, which
|
|
83
|
-
* would otherwise render as an empty row in the filter dropdown.
|
|
84
|
-
* 2. **Dedupe by `classId`.** `classesByKey` is keyed by
|
|
85
|
-
* `${classId}-${reportId}` (see `getClassKey`), so a class loaded under
|
|
86
|
-
* multiple report contexts appears as multiple entries from
|
|
87
|
-
* `Object.values(classesByKey)`. The first non-blank entry per
|
|
88
|
-
* `classId` wins.
|
|
89
|
-
*/
|
|
90
|
-
exports.getClassFilterOptions = (0, toolkit_1.createSelector)([getAllClasses], (classes) => {
|
|
91
|
-
const seenClassIds = new Set();
|
|
92
|
-
const options = [];
|
|
93
|
-
for (const c of classes) {
|
|
94
|
-
if (c.classId == null || seenClassIds.has(c.classId)) {
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
if (c.className == null || c.className.trim() === '') {
|
|
98
|
-
continue;
|
|
99
|
-
}
|
|
100
|
-
seenClassIds.add(c.classId);
|
|
101
|
-
options.push({ classId: c.classId, className: c.className });
|
|
102
|
-
}
|
|
103
|
-
return options;
|
|
104
|
-
});
|
|
@@ -12,6 +12,7 @@ interface MonthCloseChecksPayload {
|
|
|
12
12
|
month_close_check_title: string;
|
|
13
13
|
month_close_check_type: string;
|
|
14
14
|
progress_percentage: number;
|
|
15
|
+
progress_percentage_ai: number;
|
|
15
16
|
sequence: number;
|
|
16
17
|
metrics?: MonthCloseCheckMetricsPayload[];
|
|
17
18
|
}
|
|
@@ -27,6 +28,7 @@ interface MonthEndInsightsPayload {
|
|
|
27
28
|
interface MonthEndAuditSummaryPayload {
|
|
28
29
|
audit_report_last_generated_date: string;
|
|
29
30
|
audit_score_percentage: number;
|
|
31
|
+
audit_score_percentage_ai: number;
|
|
30
32
|
}
|
|
31
33
|
export interface MonthEndCloseChecksPayload {
|
|
32
34
|
audit_summary: MonthEndAuditSummaryPayload;
|
|
@@ -21,6 +21,7 @@ const toMonthEndCloseCheck = (monthCloseCheck) => {
|
|
|
21
21
|
title: monthCloseCheck.month_close_check_title,
|
|
22
22
|
frequency: (0, monthEndCloseChecksState_1.toMonthEndCloseCheckFrequency)(monthCloseCheck.action_frequency),
|
|
23
23
|
progress: monthCloseCheck.progress_percentage,
|
|
24
|
+
progressAI: monthCloseCheck.progress_percentage_ai,
|
|
24
25
|
sequence: monthCloseCheck.sequence,
|
|
25
26
|
isDisabled: (0, expenseAutomationViewState_1.toExpenseAutomationViewType)(monthCloseCheck.month_close_check_type) ===
|
|
26
27
|
'month_end_insights',
|
|
@@ -61,6 +62,7 @@ const toMonthEndCloseChecksInfo = (payload, period) => ({
|
|
|
61
62
|
monthEndCloseCheckList: payload.month_close_checks.map((monthCloseCheck) => toMonthEndCloseCheck(monthCloseCheck)),
|
|
62
63
|
auditSummary: {
|
|
63
64
|
auditScorePercentage: payload.audit_summary.audit_score_percentage,
|
|
65
|
+
auditScorePercentageAI: payload.audit_summary.audit_score_percentage_ai,
|
|
64
66
|
auditReportLastGeneratedDate: payload.audit_summary.audit_report_last_generated_date != null
|
|
65
67
|
? (0, zeniDayJS_1.date)(payload.audit_summary.audit_report_last_generated_date)
|
|
66
68
|
: null,
|
|
@@ -18,6 +18,7 @@ export interface MonthEndCloseCheck {
|
|
|
18
18
|
isDisabled: boolean;
|
|
19
19
|
metrics: MonthCloseCheckMetrics[];
|
|
20
20
|
progress: number;
|
|
21
|
+
progressAI: number;
|
|
21
22
|
sequence: number;
|
|
22
23
|
title: string;
|
|
23
24
|
}
|
|
@@ -32,6 +33,7 @@ export interface MonthEndInsights {
|
|
|
32
33
|
export interface MonthEndAuditSummary {
|
|
33
34
|
auditReportLastGeneratedDate: ZeniDate | null;
|
|
34
35
|
auditScorePercentage: number;
|
|
36
|
+
auditScorePercentageAI: number;
|
|
35
37
|
}
|
|
36
38
|
export interface MonthEndCloseChecksInfo {
|
|
37
39
|
auditSummary: MonthEndAuditSummary;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import flatMap from 'lodash/flatMap';
|
|
2
2
|
import { getCOABalances } from '../../commonStateTypes/coaBalance/coaBalance';
|
|
3
3
|
import { sortComparator } from '../../commonStateTypes/coaBalance/sortBalancesByFreeRangeTotal';
|
|
4
|
-
import { getAccountKey,
|
|
4
|
+
import { getAccountKey, } from './accountState';
|
|
5
5
|
function getCommonAccountFields(accountState, id) {
|
|
6
6
|
const key = getAccountKey(id.reportId, id.accountId, id.classesViewParentId, id.accountsViewParentId, id.projectsViewParentId);
|
|
7
7
|
const account = accountState.accountsByKey[key];
|
|
@@ -179,35 +179,3 @@ export const getAccountIdsForLabels = (accountState, labels) => {
|
|
|
179
179
|
});
|
|
180
180
|
return allAccountIdsForLabels;
|
|
181
181
|
};
|
|
182
|
-
/**
|
|
183
|
-
* Returns all accounts currently in state (single pass over accountsByKey).
|
|
184
|
-
* Use for dropdowns that need account names and types; map to
|
|
185
|
-
* { accountId, accountName, accountType } as needed.
|
|
186
|
-
*/
|
|
187
|
-
export const getAllAccounts = (accountState) => Object.values(accountState.accountsByKey);
|
|
188
|
-
/**
|
|
189
|
-
* Partitions accounts for transaction filter dropdowns: bank/credit_card → paymentAccountNames,
|
|
190
|
-
* all other account types → categoryOptions. Use for payment_account_name and category filter options.
|
|
191
|
-
*/
|
|
192
|
-
export const getTransactionFilterAccountOptions = (accountState) => {
|
|
193
|
-
const accounts = getAllAccounts(accountState);
|
|
194
|
-
const paymentAccountNames = [];
|
|
195
|
-
const categoryOptions = [];
|
|
196
|
-
for (const account of accounts) {
|
|
197
|
-
if (account.accountType == null) {
|
|
198
|
-
continue;
|
|
199
|
-
}
|
|
200
|
-
const option = {
|
|
201
|
-
accountId: account.accountId,
|
|
202
|
-
accountName: account.accountName,
|
|
203
|
-
accountType: account.accountType,
|
|
204
|
-
};
|
|
205
|
-
if (isPaymentAccountType(account.accountType)) {
|
|
206
|
-
paymentAccountNames.push(option);
|
|
207
|
-
}
|
|
208
|
-
else {
|
|
209
|
-
categoryOptions.push(option);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
return { categoryOptions, paymentAccountNames };
|
|
213
|
-
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getNestedAccountIDStr, } from '../../commonStateTypes/accountView/nestedAccountID';
|
|
2
2
|
import { getNestedClassIDStr, } from '../../commonStateTypes/classesView/nestedClassID';
|
|
3
3
|
import { stringToUnion, stringToUnionStrict, } from '../../commonStateTypes/stringToUnion';
|
|
4
|
-
|
|
4
|
+
const ALL_ACCOUNT_TYPES = [
|
|
5
5
|
'bank',
|
|
6
6
|
'credit_card',
|
|
7
7
|
'expenses',
|
|
@@ -25,12 +25,6 @@ export const ALL_ACCOUNT_TYPES = [
|
|
|
25
25
|
];
|
|
26
26
|
export const toAccountType = (v) => stringToUnion(v, ALL_ACCOUNT_TYPES);
|
|
27
27
|
export const toAccountTypeStrict = (v) => stringToUnionStrict(v ?? '', ALL_ACCOUNT_TYPES);
|
|
28
|
-
/** Account types used for payment-account filters (e.g. transaction filter "payment account name"). */
|
|
29
|
-
export const PAYMENT_ACCOUNT_TYPES = ['bank', 'credit_card'];
|
|
30
|
-
export function isPaymentAccountType(accountType) {
|
|
31
|
-
return (accountType != null &&
|
|
32
|
-
PAYMENT_ACCOUNT_TYPES.includes(accountType));
|
|
33
|
-
}
|
|
34
28
|
const ALL_ACCOUNT_LABELS = [
|
|
35
29
|
'uncategorized_income',
|
|
36
30
|
'uncategorized_expense',
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { createSelector } from '@reduxjs/toolkit';
|
|
2
1
|
import recordGet from 'lodash/get';
|
|
3
2
|
import { getCOABalances } from '../../commonStateTypes/coaBalance/coaBalance';
|
|
4
3
|
import { getAccount } from '../account/accountSelector';
|
|
@@ -51,44 +50,3 @@ export function getClassReport(classState, accountState, id, filter) {
|
|
|
51
50
|
accounts: accountReport,
|
|
52
51
|
};
|
|
53
52
|
}
|
|
54
|
-
/**
|
|
55
|
-
* Returns all classes currently in state (single pass over classesByKey).
|
|
56
|
-
* Use for dropdowns that need class names; map to { classId, className } as needed.
|
|
57
|
-
*/
|
|
58
|
-
export function getAllClasses(classState) {
|
|
59
|
-
return Object.values(classState.classesByKey);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Memoised projection of `getAllClasses` to the `{classId, className}` shape
|
|
63
|
-
* expected by filter dropdowns. Consumers should prefer this over inlining a
|
|
64
|
-
* `getAllClasses(...).map(...)` inside `useSelector`: the inline map allocates
|
|
65
|
-
* a fresh array on every Redux dispatch, breaking `useSelector`'s
|
|
66
|
-
* reference-equality optimisation and triggering re-renders on every state
|
|
67
|
-
* change unrelated to class data.
|
|
68
|
-
*
|
|
69
|
-
* Two cleanups happen here, intentionally inside the selector so every
|
|
70
|
-
* consumer benefits uniformly:
|
|
71
|
-
* 1. **Drop entries with a blank `className`.** Soft-deleted classes can
|
|
72
|
-
* retain their classId in state while the human name is blanked, which
|
|
73
|
-
* would otherwise render as an empty row in the filter dropdown.
|
|
74
|
-
* 2. **Dedupe by `classId`.** `classesByKey` is keyed by
|
|
75
|
-
* `${classId}-${reportId}` (see `getClassKey`), so a class loaded under
|
|
76
|
-
* multiple report contexts appears as multiple entries from
|
|
77
|
-
* `Object.values(classesByKey)`. The first non-blank entry per
|
|
78
|
-
* `classId` wins.
|
|
79
|
-
*/
|
|
80
|
-
export const getClassFilterOptions = createSelector([getAllClasses], (classes) => {
|
|
81
|
-
const seenClassIds = new Set();
|
|
82
|
-
const options = [];
|
|
83
|
-
for (const c of classes) {
|
|
84
|
-
if (c.classId == null || seenClassIds.has(c.classId)) {
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
if (c.className == null || c.className.trim() === '') {
|
|
88
|
-
continue;
|
|
89
|
-
}
|
|
90
|
-
seenClassIds.add(c.classId);
|
|
91
|
-
options.push({ classId: c.classId, className: c.className });
|
|
92
|
-
}
|
|
93
|
-
return options;
|
|
94
|
-
});
|
|
@@ -18,6 +18,7 @@ const toMonthEndCloseCheck = (monthCloseCheck) => {
|
|
|
18
18
|
title: monthCloseCheck.month_close_check_title,
|
|
19
19
|
frequency: toMonthEndCloseCheckFrequency(monthCloseCheck.action_frequency),
|
|
20
20
|
progress: monthCloseCheck.progress_percentage,
|
|
21
|
+
progressAI: monthCloseCheck.progress_percentage_ai,
|
|
21
22
|
sequence: monthCloseCheck.sequence,
|
|
22
23
|
isDisabled: toExpenseAutomationViewType(monthCloseCheck.month_close_check_type) ===
|
|
23
24
|
'month_end_insights',
|
|
@@ -58,6 +59,7 @@ export const toMonthEndCloseChecksInfo = (payload, period) => ({
|
|
|
58
59
|
monthEndCloseCheckList: payload.month_close_checks.map((monthCloseCheck) => toMonthEndCloseCheck(monthCloseCheck)),
|
|
59
60
|
auditSummary: {
|
|
60
61
|
auditScorePercentage: payload.audit_summary.audit_score_percentage,
|
|
62
|
+
auditScorePercentageAI: payload.audit_summary.audit_score_percentage_ai,
|
|
61
63
|
auditReportLastGeneratedDate: payload.audit_summary.audit_report_last_generated_date != null
|
|
62
64
|
? date(payload.audit_summary.audit_report_last_generated_date)
|
|
63
65
|
: null,
|
package/lib/esm/index.js
CHANGED
|
@@ -23,7 +23,6 @@ import { mapTimePeriodtoTimeframeTick, toTimePeriod, toTimeframeTick, } from './
|
|
|
23
23
|
import { isAgingReport, isCashFlowOrBalanceSheetReport, isDashboardClassesViewReport, isDashboardReport, isFluxAnalysisOpExReport, isOpExByVendorReport, isPAndLClassesViewReport, isPAndLProjectViewReport, isPAndLReport, } from './commonStateTypes/viewAndReport/reportIDHelper';
|
|
24
24
|
import { toReportFormatStrict, toReportID, } from './commonStateTypes/viewAndReport/viewAndReport';
|
|
25
25
|
import { PAYMENT_BUSINESS_DAYS, filterDays, getNextNthWorkingDay, getPreviousNthWorkingDay, getYearsList, holidaysFormatted, isHoliday, isHolidayToday, } from './commonStateTypes/workingDayHelper';
|
|
26
|
-
import { getAllAccounts, getTransactionFilterAccountOptions, } from './entity/account/accountSelector';
|
|
27
26
|
import { toAccountType, toReconciliationAccountSource, } from './entity/account/accountState';
|
|
28
27
|
import { getAccountGroupKey, toAccountGroupType, } from './entity/accountGroup/accountGroupState';
|
|
29
28
|
/**
|
|
@@ -171,7 +170,7 @@ import { clearExpenseAutomationFluxAnalysisView, fetchFluxAnalysisView, reviewFl
|
|
|
171
170
|
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';
|
|
172
171
|
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';
|
|
173
172
|
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';
|
|
174
|
-
import { backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization, syncTransactionCategorizationFromDetailSave, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationCompletedSubTab, updateSelectedCheckboxTransactionIds, updateSelectedCustomerForTransaction, updateSelectedTransactionId, updateSelectedVendorForTransaction, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, updateTransactionCategorizationUIState, updateTransactionCategorizationUploadReceiptState,
|
|
173
|
+
import { backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization, syncTransactionCategorizationFromDetailSave, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationCompletedSubTab, updateSelectedCheckboxTransactionIds, updateSelectedCustomerForTransaction, updateSelectedTransactionId, updateSelectedVendorForTransaction, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, updateTransactionCategorizationUIState, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, } from './view/expenseAutomationView/reducers/transactionsViewReducer';
|
|
175
174
|
import { getExpenseAutomationFluxAnalysisView } from './view/expenseAutomationView/selectors/fluxAnalysisViewSelector';
|
|
176
175
|
import { getExpenseAutomationReconciliationView, isAccountReconReport, } from './view/expenseAutomationView/selectors/reconciliationViewSelector';
|
|
177
176
|
import { getExpenseAutomationTransactionView } from './view/expenseAutomationView/selectors/transactionCategorizationSelector';
|
|
@@ -337,7 +336,6 @@ import { getRemiBusinessVerificationDetails, getRemiSetupViewDetails, } from './
|
|
|
337
336
|
import { approveOrRejectRemisBulkAction, autoReviewPendingApprovalRemis, cancelOrDeleteRemisBulkAction, clearAllRemisFromBulkActionList, clearRemiBulkActionView, incrementRemiBulkActionProcessedCount, removeRemiFromBulkActionList, reviewDraftRemisBulkAction, submitDraftRemisBulkAction, updateRemisBulkActionList, } from './view/spendManagement/reimbursement/remisBulkActionView/remisBulkActionViewReducer';
|
|
338
337
|
import { getRemisBulkOperationProgress, getRemisBulkReviewView, } from './view/spendManagement/reimbursement/remisBulkActionView/remisBulkActionViewSelector';
|
|
339
338
|
import { hideCreatedByFilter, } from './view/spendManagement/spendManagementFilterHelpers';
|
|
340
|
-
import { TRANSACTION_FILTER_CATEGORIES, applyTransactionFilters, } from './view/expenseAutomationView/transactionFilterHelpers';
|
|
341
339
|
import { acceptTreasuryTerms, clearTreasurySetupView, fetchPortfolioAllocation, fetchTreasuryFunds, fetchTreasurySetupView, updateFundAllocationLocalData, updatePortfolioAllocation, updateTreasuryVideoViewed, } from './view/spendManagement/treasury/treasurySetUp/treasurySetupViewReducer';
|
|
342
340
|
import { getTreasuryBusinessVerificationDetails, getTreasurySetupViewDetails, } from './view/spendManagement/treasury/treasurySetUp/treasurySetupViewSelector';
|
|
343
341
|
import { getTreasuryFundsMaximumYield, } from './view/spendManagement/treasury/treasurySetUp/treasurySetupViewState';
|
|
@@ -450,15 +448,15 @@ export {
|
|
|
450
448
|
BATCH_FILE_STATUSES, isUnmatchedTabFileStatus, DEFAULT_COMPLETED_SUB_TAB, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toCompletedSubTab, toMatchSource, toMissingReceiptsTab, toExpenseAutomationJEScheduleMainTab, toExpenseAutomationJEScheduleSortKey, getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationCompletedSubTab, fetchExpenseAutomationMissingReceipts,
|
|
451
449
|
// Bulk Upload Actions
|
|
452
450
|
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, getExpenseAutomationFluxAnalysisView, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, updateFluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, excludeAccountFromReconciliation, includeAccountInReconciliation, saveExpenseAutomationReconciliationDetail, updateExpenseAutomationReconcileTabListScrollState, updateExpenseAutomationReconReviewTabListSortState, updateExpenseAutomationReconcileTabListSortState, updateExpenseAutomationReconcileTabLocalData, updateExpenseAutomationAccountReconciliationSelectedTab, updateExpenseAutomationAccountReconciliationSelectedAccountId, getExpenseAutomationReconciliationView, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, getAccountReconByAccountIdAndSelectedPeriod, toReconciliationTabsType, isAccountReconReport, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, toReconciliationAccountSource, deleteAccountStatement, uploadAccountStatement, updateNodeCollapseState, updateStatementUploadChosen, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, };
|
|
453
|
-
export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState,
|
|
451
|
+
export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateSelectedCheckboxTransactionIds, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, toTransactionsSortKey, };
|
|
454
452
|
export { TOP_EX_TIME_PERIODS };
|
|
455
453
|
export { toTimeframeTick, mapTimePeriodtoTimeframeTick, toTimePeriod, toAbsoluteDay, toMonthYearPeriodId, convertToPeriod, };
|
|
456
454
|
export { toVendorSpendTrendFilterTabsTypeStrict, } from './entity/vendorExpense/vendorExpenseSelector';
|
|
457
455
|
export { getNumberOfPeriods };
|
|
458
456
|
export { SCHEDULE_DAYS_OF_MONTH, toScheduleDaysOfMonth, toMonth, toMonthStrict, toQuarter, toQuarterStrict, };
|
|
459
457
|
export { getTenantBaseById, getCurrentTenant, getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, getTenantsByCheckInDateSelector, getTenantsBaseByCheckInDateSelector, getTenantsCoreDetailsByCheckInDateSelector, toTenantCoreDetailsView, getTenantBaseViewForTenantView, getTenantBaseViewForTenantId, isZeniDomainTenant, isTenantUsingZeniCOA, fetchActiveTenant, fetchAllTenants, updateCurrentTenant, clearAll, doMagicLinkSignIn, verifyDeviceWithTwoFA, resendVerifyDeviceOTP, sendEmailMagicLinkToUser, doSignIn, updateSignInState, doSignOut, sendSessionHeartbeat, resetSignInState, fetchExcludedResourcesForTenant, fetchExternalConnectionsForTenant, saveExternalConnectionForTenant, deleteConnection, saveAPIKeyConnection, saveConnectorCredentials, saveOAuthConnection, toExternalIntegrationType, toExternalSupportedTool, fetchSubscriptionSummaryForTenant, isTenantBankingOnly, isTenantCardsOnly, isTenantBookkeepingEnabled, isOtherProductsEnabledForTenant, };
|
|
460
|
-
export { toAccountType, toAccountGroupType, getAccountGroupKey,
|
|
461
|
-
export {
|
|
458
|
+
export { toAccountType, toAccountGroupType, getAccountGroupKey, };
|
|
459
|
+
export { getClassById } from './entity/class/classSelector';
|
|
462
460
|
export { getForecast };
|
|
463
461
|
export { getUserName, getUserByUserId, getUsersByUserIds, getAllZeniUsersFromState, } from './entity/user/userSelector';
|
|
464
462
|
export { toUserRoleType, toUserRoleTypeStrict, isFinOpsUserRoleType, hasAdminLevelAccess, hasFullOrAdminLevelAccess, hasReimbursementUserAccess, hasEmployeeLevelAccess, hasBookKeepingAdminLevelAccess, hasBookKeepingUserLevelAccess, isNonZeniRole, hasInvestorBankerLevelAccess, getUserRoleMap, hasOnlyBillPayAccess, hasZeniRoleOrCompanyOfficerAccess, hasSuperAdminLevelAccess, hasBillPayFallbackAdminLevelAccess, hasRemiFallbackAdminLevelAccess, hasOnlyReimbursementAccess, hasOnlyChargeCardAccess, hasOnlyZeniAccountsAccess, isZeniSignedInUser, getUserRoleByUserId, getUserRoleByUserIds, hasChargeCardAccess, hasZeniAccountsAccess, hasTreasuryAccess, hasTreasuryAdminLevelAccess, hasBillPayAccess, hasReimbursementAccess, hasReimbursementAdminLevelAccess, hasBillPayAdminLevelAccess, hasChargeCardAdminLevelAccess, hasSpendManagementAccess, hasSpendManagementAdminLevelAccess, hasZeniAccountsAdminLevelAccess, hasAnyCompanyRole, hasAnyFinOpRole, hasBillPayAccessible, hasReimbursementAccessible, hasZeniAccountsAccessible, hasChargeCardAccessible, hasTreasuryAccessible, hasAICFOAccess, };
|
|
@@ -558,10 +556,6 @@ export { toRemiSubTabType, toRemiSubTabTypeStrict, toRemiTabType, toRemiTabTypeS
|
|
|
558
556
|
export { getClassList, fetchClassList, getProjectList, fetchProjectList, };
|
|
559
557
|
export { fetchBillList, fetchBillListPerTab, updateTab, updateSubTab, updateSelectedBillId, updateBillDetailSaveBillCode, fetchVendorByNameAndParseInvoice, saveBillUpdatesToLocalStore, discardBillUpdatesInLocalStore, saveBillDetail, approveOrRejectBill, updateApprovalStatusOnSuccess, deleteBill, cancelAndDeleteBill, retryOrRefundBill, getBillList, getBillDownloadList, getBillDetailView, checkApproveRejectBtnShowForBill, getBillTransactionDetailKey, fetchBillDetail, fetchEditBillDetailPage, fetchAndUpdateVendorRecommendations, fetchDuplicateBill, clearBillPayReview, getEditBillDetail, getReviewPageBillDetail, fetchBillAndInitializeLocalStore, updateShowAutofill, saveVendorSuccessOrFailure, updateBillListUIState, BILL_PAY_FILTER_CATEGORIES, updateVendorDetailLocalData, resetVendorDetailLocalData, resetVendorSaveStatus, updateContactsInVendorDetailLocalData, updateVendorTabDetailUIState, updateContactsInVendorTabDetailLocalData, updateBillUploadFetchState, updateBillListSearchResult, fetchUserDetails, verifyUser, updateVendorContact, toPaymentToOption, convertAmountToHomeCurrency, fetchVendorAndUpdateBillLocalData, markBillForRetry, updateWithdrawFromAccountId, removeBillFileFromLocalStore, replaceBillFileInLocalStore, updateShouldReplaceBillData, };
|
|
560
558
|
export { hideCreatedByFilter, };
|
|
561
|
-
// Transaction Categorization filter API — lives under Expense Automation,
|
|
562
|
-
// not Spend Management. Kept in a separate re-export block to make the
|
|
563
|
-
// separation visible at the barrel level.
|
|
564
|
-
export { TRANSACTION_FILTER_CATEGORIES, applyTransactionFilters, };
|
|
565
559
|
export { fetchBillPaySetupView, fetchZeniAccountSetupView, enableSetup, getPaymentAccounts, getPlaidLinkToken, updateSelectedCompanyOfficer, updateSetupViewLocalStoreData, updateBusinessVerificationDetails, updatePaymentAccount, updatePaymentAccountLoginStatus, updatePaymentAccountStatus, establishPlaidConnection, updateMappedCashAccount, updatePrimaryFundingAccount, acceptBillPayTerms, acceptZeniAccountTerms, acceptBillPayUpdatedTerms, saveSetupViewDataInLocalStore, saveCompnayOfficerPhoneInLocalStore, saveCompnayOfficerAdditionalDocumentsInLocalStore, saveTreasuryAdditionalDocumentsInLocalStore, saveIndustryAndIncDateInLocalStore, clearSetupViewDataInLocalStore, clearBillPaySetupView, clearZeniAccountSetupView, sendOtp, resendOtp, verifyOtp, getBillPaySetupViewDetails, getPlaidAccountDetails, getZeniAccountSetupViewDetails, getBusinessVerificationDetails, getBillPayBusinessVerificationDetails, getZeniAccountBusinessVerificationDetails, getTreasuryBusinessVerificationDetails, getCommonSetupViewDetails, getTwoFactorAuthenticationView, getTwoFactorAuthenticationViewForCardUserOnboarding, getTwoFactorAuthenticationViewForChargeCardHolder, };
|
|
566
560
|
export { getApprovalRuleViewDetails, getBankConnectionsSetupViewDetails, getIntegrationsView, };
|
|
567
561
|
export { fetchUserFinancialAccount };
|
|
@@ -291,7 +291,7 @@ const applyAdvancedFiltersOnCompaniesList = (allCompanies, filters, filteredComp
|
|
|
291
291
|
const key = currentFilter.field;
|
|
292
292
|
const categoryValue = getCategoryValueForCompany(key, company);
|
|
293
293
|
if (categoryValue == null) {
|
|
294
|
-
if (currentFilter.matchingOperator === '
|
|
294
|
+
if (currentFilter.matchingOperator === 'not-equal') {
|
|
295
295
|
return true;
|
|
296
296
|
}
|
|
297
297
|
return false;
|
|
@@ -48,7 +48,7 @@ export const filterCompanyOnCategoriesWithSingleValue = (categoryValue, currentF
|
|
|
48
48
|
return filterCompanyOnRangeCategoryType(categoryValue, currentFilter);
|
|
49
49
|
}
|
|
50
50
|
// if filter category is not annualRecurringRevenue OR monthlyRecurringRevenue
|
|
51
|
-
if (currentFilter.matchingOperator === '
|
|
51
|
+
if (currentFilter.matchingOperator === 'not-equal') {
|
|
52
52
|
return currentFilter.values.indexOf(categoryValue) === -1;
|
|
53
53
|
}
|
|
54
54
|
return currentFilter.values.indexOf(categoryValue) > -1;
|
|
@@ -150,7 +150,7 @@ const applyAdvancedFiltersOnCompaniesList = (allCompanies, filters, filteredComp
|
|
|
150
150
|
const key = currentFilter.field;
|
|
151
151
|
const categoryValue = getCategoryValueForCompany(key, company);
|
|
152
152
|
if (categoryValue == null) {
|
|
153
|
-
if (currentFilter.matchingOperator === '
|
|
153
|
+
if (currentFilter.matchingOperator === 'not-equal') {
|
|
154
154
|
return true;
|
|
155
155
|
}
|
|
156
156
|
return false;
|
|
@@ -116,7 +116,7 @@ const applyAdvancedFiltersOnCompaniesList = (allCompanies, filters, filteredComp
|
|
|
116
116
|
const key = currentFilter.field;
|
|
117
117
|
const categoryValue = getCategoryValueForCompany(key, company);
|
|
118
118
|
if (categoryValue == null) {
|
|
119
|
-
if (currentFilter.matchingOperator === '
|
|
119
|
+
if (currentFilter.matchingOperator === 'not-equal') {
|
|
120
120
|
return true;
|
|
121
121
|
}
|
|
122
122
|
return false;
|
|
@@ -28,10 +28,6 @@ export const initialTransactionTabViewState = {
|
|
|
28
28
|
totalCount: {},
|
|
29
29
|
limit: 10,
|
|
30
30
|
},
|
|
31
|
-
filters: {
|
|
32
|
-
categoryCombinationOperator: 'AND',
|
|
33
|
-
categories: [],
|
|
34
|
-
},
|
|
35
31
|
fetchState: 'Not-Started',
|
|
36
32
|
error: undefined,
|
|
37
33
|
hasValidState() {
|
|
@@ -303,12 +299,6 @@ const expenseAutomationTransactionsView = createSlice({
|
|
|
303
299
|
uiState.totalCount;
|
|
304
300
|
}
|
|
305
301
|
},
|
|
306
|
-
updateTransactionFilters(draft, action) {
|
|
307
|
-
const { selectedTab, filters } = action.payload;
|
|
308
|
-
if (filters != null) {
|
|
309
|
-
draft.transactionCategorizationView[selectedTab].filters = filters;
|
|
310
|
-
}
|
|
311
|
-
},
|
|
312
302
|
saveTransactionCategorization: {
|
|
313
303
|
prepare(selectedTab, transactionIds, cotTrackingByTransactionId, isUncategorizedExpenseCategoryEnabled) {
|
|
314
304
|
return {
|
|
@@ -939,5 +929,5 @@ const expenseAutomationTransactionsView = createSlice({
|
|
|
939
929
|
},
|
|
940
930
|
},
|
|
941
931
|
});
|
|
942
|
-
export const { fetchTransactionCategorization, updateTransactionCategorizationUIState,
|
|
932
|
+
export const { fetchTransactionCategorization, updateTransactionCategorizationUIState, initializeTransactionCategorizationViewLocalData, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationCompletedSubTab, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateStatusForTransactionNotMiscategorizedUpdateForCategorization, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, setAllItemsToCategoryClassInLocalDataForCategorization, updateTotalCountForTransactionCategorization, updateParentTotalCountForTab, fetchTransactionCategorizationSuccess, resetOtherTabsFetchState, fetchTransactionCategorizationView, updateSelectedCheckboxTransactionIds, clearExpenseAutomationTransactionsViewPerTabView, clearExpenseAutomationTransactionsView, setEntityRecommendationForLineIdsForCategorization, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, } = expenseAutomationTransactionsView.actions;
|
|
943
933
|
export default expenseAutomationTransactionsView.reducer;
|