@zeniai/client-epic-state 4.20.10 → 5.0.0-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 (277) hide show
  1. package/lib/common/aiCfo/aiCfoSuggestedQuestionsPageContext.d.ts +19 -0
  2. package/lib/common/aiCfo/aiCfoSuggestedQuestionsPageContext.js +2 -0
  3. package/lib/commonStateTypes/animations.d.ts +1 -1
  4. package/lib/commonStateTypes/animations.js +3 -0
  5. package/lib/commonStateTypes/viewAndReport/viewAndReport.d.ts +2 -2
  6. package/lib/commonStateTypes/viewAndReport/viewAndReport.js +1 -0
  7. package/lib/coreEpics.js +2 -1
  8. package/lib/entity/account/accountPayload.d.ts +2 -0
  9. package/lib/entity/account/accountReducer.d.ts +5 -2
  10. package/lib/entity/account/accountReducer.js +7 -2
  11. package/lib/entity/account/accountState.d.ts +1 -1
  12. package/lib/entity/accountGroup/accountGroupState.d.ts +1 -1
  13. package/lib/entity/accountRecon/accountReconPayload.d.ts +1 -1
  14. package/lib/entity/accountRecon/accountReconPayload.js +4 -2
  15. package/lib/entity/aiCfo/aiCfoSelector.d.ts +1 -2
  16. package/lib/entity/billPay/billTransaction/billTransactionState.d.ts +2 -2
  17. package/lib/entity/class/classReducer.d.ts +4 -4
  18. package/lib/entity/class/classState.d.ts +1 -1
  19. package/lib/entity/forecast/forecastState.d.ts +1 -1
  20. package/lib/entity/jeSchedules/jeSchedulesPayload.d.ts +38 -0
  21. package/lib/entity/jeSchedules/jeSchedulesPayload.js +78 -0
  22. package/lib/entity/jeSchedules/jeSchedulesSelector.d.ts +4 -1
  23. package/lib/entity/jeSchedules/jeSchedulesSelector.js +5 -1
  24. package/lib/entity/jeSchedules/jeSchedulesState.d.ts +37 -0
  25. package/lib/entity/sectionAccountsView/sectionAccountsView.d.ts +1 -1
  26. package/lib/entity/sectionClassesViewV2/sectionClassesView.d.ts +1 -1
  27. package/lib/entity/sectionClassesViewV2/sectionClassesViewReducer.d.ts +2 -2
  28. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  29. package/lib/entity/snackbar/snackbarTypes.js +7 -0
  30. package/lib/entity/tenant/SessionManager.d.ts +38 -0
  31. package/lib/entity/tenant/SessionManager.js +171 -0
  32. package/lib/entity/tenant/epic/sessionHeartbeatEpic.d.ts +16 -0
  33. package/lib/entity/tenant/epic/sessionHeartbeatEpic.js +16 -0
  34. package/lib/entity/tenant/sessionTypes.d.ts +26 -0
  35. package/lib/entity/tenant/sessionTypes.js +12 -0
  36. package/lib/entity/tenant/tenantPayload.d.ts +1 -0
  37. package/lib/entity/tenant/tenantReducer.d.ts +10 -3
  38. package/lib/entity/tenant/tenantReducer.js +30 -2
  39. package/lib/entity/tenant/tenantSelector.d.ts +1 -0
  40. package/lib/entity/tenant/tenantSelector.js +9 -1
  41. package/lib/entity/tenant/tenantState.d.ts +2 -0
  42. package/lib/entity/transaction/payloadTypes/scheduleTransactionPayload.d.ts +4 -1
  43. package/lib/entity/transaction/payloadTypes/scheduleTransactionPayload.js +1 -0
  44. package/lib/entity/transaction/payloadTypes/transactionPayload.d.ts +9 -0
  45. package/lib/entity/transaction/payloadTypes/transactionPayload.js +79 -1
  46. package/lib/entity/transaction/stateTypes/scheduleTransaction.d.ts +1 -0
  47. package/lib/entity/transaction/stateTypes/transaction.d.ts +11 -0
  48. package/lib/entity/transaction/stateTypes/transactionLine.d.ts +1 -1
  49. package/lib/epic.d.ts +15 -1
  50. package/lib/epic.js +15 -1
  51. package/lib/esm/common/aiCfo/aiCfoSuggestedQuestionsPageContext.js +1 -0
  52. package/lib/esm/commonStateTypes/animations.js +3 -0
  53. package/lib/esm/commonStateTypes/viewAndReport/viewAndReport.js +1 -0
  54. package/lib/esm/coreEpics.js +2 -1
  55. package/lib/esm/entity/account/accountReducer.js +6 -1
  56. package/lib/esm/entity/accountRecon/accountReconPayload.js +4 -2
  57. package/lib/esm/entity/jeSchedules/jeSchedulesPayload.js +78 -0
  58. package/lib/esm/entity/jeSchedules/jeSchedulesSelector.js +5 -1
  59. package/lib/esm/entity/snackbar/snackbarTypes.js +7 -0
  60. package/lib/esm/entity/tenant/SessionManager.js +167 -0
  61. package/lib/esm/entity/tenant/epic/sessionHeartbeatEpic.js +12 -0
  62. package/lib/esm/entity/tenant/sessionTypes.js +9 -0
  63. package/lib/esm/entity/tenant/tenantReducer.js +28 -1
  64. package/lib/esm/entity/tenant/tenantSelector.js +7 -0
  65. package/lib/esm/entity/transaction/payloadTypes/scheduleTransactionPayload.js +1 -0
  66. package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +79 -1
  67. package/lib/esm/epic.js +15 -1
  68. package/lib/esm/index.js +22 -16
  69. package/lib/esm/reducer.js +3 -0
  70. package/lib/esm/view/aiCfoView/aiCfoViewReducer.js +82 -1
  71. package/lib/esm/view/aiCfoView/aiCfoViewSelector.js +8 -2
  72. package/lib/esm/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +29 -0
  73. package/lib/esm/view/classList/fetchClassListEpic.js +9 -2
  74. package/lib/esm/view/commonVendorView/vendorView/vendorViewSelector.js +18 -5
  75. package/lib/esm/view/commonVendorView/vendorsTabVendorView/vendorsTabVendorViewSelector.js +6 -2
  76. package/lib/esm/view/companyTaskManagerView/companyTaskManagerViewReducer.js +19 -1
  77. package/lib/esm/view/companyTaskManagerView/companyTaskManagerViewSelector.js +3 -1
  78. package/lib/esm/view/companyTaskManagerView/epics/fetchTaskManagerMetricsEpic.js +17 -0
  79. package/lib/esm/view/companyView/companyViewReducer.js +26 -1
  80. package/lib/esm/view/companyView/epic/companyPassport/updateAccountingClassesEnabledEpic.js +61 -0
  81. package/lib/esm/view/companyView/types/companyPassport/companyPassportViewState.js +4 -0
  82. package/lib/esm/view/expenseAutomationView/epics/accountRecon/excludeAccountFromReconciliationEpic.js +44 -0
  83. package/lib/esm/view/expenseAutomationView/epics/accountRecon/fetchReconciliationViewEpic.js +4 -9
  84. package/lib/esm/view/expenseAutomationView/epics/accountRecon/includeAccountInReconciliationEpic.js +44 -0
  85. package/lib/esm/view/expenseAutomationView/epics/jeSchedule/fetchJeSchedulesEpic.js +2 -2
  86. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/bulkUploadMatchResultToastEpic.js +33 -0
  87. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +3 -3
  88. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +6 -4
  89. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/refetchCompletedTransactionsOnBulkUploadSortEpic.js +12 -0
  90. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/restoreBulkUploadAutomatchingOnMountEpic.js +98 -0
  91. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +7 -13
  92. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +13 -5
  93. package/lib/esm/view/expenseAutomationView/expenseAutomationViewSelector.js +0 -1
  94. package/lib/esm/view/expenseAutomationView/{bulkUploadTiming.js → helpers/bulkUploadTiming.js} +6 -0
  95. package/lib/esm/view/expenseAutomationView/helpers/rollingCalendarDateRangeInclusive.js +13 -0
  96. package/lib/esm/view/expenseAutomationView/helpers/saveTransactionHelper.js +2 -2
  97. package/lib/esm/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +2 -2
  98. package/lib/esm/view/expenseAutomationView/payload/missingReceiptsPayload.js +9 -0
  99. package/lib/esm/view/expenseAutomationView/reducers/jeSchedulesViewReducer.js +21 -1
  100. package/lib/esm/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +26 -3
  101. package/lib/esm/view/expenseAutomationView/reducers/reconciliationViewReducer.js +167 -3
  102. package/lib/esm/view/expenseAutomationView/selectorTypes/reconciliationViewSelectorTypes.js +1 -2
  103. package/lib/esm/view/expenseAutomationView/selectors/fluxAnalysisViewSelector.js +10 -2
  104. package/lib/esm/view/expenseAutomationView/selectors/jeSchedulesViewSelector.js +63 -6
  105. package/lib/esm/view/expenseAutomationView/selectors/missingReceiptsSelector.js +14 -4
  106. package/lib/esm/view/expenseAutomationView/selectors/reconciliationViewSelector.js +136 -9
  107. package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +15 -5
  108. package/lib/esm/view/expenseAutomationView/types/jeSchedulesViewState.js +24 -1
  109. package/lib/esm/view/profitAndLossClassesView/profitAndLossClassesByClassHorizontalSelector.js +3 -0
  110. package/lib/esm/view/spendManagement/autotransferRules/autoTransferRulesPayload.js +26 -0
  111. package/lib/esm/view/spendManagement/autotransferRules/autoTransferRulesReducer.js +199 -0
  112. package/lib/esm/view/spendManagement/autotransferRules/autoTransferRulesSelector.js +52 -0
  113. package/lib/esm/view/spendManagement/autotransferRules/autoTransferRulesState.js +1 -0
  114. package/lib/esm/view/spendManagement/autotransferRules/epics/createAutoTransferRuleEpic.js +100 -0
  115. package/lib/esm/view/spendManagement/autotransferRules/epics/deleteAutoTransferRuleEpic.js +48 -0
  116. package/lib/esm/view/spendManagement/autotransferRules/epics/fetchAutoTransferReviewDetailEpic.js +36 -0
  117. package/lib/esm/view/spendManagement/autotransferRules/epics/fetchAutoTransferRuleHistory.js +45 -0
  118. package/lib/esm/view/spendManagement/autotransferRules/epics/fetchAutoTransferRulesEpic.js +50 -0
  119. package/lib/esm/view/spendManagement/autotransferRules/epics/updateAutoTransferRuleEpic.js +69 -0
  120. package/lib/esm/view/spendManagement/billPay/billList/billListSelector.js +10 -0
  121. package/lib/esm/view/spendManagement/billPay/billList/billListState.js +1 -0
  122. package/lib/esm/view/spendManagement/billPay/billPayReview/billPayReviewSelector.js +7 -3
  123. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewSelector.js +5 -5
  124. package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/fetchBillPayApproversDetailsEpic.js +7 -2
  125. package/lib/esm/view/spendManagement/billPay/editBillView/editBillViewSelector.js +13 -6
  126. package/lib/esm/view/spendManagement/chargeCards/chargeCardList/chargeCardList.js +1 -0
  127. package/lib/esm/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +2 -0
  128. package/lib/esm/view/spendManagement/reimbursement/editRemiView/editRemiViewSelector.js +7 -4
  129. package/lib/esm/view/spendManagement/reimbursement/remiListView/remiListSelector.js +12 -0
  130. package/lib/esm/view/spendManagement/reimbursement/remiListView/remiListState.js +1 -0
  131. package/lib/esm/view/spendManagement/treasury/treasuryList/epics/fetchTreasuryDetailEpic.js +2 -2
  132. package/lib/esm/view/spendManagement/treasury/treasuryList/treasuryDetailReducer.js +2 -1
  133. package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +2 -2
  134. package/lib/esm/view/transactionDetail/epics/saveTransactionHelper.js +2 -2
  135. package/lib/esm/view/transactionDetail/transactionDetailLocalDataHelper.js +16 -14
  136. package/lib/esm/view/transactionDetail/transactionDetailSelector.js +9 -2
  137. package/lib/index.d.ts +32 -22
  138. package/lib/index.js +72 -33
  139. package/lib/reducer.d.ts +3 -0
  140. package/lib/reducer.js +3 -0
  141. package/lib/tsconfig.typecheck.tsbuildinfo +1 -0
  142. package/lib/view/aiCfoView/aiCfoViewPayload.d.ts +7 -0
  143. package/lib/view/aiCfoView/aiCfoViewReducer.d.ts +15 -1
  144. package/lib/view/aiCfoView/aiCfoViewReducer.js +83 -2
  145. package/lib/view/aiCfoView/aiCfoViewSelector.d.ts +4 -1
  146. package/lib/view/aiCfoView/aiCfoViewSelector.js +9 -2
  147. package/lib/view/aiCfoView/aiCfoViewState.d.ts +15 -1
  148. package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.d.ts +8 -0
  149. package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +33 -0
  150. package/lib/view/auditReportView/auditReportViewState.d.ts +2 -2
  151. package/lib/view/billPayCard/billPayCardSelector.d.ts +1 -1
  152. package/lib/view/cardBalance/cardBalanceSelector.d.ts +1 -1
  153. package/lib/view/cashBalance/cashBalanceSelector.d.ts +1 -1
  154. package/lib/view/cashInCashOut/cashInCashOutSelector.d.ts +1 -1
  155. package/lib/view/cashPosition/cashPositionSelector.d.ts +1 -1
  156. package/lib/view/classList/fetchClassListEpic.d.ts +1 -1
  157. package/lib/view/classList/fetchClassListEpic.js +8 -1
  158. package/lib/view/commonVendorView/vendorView/vendorViewSelector.d.ts +1 -0
  159. package/lib/view/commonVendorView/vendorView/vendorViewSelector.js +18 -5
  160. package/lib/view/commonVendorView/vendorsTabVendorView/vendorsTabVendorViewSelector.d.ts +1 -0
  161. package/lib/view/commonVendorView/vendorsTabVendorView/vendorsTabVendorViewSelector.js +6 -2
  162. package/lib/view/companyTaskManagerView/companyTaskManagerViewReducer.d.ts +2 -2
  163. package/lib/view/companyTaskManagerView/companyTaskManagerViewReducer.js +20 -2
  164. package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.d.ts +4 -1
  165. package/lib/view/companyTaskManagerView/companyTaskManagerViewSelector.js +3 -1
  166. package/lib/view/companyTaskManagerView/companyTaskManagerViewState.d.ts +9 -1
  167. package/lib/view/companyTaskManagerView/epics/fetchTaskManagerMetricsEpic.d.ts +7 -0
  168. package/lib/view/companyTaskManagerView/epics/fetchTaskManagerMetricsEpic.js +21 -0
  169. package/lib/view/companyView/companyViewReducer.d.ts +6 -1
  170. package/lib/view/companyView/companyViewReducer.js +28 -2
  171. package/lib/view/companyView/epic/companyPassport/updateAccountingClassesEnabledEpic.d.ts +10 -0
  172. package/lib/view/companyView/epic/companyPassport/updateAccountingClassesEnabledEpic.js +65 -0
  173. package/lib/view/companyView/types/companyPassport/companyPassportViewState.d.ts +1 -0
  174. package/lib/view/companyView/types/companyPassport/companyPassportViewState.js +4 -0
  175. package/lib/view/dashboard/dashboardReducer.d.ts +2 -2
  176. package/lib/view/expenseAutomationView/epics/accountRecon/excludeAccountFromReconciliationEpic.d.ts +8 -0
  177. package/lib/view/expenseAutomationView/epics/accountRecon/excludeAccountFromReconciliationEpic.js +48 -0
  178. package/lib/view/expenseAutomationView/epics/accountRecon/fetchReconciliationViewEpic.js +4 -9
  179. package/lib/view/expenseAutomationView/epics/accountRecon/includeAccountInReconciliationEpic.d.ts +9 -0
  180. package/lib/view/expenseAutomationView/epics/accountRecon/includeAccountInReconciliationEpic.js +48 -0
  181. package/lib/view/expenseAutomationView/epics/jeSchedule/fetchJeSchedulesEpic.js +2 -2
  182. package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadMatchResultToastEpic.d.ts +13 -0
  183. package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadMatchResultToastEpic.js +37 -0
  184. package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +2 -2
  185. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +5 -3
  186. package/lib/view/expenseAutomationView/epics/missingReceipts/refetchCompletedTransactionsOnBulkUploadSortEpic.d.ts +10 -0
  187. package/lib/view/expenseAutomationView/epics/missingReceipts/refetchCompletedTransactionsOnBulkUploadSortEpic.js +16 -0
  188. package/lib/view/expenseAutomationView/epics/missingReceipts/restoreBulkUploadAutomatchingOnMountEpic.d.ts +18 -0
  189. package/lib/view/expenseAutomationView/epics/missingReceipts/restoreBulkUploadAutomatchingOnMountEpic.js +102 -0
  190. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +7 -13
  191. package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.d.ts +2 -2
  192. package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +12 -4
  193. package/lib/view/expenseAutomationView/expenseAutomationViewSelector.js +0 -1
  194. package/lib/view/expenseAutomationView/{bulkUploadTiming.d.ts → helpers/bulkUploadTiming.d.ts} +6 -0
  195. package/lib/view/expenseAutomationView/{bulkUploadTiming.js → helpers/bulkUploadTiming.js} +7 -1
  196. package/lib/view/expenseAutomationView/helpers/rollingCalendarDateRangeInclusive.d.ts +7 -0
  197. package/lib/view/expenseAutomationView/helpers/rollingCalendarDateRangeInclusive.js +16 -0
  198. package/lib/view/expenseAutomationView/helpers/saveTransactionHelper.js +2 -2
  199. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  200. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +2 -2
  201. package/lib/view/expenseAutomationView/payload/jeSchedulesPayload.d.ts +1 -1
  202. package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.d.ts +5 -0
  203. package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.js +10 -0
  204. package/lib/view/expenseAutomationView/payload/reconciliationPayload.d.ts +45 -0
  205. package/lib/view/expenseAutomationView/reducers/jeSchedulesViewReducer.d.ts +2 -2
  206. package/lib/view/expenseAutomationView/reducers/jeSchedulesViewReducer.js +22 -2
  207. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.d.ts +12 -2
  208. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +27 -4
  209. package/lib/view/expenseAutomationView/reducers/reconciliationViewReducer.d.ts +18 -4
  210. package/lib/view/expenseAutomationView/reducers/reconciliationViewReducer.js +168 -4
  211. package/lib/view/expenseAutomationView/selectorTypes/jeSchedulesSelectorTypes.d.ts +2 -0
  212. package/lib/view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes.d.ts +2 -0
  213. package/lib/view/expenseAutomationView/selectorTypes/reconciliationViewSelectorTypes.d.ts +7 -2
  214. package/lib/view/expenseAutomationView/selectorTypes/reconciliationViewSelectorTypes.js +2 -2
  215. package/lib/view/expenseAutomationView/selectors/fluxAnalysisViewSelector.js +10 -2
  216. package/lib/view/expenseAutomationView/selectors/jeSchedulesViewSelector.js +63 -6
  217. package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.js +14 -4
  218. package/lib/view/expenseAutomationView/selectors/reconciliationViewSelector.js +136 -9
  219. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +13 -3
  220. package/lib/view/expenseAutomationView/types/jeSchedulesViewState.d.ts +8 -0
  221. package/lib/view/expenseAutomationView/types/jeSchedulesViewState.js +27 -0
  222. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.d.ts +4 -0
  223. package/lib/view/expenseAutomationView/types/reconciliationViewState.d.ts +14 -0
  224. package/lib/view/financeStatement/financeStatementReducer.d.ts +1 -1
  225. package/lib/view/globalMerchantView/globalMerchantViewReducer.d.ts +2 -2
  226. package/lib/view/onboardingView/cockpitView/types/onboardingCockpitViewTypes.d.ts +1 -1
  227. package/lib/view/profitAndLossClassesView/profitAndLossClassesByClassHorizontalSelector.js +3 -0
  228. package/lib/view/reimbursementCard/reimbursementCardSelector.d.ts +1 -1
  229. package/lib/view/reportsResync/reportsResyncReducer.d.ts +2 -2
  230. package/lib/view/scheduleView/scheduleListView/scheduleListTypes.d.ts +1 -1
  231. package/lib/view/spendManagement/autotransferRules/autoTransferRulesPayload.d.ts +75 -0
  232. package/lib/view/spendManagement/autotransferRules/autoTransferRulesPayload.js +30 -0
  233. package/lib/view/spendManagement/autotransferRules/autoTransferRulesReducer.d.ts +50 -0
  234. package/lib/view/spendManagement/autotransferRules/autoTransferRulesReducer.js +206 -0
  235. package/lib/view/spendManagement/autotransferRules/autoTransferRulesSelector.d.ts +24 -0
  236. package/lib/view/spendManagement/autotransferRules/autoTransferRulesSelector.js +61 -0
  237. package/lib/view/spendManagement/autotransferRules/autoTransferRulesState.d.ts +38 -0
  238. package/lib/view/spendManagement/autotransferRules/autoTransferRulesState.js +2 -0
  239. package/lib/view/spendManagement/autotransferRules/epics/createAutoTransferRuleEpic.d.ts +12 -0
  240. package/lib/view/spendManagement/autotransferRules/epics/createAutoTransferRuleEpic.js +106 -0
  241. package/lib/view/spendManagement/autotransferRules/epics/deleteAutoTransferRuleEpic.d.ts +8 -0
  242. package/lib/view/spendManagement/autotransferRules/epics/deleteAutoTransferRuleEpic.js +52 -0
  243. package/lib/view/spendManagement/autotransferRules/epics/fetchAutoTransferReviewDetailEpic.d.ts +7 -0
  244. package/lib/view/spendManagement/autotransferRules/epics/fetchAutoTransferReviewDetailEpic.js +40 -0
  245. package/lib/view/spendManagement/autotransferRules/epics/fetchAutoTransferRuleHistory.d.ts +7 -0
  246. package/lib/view/spendManagement/autotransferRules/epics/fetchAutoTransferRuleHistory.js +52 -0
  247. package/lib/view/spendManagement/autotransferRules/epics/fetchAutoTransferRulesEpic.d.ts +10 -0
  248. package/lib/view/spendManagement/autotransferRules/epics/fetchAutoTransferRulesEpic.js +54 -0
  249. package/lib/view/spendManagement/autotransferRules/epics/updateAutoTransferRuleEpic.d.ts +8 -0
  250. package/lib/view/spendManagement/autotransferRules/epics/updateAutoTransferRuleEpic.js +73 -0
  251. package/lib/view/spendManagement/billPay/billList/billListSelector.js +10 -0
  252. package/lib/view/spendManagement/billPay/billList/billListState.d.ts +1 -1
  253. package/lib/view/spendManagement/billPay/billList/billListState.js +1 -0
  254. package/lib/view/spendManagement/billPay/billPayReview/billPayReviewSelector.js +7 -3
  255. package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewSelector.js +5 -5
  256. package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/fetchBillPayApproversDetailsEpic.js +7 -2
  257. package/lib/view/spendManagement/billPay/editBillView/editBillViewSelector.js +13 -6
  258. package/lib/view/spendManagement/chargeCards/chargeCardDetail/chargeCardDetail.d.ts +1 -1
  259. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardList.d.ts +1 -1
  260. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardList.js +1 -0
  261. package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +2 -0
  262. package/lib/view/spendManagement/reimbursement/editRemiView/editRemiViewSelector.js +6 -3
  263. package/lib/view/spendManagement/reimbursement/remiListView/remiListSelector.d.ts +1 -0
  264. package/lib/view/spendManagement/reimbursement/remiListView/remiListSelector.js +12 -0
  265. package/lib/view/spendManagement/reimbursement/remiListView/remiListState.d.ts +1 -1
  266. package/lib/view/spendManagement/reimbursement/remiListView/remiListState.js +1 -0
  267. package/lib/view/spendManagement/treasury/treasuryList/epics/fetchTreasuryDetailEpic.js +2 -2
  268. package/lib/view/spendManagement/treasury/treasuryList/treasuryDetailReducer.d.ts +2 -1
  269. package/lib/view/spendManagement/treasury/treasuryList/treasuryDetailReducer.js +2 -1
  270. package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +2 -2
  271. package/lib/view/tasksCard/tasksCardSelector.d.ts +1 -1
  272. package/lib/view/topEx/topExSelector.d.ts +1 -1
  273. package/lib/view/transactionDetail/epics/saveTransactionHelper.js +2 -2
  274. package/lib/view/transactionDetail/transactionDetailLocalDataHelper.js +16 -14
  275. package/lib/view/transactionDetail/transactionDetailSelector.d.ts +1 -0
  276. package/lib/view/transactionDetail/transactionDetailSelector.js +9 -2
  277. package/package.json +1 -1
