@zeniai/client-epic-state 5.2.10 → 5.2.11-beta0ND

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/lib/entity/invoicing/invoicingCommonPayload.d.ts +27 -29
  2. package/lib/entity/invoicing/invoicingCommonPayload.js +37 -75
  3. package/lib/entity/invoicing/product/productPayload.d.ts +10 -0
  4. package/lib/entity/invoicing/product/productPayload.js +14 -2
  5. package/lib/epic.d.ts +3 -2
  6. package/lib/epic.js +12 -5
  7. package/lib/esm/entity/invoicing/invoicingCommonPayload.js +33 -73
  8. package/lib/esm/entity/invoicing/product/productPayload.js +14 -2
  9. package/lib/esm/epic.js +8 -1
  10. package/lib/esm/index.js +7 -6
  11. package/lib/esm/view/companyMonthEndReportView/companyMonthEndReportViewReducer.js +6 -2
  12. package/lib/esm/view/companyMonthEndReportView/companyMonthEndReportViewState.js +4 -0
  13. package/lib/esm/view/companyMonthEndReportView/epics/saveCompanyMonthEndReportEpic.js +10 -6
  14. package/lib/esm/view/companyMonthEndReportView/epics/sendCompanyMonthEndReportEpic.js +9 -5
  15. package/lib/esm/view/companyMonthEndReportView/monthEndTemplateData.js +32 -0
  16. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +25 -9
  17. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/saveInvoicingCatalogItemEpic.js +6 -1
  18. package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewSelector.js +40 -0
  19. package/lib/esm/view/invoicing/settingsView/epics/connectInvoicingStripeEpic.js +27 -0
  20. package/lib/esm/view/invoicing/settingsView/epics/disconnectInvoicingStripeEpic.js +19 -0
  21. package/lib/esm/view/invoicing/settingsView/epics/fetchInvoicingSettingsEpic.js +19 -0
  22. package/lib/esm/view/invoicing/settingsView/epics/saveInvoicingSettingsEpic.js +39 -0
  23. package/lib/esm/view/invoicing/settingsView/epics/settingsViewActionType.js +1 -0
  24. package/lib/esm/view/invoicing/settingsView/epics/submitInvoicingQboSettingsEpic.js +25 -0
  25. package/lib/esm/view/invoicing/settingsView/invoicingQboSettingsFormConfig.js +48 -0
  26. package/lib/esm/view/invoicing/settingsView/settingsViewReducer.js +25 -1
  27. package/lib/esm/view/invoicing/settingsView/settingsViewSelector.js +41 -0
  28. package/lib/esm/view/recommendation/recommendationReducer.js +16 -1
  29. package/lib/esm/view/recommendation/submitRecommendationFeedbackEpic.js +52 -0
  30. package/lib/index.d.ts +12 -8
  31. package/lib/index.js +36 -28
  32. package/lib/view/companyMonthEndReportView/companyMonthEndReportViewPayload.d.ts +8 -0
  33. package/lib/view/companyMonthEndReportView/companyMonthEndReportViewReducer.d.ts +6 -2
  34. package/lib/view/companyMonthEndReportView/companyMonthEndReportViewReducer.js +6 -2
  35. package/lib/view/companyMonthEndReportView/companyMonthEndReportViewState.d.ts +2 -0
  36. package/lib/view/companyMonthEndReportView/companyMonthEndReportViewState.js +4 -0
  37. package/lib/view/companyMonthEndReportView/epics/saveCompanyMonthEndReportEpic.js +10 -6
  38. package/lib/view/companyMonthEndReportView/epics/sendCompanyMonthEndReportEpic.js +9 -5
  39. package/lib/view/companyMonthEndReportView/monthEndTemplateData.d.ts +16 -0
  40. package/lib/view/companyMonthEndReportView/monthEndTemplateData.js +36 -0
  41. package/lib/view/expenseAutomationView/types/reconciliationViewState.d.ts +1 -1
  42. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.d.ts +12 -1
  43. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +25 -9
  44. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/saveInvoicingCatalogItemEpic.js +6 -1
  45. package/lib/view/invoicing/invoicingQboView/invoicingQboViewSelector.d.ts +10 -1
  46. package/lib/view/invoicing/invoicingQboView/invoicingQboViewSelector.js +43 -1
  47. package/lib/view/invoicing/settingsView/epics/connectInvoicingStripeEpic.d.ts +6 -0
  48. package/lib/view/invoicing/settingsView/epics/connectInvoicingStripeEpic.js +31 -0
  49. package/lib/view/invoicing/settingsView/epics/disconnectInvoicingStripeEpic.d.ts +6 -0
  50. package/lib/view/invoicing/settingsView/epics/disconnectInvoicingStripeEpic.js +23 -0
  51. package/lib/view/invoicing/settingsView/epics/fetchInvoicingSettingsEpic.d.ts +6 -0
  52. package/lib/view/invoicing/settingsView/epics/fetchInvoicingSettingsEpic.js +23 -0
  53. package/lib/view/invoicing/settingsView/epics/saveInvoicingSettingsEpic.d.ts +6 -0
  54. package/lib/view/invoicing/settingsView/epics/saveInvoicingSettingsEpic.js +43 -0
  55. package/lib/view/invoicing/settingsView/epics/settingsViewActionType.d.ts +5 -0
  56. package/lib/view/invoicing/settingsView/epics/settingsViewActionType.js +2 -0
  57. package/lib/view/invoicing/settingsView/epics/submitInvoicingQboSettingsEpic.d.ts +11 -0
  58. package/lib/view/invoicing/settingsView/epics/submitInvoicingQboSettingsEpic.js +29 -0
  59. package/lib/view/invoicing/settingsView/invoicingQboSettingsFormConfig.d.ts +34 -0
  60. package/lib/view/invoicing/settingsView/invoicingQboSettingsFormConfig.js +53 -0
  61. package/lib/view/invoicing/settingsView/settingsViewReducer.d.ts +4 -1
  62. package/lib/view/invoicing/settingsView/settingsViewReducer.js +26 -2
  63. package/lib/view/invoicing/settingsView/settingsViewSelector.d.ts +35 -0
  64. package/lib/view/invoicing/settingsView/settingsViewSelector.js +43 -1
  65. package/lib/view/invoicing/settingsView/settingsViewState.d.ts +8 -0
  66. package/lib/view/recommendation/recommendationPayload.d.ts +34 -0
  67. package/lib/view/recommendation/recommendationReducer.d.ts +2 -1
  68. package/lib/view/recommendation/recommendationReducer.js +17 -2
  69. package/lib/view/recommendation/submitRecommendationFeedbackEpic.d.ts +7 -0
  70. package/lib/view/recommendation/submitRecommendationFeedbackEpic.js +56 -0
  71. package/package.json +1 -1
  72. package/lib/esm/view/invoicing/settingsView/settingsViewEpics.js +0 -92
  73. package/lib/view/invoicing/settingsView/settingsViewEpics.d.ts +0 -12
  74. package/lib/view/invoicing/settingsView/settingsViewEpics.js +0 -99
