@zeniai/client-epic-state 5.1.14 → 5.1.15

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 (418) 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/animations.d.ts +1 -1
  5. package/lib/commonStateTypes/animations.js +1 -0
  6. package/lib/commonStateTypes/workingDayHelper.d.ts +9 -0
  7. package/lib/commonStateTypes/workingDayHelper.js +28 -1
  8. package/lib/entity/aiCfo/aiCfoPayload.d.ts +63 -5
  9. package/lib/entity/aiCfo/aiCfoReducer.d.ts +23 -2
  10. package/lib/entity/aiCfo/aiCfoReducer.js +249 -9
  11. package/lib/entity/aiCfo/aiCfoSelector.d.ts +4 -1
  12. package/lib/entity/aiCfo/aiCfoSelector.js +19 -1
  13. package/lib/entity/aiCfo/aiCfoState.d.ts +97 -4
  14. package/lib/entity/aiCfo/aiCfoState.js +20 -1
  15. package/lib/entity/approvalRule/approvalRuleConflict.d.ts +56 -0
  16. package/lib/entity/approvalRule/approvalRuleConflict.js +77 -0
  17. package/lib/entity/approvalRule/approvalRulePayload.d.ts +34 -5
  18. package/lib/entity/approvalRule/approvalRulePayload.js +149 -10
  19. package/lib/entity/approvalRule/approvalRuleSelector.d.ts +25 -1
  20. package/lib/entity/approvalRule/approvalRuleSelector.js +40 -0
  21. package/lib/entity/approvalRule/approvalRuleState.d.ts +59 -7
  22. package/lib/entity/cardPolicy/cardPolicyPayload.d.ts +277 -0
  23. package/lib/entity/cardPolicy/cardPolicyPayload.js +143 -0
  24. package/lib/entity/cardPolicy/cardPolicyReducer.d.ts +19 -0
  25. package/lib/entity/cardPolicy/cardPolicyReducer.js +175 -0
  26. package/lib/entity/cardPolicy/cardPolicySelector.d.ts +32 -0
  27. package/lib/entity/cardPolicy/cardPolicySelector.js +99 -0
  28. package/lib/entity/cardPolicy/cardPolicyState.d.ts +205 -0
  29. package/lib/entity/cardPolicy/cardPolicyState.js +14 -0
  30. package/lib/entity/cardPolicy/extractPolicyDocumentEpic.d.ts +18 -0
  31. package/lib/entity/cardPolicy/extractPolicyDocumentEpic.js +68 -0
  32. package/lib/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.d.ts +26 -0
  33. package/lib/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.js +47 -0
  34. package/lib/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.d.ts +25 -0
  35. package/lib/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.js +39 -0
  36. package/lib/entity/cardPolicy/policyRecommendationFromUploadEpic.d.ts +24 -0
  37. package/lib/entity/cardPolicy/policyRecommendationFromUploadEpic.js +105 -0
  38. package/lib/entity/company/companyPayload.d.ts +4 -0
  39. package/lib/entity/company/companyPayload.js +6 -0
  40. package/lib/entity/company/companyStateTypes.d.ts +7 -0
  41. package/lib/entity/jeSchedules/jeSchedulesPayload.d.ts +1 -0
  42. package/lib/entity/jeSchedules/jeSchedulesPayload.js +19 -0
  43. package/lib/entity/jeSchedules/jeSchedulesState.d.ts +2 -0
  44. package/lib/entity/jeSchedules/jeSchedulesTypes.d.ts +1 -1
  45. package/lib/entity/monthEndCloseChecks/monthEndCloseChecksState.d.ts +1 -1
  46. package/lib/entity/paymentAccount/paymentAccountSelector.d.ts +1 -0
  47. package/lib/entity/paymentAccount/paymentAccountSelector.js +9 -0
  48. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  49. package/lib/entity/snackbar/snackbarTypes.js +5 -0
  50. package/lib/entity/task/taskPayload.d.ts +3 -1
  51. package/lib/entity/task/taskPayload.js +2 -0
  52. package/lib/entity/task/taskState.d.ts +2 -0
  53. package/lib/entity/tenant/clearAllEpic.d.ts +8 -2
  54. package/lib/entity/tenant/clearAllEpic.js +12 -0
  55. package/lib/entity/tenant/epic/deleteConnectionEpic.d.ts +1 -1
  56. package/lib/entity/tenant/epic/initEmailConnectOAuthEpic.d.ts +21 -0
  57. package/lib/entity/tenant/epic/initEmailConnectOAuthEpic.js +59 -0
  58. package/lib/entity/tenant/epic/saveAPIKeyConnectionEpic.d.ts +1 -1
  59. package/lib/entity/tenant/epic/saveConnectorCredentialsEpic.d.ts +3 -3
  60. package/lib/entity/tenant/epic/saveOAuthConnectionEpic.d.ts +1 -1
  61. package/lib/entity/tenant/tenantPayload.d.ts +1 -0
  62. package/lib/entity/tenant/tenantReducer.d.ts +38 -25
  63. package/lib/entity/tenant/tenantReducer.js +70 -10
  64. package/lib/entity/tenant/tenantState.d.ts +1 -0
  65. package/lib/entity/transaction/payloadTypes/transactionPayload.d.ts +2 -0
  66. package/lib/entity/transaction/payloadTypes/transactionPayload.js +17 -2
  67. package/lib/entity/transaction/stateTypes/transaction.d.ts +2 -0
  68. package/lib/epic.d.ts +31 -3
  69. package/lib/epic.js +32 -3
  70. package/lib/esm/commonStateTypes/amount.js +7 -0
  71. package/lib/esm/commonStateTypes/animations.js +1 -0
  72. package/lib/esm/commonStateTypes/workingDayHelper.js +26 -0
  73. package/lib/esm/entity/aiCfo/aiCfoReducer.js +249 -9
  74. package/lib/esm/entity/aiCfo/aiCfoSelector.js +17 -1
  75. package/lib/esm/entity/aiCfo/aiCfoState.js +17 -0
  76. package/lib/esm/entity/approvalRule/approvalRuleConflict.js +74 -0
  77. package/lib/esm/entity/approvalRule/approvalRulePayload.js +149 -10
  78. package/lib/esm/entity/approvalRule/approvalRuleSelector.js +35 -0
  79. package/lib/esm/entity/cardPolicy/cardPolicyPayload.js +130 -0
  80. package/lib/esm/entity/cardPolicy/cardPolicyReducer.js +171 -0
  81. package/lib/esm/entity/cardPolicy/cardPolicySelector.js +75 -0
  82. package/lib/esm/entity/cardPolicy/cardPolicyState.js +9 -0
  83. package/lib/esm/entity/cardPolicy/extractPolicyDocumentEpic.js +64 -0
  84. package/lib/esm/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.js +43 -0
  85. package/lib/esm/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.js +35 -0
  86. package/lib/esm/entity/cardPolicy/policyRecommendationFromUploadEpic.js +101 -0
  87. package/lib/esm/entity/company/companyPayload.js +6 -0
  88. package/lib/esm/entity/jeSchedules/jeSchedulesPayload.js +19 -0
  89. package/lib/esm/entity/paymentAccount/paymentAccountSelector.js +8 -0
  90. package/lib/esm/entity/snackbar/snackbarTypes.js +5 -0
  91. package/lib/esm/entity/task/taskPayload.js +2 -0
  92. package/lib/esm/entity/tenant/clearAllEpic.js +12 -0
  93. package/lib/esm/entity/tenant/epic/initEmailConnectOAuthEpic.js +55 -0
  94. package/lib/esm/entity/tenant/tenantReducer.js +68 -8
  95. package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +17 -2
  96. package/lib/esm/epic.js +32 -3
  97. package/lib/esm/index.js +66 -25
  98. package/lib/esm/reducer.js +18 -0
  99. package/lib/esm/view/aiCfoView/aiCfoViewReducer.js +6 -3
  100. package/lib/esm/view/aiCfoView/epics/createSessionAndSubmitEpic.js +5 -2
  101. package/lib/esm/view/aiCfoView/epics/createSessionEpic.js +2 -1
  102. package/lib/esm/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +12 -2
  103. package/lib/esm/view/companyTaskManagerView/companyTaskManagerViewReducer.js +39 -11
  104. package/lib/esm/view/companyTaskManagerView/companyTaskManagerViewSelector.js +14 -4
  105. package/lib/esm/view/companyTaskManagerView/epics/fetchCockpitContextEpic.js +38 -0
  106. package/lib/esm/view/companyTaskManagerView/epics/fetchCompanyTaskManagerViewEpic.js +37 -28
  107. package/lib/esm/view/companyTaskManagerView/epics/updateCompanyTaskManagerViewFiltersEpic.js +16 -0
  108. package/lib/esm/view/companyView/epic/companyPassport/updateCapitalizationAccountThresholdEpic.js +3 -3
  109. package/lib/esm/view/companyView/epic/fetchAllCockpitViewsEpic.js +2 -2
  110. package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +1 -1
  111. package/lib/esm/view/fileView/epic/deleteFileEpic.js +2 -2
  112. package/lib/esm/view/fileView/epic/deleteFileListEpic.js +2 -2
  113. package/lib/esm/view/onboardingView/customerView/epic/aiAgentsActivation/fetchAiAgentsActivationStatusEpic.js +40 -0
  114. package/lib/esm/view/onboardingView/customerView/epic/customerDetails/acknowledgeOnboardingAiActivationViewedEpic.js +29 -0
  115. package/lib/esm/view/onboardingView/customerView/epic/customerDetails/acknowledgeOnboardingAiFinanceTeamEpic.js +40 -0
  116. package/lib/esm/view/onboardingView/customerView/epic/customerDetails/updateOnboardingCustomerViewEpic.js +24 -18
  117. package/lib/esm/view/onboardingView/customerView/epic/customerDetails/updateOnboardingCustomerViewLocalStoreDataEpic.js +29 -17
  118. package/lib/esm/view/onboardingView/customerView/onboardingCustomerViewReducer.js +223 -51
  119. package/lib/esm/view/onboardingView/customerView/onboardingCustomerViewSelector.js +36 -18
  120. package/lib/esm/view/onboardingView/customerView/onboardingCustomerViewState.js +45 -6
  121. package/lib/esm/view/spendManagement/autotransferRules/autoTransferRulesSelector.js +22 -2
  122. package/lib/esm/view/spendManagement/billPay/billPayReview/billPayReviewSelector.js +14 -0
  123. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.js +109 -12
  124. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/deleteBillPayApprovalRuleEpic.js +10 -2
  125. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/fetchBillPaySetupApproverViewEpic.js +8 -4
  126. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/initializeBillPaySetupApproverViewUpdateDataEpic.js +11 -7
  127. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/reorderBillPayApprovalRulesEpic.js +54 -0
  128. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/saveBillPaySetupApproverViewUpdatesEpic.js +13 -4
  129. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +144 -16
  130. package/lib/esm/view/spendManagement/billPay/editBillView/editBillViewSelector.js +60 -4
  131. package/lib/esm/view/spendManagement/billPay/editBillView/epics/fetchEditBillDetailPageEpic.js +8 -2
  132. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.js +29 -0
  133. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.js +78 -0
  134. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.js +49 -0
  135. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.js +47 -0
  136. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.js +32 -0
  137. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.js +32 -0
  138. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.js +54 -0
  139. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.js +92 -0
  140. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.js +212 -0
  141. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.js +10 -0
  142. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.js +23 -0
  143. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.js +36 -0
  144. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.js +27 -0
  145. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.js +28 -0
  146. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.js +52 -0
  147. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.js +22 -0
  148. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.js +1 -0
  149. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.js +36 -0
  150. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.js +39 -0
  151. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.js +34 -0
  152. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.js +71 -0
  153. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.js +21 -0
  154. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.js +1 -0
  155. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.js +38 -0
  156. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyAiCardPolicyFormDraftUpdate.js +289 -0
  157. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToAiCardPolicyDraft.js +109 -0
  158. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToDraftEpic.js +44 -0
  159. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToManualCardPolicyDraft.js +111 -0
  160. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyUploadPlanToAiCardPolicyDraft.js +25 -0
  161. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildAiCardPolicyFormDraftSeed.js +363 -0
  162. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildManualCardPolicyFormDraftSeed.js +36 -0
  163. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyChipIds.js +19 -0
  164. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyFormDraftTypes.js +6 -0
  165. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyRequestParts.js +119 -0
  166. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.js +154 -0
  167. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.js +22 -0
  168. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.js +1 -0
  169. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.js +49 -0
  170. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/deriveAiPolicyReviewRowsFromInputs.js +140 -0
  171. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.js +20 -0
  172. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/seedAiCardPolicyFormDraftEpic.js +100 -0
  173. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toBulkCardPolicyTemplateRequestsFromDraft.js +96 -0
  174. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toCardPolicyTemplateRequestFromDraft.js +59 -0
  175. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toManualCardPolicyTemplateRequestFromDraft.js +24 -0
  176. package/lib/esm/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +25 -0
  177. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.js +1 -0
  178. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/applyAiCardCreationFormDraftUpdate.js +34 -0
  179. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.js +57 -0
  180. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.js +35 -0
  181. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.js +2 -2
  182. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.js +42 -4
  183. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.js +35 -0
  184. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/seedAiCardCreationFormDraftEpic.js +62 -0
  185. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.js +44 -0
  186. package/lib/esm/view/spendManagement/commonSetup/epic/setup/parseUploadedKybDocumentEpic.js +58 -0
  187. package/lib/esm/view/spendManagement/commonSetup/epic/setup/parseUploadedKycDocumentEpic.js +77 -0
  188. package/lib/esm/view/spendManagement/commonSetup/kycKybAutofillActions.js +14 -0
  189. package/lib/esm/view/spendManagement/commonSetup/kycKybParseMapper.js +221 -0
  190. package/lib/esm/view/spendManagement/commonSetup/setupViewReducer.js +106 -52
  191. package/lib/esm/view/spendManagement/commonSetup/setupViewSelector.js +6 -1
  192. package/lib/esm/view/spendManagement/commonSetup/types/kycKybAutofill.js +41 -0
  193. package/lib/esm/view/spendManagement/reimbursement/editRemiView/epics/fetchEditRemiDetailPageEpic.js +5 -1
  194. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/deleteRemiApprovalRuleEpic.js +10 -2
  195. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/fetchRemiSetupApproverViewEpic.js +8 -2
  196. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/initializeRemiSetupApproverViewUpdateDataEpic.js +11 -7
  197. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/reorderRemiApprovalRulesEpic.js +61 -0
  198. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/saveRemiSetupApproverViewUpdatesEpic.js +13 -4
  199. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.js +80 -11
  200. package/lib/esm/view/transactionDetail/epics/saveTransactionHelper.js +1 -0
  201. package/lib/esm/view/transactionDetail/epics/updateTransactionDetailEpic.js +6 -0
  202. package/lib/esm/view/transactionDetail/transactionDetailLocalDataHelper.js +7 -1
  203. package/lib/index.d.ts +82 -32
  204. package/lib/index.js +266 -34
  205. package/lib/reducer.d.ts +18 -0
  206. package/lib/reducer.js +18 -0
  207. package/lib/view/aiCfoView/aiCfoViewReducer.d.ts +11 -2
  208. package/lib/view/aiCfoView/aiCfoViewReducer.js +6 -3
  209. package/lib/view/aiCfoView/epics/createSessionAndSubmitEpic.js +5 -2
  210. package/lib/view/aiCfoView/epics/createSessionEpic.js +2 -1
  211. package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.d.ts +8 -1
  212. package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +12 -2
  213. package/lib/view/companyTaskManagerView/companyTaskManagerViewPayload.d.ts +19 -11
  214. package/lib/view/companyTaskManagerView/companyTaskManagerViewReducer.d.ts +11 -5
  215. package/lib/view/companyTaskManagerView/companyTaskManagerViewReducer.js +40 -12
  216. package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.d.ts +2 -0
  217. package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.js +13 -3
  218. package/lib/view/companyTaskManagerView/companyTaskManagerViewState.d.ts +11 -3
  219. package/lib/view/companyTaskManagerView/epics/fetchCockpitContextEpic.d.ts +10 -0
  220. package/lib/view/companyTaskManagerView/epics/fetchCockpitContextEpic.js +42 -0
  221. package/lib/view/companyTaskManagerView/epics/fetchCompanyTaskManagerViewEpic.d.ts +1 -3
  222. package/lib/view/companyTaskManagerView/epics/fetchCompanyTaskManagerViewEpic.js +37 -28
  223. package/lib/view/companyTaskManagerView/epics/updateCompanyTaskManagerViewFiltersEpic.d.ts +6 -0
  224. package/lib/view/companyTaskManagerView/epics/updateCompanyTaskManagerViewFiltersEpic.js +20 -0
  225. package/lib/view/companyView/epic/companyPassport/updateCapitalizationAccountThresholdEpic.d.ts +1 -1
  226. package/lib/view/companyView/epic/companyPassport/updateCapitalizationAccountThresholdEpic.js +2 -2
  227. package/lib/view/companyView/epic/fetchAllCockpitViewsEpic.js +2 -2
  228. package/lib/view/companyView/types/cockpitTypes.d.ts +3 -2
  229. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  230. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +1 -1
  231. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +1 -1
  232. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +1 -1
  233. package/lib/view/expenseAutomationView/types/reconciliationViewState.d.ts +1 -1
  234. package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +1 -1
  235. package/lib/view/fileView/epic/deleteFileEpic.js +1 -1
  236. package/lib/view/fileView/epic/deleteFileListEpic.js +1 -1
  237. package/lib/view/onboardingView/customerView/epic/aiAgentsActivation/fetchAiAgentsActivationStatusEpic.d.ts +7 -0
  238. package/lib/view/onboardingView/customerView/epic/aiAgentsActivation/fetchAiAgentsActivationStatusEpic.js +44 -0
  239. package/lib/view/onboardingView/customerView/epic/customerDetails/acknowledgeOnboardingAiActivationViewedEpic.d.ts +8 -0
  240. package/lib/view/onboardingView/customerView/epic/customerDetails/acknowledgeOnboardingAiActivationViewedEpic.js +33 -0
  241. package/lib/view/onboardingView/customerView/epic/customerDetails/acknowledgeOnboardingAiFinanceTeamEpic.d.ts +9 -0
  242. package/lib/view/onboardingView/customerView/epic/customerDetails/acknowledgeOnboardingAiFinanceTeamEpic.js +44 -0
  243. package/lib/view/onboardingView/customerView/epic/customerDetails/updateOnboardingCustomerViewEpic.js +24 -18
  244. package/lib/view/onboardingView/customerView/epic/customerDetails/updateOnboardingCustomerViewLocalStoreDataEpic.d.ts +2 -2
  245. package/lib/view/onboardingView/customerView/epic/customerDetails/updateOnboardingCustomerViewLocalStoreDataEpic.js +27 -15
  246. package/lib/view/onboardingView/customerView/onboardingCustomerViewPayload.d.ts +3 -0
  247. package/lib/view/onboardingView/customerView/onboardingCustomerViewReducer.d.ts +44 -5
  248. package/lib/view/onboardingView/customerView/onboardingCustomerViewReducer.js +225 -52
  249. package/lib/view/onboardingView/customerView/onboardingCustomerViewSelector.d.ts +6 -1
  250. package/lib/view/onboardingView/customerView/onboardingCustomerViewSelector.js +39 -18
  251. package/lib/view/onboardingView/customerView/onboardingCustomerViewState.d.ts +53 -8
  252. package/lib/view/onboardingView/customerView/onboardingCustomerViewState.js +47 -7
  253. package/lib/view/people/peopleTypes.d.ts +1 -1
  254. package/lib/view/scheduleView/scheduleListView/scheduleListTypes.d.ts +1 -1
  255. package/lib/view/spendManagement/autotransferRules/autoTransferRulesSelector.d.ts +8 -1
  256. package/lib/view/spendManagement/autotransferRules/autoTransferRulesSelector.js +21 -1
  257. package/lib/view/spendManagement/autotransferRules/autoTransferRulesState.d.ts +22 -0
  258. package/lib/view/spendManagement/billPay/billPayReview/billPayReviewSelector.d.ts +7 -0
  259. package/lib/view/spendManagement/billPay/billPayReview/billPayReviewSelector.js +14 -0
  260. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.d.ts +14 -3
  261. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.js +110 -13
  262. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewState.d.ts +16 -0
  263. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/deleteBillPayApprovalRuleEpic.js +10 -2
  264. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/fetchBillPaySetupApproverViewEpic.js +8 -4
  265. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/initializeBillPaySetupApproverViewUpdateDataEpic.js +10 -6
  266. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/reorderBillPayApprovalRulesEpic.d.ts +23 -0
  267. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/reorderBillPayApprovalRulesEpic.js +58 -0
  268. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/saveBillPaySetupApproverViewUpdatesEpic.js +12 -3
  269. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.d.ts +59 -1
  270. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +146 -17
  271. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonState.d.ts +31 -5
  272. package/lib/view/spendManagement/billPay/editBillView/editBillViewSelector.d.ts +8 -1
  273. package/lib/view/spendManagement/billPay/editBillView/editBillViewSelector.js +60 -4
  274. package/lib/view/spendManagement/billPay/editBillView/epics/fetchEditBillDetailPageEpic.js +8 -2
  275. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.d.ts +47 -0
  276. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.js +34 -0
  277. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.d.ts +23 -0
  278. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.js +82 -0
  279. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.d.ts +40 -0
  280. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.js +53 -0
  281. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.d.ts +37 -0
  282. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.js +53 -0
  283. package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.d.ts +14 -0
  284. package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.js +36 -0
  285. package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.d.ts +7 -0
  286. package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.js +36 -0
  287. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.d.ts +56 -0
  288. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.js +60 -0
  289. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.d.ts +22 -0
  290. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.js +96 -0
  291. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.d.ts +59 -0
  292. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.js +217 -0
  293. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.d.ts +122 -0
  294. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.js +13 -0
  295. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.d.ts +7 -0
  296. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.js +27 -0
  297. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.d.ts +9 -0
  298. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.js +40 -0
  299. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.d.ts +7 -0
  300. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.js +31 -0
  301. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.d.ts +15 -0
  302. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.js +32 -0
  303. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.d.ts +14 -0
  304. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.js +56 -0
  305. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.d.ts +15 -0
  306. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.js +28 -0
  307. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.d.ts +8 -0
  308. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.js +2 -0
  309. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.d.ts +8 -0
  310. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.js +40 -0
  311. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.d.ts +8 -0
  312. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.js +43 -0
  313. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.d.ts +8 -0
  314. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.js +38 -0
  315. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.d.ts +15 -0
  316. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.js +75 -0
  317. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.d.ts +15 -0
  318. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.js +27 -0
  319. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.d.ts +7 -0
  320. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.js +2 -0
  321. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.d.ts +8 -0
  322. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.js +42 -0
  323. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyAiCardPolicyFormDraftUpdate.d.ts +8 -0
  324. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyAiCardPolicyFormDraftUpdate.js +294 -0
  325. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToAiCardPolicyDraft.d.ts +8 -0
  326. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToAiCardPolicyDraft.js +113 -0
  327. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToDraftEpic.d.ts +9 -0
  328. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToDraftEpic.js +48 -0
  329. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToManualCardPolicyDraft.d.ts +8 -0
  330. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToManualCardPolicyDraft.js +115 -0
  331. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyUploadPlanToAiCardPolicyDraft.d.ts +13 -0
  332. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyUploadPlanToAiCardPolicyDraft.js +29 -0
  333. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildAiCardPolicyFormDraftSeed.d.ts +14 -0
  334. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildAiCardPolicyFormDraftSeed.js +369 -0
  335. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildManualCardPolicyFormDraftSeed.d.ts +6 -0
  336. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildManualCardPolicyFormDraftSeed.js +40 -0
  337. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyChipIds.d.ts +7 -0
  338. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyChipIds.js +26 -0
  339. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyFormDraftTypes.d.ts +116 -0
  340. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyFormDraftTypes.js +10 -0
  341. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyRequestParts.d.ts +33 -0
  342. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyRequestParts.js +126 -0
  343. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.d.ts +52 -0
  344. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.js +158 -0
  345. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.d.ts +11 -0
  346. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.js +31 -0
  347. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.d.ts +12 -0
  348. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.js +2 -0
  349. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.d.ts +9 -0
  350. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.js +53 -0
  351. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/deriveAiPolicyReviewRowsFromInputs.d.ts +10 -0
  352. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/deriveAiPolicyReviewRowsFromInputs.js +144 -0
  353. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.d.ts +7 -0
  354. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.js +24 -0
  355. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/seedAiCardPolicyFormDraftEpic.d.ts +11 -0
  356. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/seedAiCardPolicyFormDraftEpic.js +104 -0
  357. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toBulkCardPolicyTemplateRequestsFromDraft.d.ts +22 -0
  358. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toBulkCardPolicyTemplateRequestsFromDraft.js +100 -0
  359. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toCardPolicyTemplateRequestFromDraft.d.ts +8 -0
  360. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toCardPolicyTemplateRequestFromDraft.js +63 -0
  361. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toManualCardPolicyTemplateRequestFromDraft.d.ts +3 -0
  362. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toManualCardPolicyTemplateRequestFromDraft.js +28 -0
  363. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardList.d.ts +1 -1
  364. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.d.ts +14 -0
  365. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +27 -1
  366. package/lib/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.d.ts +34 -0
  367. package/lib/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.js +2 -0
  368. package/lib/view/spendManagement/chargeCards/issueChargeCard/applyAiCardCreationFormDraftUpdate.d.ts +7 -0
  369. package/lib/view/spendManagement/chargeCards/issueChargeCard/applyAiCardCreationFormDraftUpdate.js +38 -0
  370. package/lib/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.d.ts +12 -0
  371. package/lib/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.js +61 -0
  372. package/lib/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.d.ts +9 -0
  373. package/lib/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.js +39 -0
  374. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.d.ts +2 -2
  375. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.js +1 -1
  376. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.d.ts +12 -2
  377. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.js +43 -5
  378. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.d.ts +7 -0
  379. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.js +42 -1
  380. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardState.d.ts +5 -0
  381. package/lib/view/spendManagement/chargeCards/issueChargeCard/seedAiCardCreationFormDraftEpic.d.ts +11 -0
  382. package/lib/view/spendManagement/chargeCards/issueChargeCard/seedAiCardCreationFormDraftEpic.js +66 -0
  383. package/lib/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.d.ts +3 -0
  384. package/lib/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.js +48 -0
  385. package/lib/view/spendManagement/commonSetup/epic/setup/parseUploadedKybDocumentEpic.d.ts +28 -0
  386. package/lib/view/spendManagement/commonSetup/epic/setup/parseUploadedKybDocumentEpic.js +62 -0
  387. package/lib/view/spendManagement/commonSetup/epic/setup/parseUploadedKycDocumentEpic.d.ts +9 -0
  388. package/lib/view/spendManagement/commonSetup/epic/setup/parseUploadedKycDocumentEpic.js +81 -0
  389. package/lib/view/spendManagement/commonSetup/kycKybAutofillActions.d.ts +24 -0
  390. package/lib/view/spendManagement/commonSetup/kycKybAutofillActions.js +17 -0
  391. package/lib/view/spendManagement/commonSetup/kycKybParseMapper.d.ts +29 -0
  392. package/lib/view/spendManagement/commonSetup/kycKybParseMapper.js +229 -0
  393. package/lib/view/spendManagement/commonSetup/setupViewReducer.d.ts +28 -2
  394. package/lib/view/spendManagement/commonSetup/setupViewReducer.js +107 -53
  395. package/lib/view/spendManagement/commonSetup/setupViewSelector.d.ts +7 -2
  396. package/lib/view/spendManagement/commonSetup/setupViewSelector.js +6 -1
  397. package/lib/view/spendManagement/commonSetup/setupViewState.d.ts +19 -0
  398. package/lib/view/spendManagement/commonSetup/types/kycKybAutofill.d.ts +154 -0
  399. package/lib/view/spendManagement/commonSetup/types/kycKybAutofill.js +46 -0
  400. package/lib/view/spendManagement/reimbursement/editRemiView/epics/fetchEditRemiDetailPageEpic.js +5 -1
  401. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/deleteRemiApprovalRuleEpic.js +10 -2
  402. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/fetchRemiSetupApproverViewEpic.js +8 -2
  403. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/initializeRemiSetupApproverViewUpdateDataEpic.js +10 -6
  404. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/reorderRemiApprovalRulesEpic.d.ts +14 -0
  405. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/reorderRemiApprovalRulesEpic.js +65 -0
  406. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/saveRemiSetupApproverViewUpdatesEpic.js +12 -3
  407. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.d.ts +14 -3
  408. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.js +81 -12
  409. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewState.d.ts +12 -0
  410. package/lib/view/taskManager/taskListView/taskList.d.ts +3 -3
  411. package/lib/view/taskManager/taskListView/taskListReducer.d.ts +1 -1
  412. package/lib/view/transactionDetail/epics/saveTransactionHelper.js +1 -0
  413. package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.js +6 -0
  414. package/lib/view/transactionDetail/journalEntryLinesViewModel.d.ts +1 -1
  415. package/lib/view/transactionDetail/transactionDetailLocalDataHelper.js +7 -1
  416. package/lib/view/transactionDetail/transactionDetailState.d.ts +1 -0
  417. package/lib/zeniAPI.d.ts +1 -0
  418. package/package.json +7 -5
