@zeniai/client-epic-state 4.19.79 → 4.19.80

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 (45) hide show
  1. package/lib/entity/company/companyPayload.d.ts +12 -0
  2. package/lib/entity/company/companyPayload.js +20 -0
  3. package/lib/entity/company/companyStateTypes.d.ts +12 -0
  4. package/lib/esm/entity/chargeCardTransaction/chargeCardTransactionPayload.js +2 -2
  5. package/lib/esm/entity/company/companyPayload.js +20 -0
  6. package/lib/esm/index.js +5 -5
  7. package/lib/esm/view/companyView/epic/companyPassport/updateCompanyDetailsEpic.js +3 -0
  8. package/lib/esm/view/companyView/types/companyPassport/companyPassportLocalData.js +12 -0
  9. package/lib/esm/view/companyView/types/companyPassportViewPayload.js +55 -12
  10. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/triggerReviewTabRefetchEpic.js +2 -3
  11. package/lib/esm/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +2 -2
  12. package/lib/esm/view/onboardingView/customerView/onboardingCustomerViewSelector.js +22 -4
  13. package/lib/esm/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryDownloadSelector.js +2 -2
  14. package/lib/esm/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistorySelector.js +2 -2
  15. package/lib/esm/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailSelector.js +4 -1
  16. package/lib/esm/view/spendManagement/chargeCards/chargeCardRepaymentDetail/fetchChargeCardRepaymentDetailEpic.js +2 -1
  17. package/lib/esm/view/spendManagement/chargeCards/chargeCardRepaymentDetail/initiateChargeCardRepaymentEpic.js +1 -1
  18. package/lib/esm/view/spendManagement/commonSetup/epic/setup/updateBusinessVerificationDetailsEpic.js +64 -1
  19. package/lib/esm/view/spendManagement/commonSetup/epic/setup/updateSetupViewLocalStoreDataEpic.js +15 -2
  20. package/lib/esm/view/spendManagement/commonSetup/setupViewSelector.js +14 -1
  21. package/lib/index.d.ts +5 -5
  22. package/lib/index.js +13 -13
  23. package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
  24. package/lib/view/companyView/epic/companyPassport/updateCompanyDetailsEpic.js +3 -0
  25. package/lib/view/companyView/types/companyPassport/companyDetailsLocalData.d.ts +12 -0
  26. package/lib/view/companyView/types/companyPassport/companyPassportLocalData.js +12 -0
  27. package/lib/view/companyView/types/companyPassportViewPayload.d.ts +1 -1
  28. package/lib/view/companyView/types/companyPassportViewPayload.js +55 -12
  29. package/lib/view/expenseAutomationView/epics/transactionCategorization/triggerReviewTabRefetchEpic.js +2 -3
  30. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +2 -2
  31. package/lib/view/onboardingView/customerView/onboardingCustomerViewSelector.d.ts +1 -0
  32. package/lib/view/onboardingView/customerView/onboardingCustomerViewSelector.js +22 -3
  33. package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryDownloadSelector.js +2 -2
  34. package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistorySelector.js +2 -2
  35. package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailSelector.js +4 -1
  36. package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/fetchChargeCardRepaymentDetailEpic.js +2 -1
  37. package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/initiateChargeCardRepaymentEpic.d.ts +1 -1
  38. package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/initiateChargeCardRepaymentEpic.js +1 -1
  39. package/lib/view/spendManagement/commonSetup/epic/setup/updateBusinessVerificationDetailsEpic.js +64 -1
  40. package/lib/view/spendManagement/commonSetup/epic/setup/updateSetupViewLocalStoreDataEpic.js +15 -2
  41. package/lib/view/spendManagement/commonSetup/setupViewSelector.d.ts +13 -0
  42. package/lib/view/spendManagement/commonSetup/setupViewSelector.js +14 -1
  43. package/lib/view/spendManagement/commonSetup/setupViewState.d.ts +13 -0
  44. package/lib/view/spendManagement/commonSetup/types/businessVerification.d.ts +13 -0
  45. package/package.json +1 -1