@@ -1,11 +1,16 @@
1
1
  import { createSlice } from '@reduxjs/toolkit';
2
2
  import { clearAll } from '../../../rootActions';
3
+ import { entityToInvoicingQboSettingsLocalData, } from './invoicingQboSettingsFormConfig';
3
4
  export const initialState = {
4
5
  fetchState: 'Not-Started',
5
6
  error: undefined,
6
7
  saveFetchState: { fetchState: 'Not-Started', error: undefined },
7
8
  stripeFetchState: { fetchState: 'Not-Started', error: undefined },
8
9
  settings: undefined,
10
+ // Listed so `clearAll` resets them: an in-progress draft left behind by a
11
+ // tenant switch would be shown and saved against the tenant switched to.
12
+ brandingDraft: undefined,
13
+ qboDraft: undefined,
9
14
  hasValidState() {
10
15
  return this.fetchState === 'Completed' && this.settings != null;
11
16
  },
@@ -22,6 +27,11 @@ const settingsView = createSlice({
22
27
  draft.settings = action.payload;
23
28
  draft.fetchState = 'Completed';
24
29
  draft.error = undefined;
30
+ // Seed the QBO page's local data from the response. An edit already in
31
+ // progress wins: a refetch behind the user must not discard it.
32
+ if (draft.qboDraft == null) {
33
+ draft.qboDraft = entityToInvoicingQboSettingsLocalData(action.payload.qbo);
34
+ }
25
35
  },
26
36
  updateInvoicingSettingsFailure(draft, action) {
27
37
  draft.fetchState = 'Error';
@@ -36,6 +46,9 @@ const settingsView = createSlice({
36
46
  saveInvoicingSettingsSuccess(draft, action) {
37
47
  draft.settings = action.payload;
38
48
  draft.saveFetchState = { fetchState: 'Completed', error: undefined };
49
+ // Re-seeded from what was just persisted, so the page keeps working off
50
+ // local data while showing the server's version of it.
51
+ draft.qboDraft = entityToInvoicingQboSettingsLocalData(action.payload.qbo);
39
52
  },
40
53
  saveInvoicingSettingsFailure(draft, action) {
41
54
  draft.saveFetchState = { fetchState: 'Error', error: action.payload };
@@ -54,6 +67,17 @@ const settingsView = createSlice({
54
67
  resetInvoicingBrandingFormDraft(draft) {
55
68
  draft.brandingDraft = undefined;
56
69
  },
70
+ updateInvoicingQboSettingsDraft(draft, action) {
71
+ draft.qboDraft = action.payload.localData;
72
+ },
73
+ // Trigger only — handled by submitInvoicingQboSettingsEpic, which reads the
74
+ // local data and converts it to the request body.
75
+ submitInvoicingQboSettings(draft) {
76
+ draft.saveFetchState = { fetchState: 'In-Progress', error: undefined };
77
+ },
78
+ resetInvoicingQboSettingsDraft(draft) {
79
+ draft.qboDraft = undefined;
80
+ },
57
81
  connectInvoicingStripe: {
58
82
  reducer(draft) {
59
83
  draft.stripeFetchState = { fetchState: 'In-Progress', error: undefined };
@@ -85,5 +109,5 @@ const settingsView = createSlice({
85
109
  });
86
110
  },
87
111
  });
88
- export const { fetchInvoicingSettings, updateInvoicingSettings, updateInvoicingSettingsFailure, saveInvoicingSettings, saveInvoicingSettingsSuccess, saveInvoicingSettingsFailure, resetSaveInvoicingSettings, updateInvoicingBrandingFormDraft, submitInvoicingBrandingForm, resetInvoicingBrandingFormDraft, connectInvoicingStripe, disconnectInvoicingStripe, updateInvoicingStripeConnection, invoicingStripeConnectionFailure, } = settingsView.actions;
112
+ export const { fetchInvoicingSettings, updateInvoicingSettings, updateInvoicingSettingsFailure, saveInvoicingSettings, saveInvoicingSettingsSuccess, saveInvoicingSettingsFailure, resetSaveInvoicingSettings, updateInvoicingBrandingFormDraft, submitInvoicingBrandingForm, resetInvoicingBrandingFormDraft, updateInvoicingQboSettingsDraft, submitInvoicingQboSettings, resetInvoicingQboSettingsDraft, connectInvoicingStripe, disconnectInvoicingStripe, updateInvoicingStripeConnection, invoicingStripeConnectionFailure, } = settingsView.actions;
89
113
  export default settingsView.reducer;
@@ -1,7 +1,9 @@
1
1
  import { getInvoicingQboAccountMappingId, } from '../../../entity/invoicing/invoicingCommonPayload';
2
2
  import { getFormattedAddress } from '../../addressView/addressViewSelector';
3
3
  import { getInvoicingConfigView } from '../invoicingConfigView/invoicingConfigViewSelector';
4
+ import { getInvoicingQboView, isInvoicingAccountingPickerDataLoading, } from '../invoicingQboView/invoicingQboViewSelector';
4
5
  import { INVOICING_BUSINESS_ADDRESS_TYPE, entityToInvoicingBrandingFormLocalData, } from './invoicingBrandingFormConfig';
6
+ import { initialInvoicingQboSettingsLocalData, } from './invoicingQboSettingsFormConfig';
5
7
  /**
6
8
  * Shared primitive: the raw invoicing settings. Consumed internally by other
7
9
  * CES selectors (create-invoice, customer-detail, overview) and by non-settings
@@ -92,6 +94,45 @@ export const getInvoicingSettingsHubView = (state) => {
92
94
  status,
93
95
  };
94
96
  };
97
+ /**
98
+ * Bundled view for the QBO configuration page: the draft it edits, the accounts
99
+ * and option lists its dropdowns render, the connection and sync health it
100
+ * reports, and the fetch states that decide between skeleton, form and error.
101
+ *
102
+ * `localData` is the draft once the user has edited, and the settings response
103
+ * before that — so the page has one field to read and CES owns when it becomes
104
+ * available, rather than the page copying settings into local state.
105
+ */
106
+ export const getInvoicingQboSettingsFormView = (state) => {
107
+ const { error, fetchState, qboDraft, saveFetchState, settings } = state.invoicingSettingsViewState;
108
+ const { fetchState: configFetchState, qboAccountMappingKindOptions, qboCustomerMatchingOptions, qboSyncStatusOptions, } = getInvoicingConfigView(state);
109
+ const qboView = getInvoicingQboView(state);
110
+ return {
111
+ accountMappingKindOptions: qboAccountMappingKindOptions,
112
+ accounts: qboView.accounts,
113
+ backfillState: qboView.backfillState,
114
+ connection: qboView.connection,
115
+ configFetchState,
116
+ customerMatchingOptions: qboCustomerMatchingOptions,
117
+ // The dropdowns cannot be built before both the settings and the accounts
118
+ // land, so the page waits on either rather than rendering empty pickers.
119
+ isLoading: fetchState === 'Not-Started' ||
120
+ fetchState === 'In-Progress' ||
121
+ isInvoicingAccountingPickerDataLoading(state),
122
+ isSyncEnabledSaved: settings?.qbo?.enabled === true,
123
+ // Seeded in the reducer when the settings response lands, so this is a plain
124
+ // read rather than a second place that decides what the page starts from.
125
+ localData: qboDraft ?? initialInvoicingQboSettingsLocalData,
126
+ nestedAccountHierarchy: qboView.nestedAccountHierarchy,
127
+ retryFetchStateByTaskId: qboView.retryFetchStateByTaskId,
128
+ saveState: saveFetchState.fetchState === 'Not-Started' && error != null
129
+ ? { fetchState, error }
130
+ : saveFetchState,
131
+ settingsFetchState: fetchState,
132
+ syncHealth: qboView.syncHealth,
133
+ syncStatusOptions: qboSyncStatusOptions,
134
+ };
135
+ };
95
136
  /**
96
137
  * Bundled view for the branding settings form: the draft `localData` (seeded
97
138
  * from the existing settings until the user edits), the business-address label
@@ -131,6 +131,21 @@ const recommendation = createSlice({
131
131
  };
132
132
  },
133
133
  },
134
+ clearRecommendation(draft) {
135
+ Object.assign(draft, initialState);
136
+ },
137
+ // Fire-and-forget human feedback on a recommendation (accept, ranked
138
+ // override or outside override). Handled by submitRecommendationFeedbackEpic
139
+ // which POSTs to the accounting recommendation-feedback endpoint. No state
140
+ // mutation: the categorization UX must not depend on the feedback round-trip.
141
+ submitRecommendationFeedback: {
142
+ reducer() {
143
+ // Fire-and-forget: no state mutation; the epic performs the POST.
144
+ },
145
+ prepare(args) {
146
+ return { payload: args };
147
+ },
148
+ },
134
149
  },
135
150
  extraReducers: (builder) => {
136
151
  builder.addCase(clearAll, (draft) => {
@@ -138,7 +153,7 @@ const recommendation = createSlice({
138
153
  });
139
154
  },
140
155
  });
141
- export const { fetchEntityRecommendationsByTransactionId, fetchEntityRecommendationsForLineUpdate, fetchRecommendationByEntityName, fetchRecommendationByEntityId, updateRecommendationForEntity, updateRecommendationForEntityFailure, indicateReadyToInitializeRecommendation, } = recommendation.actions;
156
+ export const { fetchEntityRecommendationsByTransactionId, fetchEntityRecommendationsForLineUpdate, fetchRecommendationByEntityName, fetchRecommendationByEntityId, updateRecommendationForEntity, updateRecommendationForEntityFailure, indicateReadyToInitializeRecommendation, clearRecommendation, submitRecommendationFeedback, } = recommendation.actions;
142
157
  export default recommendation.reducer;
143
158
  const doUpdateRecommendationForEntity = (draft, entityId, entityType, payload) => {
144
159
  const key = getEntityRecommendationKey(entityType, entityId);
@@ -0,0 +1,52 @@
1
+ import { EMPTY } from 'rxjs';
2
+ import { catchError, filter, mergeMap } from 'rxjs/operators';
3
+ import { isSuccessStatus } from '../../responsePayload';
4
+ import { submitRecommendationFeedback } from './recommendationReducer';
5
+ const toRequestBody = (payload) => ({
6
+ line_id: payload.lineId ?? null,
7
+ dimension: payload.dimension,
8
+ recommendation_set_id: payload.recommendationSetId ?? null,
9
+ top_pick_source: payload.topPickSource ?? null,
10
+ shown_recommendations: (payload.shownRecommendations ?? []).map((recommendation) => ({
11
+ source: recommendation.source,
12
+ rank: recommendation.rank,
13
+ value: {
14
+ name: recommendation.value.name,
15
+ id: recommendation.value.id ?? null,
16
+ integration_id: recommendation.value.integrationId ?? null,
17
+ },
18
+ confidence: recommendation.confidence ?? null,
19
+ reasoning: recommendation.reasoning ?? null,
20
+ cot: recommendation.cot ?? [],
21
+ })),
22
+ selected: {
23
+ name: payload.selected.name,
24
+ id: payload.selected.id ?? null,
25
+ integration_id: payload.selected.integrationId ?? null,
26
+ is_new_entity: payload.selected.isNewEntity ?? false,
27
+ },
28
+ matched_source: payload.matchedSource ?? null,
29
+ matched_rank: payload.matchedRank ?? null,
30
+ outcome: payload.outcome,
31
+ reason_text: payload.reasonText ?? null,
32
+ skipped: payload.skipped ?? false,
33
+ retracts_feedback_id: payload.retractsFeedbackId ?? null,
34
+ features: payload.features ?? null,
35
+ });
36
+ // Fire-and-forget: the epic never re-emits an action. Feedback delivery is a
37
+ // side-effect that must not disrupt the categorization UX, so both the
38
+ // success and error paths complete silently (errors are logged for debugging).
39
+ export const submitRecommendationFeedbackEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(submitRecommendationFeedback.match), mergeMap((action) => {
40
+ const { transactionId } = action.payload;
41
+ return zeniAPI
42
+ .postAndGetJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/transactions/${transactionId}/recommendation-feedback`, toRequestBody(action.payload))
43
+ .pipe(mergeMap((response) => {
44
+ if (!isSuccessStatus(response)) {
45
+ console.error('submitRecommendationFeedbackEpic: recommendation feedback was not recorded', response.status);
46
+ }
47
+ return EMPTY;
48
+ }), catchError((error) => {
49
+ console.error('submitRecommendationFeedbackEpic: failed to submit recommendation feedback', error);
50
+ return EMPTY;
51
+ }));
52
+ }));
package/lib/index.d.ts CHANGED
@@ -267,6 +267,7 @@ import { CompanyHealthMetricsLocalData, CompanyHealthViewUIState } from './view/
267
267
  import { fetchCompanyHealthMetricView, initializeCompanyHealthMetricViewLocalData, removeSelectedCompanyId, saveCompanyHealthMetricById, updateLocalStore as updateCompanyHealthMetricLocalStore, updateCompanyHealthMetricViewErrorStatus, updateCompanyHealthMetricViewSuccessStatus, updateCompanyHealthViewUIState } from './view/companyHealthMetricView/companyHealthMetricViewReducer';
268
268
  import { CompanyDetailWithHealthMetric, CompanyHealthMetricDropDownOption, CompanyHealthMetricViewSelector, ProductServiceKey, ProductServices, companyHealthMetricDropDownOptions, getCompanyHealthMetricView, hasCompanyHealthMetricFormFieldChanged, isCompanyRunwayInfinite } from './view/companyHealthMetricView/companyHealthMetricViewSelector';
269
269
  import { fetchCompanyMonthEndReportHistoricData, fetchCompanyMonthEndReportHistoricDates, fetchCompanyMonthEndReportTemplates, fetchCompanyMonthEndReportView, fetchImproveUsingZeniGPT, resetCompanyMonthEndReportFetchStatus, resetSendCompanyMonthEndReportFetchStatus, saveCompanyMonthEndReport, sendCompanyMonthEndReport } from './view/companyMonthEndReportView/companyMonthEndReportViewReducer';
270
+ import { AgentInsightEdits, MonthEndTemplateData } from './view/companyMonthEndReportView/companyMonthEndReportViewPayload';
270
271
  import { CompanyMonthEndReportHistoricDataSelectorView, CompanyMonthEndReportSelectorView, getCompanyMonthEndReportHistoricData, getCompanyMonthEndReportSelectorView } from './view/companyMonthEndReportView/companyMonthEndReportViewSelector';
271
272
  import { AuditSummaryData, CompanyMonthEndReportData, CompanyMonthReportTemplates, TemplatesList } from './view/companyMonthEndReportView/companyMonthEndReportViewState';
272
273
  import { fetchCockpitContext, fetchCompanyTaskManagerView, fetchTaskManagerMetrics, updateCompanyTaskManagerViewFilters } from './view/companyTaskManagerView/companyTaskManagerViewReducer';
@@ -320,12 +321,12 @@ import { getExpenseAutomationTransactionView, getLastTransferEntryReplacement }
320
321
  import { applyTransactionFilters } from './view/expenseAutomationView/transactionFilterHelpers';
321
322
  import { TRANSACTION_FILTER_CATEGORIES, TransactionFilterAmountMatchingOperator, TransactionFilterCategory, TransactionFilterCategoryDropdownOption, TransactionFilterCategoryField, TransactionFilterEntityType, TransactionFilters } from './view/expenseAutomationView/transactionFilterTypes';
322
323
  import { CompletedSubTab, DEFAULT_COMPLETED_SUB_TAB, toCompletedSubTab } from './view/expenseAutomationView/types/completedSubTab';
323
- import { DEFAULT_TRANSACTION_GROUP, TRANSACTION_GROUPS, TransactionGroup, toTransactionGroup } from './view/expenseAutomationView/types/transactionGroup';
324
324
  import { FluxAnalysisActionType, FluxAnalysisReviewStatus, FluxAnalysisSectionType, FluxAnalysisSortKey, FluxAnalysisViewUIState, FluxBalancesByMonth } from './view/expenseAutomationView/types/fluxAnalysisViewState';
325
325
  import { AccountSettingsLocalData, JEScheduleMainTab as ExpenseAutomationJEScheduleMainTab, JEScheduleSortKey as ExpenseAutomationJEScheduleSortKey, JESchedulesViewUIState as ExpenseAutomationJESchedulesViewUIState, JEScheduleLocalData, toJEScheduleMainTab as toExpenseAutomationJEScheduleMainTab, toJEScheduleSortKey as toExpenseAutomationJEScheduleSortKey } from './view/expenseAutomationView/types/jeSchedulesViewState';
326
326
  import { BATCH_FILE_STATUSES, BatchDetails, BatchFile, BatchFileStatus, BatchListItem, BatchStatus, BatchStatusValue, BatchSummary, BulkUploadPhase, BulkUploadResultsTab, BulkUploadSortKey, BulkUploadState, CandidateRef, MatchCandidate, MatchSource, MissingReceiptsTab, isUnmatchedTabFileStatus, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toMatchSource, toMissingReceiptsTab } from './view/expenseAutomationView/types/missingReceiptsViewState';
327
327
  import { MissingReceiptsSortKey as ExpenseAutomationMissingReceiptsSortKey, MissingReceiptsViewState as ExpenseAutomationMissingReceiptsViewState, MissingReceiptsViewUIState as ExpenseAutomationMissingReceiptsViewUIState, toMissingReceiptsSortKey as toExpenseAutomationMissingReceiptsSortKey } from './view/expenseAutomationView/types/missingReceiptsViewState';
328
328
  import { AccountReconciliationLocalData, CombinedStatementAccount, ExcludeAccountFromReconciliationPayload, ReconciliationViewTabType as ExpenseAutomationReconciliationViewTab, ParsedStatementData, ReconReconcileSortKey, ReconReviewSortKey, ReconciliationReconcileTabLocalData, ReconciliationReviewTabLocalData, SaveReconcileDetailActionPayload as SaveExpenseAutomationReconciliationActionType, StatementAccountScope, StatementDateConflict, StatementMeta, StatementTransaction, StatementTransactionForUpdate, StatementTransactionsUpdate, StatementUpdateLocalData, toReconciliationTabsType } from './view/expenseAutomationView/types/reconciliationViewState';
329
+ import { DEFAULT_TRANSACTION_GROUP, TRANSACTION_GROUPS, TransactionGroup, toTransactionGroup } from './view/expenseAutomationView/types/transactionGroup';
329
330
  import { TransactionsTab as ExpenseAutomationTransactionsTab, TransactionsViewState as ExpenseAutomationTransactionsViewState, TransactionsViewUIState as ExpenseAutomationTransactionsViewUIState, SupportedTransactionCategorization, TransactionCategorizationLineItemData, TransactionReviewLocalData, TransactionsSortKey, TransactionsTab, toTransactionsTabKey as toExpenseAutomationTransactionsTabKey, toTransactionsSortKey } from './view/expenseAutomationView/types/transactionsViewState';
330
331
  import { fetchRegisteredInterests, notifyMeForFeature } from './view/featureNotificationView/featureNotificationViewReducer';
331
332
  import { getFeatureNotificationView, getRegisteredInterests, getRegisteredInterestsByFeature, isFeatureInterestRegistered } from './view/featureNotificationView/featureNotificationViewSelector';
@@ -415,7 +416,7 @@ import { ProfitAndLossProjectViewReport } from './view/profitAndLossProjectView/
415
416
  import { ProfitAndLossProjectViewUIState } from './view/profitAndLossProjectView/profitAndLossProjectViewState';
416
417
  import { fetchProjectList } from './view/projectList/projectListReducer';
417
418
  import { ProjectListSelectorView, getProjectList } from './view/projectList/projectListSelector';
418
- import { fetchEntityRecommendationsByTransactionId, fetchEntityRecommendationsForLineUpdate, fetchRecommendationByEntityId, fetchRecommendationByEntityName } from './view/recommendation/recommendationReducer';
419
+ import { fetchEntityRecommendationsByTransactionId, fetchEntityRecommendationsForLineUpdate, fetchRecommendationByEntityId, fetchRecommendationByEntityName, submitRecommendationFeedback } from './view/recommendation/recommendationReducer';
419
420
  import { DEFAULT_REFERRER_AMOUNT, clearReferrals, fetchReferrals, fetchRewardsPlan, resendReferralInvite, saveReferralFormDataInLocalStore, sendReferralInvite, updateReferViewed, updateReferralListSortUiState } from './view/referralView/referralReducer';
420
421
  import { ReferralListSelectorView, RewardsPlanCardReport, getInviteFormView, getReferralListView, getRewardsPlanCard } from './view/referralView/referralSelector';
421
422
  import { AmountStatusTypes, InviteCompanyLocalData, ReferralAmountStatus, ReferralInvitation, ReferralListViewSortKey, ReferralStatus, ReferralViewState, ReferralViewUIState, RewardsPlanData, StatusTypes, toReferralListViewSortKeyType } from './view/referralView/referralState';
@@ -830,7 +831,7 @@ export { companyManagementSaveUpdates, fetchAllCockpitViews, fetchCompanyManagem
830
831
  export { fetchReviewCompanyView, updateReviewCompanyListUIState, ReviewCompanyListUIState, ReviewCompanyView, ReviewCompanyColumnKey, ReviewTransactionsType, ReviewCompanySelectorView, getReviewCompanySelectorView, getReviewCompanyListCount, toReviewColumnKeyType, retryBankAccountConnection, AuditSummary, getAuditWarningsCount, };
831
832
  export { CompanyPortfolioView, getCompanyPortfolioView, isInfiniteRunway };
832
833
  export { AllCockpitTabsView, getAllCockpitTabsFilterView };
833
- export { AuditSummaryData, fetchImproveUsingZeniGPT, fetchCompanyMonthEndReportView, sendCompanyMonthEndReport, saveCompanyMonthEndReport, resetCompanyMonthEndReportFetchStatus, resetSendCompanyMonthEndReportFetchStatus, getCompanyMonthEndReportSelectorView, CompanyMonthEndReportSelectorView, fetchCompanyMonthEndReportHistoricDates, fetchCompanyMonthEndReportHistoricData, fetchCompanyMonthEndReportTemplates, getCompanyMonthEndReportHistoricData, CompanyMonthEndReportHistoricDataSelectorView, CompanyMonthEndReportData, TemplatesList, CompanyMonthReportTemplates, };
834
+ export { AuditSummaryData, fetchImproveUsingZeniGPT, fetchCompanyMonthEndReportView, sendCompanyMonthEndReport, saveCompanyMonthEndReport, resetCompanyMonthEndReportFetchStatus, resetSendCompanyMonthEndReportFetchStatus, getCompanyMonthEndReportSelectorView, CompanyMonthEndReportSelectorView, AgentInsightEdits, MonthEndTemplateData, fetchCompanyMonthEndReportHistoricDates, fetchCompanyMonthEndReportHistoricData, fetchCompanyMonthEndReportTemplates, getCompanyMonthEndReportHistoricData, CompanyMonthEndReportHistoricDataSelectorView, CompanyMonthEndReportData, TemplatesList, CompanyMonthReportTemplates, };
834
835
  export { Runway, AccountingSummary };
835
836
  export { newAddressInLocalStore, getAddress, getNewAddress, getAllNewAddresses, getFormattedAddress, fetchAddress, AddressType, NewAddressData, AddressUpdatableInfo, createAddress, removeNewAddressDataInLocalStore, };
836
837
  export { CockpitFilterCategory, CockpitFilters, DownloadCockpitTabOptions, FilterCombinationsByTabs, HealthViewSortKey, ManagementViewFilterCategoryField, ManagementViewSortKey, OnboardingViewSortKey, PortfolioViewFilterCategoryField, HealthMonitorViewFilterCategoryField, TaskManagerViewFilterCategoryField, PortfolioViewSortKey, SubscriptionViewFilterCategoryField, toManagementSortKeyType, toOnboardingSortKeyType, toPortfolioSortKeyType, toHealthSortKeyType, TaskGroupScope, TaskManagerViewSortKey, toTaskManagerSortKeyType, updateCompanyTaskManagerViewFilters, };
@@ -903,8 +904,9 @@ export { Filing1099TinType };
903
904
  export { BillPayCardReport };
904
905
  export { ReimbursementCardReport };
905
906
  export { VendorListViewSortKey, VendorViewUIState, VendorListSelectorView, VendorListQuery, getVendorList, VendorListView, updateSortUiState, updatePageToken, updateYTDSelectionUIState, VendorListViewYTDSpendSortKey, isColumnYTDSpend, isVendorsTabVisible, VendorViewType, VendorReportIDType, toVendorReportIDType, VendorFiling1099ListSelectorView, getVendorFiling1099List, VendorFiling1099ListViewSortKey, VendorFiling1099ViewUIState, VendorFiling1099DownloadData, fetchVendorsFiling1099Download, Type1099Download, VendorFiling1099DownloadDataForType, };
906
- export { fetchEntityRecommendationsByTransactionId, fetchEntityRecommendationsForLineUpdate, fetchRecommendationByEntityId, fetchRecommendationByEntityName, };
907
+ export { fetchEntityRecommendationsByTransactionId, fetchEntityRecommendationsForLineUpdate, fetchRecommendationByEntityId, fetchRecommendationByEntityName, submitRecommendationFeedback, };
907
908
  export type { FetchEntityRecommendationsForLineUpdatePayload, RecommendationLineUpdateFlowType, } from './view/recommendation/recommendationReducer';
909
+ export type { RecommendationFeedbackDimension, RecommendationFeedbackOutcome, RecommendationFeedbackSource, RecommendationFeedbackValue, ShownRecommendationForFeedback, SubmitRecommendationFeedbackPayload, } from './view/recommendation/recommendationPayload';
908
910
  export { fetchOwnerList };
909
911
  export { ZeniAccountsConfigSelectorView, getZeniAccountsConfigDetail, ZeniAccountListSelectorView, getZeniAccountList, fetchZeniAccountList, fetchAccountList, DepositAccount, createCheckingAccount, fetchPaymentAccountList, unlinkPaymentAccount, getDepositAccountDetail, DepositAccountDetailSelectorView, DepositAccountListSelectorView, getAllDepositAccounts, getDepositAccountDetailForPDF, DepositAccountDetailForPDF, fetchDepositAccount, fetchZeniAccountsConfig, AccountHistoryWithBalances, TransferDetailLocalData, ReviewTransferDetail, updateTransferMoneyLocalData, updateTransferToLocalData, updateDepositToLocalData, transferMoney, getTransferDetail, TransferDetailSelectorView, clearTransferDetail, clearReviewTransferDetail, fetchReviewTransferDetail, fetchDepositAccountDetail, DepositAccountTransaction, DepositAccountWithAutoTransferRules, DepositTransactionStatusCode, DepositTransactionStatus, CheckDepositLocalData, depositCheck, updateCheckDepositLocalData, clearCheckDeposit, CheckDepositSelectorView, getCheckDepositDetail, updateDepositAccount, fetchDepositAccountHistorySuccess, fetchDepositAccountHistoryFailure, DepositAccountUpdateType, ZeniAccountSummaryWithBalance, fetchZeniAccStatementPage, getZeniAccStatements, ZeniAccStatementsSelectorView, ZeniAccountPaymentMethod, };
910
912
  export { CommonHistoryView, HistoricEvent, HistoricEventUpdate, ActivityHistorySelectorView, };
@@ -1235,10 +1237,12 @@ export { getInvoicingCatalogItemDetail } from './view/invoicing/invoicingCatalog
1235
1237
  export { getInvoicingPlanById } from './entity/invoicing/plan/planSelector';
1236
1238
  export { getInvoicingProductById } from './entity/invoicing/product/productSelector';
1237
1239
  export type { InvoicingCatalogItemDetailView } from './view/invoicing/invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewSelector';
1238
- export { connectInvoicingStripe, disconnectInvoicingStripe, fetchInvoicingSettings, resetInvoicingBrandingFormDraft, resetSaveInvoicingSettings, saveInvoicingSettings, submitInvoicingBrandingForm, updateInvoicingBrandingFormDraft, updateInvoicingSettings, } from './view/invoicing/settingsView/settingsViewReducer';
1239
- export { getInvoicingBrandingFormView, getInvoicingSettings, getInvoicingSettingsFetchState, getInvoicingSettingsHubView, getInvoicingSettingsView, } from './view/invoicing/settingsView/settingsViewSelector';
1240
- export type { InvoicingBrandingFormView, InvoicingSettingsHubView, InvoicingSettingsView, } from './view/invoicing/settingsView/settingsViewSelector';
1240
+ export { connectInvoicingStripe, disconnectInvoicingStripe, fetchInvoicingSettings, resetInvoicingBrandingFormDraft, resetInvoicingQboSettingsDraft, resetSaveInvoicingSettings, saveInvoicingSettings, submitInvoicingBrandingForm, submitInvoicingQboSettings, updateInvoicingBrandingFormDraft, updateInvoicingQboSettingsDraft, updateInvoicingSettings, } from './view/invoicing/settingsView/settingsViewReducer';
1241
+ export { getInvoicingBrandingFormView, getInvoicingQboSettingsFormView, getInvoicingSettings, getInvoicingSettingsFetchState, getInvoicingSettingsHubView, getInvoicingSettingsView, } from './view/invoicing/settingsView/settingsViewSelector';
1242
+ export type { InvoicingBrandingFormView, InvoicingQboSettingsFormView, InvoicingSettingsHubView, InvoicingSettingsView, } from './view/invoicing/settingsView/settingsViewSelector';
1241
1243
  export type { InvoicingBrandingFormLocalData } from './view/invoicing/settingsView/invoicingBrandingFormConfig';
1244
+ export type { InvoicingQboSettingsLocalData } from './view/invoicing/settingsView/invoicingQboSettingsFormConfig';
1245
+ export { entityToInvoicingQboSettingsLocalData, initialInvoicingQboSettingsLocalData, invoicingQboSettingsLocalDataToPayload, } from './view/invoicing/settingsView/invoicingQboSettingsFormConfig';
1242
1246
  export { INVOICING_BUSINESS_ADDRESS_TYPE, entityToInvoicingBrandingFormLocalData, initialInvoicingBrandingFormLocalData, } from './view/invoicing/settingsView/invoicingBrandingFormConfig';
1243
1247
  export { isStripeConnectedFromSettings } from './view/invoicing/settingsView/invoicingSettingsHelpers';
1244
1248
  export { fetchInvoicingAccountingPickers, fetchInvoicingQboConnection, fetchInvoicingQboSyncHealth, retryInvoicingQboSyncTask, startInvoicingQboBackfill, } from './view/invoicing/invoicingQboView/invoicingQboViewReducer';
@@ -1247,7 +1251,7 @@ export type { InvoicingAccountingOption } from './view/invoicing/invoicingQboVie
1247
1251
  export { getInvoicingQboView } from './view/invoicing/invoicingQboView/invoicingQboViewSelector';
1248
1252
  export type { InvoicingQboView } from './view/invoicing/invoicingQboView/invoicingQboViewSelector';
1249
1253
  export type { InvoicingQboConnection, InvoicingQboFailedTask, InvoicingQboSyncHealth, } from './view/invoicing/invoicingQboView/invoicingQboViewPayload';
1250
- export { INVOICING_QBO_CUSTOMER_MATCHING_MODES, getInvoicingQboAccountMappingId, toInvoicingNamedOptionsByKey, toInvoicingQboCustomerMatchingMode, withInvoicingQboAccountMappingId, } from './entity/invoicing/invoicingCommonPayload';
1254
+ export { INVOICING_QBO_CUSTOMER_MATCHING_MODES, getInvoicingQboAccountMappingId, toInvoicingNamedOptionsByKey, toInvoicingQboCustomerMatchingMode, } from './entity/invoicing/invoicingCommonPayload';
1251
1255
  export type { InvoicingNamedOption, InvoicingFieldHelp, InvoicingFieldHelpByCode, InvoicingFieldHelpGroup, InvoicingNamedOptionsByKey, InvoicingQboAccountMappingKindOption, InvoicingQboAccountMappingsPayload, InvoicingQboCustomerMatchingMode, InvoicingQboSettingsPayload, } from './entity/invoicing/invoicingCommonPayload';
1252
1256
  export { acceptInvoicingTerms, enableInvoicing, fetchInvoicingConfig, resetInvoicingConfigActionStates, updateInvoicingConfig, } from './view/invoicing/invoicingConfigView/invoicingConfigViewReducer';
1253
1257
  export { getInvoicingConfigView } from './view/invoicing/invoicingConfigView/invoicingConfigViewSelector';