@zeniai/client-epic-state 4.19.79 → 4.19.81-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 (61) hide show
  1. package/lib/entity/account/accountPayload.d.ts +2 -0
  2. package/lib/entity/account/accountPayload.js +2 -0
  3. package/lib/entity/account/accountState.d.ts +2 -0
  4. package/lib/entity/company/companyPayload.d.ts +13 -0
  5. package/lib/entity/company/companyPayload.js +21 -0
  6. package/lib/entity/company/companyStateTypes.d.ts +13 -0
  7. package/lib/esm/entity/account/accountPayload.js +2 -0
  8. package/lib/esm/entity/chargeCardTransaction/chargeCardTransactionPayload.js +2 -2
  9. package/lib/esm/entity/company/companyPayload.js +21 -0
  10. package/lib/esm/index.js +9 -7
  11. package/lib/esm/view/companyView/epic/companyPassport/updateCompanyDetailsEpic.js +6 -0
  12. package/lib/esm/view/companyView/types/companyPassport/companyPassportLocalData.js +13 -0
  13. package/lib/esm/view/companyView/types/companyPassportViewPayload.js +55 -12
  14. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/triggerReviewTabRefetchEpic.js +2 -3
  15. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/uploadTransactionReceiptSuccessEpic.js +22 -0
  16. package/lib/esm/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +2 -2
  17. package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +20 -1
  18. package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +2 -1
  19. package/lib/esm/view/onboardingView/customerView/onboardingCustomerViewSelector.js +22 -4
  20. package/lib/esm/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryDownloadSelector.js +2 -2
  21. package/lib/esm/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistorySelector.js +2 -2
  22. package/lib/esm/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailSelector.js +4 -1
  23. package/lib/esm/view/spendManagement/chargeCards/chargeCardRepaymentDetail/fetchChargeCardRepaymentDetailEpic.js +2 -1
  24. package/lib/esm/view/spendManagement/chargeCards/chargeCardRepaymentDetail/initiateChargeCardRepaymentEpic.js +1 -1
  25. package/lib/esm/view/spendManagement/commonSetup/epic/setup/updateBusinessVerificationDetailsEpic.js +67 -1
  26. package/lib/esm/view/spendManagement/commonSetup/epic/setup/updateSetupViewLocalStoreDataEpic.js +16 -2
  27. package/lib/esm/view/spendManagement/commonSetup/setupViewSelector.js +15 -1
  28. package/lib/esm/view/spendManagement/commonSetup/types/businessVerification.js +148 -1
  29. package/lib/index.d.ts +10 -7
  30. package/lib/index.js +54 -44
  31. package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
  32. package/lib/view/companyView/epic/companyPassport/updateCompanyDetailsEpic.js +6 -0
  33. package/lib/view/companyView/types/companyPassport/companyDetailsLocalData.d.ts +13 -0
  34. package/lib/view/companyView/types/companyPassport/companyPassportLocalData.js +13 -0
  35. package/lib/view/companyView/types/companyPassportViewPayload.d.ts +1 -1
  36. package/lib/view/companyView/types/companyPassportViewPayload.js +55 -12
  37. package/lib/view/expenseAutomationView/epics/transactionCategorization/triggerReviewTabRefetchEpic.js +2 -3
  38. package/lib/view/expenseAutomationView/epics/transactionCategorization/uploadTransactionReceiptSuccessEpic.d.ts +7 -0
  39. package/lib/view/expenseAutomationView/epics/transactionCategorization/uploadTransactionReceiptSuccessEpic.js +26 -0
  40. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +2 -2
  41. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +11 -3
  42. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +21 -2
  43. package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +1 -0
  44. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +2 -1
  45. package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +1 -0
  46. package/lib/view/onboardingView/customerView/onboardingCustomerViewSelector.d.ts +1 -0
  47. package/lib/view/onboardingView/customerView/onboardingCustomerViewSelector.js +22 -3
  48. package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryDownloadSelector.js +2 -2
  49. package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistorySelector.js +2 -2
  50. package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailSelector.js +4 -1
  51. package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/fetchChargeCardRepaymentDetailEpic.js +2 -1
  52. package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/initiateChargeCardRepaymentEpic.d.ts +1 -1
  53. package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/initiateChargeCardRepaymentEpic.js +1 -1
  54. package/lib/view/spendManagement/commonSetup/epic/setup/updateBusinessVerificationDetailsEpic.js +67 -1
  55. package/lib/view/spendManagement/commonSetup/epic/setup/updateSetupViewLocalStoreDataEpic.js +16 -2
  56. package/lib/view/spendManagement/commonSetup/setupViewSelector.d.ts +14 -0
  57. package/lib/view/spendManagement/commonSetup/setupViewSelector.js +15 -1
  58. package/lib/view/spendManagement/commonSetup/setupViewState.d.ts +14 -0
  59. package/lib/view/spendManagement/commonSetup/types/businessVerification.d.ts +43 -0
  60. package/lib/view/spendManagement/commonSetup/types/businessVerification.js +150 -0
  61. package/package.json +1 -1