@@ -15,6 +15,9 @@ const updateCompanyDetailsEpic = (actions$, state$, zeniAPI) => actions$.pipe((0
15
15
  ...(0, companyPassportViewPayload_1.toCompanyIncInfoUpdatableInfoPayload)(companyDetails.incInfo),
16
16
  ...(0, companyPassportViewPayload_1.toCompanyTaxInfoUpdatableInfoPayload)(companyDetails.taxDetails),
17
17
  ...(0, companyPassportViewPayload_1.toCompanyFileInfoPayload)(companyDetails.incInfo, companyDetails.taxDetails),
18
+ ...(companyDetails.companyInfo.companySubIndustry != null && {
19
+ company_industry_sub_type: companyDetails.companyInfo.companySubIndustry,
20
+ }),
18
21
  };
19
22
  const { newAddressState } = state$.value.addressViewState;
20
23
  const addressToCreate = newAddressState?.company_address?.addressToCreate;
@@ -8,8 +8,20 @@ export interface CompanyInfoLocalData {
8
8
  firstMonthOfFY: Month;
9
9
  legalName: string;
10
10
  phone: string;
11
+ companySourceOfFunds?: string;
12
+ companySourceOfFundsDescription?: string;
13
+ companySubIndustry?: string;
14
+ countriesOfOperations?: string[];
11
15
  industry?: string;
12
16
  meetingLink?: ZeniUrl;
17
+ purposeOfAccount?: string;
18
+ purposeOfAccountDescription?: string;
19
+ regulatedStatus?: string;
20
+ regulatedStatusDescription?: string;
21
+ transactionVolume?: string;
22
+ transactionVolumeDescription?: string;
23
+ usNexus?: string;
24
+ usNexusTypes?: string[];
13
25
  website?: ZeniUrl;
14
26
  }
15
27
  export interface IncInfoLocalData {
@@ -13,9 +13,21 @@ function toCompanyPassportLocalData(companyView, companyFiles) {
13
13
  website: companyInfo.companyUrl,
14
14
  meetingLink: companyInfo.meetingUrl,
15
15
  industry: companyQuestionaire.companyIndustry,
16
+ companySubIndustry: incInfo.companySubIndustry,
16
17
  businessModel: companyQuestionaire.companyBusinessModel ?? '',
17
18
  phone: companyInfo.phone ?? '',
18
19
  firstMonthOfFY: companyInfo.firstMonthOfFY,
20
+ companySourceOfFunds: companyInfo.companySourceOfFunds,
21
+ companySourceOfFundsDescription: companyInfo.companySourceOfFundsDescription,
22
+ countriesOfOperations: companyInfo.countriesOfOperations,
23
+ transactionVolume: companyInfo.transactionVolume,
24
+ transactionVolumeDescription: companyInfo.transactionVolumeDescription,
25
+ purposeOfAccount: companyInfo.purposeOfAccount,
26
+ purposeOfAccountDescription: companyInfo.purposeOfAccountDescription,
27
+ regulatedStatus: companyInfo.regulatedStatus,
28
+ regulatedStatusDescription: companyInfo.regulatedStatusDescription,
29
+ usNexus: companyInfo.usNexus,
30
+ usNexusTypes: companyInfo.usNexusTypes,
19
31
  },
20
32
  incInfo: {
21
33
  typeOfInc: incInfo.companyIncType ?? '',
@@ -2,7 +2,7 @@ import { ID } from '../../../commonStateTypes/common';
2
2
  import { CompanyConfigInfoPayload, CompanyIncInfoPayload, CompanyInfoPayload, CompanyQuestionairePayload, CompanyTaxInfoPayload } from '../../../entity/company/companyPayload';
3
3
  import { UserUpdatableInfo } from '../epic/companyPassport/updatePrimaryContactEpic';
4
4
  import { CompanyInfoLocalData, IncInfoLocalData, TaxDetailsLocalData } from './companyPassport/companyDetailsLocalData';
5
- interface CompanyInfoUpdatableInfoPayload extends Pick<CompanyInfoPayload, 'name' | 'company_url' | 'meeting_url' | 'company_legal_name' | 'phone'>, Pick<CompanyQuestionairePayload, 'company_industry' | 'company_business_model'>, Pick<CompanyConfigInfoPayload, 'is_new_company_industry_verified'> {
5
+ interface CompanyInfoUpdatableInfoPayload extends Pick<CompanyInfoPayload, 'name' | 'company_url' | 'meeting_url' | 'company_legal_name' | 'phone' | 'company_countries_of_operations' | 'company_source_of_funds' | 'company_source_of_funds_desc' | 'company_transaction_vol_expectations' | 'company_transaction_vol_expectations_desc' | 'company_purpose_of_account' | 'company_purpose_of_account_desc' | 'company_regulated_states' | 'company_regulated_states_desc' | 'company_us_nexus' | 'company_us_nexus_desc'>, Pick<CompanyQuestionairePayload, 'company_industry' | 'company_business_model'>, Pick<CompanyConfigInfoPayload, 'is_new_company_industry_verified'> {
6
6
  }
7
7
  type CompanyIncUpdatableInfoPayload = Pick<CompanyIncInfoPayload, 'company_inc_type' | 'company_inc_state' | 'company_inc_date'>;
8
8
  type CompanyTaxUpdatableInfoPayload = Omit<CompanyTaxInfoPayload, 'taxes_filed_date' | 'taxes_due_date'>;
@@ -1,19 +1,62 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.toUserUpdatableInfoPayload = exports.toCompanyFileInfoPayload = exports.toCompanyTaxInfoUpdatableInfoPayload = exports.toCompanyIncInfoUpdatableInfoPayload = exports.toCompanyUpdatableInfoPayload = void 0;
4
- const toCompanyUpdatableInfoPayload = (info) => {
5
- const payload = {
6
- name: info.companyName,
7
- company_legal_name: info.legalName,
8
- phone: info.phone,
9
- company_industry: info.industry,
10
- company_business_model: info.businessModel,
11
- company_url: info.website != null ? info.website.toString() : null,
12
- meeting_url: info.meetingLink != null ? info.meetingLink.toString() : null,
13
- is_new_company_industry_verified: true,
14
- };
15
- return payload;
4
+ /** Maps US nexus display label to API key (for company_us_nexus_desc) */
5
+ const US_NEXUS_LABEL_TO_KEY = {
6
+ Employees: 'employees',
7
+ Customers: 'customers',
8
+ 'Physical office or facility': 'physical_office',
9
+ 'Banking relationships': 'banking_relationships',
16
10
  };
11
+ function toUsNexusTypeKey(value) {
12
+ const key = US_NEXUS_LABEL_TO_KEY[value];
13
+ return key ?? value;
14
+ }
15
+ const toCompanyUpdatableInfoPayload = (info) => ({
16
+ name: info.companyName,
17
+ company_legal_name: info.legalName,
18
+ phone: info.phone,
19
+ company_industry: info.industry,
20
+ company_business_model: info.businessModel,
21
+ company_url: info.website != null ? info.website.toString() : null,
22
+ meeting_url: info.meetingLink != null ? info.meetingLink.toString() : null,
23
+ is_new_company_industry_verified: true,
24
+ ...(info.companySourceOfFunds != null && {
25
+ company_source_of_funds: info.companySourceOfFunds,
26
+ }),
27
+ ...(info.companySourceOfFundsDescription != null && {
28
+ company_source_of_funds_desc: info.companySourceOfFundsDescription,
29
+ }),
30
+ ...(info.countriesOfOperations != null &&
31
+ info.countriesOfOperations.length > 0 && {
32
+ company_countries_of_operations: info.countriesOfOperations,
33
+ }),
34
+ ...(info.transactionVolume != null && {
35
+ company_transaction_vol_expectations: info.transactionVolume,
36
+ }),
37
+ ...(info.transactionVolumeDescription != null && {
38
+ company_transaction_vol_expectations_desc: info.transactionVolumeDescription,
39
+ }),
40
+ ...(info.purposeOfAccount != null && {
41
+ company_purpose_of_account: info.purposeOfAccount,
42
+ }),
43
+ ...(info.purposeOfAccountDescription != null && {
44
+ company_purpose_of_account_desc: info.purposeOfAccountDescription,
45
+ }),
46
+ ...(info.regulatedStatus != null && {
47
+ company_regulated_states: info.regulatedStatus === 'yes',
48
+ }),
49
+ ...(info.regulatedStatusDescription != null && {
50
+ company_regulated_states_desc: info.regulatedStatusDescription,
51
+ }),
52
+ ...(info.usNexus != null && {
53
+ company_us_nexus: info.usNexus === 'yes',
54
+ }),
55
+ ...(info.usNexusTypes != null &&
56
+ info.usNexusTypes.length > 0 && {
57
+ company_us_nexus_desc: info.usNexusTypes.map(toUsNexusTypeKey),
58
+ }),
59
+ });
17
60
  exports.toCompanyUpdatableInfoPayload = toCompanyUpdatableInfoPayload;
18
61
  const toCompanyIncInfoUpdatableInfoPayload = (info) => {
19
62
  const payload = {
@@ -7,15 +7,14 @@ const timePeriod_1 = require("../../../../commonStateTypes/timePeriod");
7
7
  const tenantSelector_1 = require("../../../../entity/tenant/tenantSelector");
8
8
  const transactionsViewReducer_1 = require("../../reducers/transactionsViewReducer");
9
9
  const triggerReviewTabRefetchEpic = (actions$, state$) => actions$.pipe((0, operators_1.filter)(transactionsViewReducer_1.syncTransactionCategorizationFromDetailSave.match), (0, operators_1.mergeMap)((action) => {
10
- const { pendingReviewLineIds, transactionId, isUncategorizedExpenseCategoryEnabled } = action.payload;
10
+ const { pendingReviewLineIds, transactionId, isUncategorizedExpenseCategoryEnabled, } = action.payload;
11
11
  if (pendingReviewLineIds.length === 0) {
12
12
  return rxjs_1.EMPTY;
13
13
  }
14
14
  const state = state$.value;
15
15
  // Only trigger when the transaction was auto-only (not in review tab after reducer ran)
16
16
  const reviewLocalData = state.expenseAutomationTransactionsViewState
17
- .transactionCategorizationView.review
18
- .transactionReviewLocalDataById[transactionId.id];
17
+ .transactionCategorizationView.review.transactionReviewLocalDataById[transactionId.id];
19
18
  if (reviewLocalData != null) {
20
19
  return rxjs_1.EMPTY;
21
20
  }
@@ -46,8 +46,8 @@ const filterAutoTabLineItems = (tabView, transactionId, updatedTransaction) => {
46
46
  if (localData == null) {
47
47
  return;
48
48
  }
49
- const currentAutoLineIds = localData.transactionReviewLocalData.tabSpecificLineItems
50
- .autoCategorized ?? [];
49
+ const currentAutoLineIds = localData.transactionReviewLocalData.tabSpecificLineItems.autoCategorized ??
50
+ [];
51
51
  const linesById = new Map(updatedTransaction.lines?.map((l) => [l.id, l]));
52
52
  const retainedLineIds = currentAutoLineIds.filter((lineId) => {
53
53
  const line = linesById.get(lineId);
@@ -53,4 +53,5 @@ export declare const onboardingStepsData: (isValidConnection: boolean, productSe
53
53
  allStepsData: OnboardingStep[];
54
54
  requiredStepsData: OnboardingStep[];
55
55
  };
56
+ export declare function isCompanyDetailsSavePending(fileState: FileState, company?: CompanyView, primaryContact?: User, companyDetailsLocalData?: CompanyDetails): boolean;
56
57
  export declare const getProductSettingsString: (productSettings: TenantProductSettings | undefined) => string;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getProductSettingsString = exports.onboardingStepsData = void 0;
4
4
  exports.getOnboardingCustomerView = getOnboardingCustomerView;
5
5
  exports.isOfficerDetailsCompleted = isOfficerDetailsCompleted;
6
+ exports.isCompanyDetailsSavePending = isCompanyDetailsSavePending;
6
7
  const reduceFetchState_1 = require("../../../commonStateTypes/reduceFetchState");
7
8
  const fileSelector_1 = require("../../../entity/file/fileSelector");
8
9
  const paymentAccountSelector_1 = require("../../../entity/paymentAccount/paymentAccountSelector");
@@ -229,12 +230,12 @@ function isCompanyDetailsSavePending(fileState, company, primaryContact, company
229
230
  return false;
230
231
  }
231
232
  const { companyInfo, incInfo, taxInfo, questionaire } = company.company.company;
232
- const { companyDescription, companyLegalName, companyUrl, phone } = companyInfo;
233
- const { fileIds, companyIncDate: incDate, companyIncType } = incInfo;
233
+ const { companyDescription, companyLegalName, companyUrl, phone, companySourceOfFunds, companySourceOfFundsDescription, countriesOfOperations, transactionVolume, transactionVolumeDescription, purposeOfAccount, purposeOfAccountDescription, regulatedStatus, regulatedStatusDescription, usNexus, usNexusTypes, } = companyInfo;
234
+ const { fileIds, companyIncDate: incDate, companyIncState, companyIncType, companySubIndustry, } = incInfo;
234
235
  const { companyIndustry } = questionaire;
235
236
  const { taxId } = taxInfo;
236
237
  const companyFileIds = (0, fileSelector_1.getFilesByFileIds)(fileState, fileIds).map((file) => file.fileId);
237
- const { companyDescription: companyDescriptionLocalData, companyIndustry: companyIndustryLocalData, companyLegalName: companyLegalNameLocalData, taxIdOrEIN: taxIdLocalData, incDate: incDateLocalData, phone: companyPhoneLocalData, website: companyUrlLocalData, companyFiles: companyFilesLocalData, typeOfIncorporation: companyIncTypeLocalData, primaryContactLocalData, } = companyDetailsLocalData;
238
+ 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;
238
239
  const fileIdsLocalData = companyFilesLocalData.map((file) => file.fileId);
239
240
  if (primaryContact != null) {
240
241
  const { firstName, lastName, email } = primaryContact;
@@ -244,6 +245,10 @@ function isCompanyDetailsSavePending(fileState, company, primaryContact, company
244
245
  return true;
245
246
  }
246
247
  }
248
+ const countriesOfOperationsMatch = JSON.stringify(countriesOfOperations ?? []) ===
249
+ JSON.stringify(countriesOfOperationsLocalData ?? []);
250
+ const usNexusTypesMatch = JSON.stringify(usNexusTypes ?? []) ===
251
+ JSON.stringify(usNexusTypesLocalData ?? []);
247
252
  return (companyDescription != companyDescriptionLocalData ||
248
253
  companyIndustry != companyIndustryLocalData ||
249
254
  companyLegalName != companyLegalNameLocalData ||
@@ -251,7 +256,21 @@ function isCompanyDetailsSavePending(fileState, company, primaryContact, company
251
256
  incDate?.toString() != incDateLocalData?.toString() ||
252
257
  phone != companyPhoneLocalData ||
253
258
  companyUrl?.toString() != companyUrlLocalData?.toString() ||
259
+ companyIncState != stateOfIncorporationLocalData ||
260
+ companySourceOfFunds != companySourceOfFundsLocalData ||
261
+ companySourceOfFundsDescription !=
262
+ companySourceOfFundsDescriptionLocalData ||
263
+ !countriesOfOperationsMatch ||
254
264
  companyIncType != companyIncTypeLocalData ||
265
+ transactionVolume != transactionVolumeLocalData ||
266
+ transactionVolumeDescription != transactionVolumeDescriptionLocalData ||
267
+ purposeOfAccount != purposeOfAccountLocalData ||
268
+ purposeOfAccountDescription != purposeOfAccountDescriptionLocalData ||
269
+ regulatedStatus != regulatedStatusLocalData ||
270
+ regulatedStatusDescription != regulatedStatusDescriptionLocalData ||
271
+ usNexus != usNexusLocalData ||
272
+ !usNexusTypesMatch ||
273
+ companySubIndustry != companySubIndustryLocalData ||
255
274
  !(fileIdsLocalData.length === companyFileIds.length &&
256
275
  companyFileIds.every((fileId) => fileIdsLocalData.includes(fileId))));
257
276
  }
@@ -5,8 +5,8 @@ const chargeCardRepaymentSelector_1 = require("../../../../entity/chargeCardRepa
5
5
  const userSelector_1 = require("../../../../entity/user/userSelector");
6
6
  const chargeCardPaymentHistoryHelpers_1 = require("./chargeCardPaymentHistoryHelpers");
7
7
  const getChargeCardPaymentHistoryDownloadReport = (state) => {
8
- const { chargeCardPaymentHistoryState, chargeCardRepaymentState, userState, } = state;
9
- const { filters, repaymentHistoryIds, searchText, uiState, fetchState, error, } = chargeCardPaymentHistoryState;
8
+ const { chargeCardPaymentHistoryState, chargeCardRepaymentState, userState } = state;
9
+ const { filters, repaymentHistoryIds, searchText, uiState, fetchState, error } = chargeCardPaymentHistoryState;
10
10
  const repaymentHistory = (0, chargeCardRepaymentSelector_1.getChargeCardRepaymentByIds)(chargeCardRepaymentState, repaymentHistoryIds);
11
11
  const repaymentHistoryUserIds = Array.from(new Set(repaymentHistory.map((r) => r.paidById)));
12
12
  const repaymentHistoryUsers = (0, userSelector_1.getUsersByUserIds)(userState, repaymentHistoryUserIds);
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getChargeCardPaymentHistoryView = void 0;
4
4
  const reduceFetchState_1 = require("../../../../commonStateTypes/reduceFetchState");
5
5
  const chargeCardRepaymentSelector_1 = require("../../../../entity/chargeCardRepayment/chargeCardRepaymentSelector");
6
- const userSelector_1 = require("../../../../entity/user/userSelector");
7
- const setupViewSelector_1 = require("../../commonSetup/setupViewSelector");
8
6
  const depositAccountSelector_1 = require("../../../../entity/depositAccount/depositAccountSelector");
9
7
  const paymentAccountSelector_1 = require("../../../../entity/paymentAccount/paymentAccountSelector");
8
+ const userSelector_1 = require("../../../../entity/user/userSelector");
9
+ const setupViewSelector_1 = require("../../commonSetup/setupViewSelector");
10
10
  const depositAccountListSelector_1 = require("../../zeniAccounts/depositAccountList/depositAccountListSelector");
11
11
  const paymentAccountListSelector_1 = require("../../zeniAccounts/paymentAccountList/paymentAccountListSelector");
12
12
  const chargeCardPaymentHistoryHelpers_1 = require("./chargeCardPaymentHistoryHelpers");
@@ -18,7 +18,10 @@ const getChargeCardRepaymentDetail = (state) => {
18
18
  else {
19
19
  const depositFundingFromLimit = Object.values(depositAccountState.depositAccountLimitForChargeCardByID ?? {}).map(setupViewSelector_1.mapDepositAccountWithLimitToFundingAccount);
20
20
  const paymentFundingAccounts = (0, setupViewSelector_1.getAllFundingAccounts)([], paymentAccountsView.paymentAccounts, paymentAccountListState.paymentAccountBalanceFetchStatus);
21
- transferFromAccounts = [...depositFundingFromLimit, ...paymentFundingAccounts];
21
+ transferFromAccounts = [
22
+ ...depositFundingFromLimit,
23
+ ...paymentFundingAccounts,
24
+ ];
22
25
  }
23
26
  }
24
27
  const reducedFetchState = (0, reduceFetchState_1.reduceAnyCompletedFetchState)([
@@ -10,7 +10,8 @@ const fetchChargeCardRepaymentDetailEpic = (actions$, state$) => actions$.pipe((
10
10
  const fetchChargeCardRepaymentDetailActions = [];
11
11
  const state = state$.value;
12
12
  const depositAccounts = state.depositAccountListState;
13
- const willFetchDeposit = depositAccounts.fetchState !== 'In-Progress' && depositAccounts.fetchState !== 'Completed';
13
+ const willFetchDeposit = depositAccounts.fetchState !== 'In-Progress' &&
14
+ depositAccounts.fetchState !== 'Completed';
14
15
  if (willFetchDeposit) {
15
16
  fetchChargeCardRepaymentDetailActions.push((0, depositAccountListReducer_1.fetchDepositAccountList)());
16
17
  }
@@ -4,8 +4,8 @@ import { updateChargeCardRepayment } from '../../../../entity/chargeCardRepaymen
4
4
  import { updateCompanyPrimaryAccount, updateEnableAutoPayForChargeCard } from '../../../../entity/company/companyReducer';
5
5
  import { RootState } from '../../../../reducer';
6
6
  import { ZeniAPI } from '../../../../zeniAPI';
7
- import { addRepaymentToChargeCardPaymentHistory } from '../chargeCardPaymentHistory/chargeCardPaymentHistoryReducer';
8
7
  import { updateCreditAccountRepaymentAmountAndDate } from '../chargeCardList/chargeCardListReducer';
8
+ import { addRepaymentToChargeCardPaymentHistory } from '../chargeCardPaymentHistory/chargeCardPaymentHistoryReducer';
9
9
  import { initiateChargeCardRepayment, updateChargeCardRepaymentStatus } from './chargeCardRepaymentDetailReducer';
10
10
  export type ActionType = ReturnType<typeof addRepaymentToChargeCardPaymentHistory> | ReturnType<typeof initiateChargeCardRepayment> | ReturnType<typeof updateChargeCardRepayment> | ReturnType<typeof updateCreditAccountRepaymentAmountAndDate> | ReturnType<typeof updateChargeCardRepaymentStatus> | ReturnType<typeof updateCompanyPrimaryAccount> | ReturnType<typeof updateEnableAutoPayForChargeCard>;
11
11
  export declare const initiateChargeCardRepaymentEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -12,8 +12,8 @@ const setupViewSelector_1 = require("../../commonSetup/setupViewSelector");
12
12
  const helpers_1 = require("../../helpers");
13
13
  const depositAccountListSelector_1 = require("../../zeniAccounts/depositAccountList/depositAccountListSelector");
14
14
  const paymentAccountListSelector_1 = require("../../zeniAccounts/paymentAccountList/paymentAccountListSelector");
15
- const chargeCardPaymentHistoryReducer_1 = require("../chargeCardPaymentHistory/chargeCardPaymentHistoryReducer");
16
15
  const chargeCardListReducer_1 = require("../chargeCardList/chargeCardListReducer");
16
+ const chargeCardPaymentHistoryReducer_1 = require("../chargeCardPaymentHistory/chargeCardPaymentHistoryReducer");
17
17
  const chargeCardRepaymentDetailReducer_1 = require("./chargeCardRepaymentDetailReducer");
18
18
  const initiateChargeCardRepaymentEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(chargeCardRepaymentDetailReducer_1.initiateChargeCardRepayment.match), (0, operators_1.switchMap)((action) => {
19
19
  const state = state$.value;
@@ -122,8 +122,28 @@ const updateBusinessVerificationDetailsEpic = (actions$, state$, zeniAPI) => act
122
122
  }
123
123
  }));
124
124
  exports.updateBusinessVerificationDetailsEpic = updateBusinessVerificationDetailsEpic;
125
+ /** US Nexus API keys. Form may submit these or display labels; we send keys to API. */
126
+ const US_NEXUS_KEYS = new Set([
127
+ 'employees',
128
+ 'customers',
129
+ 'physical_office',
130
+ 'banking_relationships',
131
+ ]);
132
+ /** Maps display label → API key for US nexus types (English labels from strings). */
133
+ const US_NEXUS_LABEL_TO_KEY = {
134
+ Employees: 'employees',
135
+ Customers: 'customers',
136
+ 'Physical office or facility': 'physical_office',
137
+ 'Banking relationships': 'banking_relationships',
138
+ };
139
+ function toUsNexusTypeKey(value) {
140
+ if (US_NEXUS_KEYS.has(value)) {
141
+ return value;
142
+ }
143
+ return US_NEXUS_LABEL_TO_KEY[value] ?? value;
144
+ }
125
145
  const toBusinessVerificationCompanyDataPayload = (companyLocalData, sendForVerification, companyAddressData, registeredAddressData, setupViewType) => {
126
- const { companyDescription, companyLegalName, companyIndustry, website, incDate, taxIdOrEIN, phone, syncToken, fileIds, typeOfIncorporation, sourceOfFunds, } = companyLocalData;
146
+ const { companyDescription, companyLegalName, companyIndustry, companySubIndustry, countriesOfOperations, companySourceOfFunds, companySourceOfFundsDescription, transactionVolume, transactionVolumeDescription, purposeOfAccount, purposeOfAccountDescription, regulatedStatus, regulatedStatusDescription, usNexus, usNexusTypes, website, incDate, taxIdOrEIN, phone, syncToken, fileIds, typeOfIncorporation, stateOfIncorporation, sourceOfFunds, } = companyLocalData;
127
147
  const company = {
128
148
  is_ready_for_verification: sendForVerification,
129
149
  file_ids: fileIds,
@@ -174,9 +194,52 @@ const toBusinessVerificationCompanyDataPayload = (companyLocalData, sendForVerif
174
194
  if (typeOfIncorporation != null) {
175
195
  company['company_inc_type'] = typeOfIncorporation;
176
196
  }
197
+ if (stateOfIncorporation != null) {
198
+ company['company_inc_state'] = stateOfIncorporation;
199
+ }
177
200
  if (companyIndustry != null) {
178
201
  company['company_industry'] = companyIndustry;
179
202
  }
203
+ Object.assign(company, {
204
+ ...(companySubIndustry != null && {
205
+ company_industry_sub_type: companySubIndustry,
206
+ }),
207
+ ...(countriesOfOperations != null &&
208
+ countriesOfOperations.length > 0 && {
209
+ company_countries_of_operations: countriesOfOperations,
210
+ }),
211
+ ...(companySourceOfFunds != null && {
212
+ company_source_of_funds: companySourceOfFunds,
213
+ }),
214
+ ...(companySourceOfFundsDescription != null && {
215
+ company_source_of_funds_desc: companySourceOfFundsDescription,
216
+ }),
217
+ ...(transactionVolume != null && {
218
+ company_transaction_vol_expectations: transactionVolume,
219
+ }),
220
+ ...(transactionVolumeDescription != null && {
221
+ company_transaction_vol_expectations_desc: transactionVolumeDescription,
222
+ }),
223
+ ...(purposeOfAccount != null && {
224
+ company_purpose_of_account: purposeOfAccount,
225
+ }),
226
+ ...(purposeOfAccountDescription != null && {
227
+ company_purpose_of_account_desc: purposeOfAccountDescription,
228
+ }),
229
+ ...(regulatedStatus != null && {
230
+ company_regulated_states: regulatedStatus === 'yes',
231
+ }),
232
+ ...(regulatedStatusDescription != null && {
233
+ company_regulated_states_desc: regulatedStatusDescription,
234
+ }),
235
+ ...(usNexus != null && {
236
+ company_us_nexus: usNexus === 'yes',
237
+ }),
238
+ ...(usNexusTypes != null &&
239
+ usNexusTypes.length > 0 && {
240
+ company_us_nexus_desc: usNexusTypes.map(toUsNexusTypeKey),
241
+ }),
242
+ });
180
243
  if (setupViewType === 'zeni_treasury' && sourceOfFunds != null) {
181
244
  company['source_of_funds'] = sourceOfFunds;
182
245
  }
@@ -51,9 +51,9 @@ exports.updateSetupViewLocalStoreDataEpic = updateSetupViewLocalStoreDataEpic;
51
51
  */
52
52
  function toSetupViewLocalData(company, users, userRoles, primaryContact) {
53
53
  const { companyInfo, incInfo, taxInfo, questionaire, companyBillPayInfo } = company;
54
- const { companyId, companyDescription, companyLegalName, companyUrl, phone, syncToken, sourceOfFunds, } = companyInfo;
54
+ const { companyId, companyDescription, companyLegalName, companyUrl, phone, syncToken, sourceOfFunds, companySourceOfFunds: incCompanySourceOfFunds, companySourceOfFundsDescription, countriesOfOperations, transactionVolume, transactionVolumeDescription, purposeOfAccount, purposeOfAccountDescription, regulatedStatus, regulatedStatusDescription, usNexus, usNexusTypes, } = companyInfo;
55
55
  const { usersSelectedForVerification: usersSelected } = companyBillPayInfo;
56
- const { fileIds, companyIncDate: incDate, companyIncType } = incInfo;
56
+ const { fileIds, companyIncDate: incDate, companyIncType, companyIncState, companySubIndustry, } = incInfo;
57
57
  const { companyIndustry } = questionaire;
58
58
  const { taxId } = taxInfo;
59
59
  const companyDetails = {
@@ -61,6 +61,10 @@ function toSetupViewLocalData(company, users, userRoles, primaryContact) {
61
61
  companyDescription,
62
62
  companyIndustry,
63
63
  companyLegalName,
64
+ companySubIndustry,
65
+ companySourceOfFunds: incCompanySourceOfFunds,
66
+ companySourceOfFundsDescription,
67
+ countriesOfOperations,
64
68
  taxIdOrEIN: taxId,
65
69
  incDate,
66
70
  phone,
@@ -69,6 +73,15 @@ function toSetupViewLocalData(company, users, userRoles, primaryContact) {
69
73
  syncToken,
70
74
  typeOfIncorporation: companyIncType,
71
75
  sourceOfFunds,
76
+ stateOfIncorporation: companyIncState,
77
+ transactionVolume,
78
+ transactionVolumeDescription,
79
+ purposeOfAccount,
80
+ purposeOfAccountDescription,
81
+ regulatedStatus,
82
+ regulatedStatusDescription,
83
+ usNexus,
84
+ usNexusTypes,
72
85
  };
73
86
  let primaryContactDetails = undefined;
74
87
  if (primaryContact != null) {
@@ -70,14 +70,27 @@ export interface CompanyDetails {
70
70
  companyDescription?: string;
71
71
  companyIndustry?: string;
72
72
  companyLegalName?: string;
73
+ companySourceOfFunds?: string;
74
+ companySourceOfFundsDescription?: string;
75
+ companySubIndustry?: string;
76
+ countriesOfOperations?: string[];
73
77
  incDate?: ZeniDate;
74
78
  phone?: string;
75
79
  primaryContactLocalData?: PrimaryContactLocalData;
80
+ purposeOfAccount?: string;
81
+ purposeOfAccountDescription?: string;
76
82
  registeredAddressStatus?: NewAddressData;
83
+ regulatedStatus?: string;
84
+ regulatedStatusDescription?: string;
77
85
  sourceOfFunds?: string;
86
+ stateOfIncorporation?: string;
78
87
  syncToken?: string;
79
88
  taxIdOrEIN?: string;
89
+ transactionVolume?: string;
90
+ transactionVolumeDescription?: string;
80
91
  typeOfIncorporation?: string;
92
+ usNexus?: string;
93
+ usNexusTypes?: string[];
81
94
  website?: ZeniUrl;
82
95
  }
83
96
  interface CompanyAndOfficerLocalData {
@@ -114,7 +114,7 @@ const getCompanyAndIdentityDetails = (state, companyId, companyAndIdentityDetail
114
114
  if (companyDetails.localData != null) {
115
115
  const deleteFileStatusById = {};
116
116
  const updateFileStatusById = {};
117
- const { syncToken, companyDescription, companyLegalName, website, companyIndustry, phone, taxIdOrEIN, incDate, fileIds, typeOfIncorporation, sourceOfFunds, } = companyDetails.localData;
117
+ const { syncToken, companyDescription, companyLegalName, website, companyIndustry, companySubIndustry, companySourceOfFunds, companySourceOfFundsDescription, countriesOfOperations, phone, taxIdOrEIN, incDate, fileIds, typeOfIncorporation, sourceOfFunds, transactionVolume, transactionVolumeDescription, purposeOfAccount, purposeOfAccountDescription, regulatedStatus, regulatedStatusDescription, stateOfIncorporation, usNexus, usNexusTypes, } = companyDetails.localData;
118
118
  fileIds.forEach((fileId) => {
119
119
  deleteFileStatusById[fileId] = (0, fileViewSelector_1.getFileDeleteStatusById)(state, fileId);
120
120
  });
@@ -128,6 +128,10 @@ const getCompanyAndIdentityDetails = (state, companyId, companyAndIdentityDetail
128
128
  companyDescription,
129
129
  companyLegalName,
130
130
  companyIndustry,
131
+ companySubIndustry,
132
+ companySourceOfFunds,
133
+ companySourceOfFundsDescription,
134
+ countriesOfOperations,
131
135
  website,
132
136
  phone,
133
137
  taxIdOrEIN,
@@ -141,6 +145,15 @@ const getCompanyAndIdentityDetails = (state, companyId, companyAndIdentityDetail
141
145
  primaryContactLocalData,
142
146
  typeOfIncorporation,
143
147
  sourceOfFunds,
148
+ transactionVolume,
149
+ transactionVolumeDescription,
150
+ purposeOfAccount,
151
+ purposeOfAccountDescription,
152
+ regulatedStatus,
153
+ regulatedStatusDescription,
154
+ stateOfIncorporation,
155
+ usNexus,
156
+ usNexusTypes,
144
157
  };
145
158
  }
146
159
  const companyOfficerLocalData = {
@@ -17,12 +17,25 @@ export interface CompanyDetailsLocalData {
17
17
  companyDescription?: string;
18
18
  companyIndustry?: string;
19
19
  companyLegalName?: string;
20
+ companySourceOfFunds?: string;
21
+ companySourceOfFundsDescription?: string;
22
+ companySubIndustry?: string;
23
+ countriesOfOperations?: string[];
20
24
  incDate?: ZeniDate;
21
25
  phone?: string;
26
+ purposeOfAccount?: string;
27
+ purposeOfAccountDescription?: string;
28
+ regulatedStatus?: string;
29
+ regulatedStatusDescription?: string;
22
30
  sourceOfFunds?: string;
31
+ stateOfIncorporation?: string;
23
32
  syncToken?: string;
24
33
  taxIdOrEIN?: string;
34
+ transactionVolume?: string;
35
+ transactionVolumeDescription?: string;
25
36
  typeOfIncorporation?: string;
37
+ usNexus?: string;
38
+ usNexusTypes?: string[];
26
39
  website?: ZeniUrl;
27
40
  }
28
41
  export interface PrimaryContactLocalData {
@@ -63,6 +63,19 @@ export interface CompanyDetailsVerificationPayload {
63
63
  source_of_funds: string;
64
64
  sync_token: string;
65
65
  tax_id: string;
66
+ company_countries_of_operations?: string[];
67
+ company_inc_state?: string | null;
68
+ company_industry_sub_type?: string;
69
+ company_purpose_of_account?: string;
70
+ company_purpose_of_account_desc?: string;
71
+ company_regulated_states?: boolean;
72
+ company_regulated_states_desc?: string;
73
+ company_source_of_funds?: string;
74
+ company_source_of_funds_desc?: string;
75
+ company_transaction_vol_expectations?: string;
76
+ company_transaction_vol_expectations_desc?: string;
77
+ company_us_nexus?: boolean;
78
+ company_us_nexus_desc?: string[];
66
79
  subscription_billing_address?: AddressUpdatableInfoPayload;
67
80
  }
68
81
  export interface BusinessVerificationDataPayload {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeniai/client-epic-state",
3
- "version": "4.19.79",
3
+ "version": "4.19.80",
4
4
  "description": "Shared module between Web & Mobile containing required abstractions for state management, async network communication. ",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib/esm/index.js",