@zeniai/client-epic-state 5.1.0-betaSS3 → 5.1.0

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 (450) hide show
  1. package/lib/common/aiCfo/aiCfoSuggestedQuestionsPageContext.d.ts +1 -1
  2. package/lib/commonStateTypes/amount.d.ts +1 -0
  3. package/lib/commonStateTypes/amount.js +9 -1
  4. package/lib/commonStateTypes/viewAndReport/viewAndReport.d.ts +2 -2
  5. package/lib/commonStateTypes/viewAndReport/viewAndReport.js +2 -0
  6. package/lib/commonStateTypes/workingDayHelper.d.ts +9 -0
  7. package/lib/commonStateTypes/workingDayHelper.js +28 -1
  8. package/lib/entity/account/accountSelector.d.ts +9 -0
  9. package/lib/entity/account/accountSelector.js +14 -1
  10. package/lib/entity/account/accountState.d.ts +1 -1
  11. package/lib/entity/accountGroup/accountGroupState.d.ts +1 -1
  12. package/lib/entity/aiCfo/aiCfoPayload.d.ts +64 -5
  13. package/lib/entity/aiCfo/aiCfoReducer.d.ts +23 -2
  14. package/lib/entity/aiCfo/aiCfoReducer.js +252 -10
  15. package/lib/entity/aiCfo/aiCfoSelector.d.ts +4 -1
  16. package/lib/entity/aiCfo/aiCfoSelector.js +19 -1
  17. package/lib/entity/aiCfo/aiCfoState.d.ts +98 -4
  18. package/lib/entity/aiCfo/aiCfoState.js +20 -1
  19. package/lib/entity/approvalRule/approvalRuleConflict.d.ts +56 -0
  20. package/lib/entity/approvalRule/approvalRuleConflict.js +77 -0
  21. package/lib/entity/approvalRule/approvalRulePayload.d.ts +34 -5
  22. package/lib/entity/approvalRule/approvalRulePayload.js +145 -10
  23. package/lib/entity/approvalRule/approvalRuleSelector.d.ts +25 -1
  24. package/lib/entity/approvalRule/approvalRuleSelector.js +40 -0
  25. package/lib/entity/approvalRule/approvalRuleState.d.ts +59 -7
  26. package/lib/entity/cardPolicy/cardPolicyPayload.d.ts +277 -0
  27. package/lib/entity/cardPolicy/cardPolicyPayload.js +143 -0
  28. package/lib/entity/cardPolicy/cardPolicyReducer.d.ts +19 -0
  29. package/lib/entity/cardPolicy/cardPolicyReducer.js +175 -0
  30. package/lib/entity/cardPolicy/cardPolicySelector.d.ts +32 -0
  31. package/lib/entity/cardPolicy/cardPolicySelector.js +99 -0
  32. package/lib/entity/cardPolicy/cardPolicyState.d.ts +205 -0
  33. package/lib/entity/cardPolicy/cardPolicyState.js +14 -0
  34. package/lib/entity/cardPolicy/extractPolicyDocumentEpic.d.ts +18 -0
  35. package/lib/entity/cardPolicy/extractPolicyDocumentEpic.js +68 -0
  36. package/lib/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.d.ts +26 -0
  37. package/lib/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.js +47 -0
  38. package/lib/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.d.ts +25 -0
  39. package/lib/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.js +39 -0
  40. package/lib/entity/cardPolicy/policyRecommendationFromUploadEpic.d.ts +24 -0
  41. package/lib/entity/cardPolicy/policyRecommendationFromUploadEpic.js +105 -0
  42. package/lib/entity/class/classReducer.d.ts +4 -4
  43. package/lib/entity/class/classState.d.ts +1 -1
  44. package/lib/entity/forecast/forecastState.d.ts +1 -1
  45. package/lib/entity/jeSchedules/jeSchedulesPayload.d.ts +1 -0
  46. package/lib/entity/jeSchedules/jeSchedulesPayload.js +7 -0
  47. package/lib/entity/jeSchedules/jeSchedulesState.d.ts +2 -0
  48. package/lib/entity/jeSchedules/jeSchedulesTypes.d.ts +1 -1
  49. package/lib/entity/monthEndCloseChecks/monthEndCloseChecksState.d.ts +1 -1
  50. package/lib/entity/sectionAccountsView/sectionAccountsView.d.ts +1 -1
  51. package/lib/entity/sectionClassesViewV2/sectionClassesView.d.ts +1 -1
  52. package/lib/entity/sectionClassesViewV2/sectionClassesViewReducer.d.ts +2 -2
  53. package/lib/entity/sectionProjectView/sectionProjectView.d.ts +1 -1
  54. package/lib/entity/sectionProjectView/sectionProjectViewReducer.d.ts +2 -2
  55. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  56. package/lib/entity/snackbar/snackbarTypes.js +7 -0
  57. package/lib/entity/task/taskPayload.d.ts +3 -1
  58. package/lib/entity/task/taskPayload.js +2 -0
  59. package/lib/entity/task/taskState.d.ts +2 -0
  60. package/lib/entity/tenant/clearAllEpic.d.ts +9 -2
  61. package/lib/entity/tenant/clearAllEpic.js +14 -0
  62. package/lib/entity/tenant/tenantPayload.d.ts +21 -0
  63. package/lib/entity/tenant/tenantReducer.d.ts +14 -5
  64. package/lib/entity/tenant/tenantReducer.js +132 -8
  65. package/lib/entity/tenant/tenantState.d.ts +24 -1
  66. package/lib/entity/transaction/payloadTypes/transactionPayload.d.ts +4 -0
  67. package/lib/entity/transaction/payloadTypes/transactionPayload.js +18 -10
  68. package/lib/entity/transaction/stateTypes/transaction.d.ts +3 -0
  69. package/lib/entity/transaction/stateTypes/transactionLine.d.ts +2 -1
  70. package/lib/entity/transaction/stateTypes/transactionLine.js +2 -1
  71. package/lib/epic.d.ts +31 -2
  72. package/lib/epic.js +31 -2
  73. package/lib/esm/commonStateTypes/amount.js +7 -0
  74. package/lib/esm/commonStateTypes/viewAndReport/viewAndReport.js +2 -0
  75. package/lib/esm/commonStateTypes/workingDayHelper.js +26 -0
  76. package/lib/esm/entity/account/accountSelector.js +11 -0
  77. package/lib/esm/entity/aiCfo/aiCfoReducer.js +252 -10
  78. package/lib/esm/entity/aiCfo/aiCfoSelector.js +17 -1
  79. package/lib/esm/entity/aiCfo/aiCfoState.js +17 -0
  80. package/lib/esm/entity/approvalRule/approvalRuleConflict.js +74 -0
  81. package/lib/esm/entity/approvalRule/approvalRulePayload.js +145 -10
  82. package/lib/esm/entity/approvalRule/approvalRuleSelector.js +35 -0
  83. package/lib/esm/entity/cardPolicy/cardPolicyPayload.js +130 -0
  84. package/lib/esm/entity/cardPolicy/cardPolicyReducer.js +171 -0
  85. package/lib/esm/entity/cardPolicy/cardPolicySelector.js +75 -0
  86. package/lib/esm/entity/cardPolicy/cardPolicyState.js +9 -0
  87. package/lib/esm/entity/cardPolicy/extractPolicyDocumentEpic.js +64 -0
  88. package/lib/esm/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.js +43 -0
  89. package/lib/esm/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.js +35 -0
  90. package/lib/esm/entity/cardPolicy/policyRecommendationFromUploadEpic.js +101 -0
  91. package/lib/esm/entity/jeSchedules/jeSchedulesPayload.js +7 -0
  92. package/lib/esm/entity/snackbar/snackbarTypes.js +7 -0
  93. package/lib/esm/entity/task/taskPayload.js +2 -0
  94. package/lib/esm/entity/tenant/clearAllEpic.js +14 -0
  95. package/lib/esm/entity/tenant/tenantReducer.js +130 -7
  96. package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +18 -10
  97. package/lib/esm/entity/transaction/stateTypes/transactionLine.js +1 -0
  98. package/lib/esm/epic.js +31 -2
  99. package/lib/esm/index.js +68 -28
  100. package/lib/esm/reducer.js +21 -0
  101. package/lib/esm/view/aiCfoView/aiCfoViewReducer.js +6 -3
  102. package/lib/esm/view/aiCfoView/epics/createSessionAndSubmitEpic.js +5 -2
  103. package/lib/esm/view/aiCfoView/epics/createSessionEpic.js +2 -1
  104. package/lib/esm/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +12 -2
  105. package/lib/esm/view/companyTaskManagerView/companyTaskManagerViewReducer.js +39 -11
  106. package/lib/esm/view/companyTaskManagerView/companyTaskManagerViewSelector.js +14 -4
  107. package/lib/esm/view/companyTaskManagerView/epics/fetchCockpitContextEpic.js +38 -0
  108. package/lib/esm/view/companyTaskManagerView/epics/fetchCompanyTaskManagerViewEpic.js +37 -28
  109. package/lib/esm/view/companyTaskManagerView/epics/updateCompanyTaskManagerViewFiltersEpic.js +16 -0
  110. package/lib/esm/view/companyView/companyViewReducer.js +46 -1
  111. package/lib/esm/view/companyView/epic/companyPassport/dismissCapitalizationOnboardingEpic.js +25 -0
  112. package/lib/esm/view/companyView/epic/companyPassport/updateCapitalizationAccountThresholdEpic.js +98 -0
  113. package/lib/esm/view/companyView/epic/fetchAllCockpitViewsEpic.js +2 -2
  114. package/lib/esm/view/companyView/types/companyPassport/companyPassportViewState.js +4 -0
  115. package/lib/esm/view/createTransferEntry/createTransferEntryReducer.js +82 -0
  116. package/lib/esm/view/createTransferEntry/createTransferEntrySelector.js +64 -0
  117. package/lib/esm/view/createTransferEntry/createTransferEntryState.js +17 -0
  118. package/lib/esm/view/createTransferEntry/epics/createTransferEntryEpic.js +136 -0
  119. package/lib/esm/view/createTransferEntry/epics/fetchTransferAccountsEpic.js +36 -0
  120. package/lib/esm/view/dashboard/dashboardReducer.js +11 -1
  121. package/lib/esm/view/expenseAutomationView/epics/common/fetchAllExpenseAutomationTabsEpic.js +3 -3
  122. package/lib/esm/view/expenseAutomationView/epics/common/refreshExpenseAutomationCurrentTabEpic.js +3 -4
  123. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +13 -9
  124. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/backgroundRefetchReviewTabEpic.js +3 -16
  125. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +9 -16
  126. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +2 -2
  127. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/markTransactionAsNotMiscategorizedEpic.js +2 -13
  128. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/saveTransactionCategorizationEpic.js +2 -6
  129. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/triggerReviewTabRefetchEpic.js +2 -2
  130. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/updateTransactionCategorizationEpic.js +2 -6
  131. package/lib/esm/view/expenseAutomationView/expenseAutomationViewReducer.js +3 -20
  132. package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +21 -49
  133. package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +13 -6
  134. package/lib/esm/view/expenseAutomationView/transactionFilterHelpers.js +106 -18
  135. package/lib/esm/view/spendManagement/autotransferRules/autoTransferRulesSelector.js +22 -2
  136. package/lib/esm/view/spendManagement/billPay/billPayReview/billPayReviewSelector.js +14 -0
  137. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.js +109 -12
  138. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/deleteBillPayApprovalRuleEpic.js +10 -2
  139. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/fetchBillPaySetupApproverViewEpic.js +8 -4
  140. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/initializeBillPaySetupApproverViewUpdateDataEpic.js +11 -7
  141. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/reorderBillPayApprovalRulesEpic.js +54 -0
  142. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/saveBillPaySetupApproverViewUpdatesEpic.js +13 -4
  143. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +140 -16
  144. package/lib/esm/view/spendManagement/billPay/editBillView/editBillViewSelector.js +60 -4
  145. package/lib/esm/view/spendManagement/billPay/editBillView/epics/fetchEditBillDetailPageEpic.js +8 -2
  146. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.js +29 -0
  147. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.js +78 -0
  148. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.js +47 -0
  149. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.js +47 -0
  150. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.js +34 -0
  151. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.js +32 -0
  152. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.js +54 -0
  153. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.js +92 -0
  154. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.js +225 -0
  155. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.js +10 -0
  156. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.js +23 -0
  157. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.js +36 -0
  158. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.js +27 -0
  159. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.js +28 -0
  160. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.js +52 -0
  161. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.js +22 -0
  162. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.js +1 -0
  163. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.js +36 -0
  164. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.js +39 -0
  165. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.js +34 -0
  166. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.js +71 -0
  167. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.js +21 -0
  168. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.js +1 -0
  169. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.js +38 -0
  170. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyAiCardPolicyFormDraftUpdate.js +289 -0
  171. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToAiCardPolicyDraft.js +109 -0
  172. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToDraftEpic.js +44 -0
  173. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToManualCardPolicyDraft.js +111 -0
  174. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyUploadPlanToAiCardPolicyDraft.js +25 -0
  175. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildAiCardPolicyFormDraftSeed.js +363 -0
  176. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildManualCardPolicyFormDraftSeed.js +36 -0
  177. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyChipIds.js +19 -0
  178. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyFormDraftTypes.js +6 -0
  179. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyRequestParts.js +119 -0
  180. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.js +154 -0
  181. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.js +22 -0
  182. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.js +1 -0
  183. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.js +49 -0
  184. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/deriveAiPolicyReviewRowsFromInputs.js +140 -0
  185. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.js +20 -0
  186. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/seedAiCardPolicyFormDraftEpic.js +100 -0
  187. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toBulkCardPolicyTemplateRequestsFromDraft.js +96 -0
  188. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toCardPolicyTemplateRequestFromDraft.js +59 -0
  189. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toManualCardPolicyTemplateRequestFromDraft.js +24 -0
  190. package/lib/esm/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +25 -0
  191. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.js +1 -0
  192. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/applyAiCardCreationFormDraftUpdate.js +34 -0
  193. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.js +57 -0
  194. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.js +35 -0
  195. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.js +2 -2
  196. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.js +42 -4
  197. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.js +35 -0
  198. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/seedAiCardCreationFormDraftEpic.js +62 -0
  199. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.js +44 -0
  200. package/lib/esm/view/spendManagement/reimbursement/editRemiView/epics/fetchEditRemiDetailPageEpic.js +5 -1
  201. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/deleteRemiApprovalRuleEpic.js +10 -2
  202. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/fetchRemiSetupApproverViewEpic.js +8 -2
  203. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/initializeRemiSetupApproverViewUpdateDataEpic.js +11 -7
  204. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/reorderRemiApprovalRulesEpic.js +61 -0
  205. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/saveRemiSetupApproverViewUpdatesEpic.js +13 -4
  206. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.js +80 -11
  207. package/lib/esm/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoIntroClosedByOutsideClickEpic.js +18 -0
  208. package/lib/esm/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoRemindMeLaterClickedEpic.js +18 -0
  209. package/lib/esm/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryVideoViewedEpic.js +1 -1
  210. package/lib/esm/view/spendManagement/treasury/treasurySetUp/treasurySetupViewReducer.js +45 -1
  211. package/lib/esm/view/transactionDetail/journalEntryLinesViewModel.js +149 -0
  212. package/lib/esm/view/transactionDetail/transactionDetailSelector.js +6 -1
  213. package/lib/index.d.ts +84 -34
  214. package/lib/index.js +261 -37
  215. package/lib/reducer.d.ts +21 -0
  216. package/lib/reducer.js +21 -0
  217. package/lib/view/aiCfoView/aiCfoViewReducer.d.ts +11 -2
  218. package/lib/view/aiCfoView/aiCfoViewReducer.js +6 -3
  219. package/lib/view/aiCfoView/epics/createSessionAndSubmitEpic.js +5 -2
  220. package/lib/view/aiCfoView/epics/createSessionEpic.js +2 -1
  221. package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.d.ts +8 -1
  222. package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +12 -2
  223. package/lib/view/auditReportView/auditReportViewState.d.ts +1 -1
  224. package/lib/view/billPayCard/billPayCardSelector.d.ts +1 -1
  225. package/lib/view/cardBalance/cardBalanceSelector.d.ts +1 -1
  226. package/lib/view/cashBalance/cashBalanceSelector.d.ts +1 -1
  227. package/lib/view/cashInCashOut/cashInCashOutSelector.d.ts +1 -1
  228. package/lib/view/cashPosition/cashPositionSelector.d.ts +1 -1
  229. package/lib/view/companyTaskManagerView/companyTaskManagerViewPayload.d.ts +19 -11
  230. package/lib/view/companyTaskManagerView/companyTaskManagerViewReducer.d.ts +11 -5
  231. package/lib/view/companyTaskManagerView/companyTaskManagerViewReducer.js +40 -12
  232. package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.d.ts +2 -0
  233. package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.js +13 -3
  234. package/lib/view/companyTaskManagerView/companyTaskManagerViewState.d.ts +11 -3
  235. package/lib/view/companyTaskManagerView/epics/fetchCockpitContextEpic.d.ts +10 -0
  236. package/lib/view/companyTaskManagerView/epics/fetchCockpitContextEpic.js +42 -0
  237. package/lib/view/companyTaskManagerView/epics/fetchCompanyTaskManagerViewEpic.d.ts +1 -3
  238. package/lib/view/companyTaskManagerView/epics/fetchCompanyTaskManagerViewEpic.js +37 -28
  239. package/lib/view/companyTaskManagerView/epics/updateCompanyTaskManagerViewFiltersEpic.d.ts +6 -0
  240. package/lib/view/companyTaskManagerView/epics/updateCompanyTaskManagerViewFiltersEpic.js +20 -0
  241. package/lib/view/companyView/companyViewReducer.d.ts +12 -1
  242. package/lib/view/companyView/companyViewReducer.js +48 -3
  243. package/lib/view/companyView/epic/companyPassport/dismissCapitalizationOnboardingEpic.d.ts +9 -0
  244. package/lib/view/companyView/epic/companyPassport/dismissCapitalizationOnboardingEpic.js +29 -0
  245. package/lib/view/companyView/epic/companyPassport/updateCapitalizationAccountThresholdEpic.d.ts +10 -0
  246. package/lib/view/companyView/epic/companyPassport/updateCapitalizationAccountThresholdEpic.js +102 -0
  247. package/lib/view/companyView/epic/fetchAllCockpitViewsEpic.js +2 -2
  248. package/lib/view/companyView/types/cockpitTypes.d.ts +3 -2
  249. package/lib/view/companyView/types/companyPassport/companyPassportViewState.d.ts +1 -0
  250. package/lib/view/companyView/types/companyPassport/companyPassportViewState.js +4 -0
  251. package/lib/view/createTransferEntry/createTransferEntryReducer.d.ts +32 -0
  252. package/lib/view/createTransferEntry/createTransferEntryReducer.js +86 -0
  253. package/lib/view/createTransferEntry/createTransferEntrySelector.d.ts +39 -0
  254. package/lib/view/createTransferEntry/createTransferEntrySelector.js +69 -0
  255. package/lib/view/createTransferEntry/createTransferEntryState.d.ts +30 -0
  256. package/lib/view/createTransferEntry/createTransferEntryState.js +20 -0
  257. package/lib/view/createTransferEntry/epics/createTransferEntryEpic.d.ts +11 -0
  258. package/lib/view/createTransferEntry/epics/createTransferEntryEpic.js +140 -0
  259. package/lib/view/createTransferEntry/epics/fetchTransferAccountsEpic.d.ts +14 -0
  260. package/lib/view/createTransferEntry/epics/fetchTransferAccountsEpic.js +40 -0
  261. package/lib/view/dashboard/dashboardReducer.d.ts +2 -2
  262. package/lib/view/dashboard/dashboardReducer.js +11 -1
  263. package/lib/view/expenseAutomationView/epics/common/fetchAllExpenseAutomationTabsEpic.js +3 -3
  264. package/lib/view/expenseAutomationView/epics/common/refreshExpenseAutomationCurrentTabEpic.js +3 -4
  265. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.d.ts +6 -0
  266. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +14 -10
  267. package/lib/view/expenseAutomationView/epics/transactionCategorization/backgroundRefetchReviewTabEpic.js +3 -16
  268. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +9 -16
  269. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +2 -2
  270. package/lib/view/expenseAutomationView/epics/transactionCategorization/markTransactionAsNotMiscategorizedEpic.js +2 -13
  271. package/lib/view/expenseAutomationView/epics/transactionCategorization/saveTransactionCategorizationEpic.js +2 -6
  272. package/lib/view/expenseAutomationView/epics/transactionCategorization/triggerReviewTabRefetchEpic.js +2 -2
  273. package/lib/view/expenseAutomationView/epics/transactionCategorization/updateTransactionCategorizationEpic.js +2 -6
  274. package/lib/view/expenseAutomationView/expenseAutomationViewReducer.d.ts +2 -6
  275. package/lib/view/expenseAutomationView/expenseAutomationViewReducer.js +3 -20
  276. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  277. package/lib/view/expenseAutomationView/payload/transactionCategorizationPayload.d.ts +20 -9
  278. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +12 -19
  279. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +22 -50
  280. package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +8 -6
  281. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +1 -0
  282. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +15 -7
  283. package/lib/view/expenseAutomationView/transactionFilterHelpers.js +106 -18
  284. package/lib/view/expenseAutomationView/types/reconciliationViewState.d.ts +1 -1
  285. package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +1 -2
  286. package/lib/view/financeStatement/financeStatementReducer.d.ts +1 -1
  287. package/lib/view/globalMerchantView/globalMerchantViewReducer.d.ts +2 -2
  288. package/lib/view/people/peopleTypes.d.ts +1 -1
  289. package/lib/view/reimbursementCard/reimbursementCardSelector.d.ts +1 -1
  290. package/lib/view/reportsResync/reportsResyncReducer.d.ts +2 -2
  291. package/lib/view/scheduleView/scheduleListView/scheduleListTypes.d.ts +1 -1
  292. package/lib/view/spendManagement/autotransferRules/autoTransferRulesSelector.d.ts +8 -1
  293. package/lib/view/spendManagement/autotransferRules/autoTransferRulesSelector.js +21 -1
  294. package/lib/view/spendManagement/autotransferRules/autoTransferRulesState.d.ts +22 -0
  295. package/lib/view/spendManagement/billPay/billPayReview/billPayReviewSelector.d.ts +7 -0
  296. package/lib/view/spendManagement/billPay/billPayReview/billPayReviewSelector.js +14 -0
  297. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.d.ts +14 -3
  298. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.js +110 -13
  299. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewState.d.ts +16 -0
  300. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/deleteBillPayApprovalRuleEpic.js +10 -2
  301. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/fetchBillPaySetupApproverViewEpic.js +8 -4
  302. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/initializeBillPaySetupApproverViewUpdateDataEpic.js +10 -6
  303. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/reorderBillPayApprovalRulesEpic.d.ts +23 -0
  304. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/reorderBillPayApprovalRulesEpic.js +58 -0
  305. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/saveBillPaySetupApproverViewUpdatesEpic.js +12 -3
  306. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.d.ts +59 -1
  307. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +142 -17
  308. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonState.d.ts +31 -5
  309. package/lib/view/spendManagement/billPay/editBillView/editBillViewSelector.d.ts +8 -1
  310. package/lib/view/spendManagement/billPay/editBillView/editBillViewSelector.js +60 -4
  311. package/lib/view/spendManagement/billPay/editBillView/epics/fetchEditBillDetailPageEpic.js +8 -2
  312. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.d.ts +47 -0
  313. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.js +34 -0
  314. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.d.ts +23 -0
  315. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.js +82 -0
  316. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.d.ts +40 -0
  317. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.js +51 -0
  318. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.d.ts +37 -0
  319. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.js +53 -0
  320. package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.d.ts +14 -0
  321. package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.js +38 -0
  322. package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.d.ts +7 -0
  323. package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.js +36 -0
  324. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.d.ts +56 -0
  325. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.js +60 -0
  326. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.d.ts +22 -0
  327. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.js +96 -0
  328. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.d.ts +59 -0
  329. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.js +230 -0
  330. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.d.ts +122 -0
  331. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.js +13 -0
  332. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.d.ts +7 -0
  333. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.js +27 -0
  334. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.d.ts +9 -0
  335. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.js +40 -0
  336. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.d.ts +7 -0
  337. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.js +31 -0
  338. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.d.ts +15 -0
  339. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.js +32 -0
  340. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.d.ts +14 -0
  341. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.js +56 -0
  342. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.d.ts +15 -0
  343. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.js +28 -0
  344. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.d.ts +8 -0
  345. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.js +2 -0
  346. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.d.ts +8 -0
  347. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.js +40 -0
  348. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.d.ts +8 -0
  349. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.js +43 -0
  350. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.d.ts +8 -0
  351. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.js +38 -0
  352. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.d.ts +15 -0
  353. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.js +75 -0
  354. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.d.ts +15 -0
  355. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.js +27 -0
  356. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.d.ts +7 -0
  357. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.js +2 -0
  358. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.d.ts +8 -0
  359. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.js +42 -0
  360. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyAiCardPolicyFormDraftUpdate.d.ts +8 -0
  361. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyAiCardPolicyFormDraftUpdate.js +294 -0
  362. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToAiCardPolicyDraft.d.ts +8 -0
  363. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToAiCardPolicyDraft.js +113 -0
  364. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToDraftEpic.d.ts +9 -0
  365. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToDraftEpic.js +48 -0
  366. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToManualCardPolicyDraft.d.ts +8 -0
  367. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToManualCardPolicyDraft.js +115 -0
  368. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyUploadPlanToAiCardPolicyDraft.d.ts +13 -0
  369. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyUploadPlanToAiCardPolicyDraft.js +29 -0
  370. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildAiCardPolicyFormDraftSeed.d.ts +14 -0
  371. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildAiCardPolicyFormDraftSeed.js +369 -0
  372. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildManualCardPolicyFormDraftSeed.d.ts +6 -0
  373. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildManualCardPolicyFormDraftSeed.js +40 -0
  374. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyChipIds.d.ts +7 -0
  375. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyChipIds.js +26 -0
  376. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyFormDraftTypes.d.ts +116 -0
  377. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyFormDraftTypes.js +10 -0
  378. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyRequestParts.d.ts +33 -0
  379. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyRequestParts.js +126 -0
  380. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.d.ts +52 -0
  381. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.js +158 -0
  382. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.d.ts +11 -0
  383. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.js +31 -0
  384. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.d.ts +12 -0
  385. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.js +2 -0
  386. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.d.ts +9 -0
  387. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.js +53 -0
  388. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/deriveAiPolicyReviewRowsFromInputs.d.ts +10 -0
  389. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/deriveAiPolicyReviewRowsFromInputs.js +144 -0
  390. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.d.ts +7 -0
  391. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.js +24 -0
  392. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/seedAiCardPolicyFormDraftEpic.d.ts +11 -0
  393. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/seedAiCardPolicyFormDraftEpic.js +104 -0
  394. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toBulkCardPolicyTemplateRequestsFromDraft.d.ts +22 -0
  395. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toBulkCardPolicyTemplateRequestsFromDraft.js +100 -0
  396. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toCardPolicyTemplateRequestFromDraft.d.ts +8 -0
  397. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toCardPolicyTemplateRequestFromDraft.js +63 -0
  398. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toManualCardPolicyTemplateRequestFromDraft.d.ts +3 -0
  399. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toManualCardPolicyTemplateRequestFromDraft.js +28 -0
  400. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardList.d.ts +1 -1
  401. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.d.ts +14 -0
  402. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +27 -1
  403. package/lib/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.d.ts +34 -0
  404. package/lib/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.js +2 -0
  405. package/lib/view/spendManagement/chargeCards/issueChargeCard/applyAiCardCreationFormDraftUpdate.d.ts +7 -0
  406. package/lib/view/spendManagement/chargeCards/issueChargeCard/applyAiCardCreationFormDraftUpdate.js +38 -0
  407. package/lib/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.d.ts +12 -0
  408. package/lib/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.js +61 -0
  409. package/lib/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.d.ts +9 -0
  410. package/lib/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.js +39 -0
  411. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.d.ts +2 -2
  412. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.js +1 -1
  413. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.d.ts +12 -2
  414. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.js +43 -5
  415. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.d.ts +7 -0
  416. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.js +42 -1
  417. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardState.d.ts +5 -0
  418. package/lib/view/spendManagement/chargeCards/issueChargeCard/seedAiCardCreationFormDraftEpic.d.ts +11 -0
  419. package/lib/view/spendManagement/chargeCards/issueChargeCard/seedAiCardCreationFormDraftEpic.js +66 -0
  420. package/lib/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.d.ts +3 -0
  421. package/lib/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.js +48 -0
  422. package/lib/view/spendManagement/reimbursement/editRemiView/epics/fetchEditRemiDetailPageEpic.js +5 -1
  423. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/deleteRemiApprovalRuleEpic.js +10 -2
  424. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/fetchRemiSetupApproverViewEpic.js +8 -2
  425. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/initializeRemiSetupApproverViewUpdateDataEpic.js +10 -6
  426. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/reorderRemiApprovalRulesEpic.d.ts +14 -0
  427. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/reorderRemiApprovalRulesEpic.js +65 -0
  428. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/saveRemiSetupApproverViewUpdatesEpic.js +12 -3
  429. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.d.ts +14 -3
  430. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.js +81 -12
  431. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewState.d.ts +12 -0
  432. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoIntroClosedByOutsideClickEpic.d.ts +8 -0
  433. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoIntroClosedByOutsideClickEpic.js +22 -0
  434. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoRemindMeLaterClickedEpic.d.ts +8 -0
  435. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoRemindMeLaterClickedEpic.js +22 -0
  436. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryVideoViewedEpic.js +1 -1
  437. package/lib/view/spendManagement/treasury/treasurySetUp/treasurySetupViewReducer.d.ts +1 -1
  438. package/lib/view/spendManagement/treasury/treasurySetUp/treasurySetupViewReducer.js +46 -2
  439. package/lib/view/spendManagement/treasury/treasurySetUp/treasurySetupViewState.d.ts +2 -0
  440. package/lib/view/taskManager/taskListView/taskList.d.ts +3 -3
  441. package/lib/view/taskManager/taskListView/taskListReducer.d.ts +1 -1
  442. package/lib/view/tasksCard/tasksCardSelector.d.ts +1 -1
  443. package/lib/view/topEx/topExSelector.d.ts +1 -1
  444. package/lib/view/transactionDetail/journalEntryLinesViewModel.d.ts +102 -0
  445. package/lib/view/transactionDetail/journalEntryLinesViewModel.js +160 -0
  446. package/lib/view/transactionDetail/transactionDetailPayload.d.ts +1 -1
  447. package/lib/view/transactionDetail/transactionDetailSelector.d.ts +6 -1
  448. package/lib/view/transactionDetail/transactionDetailSelector.js +6 -1
  449. package/lib/zeniAPI.d.ts +1 -0
  450. package/package.json +1 -1
