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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (514) 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/viewAndReport/viewAndReport.d.ts +2 -2
  7. package/lib/commonStateTypes/viewAndReport/viewAndReport.js +2 -0
  8. package/lib/commonStateTypes/workingDayHelper.d.ts +9 -0
  9. package/lib/commonStateTypes/workingDayHelper.js +28 -1
  10. package/lib/entity/account/accountSelector.d.ts +9 -0
  11. package/lib/entity/account/accountSelector.js +14 -1
  12. package/lib/entity/account/accountState.d.ts +1 -1
  13. package/lib/entity/accountGroup/accountGroupState.d.ts +1 -1
  14. package/lib/entity/aiCfo/aiCfoPayload.d.ts +64 -5
  15. package/lib/entity/aiCfo/aiCfoReducer.d.ts +23 -2
  16. package/lib/entity/aiCfo/aiCfoReducer.js +252 -10
  17. package/lib/entity/aiCfo/aiCfoSelector.d.ts +4 -1
  18. package/lib/entity/aiCfo/aiCfoSelector.js +19 -1
  19. package/lib/entity/aiCfo/aiCfoState.d.ts +98 -4
  20. package/lib/entity/aiCfo/aiCfoState.js +20 -1
  21. package/lib/entity/approvalRule/approvalRuleConflict.d.ts +56 -0
  22. package/lib/entity/approvalRule/approvalRuleConflict.js +77 -0
  23. package/lib/entity/approvalRule/approvalRulePayload.d.ts +34 -5
  24. package/lib/entity/approvalRule/approvalRulePayload.js +145 -10
  25. package/lib/entity/approvalRule/approvalRuleSelector.d.ts +25 -1
  26. package/lib/entity/approvalRule/approvalRuleSelector.js +40 -0
  27. package/lib/entity/approvalRule/approvalRuleState.d.ts +59 -7
  28. package/lib/entity/cardPolicy/cardPolicyPayload.d.ts +277 -0
  29. package/lib/entity/cardPolicy/cardPolicyPayload.js +143 -0
  30. package/lib/entity/cardPolicy/cardPolicyReducer.d.ts +19 -0
  31. package/lib/entity/cardPolicy/cardPolicyReducer.js +175 -0
  32. package/lib/entity/cardPolicy/cardPolicySelector.d.ts +32 -0
  33. package/lib/entity/cardPolicy/cardPolicySelector.js +99 -0
  34. package/lib/entity/cardPolicy/cardPolicyState.d.ts +205 -0
  35. package/lib/entity/cardPolicy/cardPolicyState.js +14 -0
  36. package/lib/entity/cardPolicy/extractPolicyDocumentEpic.d.ts +18 -0
  37. package/lib/entity/cardPolicy/extractPolicyDocumentEpic.js +68 -0
  38. package/lib/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.d.ts +26 -0
  39. package/lib/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.js +47 -0
  40. package/lib/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.d.ts +25 -0
  41. package/lib/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.js +39 -0
  42. package/lib/entity/cardPolicy/policyRecommendationFromUploadEpic.d.ts +24 -0
  43. package/lib/entity/cardPolicy/policyRecommendationFromUploadEpic.js +105 -0
  44. package/lib/entity/class/classReducer.d.ts +4 -4
  45. package/lib/entity/class/classState.d.ts +1 -1
  46. package/lib/entity/company/companyPayload.d.ts +4 -0
  47. package/lib/entity/company/companyPayload.js +4 -0
  48. package/lib/entity/company/companyStateTypes.d.ts +4 -0
  49. package/lib/entity/forecast/forecastState.d.ts +1 -1
  50. package/lib/entity/jeSchedules/jeSchedulesPayload.d.ts +1 -0
  51. package/lib/entity/jeSchedules/jeSchedulesPayload.js +19 -0
  52. package/lib/entity/jeSchedules/jeSchedulesState.d.ts +2 -0
  53. package/lib/entity/jeSchedules/jeSchedulesTypes.d.ts +1 -1
  54. package/lib/entity/monthEndCloseChecks/monthEndCloseChecksState.d.ts +1 -1
  55. package/lib/entity/paymentAccount/paymentAccountSelector.d.ts +1 -0
  56. package/lib/entity/paymentAccount/paymentAccountSelector.js +9 -0
  57. package/lib/entity/sectionAccountsView/sectionAccountsView.d.ts +1 -1
  58. package/lib/entity/sectionClassesViewV2/sectionClassesView.d.ts +1 -1
  59. package/lib/entity/sectionClassesViewV2/sectionClassesViewReducer.d.ts +2 -2
  60. package/lib/entity/sectionProjectView/sectionProjectView.d.ts +1 -1
  61. package/lib/entity/sectionProjectView/sectionProjectViewReducer.d.ts +2 -2
  62. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  63. package/lib/entity/snackbar/snackbarTypes.js +7 -0
  64. package/lib/entity/task/taskPayload.d.ts +3 -1
  65. package/lib/entity/task/taskPayload.js +2 -0
  66. package/lib/entity/task/taskState.d.ts +2 -0
  67. package/lib/entity/tenant/clearAllEpic.d.ts +9 -2
  68. package/lib/entity/tenant/clearAllEpic.js +14 -0
  69. package/lib/entity/tenant/epic/deleteConnectionEpic.d.ts +1 -1
  70. package/lib/entity/tenant/epic/initEmailConnectOAuthEpic.d.ts +21 -0
  71. package/lib/entity/tenant/epic/initEmailConnectOAuthEpic.js +54 -0
  72. package/lib/entity/tenant/epic/saveAPIKeyConnectionEpic.d.ts +1 -1
  73. package/lib/entity/tenant/epic/saveConnectorCredentialsEpic.d.ts +3 -3
  74. package/lib/entity/tenant/epic/saveOAuthConnectionEpic.d.ts +1 -1
  75. package/lib/entity/tenant/tenantPayload.d.ts +22 -0
  76. package/lib/entity/tenant/tenantReducer.d.ts +52 -30
  77. package/lib/entity/tenant/tenantReducer.js +195 -11
  78. package/lib/entity/tenant/tenantState.d.ts +25 -1
  79. package/lib/entity/transaction/payloadTypes/transactionPayload.d.ts +4 -0
  80. package/lib/entity/transaction/payloadTypes/transactionPayload.js +17 -7
  81. package/lib/entity/transaction/stateTypes/transaction.d.ts +3 -0
  82. package/lib/entity/transaction/stateTypes/transactionLine.d.ts +2 -1
  83. package/lib/entity/transaction/stateTypes/transactionLine.js +2 -1
  84. package/lib/epic.d.ts +36 -2
  85. package/lib/epic.js +37 -2
  86. package/lib/esm/commonStateTypes/amount.js +7 -0
  87. package/lib/esm/commonStateTypes/animations.js +1 -0
  88. package/lib/esm/commonStateTypes/viewAndReport/viewAndReport.js +2 -0
  89. package/lib/esm/commonStateTypes/workingDayHelper.js +26 -0
  90. package/lib/esm/entity/account/accountSelector.js +11 -0
  91. package/lib/esm/entity/aiCfo/aiCfoReducer.js +252 -10
  92. package/lib/esm/entity/aiCfo/aiCfoSelector.js +17 -1
  93. package/lib/esm/entity/aiCfo/aiCfoState.js +17 -0
  94. package/lib/esm/entity/approvalRule/approvalRuleConflict.js +74 -0
  95. package/lib/esm/entity/approvalRule/approvalRulePayload.js +145 -10
  96. package/lib/esm/entity/approvalRule/approvalRuleSelector.js +35 -0
  97. package/lib/esm/entity/cardPolicy/cardPolicyPayload.js +130 -0
  98. package/lib/esm/entity/cardPolicy/cardPolicyReducer.js +171 -0
  99. package/lib/esm/entity/cardPolicy/cardPolicySelector.js +75 -0
  100. package/lib/esm/entity/cardPolicy/cardPolicyState.js +9 -0
  101. package/lib/esm/entity/cardPolicy/extractPolicyDocumentEpic.js +64 -0
  102. package/lib/esm/entity/cardPolicy/fetchCardPolicyVendorOptionsEpic.js +43 -0
  103. package/lib/esm/entity/cardPolicy/policyDocumentExtractionToRecommendationBridgeEpic.js +35 -0
  104. package/lib/esm/entity/cardPolicy/policyRecommendationFromUploadEpic.js +101 -0
  105. package/lib/esm/entity/company/companyPayload.js +4 -0
  106. package/lib/esm/entity/jeSchedules/jeSchedulesPayload.js +19 -0
  107. package/lib/esm/entity/paymentAccount/paymentAccountSelector.js +8 -0
  108. package/lib/esm/entity/snackbar/snackbarTypes.js +7 -0
  109. package/lib/esm/entity/task/taskPayload.js +2 -0
  110. package/lib/esm/entity/tenant/clearAllEpic.js +14 -0
  111. package/lib/esm/entity/tenant/epic/initEmailConnectOAuthEpic.js +50 -0
  112. package/lib/esm/entity/tenant/tenantReducer.js +192 -9
  113. package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +17 -7
  114. package/lib/esm/entity/transaction/stateTypes/transactionLine.js +1 -0
  115. package/lib/esm/epic.js +37 -2
  116. package/lib/esm/index.js +77 -34
  117. package/lib/esm/reducer.js +21 -0
  118. package/lib/esm/view/aiCfoView/aiCfoViewReducer.js +6 -3
  119. package/lib/esm/view/aiCfoView/epics/createSessionAndSubmitEpic.js +5 -2
  120. package/lib/esm/view/aiCfoView/epics/createSessionEpic.js +2 -1
  121. package/lib/esm/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +12 -2
  122. package/lib/esm/view/companyTaskManagerView/companyTaskManagerViewReducer.js +39 -11
  123. package/lib/esm/view/companyTaskManagerView/companyTaskManagerViewSelector.js +14 -4
  124. package/lib/esm/view/companyTaskManagerView/epics/fetchCockpitContextEpic.js +38 -0
  125. package/lib/esm/view/companyTaskManagerView/epics/fetchCompanyTaskManagerViewEpic.js +37 -28
  126. package/lib/esm/view/companyTaskManagerView/epics/updateCompanyTaskManagerViewFiltersEpic.js +16 -0
  127. package/lib/esm/view/companyView/companyViewReducer.js +46 -1
  128. package/lib/esm/view/companyView/epic/companyPassport/dismissCapitalizationOnboardingEpic.js +25 -0
  129. package/lib/esm/view/companyView/epic/companyPassport/updateCapitalizationAccountThresholdEpic.js +98 -0
  130. package/lib/esm/view/companyView/epic/fetchAllCockpitViewsEpic.js +2 -2
  131. package/lib/esm/view/companyView/types/companyPassport/companyPassportViewState.js +4 -0
  132. package/lib/esm/view/createTransferEntry/createTransferEntryReducer.js +82 -0
  133. package/lib/esm/view/createTransferEntry/createTransferEntrySelector.js +64 -0
  134. package/lib/esm/view/createTransferEntry/createTransferEntryState.js +17 -0
  135. package/lib/esm/view/createTransferEntry/epics/createTransferEntryEpic.js +136 -0
  136. package/lib/esm/view/createTransferEntry/epics/fetchTransferAccountsEpic.js +36 -0
  137. package/lib/esm/view/dashboard/dashboardReducer.js +11 -1
  138. package/lib/esm/view/expenseAutomationView/epics/common/fetchAllExpenseAutomationTabsEpic.js +3 -3
  139. package/lib/esm/view/expenseAutomationView/epics/common/refreshExpenseAutomationCurrentTabEpic.js +3 -4
  140. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +13 -9
  141. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/backgroundRefetchReviewTabEpic.js +3 -16
  142. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +9 -16
  143. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +2 -2
  144. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/markTransactionAsNotMiscategorizedEpic.js +2 -13
  145. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/saveTransactionCategorizationEpic.js +2 -6
  146. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/triggerReviewTabRefetchEpic.js +2 -2
  147. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/updateTransactionCategorizationEpic.js +2 -6
  148. package/lib/esm/view/expenseAutomationView/expenseAutomationViewReducer.js +3 -20
  149. package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +21 -49
  150. package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +14 -7
  151. package/lib/esm/view/expenseAutomationView/transactionFilterHelpers.js +106 -18
  152. package/lib/esm/view/fileView/epic/deleteFileEpic.js +2 -2
  153. package/lib/esm/view/fileView/epic/deleteFileListEpic.js +2 -2
  154. package/lib/esm/view/fileView/epic/updateFileNameEpic.js +2 -2
  155. package/lib/esm/view/onboardingView/customerView/epic/aiAgentsActivation/fetchAiAgentsActivationStatusEpic.js +40 -0
  156. package/lib/esm/view/onboardingView/customerView/epic/customerDetails/acknowledgeOnboardingAiActivationViewedEpic.js +29 -0
  157. package/lib/esm/view/onboardingView/customerView/epic/customerDetails/acknowledgeOnboardingAiFinanceTeamEpic.js +40 -0
  158. package/lib/esm/view/onboardingView/customerView/onboardingCustomerViewReducer.js +218 -50
  159. package/lib/esm/view/onboardingView/customerView/onboardingCustomerViewSelector.js +12 -2
  160. package/lib/esm/view/onboardingView/customerView/onboardingCustomerViewState.js +12 -0
  161. package/lib/esm/view/spendManagement/autotransferRules/autoTransferRulesSelector.js +22 -2
  162. package/lib/esm/view/spendManagement/billPay/billPayReview/billPayReviewSelector.js +14 -0
  163. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.js +109 -12
  164. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/deleteBillPayApprovalRuleEpic.js +10 -2
  165. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/fetchBillPaySetupApproverViewEpic.js +8 -4
  166. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/initializeBillPaySetupApproverViewUpdateDataEpic.js +11 -7
  167. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/reorderBillPayApprovalRulesEpic.js +54 -0
  168. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/saveBillPaySetupApproverViewUpdatesEpic.js +13 -4
  169. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +140 -16
  170. package/lib/esm/view/spendManagement/billPay/editBillView/editBillViewSelector.js +60 -4
  171. package/lib/esm/view/spendManagement/billPay/editBillView/epics/fetchEditBillDetailPageEpic.js +8 -2
  172. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.js +29 -0
  173. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.js +78 -0
  174. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.js +47 -0
  175. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.js +47 -0
  176. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.js +32 -0
  177. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.js +32 -0
  178. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.js +54 -0
  179. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.js +92 -0
  180. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.js +224 -0
  181. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.js +10 -0
  182. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.js +23 -0
  183. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.js +36 -0
  184. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.js +27 -0
  185. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.js +28 -0
  186. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.js +52 -0
  187. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.js +22 -0
  188. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.js +1 -0
  189. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.js +36 -0
  190. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.js +39 -0
  191. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.js +34 -0
  192. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.js +71 -0
  193. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.js +21 -0
  194. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.js +1 -0
  195. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.js +38 -0
  196. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyAiCardPolicyFormDraftUpdate.js +289 -0
  197. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToAiCardPolicyDraft.js +109 -0
  198. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToDraftEpic.js +44 -0
  199. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToManualCardPolicyDraft.js +111 -0
  200. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyUploadPlanToAiCardPolicyDraft.js +25 -0
  201. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildAiCardPolicyFormDraftSeed.js +363 -0
  202. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildManualCardPolicyFormDraftSeed.js +36 -0
  203. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyChipIds.js +19 -0
  204. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyFormDraftTypes.js +6 -0
  205. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyRequestParts.js +119 -0
  206. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.js +154 -0
  207. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.js +22 -0
  208. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.js +1 -0
  209. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.js +49 -0
  210. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/deriveAiPolicyReviewRowsFromInputs.js +140 -0
  211. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.js +20 -0
  212. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/seedAiCardPolicyFormDraftEpic.js +100 -0
  213. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toBulkCardPolicyTemplateRequestsFromDraft.js +96 -0
  214. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toCardPolicyTemplateRequestFromDraft.js +59 -0
  215. package/lib/esm/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toManualCardPolicyTemplateRequestFromDraft.js +24 -0
  216. package/lib/esm/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +25 -0
  217. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.js +1 -0
  218. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/applyAiCardCreationFormDraftUpdate.js +34 -0
  219. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.js +57 -0
  220. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.js +35 -0
  221. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.js +2 -2
  222. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.js +42 -4
  223. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.js +35 -0
  224. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/seedAiCardCreationFormDraftEpic.js +62 -0
  225. package/lib/esm/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.js +44 -0
  226. package/lib/esm/view/spendManagement/commonSetup/epic/setup/parseUploadedKybDocumentEpic.js +58 -0
  227. package/lib/esm/view/spendManagement/commonSetup/epic/setup/parseUploadedKycDocumentEpic.js +77 -0
  228. package/lib/esm/view/spendManagement/commonSetup/kycKybAutofillActions.js +14 -0
  229. package/lib/esm/view/spendManagement/commonSetup/kycKybParseMapper.js +207 -0
  230. package/lib/esm/view/spendManagement/commonSetup/setupViewReducer.js +106 -52
  231. package/lib/esm/view/spendManagement/commonSetup/setupViewSelector.js +6 -1
  232. package/lib/esm/view/spendManagement/commonSetup/types/kycKybAutofill.js +41 -0
  233. package/lib/esm/view/spendManagement/reimbursement/editRemiView/epics/fetchEditRemiDetailPageEpic.js +5 -1
  234. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/deleteRemiApprovalRuleEpic.js +10 -2
  235. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/fetchRemiSetupApproverViewEpic.js +8 -2
  236. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/initializeRemiSetupApproverViewUpdateDataEpic.js +11 -7
  237. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/reorderRemiApprovalRulesEpic.js +61 -0
  238. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/saveRemiSetupApproverViewUpdatesEpic.js +13 -4
  239. package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.js +80 -11
  240. package/lib/esm/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoIntroClosedByOutsideClickEpic.js +18 -0
  241. package/lib/esm/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoRemindMeLaterClickedEpic.js +18 -0
  242. package/lib/esm/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryVideoViewedEpic.js +1 -1
  243. package/lib/esm/view/spendManagement/treasury/treasurySetUp/treasurySetupViewReducer.js +45 -1
  244. package/lib/esm/view/transactionDetail/journalEntryLinesViewModel.js +149 -0
  245. package/lib/esm/view/transactionDetail/transactionDetailSelector.js +6 -1
  246. package/lib/index.d.ts +94 -40
  247. package/lib/index.js +281 -37
  248. package/lib/reducer.d.ts +21 -0
  249. package/lib/reducer.js +21 -0
  250. package/lib/view/aiCfoView/aiCfoViewReducer.d.ts +11 -2
  251. package/lib/view/aiCfoView/aiCfoViewReducer.js +6 -3
  252. package/lib/view/aiCfoView/epics/createSessionAndSubmitEpic.js +5 -2
  253. package/lib/view/aiCfoView/epics/createSessionEpic.js +2 -1
  254. package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.d.ts +8 -1
  255. package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +12 -2
  256. package/lib/view/auditReportView/auditReportViewState.d.ts +1 -1
  257. package/lib/view/billPayCard/billPayCardSelector.d.ts +1 -1
  258. package/lib/view/cardBalance/cardBalanceSelector.d.ts +1 -1
  259. package/lib/view/cashBalance/cashBalanceSelector.d.ts +1 -1
  260. package/lib/view/cashInCashOut/cashInCashOutSelector.d.ts +1 -1
  261. package/lib/view/cashPosition/cashPositionSelector.d.ts +1 -1
  262. package/lib/view/companyTaskManagerView/companyTaskManagerViewPayload.d.ts +19 -11
  263. package/lib/view/companyTaskManagerView/companyTaskManagerViewReducer.d.ts +11 -5
  264. package/lib/view/companyTaskManagerView/companyTaskManagerViewReducer.js +40 -12
  265. package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.d.ts +2 -0
  266. package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.js +13 -3
  267. package/lib/view/companyTaskManagerView/companyTaskManagerViewState.d.ts +11 -3
  268. package/lib/view/companyTaskManagerView/epics/fetchCockpitContextEpic.d.ts +10 -0
  269. package/lib/view/companyTaskManagerView/epics/fetchCockpitContextEpic.js +42 -0
  270. package/lib/view/companyTaskManagerView/epics/fetchCompanyTaskManagerViewEpic.d.ts +1 -3
  271. package/lib/view/companyTaskManagerView/epics/fetchCompanyTaskManagerViewEpic.js +37 -28
  272. package/lib/view/companyTaskManagerView/epics/updateCompanyTaskManagerViewFiltersEpic.d.ts +6 -0
  273. package/lib/view/companyTaskManagerView/epics/updateCompanyTaskManagerViewFiltersEpic.js +20 -0
  274. package/lib/view/companyView/companyViewReducer.d.ts +12 -1
  275. package/lib/view/companyView/companyViewReducer.js +48 -3
  276. package/lib/view/companyView/epic/companyPassport/dismissCapitalizationOnboardingEpic.d.ts +9 -0
  277. package/lib/view/companyView/epic/companyPassport/dismissCapitalizationOnboardingEpic.js +29 -0
  278. package/lib/view/companyView/epic/companyPassport/updateCapitalizationAccountThresholdEpic.d.ts +10 -0
  279. package/lib/view/companyView/epic/companyPassport/updateCapitalizationAccountThresholdEpic.js +102 -0
  280. package/lib/view/companyView/epic/fetchAllCockpitViewsEpic.js +2 -2
  281. package/lib/view/companyView/types/cockpitTypes.d.ts +3 -2
  282. package/lib/view/companyView/types/companyPassport/companyPassportViewState.d.ts +1 -0
  283. package/lib/view/companyView/types/companyPassport/companyPassportViewState.js +4 -0
  284. package/lib/view/createTransferEntry/createTransferEntryReducer.d.ts +32 -0
  285. package/lib/view/createTransferEntry/createTransferEntryReducer.js +86 -0
  286. package/lib/view/createTransferEntry/createTransferEntrySelector.d.ts +39 -0
  287. package/lib/view/createTransferEntry/createTransferEntrySelector.js +69 -0
  288. package/lib/view/createTransferEntry/createTransferEntryState.d.ts +30 -0
  289. package/lib/view/createTransferEntry/createTransferEntryState.js +20 -0
  290. package/lib/view/createTransferEntry/epics/createTransferEntryEpic.d.ts +11 -0
  291. package/lib/view/createTransferEntry/epics/createTransferEntryEpic.js +140 -0
  292. package/lib/view/createTransferEntry/epics/fetchTransferAccountsEpic.d.ts +14 -0
  293. package/lib/view/createTransferEntry/epics/fetchTransferAccountsEpic.js +40 -0
  294. package/lib/view/dashboard/dashboardReducer.d.ts +2 -2
  295. package/lib/view/dashboard/dashboardReducer.js +11 -1
  296. package/lib/view/expenseAutomationView/epics/common/fetchAllExpenseAutomationTabsEpic.js +3 -3
  297. package/lib/view/expenseAutomationView/epics/common/refreshExpenseAutomationCurrentTabEpic.js +3 -4
  298. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.d.ts +6 -0
  299. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +14 -10
  300. package/lib/view/expenseAutomationView/epics/transactionCategorization/backgroundRefetchReviewTabEpic.js +3 -16
  301. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +9 -16
  302. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +2 -2
  303. package/lib/view/expenseAutomationView/epics/transactionCategorization/markTransactionAsNotMiscategorizedEpic.js +2 -13
  304. package/lib/view/expenseAutomationView/epics/transactionCategorization/saveTransactionCategorizationEpic.js +2 -6
  305. package/lib/view/expenseAutomationView/epics/transactionCategorization/triggerReviewTabRefetchEpic.js +2 -2
  306. package/lib/view/expenseAutomationView/epics/transactionCategorization/updateTransactionCategorizationEpic.js +2 -6
  307. package/lib/view/expenseAutomationView/expenseAutomationViewReducer.d.ts +2 -6
  308. package/lib/view/expenseAutomationView/expenseAutomationViewReducer.js +3 -20
  309. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  310. package/lib/view/expenseAutomationView/payload/transactionCategorizationPayload.d.ts +20 -9
  311. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +11 -18
  312. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +22 -50
  313. package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +8 -6
  314. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +2 -1
  315. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +16 -8
  316. package/lib/view/expenseAutomationView/transactionFilterHelpers.js +106 -18
  317. package/lib/view/expenseAutomationView/types/reconciliationViewState.d.ts +1 -1
  318. package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +2 -3
  319. package/lib/view/fileView/epic/deleteFileEpic.js +1 -1
  320. package/lib/view/fileView/epic/deleteFileListEpic.js +1 -1
  321. package/lib/view/fileView/epic/updateFileNameEpic.js +1 -1
  322. package/lib/view/financeStatement/financeStatementReducer.d.ts +1 -1
  323. package/lib/view/globalMerchantView/globalMerchantViewReducer.d.ts +2 -2
  324. package/lib/view/onboardingView/customerView/epic/aiAgentsActivation/fetchAiAgentsActivationStatusEpic.d.ts +7 -0
  325. package/lib/view/onboardingView/customerView/epic/aiAgentsActivation/fetchAiAgentsActivationStatusEpic.js +44 -0
  326. package/lib/view/onboardingView/customerView/epic/customerDetails/acknowledgeOnboardingAiActivationViewedEpic.d.ts +8 -0
  327. package/lib/view/onboardingView/customerView/epic/customerDetails/acknowledgeOnboardingAiActivationViewedEpic.js +33 -0
  328. package/lib/view/onboardingView/customerView/epic/customerDetails/acknowledgeOnboardingAiFinanceTeamEpic.d.ts +9 -0
  329. package/lib/view/onboardingView/customerView/epic/customerDetails/acknowledgeOnboardingAiFinanceTeamEpic.js +44 -0
  330. package/lib/view/onboardingView/customerView/onboardingCustomerViewPayload.d.ts +3 -0
  331. package/lib/view/onboardingView/customerView/onboardingCustomerViewReducer.d.ts +41 -4
  332. package/lib/view/onboardingView/customerView/onboardingCustomerViewReducer.js +220 -51
  333. package/lib/view/onboardingView/customerView/onboardingCustomerViewSelector.d.ts +5 -1
  334. package/lib/view/onboardingView/customerView/onboardingCustomerViewSelector.js +15 -2
  335. package/lib/view/onboardingView/customerView/onboardingCustomerViewState.d.ts +40 -0
  336. package/lib/view/onboardingView/customerView/onboardingCustomerViewState.js +13 -1
  337. package/lib/view/people/peopleTypes.d.ts +1 -1
  338. package/lib/view/reimbursementCard/reimbursementCardSelector.d.ts +1 -1
  339. package/lib/view/reportsResync/reportsResyncReducer.d.ts +2 -2
  340. package/lib/view/scheduleView/scheduleListView/scheduleListTypes.d.ts +1 -1
  341. package/lib/view/spendManagement/autotransferRules/autoTransferRulesSelector.d.ts +8 -1
  342. package/lib/view/spendManagement/autotransferRules/autoTransferRulesSelector.js +21 -1
  343. package/lib/view/spendManagement/autotransferRules/autoTransferRulesState.d.ts +22 -0
  344. package/lib/view/spendManagement/billPay/billPayReview/billPayReviewSelector.d.ts +7 -0
  345. package/lib/view/spendManagement/billPay/billPayReview/billPayReviewSelector.js +14 -0
  346. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.d.ts +14 -3
  347. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer.js +110 -13
  348. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewState.d.ts +16 -0
  349. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/deleteBillPayApprovalRuleEpic.js +10 -2
  350. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/fetchBillPaySetupApproverViewEpic.js +8 -4
  351. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/initializeBillPaySetupApproverViewUpdateDataEpic.js +10 -6
  352. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/reorderBillPayApprovalRulesEpic.d.ts +23 -0
  353. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/reorderBillPayApprovalRulesEpic.js +58 -0
  354. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/saveBillPaySetupApproverViewUpdatesEpic.js +12 -3
  355. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.d.ts +59 -1
  356. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +142 -17
  357. package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonState.d.ts +31 -5
  358. package/lib/view/spendManagement/billPay/editBillView/editBillViewSelector.d.ts +8 -1
  359. package/lib/view/spendManagement/billPay/editBillView/editBillViewSelector.js +60 -4
  360. package/lib/view/spendManagement/billPay/editBillView/epics/fetchEditBillDetailPageEpic.js +8 -2
  361. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.d.ts +47 -0
  362. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.js +34 -0
  363. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.d.ts +23 -0
  364. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.js +82 -0
  365. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.d.ts +40 -0
  366. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.js +51 -0
  367. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.d.ts +37 -0
  368. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.js +53 -0
  369. package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.d.ts +14 -0
  370. package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.js +36 -0
  371. package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.d.ts +7 -0
  372. package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.js +36 -0
  373. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.d.ts +56 -0
  374. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.js +60 -0
  375. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.d.ts +22 -0
  376. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.js +96 -0
  377. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.d.ts +59 -0
  378. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.js +229 -0
  379. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.d.ts +122 -0
  380. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.js +13 -0
  381. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.d.ts +7 -0
  382. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.js +27 -0
  383. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.d.ts +9 -0
  384. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.js +40 -0
  385. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.d.ts +7 -0
  386. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.js +31 -0
  387. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.d.ts +15 -0
  388. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.js +32 -0
  389. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.d.ts +14 -0
  390. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailReducer.js +56 -0
  391. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.d.ts +15 -0
  392. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailSelector.js +28 -0
  393. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.d.ts +8 -0
  394. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/cardPolicyDetailState.js +2 -0
  395. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.d.ts +8 -0
  396. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/fetchCardPolicyDetailEpic.js +40 -0
  397. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.d.ts +8 -0
  398. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyDetail/updateCardPolicyEpic.js +43 -0
  399. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.d.ts +8 -0
  400. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/archiveCardPolicyEpic.js +38 -0
  401. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.d.ts +15 -0
  402. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListReducer.js +75 -0
  403. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.d.ts +15 -0
  404. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListSelector.js +27 -0
  405. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.d.ts +7 -0
  406. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/cardPolicyListState.js +2 -0
  407. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.d.ts +8 -0
  408. package/lib/view/spendManagement/chargeCards/cardPolicy/cardPolicyList/fetchCardPolicyListEpic.js +42 -0
  409. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyAiCardPolicyFormDraftUpdate.d.ts +8 -0
  410. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyAiCardPolicyFormDraftUpdate.js +294 -0
  411. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToAiCardPolicyDraft.d.ts +8 -0
  412. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToAiCardPolicyDraft.js +113 -0
  413. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToDraftEpic.d.ts +9 -0
  414. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToDraftEpic.js +48 -0
  415. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToManualCardPolicyDraft.d.ts +8 -0
  416. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyExtractedPolicyToManualCardPolicyDraft.js +115 -0
  417. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyUploadPlanToAiCardPolicyDraft.d.ts +13 -0
  418. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/applyUploadPlanToAiCardPolicyDraft.js +29 -0
  419. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildAiCardPolicyFormDraftSeed.d.ts +14 -0
  420. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildAiCardPolicyFormDraftSeed.js +369 -0
  421. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildManualCardPolicyFormDraftSeed.d.ts +6 -0
  422. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/buildManualCardPolicyFormDraftSeed.js +40 -0
  423. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyChipIds.d.ts +7 -0
  424. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyChipIds.js +26 -0
  425. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyFormDraftTypes.d.ts +116 -0
  426. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyFormDraftTypes.js +10 -0
  427. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyRequestParts.d.ts +33 -0
  428. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/cardPolicyRequestParts.js +126 -0
  429. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.d.ts +52 -0
  430. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyReducer.js +158 -0
  431. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.d.ts +11 -0
  432. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicySelector.js +31 -0
  433. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.d.ts +12 -0
  434. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyState.js +2 -0
  435. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.d.ts +9 -0
  436. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/createCardPolicyTemplateEpic.js +53 -0
  437. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/deriveAiPolicyReviewRowsFromInputs.d.ts +10 -0
  438. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/deriveAiPolicyReviewRowsFromInputs.js +144 -0
  439. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.d.ts +7 -0
  440. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/fetchCardPolicyMccCategoriesEpic.js +24 -0
  441. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/seedAiCardPolicyFormDraftEpic.d.ts +11 -0
  442. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/seedAiCardPolicyFormDraftEpic.js +104 -0
  443. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toBulkCardPolicyTemplateRequestsFromDraft.d.ts +22 -0
  444. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toBulkCardPolicyTemplateRequestsFromDraft.js +100 -0
  445. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toCardPolicyTemplateRequestFromDraft.d.ts +8 -0
  446. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toCardPolicyTemplateRequestFromDraft.js +63 -0
  447. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toManualCardPolicyTemplateRequestFromDraft.d.ts +3 -0
  448. package/lib/view/spendManagement/chargeCards/cardPolicy/createCardPolicy/toManualCardPolicyTemplateRequestFromDraft.js +28 -0
  449. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardList.d.ts +1 -1
  450. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.d.ts +14 -0
  451. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +27 -1
  452. package/lib/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.d.ts +34 -0
  453. package/lib/view/spendManagement/chargeCards/issueChargeCard/aiCardCreationFormDraftTypes.js +2 -0
  454. package/lib/view/spendManagement/chargeCards/issueChargeCard/applyAiCardCreationFormDraftUpdate.d.ts +7 -0
  455. package/lib/view/spendManagement/chargeCards/issueChargeCard/applyAiCardCreationFormDraftUpdate.js +38 -0
  456. package/lib/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.d.ts +12 -0
  457. package/lib/view/spendManagement/chargeCards/issueChargeCard/buildAiCardCreationFormDraftSeed.js +61 -0
  458. package/lib/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.d.ts +9 -0
  459. package/lib/view/spendManagement/chargeCards/issueChargeCard/deriveAiCardRowsFromTeams.js +39 -0
  460. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.d.ts +2 -2
  461. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardEpic.js +1 -1
  462. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.d.ts +12 -2
  463. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer.js +43 -5
  464. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.d.ts +7 -0
  465. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector.js +42 -1
  466. package/lib/view/spendManagement/chargeCards/issueChargeCard/issueChargeCardState.d.ts +5 -0
  467. package/lib/view/spendManagement/chargeCards/issueChargeCard/seedAiCardCreationFormDraftEpic.d.ts +11 -0
  468. package/lib/view/spendManagement/chargeCards/issueChargeCard/seedAiCardCreationFormDraftEpic.js +66 -0
  469. package/lib/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.d.ts +3 -0
  470. package/lib/view/spendManagement/chargeCards/issueChargeCard/toIssueChargeCardLocalDataFromDraft.js +48 -0
  471. package/lib/view/spendManagement/commonSetup/epic/setup/parseUploadedKybDocumentEpic.d.ts +28 -0
  472. package/lib/view/spendManagement/commonSetup/epic/setup/parseUploadedKybDocumentEpic.js +62 -0
  473. package/lib/view/spendManagement/commonSetup/epic/setup/parseUploadedKycDocumentEpic.d.ts +9 -0
  474. package/lib/view/spendManagement/commonSetup/epic/setup/parseUploadedKycDocumentEpic.js +81 -0
  475. package/lib/view/spendManagement/commonSetup/kycKybAutofillActions.d.ts +24 -0
  476. package/lib/view/spendManagement/commonSetup/kycKybAutofillActions.js +17 -0
  477. package/lib/view/spendManagement/commonSetup/kycKybParseMapper.d.ts +29 -0
  478. package/lib/view/spendManagement/commonSetup/kycKybParseMapper.js +215 -0
  479. package/lib/view/spendManagement/commonSetup/setupViewReducer.d.ts +28 -2
  480. package/lib/view/spendManagement/commonSetup/setupViewReducer.js +107 -53
  481. package/lib/view/spendManagement/commonSetup/setupViewSelector.d.ts +7 -2
  482. package/lib/view/spendManagement/commonSetup/setupViewSelector.js +6 -1
  483. package/lib/view/spendManagement/commonSetup/setupViewState.d.ts +19 -0
  484. package/lib/view/spendManagement/commonSetup/types/kycKybAutofill.d.ts +154 -0
  485. package/lib/view/spendManagement/commonSetup/types/kycKybAutofill.js +46 -0
  486. package/lib/view/spendManagement/reimbursement/editRemiView/epics/fetchEditRemiDetailPageEpic.js +5 -1
  487. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/deleteRemiApprovalRuleEpic.js +10 -2
  488. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/fetchRemiSetupApproverViewEpic.js +8 -2
  489. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/initializeRemiSetupApproverViewUpdateDataEpic.js +10 -6
  490. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/reorderRemiApprovalRulesEpic.d.ts +14 -0
  491. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/reorderRemiApprovalRulesEpic.js +65 -0
  492. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/saveRemiSetupApproverViewUpdatesEpic.js +12 -3
  493. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.d.ts +14 -3
  494. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewReducer.js +81 -12
  495. package/lib/view/spendManagement/reimbursement/remiSetupApproverView/remiSetupApproverViewState.d.ts +12 -0
  496. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoIntroClosedByOutsideClickEpic.d.ts +8 -0
  497. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoIntroClosedByOutsideClickEpic.js +22 -0
  498. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoRemindMeLaterClickedEpic.d.ts +8 -0
  499. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoRemindMeLaterClickedEpic.js +22 -0
  500. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryVideoViewedEpic.js +1 -1
  501. package/lib/view/spendManagement/treasury/treasurySetUp/treasurySetupViewReducer.d.ts +1 -1
  502. package/lib/view/spendManagement/treasury/treasurySetUp/treasurySetupViewReducer.js +46 -2
  503. package/lib/view/spendManagement/treasury/treasurySetUp/treasurySetupViewState.d.ts +2 -0
  504. package/lib/view/taskManager/taskListView/taskList.d.ts +3 -3
  505. package/lib/view/taskManager/taskListView/taskListReducer.d.ts +1 -1
  506. package/lib/view/tasksCard/tasksCardSelector.d.ts +1 -1
  507. package/lib/view/topEx/topExSelector.d.ts +1 -1
  508. package/lib/view/transactionDetail/journalEntryLinesViewModel.d.ts +102 -0
  509. package/lib/view/transactionDetail/journalEntryLinesViewModel.js +160 -0
  510. package/lib/view/transactionDetail/transactionDetailPayload.d.ts +1 -1
  511. package/lib/view/transactionDetail/transactionDetailSelector.d.ts +6 -1
  512. package/lib/view/transactionDetail/transactionDetailSelector.js +6 -1
  513. package/lib/zeniAPI.d.ts +1 -0
  514. package/package.json +1 -1
