@zeniai/web-components 4.3.76 → 4.3.77
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/dist/{SessionTimeoutPopup-z4PrvxTb.js → SessionTimeoutPopup-BejedTDm.js} +97555 -94160
- package/dist/{SessionTimeoutPopup-e2q-I5j5.cjs → SessionTimeoutPopup-vzJ2ivQV.cjs} +18205 -17372
- package/dist/appLocale.d.ts +119 -0
- package/dist/cockpit.cjs.js +2 -2
- package/dist/cockpit.esm.js +415 -414
- package/dist/components/expenseAutomation/ExpenseAutomationPage.d.ts +14 -4
- package/dist/components/expenseAutomation/components/navbarHeaderData.d.ts +6 -1
- package/dist/components/expenseAutomation/sections/actualMatching/ActualMatchingKpiStrip.d.ts +9 -0
- package/dist/components/expenseAutomation/sections/actualMatching/ActualMatchingList.d.ts +13 -0
- package/dist/components/expenseAutomation/sections/actualMatching/ActualMatchingListRow.d.ts +11 -0
- package/dist/components/expenseAutomation/sections/actualMatching/ActualMatchingMatchDetailPage.d.ts +21 -0
- package/dist/components/expenseAutomation/sections/actualMatching/ActualMatchingMatchNewButton.d.ts +5 -0
- package/dist/components/expenseAutomation/sections/actualMatching/ActualMatchingPage.d.ts +22 -0
- package/dist/components/expenseAutomation/sections/actualMatching/ActualMatchingPageSkeleton.d.ts +3 -0
- package/dist/components/expenseAutomation/sections/actualMatching/MatchNewModal.d.ts +12 -0
- package/dist/components/expenseAutomation/sections/actualMatching/MatchNewPreview.d.ts +8 -0
- package/dist/components/expenseAutomation/sections/actualMatching/ReversesGroupedPill.d.ts +5 -0
- package/dist/components/expenseAutomation/sections/actualMatching/actualMatchingHelpers.d.ts +76 -0
- package/dist/components/expenseAutomation/sections/actualMatching/actualMatchingHelpers.test.d.ts +1 -0
- package/dist/components/expenseAutomation/sections/actualMatching/actualMatchingListConfig.d.ts +12 -0
- package/dist/components/expenseAutomation/sections/actualMatching/actualMatchingMatchDetailHelpers.d.ts +18 -0
- package/dist/components/expenseAutomation/sections/actualMatching/actualMatchingMatchDetailHelpers.test.d.ts +1 -0
- package/dist/components/expenseAutomation/sections/actualMatching/actualMatchingTypes.d.ts +134 -0
- package/dist/components/expenseAutomation/sections/actualMatching/matchNewPreviewHelpers.d.ts +12 -0
- package/dist/components/expenseAutomation/sections/actualMatching/matchNewPreviewHelpers.test.d.ts +1 -0
- package/dist/components/expenseAutomation/sections/actualMatching/stories/ActualMatchingPageQuickViewStoryParts.d.ts +10 -0
- package/dist/components/expenseAutomation/sections/jeSchedules/JESchedulePage.d.ts +10 -2
- package/dist/components/expenseAutomation/sections/jeSchedules/common/JEGroupSectionHeader.d.ts +2 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.esm.js +392 -391
- package/dist/strings/strings.d.ts +119 -0
- package/package.json +3 -3
|
@@ -5,6 +5,7 @@ import { DownloadJEScheduleParams } from '../jeSchedules/downloadJESchedules/typ
|
|
|
5
5
|
import { ReportTreeScrollPosition } from '../reportTree/ReportTree';
|
|
6
6
|
import { ExpenseAutomationThreadClickTarget } from './components/ExpenseAutomationCommentingShell';
|
|
7
7
|
import { MonthEndReportPageProps } from './components/TableSection';
|
|
8
|
+
import { ActualMatchingActionProps } from './sections/actualMatching/actualMatchingTypes';
|
|
8
9
|
import { JEAccrualFeedbackReason } from './sections/jeSchedules/accrualDetail/JEAccrualFeedbackDialog';
|
|
9
10
|
import { FormData as JEScheduleAccountSettingsFormData } from './sections/jeSchedules/common/JEScheduleAccountSettings';
|
|
10
11
|
import { JEScheduleNewEntrySelection } from './sections/jeSchedules/common/JEScheduleNewEntryButton';
|
|
@@ -15,7 +16,7 @@ import { TransferDrawerTransactionData } from './sections/transactionCategorizat
|
|
|
15
16
|
/**
|
|
16
17
|
* Component & its Props
|
|
17
18
|
*/
|
|
18
|
-
export interface ExpenseAutomationPageProps extends MonthEndReportPageProps {
|
|
19
|
+
export interface ExpenseAutomationPageProps extends MonthEndReportPageProps, ActualMatchingActionProps {
|
|
19
20
|
accountListNestedAccountHierarchy: NestedAccountHierarchyForReport[];
|
|
20
21
|
authParams: AuthParams;
|
|
21
22
|
baseTransactionSearchFetchState: FetchStateAndError;
|
|
@@ -69,6 +70,12 @@ export interface ExpenseAutomationPageProps extends MonthEndReportPageProps {
|
|
|
69
70
|
isCreateTransferEntryFromExpenseEnabled?: boolean;
|
|
70
71
|
/** Gates close-management commenting across the 4 tabs. */
|
|
71
72
|
isExpenseAutomationCommentingEnabled?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Match quick view, named apart from page-level `panelContent` the same way
|
|
75
|
+
* `schedulePanelContent` is. Actual Matching renders its own SidePanelLayout
|
|
76
|
+
* so the KPI strip stays full-width above the split.
|
|
77
|
+
*/
|
|
78
|
+
isMatchPanelOpen?: boolean;
|
|
72
79
|
/** Transaction categorization only: when true, the right rail is expanded. */
|
|
73
80
|
isRightPanelOpen?: boolean;
|
|
74
81
|
/**
|
|
@@ -82,6 +89,7 @@ export interface ExpenseAutomationPageProps extends MonthEndReportPageProps {
|
|
|
82
89
|
*/
|
|
83
90
|
isSchedulePanelOpen?: boolean;
|
|
84
91
|
loggedInUser?: LoggedInUser;
|
|
92
|
+
matchPanelContent?: ReactNode;
|
|
85
93
|
newAccrualAccountsView?: NewAccrualAccountsView;
|
|
86
94
|
/** The draft this form was last left with, for a host that stores it. */
|
|
87
95
|
newScheduleLocalData?: NewScheduleSaveFormValues;
|
|
@@ -193,10 +201,12 @@ export interface ExpenseAutomationPageProps extends MonthEndReportPageProps {
|
|
|
193
201
|
updateSectionIdsForReview: (sectionIds: FluxAnalysisSectionType[]) => void;
|
|
194
202
|
updateSelectedVendorForTransaction: (selectedTab: ExpenseAutomationTransactionsTab, transactionId: ID, lineId: ID, selectedTransaction: SupportedTransactionWithCOT, updatedVendor?: VendorBase) => void;
|
|
195
203
|
/**
|
|
196
|
-
* When set (e.g. from `withTransactionSidePanel` in the host app), closing
|
|
197
|
-
* quick-view
|
|
198
|
-
*
|
|
204
|
+
* When set (e.g. from `withTransactionSidePanel` in the host app), closing
|
|
205
|
+
* the open quick-view on Missing Receipts sub-tab changes or JE page tab
|
|
206
|
+
* changes avoids a stale panel over the newly selected list. Match QV is
|
|
207
|
+
* closed via `closeMatchSidePanel` instead — it is not page-level.
|
|
199
208
|
*/
|
|
209
|
+
closeMatchSidePanel?: () => void;
|
|
200
210
|
closeSidePanel?: () => void;
|
|
201
211
|
onAccountExclude?: (accountId: ID) => void;
|
|
202
212
|
onAccountInclude?: (accountId: ID) => void;
|
|
@@ -47,5 +47,10 @@ missingReceiptsOptions?: {
|
|
|
47
47
|
* `missing_receipts`, `flux_analysis`, `je_schedules`). Gated by
|
|
48
48
|
* `is_expense_automation_commenting_enabled`.
|
|
49
49
|
*/
|
|
50
|
-
isExpenseAutomationCommentingEnabled?: boolean, receiptsEmail?: string
|
|
50
|
+
isExpenseAutomationCommentingEnabled?: boolean, receiptsEmail?: string,
|
|
51
|
+
/**
|
|
52
|
+
* Cron-2 live gate (`is_accrual_enabled`). Off hides the Actual Matching JE
|
|
53
|
+
* subtab — there are no one-time accruals to match.
|
|
54
|
+
*/
|
|
55
|
+
isAccrualEnabled?: boolean) => ExpenseAutomationNavbarHeaderData;
|
|
51
56
|
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Amount, MonthYearPeriod } from '@zeniai/client-epic-state';
|
|
2
|
+
import { ActualMatchingKpiSummary } from './actualMatchingTypes';
|
|
3
|
+
export interface ActualMatchingKpiStripProps {
|
|
4
|
+
displayCurrency: Amount;
|
|
5
|
+
kpiSummary: ActualMatchingKpiSummary;
|
|
6
|
+
selectedPeriod: MonthYearPeriod;
|
|
7
|
+
}
|
|
8
|
+
declare function ActualMatchingKpiStrip({ displayCurrency, kpiSummary, selectedPeriod, }: Readonly<ActualMatchingKpiStripProps>): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export default ActualMatchingKpiStrip;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { SortOrder } from '@zeniai/client-epic-state';
|
|
2
|
+
import { ActualMatchingRow, ActualMatchingSortKey, ActualMatchingViewUIState } from './actualMatchingTypes';
|
|
3
|
+
export interface ActualMatchingListProps {
|
|
4
|
+
pendingReview: ActualMatchingRow[];
|
|
5
|
+
reversed: ActualMatchingRow[];
|
|
6
|
+
sortKey?: ActualMatchingSortKey;
|
|
7
|
+
sortOrder?: SortOrder;
|
|
8
|
+
onOpenMatch: (matchId: string) => void;
|
|
9
|
+
onOpenMatchNewModal?: (matchId: string) => void;
|
|
10
|
+
onUpdateActualMatchingUIState?: (uiState: Partial<ActualMatchingViewUIState>) => void;
|
|
11
|
+
}
|
|
12
|
+
declare function ActualMatchingList({ pendingReview, reversed, onOpenMatch, onOpenMatchNewModal, onUpdateActualMatchingUIState, sortKey, sortOrder, }: Readonly<ActualMatchingListProps>): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export default ActualMatchingList;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ActualMatchingColumnKey } from './actualMatchingListConfig';
|
|
2
|
+
import { ActualMatchingRow } from './actualMatchingTypes';
|
|
3
|
+
export interface ActualMatchingListRowProps {
|
|
4
|
+
columns: ActualMatchingColumnKey[];
|
|
5
|
+
gridTemplateColumns: string;
|
|
6
|
+
row: ActualMatchingRow;
|
|
7
|
+
onOpenMatch: (matchId: string) => void;
|
|
8
|
+
onOpenMatchNewModal?: (matchId: string) => void;
|
|
9
|
+
}
|
|
10
|
+
declare function ActualMatchingListRow({ columns, gridTemplateColumns, row, onOpenMatch, onOpenMatchNewModal, }: Readonly<ActualMatchingListRowProps>): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export default ActualMatchingListRow;
|
package/dist/components/expenseAutomation/sections/actualMatching/ActualMatchingMatchDetailPage.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { FetchState, MatchAndReverseResult, UndoReversalResult } from '@zeniai/client-epic-state';
|
|
2
|
+
import { ActualMatchingMatch } from './actualMatchingTypes';
|
|
3
|
+
export interface ActualMatchingMatchDetailPageProps {
|
|
4
|
+
detailFetchState: FetchState;
|
|
5
|
+
refreshStatus: FetchState;
|
|
6
|
+
isRenderedInPanel?: boolean;
|
|
7
|
+
isUndoInFlight?: boolean;
|
|
8
|
+
lastMatchResults?: MatchAndReverseResult[];
|
|
9
|
+
lastUndoResults?: UndoReversalResult[];
|
|
10
|
+
match?: ActualMatchingMatch;
|
|
11
|
+
onNavigateBack: () => void;
|
|
12
|
+
onRefresh: () => void;
|
|
13
|
+
onContinueMatch?: () => void;
|
|
14
|
+
onOpenBill?: (txn: {
|
|
15
|
+
id: string;
|
|
16
|
+
type: string;
|
|
17
|
+
}) => void;
|
|
18
|
+
onUndoReversal?: (accrualIds: string[]) => void;
|
|
19
|
+
}
|
|
20
|
+
declare function ActualMatchingMatchDetailPage({ detailFetchState, isRenderedInPanel, isUndoInFlight, match, onNavigateBack, onRefresh, onOpenBill, onContinueMatch, onUndoReversal, lastMatchResults, lastUndoResults, refreshStatus, }: Readonly<ActualMatchingMatchDetailPageProps>): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export default ActualMatchingMatchDetailPage;
|
package/dist/components/expenseAutomation/sections/actualMatching/ActualMatchingMatchNewButton.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export interface ActualMatchingMatchNewButtonProps {
|
|
2
|
+
onClick: () => void;
|
|
3
|
+
}
|
|
4
|
+
declare function ActualMatchingMatchNewButton({ onClick, }: Readonly<ActualMatchingMatchNewButtonProps>): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export default ActualMatchingMatchNewButton;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { MonthYearPeriod } from '@zeniai/client-epic-state';
|
|
3
|
+
import { ActualMatchingActionProps, ExpenseAutomationActualMatchingViewSelector } from './actualMatchingTypes';
|
|
4
|
+
export interface ActualMatchingPageProps extends ActualMatchingActionProps {
|
|
5
|
+
actualMatching: ExpenseAutomationActualMatchingViewSelector;
|
|
6
|
+
selectedPeriod: MonthYearPeriod;
|
|
7
|
+
/**
|
|
8
|
+
* Match quick view, named apart from the page-level `panelContent` that drives
|
|
9
|
+
* transaction and reconciliation. This section renders the split so the KPI
|
|
10
|
+
* strip stays full-width above it.
|
|
11
|
+
*
|
|
12
|
+
* There is no full-view flag: expanding leaves for the match's own page.
|
|
13
|
+
*/
|
|
14
|
+
isMatchPanelOpen?: boolean;
|
|
15
|
+
matchPanelContent?: ReactNode;
|
|
16
|
+
}
|
|
17
|
+
export declare function ActualMatchingPageKpis({ actualMatching, selectedPeriod, }: Readonly<{
|
|
18
|
+
actualMatching: ExpenseAutomationActualMatchingViewSelector;
|
|
19
|
+
selectedPeriod: MonthYearPeriod;
|
|
20
|
+
}>): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
declare function ActualMatchingPage({ actualMatching, isMatchPanelOpen, matchPanelContent, onClearMatchNewModal, onCloseMatchNewModal, onMatchAndReverse, onOpenMatch, onOpenMatchNewModal, onSearchMatchAccruals, onSearchMatchTransactions, onUpdateActualMatchingUIState, selectedPeriod, }: Readonly<ActualMatchingPageProps>): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export default ActualMatchingPage;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ActualMatchingMatchModalView, MatchAndReverseAccrualsParams, MatchNewFormData } from './actualMatchingTypes';
|
|
2
|
+
export interface MatchNewModalProps {
|
|
3
|
+
matchModal: ActualMatchingMatchModalView;
|
|
4
|
+
initialFormValues?: Partial<MatchNewFormData>;
|
|
5
|
+
onClearMatchNewModal: () => void;
|
|
6
|
+
onCloseMatchNewModal: () => void;
|
|
7
|
+
onMatchAndReverse: (params: MatchAndReverseAccrualsParams) => void;
|
|
8
|
+
onSearchMatchAccruals: (query: string, pageToken?: string) => void;
|
|
9
|
+
onSearchMatchTransactions: (query: string, pageToken?: string) => void;
|
|
10
|
+
}
|
|
11
|
+
declare function MatchNewModal({ initialFormValues, matchModal, onClearMatchNewModal, onCloseMatchNewModal, onMatchAndReverse, onSearchMatchAccruals, onSearchMatchTransactions, }: Readonly<MatchNewModalProps>): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export default MatchNewModal;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { JEOneTimeAccrual } from '@zeniai/client-epic-state';
|
|
2
|
+
import { ActualMatchingTransactionSearchResult } from './actualMatchingTypes';
|
|
3
|
+
export interface MatchNewPreviewProps {
|
|
4
|
+
selectedAccruals: JEOneTimeAccrual[];
|
|
5
|
+
selectedTransactions: ActualMatchingTransactionSearchResult[];
|
|
6
|
+
}
|
|
7
|
+
declare function MatchNewPreview({ selectedAccruals, selectedTransactions, }: Readonly<MatchNewPreviewProps>): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export default MatchNewPreview;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Amount, ExpenseAutomationViewSelector, MonthYearPeriod, SortOrder } from '@zeniai/client-epic-state';
|
|
2
|
+
import { StyledCapsuleThemeType } from '../../../common/StyledCapsule';
|
|
3
|
+
import { ActualMatchingColumnKey } from './actualMatchingListConfig';
|
|
4
|
+
import { ActualMatchingGroupedAccrual, ActualMatchingKpiSummary, ActualMatchingMatch, ActualMatchingRow, ActualMatchingSortKey, ActualMatchingTransactionSearchResult, ExpenseAutomationActualMatchingViewSelector } from './actualMatchingTypes';
|
|
5
|
+
export declare const EMPTY_ACTUAL_MATCHING_KPI_SUMMARY: ActualMatchingKpiSummary;
|
|
6
|
+
export declare const EMPTY_ACTUAL_MATCHING_VIEW: ExpenseAutomationActualMatchingViewSelector;
|
|
7
|
+
export declare function getActualMatchingFromSelector(selector: ExpenseAutomationViewSelector): ExpenseAutomationActualMatchingViewSelector;
|
|
8
|
+
export declare function getAccruedAmount(row: ActualMatchingRow): number;
|
|
9
|
+
export declare function getActualAmount(row: ActualMatchingRow): number | undefined;
|
|
10
|
+
export declare function getActualMatchingAmount(row: ActualMatchingRow): number;
|
|
11
|
+
export declare function getVariancePercent(row: ActualMatchingRow): number | undefined;
|
|
12
|
+
export declare function formatVariancePercent(percent: number): string;
|
|
13
|
+
export declare function getVarianceCapsuleType(percent: number): StyledCapsuleThemeType;
|
|
14
|
+
export declare function getMatchTierKey(row: ActualMatchingRow): string | undefined;
|
|
15
|
+
export declare function getMatchTierLabel(row: ActualMatchingRow): string;
|
|
16
|
+
export declare function getMatchTierCapsuleType(row: ActualMatchingRow): StyledCapsuleThemeType;
|
|
17
|
+
export declare function getActualMatchingTypeLabel(row: ActualMatchingRow): string;
|
|
18
|
+
export declare function getActualMatchingTypeCapsuleType(row: ActualMatchingRow): StyledCapsuleThemeType;
|
|
19
|
+
export declare function formatActualMatchingServiceMonth(serviceMonth: string): string;
|
|
20
|
+
export declare function formatActualMatchingServiceMonths(months: readonly string[]): string;
|
|
21
|
+
export declare function getActualMatchingServiceMonths(row: ActualMatchingRow): string[];
|
|
22
|
+
export declare function getActualMatchingServiceLabel(row: ActualMatchingRow): string;
|
|
23
|
+
export declare function getReceivedLabel(row: ActualMatchingRow): string;
|
|
24
|
+
export declare function getReversesGroupedCount(row: ActualMatchingRow): number;
|
|
25
|
+
export declare function isGroupedActualMatchingRow(row: ActualMatchingRow): boolean;
|
|
26
|
+
export declare function isGroupedAccrualMenuInteractive(_row: ActualMatchingRow): boolean;
|
|
27
|
+
export declare function getGroupedAccrualMenuItems(row: ActualMatchingRow): ActualMatchingGroupedAccrual[];
|
|
28
|
+
export declare function getReversesLabel(row: ActualMatchingRow): string;
|
|
29
|
+
export declare function getReversesTooltip(row: ActualMatchingRow): string;
|
|
30
|
+
export declare function isSameMatchVendor(transaction: {
|
|
31
|
+
vendorName: string;
|
|
32
|
+
vendorId?: string;
|
|
33
|
+
}, accrual: {
|
|
34
|
+
vendorName: string;
|
|
35
|
+
vendorId?: string;
|
|
36
|
+
}): boolean;
|
|
37
|
+
export declare function getAccruedDisplayAmount(row: ActualMatchingRow): Amount;
|
|
38
|
+
export declare function getActualDisplayAmount(row: ActualMatchingRow): Amount | undefined;
|
|
39
|
+
export declare function sumRowDisplayAmount(rows: ActualMatchingRow[]): Amount;
|
|
40
|
+
export declare function getActualMatchingDisplayCurrency(rows: ActualMatchingRow[]): Amount;
|
|
41
|
+
export declare function formatKpiAmount(amount: number, currency: Amount): string;
|
|
42
|
+
export declare function formatActualMatchingKpiMonth(period: MonthYearPeriod): string;
|
|
43
|
+
export declare function formatGroupAmountSubtitle(template: string, amount: Amount): string;
|
|
44
|
+
export declare function isAiCreatedAccrual(row: ActualMatchingRow): boolean;
|
|
45
|
+
export declare function isHumanReversedRow(row: ActualMatchingRow): boolean;
|
|
46
|
+
export declare function isAiReversedBy(row: ActualMatchingRow): boolean;
|
|
47
|
+
export declare function getReversedByLabel(row: ActualMatchingRow): string;
|
|
48
|
+
export declare function getColumnKeyForActualMatchingSortKey(sortKey: ActualMatchingSortKey): ActualMatchingColumnKey;
|
|
49
|
+
export declare function getActualMatchingColumnSortValue(row: ActualMatchingRow, columnKey: ActualMatchingColumnKey): string | number | null;
|
|
50
|
+
export declare function sortActualMatchingRowsByColumn(rows: ActualMatchingRow[], columnKey: ActualMatchingColumnKey, sortOrder: SortOrder): ActualMatchingRow[];
|
|
51
|
+
export declare function getUndoReversalAccrualIds(row: Pick<ActualMatchingRow, "accrualId" | "groupedMembers">): string[];
|
|
52
|
+
export declare function getMatchedBillTransaction(match: Pick<ActualMatchingMatch, "members" | "transactionType">): {
|
|
53
|
+
id: string;
|
|
54
|
+
type: string;
|
|
55
|
+
} | null;
|
|
56
|
+
export declare function getUndoReversalAccrualIdsFromMatch(match: Pick<ActualMatchingMatch, "members">): string[];
|
|
57
|
+
export declare function getLeftoverWarningTooltip(row: ActualMatchingRow): string;
|
|
58
|
+
export declare function pruneSelectionToVisibleResults(currentKeys: string[], visibleKeys: ReadonlySet<string>, searchFetchState: string): string[];
|
|
59
|
+
export declare function nextSelectedTransactionLines(currentKeys: string[], clickedKey: string, results: ActualMatchingTransactionSearchResult[]): string[];
|
|
60
|
+
export declare function pickPrefillTransactionLines(results: ActualMatchingTransactionSearchResult[], prefill?: {
|
|
61
|
+
actualAmount?: number;
|
|
62
|
+
consumedLineIds?: string[];
|
|
63
|
+
matchedLineId?: string;
|
|
64
|
+
matchedTransactionId?: string;
|
|
65
|
+
}): string[];
|
|
66
|
+
export declare function pickPrefillTransactionLine(results: ActualMatchingTransactionSearchResult[], prefill?: {
|
|
67
|
+
actualAmount?: number;
|
|
68
|
+
matchedLineId?: string;
|
|
69
|
+
matchedTransactionId?: string;
|
|
70
|
+
}): string | null;
|
|
71
|
+
export declare function shouldPromptSelectMatchLine({ isTxnSearchComplete, lineCount, openedFromMatchId, selectedLineKey, }: {
|
|
72
|
+
isTxnSearchComplete: boolean;
|
|
73
|
+
lineCount: number;
|
|
74
|
+
selectedLineKey: string | null;
|
|
75
|
+
openedFromMatchId?: string;
|
|
76
|
+
}): boolean;
|
package/dist/components/expenseAutomation/sections/actualMatching/actualMatchingHelpers.test.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/components/expenseAutomation/sections/actualMatching/actualMatchingListConfig.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ActualMatchingSortKey } from './actualMatchingTypes';
|
|
2
|
+
export type ActualMatchingColumnKey = "received" | "vendor" | "type" | "reversedBy" | "service" | "reverses" | "matchTier" | "accrued" | "actual" | "variance";
|
|
3
|
+
export interface ActualMatchingHeaderItem {
|
|
4
|
+
key: ActualMatchingColumnKey;
|
|
5
|
+
sortable: boolean;
|
|
6
|
+
value: string;
|
|
7
|
+
width: number;
|
|
8
|
+
sortKey?: ActualMatchingSortKey;
|
|
9
|
+
}
|
|
10
|
+
export declare function isActualMatchingNumericColumn(key: ActualMatchingColumnKey): boolean;
|
|
11
|
+
export declare function getActualMatchingColumns(isQuickViewMode?: boolean): ActualMatchingHeaderItem[];
|
|
12
|
+
export declare function buildActualMatchingGridTemplate(columns: ActualMatchingHeaderItem[]): string;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { FetchState, JEOneTimeAccrual } from '@zeniai/client-epic-state';
|
|
2
|
+
import { ActualMatchingMatch, ActualMatchingRowKind } from './actualMatchingTypes';
|
|
3
|
+
export declare function getMatchServiceMonthsLabel(members: readonly JEOneTimeAccrual[]): string;
|
|
4
|
+
export declare function getMatchSubtitle(match: ActualMatchingMatch): string;
|
|
5
|
+
export declare function getMatchStatusLabel(kind: ActualMatchingRowKind, labels: {
|
|
6
|
+
statusAutoReversed: string;
|
|
7
|
+
statusManuallyReversed: string;
|
|
8
|
+
statusPendingReview: string;
|
|
9
|
+
}): string;
|
|
10
|
+
export declare function getMatchVariancePercent(match: ActualMatchingMatch): number | null;
|
|
11
|
+
export declare function formatMatchVarianceLabel(match: ActualMatchingMatch): string | null;
|
|
12
|
+
export declare function isMatchRefreshSpinning(match: ActualMatchingMatch | undefined, detailFetchState: FetchState, refreshStatus: FetchState): boolean;
|
|
13
|
+
export declare function getOpenMatchedTransactionLabel(transactionType: string, labels: {
|
|
14
|
+
openTransaction: string;
|
|
15
|
+
}): string;
|
|
16
|
+
export declare function getMatchedTransactionSectionTitle(transactionType: string, titles: {
|
|
17
|
+
matchedTransaction: string;
|
|
18
|
+
}): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { ExpenseAutomationActualMatchingSortKey as ActualMatchingSortKey, ActualMatchingTransactionSearchResult, ExpenseAutomationActualMatchingViewUIState as ActualMatchingViewUIState, Amount, FetchStateAndError, ID, JEOneTimeAccrual, MatchAndReverseAccrualsParams, MatchAndReverseResult, MatchAndReverseResultStatus, UndoReversalAccrualsParams, UndoReversalResult, UndoReversalResultStatus, ZeniDate } from '@zeniai/client-epic-state';
|
|
2
|
+
export type { ActualMatchingSortKey, ActualMatchingTransactionSearchResult, ActualMatchingViewUIState, MatchAndReverseAccrualsParams, MatchAndReverseResult, MatchAndReverseResultStatus, UndoReversalAccrualsParams, UndoReversalResult, UndoReversalResultStatus, };
|
|
3
|
+
/**
|
|
4
|
+
* WC-only Actual Matching types (page tab, list row extensions, form, handlers).
|
|
5
|
+
* CES-owned result/params types are imported from `@zeniai/client-epic-state`.
|
|
6
|
+
*/
|
|
7
|
+
export declare const ACTUAL_MATCHING_PAGE_TAB: "actual_matching";
|
|
8
|
+
export type ActualMatchingPageTab = typeof ACTUAL_MATCHING_PAGE_TAB;
|
|
9
|
+
export type ActualMatchingRowKind = "auto_reversed" | "pending_review" | "manually_reversed";
|
|
10
|
+
export type ActualMatchingCleared = NonNullable<JEOneTimeAccrual["cleared"]> & {
|
|
11
|
+
accrualIds?: ID[];
|
|
12
|
+
groupSum?: Amount;
|
|
13
|
+
};
|
|
14
|
+
export type ActualMatchingGroupedAccrual = {
|
|
15
|
+
accrualId: ID;
|
|
16
|
+
estimatedAmount?: Amount;
|
|
17
|
+
jeDebitAccountName?: string;
|
|
18
|
+
memo?: string;
|
|
19
|
+
serviceMonth?: string;
|
|
20
|
+
};
|
|
21
|
+
export type ActualMatchingRow = JEOneTimeAccrual & {
|
|
22
|
+
kind: ActualMatchingRowKind;
|
|
23
|
+
matchId: string;
|
|
24
|
+
accruedAmount?: Amount;
|
|
25
|
+
actualAmount?: Amount;
|
|
26
|
+
cleared?: ActualMatchingCleared;
|
|
27
|
+
groupedAccrualIds?: ID[];
|
|
28
|
+
groupedMembers?: ActualMatchingGroupedAccrual[];
|
|
29
|
+
intendedAccrualIds?: ID[];
|
|
30
|
+
leftovers?: ActualMatchingGroupedAccrual[];
|
|
31
|
+
matchShape?: string;
|
|
32
|
+
matchSuggestion?: JEOneTimeAccrual["matchSuggestion"] & {
|
|
33
|
+
matchedLineId?: string;
|
|
34
|
+
matchTier?: string;
|
|
35
|
+
};
|
|
36
|
+
matchTier?: string;
|
|
37
|
+
reversalDate?: ZeniDate;
|
|
38
|
+
reversedBy?: JEOneTimeAccrual["createdBy"];
|
|
39
|
+
transactionDate?: string;
|
|
40
|
+
transactionType?: string;
|
|
41
|
+
};
|
|
42
|
+
export interface ActualMatchingKpiSummary {
|
|
43
|
+
actualsReceived: {
|
|
44
|
+
count: number;
|
|
45
|
+
expectedCount: number;
|
|
46
|
+
vendorsPending: number;
|
|
47
|
+
};
|
|
48
|
+
autoReversed: {
|
|
49
|
+
clearedAmount: number;
|
|
50
|
+
count: number;
|
|
51
|
+
percent: number;
|
|
52
|
+
};
|
|
53
|
+
pendingReview: {
|
|
54
|
+
amount: number;
|
|
55
|
+
count: number;
|
|
56
|
+
estimatedMinutesToClear: number;
|
|
57
|
+
};
|
|
58
|
+
variance: {
|
|
59
|
+
averagePercentPerMatch: number;
|
|
60
|
+
netAmount: number;
|
|
61
|
+
percent: number;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export interface ActualMatchingMatchModalView {
|
|
65
|
+
accrualSearch: {
|
|
66
|
+
fetchState: FetchStateAndError;
|
|
67
|
+
isLoadingMore: boolean;
|
|
68
|
+
nextPageToken: string | null;
|
|
69
|
+
query: string;
|
|
70
|
+
results: JEOneTimeAccrual[];
|
|
71
|
+
};
|
|
72
|
+
confirmStatus: FetchStateAndError;
|
|
73
|
+
isOpen: boolean;
|
|
74
|
+
transactionSearch: {
|
|
75
|
+
fetchState: FetchStateAndError;
|
|
76
|
+
isLoadingMore: boolean;
|
|
77
|
+
nextPageToken: string | null;
|
|
78
|
+
query: string;
|
|
79
|
+
results: ActualMatchingTransactionSearchResult[];
|
|
80
|
+
};
|
|
81
|
+
lastBatchResults?: MatchAndReverseResult[];
|
|
82
|
+
openedFromMatchId?: string;
|
|
83
|
+
prefill?: {
|
|
84
|
+
selectedAccrualIds: string[];
|
|
85
|
+
actualAmount?: number;
|
|
86
|
+
consumedLineIds?: string[];
|
|
87
|
+
matchedLineId?: string;
|
|
88
|
+
matchedTransactionId?: string;
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export interface ExpenseAutomationActualMatchingViewSelector {
|
|
92
|
+
fetchState: FetchStateAndError["fetchState"];
|
|
93
|
+
hasLoadedForSelectedPeriod: boolean;
|
|
94
|
+
kpiSummary: ActualMatchingKpiSummary;
|
|
95
|
+
matchModal: ActualMatchingMatchModalView;
|
|
96
|
+
pendingReview: ActualMatchingRow[];
|
|
97
|
+
refreshStatus: FetchStateAndError;
|
|
98
|
+
reversed: ActualMatchingRow[];
|
|
99
|
+
uiState: ActualMatchingViewUIState;
|
|
100
|
+
error?: FetchStateAndError["error"];
|
|
101
|
+
}
|
|
102
|
+
export interface ActualMatchingMatch {
|
|
103
|
+
accruedAmount: Amount;
|
|
104
|
+
actualAmount: Amount;
|
|
105
|
+
kind: ActualMatchingRowKind;
|
|
106
|
+
matchId: string;
|
|
107
|
+
members: JEOneTimeAccrual[];
|
|
108
|
+
transactionIntegrationId: ID;
|
|
109
|
+
transactionType: string;
|
|
110
|
+
leftovers?: JEOneTimeAccrual[];
|
|
111
|
+
matchShape?: string;
|
|
112
|
+
matchTier?: string;
|
|
113
|
+
transactionDate?: string;
|
|
114
|
+
vendorId?: ID;
|
|
115
|
+
vendorName?: string;
|
|
116
|
+
}
|
|
117
|
+
export interface ActualMatchingActionProps {
|
|
118
|
+
onClearMatchNewModal: () => void;
|
|
119
|
+
onCloseMatchNewModal: () => void;
|
|
120
|
+
onMatchAndReverse: (params: MatchAndReverseAccrualsParams) => void;
|
|
121
|
+
onOpenMatch: (matchId: string) => void;
|
|
122
|
+
onOpenMatchNewModal: (matchId?: string) => void;
|
|
123
|
+
onSearchMatchAccruals: (query: string, pageToken?: string) => void;
|
|
124
|
+
onSearchMatchTransactions: (query: string, pageToken?: string) => void;
|
|
125
|
+
onUpdateActualMatchingUIState?: (uiState: Partial<ActualMatchingViewUIState>) => void;
|
|
126
|
+
}
|
|
127
|
+
export declare const MATCH_NEW_FORM = "expenseAutomationMatchNew";
|
|
128
|
+
export type MatchNewFormData = {
|
|
129
|
+
selectedAccrualIds: string[];
|
|
130
|
+
selectedTransactionLines: string[];
|
|
131
|
+
};
|
|
132
|
+
export declare const MATCH_ACCRUAL_SELECTION_CAP = 50;
|
|
133
|
+
export declare function getTransactionLineKey(transactionId: string, lineId: string): string;
|
|
134
|
+
export declare function isActualMatchingPageTab(tab: string | undefined): tab is ActualMatchingPageTab;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { JEOneTimeAccrual, ZeniDate } from '@zeniai/client-epic-state';
|
|
2
|
+
import { ActualMatchingTransactionSearchResult } from './actualMatchingTypes';
|
|
3
|
+
export declare function formatServiceMonthLabel(serviceMonth: string): string;
|
|
4
|
+
export declare function formatAccrualJeDate(serviceMonth: string, lastDayLabel: string): string;
|
|
5
|
+
export declare function formatJeShortDate(dateValue: string): string;
|
|
6
|
+
export declare function formatReversalJeDate(reversalPostingDate?: ZeniDate): string;
|
|
7
|
+
export declare function sumAccruedAmount(accruals: readonly JEOneTimeAccrual[]): number;
|
|
8
|
+
export declare function variancePercent(transactionAmount: number, accruedAmount: number): number | null;
|
|
9
|
+
export declare function uniqueServiceMonthLabel(accruals: readonly JEOneTimeAccrual[]): string | null;
|
|
10
|
+
export declare function transactionMatchLabel(transaction: ActualMatchingTransactionSearchResult, accruals: readonly JEOneTimeAccrual[]): string;
|
|
11
|
+
export declare function creditAccountName(accrual: JEOneTimeAccrual, fallback: string): string;
|
|
12
|
+
export declare function debitAccountName(accrual: JEOneTimeAccrual, fallback: string): string;
|
package/dist/components/expenseAutomation/sections/actualMatching/matchNewPreviewHelpers.test.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FetchState } from '@zeniai/client-epic-state';
|
|
2
|
+
import { ActualMatchingMatch } from '../actualMatchingTypes';
|
|
3
|
+
export interface ActualMatchingTabQuickViewProps {
|
|
4
|
+
detailFetchState?: FetchState;
|
|
5
|
+
initiallyOpen?: boolean;
|
|
6
|
+
match?: ActualMatchingMatch;
|
|
7
|
+
refreshStatus?: FetchState;
|
|
8
|
+
onOpenChange?: (isOpen: boolean) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function ActualMatchingTabQuickView({ detailFetchState, initiallyOpen, match: initialMatch, refreshStatus, onOpenChange, }: Readonly<ActualMatchingTabQuickViewProps>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { ExpenseAutomationViewSelector, FetchStateAndError, NestedAccountHierarchyForReport, NestedClassHierarchyForReport, NewAccrualAccountsView, NewOneTimeAccrualLocalData, ScheduleDetailsLocalDataAccruedExpenses, ScheduleTransaction, TransactionID, ZeniDate } from '@zeniai/client-epic-state';
|
|
2
2
|
import { FooterFormIdType } from '../../common';
|
|
3
|
+
import { ActualMatchingActionProps } from '../actualMatching/actualMatchingTypes';
|
|
3
4
|
import { FormData as JEScheduleAccountSettingsFormData } from './common/JEScheduleAccountSettings';
|
|
4
5
|
import { JESchedulesSectionProps } from './sections/JESchedulesSection';
|
|
5
6
|
import { NewScheduleSaveFormValues } from './sections/NewJEScheduleSection';
|
|
6
|
-
export interface JESchedulePageProps extends Omit<JESchedulesSectionProps, "jeSchedules" | "isAccountingClassesEnabled" | "isPanelOpen" | "panelContent" | "pendingDiscardConfirmation"> {
|
|
7
|
+
export interface JESchedulePageProps extends Omit<JESchedulesSectionProps, "jeSchedules" | "isAccountingClassesEnabled" | "isPanelOpen" | "panelContent" | "pendingDiscardConfirmation">, Partial<ActualMatchingActionProps> {
|
|
7
8
|
accountListNestedAccountHierarchy: NestedAccountHierarchyForReport[];
|
|
8
9
|
baseTransactionSearchFetchState: FetchStateAndError;
|
|
9
10
|
baseTransactionSearchResults: ScheduleTransaction[];
|
|
@@ -23,6 +24,12 @@ export interface JESchedulePageProps extends Omit<JESchedulesSectionProps, "jeSc
|
|
|
23
24
|
/** The draft this form was last left with, for a host that stores it. */
|
|
24
25
|
/** Cron-2's live gate for this company. Off hides one-time accrual creation. */
|
|
25
26
|
isAccrualEnabled?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Match quick view, named apart from page-level `panelContent` the same way
|
|
29
|
+
* `schedulePanelContent` is. Actual Matching renders its own SidePanelLayout
|
|
30
|
+
* so the KPI strip stays full-width above the split.
|
|
31
|
+
*/
|
|
32
|
+
isMatchPanelOpen?: boolean;
|
|
26
33
|
/**
|
|
27
34
|
* Schedule side panel, named apart from the page-level `panelContent` that drives the
|
|
28
35
|
* transaction and reconciliation panels: ExpenseAutomationPage spreads its own props into
|
|
@@ -31,6 +38,7 @@ export interface JESchedulePageProps extends Omit<JESchedulesSectionProps, "jeSc
|
|
|
31
38
|
* There is no full-view flag: expanding leaves for the schedule's own page.
|
|
32
39
|
*/
|
|
33
40
|
isSchedulePanelOpen?: boolean;
|
|
41
|
+
matchPanelContent?: React.ReactNode;
|
|
34
42
|
newAccrualAccountsView?: NewAccrualAccountsView;
|
|
35
43
|
newScheduleLocalData?: NewScheduleSaveFormValues;
|
|
36
44
|
schedulePanelContent?: React.ReactNode;
|
|
@@ -51,5 +59,5 @@ export interface JESchedulePageProps extends Omit<JESchedulesSectionProps, "jeSc
|
|
|
51
59
|
setResetJeAccountSettingsForm: (resetFn: () => void) => void;
|
|
52
60
|
onNewScheduleFormChange?: (scheduleType: string, formValues: NewScheduleSaveFormValues) => void;
|
|
53
61
|
}
|
|
54
|
-
declare function JESchedulePage({ accountListNestedAccountHierarchy, baseTransactionSearchFetchState, baseTransactionSearchResults, classListNestedAccountHierarchy, expenseAutomationViewSelector, currentFooterFormId, isAccountingClassesEnabled, isCreatingNewSchedule, newScheduleSaveStatus, allDepreciationAccountListNestedAccountHierarchy, closeMonth, initialScheduleDetailsMode, initialScheduleType, newAccrualAccountsView, onCreateAccruedSchedule, onCreateOneTimeAccrual, setResetJeAccountSettingsForm, vendorSearchAutoCompleteData, onJESchedulesFormDataChange, onPostJESchedule, handleJeScheduleClick, onOneTimeAccrualClick, onOneTimeAccrualFeedback, onJeAccountSettingsChange, onSaveJeAccountSettingsClick, onSaveSchedule, onScheduleTypeChange, onSearchBaseTransaction, onViewTransaction, newScheduleLocalData, initialSelectedBaseTransaction, isAccrualEnabled, onNewScheduleFormChange, ignoreRecommendedJeSchedule, vendorSearchAutoCompleteActions, isSchedulePanelOpen, schedulePanelContent, schedulePendingDiscardConfirmation, setCurrentFooterFormId, setIsCreatingNewSchedule, setIsJeAccountSettingsOpened, onRevertJeSchedule, onToggleCreatedGroupCollapsed, onTogglePendingGroupCollapsed, onUpdateJEScheduleTypeFilter, onUpdateJESchedulesUIState, }: Readonly<JESchedulePageProps>): import("react/jsx-runtime").JSX.Element;
|
|
62
|
+
declare function JESchedulePage({ accountListNestedAccountHierarchy, baseTransactionSearchFetchState, baseTransactionSearchResults, classListNestedAccountHierarchy, expenseAutomationViewSelector, currentFooterFormId, isAccountingClassesEnabled, isCreatingNewSchedule, newScheduleSaveStatus, allDepreciationAccountListNestedAccountHierarchy, closeMonth, initialScheduleDetailsMode, initialScheduleType, newAccrualAccountsView, onCreateAccruedSchedule, onCreateOneTimeAccrual, setResetJeAccountSettingsForm, vendorSearchAutoCompleteData, onJESchedulesFormDataChange, onPostJESchedule, handleJeScheduleClick, onOneTimeAccrualClick, onOneTimeAccrualFeedback, onJeAccountSettingsChange, onSaveJeAccountSettingsClick, onSaveSchedule, onScheduleTypeChange, onSearchBaseTransaction, onViewTransaction, newScheduleLocalData, initialSelectedBaseTransaction, isAccrualEnabled, onNewScheduleFormChange, ignoreRecommendedJeSchedule, vendorSearchAutoCompleteActions, isMatchPanelOpen, isSchedulePanelOpen, matchPanelContent, schedulePanelContent, schedulePendingDiscardConfirmation, setCurrentFooterFormId, setIsCreatingNewSchedule, setIsJeAccountSettingsOpened, onRevertJeSchedule, onToggleCreatedGroupCollapsed, onTogglePendingGroupCollapsed, onUpdateJEScheduleTypeFilter, onUpdateJESchedulesUIState, onClearMatchNewModal, onCloseMatchNewModal, onMatchAndReverse, onOpenMatch, onOpenMatchNewModal, onSearchMatchAccruals, onSearchMatchTransactions, onUpdateActualMatchingUIState, }: Readonly<JESchedulePageProps>): import("react/jsx-runtime").JSX.Element;
|
|
55
63
|
export default JESchedulePage;
|
package/dist/components/expenseAutomation/sections/jeSchedules/common/JEGroupSectionHeader.d.ts
CHANGED
|
@@ -2,7 +2,8 @@ export interface JEGroupSectionHeaderProps {
|
|
|
2
2
|
count: number;
|
|
3
3
|
isCollapsed: boolean;
|
|
4
4
|
title: string;
|
|
5
|
+
subtitle?: string;
|
|
5
6
|
onToggle: () => void;
|
|
6
7
|
}
|
|
7
|
-
declare function JEGroupSectionHeader({ title, count, isCollapsed, onToggle, }: Readonly<JEGroupSectionHeaderProps>): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
declare function JEGroupSectionHeader({ title, count, isCollapsed, onToggle, subtitle, }: Readonly<JEGroupSectionHeaderProps>): import("react/jsx-runtime").JSX.Element;
|
|
8
9
|
export default JEGroupSectionHeader;
|