@@ -1,9 +1,10 @@
1
1
  import { createSlice } from '@reduxjs/toolkit';
2
2
  import { date as zeniDate } from '../../zeniDayJS';
3
- import { ALL_AI_CFO_ANSWER_RESPONSE_TYPES, toAiCfoAnswerResponseType, toAiCfoAnswerResponseTypeStrict, toAiCfoAnswerStateType, toAiCfoVisualizationTypeStrict, toMessageSender, toMessageType, toYFormatScaleStrict, toYFormatTypeStrict, toYFormatUnitStrict, } from './aiCfoState';
3
+ import { ALL_AI_CFO_ANSWER_RESPONSE_TYPES, toAiCfoAnswerResponseType, toAiCfoAnswerResponseTypeStrict, toAiCfoAnswerStateType, toAiCfoVisualizationTypeStrict, toInteractiveFormTypeStrict, toMessageSender, toMessageType, toYFormatScaleStrict, toYFormatTypeStrict, toYFormatUnitStrict, } from './aiCfoState';
4
4
  export const initialAiCfoState = {
5
5
  aiCfoByChatSessionId: {},
6
6
  partialQuestionAnswers: {},
7
+ syntheticAnswersByChatSessionId: {},
7
8
  };
8
9
  // Utility: Merge two arrays of Q&A pairs, combining responses for the same question
