@zeniai/client-epic-state 5.1.42-betaDI4 → 5.1.42

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/snackbar/snackbarTypes.d.ts +1 -1
  2. package/lib/entity/snackbar/snackbarTypes.js +1 -1
  3. package/lib/entity/task/taskPayload.d.ts +1 -2
  4. package/lib/entity/task/taskPayload.js +1 -8
  5. package/lib/entity/task/taskReducer.d.ts +1 -8
  6. package/lib/entity/task/taskReducer.js +4 -29
  7. package/lib/entity/task/taskState.d.ts +0 -1
  8. package/lib/entity/tenant/epic/saveExternalConnectionEpic.js +15 -11
  9. package/lib/epic.d.ts +3 -5
  10. package/lib/epic.js +3 -5
  11. package/lib/esm/entity/snackbar/snackbarTypes.js +1 -1
  12. package/lib/esm/entity/task/taskPayload.js +1 -8
  13. package/lib/esm/entity/task/taskReducer.js +3 -28
  14. package/lib/esm/entity/tenant/epic/saveExternalConnectionEpic.js +15 -11
  15. package/lib/esm/epic.js +3 -5
  16. package/lib/esm/index.js +7 -7
  17. package/lib/esm/view/companyTaskManagerView/epics/fetchCompanyTaskManagerViewEpic.js +0 -3
  18. package/lib/esm/view/companyTaskManagerView/epics/fetchTaskManagerMetricsEpic.js +1 -7
  19. package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +7 -0
  20. package/lib/esm/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +0 -1
  21. package/lib/esm/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +9 -70
  22. package/lib/esm/view/taskManager/taskDetailView/taskDetailReducer.js +2 -56
  23. package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +9 -32
  24. package/lib/esm/view/taskManager/taskListView/epics/fetchTaskListEpic.js +1 -3
  25. package/lib/esm/view/taskManager/taskListView/taskList.js +0 -1
  26. package/lib/esm/view/taskManager/taskListView/taskListReducer.js +12 -240
  27. package/lib/esm/view/taskManager/taskListView/taskListSelector.js +0 -1
  28. package/lib/esm/view/taskManager/taskListView/taskListViewHelpers.js +0 -58
  29. package/lib/esm/view/transactionDetail/epics/saveTransactionHelper.js +22 -0
  30. package/lib/esm/view/transactionDetail/epics/updateTransactionDetailEpic.js +75 -3
  31. package/lib/esm/view/transactionDetail/journalEntryLinesViewModel.js +58 -0
  32. package/lib/esm/view/transactionDetail/transactionDetailLocalDataHelper.js +10 -8
  33. package/lib/esm/view/transactionDetail/transactionDetailReducer.js +66 -1
  34. package/lib/index.d.ts +10 -10
  35. package/lib/index.js +25 -25
  36. package/lib/view/companyTaskManagerView/epics/fetchCompanyTaskManagerViewEpic.js +0 -3
  37. package/lib/view/companyTaskManagerView/epics/fetchTaskManagerMetricsEpic.js +1 -7
  38. package/lib/view/companyView/types/cockpitTypes.d.ts +0 -3
  39. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  40. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +7 -0
  41. package/lib/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +0 -1
  42. package/lib/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.d.ts +2 -2
  43. package/lib/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +8 -69
  44. package/lib/view/taskManager/taskDetailView/taskDetail.d.ts +0 -15
  45. package/lib/view/taskManager/taskDetailView/taskDetailReducer.d.ts +2 -14
  46. package/lib/view/taskManager/taskDetailView/taskDetailReducer.js +3 -57
  47. package/lib/view/taskManager/taskDetailView/taskDetailSelector.d.ts +1 -2
  48. package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +7 -30
  49. package/lib/view/taskManager/taskListView/epics/fetchTaskListEpic.js +1 -3
  50. package/lib/view/taskManager/taskListView/taskList.d.ts +1 -1
  51. package/lib/view/taskManager/taskListView/taskList.js +0 -1
  52. package/lib/view/taskManager/taskListView/taskListPayload.d.ts +0 -4
  53. package/lib/view/taskManager/taskListView/taskListReducer.d.ts +2 -6
  54. package/lib/view/taskManager/taskListView/taskListReducer.js +13 -241
  55. package/lib/view/taskManager/taskListView/taskListSelector.js +0 -1
  56. package/lib/view/taskManager/taskListView/taskListViewHelpers.d.ts +0 -11
  57. package/lib/view/taskManager/taskListView/taskListViewHelpers.js +1 -60
  58. package/lib/view/transactionDetail/epics/saveTransactionHelper.js +22 -0
  59. package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.d.ts +5 -1
  60. package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.js +77 -4
  61. package/lib/view/transactionDetail/journalEntryLinesViewModel.d.ts +27 -0
  62. package/lib/view/transactionDetail/journalEntryLinesViewModel.js +61 -1
  63. package/lib/view/transactionDetail/transactionDetailLocalDataHelper.js +10 -8
  64. package/lib/view/transactionDetail/transactionDetailReducer.d.ts +11 -2
  65. package/lib/view/transactionDetail/transactionDetailReducer.js +67 -2
  66. package/lib/view/transactionDetail/transactionDetailState.d.ts +8 -1
  67. package/lib/view/transactionDetail/transactionDetailTypes.d.ts +2 -0
  68. package/package.json +1 -1
  69. package/lib/esm/view/taskManager/taskDetailView/epics/createSubTaskEpic.js +0 -96
  70. package/lib/esm/view/taskManager/taskDetailView/epics/fetchSubTasksEpic.js +0 -53
  71. package/lib/view/taskManager/taskDetailView/epics/createSubTaskEpic.d.ts +0 -9
  72. package/lib/view/taskManager/taskDetailView/epics/createSubTaskEpic.js +0 -100
  73. package/lib/view/taskManager/taskDetailView/epics/fetchSubTasksEpic.d.ts +0 -8
  74. package/lib/view/taskManager/taskDetailView/epics/fetchSubTasksEpic.js +0 -57
@@ -58,7 +58,9 @@ export const updateTransactionDetailEpic = (actions$, state$, zeniAPI) => action
58
58
  if (response.data.vendors != null) {
59
59
  actions.push(updateVendors(response.data.vendors, 'merge'));
60
60
  }