@@ -37,7 +37,15 @@ export const initialReconciliationTabsState = {
37
37
  },
38
38
  };
39
39
  export const initialActionFetchState = {
40
+ excludeAccountFetch: {
41
+ fetchState: 'Not-Started',
42
+ error: undefined,
43
+ },
40
44
  excludeFetchById: {},
45
+ includeAccountFetch: {
46
+ fetchState: 'Not-Started',
47
+ error: undefined,
48
+ },
41
49
  reconcileFetch: {
42
50
  fetchState: 'Not-Started',
43
51
  error: undefined,
@@ -51,6 +59,7 @@ export const initialActionFetchState = {
51
59
  export const initialState = {
52
60
  accountReconciliationRecordsBySelectedPeriod: {},
53
61
  accountConnectionStatusByAccountID: {},
62
+ excludedAccountExclusionInfo: {},
54
63
  fetchState: 'Not-Started',
55
64
  error: undefined,
56
65
  selectedTab: 'review',
@@ -60,10 +69,12 @@ export const initialState = {
60
69
  selectedAccountId: undefined,
61
70
  statementUploadChosen: false,
62
71
  reconListUIState: {
72
+ nodeCollapseState: {},
63
73
  scrollPosition: {
64
74
  scrollTop: 0,
65
75
  },
66
76
  },
77
+ excludedAccountIDs: [],
67
78
  };
68
79
  // Create slice with reducers
69
80
  const expenseAutomationReconciliationView = createSlice({
@@ -132,7 +143,7 @@ const expenseAutomationReconciliationView = createSlice({
132
143
  fetchReconciliationSuccess: {
133
144
  reducer(draft, action) {
134
145
  if (action.payload.accountId == null) {
135
- updateAllReconciliation(draft, action.payload.reconciliation.accounts, action.payload.selectedPeriod, action.payload.reconciliation.reconciliation, action.payload.refreshViewInBackground);
146
+ updateAllReconciliation(draft, action.payload.reconciliation.accounts, action.payload.selectedPeriod, action.payload.reconciliation.reconciliation, action.payload.refreshViewInBackground, action.payload.reconciliation.excluded_accounts ?? []);
136
147
  }
137
148
  else if (action.payload.reconciliation.reconciliation.length > 0 &&
138
149
  action.payload.reconciliation.accounts.length > 0) {
@@ -344,6 +355,10 @@ const expenseAutomationReconciliationView = createSlice({
344
355
  updateReconListScrollPosition: (draft, action) => {
345
356
  draft.reconListUIState.scrollPosition = action.payload.scrollPosition;
346
357
  },
358
+ updateNodeCollapseState: (draft, action) => {
359
+ draft.reconListUIState.nodeCollapseState[action.payload.nodeId] =
360
+ action.payload.collapsed;
361
+ },
347
362
  setConnectionInProgressForAccount: (draft, action) => {
348
363
  if (draft.accountConnectionStatusByAccountID[action.payload.accountId] ==
349
364
  null) {
@@ -421,6 +436,85 @@ const expenseAutomationReconciliationView = createSlice({
421
436
  ...localData,
422
437
  };
423
438
  },
439
+ excludeAccountFromReconciliation: {
440
+ reducer(draft) {
441
+ draft.actionFetchState.excludeAccountFetch = {
442
+ fetchState: 'In-Progress',
443
+ error: undefined,
444
+ };
445
+ },
446
+ prepare(payload) {
447
+ return { payload };
448
+ },
449
+ },
450
+ excludeAccountFromReconciliationSuccess: (draft, action) => {
451
+ draft.actionFetchState.excludeAccountFetch = {
452
+ fetchState: 'Completed',
453
+ error: undefined,
454
+ };
455
+ const { account, selectedPeriod } = action.payload;
456
+ if (account != null) {
457
+ if (!draft.excludedAccountIDs.includes(account.account_id)) {
458
+ draft.excludedAccountIDs.push(account.account_id);
459
+ }
460
+ updateExcludedAccountExclusionInfo(draft, account);
461
+ const monthYearPeriodId = toMonthYearPeriodId(selectedPeriod);
462
+ if (draft.accountReconciliationRecordsBySelectedPeriod[monthYearPeriodId]
463
+ ?.accountIDs != null) {
464
+ draft.accountReconciliationRecordsBySelectedPeriod[monthYearPeriodId].accountIDs = draft.accountReconciliationRecordsBySelectedPeriod[monthYearPeriodId].accountIDs.filter((id) => id !== account.account_id);
465
+ }
466
+ }
467
+ },
468
+ excludeAccountFromReconciliationFailure: (draft, action) => {
469
+ draft.actionFetchState.excludeAccountFetch = {
470
+ fetchState: 'Error',
471
+ error: action.payload.error,
472
+ };
473
+ },
474
+ includeAccountInReconciliation: {
475
+ reducer(draft) {
476
+ draft.actionFetchState.includeAccountFetch = {
477
+ fetchState: 'In-Progress',
478
+ error: undefined,
479
+ };
480
+ },
481
+ prepare(payload) {
482
+ return { payload };
483
+ },
484
+ },
485
+ includeAccountInReconciliationSuccess: (draft, action) => {
486
+ draft.actionFetchState.includeAccountFetch = {
487
+ fetchState: 'Completed',
488
+ error: undefined,
489
+ };
490
+ const { reconciliation, selectedPeriod } = action.payload;
491
+ if (reconciliation == null) {
492
+ return;
493
+ }
494
+ const accountId = reconciliation.account_id;
495
+ draft.excludedAccountIDs = draft.excludedAccountIDs.filter((id) => id !== accountId);
496
+ delete draft.excludedAccountExclusionInfo[accountId];
497
+ const monthYearPeriodId = toMonthYearPeriodId(selectedPeriod);
498
+ const accountReconciliationRecords = draft.accountReconciliationRecordsBySelectedPeriod[monthYearPeriodId];
499
+ if (accountReconciliationRecords != null) {
500
+ if (!accountReconciliationRecords.accountIDs.includes(accountId)) {
501
+ accountReconciliationRecords.accountIDs.push(accountId);
502
+ }
503
+ // put this in a function
504
+ updateReconciliationByAccountIDOnIncludeAccount(draft, accountId, reconciliation, monthYearPeriodId);
505
+ }
506
+ draft.accountConnectionStatusByAccountID[accountId] = {
507
+ status: toBankStatusCodeType(reconciliation.bank_status.code),
508
+ connectionInProgress: false,
509
+ paymentAccountId: undefined,
510
+ };
511
+ },
512
+ includeAccountInReconciliationFailure: (draft, action) => {
513
+ draft.actionFetchState.includeAccountFetch = {
514
+ fetchState: 'Error',
515
+ error: action.payload.error,
516
+ };
517
+ },
424
518
  updateStatementUploadChosen: (draft, action) => {
425
519
  draft.statementUploadChosen = action.payload.statementUploadChosen;
426
520
  },
@@ -430,10 +524,38 @@ const expenseAutomationReconciliationView = createSlice({
430
524
  },
431
525
  });
432
526
  // Export actions
433
- export const { fetchReconciliation, fetchReconciliationFailure, fetchReconciliationSuccess, saveReconciliationDetail, saveReconciliationDetailFailure, updateSelectedAccountId, setConnectionInProgressForAccount, setStatementParseInProgress, updateReconcileTabLocalData, updateReconcileTabListSortState, updateReconcileTabListScrollState, saveReconciliationDetailSuccess, updateSelectedTab, updateBalancesLocalData, initialiseLocalDataForSelectedAccountId, clearExpenseAutomationReconciliationView, updateSelectedDrawerAccountId, updateReviewTabSortState, initializeReconciliationReviewTabLocalData, updateReviewTabLocalData, saveReconciliationReview, updateSaveReconciliationReviewFetchStatus, updateReconListScrollPosition, updateAccountReconciliationLocalData, deleteAccountStatement, deleteAccountStatementSuccess, deleteAccountStatementFailure, uploadAccountStatement, uploadAccountStatementSuccess, uploadAccountStatementFailure, updateStatementUploadChosen, } = expenseAutomationReconciliationView.actions;
527
+ export const { fetchReconciliation, fetchReconciliationFailure, fetchReconciliationSuccess, saveReconciliationDetail, saveReconciliationDetailFailure, updateSelectedAccountId, setConnectionInProgressForAccount, setStatementParseInProgress, updateReconcileTabLocalData, updateReconcileTabListSortState, updateReconcileTabListScrollState, saveReconciliationDetailSuccess, updateSelectedTab, updateBalancesLocalData, initialiseLocalDataForSelectedAccountId, clearExpenseAutomationReconciliationView, updateSelectedDrawerAccountId, updateReviewTabSortState, initializeReconciliationReviewTabLocalData, updateReviewTabLocalData, saveReconciliationReview, updateSaveReconciliationReviewFetchStatus, updateReconListScrollPosition, updateAccountReconciliationLocalData, deleteAccountStatement, deleteAccountStatementSuccess, deleteAccountStatementFailure, excludeAccountFromReconciliation, excludeAccountFromReconciliationSuccess, excludeAccountFromReconciliationFailure, includeAccountInReconciliation, includeAccountInReconciliationSuccess, includeAccountInReconciliationFailure, uploadAccountStatement, uploadAccountStatementSuccess, uploadAccountStatementFailure, updateStatementUploadChosen, updateNodeCollapseState, } = expenseAutomationReconciliationView.actions;
434
528
  // Export reducer
435
529
  export default expenseAutomationReconciliationView.reducer;
436
- function updateAllReconciliation(draft, accounts, selectedPeriod, reconciliationData, refreshViewInBackground) {
530
+ function updateAllReconciliation(draft, accounts, selectedPeriod, reconciliationData, refreshViewInBackground, excludedAccounts) {
531
+ draft.excludedAccountIDs = excludedAccounts.map((ea) => ea.account_id);
532
+ draft.excludedAccountExclusionInfo = {};
533
+ excludedAccounts.forEach((ea) => {
534
+ const { exclusion_info } = ea;
535
+ draft.excludedAccountExclusionInfo[ea.account_id] = {
536
+ bankBalance: exclusion_info.bank_balance != null
537
+ ? {
538
+ amount: exclusion_info.bank_balance,
539
+ currencyCode: ea.currency_code ?? 'USD',
540
+ currencySymbol: ea.currency_symbol ?? '$',
541
+ }
542
+ : undefined,
543
+ clearedBalance: exclusion_info.cleared_balance != null
544
+ ? {
545
+ amount: exclusion_info.cleared_balance,
546
+ currencyCode: ea.currency_code ?? 'USD',
547
+ currencySymbol: ea.currency_symbol ?? '$',
548
+ }
549
+ : undefined,
550
+ variance: exclusion_info.variance != null
551
+ ? {
552
+ amount: exclusion_info.variance,
553
+ currencyCode: ea.currency_code ?? 'USD',
554
+ currencySymbol: ea.currency_symbol ?? '$',
555
+ }
556
+ : undefined,
557
+ };
558
+ });
437
559
  draft.accountReconciliationRecordsBySelectedPeriod[toMonthYearPeriodId(selectedPeriod)] = {
438
560
  accountIDs: [],
439
561
  reconciliationByAccountID: {},
@@ -471,6 +593,9 @@ function updateAllReconciliation(draft, accounts, selectedPeriod, reconciliation
471
593
  ? toReconciliationAccountSource(account.reconciliation_source)
472
594
  : undefined,
473
595
  },
596
+ accountDetectionReason: account?.detection_info != null && account.detection_reason != null
597
+ ? account.detection_reason
598
+ : undefined,
474
599
  };
475
600
  accountReconciliationRecords.accountIDs.push(reconciliation.account_id);
476
601
  });
@@ -516,3 +641,42 @@ function updateReconciliationByAccountID(draft, accounts, selectedPeriod, accoun
516
641
  };
517
642
  }
518
643
  }
644
+ const updateExcludedAccountExclusionInfo = (draft, account) => {
645
+ draft.excludedAccountExclusionInfo[account.account_id] = {
646
+ bankBalance: account.bank_balance != null
647
+ ? {
648
+ amount: account.bank_balance,
649
+ currencyCode: account.currency_code ?? 'USD',
650
+ currencySymbol: account.currency_symbol ?? '$',
651
+ }
652
+ : undefined,
653
+ clearedBalance: account.cleared_balance != null
654
+ ? {
655
+ amount: account.cleared_balance,
656
+ currencyCode: account.currency_code ?? 'USD',
657
+ currencySymbol: account.currency_symbol ?? '$',
658
+ }
659
+ : undefined,
660
+ variance: account.variance != null
661
+ ? {
662
+ amount: account.variance,
663
+ currencyCode: account.currency_code ?? 'USD',
664
+ currencySymbol: account.currency_symbol ?? '$',
665
+ }
666
+ : undefined,
667
+ };
668
+ };
669
+ const updateReconciliationByAccountIDOnIncludeAccount = (draft, accountId, reconciliation, monthYearPeriodId) => {
670
+ draft.accountReconciliationRecordsBySelectedPeriod[monthYearPeriodId].reconciliationByAccountID[accountId] = {
671
+ accountId,
672
+ reconciliationId: reconciliation.reconciliation_id ?? undefined,
673
+ transactionFetchState: { fetchState: 'Not-Started', error: undefined },
674
+ refreshStatus: { fetchState: 'Not-Started', error: undefined },
675
+ statementDeleteStatus: { fetchState: 'Not-Started', error: undefined },
676
+ statementUploadStatus: { fetchState: 'Not-Started', error: undefined },
677
+ statementUpdateStatus: { fetchState: 'Not-Started', error: undefined },
678
+ statementParseInProgress: reconciliation.bank_status.code === 'parsing',
679
+ localData: {},
680
+ accountDetectionReason: undefined,
681
+ };
682
+ };
@@ -1,4 +1,3 @@
1
1
  import { stringToUnion } from '../../../commonStateTypes/stringToUnion';
2
2
  export const ALL_ACCOUNT_RECON_SECTION_IDS = ['assets', 'liabilities'];
3
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
4
- const toAccountReconSectionID = (v) => stringToUnion(v, ALL_ACCOUNT_RECON_SECTION_IDS);
3
+ export const toAccountReconSectionID = (v) => stringToUnion(v, ALL_ACCOUNT_RECON_SECTION_IDS);
@@ -1,3 +1,4 @@
1
+ import { reduceAnyFetchState } from '../../../commonStateTypes/reduceFetchState';
1
2
  import { toMonthYearPeriodId } from '../../../commonStateTypes/timePeriod';
2
3
  import { getAccountBase } from '../../../entity/account/accountSelector';
3
4
  import { getClassById } from '../../../entity/class/classSelector';
@@ -6,7 +7,7 @@ import { getUserByUserId } from '../../../entity/user/userSelector';
6
7
  import { getVendorByVendorId } from '../../../entity/vendor/vendorSelector';
7
8
  import { getAllSteps } from '../selectorTypes/expenseAutomationViewSelectorTypes';
8
9
  export function getExpenseAutomationFluxAnalysisView(state) {
9
- const { expenseAutomationFluxAnalysisViewState, monthEndCloseChecksState } = state;
10
+ const { expenseAutomationFluxAnalysisViewState, monthEndCloseChecksState, monthEndCloseChecksViewState, } = state;
10
11
  const { fetchState, error, refreshStatus, uiState, reviewOperatingExpenseIdsByPeriod, selectedSectionIdsByPeriod, groupsBySelectedPeriod, fluxAnalysisEntities, bulkReviewStatus, currency, totalBalancesAndVariance, } = expenseAutomationFluxAnalysisViewState;
11
12
  const fetchStateAndError = {
12
13
  fetchState,
@@ -91,10 +92,17 @@ export function getExpenseAutomationFluxAnalysisView(state) {
91
92
  },
92
93
  };
93
94
  const completionStatus = fluxCompletionStatus != null ? fluxCompletionStatus : 'incomplete';
95
+ const monthEndFetchState = monthYearPeriodId != null
96
+ ? (monthEndCloseChecksViewState.monthEndCloseChecksViewByTenantId[currentTenant.tenantId]?.[monthYearPeriodId] ?? { fetchState: 'Not-Started', error: undefined })
97
+ : { fetchState: 'Not-Started', error: undefined };
98
+ const reducedFetchStatus = reduceAnyFetchState([
99
+ fetchStateAndError,
100
+ monthEndFetchState,
101
+ ]);
94
102
  return {
95
103
  sections,
96
104
  totalBalancesAndVariance,
97
- fetchStatus: fetchStateAndError,
105
+ fetchStatus: reducedFetchStatus,
98
106
  bulkReviewStatus,
99
107
  reviewOperatingExpensesIds,
100
108
  selectedSectionIds,
@@ -1,4 +1,6 @@
1
1
  import omit from 'lodash/omit';
2
+ import orderBy from 'lodash/orderBy';
3
+ import { reduceAnyFetchState } from '../../../commonStateTypes/reduceFetchState';
2
4
  import { toMonthYearPeriodId } from '../../../commonStateTypes/timePeriod';
3
5
  import { getAccountIdsForTypes } from '../../../entity/account/accountSelector';
4
6
  import { getJEScheduledTransactionByJEScheduleTransactionKey, } from '../../../entity/jeSchedules/jeSchedulesSelector';
@@ -10,10 +12,48 @@ import { filterNestedAccountHierarchyById } from '../../scheduleView/scheduleDet
10
12
  import { getAccountLabelForScheduleType, getAccountsTypesForScheduleList, } from '../../scheduleView/scheduleListView/scheduleListHelper';
11
13
  import { getAllSteps } from '../selectorTypes/expenseAutomationViewSelectorTypes';
12
14
  import { getJEAccountSettingsView } from './jeAccountSettingsViewSelector';
15
+ function getJEScheduleSortAccessor(sortKey) {
16
+ switch (sortKey) {
17
+ case 'vendor':
18
+ return (s) => s.vendor.name?.toLowerCase();
19
+ case 'category':
20
+ return (s) => s.jeDebit.account?.accountName?.toLowerCase();
21
+ case 'class':
22
+ return (s) => s.jeDebit.accountingClass?.className?.toLowerCase();
23
+ case 'depCategory':
24
+ return (s) => s.jeCredit.account?.accountName?.toLowerCase();
25
+ case 'scheduleCategory':
26
+ return (s) => s.jeScheduleType;
27
+ case 'startMonth':
28
+ return (s) => s.startDate?.valueOf();
29
+ case 'type':
30
+ return (s) => s.baseTransaction.typeOfTransaction;
31
+ case 'amortizationPeriod':
32
+ return (s) => s.period;
33
+ case 'jePostingDate':
34
+ return (s) => s.dayOfPostingDate;
35
+ case 'remainingMonths':
36
+ return (s) => s.period;
37
+ case 'runningBalance':
38
+ return (s) => s.balanceAsOfToday?.amount;
39
+ case 'totalAmount':
40
+ return (s) => s.baseTransaction.amount.amount;
41
+ case 'transactionDate':
42
+ return (s) => s.baseTransaction.date.valueOf();
43
+ case 'memo':
44
+ return (s) => s.baseTransaction.memo?.toLowerCase();
45
+ default:
46
+ return (s) => s.startDate?.valueOf();
47
+ }
48
+ }
49
+ function sortJEScheduledTransactions(transactions, sortKey, sortOrder) {
50
+ const accessor = getJEScheduleSortAccessor(sortKey);
51
+ return orderBy(transactions, [accessor], [sortOrder === 'ascending' ? 'asc' : 'desc']);
52
+ }
13
53
  export function getExpenseAutomationJESchedulesView(state) {
14
54
  const jeScheduledTransaction = [];
15
55
  const failedJeScheduledTransaction = [];
16
- const { accountState, accountListState, classState, classListState, expenseAutomationJESchedulesViewState, expenseAutomationViewState, monthEndCloseChecksState, } = state;
56
+ const { accountState, accountListState, classState, classListState, expenseAutomationJESchedulesViewState, expenseAutomationViewState, monthEndCloseChecksState, monthEndCloseChecksViewState, } = state;
17
57
  const { jeScheduleTransactionKeysByPeriod, failedJeScheduleTransactionKeysByPeriod, jeScheduleLocalDataById, postStatusById, ignoreStatusById, uiState, error, fetchState, refreshStatus, } = expenseAutomationJESchedulesViewState;
18
58
  const accountSettingsView = getJEAccountSettingsView(state);
19
59
  const currentTenant = getCurrentTenant(state);
@@ -59,18 +99,33 @@ export function getExpenseAutomationJESchedulesView(state) {
59
99
  const jeScheduleDetails = getJEScheduledTransactionByJEScheduleTransactionKey(jeScheduleKey, state);
60
100
  failedJeScheduledTransaction.push(jeScheduleDetails);
61
101
  });
62
- const draftSchedules = jeScheduledTransaction.filter((schedule) => schedule.status.code === 'draft');
63
- const resolveSchedules = [];
102
+ const { sortKey, sortOrder } = uiState;
103
+ const draftSchedules = sortJEScheduledTransactions(jeScheduledTransaction.filter((schedule) => schedule.status.code === 'draft'), sortKey, sortOrder);
104
+ const ongoingSchedules = sortJEScheduledTransactions(jeScheduledTransaction.filter((schedule) => schedule.status.code === 'ongoing'), sortKey, sortOrder);
105
+ const completedSchedules = sortJEScheduledTransactions(jeScheduledTransaction.filter((schedule) => schedule.status.code === 'completed' ||
106
+ schedule.status.code === 'marked_as_completed'), sortKey, sortOrder);
107
+ const unsortedResolveSchedules = [];
64
108
  failedJeScheduledTransaction.forEach((schedule) => {
65
109
  schedule.scheduledJournalEntry.forEach((journalEntry) => {
66
- resolveSchedules.push({ ...schedule, scheduledJournalEntry: journalEntry });
110
+ unsortedResolveSchedules.push({
111
+ ...schedule,
112
+ scheduledJournalEntry: journalEntry,
113
+ });
67
114
  });
68
115
  });
116
+ const resolveSchedules = sortJEScheduledTransactions(unsortedResolveSchedules, sortKey, sortOrder);
69
117
  const allSteps = monthYearPeriodId != null
70
118
  ? getAllSteps(monthEndCloseChecksState, monthYearPeriodId, currentTenant.tenantId)
71
119
  : [];
72
120
  const jeCompletionStatus = allSteps.find((step) => step.step === 'je_schedules')?.completionStatus;
73
121
  const completionStatus = jeCompletionStatus != null ? jeCompletionStatus : 'incomplete';
122
+ const monthEndFetchState = monthYearPeriodId != null
123
+ ? (monthEndCloseChecksViewState.monthEndCloseChecksViewByTenantId[currentTenant.tenantId]?.[monthYearPeriodId] ?? { fetchState: 'Not-Started', error: undefined })
124
+ : { fetchState: 'Not-Started', error: undefined };
125
+ const reducedFetchStatus = reduceAnyFetchState([
126
+ { fetchState, error },
127
+ monthEndFetchState,
128
+ ]);
74
129
  return {
75
130
  uncategorizedAccounts,
76
131
  allDepreciationAccountList: filteredDepAccounts,
@@ -79,15 +134,17 @@ export function getExpenseAutomationJESchedulesView(state) {
79
134
  allAccountList: filteredAccounts,
80
135
  accountListNestedAccountHierarchy,
81
136
  allClassList: allClasses,
137
+ completedSchedules,
82
138
  draftSchedules,
139
+ ongoingSchedules,
83
140
  resolveSchedules: resolveSchedules,
84
141
  accountSettingsView,
85
142
  postStatusById: postStatusById,
86
143
  ignoreStatusById: ignoreStatusById,
87
- fetchState: fetchState,
144
+ fetchState: reducedFetchStatus.fetchState,
88
145
  jeScheduleLocalDataById: jeScheduleLocalDataById,
89
146
  uiState: uiState,
90
- error: error,
147
+ error: reducedFetchStatus.error,
91
148
  refreshStatus,
92
149
  completionStatus,
93
150
  };
@@ -1,4 +1,5 @@
1
1
  import orderBy from 'lodash/orderBy';
2
+ import { reduceAnyFetchState } from '../../../commonStateTypes/reduceFetchState';
2
3
  import { toMonthYearPeriodId } from '../../../commonStateTypes/timePeriod';
3
4
  import { getCurrentTenant } from '../../../entity/tenant/tenantSelector';
4
5
  import { getSupportedTransactionById, getSupportedTransactionsByIds, } from '../../../entity/transaction/transactionSelector';
@@ -7,7 +8,7 @@ import { getCompletedTransactionsCacheKey } from '../reducers/missingReceiptsVie
7
8
  import { getAllSteps } from '../selectorTypes/expenseAutomationViewSelectorTypes';
8
9
  import { isUnmatchedTabFileStatus, } from '../types/missingReceiptsViewState';
9
10
  export function getExpenseAutomationMissingReceiptsView(state) {
10
- const { expenseAutomationMissingReceiptsViewState, expenseAutomationViewState, transactionState, monthEndCloseChecksState, } = state;
11
+ const { expenseAutomationMissingReceiptsViewState, expenseAutomationViewState, transactionState, monthEndCloseChecksState, monthEndCloseChecksViewState, } = state;
11
12
  const currentTenant = getCurrentTenant(state);
12
13
  const { selectedPeriodByTenantId } = expenseAutomationViewState;
13
14
  const selectedPeriod = selectedPeriodByTenantId[currentTenant.tenantId];
@@ -36,7 +37,7 @@ export function getExpenseAutomationMissingReceiptsView(state) {
36
37
  transaction.lines.length > 0 &&
37
38
  transaction.lines[0]
38
39
  ?.class != null
39
- ? transaction.lines[0].class.className.toLowerCase()
40
+ ? transaction.lines[0].class?.className.toLowerCase()
40
41
  : null;
41
42
  case 'vendor':
42
43
  default:
@@ -175,9 +176,16 @@ export function getExpenseAutomationMissingReceiptsView(state) {
175
176
  vendorLogo: result.vendorLogo ?? transaction?.logo?.href,
176
177
  };
177
178
  });
179
+ const monthEndFetchState = monthYearPeriodId != null
180
+ ? (monthEndCloseChecksViewState.monthEndCloseChecksViewByTenantId[currentTenant.tenantId]?.[monthYearPeriodId] ?? { fetchState: 'Not-Started', error: undefined })
181
+ : { fetchState: 'Not-Started', error: undefined };
182
+ const reducedFetchStatus = reduceAnyFetchState([
183
+ { fetchState, error },
184
+ monthEndFetchState,
185
+ ]);
178
186
  return {
179
- fetchState,
180
- error,
187
+ fetchState: reducedFetchStatus.fetchState,
188
+ error: reducedFetchStatus.error,
181
189
  uploadReceiptStatusById,
182
190
  uiState,
183
191
  refreshStatus,
@@ -190,6 +198,7 @@ export function getExpenseAutomationMissingReceiptsView(state) {
190
198
  batchStatus: currentBatchStatus,
191
199
  batchDetails: resolvedBatchDetails,
192
200
  completedSubTab: bulkUpload.completedSubTab,
201
+ currentBatchId: bulkUpload.currentBatchId,
193
202
  completedTransactions: {
194
203
  fetchState: completedTransactionsForPeriod?.fetchState ?? {
195
204
  fetchState: 'Not-Started',
@@ -217,6 +226,7 @@ export function getExpenseAutomationMissingReceiptsView(state) {
217
226
  ...bulkUpload.manualSearch,
218
227
  results: manualSearchResults,
219
228
  },
229
+ uploadedFileCount: bulkUpload.uploadedFileCount,
220
230
  uploadProgress: bulkUpload.uploadProgress,
221
231
  },
222
232
  };
@@ -9,11 +9,12 @@ import { getAccountsByType } from '../../../entity/account/accountSelector';
9
9
  import { getAccountReconByAccountIdAndSelectedPeriod } from '../../../entity/accountRecon/accountReconSelector';
10
10
  import { getCurrentTenant } from '../../../entity/tenant/tenantSelector';
11
11
  import { getVendorByVendorId } from '../../../entity/vendor/vendorSelector';
12
+ import { date } from '../../../zeniDayJS';
12
13
  import { getAccountList, getNestedAccountListHierarchy, } from '../../accountList/accountListSelector';
13
14
  import { getClassList, getNestedClassListHierarchy, } from '../../classList/classListSelector';
14
15
  import { initialActionFetchState, initialReconciliationTabsState, initialState, } from '../reducers/reconciliationViewReducer';
15
16
  import { getAllSteps } from '../selectorTypes/expenseAutomationViewSelectorTypes';
16
- export const getExpenseAutomationReconciliationView = createSelector((state) => state, (state) => getCurrentTenant(state), (state) => state.expenseAutomationReconciliationViewState, (state) => state.expenseAutomationViewState, (state) => state.plaidAccountViewState, (state) => state.accountListState, (state) => state.accountState, (state) => state.classListState, (state) => state.classState, (state) => state.monthEndCloseChecksState, (state) => state.vendorState, (state, currentTenant, reconciliationViewState, expenseAutomationViewState, plaidAccountViewState, accountListState, accountState, classListState, classState, monthEndCloseChecksState, vendorState) => {
17
+ export const getExpenseAutomationReconciliationView = createSelector((state) => state, (state) => getCurrentTenant(state), (state) => state.expenseAutomationReconciliationViewState, (state) => state.expenseAutomationViewState, (state) => state.plaidAccountViewState, (state) => state.accountListState, (state) => state.accountState, (state) => state.classListState, (state) => state.classState, (state) => state.monthEndCloseChecksState, (state) => state.vendorState, (state) => state.monthEndCloseChecksViewState, (state, currentTenant, reconciliationViewState, expenseAutomationViewState, plaidAccountViewState, accountListState, accountState, classListState, classState, monthEndCloseChecksState, vendorState, monthEndCloseChecksViewState) => {
17
18
  const { selectedPeriodByTenantId } = expenseAutomationViewState;
18
19
  const reconcileTabUiState = reconciliationViewState.reconTabsState.reconcile.uiState;
19
20
  const reviewTabUiState = reconciliationViewState.reconTabsState.review.uiState;
@@ -35,6 +36,13 @@ export const getExpenseAutomationReconciliationView = createSelector((state) =>
35
36
  }
36
37
  return acc;
37
38
  }, []);
39
+ const monthYearPeriodId = selectedPeriod != null ? toMonthYearPeriodId(selectedPeriod) : null;
40
+ const monthEndFetchState = monthYearPeriodId != null
41
+ ? (monthEndCloseChecksViewState.monthEndCloseChecksViewByTenantId[currentTenant.tenantId]?.[monthYearPeriodId] ?? {
42
+ fetchState: 'Not-Started',
43
+ error: undefined,
44
+ })
45
+ : { fetchState: 'Not-Started', error: undefined };
38
46
  if (accountReconForMonthYearPeriod == null) {
39
47
  return {
40
48
  bankAccounts: [],
@@ -44,10 +52,13 @@ export const getExpenseAutomationReconciliationView = createSelector((state) =>
44
52
  classListNestedAccountHierarchy: [],
45
53
  allAccountList: [],
46
54
  allClassList: [],
47
- fetchStatus: {
48
- fetchState: reconciliationViewState.fetchState,
49
- error: reconciliationViewState.error,
50
- },
55
+ fetchStatus: reduceAnyFetchState([
56
+ {
57
+ fetchState: reconciliationViewState.fetchState,
58
+ error: reconciliationViewState.error,
59
+ },
60
+ monthEndFetchState,
61
+ ]),
51
62
  plaidConnectionDetails: plaidAccountViewState['expense_automation_reconcile']
52
63
  .plaidConnectionDetails,
53
64
  completionStatus: 'incomplete',
@@ -80,6 +91,30 @@ export const getExpenseAutomationReconciliationView = createSelector((state) =>
80
91
  totalVariancePercentage: undefined,
81
92
  },
82
93
  },
94
+ excludedAccountReconciliationByAccountID: {},
95
+ excludedAccountReconciliationBySectionID: {
96
+ assets: {
97
+ sectionId: 'assets',
98
+ accountIDs: [],
99
+ totalBankBalance: undefined,
100
+ totalClearedBalance: undefined,
101
+ totalReconciledBalance: undefined,
102
+ totalVariance: undefined,
103
+ totalVariancePercentage: undefined,
104
+ },
105
+ liabilities: {
106
+ sectionId: 'liabilities',
107
+ accountIDs: [],
108
+ totalBankBalance: undefined,
109
+ totalClearedBalance: undefined,
110
+ totalReconciledBalance: undefined,
111
+ totalVariance: undefined,
112
+ totalVariancePercentage: undefined,
113
+ },
114
+ },
115
+ excludeAccountFetchState: reconciliationViewState.actionFetchState.excludeAccountFetch,
116
+ includeAccountFetchState: reconciliationViewState.actionFetchState.includeAccountFetch,
117
+ excludedAccountIDs: reconciliationViewState.excludedAccountIDs,
83
118
  };
84
119
  }
85
120
  const allAccountIDs = accountReconForMonthYearPeriod.accountIDs;
@@ -217,6 +252,8 @@ export const getExpenseAutomationReconciliationView = createSelector((state) =>
217
252
  .transactionFetchState,
218
253
  accountListState.byReportId.accountList,
219
254
  ]),
255
+ accountDetectionReason: accountReconForMonthYearPeriod.reconciliationByAccountID[accountID]
256
+ .accountDetectionReason,
220
257
  };
221
258
  });
222
259
  const accountReconciliationBySectionID = {
@@ -239,6 +276,88 @@ export const getExpenseAutomationReconciliationView = createSelector((state) =>
239
276
  totalVariancePercentage: liabilityTotals.variancePercentage,
240
277
  },
241
278
  };
279
+ const bankAccountIdSet = new Set(uniqueBankAccounts.map((a) => a.accountId));
280
+ const creditCardIdSet = new Set(uniqueCreditCards.map((a) => a.accountId));
281
+ const excludedAssetAccountIDs = [];
282
+ const excludedLiabilityAccountIDs = [];
283
+ reconciliationViewState.excludedAccountIDs.forEach((accountID) => {
284
+ const isAsset = bankAccountIdSet.has(accountID);
285
+ const isLiability = creditCardIdSet.has(accountID);
286
+ if (!isAsset && !isLiability) {
287
+ return;
288
+ }
289
+ if (isAsset) {
290
+ excludedAssetAccountIDs.push(accountID);
291
+ }
292
+ else {
293
+ excludedLiabilityAccountIDs.push(accountID);
294
+ }
295
+ });
296
+ const excludedAccountReconciliationBySectionID = {
297
+ assets: {
298
+ sectionId: 'assets',
299
+ accountIDs: excludedAssetAccountIDs,
300
+ },
301
+ liabilities: {
302
+ sectionId: 'liabilities',
303
+ accountIDs: excludedLiabilityAccountIDs,
304
+ },
305
+ };
306
+ const excludedAccountReconciliationByAccountID = {};
307
+ const accountsInState = Object.values(accountState.accountsByKey);
308
+ const accountsInStateMap = new Map(accountsInState.map((a) => [a.accountId, a]));
309
+ reconciliationViewState.excludedAccountIDs.forEach((excludedAccountID) => {
310
+ const account = accountsInStateMap.get(excludedAccountID);
311
+ const exclusionInfo = reconciliationViewState.excludedAccountExclusionInfo[excludedAccountID];
312
+ if (account != null) {
313
+ excludedAccountReconciliationByAccountID[excludedAccountID] = {
314
+ refreshStatus: { fetchState: 'Not-Started' },
315
+ statementUpdateStatus: { fetchState: 'Not-Started' },
316
+ statementUploadStatus: { fetchState: 'Not-Started' },
317
+ statementDeleteStatus: { fetchState: 'Not-Started' },
318
+ localData: {},
319
+ connectionInProgress: false,
320
+ statementParseInProgress: false,
321
+ accountConnectionStatus: 'not_connected',
322
+ transactionFetchState: { fetchState: 'Not-Started' },
323
+ accountReconEntity: {
324
+ account: {
325
+ accountId: account.accountId,
326
+ accountName: account.accountName,
327
+ accountType: account.accountType,
328
+ accountSubType: account.accountSubType,
329
+ accountDescription: account.accountDescription,
330
+ qboId: account.qboId,
331
+ coaId: account.coaId,
332
+ labels: account.labels,
333
+ },
334
+ currency: {
335
+ currencyCode: exclusionInfo?.bankBalance?.currencyCode ??
336
+ exclusionInfo?.clearedBalance?.currencyCode ??
337
+ 'USD',
338
+ currencySymbol: exclusionInfo?.bankBalance?.currencySymbol ??
339
+ exclusionInfo?.clearedBalance?.currencySymbol ??
340
+ '$',
341
+ },
342
+ startDate: date(new Date().toDateString()),
343
+ endDate: date(new Date().toDateString()),
344
+ statementStatus: { code: 'not_found', label: 'Not Found' },
345
+ transactionsToReconcile: [],
346
+ transactionsToReview: [],
347
+ balance: exclusionInfo?.bankBalance,
348
+ clearedBalance: exclusionInfo?.clearedBalance,
349
+ variance: exclusionInfo?.variance,
350
+ variancePercentage: exclusionInfo?.variance != null &&
351
+ exclusionInfo?.bankBalance != null &&
352
+ exclusionInfo?.bankBalance.amount !== 0
353
+ ? Math.abs((exclusionInfo.variance.amount /
354
+ exclusionInfo.bankBalance.amount) *
355
+ 100)
356
+ : undefined,
357
+ },
358
+ };
359
+ }
360
+ });
242
361
  const accountListNestedAccountHierarchy = getNestedAccountListHierarchy(accountListState, 'accountList');
243
362
  const classListNestedAccountHierarchy = getNestedClassListHierarchy(classListState);
244
363
  const accountsList = getAccountList(accountState, accountListState, 'accountList');
@@ -270,10 +389,13 @@ export const getExpenseAutomationReconciliationView = createSelector((state) =>
270
389
  bankAccounts: uniqueBankAccounts,
271
390
  creditCards: uniqueCreditCards,
272
391
  accountReconciliationsByAccountID: reconList,
273
- fetchStatus: {
274
- fetchState: reconciliationViewState.fetchState,
275
- error: reconciliationViewState.error,
276
- },
392
+ fetchStatus: reduceAnyFetchState([
393
+ {
394
+ fetchState: reconciliationViewState.fetchState,
395
+ error: reconciliationViewState.error,
396
+ },
397
+ monthEndFetchState,
398
+ ]),
277
399
  plaidConnectionDetails: plaidAccountViewState['expense_automation_reconcile']
278
400
  .plaidConnectionDetails,
279
401
  reconciliationTabsState: reconciliationViewState.reconTabsState,
@@ -296,6 +418,11 @@ export const getExpenseAutomationReconciliationView = createSelector((state) =>
296
418
  allClassList: allClasses,
297
419
  reviewTabSelectedVendorByTransactionId,
298
420
  reconListUIState: reconciliationViewState.reconListUIState,
421
+ excludedAccountReconciliationBySectionID,
422
+ excludedAccountReconciliationByAccountID,
423
+ excludeAccountFetchState: reconciliationViewState.actionFetchState.excludeAccountFetch,
424
+ includeAccountFetchState: reconciliationViewState.actionFetchState.includeAccountFetch,
425
+ excludedAccountIDs: reconciliationViewState.excludedAccountIDs,
299
426
  };
300
427
  });
301
428
  export const isAccountReconReport = (reportId) => {