9
10
  function mergeQuestionAnswerPairs(existing, newQAs) {
@@ -113,6 +114,7 @@ function chatHistoryToQA(history) {
113
114
  chainOfThoughtActionSteps: [],
114
115
  artifact: parsedAgentMessage.artifact ?? undefined,
115
116
  artifactTitle: parsedAgentMessage.artifact_title ?? undefined,
117
+ artifactHostUrl: parsedAgentMessage.artifact_host_url ?? undefined,
116
118
  },
117
119
  createdAt: zeniDate(agentMessage.created_at),
118
120
  };
@@ -135,9 +137,171 @@ export const toAiCfoVisualization = (visualization) => {
135
137
  if (visualization.type == null || visualization.data == null) {
136
138
  return undefined;
137
139
  }
140
+ // Reject unknown viz types; `?? 'table'` used to throw in the chart/table decoder
141
+ // when interactive-form payloads (no `values`) hit it.
142
+ const normalizedType = toAiCfoVisualizationTypeStrict(visualization.type);
143
+ if (normalizedType == null) {
144
+ return undefined;
145
+ }
146
+ return {
147
+ type: normalizedType,
148
+ data: normalizedType === 'interactive_form'
149
+ ? toInteractiveFormVisualization(visualization.data)
150
+ : toAiCfoVisualizationData(visualization.data),
151
+ };
152
+ };
153
+ const toInteractiveFormVisualization = (data) => {
154
+ // When `form_type` is missing / mistyped, infer from payload shape so a malformed
155
+ // card-policy answer doesn't get decoded as cards_creation (wrong form + submit path).
156
+ const formType = toInteractiveFormTypeStrict(data.form_type) ??
157
+ inferInteractiveFormTypeFromPayload(data.payload);
158
+ if (formType === 'card_policy') {
159
+ return {
160
+ formType: 'card_policy',
161
+ payload: toCardPolicyInitialData(data.payload),
162
+ };
163
+ }
164
+ return {
165
+ formType: 'cards_creation',
166
+ payload: toCardsCreationInitialData(data.payload),
167
+ };
168
+ };
169
+ const inferInteractiveFormTypeFromPayload = (payload) => {
170
+ if (payload != null && typeof payload === 'object' && 'mode' in payload) {
171
+ const mode = payload.mode;
172
+ if (mode === 'auto' || mode === 'guided' || mode === 'upload') {
173
+ return 'card_policy';
174
+ }
175
+ }
176
+ return 'cards_creation';
177
+ };
178
+ const toCardsCreationInitialData = (payload) => {
179
+ const suggestedCards = payload.suggested_cards ?? [];
180
+ const ordered = [...suggestedCards].sort((a, b) => KIND_RANK[a.card_type] - KIND_RANK[b.card_type]);
181
+ const withUniqueIds = withSynthesizedIds(ordered);
182
+ const suggestedOnly = withUniqueIds.filter(({ card }) => card.is_suggested);
183
+ const cardNameOptions = withUniqueIds.map(({ card, uniqueId }) => ({
184
+ id: uniqueId,
185
+ kind: toCardKind(card.card_type),
186
+ label: card.card_name,
187
+ }));
188
+ const suggestedOwnerUserIdByTeamId = Object.fromEntries(suggestedOnly.map(({ card, uniqueId }) => [
189
+ uniqueId,
190
+ normalizeOwnerId(card.owner_id),
191
+ ]));
192
+ const common = {
193
+ cardNameOptions,
194
+ suggestedOwnerUserIdByTeamId,
195
+ };
196
+ if (payload.mode === 'create') {
197
+ return {
198
+ ...common,
199
+ mode: 'create',
200
+ cardRows: suggestedOnly.map(({ card, uniqueId }) => ({
201
+ cardKind: toCardKind(card.card_type),
202
+ id: uniqueId,
203
+ label: card.card_name,
204
+ recommendedLimit: card.credit_limit > 0 ? card.credit_limit : undefined,
205
+ suggestedOwnerUserId: normalizeOwnerId(card.owner_id),
206
+ })),
207
+ };
208
+ }
138
209
  return {
139
- type: toAiCfoVisualizationTypeStrict(visualization.type) ?? 'table',
140
- data: toAiCfoVisualizationData(visualization.data),
210
+ ...common,
211
+ mode: 'review',
212
+ teamRows: suggestedOnly.map(({ card, uniqueId }) => ({
213
+ avgMonthlySpend: CURRENCY_FORMATTER.format(card.avg_spend),
214
+ cardKind: toCardKind(card.card_type),
215
+ id: uniqueId,
216
+ label: card.card_name,
217
+ recommendedLimit: CURRENCY_FORMATTER.format(card.credit_limit),
218
+ recommendedLimitCadence: 'Monthly',
219
+ })),
220
+ };
221
+ };
222
+ const CURRENCY_FORMATTER = new Intl.NumberFormat('en-US', {
223
+ style: 'currency',
224
+ currency: 'USD',
225
+ maximumFractionDigits: 0,
226
+ });
227
+ // BE emits `null` or `""` for "no owner picked"; collapse both to `undefined`.
228
+ const normalizeOwnerId = (ownerId) => (ownerId != null && ownerId !== '' ? ownerId : undefined);
229
+ const KIND_RANK = {
230
+ vendor: 0,
231
+ category: 1,
232
+ department: 2,
233
+ };
234
+ const toCardKind = (cardType) => {
235
+ if (cardType === 'department') {
236
+ return 'class';
237
+ }
238
+ if (cardType === 'category') {
239
+ return 'category';
240
+ }
241
+ return 'vendor';
242
+ };
243
+ // Falls back to `${kind}__${card_name_id}__${index}` when `card_name_id` collides
244
+ // (sample payloads ship the literal `"vendor_uuid"`), to keep RHF row keys unique.
245
+ const withSynthesizedIds = (cards) => {
246
+ const seen = new Set();
247
+ return cards.map((card, index) => {
248
+ const preferred = card.card_name_id;
249
+ if (preferred != null && preferred !== '' && !seen.has(preferred)) {
250
+ seen.add(preferred);
251
+ return { card, uniqueId: preferred };
252
+ }
253
+ const synthesized = `${card.card_type}__${preferred ?? 'unknown'}__${index}`;
254
+ seen.add(synthesized);
255
+ return { card, uniqueId: synthesized };
256
+ });
257
+ };
258
+ const toCardPolicyDraftPolicy = (payload, index) => ({
259
+ id: `draft-${index}`,
260
+ name: payload.name,
261
+ description: payload.description ?? '',
262
+ mode: payload.mode,
263
+ allowedEntity: {
264
+ categoryCodes: payload.allowed_entity?.category_codes ?? [],
265
+ merchantNames: payload.allowed_entity?.merchant_names ?? [],
266
+ },
267
+ blockedEntity: {
268
+ categoryCodes: payload.blocked_entity?.category_codes ?? [],
269
+ merchantNames: payload.blocked_entity?.merchant_names ?? [],
270
+ },
271
+ applyToCards: payload.apply_to_cards ?? [],
272
+ requiredReceiptThreshold: payload.required_receipt_threshold ?? 0,
273
+ spendLimits: {
274
+ transaction: payload.spend_limits?.transaction ?? 0,
275
+ },
276
+ });
277
+ const toCardPolicyStep5Review = (payload) => ({
278
+ draftPolicies: (payload.draft_policies ?? []).map(toCardPolicyDraftPolicy),
279
+ groupingSource: payload.grouping_source ?? 'none',
280
+ prompt: payload.prompt ?? '',
281
+ });
282
+ const toCardPolicyWizardPlan = (payload) => ({
283
+ step5Review: toCardPolicyStep5Review(payload.step_5_review),
284
+ });
285
+ const toCardPolicyUploadSource = (payload) => ({
286
+ confidenceScore: payload.confidence_score,
287
+ fileName: payload.file_name,
288
+ lowConfidenceFields: payload.low_confidence_fields ?? [],
289
+ });
290
+ const toCardPolicyInitialData = (payload) => {
291
+ if (payload.mode === 'upload') {
292
+ return {
293
+ policyKind: 'upload',
294
+ wizardPlan: payload.wizard_plan != null
295
+ ? toCardPolicyWizardPlan(payload.wizard_plan)
296
+ : undefined,
297
+ source: payload.source != null
298
+ ? toCardPolicyUploadSource(payload.source)
299
+ : undefined,
300
+ };
301
+ }
302
+ return {
303
+ policyKind: payload.mode,
304
+ wizardPlan: toCardPolicyWizardPlan(payload.wizard_plan),
141
305
  };
142
306
  };