@@ -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) {
@@ -136,9 +137,171 @@ export const toAiCfoVisualization = (visualization) => {
136
137
  if (visualization.type == null || visualization.data == null) {
137
138
  return undefined;
138
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
+ }
139
209
  return {
140
- type: toAiCfoVisualizationTypeStrict(visualization.type) ?? 'table',
141
- 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),
142
305
  };
143
306
  };
144
307
  const toAiCfoVisualizationData = (data) => {
@@ -375,10 +538,8 @@ const aiCfo = createSlice({
375
538
  // Update state - append new complete Q&As to existing ones
376
539
  session.questionAnswers = mergeQuestionAnswerPairs(session.questionAnswers, completeQAs);
377
540
  },
378
- /**
379
- * Upsert a Q/A pair: if the questionAnswerId exists, upsert the response block; if not, add a new Q/A entry.
380
- * Used for push notification payloads that may introduce a new question.
381
- */
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.
382
543
  upsertOrAddQuestionAnswerPayload(draft, action) {
383
544
  const { chatSessionId, questionAnswerId, question: { questionId, createdAt, text }, answerPayload, userId, insertQuestionAnswer, } = action.payload;
384
545
  const session = draft.aiCfoByChatSessionId[chatSessionId];
@@ -455,10 +616,82 @@ const aiCfo = createSlice({
455
616
  session.questionAnswers.push(qa);
456
617
  }
457
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
+ },
458
691
  clearSession(draft, action) {
459
692
  const sessionId = action.payload;
460
693
  delete draft.aiCfoByChatSessionId[sessionId];
461
- // Clear partial Q&A if it belongs to the cleared session
694
+ delete draft.syntheticAnswersByChatSessionId[sessionId];
462
695
  if (draft.partialQuestionAnswers?.[sessionId] != null) {
463
696
  draft.partialQuestionAnswers[sessionId] = undefined;
464
697
  }
@@ -466,6 +699,7 @@ const aiCfo = createSlice({
466
699
  clearAiCfo(draft) {
467
700
  draft.aiCfoByChatSessionId = {};
468
701
  draft.partialQuestionAnswers = {};
702
+ draft.syntheticAnswersByChatSessionId = {};
469
703
  },
470
704
  deleteQuestion(draft, action) {
471
705
  const { chatSessionId, questionAnswerId } = action.payload;
@@ -478,6 +712,12 @@ const aiCfo = createSlice({
478
712
  if (idx !== -1) {
479
713
  session.questionAnswers.splice(idx, 1);
480
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
+ }
481
721
  },
482
722
  },
483
723
  });
@@ -490,5 +730,5 @@ const toChatSession = (chatSessionPayload) => {
490
730
  createdAt: zeniDate(created_at),
491
731
  };
492
732
  };
493
- 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;
494
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,157 @@ 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
+ // Backend wire name is 'accounting_class_id' — kept in sync with
69
+ // the write-side mapper in 'commonPayload.ts'. State-side and
70
+ // form-side keep 'department' / 'departmentIds' to match product
71
+ // copy.
72
+ .filter((condition) => condition.field === 'accounting_class_id')
73
+ .forEach((condition) => {
74
+ const department = toDepartmentCriteria(condition);
75
+ if (department != null) {
76
+ results.push(department);
77
+ }
78
+ });
79
+ return results;
80
+ };
81
+ const legacyAmountRangeToCriteria = (legacy) => {
82
+ if (legacy.length === 0) {
83
+ return [];
84
+ }
85
+ // The state-side 'Criteria[]' model allows at most one
86
+ // 'AmountCriteria' per rule (see 'approvalRuleState.ts'). The legacy
87
+ // wire was an array, so a multi-entry payload can't be represented
88
+ // here without losing data. Read the first entry and log a warning
89
+ // if production rules ever ship more — that would signal a backend
90
+ // regression we want to catch early rather than silently truncating.
91
+ if (legacy.length > 1) {
92
+ console.warn('[approvalRulePayload] legacyAmountRangeToCriteria: received ' +
93
+ legacy.length +
94
+ ' entries but the state model only supports one; using the ' +
95
+ 'first entry and dropping the rest.');
96
+ }
97
+ const first = legacy[0] ?? {};
98
+ const currency = first.currency_code ?? 'USD';
99
+ const symbol = first.currency_symbol ?? '$';
100
+ const min = typeof first.min === 'number'
101
+ ? toAmount(first.min, currency, symbol)
102
+ : undefined;
103
+ const max = typeof first.max === 'number'
104
+ ? toAmount(first.max, currency, symbol)
105
+ : undefined;
106
+ if (min == null && max == null) {
107
+ return [];
108
+ }
109
+ const comparator = min != null && max != null
110
+ ? 'range'
111
+ : min != null
112
+ ? 'greater_than'
113
+ : 'less_than';
114
+ return [{ type: 'amount', comparator, min, max }];
115
+ };
116
+ const toAmountCriteria = (payload) => {
117
+ if (!Array.isArray(payload.conditions)) {
118
+ return undefined;
119
+ }
120
+ const amountConditions = payload.conditions.filter((condition) => condition.field === 'amount');
121
+ // Approval Rules 3.0 — an 'eq' condition represents min === max. Fold
122
+ // it into both finders so it decodes as comparator: 'range' (closed
123
+ // single-point) rather than 'greater_than' (open upper).
124
+ const gteCondition = amountConditions.find((condition) => condition.type === 'gte' || condition.type === 'eq');
125
+ const lteCondition = amountConditions.find((condition) => condition.type === 'lte' || condition.type === 'eq');
126
+ if (gteCondition == null && lteCondition == null) {
127
+ return undefined;
128
+ }
129
+ const currencyCode = payload.currency_code ?? 'USD';
130
+ const currencySymbol = payload.currency_symbol ?? '$';
131
+ const min = typeof gteCondition?.value === 'number'
132
+ ? toAmount(gteCondition.value, currencyCode, currencySymbol)
133
+ : undefined;
134
+ const max = typeof lteCondition?.value === 'number'
135
+ ? toAmount(lteCondition.value, currencyCode, currencySymbol)
136
+ : undefined;
137
+ let comparator;
138
+ if (min != null && max != null) {
139
+ comparator = 'range';
140
+ }
141
+ else if (min != null) {
142
+ comparator = 'greater_than';
143
+ }
144
+ else {
145
+ comparator = 'less_than';
146
+ }
147
+ return { type: 'amount', comparator, min, max };
148
+ };
149
+ const toVendorCriteria = (condition) => {
150
+ if (!Array.isArray(condition.value)) {
151
+ return undefined;
152
+ }
153
+ return {
154
+ type: 'vendor',
155
+ operator: condition.type === 'not_in' ? 'is_not' : 'is',
156
+ vendorIds: condition.value,
157
+ };
158
+ };
159
+ const toDepartmentCriteria = (condition) => {
160
+ if (!Array.isArray(condition.value)) {
161
+ return undefined;
162
+ }
163
+ return {
164
+ type: 'department',
165
+ operator: condition.type === 'not_in' ? 'is_not' : 'is',
166
+ departmentIds: condition.value,
167
+ };
29
168
  };
30
169
  const toApprovalSteps = (payload) => {
31
170
  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
+ }