61
- actions.push(updateTransaction(transactionDetailKeyForResponse, response.data.transaction));
61
+ // 'replace' so deleted lines are removed from Redux; 'merge' would
62
+ // keep any line absent from the server response (deletion bug).
63
+ actions.push(updateTransaction(transactionDetailKeyForResponse, response.data.transaction, 'replace'));
62
64
  actions.push(initializeTransactionDetailLocalData({
63
65
  transactionId: transactionIdResp,
64
66
  vendorId: response.data.vendors?.[0]?.vendor_id,
@@ -159,7 +161,7 @@ function preparePayload(transactionState, vendorState, transactionDetailState, t
159
161
  };
160
162
  }
161
163
  if (detail != null) {
162
- const transUpdates = toTransactionUpdatePayload(saveUpdates.updates, detail, cotTransactionTracking, isAccountingProjectsEnabled, vendorUpdates, customerUpdates, currentSelectedEntity);
164
+ const transUpdates = toTransactionUpdatePayload(saveUpdates.updates, detail, cotTransactionTracking, isAccountingProjectsEnabled, vendorUpdates, customerUpdates, currentSelectedEntity, saveUpdates.deletedLineIds, saveUpdates.addedLines);
163
165
  const entityUpdates = toEntityUpdatePayload(saveUpdates.entityRelatedUpdates);
164
166
  return {
165
167
  entity_related_updates: entityUpdates,
@@ -169,7 +171,7 @@ function preparePayload(transactionState, vendorState, transactionDetailState, t
169
171
  }
170
172
  return undefined;
171
173
  }
172
- export const toTransactionUpdatePayload = (updates, detail, cotTransactionTracking, isAccountingProjectsEnabled, vendorUpdates, customerUpdates, tranSelectedEntity) => {
174
+ export const toTransactionUpdatePayload = (updates, detail, cotTransactionTracking, isAccountingProjectsEnabled, vendorUpdates, customerUpdates, tranSelectedEntity, deletedLineIds, addedLines) => {
173
175
  const transaction = Object.assign({}, detail);
174
176
  transaction.memo = updates.memo ?? '';
175
177
  // Unlike `memo` (always reset to '' when absent), `documentId` falls back to
@@ -178,6 +180,11 @@ export const toTransactionUpdatePayload = (updates, detail, cotTransactionTracki
178
180
  // either the unchanged current value or undefined, and we must not send an
179
181
  // empty `document_id` that the server would treat as clearing the number.
180
182
  transaction.documentId = updates.documentId ?? transaction.documentId;
183
+ // Remove lines deleted by the user in edit mode before patching or serializing.
184
+ if (deletedLineIds != null && deletedLineIds.length > 0) {
185
+ const deletedSet = new Set(deletedLineIds);
186
+ transaction.lines = transaction.lines?.filter((line) => !deletedSet.has(line.id));
187
+ }
181
188
  const recommendationUpdates = {};
182
189
  for (const key in updates.updatesByLineId) {
183
190
  const lineUpdates = updates.updatesByLineId[key];
@@ -185,6 +192,9 @@ export const toTransactionUpdatePayload = (updates, detail, cotTransactionTracki
185
192
  if (line.id === key) {
186
193
  const lineTobeUpdated = Object.assign({}, line);
187
194
  lineTobeUpdated.lineDescription = lineUpdates.lineDescription ?? '';
195
+ if (lineUpdates.amount != null) {
196
+ lineTobeUpdated.amount = lineUpdates.amount;
197
+ }
188
198
  if (lineUpdates.class != null) {
189
199
  lineTobeUpdated.class = lineUpdates.class;
190
200
  }
@@ -206,6 +216,16 @@ export const toTransactionUpdatePayload = (updates, detail, cotTransactionTracki
206
216
  else {
207
217
  lineTobeUpdated.vendor = undefined;
208
218
  }
219
+ // Persist a debit↔credit flip on an existing JE line. `lineTobeUpdated`
220
+ // is typed as the account-and-class shape, but for a JE the runtime
221
+ // object is a JournalEntryTransactionLine, so cast to set the side.
222
+ if (lineUpdates.postingType != null) {
223
+ const journalEntryLine = lineTobeUpdated;
224
+ journalEntryLine.postingType = lineUpdates.postingType;
225
+ if (lineUpdates.postingTypeName != null) {
226
+ journalEntryLine.postingTypeName = lineUpdates.postingTypeName;
227
+ }
228
+ }
209
229
  if (lineUpdates.recommendation != null) {
210
230
  recommendationUpdates[line.id] = lineUpdates.recommendation;
211
231
  }
@@ -225,6 +245,12 @@ export const toTransactionUpdatePayload = (updates, detail, cotTransactionTracki
225
245
  });
226
246
  transaction.lines = newLineMap;
227
247
  }
248
+ // Append lines added by the user in edit mode. Sending id='' tells the
249
+ // backend to create a new QBO line rather than updating an existing one.
250
+ if (addedLines != null && addedLines.length > 0) {
251
+ const newLines = addedLines.map(toNewTransactionLine);
252
+ transaction.lines = [...(transaction.lines ?? []), ...newLines];
253
+ }
228
254
  transaction.recommendations = recommendationUpdates;
229
255
  // Convert transaction to payload first
230
256
  let basePayload;
@@ -299,6 +325,52 @@ const checkIfVendorOrCustomerMissingForAnyLineItem = (transactionPayload) => {
299
325
  }
300
326
  return isAnyVendorOrCustomerMissing;
301
327
  };
328
+ // Converts a locally-created line item (from edit mode) into the wire shape
329
+ // expected by the categorize endpoint. Sending id='' signals the backend to
330
+ // create a new QBO line rather than update an existing one.
331
+ //
332
+ // Type-dispatched so each transaction family contributes its own new-line
333
+ // shape: journal entries carry debit/credit `postingType`, expenses carry
334
+ // `billable`. Phase 3 types extend this by adding a branch rather than forking
335
+ // the function.
336
+ const EMPTY_ACCOUNT = {
337
+ accountDescription: '',
338
+ accountId: '',
339
+ accountName: '',
340
+ labels: [],
341
+ };
342
+ export const toNewTransactionLine = (item) => {
343
+ if (item.type === 'journal_entry_transaction_line') {
344
+ const journalEntryLine = {
345
+ ...item,
346
+ id: '',
347
+ type: 'journal_entry_transaction_line',
348
+ platformLineDetailType: item.platformLineDetailType ?? 'journal_entry_line_detail',
349
+ account: item.account ?? EMPTY_ACCOUNT,
350
+ billable: item.billable ?? 'not_billable',
351
+ isCategoryMiscategorized: false,
352
+ isClassMiscategorized: false,
353
+ lineTransactionType: item.lineTransactionType ?? 'journal_entry',
354
+ postingType: item.postingType ?? 'debit',
355
+ postingTypeName: item.postingTypeName != null && item.postingTypeName !== ''
356
+ ? item.postingTypeName
357
+ : (item.postingType ?? 'debit').charAt(0).toUpperCase() +
358
+ (item.postingType ?? 'debit').slice(1),
359
+ };
360
+ return journalEntryLine;
361
+ }
362
+ const accountAndClassLine = {
363
+ ...item,
364
+ id: '',
365
+ type: 'transaction_with_account_and_class_line',
366
+ platformLineDetailType: item.platformLineDetailType ?? 'account_based_expense_line_detail',
367
+ account: item.account ?? EMPTY_ACCOUNT,
368
+ billable: item.billable ?? 'not_billable',
369
+ isCategoryMiscategorized: false,
370
+ isClassMiscategorized: false,
371
+ };
372
+ return accountAndClassLine;
373
+ };
302
374
  const toEntityUpdatePayload = (entityUpdates) => {
303
375
  const entityUpdatesPayload = [];
304
376
  let entityKey;
@@ -1,3 +1,4 @@
1
+ import Big from 'big.js';
1
2
  import orderBy from 'lodash/orderBy';
2
3
  import { stringToUnion } from '../../commonStateTypes/stringToUnion';
3
4
  import { LINE_TYPE_LINKED, } from '../../entity/transaction/stateTypes/transactionLine';
@@ -101,6 +102,63 @@ export const journalEntryTotalsByPostingSide = (lines) => {
101
102
  };
102
103
  };
103
104
  // ---------------------------------------------------------------------------
105
+ // Split reconciliation & validation (Phase 2 — JE split)
106
+ // ---------------------------------------------------------------------------
107
+ // Half-cent tolerance for the balance equality checks, matching the expense
108
+ // reconciliation row's epsilon. Sums use big.js so repeated decimal addition
109
+ // doesn't drift before the comparison.
110
+ const JOURNAL_ENTRY_BALANCE_EPSILON = 0.005;
111
+ /**
112
+ * Sums debit and credit sides (big.js-exact) and reports whether the split is
113
+ * balanced: total debits equal total credits AND equal the original
114
+ * transaction total. The original total of a valid JE equals its total debits,
115
+ * so it is passed in by the caller (`transaction.amount.amount`).
116
+ */
117
+ export const journalEntrySplitReconciliation = (lines, originalTotal) => {
118
+ let debit = new Big(0);
119
+ let credit = new Big(0);
120
+ for (const line of lines) {
121
+ const amount = new Big(line.amount?.amount ?? 0);
122
+ if (line.postingType === 'debit') {
123
+ debit = debit.plus(amount);
124
+ }
125
+ else if (line.postingType === 'credit') {
126
+ credit = credit.plus(amount);
127
+ }
128
+ }
129
+ const balancedToEachOther = debit
130
+ .minus(credit)
131
+ .abs()
132
+ .lt(JOURNAL_ENTRY_BALANCE_EPSILON);
133
+ const balancedToOriginal = debit
134
+ .minus(originalTotal)
135
+ .abs()
136
+ .lt(JOURNAL_ENTRY_BALANCE_EPSILON);
137
+ return {
138
+ debitTotal: debit.toNumber(),
139
+ creditTotal: credit.toNumber(),
140
+ isBalanced: balancedToEachOther && balancedToOriginal,
141
+ };
142
+ };
143
+ /**
144
+ * Save-time validation for a JE split (Figma `4165:33028` / `4165:45379`):
145
+ * 1. every line needs a non-zero debit or credit, and
146
+ * 2. total debits == total credits == original total.
147
+ * Returns the first failing rule's `errorKey` (maps to a strings entry). Does
148
+ * NOT require category/class to be chosen — balance is the only gate.
149
+ */
150
+ export const validateJournalEntrySplit = (lines, originalTotal) => {
151
+ const everyLineHasSide = lines.every((line) => (line.postingType === 'debit' || line.postingType === 'credit') &&
152
+ Math.abs(line.amount?.amount ?? 0) > JOURNAL_ENTRY_BALANCE_EPSILON);
153
+ if (!everyLineHasSide) {
154
+ return { ok: false, errorKey: 'lineNeedsDebitOrCredit' };
155
+ }
156
+ if (!journalEntrySplitReconciliation(lines, originalTotal).isBalanced) {
157
+ return { ok: false, errorKey: 'totalsMustEqual' };
158
+ }
159
+ return { ok: true };
160
+ };
161
+ // ---------------------------------------------------------------------------
104
162
  // Filter
105
163
  // ---------------------------------------------------------------------------
106
164
  /**
@@ -823,14 +823,16 @@ export const getChangedLineItemCountFromLocalData = (transaction, transactionLoc
823
823
  line.type === 'transaction_with_product_or_service_line' ||
824
824
  line.type === 'journal_entry_transaction_line') {
825
825
  const accountLineLocal = transactionLocalData.lineItemById[lineId];
826
- const accountLine = line;
827
- hasCategoryChanged =
828
- accountLineLocal.account?.qboId !== accountLine.account.qboId &&
829
- accountLineLocal.account?.accountId !== accountLine.account.accountId;
830
- hasClassChanged =
831
- (accountLineLocal.class?.qboId != null ||
832
- accountLine.class?.qboId != null) &&
833
- accountLineLocal.class?.qboId !== accountLine.class?.qboId;
826
+ if (accountLineLocal != null) {
827
+ const accountLine = line;
828
+ hasCategoryChanged =
829
+ accountLineLocal.account?.qboId !== accountLine.account.qboId &&
830
+ accountLineLocal.account?.accountId !== accountLine.account.accountId;
831
+ hasClassChanged =
832
+ (accountLineLocal.class?.qboId != null ||
833
+ accountLine.class?.qboId != null) &&
834
+ accountLineLocal.class?.qboId !== accountLine.class?.qboId;
835
+ }
834
836
  }
835
837
  hasDescriptionChanged =
836
838
  transactionLocalData.lineItemById[lineId] != null
@@ -663,6 +663,71 @@ const transactionDetail = createSlice({
663
663
  };
664
664
  },
665
665
  },
666
+ // Split transaction — Phase 1 (expense)
667
+ addSplitLine: {
668
+ reducer(draft, action) {
669
+ const key = getTransactionDetailKey(action.payload.transactionId);
670
+ const detail = recordGet(draft.transactionDetailById, key, undefined);
671
+ if (detail != null) {
672
+ draft.transactionDetailById[key] = {
673
+ ...detail,
674
+ transactionDetailLocalData: {
675
+ ...detail.transactionDetailLocalData,
676
+ lineItemById: {
677
+ ...detail.transactionDetailLocalData.lineItemById,
678
+ [action.payload.newLine.id]: action.payload.newLine,
679
+ },
680
+ },
681
+ };
682
+ }
683
+ },
684
+ prepare(transactionId, newLine) {
685
+ return { payload: { transactionId, newLine } };
686
+ },
687
+ },
688
+ deleteSplitLine: {
689
+ reducer(draft, action) {
690
+ const key = getTransactionDetailKey(action.payload.transactionId);
691
+ const detail = recordGet(draft.transactionDetailById, key, undefined);
692
+ if (detail == null) {
693
+ return;
694
+ }
695
+ const { lineItemById, deletedLineIds = [] } = detail.transactionDetailLocalData;
696
+ const updated = { ...lineItemById };
697
+ delete updated[action.payload.lineId];
698
+ draft.transactionDetailById[key] = {
699
+ ...detail,
700
+ transactionDetailLocalData: {
701
+ ...detail.transactionDetailLocalData,
702
+ lineItemById: updated,
703
+ deletedLineIds: [...deletedLineIds, action.payload.lineId],
704
+ },
705
+ };
706
+ },
707
+ prepare(transactionId, lineId) {
708
+ return { payload: { transactionId, lineId } };
709
+ },
710
+ },
711
+ toggleSplitEditMode: {
712
+ reducer(draft, action) {
713
+ const key = getTransactionDetailKey(action.payload.transactionId);
714
+ const detail = recordGet(draft.transactionDetailById, key, undefined);
715
+ if (detail != null) {
716
+ draft.transactionDetailById[key] = {
717
+ ...detail,
718
+ transactionDetailLocalData: {
719
+ ...detail.transactionDetailLocalData,
720
+ editMode: action.payload.editMode,
721
+ // Clear delete tracking when exiting edit mode without saving.
722
+ ...(!action.payload.editMode && { deletedLineIds: [] }),
723
+ },
724
+ };
725
+ }
726
+ },
727
+ prepare(transactionId, editMode) {
728
+ return { payload: { transactionId, editMode } };
729
+ },
730
+ },
666
731
  clearRecommendedVendorsList(draft) {
667
732
  Object.assign(draft, initialState);
668
733
  },
@@ -771,7 +836,7 @@ const transactionDetail = createSlice({
771
836
  },
772
837
  },
773
838
  });
774
- export const { downloadAccountingProviderAttachment, downloadAccountingProviderAttachmentSuccess, downloadAccountingProviderAttachmentFailure, fetchTransactionDetail, updateTransactionDetailFetchState, removeTransactionDetail, clearTransactionDetail, uploadMissingAttachmentSuccess, updateTransactionDetail, updateTransactionDetailSaveStatus, clearTransactionDetailSaveStatus, markTransactionAsNotMiscategorized, deleteTransactionAttachment, deleteTransactionAttachmentFailure, deleteTransactionAttachmentSuccess, updateStatusForTransactionNotMiscategorizedUpdate, updateStatusConsolidatedSaveTransactionDetail, updateTransactionStateIfUpdateActionNotAllowed, saveTransactionDetail, initializeTransactionDetailLocalData, saveTransactionDetailLocalData, clearTransactionDetailLocalData, resetLineItemsCategoryClassInLocalData, setAllLineItemsToCategoryClassInLocalData, setAllLineItemsLocalDataIsUpdateAllChecked, setEntityRecommendationForLineIdsForTransactionDetail, markCategoryClassRecommendationsInProgressForTransactionDetail, markCategoryClassRecommendationsCompletedForTransactionDetail, markCategoryClassRecommendationsFailureForTransactionDetail, removeEntityRecommendationForLineIdForTransactionDetail, updateSelectedVendor, updateSelectedCustomer, resetVendor, resetSelectedCustomer, updateLocalDataWithTransactionsUpdateWithVendorCheckbox, updateVendorToAllLineItems, resetAllLineItemsToVendor, updateLatestSelectedEntity, updateVendorBulkRecommendationsFetchStatus, setIsVendorUpdateAllChecked, } = transactionDetail.actions;
839
+ export const { downloadAccountingProviderAttachment, downloadAccountingProviderAttachmentSuccess, downloadAccountingProviderAttachmentFailure, fetchTransactionDetail, updateTransactionDetailFetchState, removeTransactionDetail, clearTransactionDetail, uploadMissingAttachmentSuccess, updateTransactionDetail, updateTransactionDetailSaveStatus, clearTransactionDetailSaveStatus, markTransactionAsNotMiscategorized, deleteTransactionAttachment, deleteTransactionAttachmentFailure, deleteTransactionAttachmentSuccess, updateStatusForTransactionNotMiscategorizedUpdate, updateStatusConsolidatedSaveTransactionDetail, updateTransactionStateIfUpdateActionNotAllowed, saveTransactionDetail, initializeTransactionDetailLocalData, saveTransactionDetailLocalData, clearTransactionDetailLocalData, resetLineItemsCategoryClassInLocalData, setAllLineItemsToCategoryClassInLocalData, setAllLineItemsLocalDataIsUpdateAllChecked, setEntityRecommendationForLineIdsForTransactionDetail, markCategoryClassRecommendationsInProgressForTransactionDetail, markCategoryClassRecommendationsCompletedForTransactionDetail, markCategoryClassRecommendationsFailureForTransactionDetail, removeEntityRecommendationForLineIdForTransactionDetail, updateSelectedVendor, updateSelectedCustomer, resetVendor, resetSelectedCustomer, updateLocalDataWithTransactionsUpdateWithVendorCheckbox, updateVendorToAllLineItems, resetAllLineItemsToVendor, updateLatestSelectedEntity, updateVendorBulkRecommendationsFetchStatus, setIsVendorUpdateAllChecked, addSplitLine, deleteSplitLine, toggleSplitEditMode, } = transactionDetail.actions;
775
840
  export default transactionDetail.reducer;
776
841
  function getUpdatedEntityLocalData(detail, updates, entity, resetRecommendations, type) {
777
842
  const key = type === 'customer' ? 'customerUpdates' : 'vendorUpdates';
package/lib/index.d.ts CHANGED
@@ -256,7 +256,7 @@ import { CompanyPassportLocalStoreDataView, CompanyPassportView, getCompanyPassp
256
256
  import { CompanyPortfolioView, getCompanyPortfolioView, isInfiniteRunway } from './view/companyView/selector/companyPortfolioViewSelector';
257
257
  import { AllCockpitTabsView, getAllCockpitTabsFilterView } from './view/companyView/selector/getAllCockpitTabsFilterView';
258
258
  import { ALL_COCKPIT_TABS_FILE_TYPES, ALL_COCKPIT_TABS_IDS, CockpitDownloadTabsID, CockpitTabsFileType, CockpitTabsID, toCockpitTabsFileTypeStrict, toCockpitTabsIDStrict } from './view/companyView/types/cockpitTabsID';
259
- import { CockpitFilterCategory, CockpitFilters, DownloadCockpitTabOptions, FilterCombinationsByTabs, HealthMonitorViewFilterCategoryField, HealthViewSortKey, ManagementViewFilterCategoryField, ManagementViewSortKey, OnboardingViewSortKey, PortfolioViewFilterCategoryField, PortfolioViewSortKey, SubscriptionViewFilterCategoryField, TaskGroupScope, TaskManagerViewFilterCategoryField, TaskManagerViewSortKey, toHealthSortKeyType, toManagementSortKeyType, toOnboardingSortKeyType, toPortfolioSortKeyType, toTaskManagerSortKeyType } from './view/companyView/types/cockpitTypes';
259
+ import { CockpitFilterCategory, CockpitFilters, DownloadCockpitTabOptions, FilterCombinationsByTabs, HealthMonitorViewFilterCategoryField, HealthViewSortKey, ManagementViewFilterCategoryField, ManagementViewSortKey, OnboardingViewSortKey, PortfolioViewFilterCategoryField, PortfolioViewSortKey, SubscriptionViewFilterCategoryField, TaskManagerViewFilterCategoryField, TaskManagerViewSortKey, toHealthSortKeyType, toManagementSortKeyType, toOnboardingSortKeyType, toPortfolioSortKeyType, toTaskManagerSortKeyType } from './view/companyView/types/cockpitTypes';
260
260
  import { ManagementUIState } from './view/companyView/types/companyManagementViewState';
261
261
  import { CompanyDetailsLocalData, CompanyInfoLocalData, IncInfoLocalData, TaxDetailsLocalData } from './view/companyView/types/companyPassport/companyDetailsLocalData';
262
262
  import { CompanyPassportLocalData, toCompanyPassportLocalData } from './view/companyView/types/companyPassport/companyPassportLocalData';
@@ -563,15 +563,15 @@ import { TagViewState } from './view/tagView/tagViewState';
563
563
  import { CannedResponse, CannedResponsesViewState } from './view/taskManager/cannedResponsesView/cannedResponses';
564
564
  import { deleteCannedResponse, fetchCannedResponses, saveCannedResponse } from './view/taskManager/cannedResponsesView/cannedResponsesReducer';
565
565
  import { getCannedResponsesView } from './view/taskManager/cannedResponsesView/cannedResponsesSelector';
566
- import { CreateSubTaskPayload, EditTaskLocalData, initialTaskDetail, initialTaskDetailLocalData } from './view/taskManager/taskDetailView/taskDetail';
567
- import { archiveTask, createSubTask, deleteTask, discardTaskUpdatesInLocalStore, fetchSubTasks, fetchTaskDetailPage, resetSubTaskCreateStatus, saveTaskDetail, saveTaskUpdatesToLocalStore, snoozeTask, unsnoozeTask } from './view/taskManager/taskDetailView/taskDetailReducer';
566
+ import { EditTaskLocalData, initialTaskDetail, initialTaskDetailLocalData } from './view/taskManager/taskDetailView/taskDetail';
567
+ import { archiveTask, deleteTask, discardTaskUpdatesInLocalStore, fetchTaskDetailPage, saveTaskDetail, saveTaskUpdatesToLocalStore, snoozeTask, unsnoozeTask } from './view/taskManager/taskDetailView/taskDetailReducer';
568
568
  import { TaskDetailSelectorView, allTaskPriority, allTaskStatus, getTaskDetail } from './view/taskManager/taskDetailView/taskDetailSelector';
569
569
  import { createTaskFromTaskGroupTemplate } from './view/taskManager/taskGroupTemplateView/taskGroupTemplateViewReducer';
570
570
  import { createNewTaskGroup, deleteTaskGroup, fetchAllTaskGroups, updateTaskGroupName } from './view/taskManager/taskGroupView/taskGroupViewReducer';
571
571
  import { ALL_TASK_LIST_TABS, DueDateGroupKey, TASK_LIST_FILTER_CATEGORIES, TASK_LIST_GROUP_BY_CATEGORIES, TaskFilterCategory, TaskGroupKey, TaskListFilterCategoryField, TaskListFilters, TaskListLocalData, TaskListTab, TaskListUIState, TaskListViewSortKey, toDueDateGroupKeyType, toTaskListGroupByKeyType, toTaskListGroupByKeyTypeStrict } from './view/taskManager/taskListView/taskList';
572
572
  import { bulkUpdateTaskList, dragNDropTasks, fetchTaskListPage, initiateTaskListLocalData, removeTaskFromList, updateTaskFilters, updateTaskFromListView, updateTaskListLocalData, updateTaskListSearchText, updateTaskListTab, updateTaskListUIState } from './view/taskManager/taskListView/taskListReducer';
573
573
  import { TaskGroupWithTasksList, TaskListSelectorView, TaskWithUserDetails, getAllTasks } from './view/taskManager/taskListView/taskListSelector';
574
- import { SubtaskSortKey, SubtaskSortOrder, getDueDateValueFromDueDateGroupId, getTaskUpdates, sortSubtasks } from './view/taskManager/taskListView/taskListViewHelpers';
574
+ import { getDueDateValueFromDueDateGroupId, getTaskUpdates } from './view/taskManager/taskListView/taskListViewHelpers';
575
575
  import { fetchTasksCard } from './view/tasksCard/tasksCardReducer';
576
576
  import { TasksCardReport } from './view/tasksCard/tasksCardSelector';
577
577
  import { fetchTopEx, updateTopExDownloadState, updateTopExTimeFrame } from './view/topEx/topExReducer';
@@ -582,9 +582,9 @@ import { TopExAccount, TopExReport, TopExTimePeriodWithMetaData, TopExpenses } f
582
582
  */
583
583
  import { TOP_EX_TIME_PERIODS, TopExTimePeriod, TopExpense } from './view/topEx/topExState';
584
584
  import { AccountingProviderAttachmentSelector, getAccountingProviderAttachment } from './view/transactionDetail/getAccountingProviderAttachmentSelector';
585
- import { JOURNAL_ENTRY_SORT_KEYS, JournalEntryRowSortConfig, JournalEntrySortAccessors, JournalEntrySortKey, filterJournalEntryLinesExcludingLinked, journalEntryDefaultSortConfig, journalEntryTotalsByPostingSide, sortJournalEntryLines, sumJournalEntryAmounts, toJournalEntrySortKey } from './view/transactionDetail/journalEntryLinesViewModel';
585
+ import { JOURNAL_ENTRY_SORT_KEYS, JournalEntryRowSortConfig, JournalEntrySortAccessors, JournalEntrySortKey, filterJournalEntryLinesExcludingLinked, journalEntryDefaultSortConfig, journalEntrySplitReconciliation, journalEntryTotalsByPostingSide, sortJournalEntryLines, sumJournalEntryAmounts, toJournalEntrySortKey } from './view/transactionDetail/journalEntryLinesViewModel';
586
586
  import { getChangedLineItemCountFromLocalData, isAccountUncategorized } from './view/transactionDetail/transactionDetailLocalDataHelper';
587
- import { clearTransactionDetailSaveStatus, deleteTransactionAttachment, downloadAccountingProviderAttachment, downloadAccountingProviderAttachmentFailure, downloadAccountingProviderAttachmentSuccess, fetchTransactionDetail, initializeTransactionDetailLocalData, markCategoryClassRecommendationsFailureForTransactionDetail, removeEntityRecommendationForLineIdForTransactionDetail, resetAllLineItemsToVendor, resetLineItemsCategoryClassInLocalData, resetSelectedCustomer, resetVendor, saveTransactionDetail, saveTransactionDetailLocalData, setAllLineItemsLocalDataIsUpdateAllChecked, setAllLineItemsToCategoryClassInLocalData, setIsVendorUpdateAllChecked, updateLatestSelectedEntity, updateLocalDataWithTransactionsUpdateWithVendorCheckbox, updateSelectedCustomer, updateSelectedVendor, updateTransactionDetail, updateVendorBulkRecommendationsFetchStatus, updateVendorToAllLineItems, uploadMissingAttachmentSuccess } from './view/transactionDetail/transactionDetailReducer';
587
+ import { addSplitLine, clearTransactionDetailSaveStatus, deleteSplitLine, deleteTransactionAttachment, downloadAccountingProviderAttachment, downloadAccountingProviderAttachmentFailure, downloadAccountingProviderAttachmentSuccess, fetchTransactionDetail, initializeTransactionDetailLocalData, markCategoryClassRecommendationsFailureForTransactionDetail, removeEntityRecommendationForLineIdForTransactionDetail, resetAllLineItemsToVendor, resetLineItemsCategoryClassInLocalData, resetSelectedCustomer, resetVendor, saveTransactionDetail, saveTransactionDetailLocalData, setAllLineItemsLocalDataIsUpdateAllChecked, setAllLineItemsToCategoryClassInLocalData, setIsVendorUpdateAllChecked, toggleSplitEditMode, updateLatestSelectedEntity, updateLocalDataWithTransactionsUpdateWithVendorCheckbox, updateSelectedCustomer, updateSelectedVendor, updateTransactionDetail, updateVendorBulkRecommendationsFetchStatus, updateVendorToAllLineItems, uploadMissingAttachmentSuccess } from './view/transactionDetail/transactionDetailReducer';
588
588
  import { TransactionDetailReport, VendorDetailsView, getInitialUpdatablePeriodsForTransactionRecommendations, getTransactionDetail, getTransactionDetailForTransaction } from './view/transactionDetail/transactionDetailSelector';
589
589
  import { TransactionUpdates, getThirdPartyIdFromTransactionId } from './view/transactionDetail/transactionDetailState';
590
590
  import { TransactionDetailLineItemData, TransactionDetailLocalData, TransactionVendorUpdates } from './view/transactionDetail/transactionDetailTypes';
@@ -743,7 +743,7 @@ export { MatchedTransaction };
743
743
  export { SupportedTransaction, SupportedTransactionWithCOT, SupportedTransactionPayload, getSupportedTransactionById, };
744
744
  export { clearTransactionList, updateLatestTransactionId, parallelFetchAccountTransactionList, parallelFetchEntityTransactionList, fetchAccountTransactionList, updateTransactionListByAccount, updateTransactionListByAccountFailure, updateTransactionListByAccountUIState, parallelFetchClassTransactionList, updateTransactionListByClassUIState, updateTransactionListByClass, parallelFetchProjectTransactionList, updateTransactionListByProjectUIState, updateTransactionListByProject, updateTransactionListUIStateByCategoryType, parallelFetchTransactionListByCategoryType, };
745
745
  export { TransactionListByAccountReport, getTransactionListByAccount, getTransactionListUIStateByAccountKey, };
746
- export { fetchEntityTransactionList, updateTransactionListByEntity, saveTransactionDetailLocalData, clearTransactionDetailSaveStatus, updateTransactionListByEntityFailure, resetLineItemsCategoryClassInLocalData, setAllLineItemsToCategoryClassInLocalData, saveTransactionDetail, setAllLineItemsLocalDataIsUpdateAllChecked, initializeTransactionDetailLocalData, markCategoryClassRecommendationsFailureForTransactionDetail, removeEntityRecommendationForLineIdForTransactionDetail, updateSelectedVendor, updateSelectedCustomer, resetSelectedCustomer, resetVendor, updateLocalDataWithTransactionsUpdateWithVendorCheckbox, updateVendorToAllLineItems, resetAllLineItemsToVendor, updateLatestSelectedEntity, updateVendorBulkRecommendationsFetchStatus, setIsVendorUpdateAllChecked, };
746
+ export { fetchEntityTransactionList, updateTransactionListByEntity, saveTransactionDetailLocalData, clearTransactionDetailSaveStatus, updateTransactionListByEntityFailure, resetLineItemsCategoryClassInLocalData, setAllLineItemsToCategoryClassInLocalData, saveTransactionDetail, setAllLineItemsLocalDataIsUpdateAllChecked, initializeTransactionDetailLocalData, markCategoryClassRecommendationsFailureForTransactionDetail, removeEntityRecommendationForLineIdForTransactionDetail, updateSelectedVendor, updateSelectedCustomer, resetSelectedCustomer, resetVendor, updateLocalDataWithTransactionsUpdateWithVendorCheckbox, updateVendorToAllLineItems, resetAllLineItemsToVendor, updateLatestSelectedEntity, updateVendorBulkRecommendationsFetchStatus, setIsVendorUpdateAllChecked, addSplitLine, deleteSplitLine, toggleSplitEditMode, };
747
747
  export { TransactionUpdates, downloadAccountingProviderAttachment, downloadAccountingProviderAttachmentSuccess, downloadAccountingProviderAttachmentFailure, fetchTransactionDetail, updateTransactionDetail, uploadMissingAttachmentSuccess, deleteTransactionAttachment, getThirdPartyIdFromTransactionId, };
748
748
  export { TransactionListByEntityView, getTransactionListByEntity };
749
749
  export { TransactionListByClassReport, getTransactionListByClass, getTransactionListUIStateByClassKey, TransactionListByProjectReport, getTransactionListByProject, getTransactionListUIStateByProjectKey, getTransactionListByEntityForSinglePeriod, };
@@ -784,7 +784,7 @@ export { AllCockpitTabsView, getAllCockpitTabsFilterView };
784
784
  export { AuditSummaryData, fetchImproveUsingZeniGPT, fetchCompanyMonthEndReportView, sendCompanyMonthEndReport, saveCompanyMonthEndReport, resetCompanyMonthEndReportFetchStatus, resetSendCompanyMonthEndReportFetchStatus, getCompanyMonthEndReportSelectorView, CompanyMonthEndReportSelectorView, fetchCompanyMonthEndReportHistoricDates, fetchCompanyMonthEndReportHistoricData, fetchCompanyMonthEndReportTemplates, getCompanyMonthEndReportHistoricData, CompanyMonthEndReportHistoricDataSelectorView, CompanyMonthEndReportData, TemplatesList, CompanyMonthReportTemplates, };
785
785
  export { Runway, AccountingSummary };
786
786
  export { newAddressInLocalStore, getAddress, getNewAddress, getAllNewAddresses, getFormattedAddress, fetchAddress, clearAddressView, AddressType, NewAddressData, AddressUpdatableInfo, createAddress, removeNewAddressDataInLocalStore, };
787
- export { CockpitFilterCategory, CockpitFilters, DownloadCockpitTabOptions, FilterCombinationsByTabs, HealthViewSortKey, ManagementViewFilterCategoryField, ManagementViewSortKey, OnboardingViewSortKey, PortfolioViewFilterCategoryField, HealthMonitorViewFilterCategoryField, TaskManagerViewFilterCategoryField, PortfolioViewSortKey, SubscriptionViewFilterCategoryField, toManagementSortKeyType, toOnboardingSortKeyType, toPortfolioSortKeyType, toHealthSortKeyType, TaskGroupScope, TaskManagerViewSortKey, toTaskManagerSortKeyType, updateCompanyTaskManagerViewFilters, };
787
+ export { CockpitFilterCategory, CockpitFilters, DownloadCockpitTabOptions, FilterCombinationsByTabs, HealthViewSortKey, ManagementViewFilterCategoryField, ManagementViewSortKey, OnboardingViewSortKey, PortfolioViewFilterCategoryField, HealthMonitorViewFilterCategoryField, TaskManagerViewFilterCategoryField, PortfolioViewSortKey, SubscriptionViewFilterCategoryField, toManagementSortKeyType, toOnboardingSortKeyType, toPortfolioSortKeyType, toHealthSortKeyType, TaskManagerViewSortKey, toTaskManagerSortKeyType, updateCompanyTaskManagerViewFilters, };
788
788
  export { CockpitDownloadTabsID, CockpitTabsFileType, CockpitTabsID, ALL_COCKPIT_TABS_FILE_TYPES, ALL_COCKPIT_TABS_IDS, toCockpitTabsIDStrict, toCockpitTabsFileTypeStrict, };
789
789
  export { AllowedValueWithCode, AllowedValue, AllowedValueWithID, isAllowedValueWithCode, isAllowedValueWithID, };
790
790
  export { ManagementUIState, PortfolioUIState };
@@ -843,7 +843,7 @@ export { fetchCompanyOnboardingView, fetchQBOConnectionPool, updateQBOConnection
843
843
  export { TransactionListByCategoryType, getTransactionsListByCategoryType, getTransactionListUIStateByCategoryType, TransactionCategoryType, };
844
844
  export { TransactionDetailLocalData, TransactionDetailLineItemData, TransactionVendorUpdates, };
845
845
  export { getChangedLineItemCountFromLocalData, isAccountUncategorized };
846
- export { JOURNAL_ENTRY_SORT_KEYS, filterJournalEntryLinesExcludingLinked, journalEntryDefaultSortConfig, journalEntryTotalsByPostingSide, sortJournalEntryLines, sumJournalEntryAmounts, toJournalEntrySortKey, };
846
+ export { JOURNAL_ENTRY_SORT_KEYS, filterJournalEntryLinesExcludingLinked, journalEntryDefaultSortConfig, journalEntryTotalsByPostingSide, journalEntrySplitReconciliation, sortJournalEntryLines, sumJournalEntryAmounts, toJournalEntrySortKey, };
847
847
  export type { JournalEntryRowSortConfig, JournalEntrySortAccessors, JournalEntrySortKey, };
848
848
  export { openSnackbar, closeSnackbar, getSnackbar, SnackbarMessageType, SnackbarMessageSections, SnackbarMessageSectionTexts, SnackbarMessageConfig, };
849
849
  export { getSpendManagementEffectiveListPeriod, getSelectedCompanyOfficer, showBillPayPromoPage, showReimbursementPromoPage, getActualPaymentDate, isVerifiedStatusCode, isVerifiedPaymentAccountProviderStatusCode, isBulkProcessing, getBillListUniqueType, getRemiListUniqueType, BulkOperationType, BulkOperationFinishedType, getBulkOperationSuffix, ZeniAccountsPromoConfig, toAccountsPromoConfig, SameDayAchDisablementConfig, toSameDayAchDisablementConfig, isPaymentMethodOutsideZeni, isAwaitingMarkAsPaid, checkIfLowBalance, };
@@ -893,7 +893,7 @@ export { fetchGlobalMerchantRecommendation, createGlobalMerchant, updateCreateGl
893
893
  export { approveVendorGlobalReview, rejectVendorGlobalReview, fetchVendorGlobalReviewView, updateSelectedGlobalMerchant, updateVendorGlobalReviewViewUIState, getVendorGlobalReviewView, getTenantMerchantByMerchantId, toVendorGlobalReviewColumnSortKeyType, VendorGlobalReview, VendorGlobalReviewViewUIState, VendorGlobalReviewViewColumnSortKey, VendorGlobalReviewViewSelectorView, VendorGlobalReviewViewState, VendorGlobalReviewViewLocalData, updateVendorGlobalReviewViewLocalData, GlobalReviewPageCurrentSelectionByColumn, GlobalRecommendationFetchSource, };
894
894
  export { fetchArAging, updateArAgingUIState, fetchArAgingDetail, updateArAgingDetailUIState, ArAgingReport, ArAgingDetail, NestedAgingBalancesByCustomer, getArAgingReport, getArAgingDetailForCustomer, updateArAgingNodeCollapseState, };
895
895
  export { toRecurringBillFrequency, toRecurringBillFrequencyStrict, RecurringBillFrequency, RecurringBillDetail, RecurringBillConfig, RecurringBillStatus, RecurringBillPaymentStatus, };
896
- export { Task, TaskPayload, TaskListSelectorView, TaskWithUserDetails, TaskListViewSortKey, TaskListUIState, TaskDetailSelectorView, EditTaskLocalData, TaskStatusCodeType, PriorityCodeType, getTaskGroupById, TaskStatus, TaskPriority, TaskCodeType, getAllTasks, fetchTaskListPage, getTaskDetail, fetchTaskDetailPage, saveTaskUpdatesToLocalStore, saveTaskDetail, createSubTask, resetSubTaskCreateStatus, fetchSubTasks, CreateSubTaskPayload, archiveTask, CannedResponse, CannedResponsesViewState, fetchCannedResponses, saveCannedResponse, deleteCannedResponse, getCannedResponsesView, updateTaskListSearchText, updateTaskListUIState, allTaskStatus, allTaskPriority, TaskListFilters, updateTaskFilters, TASK_LIST_FILTER_CATEGORIES, TASK_LIST_GROUP_BY_CATEGORIES, TaskListFilterCategoryField, deleteTask, discardTaskUpdatesInLocalStore, TaskFilterCategory, TaskType, TaskGroupWithTasksList, TaskListLocalData, bulkUpdateTaskList, createNewTaskGroup, initiateTaskListLocalData, deleteTaskGroup, updateTaskListLocalData, dragNDropTasks, updateTaskGroupName, TaskGroupState, TaskGroupKey, toTaskListGroupByKeyType, toTaskListGroupByKeyTypeStrict, SubtaskSortKey, SubtaskSortOrder, getTaskUpdates, sortSubtasks, fetchAllTaskGroups, initialTaskDetail, getDueDateValueFromDueDateGroupId, toPriorityCodeType, toTaskStatusCodeType, DueDateGroupKey, toDueDateGroupKeyType, updateTaskFromListView, updateTaskListTab, removeTaskFromList, snoozeTask, unsnoozeTask, convertHHMMStrToMinutes, initialTaskDetailLocalData, TaskListTab, ALL_TASK_LIST_TABS, };
896
+ export { Task, TaskPayload, TaskListSelectorView, TaskWithUserDetails, TaskListViewSortKey, TaskListUIState, TaskDetailSelectorView, EditTaskLocalData, TaskStatusCodeType, PriorityCodeType, getTaskGroupById, TaskStatus, TaskPriority, TaskCodeType, getAllTasks, fetchTaskListPage, getTaskDetail, fetchTaskDetailPage, saveTaskUpdatesToLocalStore, saveTaskDetail, archiveTask, CannedResponse, CannedResponsesViewState, fetchCannedResponses, saveCannedResponse, deleteCannedResponse, getCannedResponsesView, updateTaskListSearchText, updateTaskListUIState, allTaskStatus, allTaskPriority, TaskListFilters, updateTaskFilters, TASK_LIST_FILTER_CATEGORIES, TASK_LIST_GROUP_BY_CATEGORIES, TaskListFilterCategoryField, deleteTask, discardTaskUpdatesInLocalStore, TaskFilterCategory, TaskType, TaskGroupWithTasksList, TaskListLocalData, bulkUpdateTaskList, createNewTaskGroup, initiateTaskListLocalData, deleteTaskGroup, updateTaskListLocalData, dragNDropTasks, updateTaskGroupName, TaskGroupState, TaskGroupKey, toTaskListGroupByKeyType, toTaskListGroupByKeyTypeStrict, getTaskUpdates, fetchAllTaskGroups, initialTaskDetail, getDueDateValueFromDueDateGroupId, toPriorityCodeType, toTaskStatusCodeType, DueDateGroupKey, toDueDateGroupKeyType, updateTaskFromListView, updateTaskListTab, removeTaskFromList, snoozeTask, unsnoozeTask, convertHHMMStrToMinutes, initialTaskDetailLocalData, TaskListTab, ALL_TASK_LIST_TABS, };
897
897
  export { Tag, TagState, TagViewState, getAllTags, TagViewSelectorView, fetchTagList, createTag, deleteTag, };
898
898
  export { CardPayment, CardPaymentViewState, SetupIntentData, CardPaymentSelectorView, getAllCardsAndBankPaymentMethods, createCardSetupIntent, confirmCardSetupIntent, addCardPaymentSource, fetchPaymentSources, resetCardPaymentErrorStatuses, clearCardPaymentView, AddCardPaymentSourceType, };
899
899
  export { getAuditReportGroupViewSelectorView, getAuditRuleGroupViewSelectorView, getUserFromAllUsers, AuditReportGroupSelectorView, AuditReportGroupViewSelectorView, AuditRuleGroupViewSelectorView, fetchAuditRuleGroupView, fetchAuditReportGroupView, saveReasonForAuditRule, AuditRuleGroup, AuditRuleGroupReport, AuditReportRule, AuditRuleEntityType, AuditRuleEntityIdType, AuditRuleBypassReason, clearAuditReportGroupViewByCompanyId, };