143
307
  const toAiCfoVisualizationData = (data) => {
@@ -182,7 +346,7 @@ const toAiCfoVisualizationData = (data) => {
182
346
  };
183
347
  };
184
348
  const toResponseBlockType = (answer, userId) => {
185
- const { metadata, state, type, text, visualization, table, follow_up_questions, assumptions, insights, summarized_title, artifact, artifact_title, } = answer;
349
+ const { metadata, state, type, text, visualization, table, follow_up_questions, assumptions, insights, summarized_title, artifact, artifact_title, artifact_host_url, } = answer;
186
350
  const { chat_session_id, message_id, timestamp, chain_of_thought_action_steps: chainOfThoughtActionSteps = [], } = metadata;
187
351
  return {
188
352
  messageId: message_id,
@@ -202,6 +366,7 @@ const toResponseBlockType = (answer, userId) => {
202
366
  chainOfThoughtActionSteps,
203
367
  artifact: artifact ?? undefined,
204
368
  artifactTitle: artifact_title ?? undefined,
369
+ artifactHostUrl: artifact_host_url ?? undefined,
205
370
  },
206
371
  createdAt: zeniDate(timestamp),
207
372
  };
@@ -373,10 +538,8 @@ const aiCfo = createSlice({
373
538
  // Update state - append new complete Q&As to existing ones
374
539
  session.questionAnswers = mergeQuestionAnswerPairs(session.questionAnswers, completeQAs);
375
540
  },
376
- /**
377
- * Upsert a Q/A pair: if the questionAnswerId exists, upsert the response block; if not, add a new Q/A entry.
378
- * Used for push notification payloads that may introduce a new question.
379
- */
541
+ // Upserts the response block when `questionAnswerId` exists; otherwise adds the Q/A
542
+ // entry. Used for push notification payloads that may introduce a new question.
380
543
  upsertOrAddQuestionAnswerPayload(draft, action) {
381
544
  const { chatSessionId, questionAnswerId, question: { questionId, createdAt, text }, answerPayload, userId, insertQuestionAnswer, } = action.payload;
382
545
  const session = draft.aiCfoByChatSessionId[chatSessionId];
@@ -453,10 +616,82 @@ const aiCfo = createSlice({
453
616
  session.questionAnswers.push(qa);
454
617
  }
455
618
  },
619
+ // Patches an upload-mode card-policy answer with the wizard plan + source returned
620
+ // by `policy-recommendation-from-upload`. No-op for non-upload / missing targets.
621
+ updateAiCfoAnswerCardPolicyWizardPlan(draft, action) {
622
+ const { answerId, chatSessionId, source, wizardPlan } = action.payload;
623
+ const session = draft.aiCfoByChatSessionId[chatSessionId];
624
+ if (session == null) {
625
+ return;
626
+ }
627
+ const qa = session.questionAnswers.find((entry) => entry.questionAnswerId === answerId);
628
+ if (qa == null) {
629
+ return;
630
+ }
631
+ for (const response of Object.values(qa.responses)) {
632
+ const visualization = response?.content.visualization;
633
+ if (visualization == null ||
634
+ visualization.type !== 'interactive_form') {
635
+ continue;
636
+ }
637
+ const data = visualization.data;
638
+ if (data.formType !== 'card_policy' ||
639
+ data.payload.policyKind !== 'upload') {
640
+ continue;
641
+ }
642
+ data.payload = {
643
+ ...data.payload,
644
+ wizardPlan,
645
+ source: source ?? data.payload.source,
646
+ };
647
+ }
648
+ },
649
+ // Renders a "Creating…" placeholder while the cards/policy create mutation runs.
650
+ // Caller supplies a stable `id` (updated in place by `updateSyntheticAiCfoAnswer`).
651
+ appendSyntheticAiCfoAnswer(draft, action) {
652
+ const { chatSessionId, id, kind, createdAt, entityIds, sourceQuestionAnswerId, } = action.payload;
653
+ if (draft.syntheticAnswersByChatSessionId[chatSessionId] == null) {
654
+ draft.syntheticAnswersByChatSessionId[chatSessionId] = [];
655
+ }
656
+ draft.syntheticAnswersByChatSessionId[chatSessionId].push({
657
+ id,
658
+ kind,
659
+ entityIds: entityIds ?? [],
660
+ createdAt,
661
+ sourceQuestionAnswerId,
662
+ });
663
+ },
664
+ // Transitions a bubble from `creating_*` to `created_*` once the mutation completes.
665
+ updateSyntheticAiCfoAnswer(draft, action) {
666
+ const { chatSessionId, id, kind, entityIds } = action.payload;
667
+ const list = draft.syntheticAnswersByChatSessionId[chatSessionId];
668
+ if (list == null) {
669
+ return;
670
+ }
671
+ const entry = list.find((item) => item.id === id);
672
+ if (entry == null) {
673
+ return;
674
+ }
675
+ entry.kind = kind;
676
+ if (entityIds != null) {
677
+ entry.entityIds = entityIds;
678
+ }
679
+ },
680
+ removeSyntheticAiCfoAnswer(draft, action) {
681
+ const { chatSessionId, id } = action.payload;
682
+ const list = draft.syntheticAnswersByChatSessionId[chatSessionId];
683
+ if (list == null) {
684
+ return;
685
+ }
686
+ draft.syntheticAnswersByChatSessionId[chatSessionId] = list.filter((item) => item.id !== id);
687
+ },
688
+ clearSyntheticAiCfoAnswers(draft, action) {
689
+ delete draft.syntheticAnswersByChatSessionId[action.payload];
690
+ },
456
691
  clearSession(draft, action) {
457
692
  const sessionId = action.payload;
458
693
  delete draft.aiCfoByChatSessionId[sessionId];
459
- // Clear partial Q&A if it belongs to the cleared session
694
+ delete draft.syntheticAnswersByChatSessionId[sessionId];
460
695
  if (draft.partialQuestionAnswers?.[sessionId] != null) {
461
696
  draft.partialQuestionAnswers[sessionId] = undefined;
462
697
  }
@@ -464,6 +699,7 @@ const aiCfo = createSlice({
464
699
  clearAiCfo(draft) {
465
700
  draft.aiCfoByChatSessionId = {};
466
701
  draft.partialQuestionAnswers = {};
702
+ draft.syntheticAnswersByChatSessionId = {};
467
703
  },
468
704
  deleteQuestion(draft, action) {
469
705
  const { chatSessionId, questionAnswerId } = action.payload;
@@ -476,6 +712,12 @@ const aiCfo = createSlice({
476
712
  if (idx !== -1) {
477
713
  session.questionAnswers.splice(idx, 1);
478
714
  }
715
+ // Drop synthetic bubbles whose sourceQuestionAnswerId is the deleted Q/A; otherwise "Creating…" / "Created" tiles outlive their Q/A.
716
+ const syntheticAnswers = draft.syntheticAnswersByChatSessionId[chatSessionId];
717
+ if (syntheticAnswers != null) {
718
+ draft.syntheticAnswersByChatSessionId[chatSessionId] =
719
+ syntheticAnswers.filter((answer) => answer.sourceQuestionAnswerId !== questionAnswerId);
720
+ }
479
721
  },
480
722
  },
481
723
  });
@@ -488,5 +730,5 @@ const toChatSession = (chatSessionPayload) => {
488
730
  createdAt: zeniDate(created_at),
489
731
  };
490
732
  };
491
- export const { setNewSession, clearSession, setSessions, setChatHistory, upsertAnswerPayload, upsertOrAddQuestionAnswerPayload, addQuestionPayload, clearAiCfo, deleteQuestion, } = aiCfo.actions;
733
+ export const { setNewSession, clearSession, setSessions, setChatHistory, upsertAnswerPayload, upsertOrAddQuestionAnswerPayload, addQuestionPayload, clearAiCfo, deleteQuestion, updateAiCfoAnswerCardPolicyWizardPlan, appendSyntheticAiCfoAnswer, updateSyntheticAiCfoAnswer, removeSyntheticAiCfoAnswer, clearSyntheticAiCfoAnswers, } = aiCfo.actions;
492
734
  export default aiCfo.reducer;
@@ -32,5 +32,21 @@ export function getAiCfoSelectorView(state) {
32
32
  : [],
33
33
  }))
34
34
  .sort((a, b) => b.chatSession.createdAt.valueOf() - a.chatSession.createdAt.valueOf());
35
- return { allSessionsWithOrderedQuestionAnswers };
35
+ return {
36
+ allSessionsWithOrderedQuestionAnswers,
37
+ syntheticAnswersByChatSessionId: state.syntheticAnswersByChatSessionId ?? {},
38
+ };
39
+ }
40
+ export function getSyntheticAiCfoAnswersForChatSession(state, chatSessionId) {
41
+ const arr = state.syntheticAnswersByChatSessionId?.[chatSessionId] ?? [];
42
+ return arr
43
+ .slice()
44
+ .sort((a, b) => a.createdAt.valueOf() - b.createdAt.valueOf());
45
+ }
46
+ export function getSyntheticAiCfoAnswerByQuestionAnswerId(state, chatSessionId, questionAnswerId) {
47
+ const arr = state.syntheticAnswersByChatSessionId?.[chatSessionId];
48
+ if (arr == null) {
49
+ return undefined;
50
+ }
51
+ return arr.find((answer) => answer.sourceQuestionAnswerId === questionAnswerId);
36
52
  }
@@ -7,7 +7,14 @@ export const ALL_AI_CFO_CHARTS_TYPES = [
7
7
  export const ALL_AI_CFO_VISUALIZATION_TYPES = [
8
8
  ...ALL_AI_CFO_CHARTS_TYPES,
9
9
  'table',
10
+ 'interactive_form',
10
11
  ];
12
+ export const ALL_INTERACTIVE_FORM_TYPES = [
13
+ 'cards_creation',
14
+ 'card_policy',
15
+ ];
16
+ export const toInteractiveFormType = (v) => stringToUnion(v, ALL_INTERACTIVE_FORM_TYPES);
17
+ export const toInteractiveFormTypeStrict = (v) => stringToUnionStrict(v, ALL_INTERACTIVE_FORM_TYPES);
11
18
  export const toAiCfoVisualizationType = (v) => stringToUnion(v, ALL_AI_CFO_VISUALIZATION_TYPES);
12
19
  export const toAiCfoVisualizationTypeStrict = (v) => stringToUnionStrict(v, ALL_AI_CFO_VISUALIZATION_TYPES);
13
20
  export const toAiCfoChartType = (v) => stringToUnion(v, ALL_AI_CFO_CHARTS_TYPES);
@@ -58,3 +65,13 @@ export const toMessageSender = (v) => stringToUnion(v, ALL_MESSAGE_SENDERS);
58
65
  export const toMessageType = (v) => stringToUnion(v, ALL_MESSAGE_TYPES);
59
66
  export const toMessageSenderStrict = (v) => stringToUnionStrict(v, ALL_MESSAGE_SENDERS);
60
67
  export const toMessageTypeStrict = (v) => stringToUnionStrict(v, ALL_MESSAGE_TYPES);
68
+ // Client-synthesized AI CFO answer bubbles (Creating…/Created) pushed when the user
69
+ // submits an interactive form; not streamed from the backend.
70
+ export const ALL_SYNTHETIC_AI_CFO_ANSWER_KINDS = [
71
+ 'creating_cards',
72
+ 'creating_policy',
73
+ 'created_cards',
74
+ 'created_policy',
75
+ 'errored_cards',
76
+ 'errored_policy',
77
+ ];
@@ -0,0 +1,74 @@
1
+ export function detectRuleOverlap({ candidateCriteria, existingRules, excludeRuleId, }) {
2
+ const candidateAmount = pickAmount(candidateCriteria);
3
+ const candidateVendor = pickVendor(candidateCriteria);
4
+ const candidateDepartment = pickDepartment(candidateCriteria);
5
+ const overlaps = [];
6
+ for (const rule of existingRules) {
7
+ if (rule.approvalRuleId === excludeRuleId) {
8
+ continue;
9
+ }
10
+ if (rule.isFallback === true) {
11
+ continue;
12
+ }
13
+ const ruleVendor = pickVendor(rule.criteria);
14
+ const ruleDepartment = pickDepartment(rule.criteria);
15
+ if (!areVendorCriteriaEqual(candidateVendor, ruleVendor)) {
16
+ continue;
17
+ }
18
+ if (!areDepartmentCriteriaEqual(candidateDepartment, ruleDepartment)) {
19
+ continue;
20
+ }
21
+ const ruleAmount = pickAmount(rule.criteria);
22
+ if (amountsOverlap(candidateAmount, ruleAmount)) {
23
+ overlaps.push({ conflictingRule: rule });
24
+ }
25
+ }
26
+ return overlaps;
27
+ }
28
+ const pickAmount = (criteria) => criteria.find((c) => c.type === 'amount');
29
+ const pickVendor = (criteria) => criteria.find((c) => c.type === 'vendor');
30
+ const pickDepartment = (criteria) => criteria.find((c) => c.type === 'department');
31
+ const areVendorCriteriaEqual = (a, b) => {
32
+ if (a == null && b == null) {
33
+ return true;
34
+ }
35
+ if (a == null || b == null) {
36
+ return false;
37
+ }
38
+ if (a.operator !== b.operator) {
39
+ return false;
40
+ }
41
+ return idsEqual(a.vendorIds, b.vendorIds);
42
+ };
43
+ const areDepartmentCriteriaEqual = (a, b) => {
44
+ if (a == null && b == null) {
45
+ return true;
46
+ }
47
+ if (a == null || b == null) {
48
+ return false;
49
+ }
50
+ if (a.operator !== b.operator) {
51
+ return false;
52
+ }
53
+ return idsEqual(a.departmentIds, b.departmentIds);
54
+ };
55
+ const idsEqual = (a, b) => {
56
+ if (a.length !== b.length) {
57
+ return false;
58
+ }
59
+ const aSorted = [...a].sort();
60
+ const bSorted = [...b].sort();
61
+ return aSorted.every((id, i) => id === bSorted[i]);
62
+ };
63
+ const amountsOverlap = (a, b) => {
64
+ // Absent amount criteria covers the whole real line, so any
65
+ // pairing involving an absent one is a guaranteed overlap.
66
+ if (a == null || b == null) {
67
+ return true;
68
+ }
69
+ const aLow = a.min?.amount ?? Number.NEGATIVE_INFINITY;
70
+ const aHigh = a.max?.amount ?? Number.POSITIVE_INFINITY;
71
+ const bLow = b.min?.amount ?? Number.NEGATIVE_INFINITY;
72
+ const bHigh = b.max?.amount ?? Number.POSITIVE_INFINITY;
73
+ return Math.max(aLow, bLow) <= Math.min(aHigh, bHigh);
74
+ };
@@ -14,18 +14,153 @@ export const toApprovalRule = (payload) => ({
14
14
  version: payload.version,
15
15
  criteria: toApprovalCriteria(payload.criteria),
16
16
  steps: toApprovalSteps(payload.steps),
17
+ description: payload.description ?? undefined,
18
+ priority: payload.priority,
19
+ isFallback: payload.is_fallback ?? false,
20
+ separationOfDuties: payload.is_separation_of_duty_enabled ?? false,
21
+ areApprovalsSerialized: payload.are_approvals_serialized,
22
+ pendingApprovalsCount: payload.pending_approvals_count,
23
+ pendingEntityApprovalUpdateStatus: payload.pending_entity_approval_update_status,
17
24
  });
25
+ /**
26
+ * Maps the wire-level criteria block into the state-side discriminated
27
+ * `Criteria[]` union.
28
+ *
29
+ * The wire keeps each condition as a flat row inside `conditions[]`.
30
+ * Amount comparisons can show up as a `gte` only, a `lte` only, or a
31
+ * `gte` + `lte` pair — those collapse into a single AmountCriteria whose
32
+ * `comparator` is `greater_than`, `less_than`, or `range` respectively.
33
+ *
34
+ * Vendor and department conditions map one-to-one: `in` becomes `is`,
35
+ * `not_in` becomes `is_not`.
36
+ *
37
+ * Resilient to two forms of upstream drift:
38
+ * - Missing / null criteria → returns [].
39
+ * - Legacy criteria shape (array of amount-range objects, the pre-3.0
40
+ * wire) → converted to an AmountCriteria so existing rules in production
41
+ * still render while the backend rolls out.
42
+ */
18
43
  const toApprovalCriteria = (payload) => {
19
- return payload.map((criteria) => ({
20
- rangeType: criteria.type,
21
- rangeEntity: criteria.range_entity,
22
- range: {
23
- min: toAmount(criteria.min, criteria.currency_code, criteria.currency_symbol),
24
- max: criteria.max != null
25
- ? toAmount(criteria.max, criteria.currency_code, criteria.currency_symbol)
26
- : undefined,
27
- },
28
- }));
44
+ if (payload == null) {
45
+ return [];
46
+ }
47
+ if (Array.isArray(payload)) {
48
+ // Legacy pre-3.0 wire: an array of amount-range entries.
49
+ return legacyAmountRangeToCriteria(payload);
50
+ }
51
+ if (!Array.isArray(payload.conditions)) {
52
+ return [];
53
+ }
54
+ const results = [];
55
+ const amountCriteria = toAmountCriteria(payload);
56
+ if (amountCriteria != null) {
57
+ results.push(amountCriteria);
58
+ }
59
+ payload.conditions
60
+ .filter((condition) => condition.field === 'vendor_id')
61
+ .forEach((condition) => {
62
+ const vendor = toVendorCriteria(condition);
63
+ if (vendor != null) {
64
+ results.push(vendor);
65
+ }
66
+ });
67
+ payload.conditions
68
+ .filter((condition) => condition.field === 'department_id')
69
+ .forEach((condition) => {
70
+ const department = toDepartmentCriteria(condition);
71
+ if (department != null) {
72
+ results.push(department);
73
+ }
74
+ });
75
+ return results;
76
+ };
77
+ const legacyAmountRangeToCriteria = (legacy) => {
78
+ if (legacy.length === 0) {
79
+ return [];
80
+ }
81
+ // The state-side 'Criteria[]' model allows at most one
82
+ // 'AmountCriteria' per rule (see 'approvalRuleState.ts'). The legacy
83
+ // wire was an array, so a multi-entry payload can't be represented
84
+ // here without losing data. Read the first entry and log a warning
85
+ // if production rules ever ship more — that would signal a backend
86
+ // regression we want to catch early rather than silently truncating.
87
+ if (legacy.length > 1) {
88
+ console.warn('[approvalRulePayload] legacyAmountRangeToCriteria: received ' +
89
+ legacy.length +
90
+ ' entries but the state model only supports one; using the ' +
91
+ 'first entry and dropping the rest.');
92
+ }
93
+ const first = legacy[0] ?? {};
94
+ const currency = first.currency_code ?? 'USD';
95
+ const symbol = first.currency_symbol ?? '$';
96
+ const min = typeof first.min === 'number'
97
+ ? toAmount(first.min, currency, symbol)
98
+ : undefined;
99
+ const max = typeof first.max === 'number'
100
+ ? toAmount(first.max, currency, symbol)
101
+ : undefined;
102
+ if (min == null && max == null) {
103
+ return [];
104
+ }
105
+ const comparator = min != null && max != null
106
+ ? 'range'
107
+ : min != null
108
+ ? 'greater_than'
109
+ : 'less_than';
110
+ return [{ type: 'amount', comparator, min, max }];
111
+ };
112
+ const toAmountCriteria = (payload) => {
113
+ if (!Array.isArray(payload.conditions)) {
114
+ return undefined;
115
+ }
116
+ const amountConditions = payload.conditions.filter((condition) => condition.field === 'amount');
117
+ // Approval Rules 3.0 — an 'eq' condition represents min === max. Fold
118
+ // it into both finders so it decodes as comparator: 'range' (closed
119
+ // single-point) rather than 'greater_than' (open upper).
120
+ const gteCondition = amountConditions.find((condition) => condition.type === 'gte' || condition.type === 'eq');
121
+ const lteCondition = amountConditions.find((condition) => condition.type === 'lte' || condition.type === 'eq');
122
+ if (gteCondition == null && lteCondition == null) {
123
+ return undefined;
124
+ }
125
+ const currencyCode = payload.currency_code ?? 'USD';
126
+ const currencySymbol = payload.currency_symbol ?? '$';
127
+ const min = typeof gteCondition?.value === 'number'
128
+ ? toAmount(gteCondition.value, currencyCode, currencySymbol)
129
+ : undefined;
130
+ const max = typeof lteCondition?.value === 'number'
131
+ ? toAmount(lteCondition.value, currencyCode, currencySymbol)
132
+ : undefined;
133
+ let comparator;
134
+ if (min != null && max != null) {
135
+ comparator = 'range';
136
+ }
137
+ else if (min != null) {
138
+ comparator = 'greater_than';
139
+ }
140
+ else {
141
+ comparator = 'less_than';
142
+ }
143
+ return { type: 'amount', comparator, min, max };
144
+ };
145
+ const toVendorCriteria = (condition) => {
146
+ if (!Array.isArray(condition.value)) {
147
+ return undefined;
148
+ }
149
+ return {
150
+ type: 'vendor',
151
+ operator: condition.type === 'not_in' ? 'is_not' : 'is',
152
+ vendorIds: condition.value,
153
+ };
154
+ };
155
+ const toDepartmentCriteria = (condition) => {
156
+ if (!Array.isArray(condition.value)) {
157
+ return undefined;
158
+ }
159
+ return {
160
+ type: 'department',
161
+ operator: condition.type === 'not_in' ? 'is_not' : 'is',
162
+ departmentIds: condition.value,
163
+ };
29
164
  };
30
165
  const toApprovalSteps = (payload) => {
31
166
  return payload.map((step) => ({
@@ -7,3 +7,38 @@ export function getApprovalRulesByIds(approvalRuleState, approvalRuleIds) {
7
7
  .filter((value) => value != null);
8
8
  return approvalRulesByIds;
9
9
  }
10
+ /**
11
+ * Returns the amount-range portion of a rule's criteria, if any.
12
+ *
13
+ * Use this whenever a caller needs to read amount min/max from the new
14
+ * discriminated `Criteria` union without inlining a type guard.
15
+ */
16
+ export function getAmountCriteria(criteria) {
17
+ return criteria.find((c) => c.type === 'amount');
18
+ }
19
+ export function getVendorCriteria(criteria) {
20
+ return criteria.find((c) => c.type === 'vendor');
21
+ }
22
+ export function getDepartmentCriteria(criteria) {
23
+ return criteria.find((c) => c.type === 'department');
24
+ }
25
+ /**
26
+ * Returns all rules of the given entityType, sorted by `priority` ascending.
27
+ *
28
+ * Rules without a `priority` value sort to the end (treated as Infinity).
29
+ * Use this for the list page where rules render in evaluation order.
30
+ */
31
+ export function getApprovalRulesByEntityType(approvalRuleState, entityType) {
32
+ return Object.values(approvalRuleState.approvalRuleById)
33
+ .filter((rule) => rule.entityType === entityType)
34
+ .sort((a, b) => (a.priority ?? Infinity) - (b.priority ?? Infinity));
35
+ }
36
+ /**
37
+ * Returns the tenant's fallback rule for the given entityType, if one exists.
38
+ *
39
+ * The fallback rule is shown by the "fallback engine active" banner on the
40
+ * list page and is used to handle bills/reimbursements that match no other rule.
41
+ */
42
+ export function getFallbackApprovalRule(approvalRuleState, entityType) {
43
+ return Object.values(approvalRuleState.approvalRuleById).find((rule) => rule.entityType === entityType && rule.isFallback === true);
44
+ }