@@ -16,6 +16,8 @@ export interface AccountBasePayload {
16
16
  is_deleted?: boolean | null;
17
17
  last_4_digits?: string | null;
18
18
  logo?: URLPayload;
19
+ payment_account_id?: string | null;
20
+ payment_account_name?: string | null;
19
21
  qbo_id?: string;
20
22
  reconciliation_source?: string | null;
21
23
  tax_1099_config?: Tax1099ConfigPayload | null;
@@ -13,6 +13,8 @@ const mapAccountBasePayloadToAccountBase = (payload) => ({
13
13
  accountDescription: payload.account_description ?? '',
14
14
  last4Digits: payload.last_4_digits ?? undefined,
15
15
  logo: payload.logo == null ? undefined : (0, urlPayload_1.toURL)(payload.logo),
16
+ paymentAccountId: payload.payment_account_id ?? undefined,
17
+ paymentAccountName: payload.payment_account_name ?? undefined,
16
18
  qboId: payload.qbo_id ?? undefined,
17
19
  coaId: payload.coa_id ?? undefined,
18
20
  labels: toAccountLabelArray(payload.labels ?? []),
@@ -43,6 +43,8 @@ export interface AccountBase {
43
43
  isPreFilled?: boolean;
44
44
  last4Digits?: string;
45
45
  logo?: ZeniUrl;
46
+ paymentAccountId?: string;
47
+ paymentAccountName?: string;
46
48
  qboId?: ID;
47
49
  reconciliationSource?: ReconciliationAccountSourceType;
48
50
  tax1099Config?: Tax1099Config;
@@ -18,6 +18,17 @@ export interface CompanyInfoPayload {
18
18
  primary_email_domain: string;
19
19
  source_of_funds: string | null;
20
20
  update_time: string;
21
+ company_countries_of_operations?: string[] | null;
22
+ company_purpose_of_account?: string | null;
23
+ company_purpose_of_account_desc?: string | null;
24
+ company_regulated_states?: boolean | null;
25
+ company_regulated_states_desc?: string | null;
26
+ company_source_of_funds?: string | null;
27
+ company_source_of_funds_desc?: string | null;
28
+ company_transaction_vol_expectations?: string | null;
29
+ company_transaction_vol_expectations_desc?: string | null;
30
+ company_us_nexus?: boolean | null;
31
+ company_us_nexus_desc?: string[] | null;
21
32
  first_month_of_fiscal_year?: string | undefined;
22
33
  sync_token?: string | null;
23
34
  }
@@ -36,6 +47,8 @@ export interface CompanyIncInfoPayload {
36
47
  company_inc_state: string | null;
37
48
  company_inc_state_code: string | null;
38
49
  company_inc_type: string | null;
50
+ company_industry_sub_type?: string | null;
51
+ company_industry_type?: string | null;
39
52
  file_ids?: ID[] | null;
40
53
  }
41
54
  export interface CompanyTaxInfoPayload {
@@ -36,6 +36,25 @@ const toCompanyInfo = (payload, companyIdTenantIdMapping, companyInStore) => {
36
36
  phone: payload.phone ?? undefined,
37
37
  firstMonthOfFY: (0, timePeriod_1.getMonthFromMonthName)(payload.first_month_of_fiscal_year) ?? 1,
38
38
  sourceOfFunds: payload.source_of_funds ?? undefined,
39
+ companySourceOfFunds: payload.company_source_of_funds ?? undefined,
40
+ companySourceOfFundsDescription: payload.company_source_of_funds_desc ?? undefined,
41
+ countriesOfOperations: payload.company_countries_of_operations ?? undefined,
42
+ transactionVolume: payload.company_transaction_vol_expectations ?? undefined,
43
+ transactionVolumeDescription: payload.company_transaction_vol_expectations_desc ?? undefined,
44
+ purposeOfAccount: payload.company_purpose_of_account ?? undefined,
45
+ purposeOfAccountDescription: payload.company_purpose_of_account_desc ?? undefined,
46
+ regulatedStatus: payload.company_regulated_states == null
47
+ ? undefined
48
+ : payload.company_regulated_states
49
+ ? 'yes'
50
+ : 'no',
51
+ regulatedStatusDescription: payload.company_regulated_states_desc ?? undefined,
52
+ usNexus: payload.company_us_nexus == null
53
+ ? undefined
54
+ : payload.company_us_nexus
55
+ ? 'yes'
56
+ : 'no',
57
+ usNexusTypes: payload.company_us_nexus_desc ?? undefined,
39
58
  };
40
59
  };
41
60
  const toCompanyLocaleInfo = (payload) => ({
@@ -56,6 +75,8 @@ const toCompanyIncInfo = (payload) => ({
56
75
  companyIncStateCode: payload.company_inc_state_code ?? undefined,
57
76
  companyIncCountryCode: payload.company_inc_country_code ?? undefined,
58
77
  fileIds: payload.file_ids ?? [],
78
+ companySubIndustry: payload.company_industry_sub_type ?? undefined,
79
+ companyIndustryType: payload.company_industry_type ?? undefined,
59
80
  });
60
81
  const toCompanyTaxInfo = (payload) => ({
61
82
  taxesFiledDate: payload.taxes_filed_date != null
@@ -27,12 +27,23 @@ export interface CompanyInfo {
27
27
  bookCloseDate?: ZeniDate;
28
28
  companyDescription?: string;
29
29
  companyLegalName?: string;
30
+ companySourceOfFunds?: string;
31
+ companySourceOfFundsDescription?: string;
30
32
  companyUrl?: ZeniUrl;
33
+ countriesOfOperations?: string[];
31
34
  meetingUrl?: ZeniUrl;
32
35
  phone?: string;
36
+ purposeOfAccount?: string;
37
+ purposeOfAccountDescription?: string;
38
+ regulatedStatus?: string;
39
+ regulatedStatusDescription?: string;
33
40
  sourceOfFunds?: string;
34
41
  syncToken?: string;
35
42
  tenantId?: ID;
43
+ transactionVolume?: string;
44
+ transactionVolumeDescription?: string;
45
+ usNexus?: string;
46
+ usNexusTypes?: string[];
36
47
  }
37
48
  export interface CompanyLocaleInfo {
38
49
  companyIncCountryCode: string;
@@ -50,6 +61,8 @@ export interface CompanyIncInfo {
50
61
  companyIncState?: string;
51
62
  companyIncStateCode?: string;
52
63
  companyIncType?: string;
64
+ companyIndustryType?: string;
65
+ companySubIndustry?: string;
53
66
  }
54
67
  export interface CompanyTaxInfo {
55
68
  taxesFiledYears: number[];
@@ -10,6 +10,8 @@ export const mapAccountBasePayloadToAccountBase = (payload) => ({
10
10
  accountDescription: payload.account_description ?? '',
11
11
  last4Digits: payload.last_4_digits ?? undefined,
12
12
  logo: payload.logo == null ? undefined : toURL(payload.logo),
13
+ paymentAccountId: payload.payment_account_id ?? undefined,
14
+ paymentAccountName: payload.payment_account_name ?? undefined,
13
15
  qboId: payload.qbo_id ?? undefined,
14
16
  coaId: payload.coa_id ?? undefined,
15
17
  labels: toAccountLabelArray(payload.labels ?? []),
@@ -1,8 +1,8 @@
1
1
  import { toURL } from '../../commonPayloadTypes/urlPayload';
2
2
  import { toAmount } from '../../commonStateTypes/amount';
3
- import { dateNow, dateLocal } from '../../zeniDayJS';
3
+ import { dateLocal, dateNow } from '../../zeniDayJS';
4
4
  import { toZeniUrl } from '../../zeniUrl';
5
- import { toContentType, } from '../transaction/stateTypes/attachment';
5
+ import { toContentType } from '../transaction/stateTypes/attachment';
6
6
  import { toTransactionCategory } from '../transaction/stateTypes/transactionType';
7
7
  import { toCardTransactionStatusCode, toCardTransactionTypeCode, } from './chargeCardTransaction';
8
8
  const EXTENSION_TO_CONTENT_TYPE = {
@@ -33,6 +33,25 @@ const toCompanyInfo = (payload, companyIdTenantIdMapping, companyInStore) => {
33
33
  phone: payload.phone ?? undefined,
34
34
  firstMonthOfFY: getMonthFromMonthName(payload.first_month_of_fiscal_year) ?? 1,
35
35
  sourceOfFunds: payload.source_of_funds ?? undefined,
36
+ companySourceOfFunds: payload.company_source_of_funds ?? undefined,
37
+ companySourceOfFundsDescription: payload.company_source_of_funds_desc ?? undefined,
38
+ countriesOfOperations: payload.company_countries_of_operations ?? undefined,
39
+ transactionVolume: payload.company_transaction_vol_expectations ?? undefined,
40
+ transactionVolumeDescription: payload.company_transaction_vol_expectations_desc ?? undefined,
41
+ purposeOfAccount: payload.company_purpose_of_account ?? undefined,
42
+ purposeOfAccountDescription: payload.company_purpose_of_account_desc ?? undefined,
43
+ regulatedStatus: payload.company_regulated_states == null
44
+ ? undefined
45
+ : payload.company_regulated_states
46
+ ? 'yes'
47
+ : 'no',
48
+ regulatedStatusDescription: payload.company_regulated_states_desc ?? undefined,
49
+ usNexus: payload.company_us_nexus == null
50
+ ? undefined
51
+ : payload.company_us_nexus
52
+ ? 'yes'
53
+ : 'no',
54
+ usNexusTypes: payload.company_us_nexus_desc ?? undefined,
36
55
  };
37
56
  };
38
57
  const toCompanyLocaleInfo = (payload) => ({
@@ -53,6 +72,8 @@ const toCompanyIncInfo = (payload) => ({
53
72
  companyIncStateCode: payload.company_inc_state_code ?? undefined,
54
73
  companyIncCountryCode: payload.company_inc_country_code ?? undefined,
55
74
  fileIds: payload.file_ids ?? [],
75
+ companySubIndustry: payload.company_industry_sub_type ?? undefined,
76
+ companyIndustryType: payload.company_industry_type ?? undefined,
56
77
  });
57
78
  const toCompanyTaxInfo = (payload) => ({
58
79
  taxesFiledDate: payload.taxes_filed_date != null
package/lib/esm/index.js CHANGED
@@ -165,7 +165,7 @@ import { clearExpenseAutomationFluxAnalysisView, fetchFluxAnalysisView, reviewFl
165
165
  import { clearJeScheduleLocalData as clearExpenseAutomationJEScheduleLocalData, clearExpenseAutomationJESchedulesView, fetchJeSchedulesPage as fetchExpenseAutomationJESchedulesPage, ignoreRecommendedJeSchedule as ignoreExpenseAutomationJESchedule, initializeAccountSettingsView as initializeJeAccountSettingsView, initializeJeScheduleLocalData, removeJeScheduleTransactionKey, retryJeSchedule as retryExpenseAutomationJESchedule, saveAccountSettings as saveJeAccountSettings, saveAccountSettingsLocalData as saveJeAccountSettingsLocalData, updateJeScheduleLocalDataById, updateJeScheduleTransactionKeys, } from './view/expenseAutomationView/reducers/jeSchedulesViewReducer';
166
166
  import { fetchMissingReceipts as fetchExpenseAutomationMissingReceipts, markMissingReceiptAsDone as markExpenseAutomationMissingReceiptAsDone, updateMissingReceiptUploadState as updateExpenseAutomationMissingReceiptUploadState, updateMissingReceiptsUIState as updateExpenseAutomationMissingReceiptsUIState, uploadMissingReceiptSuccess as uploadExpenseAutomationMissingReceiptSuccess, } from './view/expenseAutomationView/reducers/missingReceiptsViewReducer';
167
167
  import { deleteAccountStatement, fetchReconciliation as fetchReconciliationView, saveReconciliationDetail as saveExpenseAutomationReconciliationDetail, saveReconciliationReview as saveExpenseAutomationReconciliationReview, setConnectionInProgressForAccount as setConnectionInProgressForAccountReconciliation, setStatementParseInProgress, updateAccountReconciliationLocalData as updateExpenseAutomationAccountReconciliationLocalData, updateSelectedAccountId as updateExpenseAutomationAccountReconciliationSelectedAccountId, updateSelectedTab as updateExpenseAutomationAccountReconciliationSelectedTab, updateReconListScrollPosition as updateExpenseAutomationReconListScrollPosition, updateReviewTabSortState as updateExpenseAutomationReconReviewTabListSortState, updateReviewTabLocalData as updateExpenseAutomationReconReviewTabLocalData, updateReconcileTabListScrollState as updateExpenseAutomationReconcileTabListScrollState, updateReconcileTabListSortState as updateExpenseAutomationReconcileTabListSortState, updateReconcileTabLocalData as updateExpenseAutomationReconcileTabLocalData, updateSelectedDrawerAccountId as updateExpenseAutomationSelectedDrawerAccountId, updateStatementUploadChosen, uploadAccountStatement, } from './view/expenseAutomationView/reducers/reconciliationViewReducer';
168
- import { backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization, syncTransactionCategorizationFromDetailSave, updateCurrentSelectedTransactionCategorizationTab, updateSelectedCheckboxTransactionIds, updateSelectedCustomerForTransaction, updateSelectedTransactionId, updateSelectedVendorForTransaction, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, updateTransactionCategorizationUIState, } from './view/expenseAutomationView/reducers/transactionsViewReducer';
168
+ import { backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization, syncTransactionCategorizationFromDetailSave, updateCurrentSelectedTransactionCategorizationTab, updateSelectedCheckboxTransactionIds, updateSelectedCustomerForTransaction, updateSelectedTransactionId, updateSelectedVendorForTransaction, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, updateTransactionCategorizationUIState, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, } from './view/expenseAutomationView/reducers/transactionsViewReducer';
169
169
  import { getExpenseAutomationFluxAnalysisView } from './view/expenseAutomationView/selectors/fluxAnalysisViewSelector';
170
170
  import { getExpenseAutomationReconciliationView, isAccountReconReport, } from './view/expenseAutomationView/selectors/reconciliationViewSelector';
171
171
  import { getExpenseAutomationTransactionView } from './view/expenseAutomationView/selectors/transactionCategorizationSelector';
@@ -285,13 +285,13 @@ import { getChargeCardCVVActivateView, getChargeCardControlDetailView, getCharge
285
285
  import { toChargeCardSortKeyType, } from './view/spendManagement/chargeCards/chargeCardList/chargeCardList';
286
286
  import { closeChargeCards, fetchChargeCardList, fetchChargeCardListPage, fetchCreditAccount, fetchCreditAccountRepayment, fetchDebitCardSummary, lockChargeCards, resendCardInvite, revokeCardInvite, revokeChargeCardsInvite, unlockChargeCards, updateBulkActionCardIds, updateSearchText as updateChargeCardListSearchText, updateChargeCardListUIState, updateChargeCardsSpendLimit, updateRowActionCardId, } from './view/spendManagement/chargeCards/chargeCardList/chargeCardListReducer';
287
287
  import { anyCardOnHold, getChargeCardBulkActionView, getChargeCardListView, getChargeCardRecurringExpensesByCardIds, getChargeCardRowActionView, getCreditAccountDetails, getDebitCardList, getDebitCardSummary, getDepositAccountListWithDebitCardIssued, getMyPendingActivationChargeCardListView, getMyRequestOnHoldChargeCardListWithShippingAddress, } from './view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector';
288
- import { clearChargeCardRepaymentDetail, fetchChargeCardRepaymentDetail, initiateChargeCardRepayment, updateChargeCardRepaymentLocalStore, } from './view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailReducer';
289
- import { getChargeCardRepaymentDetail, } from './view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailSelector';
290
- import { getChargeCardPaymentHistoryDownloadReport, } from './view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryDownloadSelector';
291
- import { fetchChargeCardPaymentPage, fetchChargeCardPaymentHistory, updatePaymentHistoryDownloadUIState, updatePaymentHistoryFilters, updatePaymentHistorySearchText, updatePaymentHistoryUIState, } from './view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryReducer';
292
- import { getChargeCardPaymentHistoryView, } from './view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistorySelector';
293
288
  import { PAYMENT_HISTORY_FILTER_CATEGORIES, } from './view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistory';
289
+ import { getChargeCardPaymentHistoryDownloadReport, } from './view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryDownloadSelector';
294
290
  import { getPaymentHistorySourceAccountName, getPaymentStatusDisplayText, } from './view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryHelpers';
291
+ import { fetchChargeCardPaymentHistory, fetchChargeCardPaymentPage, updatePaymentHistoryDownloadUIState, updatePaymentHistoryFilters, updatePaymentHistorySearchText, updatePaymentHistoryUIState, } from './view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryReducer';
292
+ import { getChargeCardPaymentHistoryView, } from './view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistorySelector';
293
+ import { clearChargeCardRepaymentDetail, fetchChargeCardRepaymentDetail, initiateChargeCardRepayment, updateChargeCardRepaymentLocalStore, } from './view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailReducer';
294
+ import { getChargeCardRepaymentDetail, } from './view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailSelector';
295
295
  import { acceptChargeCardTerms, enableChargeCardAutoPay, expressInterestInChargeCard, fetchChargeCardSetupView, } from './view/spendManagement/chargeCards/chargeCardSetUp/chargeCardSetUpViewReducer';
296
296
  import { getChargeCardBusinessVerificationDetails, getChargeCardSetupViewDetails, } from './view/spendManagement/chargeCards/chargeCardSetUp/chargeCardSetUpViewSelector';
297
297
  import { fetchChargeCardStatementList } from './view/spendManagement/chargeCards/chargeCardStatementList/chargeCardStatementListReducer';
@@ -300,6 +300,7 @@ import { fetchDepositAccountListForCards, fetchIssueCardPage, issueChargeCards,
300
300
  import { getIssueChargeCardView, } from './view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector';
301
301
  import { clearSetupViewDataInLocalStore, enableSetup, saveCompnayOfficerAdditionalDocumentsInLocalStore, saveCompnayOfficerPhoneInLocalStore, saveIndustryAndIncDateInLocalStore, saveSetupViewDataInLocalStore, saveTreasuryAdditionalDocumentsInLocalStore, updateBusinessVerificationDetails, updateSelectedCompanyOfficer, updateSetupViewLocalStoreData, } from './view/spendManagement/commonSetup/setupViewReducer';
302
302
  import { getBusinessVerificationDetails, getCommonSetupViewDetails, } from './view/spendManagement/commonSetup/setupViewSelector';
303
+ import { COMPANY_ONBOARDING_INDUSTRY_TYPE_CODES, COMPANY_ONBOARDING_SUB_INDUSTRY_CODES_BY_INDUSTRY, COMPANY_PURPOSE_OF_ACCOUNT_CODES, COMPANY_SOURCE_OF_FUNDS_CODES, COMPANY_TRANSACTION_VOLUME_CODES, COMPANY_US_NEXUS_TYPE_CODES, getCompanyOnboardingSubIndustryCodesForIndustry, } from './view/spendManagement/commonSetup/types/businessVerification';
303
304
  import { checkIfLowBalance, getActualPaymentDate, getBillListUniqueType, getBulkOperationSuffix, getRemiListUniqueType, getSelectedCompanyOfficer, getSpendManagementEffectiveListPeriod, isAwaitingMarkAsPaid, isBulkProcessing, isPaymentMethodOutsideZeni, isVerifiedPaymentAccountProviderStatusCode, isVerifiedStatusCode, showBillPayPromoPage, showReimbursementPromoPage, toAccountsPromoConfig, toSameDayAchDisablementConfig, } from './view/spendManagement/helpers';
304
305
  import { establishPlaidConnection, getPaymentAccounts, getPlaidLinkToken, updateMappedCashAccount, updatePaymentAccount, updatePaymentAccountLoginStatus, updatePaymentAccountStatus, updatePrimaryFundingAccount, } from './view/spendManagement/plaidAccount/plaidAccountViewReducer';
305
306
  import { getPlaidAccountDetails } from './view/spendManagement/plaidAccount/plaidAccountViewSelector';
@@ -414,7 +415,7 @@ export { newBalancesFilterClassesView };
414
415
  export { toCOABalanceTypeStrict, toCOABalanceType as toCOABlanaceType, isCalculatedBalanceType, };
415
416
  export { stringToUnion, stringToUnionStrict };
416
417
  export { fetchMonthEndCloseChecks, fetchMonthClosePerformanceTrend, getMonthEndCloseChecksViewByTenantId, ALL_MONTH_END_CLOSE_CHECKS_FREQUENCY, };
417
- export { getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, fetchExpenseAutomationMissingReceipts, fetchFluxAnalysisView, clearExpenseAutomationFluxAnalysisView, updateOperatingExpensesIdsForReview as updateFluxOperatingExpensesIdsForReview, updateSelectedSectionIdsForReview as updateFluxAnalysisSelectedSectionIdsForReview, reviewFluxAnalysisView, updateExpenseAutomationMissingReceiptUploadState, updateExpenseAutomationMissingReceiptsUIState, getExpenseAutomationFluxAnalysisView, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, updateFluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, saveExpenseAutomationReconciliationDetail, updateExpenseAutomationReconcileTabListScrollState, updateExpenseAutomationReconReviewTabListSortState, updateExpenseAutomationReconcileTabListSortState, updateExpenseAutomationReconcileTabLocalData, updateExpenseAutomationAccountReconciliationSelectedTab, updateExpenseAutomationAccountReconciliationSelectedAccountId, getExpenseAutomationReconciliationView, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, getAccountReconByAccountIdAndSelectedPeriod, toReconciliationTabsType, isAccountReconReport, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, toReconciliationAccountSource, deleteAccountStatement, uploadAccountStatement, updateStatementUploadChosen, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, };
418
+ export { getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, fetchExpenseAutomationMissingReceipts, fetchFluxAnalysisView, clearExpenseAutomationFluxAnalysisView, updateOperatingExpensesIdsForReview as updateFluxOperatingExpensesIdsForReview, updateSelectedSectionIdsForReview as updateFluxAnalysisSelectedSectionIdsForReview, reviewFluxAnalysisView, updateExpenseAutomationMissingReceiptUploadState, updateExpenseAutomationMissingReceiptsUIState, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, getExpenseAutomationFluxAnalysisView, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, updateFluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, saveExpenseAutomationReconciliationDetail, updateExpenseAutomationReconcileTabListScrollState, updateExpenseAutomationReconReviewTabListSortState, updateExpenseAutomationReconcileTabListSortState, updateExpenseAutomationReconcileTabLocalData, updateExpenseAutomationAccountReconciliationSelectedTab, updateExpenseAutomationAccountReconciliationSelectedAccountId, getExpenseAutomationReconciliationView, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, getAccountReconByAccountIdAndSelectedPeriod, toReconciliationTabsType, isAccountReconReport, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, toReconciliationAccountSource, deleteAccountStatement, uploadAccountStatement, updateStatementUploadChosen, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, };
418
419
  export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateSelectedCheckboxTransactionIds, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, toTransactionsSortKey, };
419
420
  export { TOP_EX_TIME_PERIODS };
420
421
  export { toTimeframeTick, mapTimePeriodtoTimeframeTick, toTimePeriod, toAbsoluteDay, toMonthYearPeriodId, convertToPeriod, };
@@ -504,6 +505,7 @@ export { ALL_COCKPIT_TABS_FILE_TYPES, ALL_COCKPIT_TABS_IDS, toCockpitTabsIDStric
504
505
  export { isAllowedValueWithCode, isAllowedValueWithID, };
505
506
  export { fetchCompanyPassportView, getCompanyPassportView, getCompanyPassportLocalStoreData, isCompanyPassportDataToBeSaved, companyPassportSaveDataInLocalStore, saveIndustryAndIncDateInCompanyPassportLocalStore, deleteCompanyOfficerInLocalStore, companyPassportClearDataInLocalStore, updateCompanyPassportLocalStoreData, saveCompanyPassportDetails, clearCompanyView, };
506
507
  export { toCompanyPassportLocalData, };
508
+ export { COMPANY_ONBOARDING_INDUSTRY_TYPE_CODES, COMPANY_ONBOARDING_SUB_INDUSTRY_CODES_BY_INDUSTRY, COMPANY_PURPOSE_OF_ACCOUNT_CODES, COMPANY_SOURCE_OF_FUNDS_CODES, COMPANY_TRANSACTION_VOLUME_CODES, COMPANY_US_NEXUS_TYPE_CODES, getCompanyOnboardingSubIndustryCodesForIndustry, };
507
509
  export { getUncategorizedAccounts, getNestedAccountListHierarchy, };
508
510
  export { getBankAccount };
509
511
  // TODO - remove alias and replace types across all repos
@@ -12,6 +12,12 @@ export const updateCompanyDetailsEpic = (actions$, state$, zeniAPI) => actions$.
12
12
  ...toCompanyIncInfoUpdatableInfoPayload(companyDetails.incInfo),
13
13
  ...toCompanyTaxInfoUpdatableInfoPayload(companyDetails.taxDetails),
14
14
  ...toCompanyFileInfoPayload(companyDetails.incInfo, companyDetails.taxDetails),
15
+ ...(companyDetails.companyInfo.companyIndustryType != null && {
16
+ company_industry_type: companyDetails.companyInfo.companyIndustryType,
17
+ }),
18
+ ...(companyDetails.companyInfo.companySubIndustry != null && {
19
+ company_industry_sub_type: companyDetails.companyInfo.companySubIndustry,
20
+ }),
15
21
  };
16
22
  const { newAddressState } = state$.value.addressViewState;
17
23
  const addressToCreate = newAddressState?.company_address?.addressToCreate;
@@ -10,9 +10,22 @@ export function toCompanyPassportLocalData(companyView, companyFiles) {
10
10
  website: companyInfo.companyUrl,
11
11
  meetingLink: companyInfo.meetingUrl,
12
12
  industry: companyQuestionaire.companyIndustry,
13
+ companyIndustryType: incInfo.companyIndustryType,
14
+ companySubIndustry: incInfo.companySubIndustry,
13
15
  businessModel: companyQuestionaire.companyBusinessModel ?? '',
14
16
  phone: companyInfo.phone ?? '',
15
17
  firstMonthOfFY: companyInfo.firstMonthOfFY,
18
+ companySourceOfFunds: companyInfo.companySourceOfFunds,
19
+ companySourceOfFundsDescription: companyInfo.companySourceOfFundsDescription,
20
+ countriesOfOperations: companyInfo.countriesOfOperations,
21
+ transactionVolume: companyInfo.transactionVolume,
22
+ transactionVolumeDescription: companyInfo.transactionVolumeDescription,
23
+ purposeOfAccount: companyInfo.purposeOfAccount,
24
+ purposeOfAccountDescription: companyInfo.purposeOfAccountDescription,
25
+ regulatedStatus: companyInfo.regulatedStatus,
26
+ regulatedStatusDescription: companyInfo.regulatedStatusDescription,
27
+ usNexus: companyInfo.usNexus,
28
+ usNexusTypes: companyInfo.usNexusTypes,
16
29
  },
17
30
  incInfo: {
18
31
  typeOfInc: incInfo.companyIncType ?? '',
@@ -1,16 +1,59 @@
1
- export const toCompanyUpdatableInfoPayload = (info) => {
2
- const payload = {
3
- name: info.companyName,
4
- company_legal_name: info.legalName,
5
- phone: info.phone,
6
- company_industry: info.industry,
7
- company_business_model: info.businessModel,
8
- company_url: info.website != null ? info.website.toString() : null,
9
- meeting_url: info.meetingLink != null ? info.meetingLink.toString() : null,
10
- is_new_company_industry_verified: true,
11
- };
12
- return payload;
1
+ /** Maps US nexus display label to API key (for company_us_nexus_desc) */
2
+ const US_NEXUS_LABEL_TO_KEY = {
3
+ Employees: 'employees',
4
+ Customers: 'customers',
5
+ 'Physical office or facility': 'physical_office',
6
+ 'Banking relationships': 'banking_relationships',
13
7
  };
8
+ function toUsNexusTypeKey(value) {
9
+ const key = US_NEXUS_LABEL_TO_KEY[value];
10
+ return key ?? value;
11
+ }
12
+ export const toCompanyUpdatableInfoPayload = (info) => ({
13
+ name: info.companyName,
14
+ company_legal_name: info.legalName,
15
+ phone: info.phone,
16
+ company_industry: info.industry,
17
+ company_business_model: info.businessModel,
18
+ company_url: info.website != null ? info.website.toString() : null,
19
+ meeting_url: info.meetingLink != null ? info.meetingLink.toString() : null,
20
+ is_new_company_industry_verified: true,
21
+ ...(info.companySourceOfFunds != null && {
22
+ company_source_of_funds: info.companySourceOfFunds,
23
+ }),
24
+ ...(info.companySourceOfFundsDescription != null && {
25
+ company_source_of_funds_desc: info.companySourceOfFundsDescription,
26
+ }),
27
+ ...(info.countriesOfOperations != null &&
28
+ info.countriesOfOperations.length > 0 && {
29
+ company_countries_of_operations: info.countriesOfOperations,
30
+ }),
31
+ ...(info.transactionVolume != null && {
32
+ company_transaction_vol_expectations: info.transactionVolume,
33
+ }),
34
+ ...(info.transactionVolumeDescription != null && {
35
+ company_transaction_vol_expectations_desc: info.transactionVolumeDescription,
36
+ }),
37
+ ...(info.purposeOfAccount != null && {
38
+ company_purpose_of_account: info.purposeOfAccount,
39
+ }),
40
+ ...(info.purposeOfAccountDescription != null && {
41
+ company_purpose_of_account_desc: info.purposeOfAccountDescription,
42
+ }),
43
+ ...(info.regulatedStatus != null && {
44
+ company_regulated_states: info.regulatedStatus === 'yes',
45
+ }),
46
+ ...(info.regulatedStatusDescription != null && {
47
+ company_regulated_states_desc: info.regulatedStatusDescription,
48
+ }),
49
+ ...(info.usNexus != null && {
50
+ company_us_nexus: info.usNexus === 'yes',
51
+ }),
52
+ ...(info.usNexusTypes != null &&
53
+ info.usNexusTypes.length > 0 && {
54
+ company_us_nexus_desc: info.usNexusTypes.map(toUsNexusTypeKey),
55
+ }),
56
+ });
14
57
  export const toCompanyIncInfoUpdatableInfoPayload = (info) => {
15
58
  const payload = {
16
59
  company_inc_type: info.typeOfInc,
@@ -4,15 +4,14 @@ import { convertToPeriod, toAbsoluteDay, } from '../../../../commonStateTypes/ti
4
4
  import { getCurrentTenant } from '../../../../entity/tenant/tenantSelector';
5
5
  import { backgroundRefetchReviewTab, syncTransactionCategorizationFromDetailSave, } from '../../reducers/transactionsViewReducer';
6
6
  export const triggerReviewTabRefetchEpic = (actions$, state$) => actions$.pipe(filter(syncTransactionCategorizationFromDetailSave.match), mergeMap((action) => {
7
- const { pendingReviewLineIds, transactionId, isUncategorizedExpenseCategoryEnabled } = action.payload;
7
+ const { pendingReviewLineIds, transactionId, isUncategorizedExpenseCategoryEnabled, } = action.payload;
8
8
  if (pendingReviewLineIds.length === 0) {
9
9
  return EMPTY;
10
10
  }
11
11
  const state = state$.value;
12
12
  // Only trigger when the transaction was auto-only (not in review tab after reducer ran)
13
13
  const reviewLocalData = state.expenseAutomationTransactionsViewState
14
- .transactionCategorizationView.review
15
- .transactionReviewLocalDataById[transactionId.id];
14
+ .transactionCategorizationView.review.transactionReviewLocalDataById[transactionId.id];
16
15
  if (reviewLocalData != null) {
17
16
  return EMPTY;
18
17
  }
@@ -0,0 +1,22 @@
1
+ import { from } from 'rxjs';
2
+ import { filter, mergeMap } from 'rxjs/operators';
3
+ import { getCurrentTenant } from '../../../../entity/tenant/tenantSelector';
4
+ import { updateTransaction } from '../../../../entity/transaction/transactionReducer';
5
+ import { fetchMonthEndCloseChecks } from '../../../monthEndCloseChecksView/monthEndCloseChecksViewReducer';
6
+ import { uploadTransactionCategorizationReceiptSuccess } from '../../reducers/transactionsViewReducer';
7
+ export const uploadTransactionReceiptSuccessEpic = (actions$, state$) => actions$.pipe(filter(uploadTransactionCategorizationReceiptSuccess.match), mergeMap((action) => {
8
+ const { transactionPayload, updateType } = action.payload;
9
+ const updateActions = [];
10
+ const currentTenant = getCurrentTenant(state$.value);
11
+ const selectedPeriodByTenantId = state$.value.expenseAutomationViewState.selectedPeriodByTenantId;
12
+ updateActions.push(updateTransaction(transactionPayload.transaction_id, transactionPayload, updateType));
13
+ if (currentTenant != null) {
14
+ const monthEndChecksPeriod = selectedPeriodByTenantId[currentTenant.tenantId];
15
+ updateActions.push(fetchMonthEndCloseChecks({
16
+ tenantId: currentTenant.tenantId,
17
+ period: monthEndChecksPeriod,
18
+ refreshViewInBackground: true,
19
+ }));
20
+ }
21
+ return from(updateActions);
22
+ }));
@@ -41,8 +41,8 @@ export const filterAutoTabLineItems = (tabView, transactionId, updatedTransactio
41
41
  if (localData == null) {
42
42
  return;
43
43
  }
44
- const currentAutoLineIds = localData.transactionReviewLocalData.tabSpecificLineItems
45
- .autoCategorized ?? [];
44
+ const currentAutoLineIds = localData.transactionReviewLocalData.tabSpecificLineItems.autoCategorized ??
45
+ [];
46
46
  const linesById = new Map(updatedTransaction.lines?.map((l) => [l.id, l]));
47
47
  const retainedLineIds = currentAutoLineIds.filter((lineId) => {
48
48
  const line = linesById.get(lineId);
@@ -36,6 +36,7 @@ export const initialTransactionTabViewState = {
36
36
  transactionIdsBySelectedPeriod: {},
37
37
  selectedCheckBoxTransactionIds: [],
38
38
  transactionIdsWithUnsavedData: [],
39
+ uploadReceiptStatusById: {},
39
40
  selectedTransactionId: undefined,
40
41
  selectedTransactionLineId: undefined,
41
42
  };
@@ -699,6 +700,24 @@ const expenseAutomationTransactionsView = createSlice({
699
700
  clearExpenseAutomationTransactionsView(draft) {
700
701
  Object.assign(draft, initialState);
701
702
  },
703
+ updateTransactionCategorizationUploadReceiptState: {
704
+ reducer(draft, action) {
705
+ const { transactionId, fetchStatus, selectedTab } = action.payload;
706
+ draft.transactionCategorizationView[selectedTab].uploadReceiptStatusById[transactionId] = fetchStatus;
707
+ },
708
+ prepare(selectedTab, transactionId, fetchStatus) {
709
+ return { payload: { selectedTab, transactionId, fetchStatus } };
710
+ },
711
+ },
712
+ uploadTransactionCategorizationReceiptSuccess: {
713
+ reducer(draft, action) {
714
+ const { transactionPayload, selectedTab } = action.payload;
715
+ draft.transactionCategorizationView[selectedTab].uploadReceiptStatusById[transactionPayload.transaction_id] = { fetchState: 'Completed', error: undefined };
716
+ },
717
+ prepare(selectedTab, transactionPayload, updateType = 'merge') {
718
+ return { payload: { selectedTab, transactionPayload, updateType } };
719
+ },
720
+ },
702
721
  syncTransactionCategorizationFromDetailSave: {
703
722
  prepare(transactionId, updatedTransaction, pendingReviewLineIds, uncategorizedIncomeExpense, isUncategorizedExpenseCategoryEnabled) {
704
723
  return {
@@ -770,5 +789,5 @@ const expenseAutomationTransactionsView = createSlice({
770
789
  },
771
790
  },
772
791
  });
773
- export const { fetchTransactionCategorization, updateTransactionCategorizationUIState, initializeTransactionCategorizationViewLocalData, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateStatusForTransactionNotMiscategorizedUpdateForCategorization, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, setAllItemsToCategoryClassInLocalDataForCategorization, updateTotalCountForTransactionCategorization, fetchTransactionCategorizationSuccess, resetOtherTabsFetchState, fetchTransactionCategorizationView, updateSelectedCheckboxTransactionIds, clearExpenseAutomationTransactionsViewPerTabView, clearExpenseAutomationTransactionsView, setEntityRecommendationForLineIdsForCategorization, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, } = expenseAutomationTransactionsView.actions;
792
+ export const { fetchTransactionCategorization, updateTransactionCategorizationUIState, initializeTransactionCategorizationViewLocalData, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateStatusForTransactionNotMiscategorizedUpdateForCategorization, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, setAllItemsToCategoryClassInLocalDataForCategorization, updateTotalCountForTransactionCategorization, fetchTransactionCategorizationSuccess, resetOtherTabsFetchState, fetchTransactionCategorizationView, updateSelectedCheckboxTransactionIds, clearExpenseAutomationTransactionsViewPerTabView, clearExpenseAutomationTransactionsView, setEntityRecommendationForLineIdsForCategorization, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, } = expenseAutomationTransactionsView.actions;
774
793
  export default expenseAutomationTransactionsView.reducer;
@@ -10,7 +10,7 @@ import { getAllSteps } from '../selectorTypes/expenseAutomationViewSelectorTypes
10
10
  export function getExpenseAutomationTransactionView(state) {
11
11
  const { accountState, classState, classListState, accountListState, expenseAutomationTransactionsViewState, expenseAutomationViewState, transactionState, monthEndCloseChecksState, } = state;
12
12
  const { selectedTransactionCategorizationTab } = expenseAutomationTransactionsViewState;
13
- const { uiState, refreshStatus, saveStatus, markAsNotMiscategorizedStatus, transactionIdsBySelectedPeriod, transactionReviewLocalDataById, selectedCheckBoxTransactionIds, transactionIdsWithUnsavedData, selectedTransactionId, selectedTransactionLineId, } = expenseAutomationTransactionsViewState.transactionCategorizationView[selectedTransactionCategorizationTab];
13
+ const { uiState, refreshStatus, saveStatus, markAsNotMiscategorizedStatus, transactionIdsBySelectedPeriod, transactionReviewLocalDataById, selectedCheckBoxTransactionIds, transactionIdsWithUnsavedData, uploadReceiptStatusById, selectedTransactionId, selectedTransactionLineId, } = expenseAutomationTransactionsViewState.transactionCategorizationView[selectedTransactionCategorizationTab];
14
14
  const uncategorizedIncomeExpense = getUncategorizedAccounts(accountState, accountListState, 'accountList');
15
15
  const accountList = getAccountList(accountState, accountListState, 'accountList');
16
16
  const classList = getClassList(classState, classListState);
@@ -94,6 +94,7 @@ export function getExpenseAutomationTransactionView(state) {
94
94
  completionStatus,
95
95
  totalCountByTab,
96
96
  fetchStateByTransactionTabs: fetchStateByTab,
97
+ uploadReceiptStatusById,
97
98
  selectedTransactionId,
98
99
  selectedTransactionLineId,
99
100
  };
@@ -218,17 +218,17 @@ export const onboardingStepsData = (isValidConnection, productSettings, accounti
218
218
  requiredStepsData: requiredStepsData.map((step) => toOnboardingStepType(step)),
219
219
  };
220
220
  };
221
- function isCompanyDetailsSavePending(fileState, company, primaryContact, companyDetailsLocalData) {
221
+ export function isCompanyDetailsSavePending(fileState, company, primaryContact, companyDetailsLocalData) {
222
222
  if (company == null || companyDetailsLocalData == null) {
223
223
  return false;
224
224
  }
225
225
  const { companyInfo, incInfo, taxInfo, questionaire } = company.company.company;
226
- const { companyDescription, companyLegalName, companyUrl, phone } = companyInfo;
227
- const { fileIds, companyIncDate: incDate, companyIncType } = incInfo;
226
+ const { companyDescription, companyLegalName, companyUrl, phone, companySourceOfFunds, companySourceOfFundsDescription, countriesOfOperations, transactionVolume, transactionVolumeDescription, purposeOfAccount, purposeOfAccountDescription, regulatedStatus, regulatedStatusDescription, usNexus, usNexusTypes, } = companyInfo;
227
+ const { fileIds, companyIncDate: incDate, companyIncState, companyIncType, companySubIndustry, } = incInfo;
228
228
  const { companyIndustry } = questionaire;
229
229
  const { taxId } = taxInfo;
230
230
  const companyFileIds = getFilesByFileIds(fileState, fileIds).map((file) => file.fileId);
231
- const { companyDescription: companyDescriptionLocalData, companyIndustry: companyIndustryLocalData, companyLegalName: companyLegalNameLocalData, taxIdOrEIN: taxIdLocalData, incDate: incDateLocalData, phone: companyPhoneLocalData, website: companyUrlLocalData, companyFiles: companyFilesLocalData, typeOfIncorporation: companyIncTypeLocalData, primaryContactLocalData, } = companyDetailsLocalData;
231
+ const { companyDescription: companyDescriptionLocalData, companyIndustry: companyIndustryLocalData, companyLegalName: companyLegalNameLocalData, taxIdOrEIN: taxIdLocalData, incDate: incDateLocalData, phone: companyPhoneLocalData, website: companyUrlLocalData, companyFiles: companyFilesLocalData, stateOfIncorporation: stateOfIncorporationLocalData, typeOfIncorporation: companyIncTypeLocalData, companySourceOfFunds: companySourceOfFundsLocalData, companySourceOfFundsDescription: companySourceOfFundsDescriptionLocalData, countriesOfOperations: countriesOfOperationsLocalData, companySubIndustry: companySubIndustryLocalData, transactionVolume: transactionVolumeLocalData, transactionVolumeDescription: transactionVolumeDescriptionLocalData, purposeOfAccount: purposeOfAccountLocalData, purposeOfAccountDescription: purposeOfAccountDescriptionLocalData, regulatedStatus: regulatedStatusLocalData, regulatedStatusDescription: regulatedStatusDescriptionLocalData, usNexus: usNexusLocalData, usNexusTypes: usNexusTypesLocalData, primaryContactLocalData, } = companyDetailsLocalData;
232
232
  const fileIdsLocalData = companyFilesLocalData.map((file) => file.fileId);
233
233
  if (primaryContact != null) {
234
234
  const { firstName, lastName, email } = primaryContact;
@@ -238,6 +238,10 @@ function isCompanyDetailsSavePending(fileState, company, primaryContact, company
238
238
  return true;
239
239
  }
240
240
  }
241
+ const countriesOfOperationsMatch = JSON.stringify(countriesOfOperations ?? []) ===
242
+ JSON.stringify(countriesOfOperationsLocalData ?? []);
243
+ const usNexusTypesMatch = JSON.stringify(usNexusTypes ?? []) ===
244
+ JSON.stringify(usNexusTypesLocalData ?? []);
241
245
  return (companyDescription != companyDescriptionLocalData ||
242
246
  companyIndustry != companyIndustryLocalData ||
243
247
  companyLegalName != companyLegalNameLocalData ||
@@ -245,7 +249,21 @@ function isCompanyDetailsSavePending(fileState, company, primaryContact, company
245
249
  incDate?.toString() != incDateLocalData?.toString() ||
246
250
  phone != companyPhoneLocalData ||
247
251
  companyUrl?.toString() != companyUrlLocalData?.toString() ||
252
+ companyIncState != stateOfIncorporationLocalData ||
253
+ companySourceOfFunds != companySourceOfFundsLocalData ||
254
+ companySourceOfFundsDescription !=
255
+ companySourceOfFundsDescriptionLocalData ||
256
+ !countriesOfOperationsMatch ||
248
257
  companyIncType != companyIncTypeLocalData ||
258
+ transactionVolume != transactionVolumeLocalData ||
259
+ transactionVolumeDescription != transactionVolumeDescriptionLocalData ||
260
+ purposeOfAccount != purposeOfAccountLocalData ||
261
+ purposeOfAccountDescription != purposeOfAccountDescriptionLocalData ||
262
+ regulatedStatus != regulatedStatusLocalData ||
263
+ regulatedStatusDescription != regulatedStatusDescriptionLocalData ||
264
+ usNexus != usNexusLocalData ||
265
+ !usNexusTypesMatch ||
266
+ companySubIndustry != companySubIndustryLocalData ||
249
267
  !(fileIdsLocalData.length === companyFileIds.length &&
250
268
  companyFileIds.every((fileId) => fileIdsLocalData.includes(fileId))));
251
269
  }
@@ -2,8 +2,8 @@ import { getChargeCardRepaymentByIds } from '../../../../entity/chargeCardRepaym
2
2
  import { getUsersByUserIds } from '../../../../entity/user/userSelector';
3
3
  import { applyPaymentHistoryFiltersSearchAndSort } from './chargeCardPaymentHistoryHelpers';
4
4
  export const getChargeCardPaymentHistoryDownloadReport = (state) => {
5
- const { chargeCardPaymentHistoryState, chargeCardRepaymentState, userState, } = state;
6
- const { filters, repaymentHistoryIds, searchText, uiState, fetchState, error, } = chargeCardPaymentHistoryState;
5
+ const { chargeCardPaymentHistoryState, chargeCardRepaymentState, userState } = state;
6
+ const { filters, repaymentHistoryIds, searchText, uiState, fetchState, error } = chargeCardPaymentHistoryState;
7
7
  const repaymentHistory = getChargeCardRepaymentByIds(chargeCardRepaymentState, repaymentHistoryIds);
8
8
  const repaymentHistoryUserIds = Array.from(new Set(repaymentHistory.map((r) => r.paidById)));
9
9
  const repaymentHistoryUsers = getUsersByUserIds(userState, repaymentHistoryUserIds);
@@ -1,9 +1,9 @@
1
1
  import { reduceAllFetchState } from '../../../../commonStateTypes/reduceFetchState';
2
2
  import { getChargeCardRepaymentByIds } from '../../../../entity/chargeCardRepayment/chargeCardRepaymentSelector';
3
- import { getUsersByUserIds } from '../../../../entity/user/userSelector';
4
- import { getAllFundingAccounts, mapDepositAccToFundingAccount, mapPaymentAccToFundingAccount, } from '../../commonSetup/setupViewSelector';
5
3
  import { getDepositAccountByDepositAccountId } from '../../../../entity/depositAccount/depositAccountSelector';
6
4
  import { getPaymentAccountByPaymentAccountId } from '../../../../entity/paymentAccount/paymentAccountSelector';
5
+ import { getUsersByUserIds } from '../../../../entity/user/userSelector';
6
+ import { getAllFundingAccounts, mapDepositAccToFundingAccount, mapPaymentAccToFundingAccount, } from '../../commonSetup/setupViewSelector';
7
7
  import { getAllDepositAccounts } from '../../zeniAccounts/depositAccountList/depositAccountListSelector';
8
8
  import { getAllPaymentAccounts } from '../../zeniAccounts/paymentAccountList/paymentAccountListSelector';
9
9
  import { applyPaymentHistoryFiltersSearchAndSort } from './chargeCardPaymentHistoryHelpers';
@@ -15,7 +15,10 @@ export const getChargeCardRepaymentDetail = (state) => {
15
15
  else {
16
16
  const depositFundingFromLimit = Object.values(depositAccountState.depositAccountLimitForChargeCardByID ?? {}).map(mapDepositAccountWithLimitToFundingAccount);
17
17
  const paymentFundingAccounts = getAllFundingAccounts([], paymentAccountsView.paymentAccounts, paymentAccountListState.paymentAccountBalanceFetchStatus);
18
- transferFromAccounts = [...depositFundingFromLimit, ...paymentFundingAccounts];
18
+ transferFromAccounts = [
19
+ ...depositFundingFromLimit,
20
+ ...paymentFundingAccounts,
21
+ ];
19
22
  }
20
23
  }
21
24
  const reducedFetchState = reduceAnyCompletedFetchState([
@@ -7,7 +7,8 @@ export const fetchChargeCardRepaymentDetailEpic = (actions$, state$) => actions$
7
7
  const fetchChargeCardRepaymentDetailActions = [];
8
8
  const state = state$.value;
9
9
  const depositAccounts = state.depositAccountListState;
10
- const willFetchDeposit = depositAccounts.fetchState !== 'In-Progress' && depositAccounts.fetchState !== 'Completed';
10
+ const willFetchDeposit = depositAccounts.fetchState !== 'In-Progress' &&
11
+ depositAccounts.fetchState !== 'Completed';
11
12
  if (willFetchDeposit) {
12
13
  fetchChargeCardRepaymentDetailActions.push(fetchDepositAccountList());
13
14
  }
@@ -9,8 +9,8 @@ import { getAllFundingAccounts } from '../../commonSetup/setupViewSelector';
9
9
  import { accountTypeSubConfigCodeToAccType } from '../../helpers';
10
10
  import { getAllDepositAccounts } from '../../zeniAccounts/depositAccountList/depositAccountListSelector';
11
11
  import { getAllPaymentAccounts } from '../../zeniAccounts/paymentAccountList/paymentAccountListSelector';
12
- import { addRepaymentToChargeCardPaymentHistory } from '../chargeCardPaymentHistory/chargeCardPaymentHistoryReducer';
13
12
  import { updateCreditAccountRepaymentAmountAndDate } from '../chargeCardList/chargeCardListReducer';
13
+ import { addRepaymentToChargeCardPaymentHistory } from '../chargeCardPaymentHistory/chargeCardPaymentHistoryReducer';
14
14
  import { initiateChargeCardRepayment, updateChargeCardRepaymentStatus, } from './chargeCardRepaymentDetailReducer';
15
15
  export const initiateChargeCardRepaymentEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(initiateChargeCardRepayment.match), switchMap((action) => {
16
16
  const state = state$.value;