@@ -10,6 +10,32 @@ const holidays = dateHolidays
10
10
  .filter((holiday) => holiday.type === 'public' || holiday.type === 'bank')
11
11
  .map((holiday) => zeniDate(holiday.date).toDate()); // https://www.linkedin.com/pulse/fix-invalid-date-safari-ie-hatem-ahmad/
12
12
  export const holidaysFormatted = holidays.map((holiday) => zeniDate(holiday.toDateString()).format(standardFormat));
13
+ /**
14
+ * Returns the next scheduled transfer date for a recurring transfer/sweep,
15
+ * given a frequency cadence. Advances by the cadence and then skips past
16
+ * weekends and US holidays. Used by both:
17
+ * - `<ReviewAutoTransferRuleDrawer>` (web-c) for the display "next transfer"
18
+ * - `saveAutoSweepSettingsEpic` for the `first_run_date` PUT payload
19
+ */
20
+ export const getNextTransferDate = (frequency) => {
21
+ const date = new Date();
22
+ if (frequency === 'daily') {
23
+ date.setDate(date.getDate() + 1);
24
+ }
25
+ else if (frequency === 'weekly') {
26
+ date.setDate(date.getDate() + 7);
27
+ }
28
+ else if (frequency === 'biweekly') {
29
+ date.setDate(date.getDate() + 14);
30
+ }
31
+ else if (frequency === 'monthly') {
32
+ date.setMonth(date.getMonth() + 1);
33
+ }
34
+ const isWeekend = date.getDay() === 0 || date.getDay() === 6;
35
+ const isHolidayDate = isHoliday(zeniDate(date.toDateString()));
36
+ const result = isWeekend || isHolidayDate ? getNextNthWorkingDay(date, [0, 6], 1) : date;
37
+ return zeniDate(result.toDateString());
38
+ };
13
39
  export const getNextNthWorkingDay = (date, filterDaysIndex, numberOfWorkingDays) => {
14
40
  const currentDate = new Date(date.toDateString());
15
41
  const holidaysFormatted = holidays.map((holiday) => zeniDate(holiday.toDateString()).format(standardFormat));
@@ -51,6 +51,17 @@ export const getAccountBase = (accountState, accountId, reportId) => {
51
51
  reconciliationSource: account.reconciliationSource,
52
52
  };
53
53
  };
54
+ /**
55
+ * Transfer-account IDs from the API are resolved under `transfer_accounts`; if that
56
+ * slice is not hydrated yet, fall back to `account_list` so dropdowns still populate.
57
+ */
58
+ export const getAccountBaseForTransferAccounts = (accountState, accountId) => getAccountBase(accountState, accountId, 'transfer_accounts') ??
59
+ getAccountBase(accountState, accountId, 'account_list');
60
+ /**
61
+ * Credit-card-only pool from the transfer-flow accounts API; falls back to `account_list`.
62
+ */
63
+ export const getAccountBaseForCreditCardTransferAccounts = (accountState, accountId) => getAccountBase(accountState, accountId, 'credit_card_transfer_accounts') ??
64
+ getAccountBase(accountState, accountId, 'account_list');
54
65
  export function getAccount(accountState, id, filter, additionalBalancesOptions) {
55
66
  const key = getAccountKey(id.reportId, id.accountId, id.classesViewParentId, id.accountsViewParentId, id.projectsViewParentId);
56
67
  const account = accountState.accountsByKey[key];
@@ -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) => ({