@zeniai/client-epic-state 5.1.68-beta0GS → 5.1.68-beta0RR

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 (60) hide show
  1. package/lib/commonPayloadTypes/commonPayload.d.ts +25 -4
  2. package/lib/entity/tenant/clearAllEpic.d.ts +1 -2
  3. package/lib/entity/tenant/clearAllEpic.js +0 -2
  4. package/lib/epic.d.ts +1 -3
  5. package/lib/epic.js +1 -3
  6. package/lib/esm/entity/tenant/clearAllEpic.js +0 -2
  7. package/lib/esm/epic.js +1 -3
  8. package/lib/esm/index.js +8 -6
  9. package/lib/esm/reducer.js +0 -3
  10. package/lib/esm/view/spendManagement/billPay/internationalWireVerification/epics/fetchIntlVerificationFormEpic.js +7 -3
  11. package/lib/esm/view/spendManagement/billPay/internationalWireVerification/epics/initializeIntlVerificationFormEpic.js +56 -34
  12. package/lib/esm/view/spendManagement/billPay/internationalWireVerification/epics/submitIntlVerificationEpic.js +2 -7
  13. package/lib/esm/view/spendManagement/billPay/internationalWireVerification/internationalWireOnboardingDetailsToLocalData.js +164 -0
  14. package/lib/esm/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationFieldConstants.js +45 -0
  15. package/lib/esm/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationLocalDataHelpers.js +105 -0
  16. package/lib/esm/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationPayload.js +55 -8
  17. package/lib/esm/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationReducer.js +23 -7
  18. package/lib/esm/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationSelector.js +39 -15
  19. package/lib/esm/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationSubmitPayload.js +189 -0
  20. package/lib/index.d.ts +10 -9
  21. package/lib/index.js +63 -53
  22. package/lib/reducer.d.ts +0 -3
  23. package/lib/reducer.js +0 -3
  24. package/lib/view/spendManagement/billPay/internationalWireVerification/epics/fetchIntlVerificationFormEpic.d.ts +3 -3
  25. package/lib/view/spendManagement/billPay/internationalWireVerification/epics/fetchIntlVerificationFormEpic.js +6 -2
  26. package/lib/view/spendManagement/billPay/internationalWireVerification/epics/initializeIntlVerificationFormEpic.d.ts +2 -1
  27. package/lib/view/spendManagement/billPay/internationalWireVerification/epics/initializeIntlVerificationFormEpic.js +55 -33
  28. package/lib/view/spendManagement/billPay/internationalWireVerification/epics/submitIntlVerificationEpic.js +2 -7
  29. package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireOnboardingDetailsToLocalData.d.ts +4 -0
  30. package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireOnboardingDetailsToLocalData.js +168 -0
  31. package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationFieldConstants.d.ts +43 -0
  32. package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationFieldConstants.js +48 -0
  33. package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationLocalDataHelpers.d.ts +29 -0
  34. package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationLocalDataHelpers.js +115 -0
  35. package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationPayload.d.ts +24 -1
  36. package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationPayload.js +59 -9
  37. package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationReducer.js +22 -6
  38. package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationSelector.js +39 -15
  39. package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationState.d.ts +20 -1
  40. package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationSubmitPayload.d.ts +32 -0
  41. package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationSubmitPayload.js +194 -0
  42. package/package.json +1 -1
  43. package/lib/esm/view/settings/jeScheduleApprovalRules/epic/fetchJEScheduleApprovalRulesEpic.js +0 -21
  44. package/lib/esm/view/settings/jeScheduleApprovalRules/epic/saveJEScheduleApprovalRulesEpic.js +0 -20
  45. package/lib/esm/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesPayload.js +0 -1
  46. package/lib/esm/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesReducer.js +0 -76
  47. package/lib/esm/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesSelector.js +0 -9
  48. package/lib/esm/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesState.js +0 -1
  49. package/lib/view/settings/jeScheduleApprovalRules/epic/fetchJEScheduleApprovalRulesEpic.d.ts +0 -7
  50. package/lib/view/settings/jeScheduleApprovalRules/epic/fetchJEScheduleApprovalRulesEpic.js +0 -25
  51. package/lib/view/settings/jeScheduleApprovalRules/epic/saveJEScheduleApprovalRulesEpic.d.ts +0 -6
  52. package/lib/view/settings/jeScheduleApprovalRules/epic/saveJEScheduleApprovalRulesEpic.js +0 -24
  53. package/lib/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesPayload.d.ts +0 -29
  54. package/lib/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesPayload.js +0 -2
  55. package/lib/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesReducer.d.ts +0 -16
  56. package/lib/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesReducer.js +0 -80
  57. package/lib/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesSelector.d.ts +0 -12
  58. package/lib/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesSelector.js +0 -12
  59. package/lib/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesState.d.ts +0 -8
  60. package/lib/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesState.js +0 -2
@@ -0,0 +1,105 @@
1
+ import { InternationalWireVerificationFormFieldNames, InternationalWireVerificationReadonlyVisibilityGateFieldName, InternationalWireVerificationSubfieldNames, } from './internationalWireVerificationFieldConstants';
2
+ import { IntlWireVerificationLocalDataSuffix } from './internationalWireVerificationSubmitPayload';
3
+ export const isIntlWireFileOptionLike = (value) => typeof value === 'object' &&
4
+ value != null &&
5
+ 'file_id' in value &&
6
+ typeof value.file_id === 'string';
7
+ export const isIntlWirePersonLike = (value) => {
8
+ if (typeof value !== 'object' || value == null || Array.isArray(value)) {
9
+ return false;
10
+ }
11
+ const person = value;
12
+ return (person.name != null ||
13
+ person.email != null ||
14
+ person.nationality != null ||
15
+ person.company_role != null ||
16
+ person.ssn != null ||
17
+ person.date_of_birth != null ||
18
+ person.ownership_percentage != null ||
19
+ person.proof_of_identity != null ||
20
+ person.proof_of_address != null);
21
+ };
22
+ export const toIntlWireFileOptionArray = (items) => items.filter(isIntlWireFileOptionLike);
23
+ export const appendIntlWireFileOptionsToLocalData = (localData, baseKey, fileOptions, options) => {
24
+ const includeBack = options?.includeBack ?? true;
25
+ const [front, back] = fileOptions;
26
+ if (front?.file_id != null && front.file_id !== '') {
27
+ localData[baseKey] = front.file_id;
28
+ if (front.option != null && front.option !== '') {
29
+ localData[`${baseKey}${IntlWireVerificationLocalDataSuffix.documentOption}`] = front.option;
30
+ }
31
+ }
32
+ const backKey = `${baseKey}${IntlWireVerificationLocalDataSuffix.documentBack}`;
33
+ if (includeBack && back?.file_id != null && back.file_id !== '') {
34
+ localData[backKey] = back.file_id;
35
+ }
36
+ else {
37
+ // Clear any stale back-file id so a shallow merge does not retain a proof
38
+ // document that is no longer present on the re-applied record.
39
+ delete localData[backKey];
40
+ }
41
+ };
42
+ export const appendIntlWirePersonToLocalData = (localData, keyPrefix, person) => {
43
+ const nameBaseKey = `${keyPrefix}_${InternationalWireVerificationSubfieldNames.name}`;
44
+ if (person.name?.first_name != null) {
45
+ localData[`${nameBaseKey}${IntlWireVerificationLocalDataSuffix.nameFirst}`] = person.name.first_name;
46
+ }
47
+ if (person.name?.last_name != null) {
48
+ localData[`${nameBaseKey}${IntlWireVerificationLocalDataSuffix.nameLast}`] = person.name.last_name;
49
+ }
50
+ const assignStringField = (subfieldName, fieldValue) => {
51
+ if (fieldValue != null && fieldValue !== '') {
52
+ localData[`${keyPrefix}_${subfieldName}`] = fieldValue;
53
+ }
54
+ };
55
+ assignStringField(InternationalWireVerificationSubfieldNames.nationality, person.nationality);
56
+ assignStringField(InternationalWireVerificationSubfieldNames.email, person.email);
57
+ assignStringField(InternationalWireVerificationSubfieldNames.companyRole, person.company_role);
58
+ assignStringField(InternationalWireVerificationSubfieldNames.ssn, person.ssn);
59
+ assignStringField(InternationalWireVerificationSubfieldNames.dateOfBirth, person.date_of_birth);
60
+ if (person.ownership_percentage != null) {
61
+ localData[`${keyPrefix}_${InternationalWireVerificationSubfieldNames.ownershipPercentage}`] = person.ownership_percentage;
62
+ }
63
+ if (person.proof_of_identity != null) {
64
+ appendIntlWireFileOptionsToLocalData(localData, `${keyPrefix}_${InternationalWireVerificationSubfieldNames.proofOfIdentity}`, toIntlWireFileOptionArray(person.proof_of_identity));
65
+ }
66
+ if (person.proof_of_address != null) {
67
+ appendIntlWireFileOptionsToLocalData(localData, `${keyPrefix}_${InternationalWireVerificationSubfieldNames.proofOfAddress}`, toIntlWireFileOptionArray(person.proof_of_address));
68
+ }
69
+ };
70
+ export const getStakeHolderOwnerIndicesFromLocalData = (localData) => {
71
+ const stakeHolderPrefix = `${InternationalWireVerificationFormFieldNames.stakeHolder}_`;
72
+ const stakeHolderIndexedPattern = new RegExp(`^${stakeHolderPrefix}(\\d+)_`);
73
+ const stakeHolderBooleanSelectionPattern = new RegExp(`^${InternationalWireVerificationFormFieldNames.stakeHolder}_(true|false)$`);
74
+ const indices = new Set();
75
+ Object.keys(localData).forEach((key) => {
76
+ const match = key.match(stakeHolderIndexedPattern);
77
+ if (match != null) {
78
+ indices.add(Number.parseInt(match[1], 10));
79
+ }
80
+ });
81
+ if (indices.size === 0) {
82
+ const hasUnindexedStakeHolderData = Object.keys(localData).some((key) => key.startsWith(stakeHolderPrefix) &&
83
+ !stakeHolderBooleanSelectionPattern.test(key));
84
+ if (hasUnindexedStakeHolderData) {
85
+ indices.add(0);
86
+ }
87
+ }
88
+ return Array.from(indices).sort((a, b) => a - b);
89
+ };
90
+ export const hasBusinessOwnershipValueInLocalData = (localData, gateFieldName = InternationalWireVerificationReadonlyVisibilityGateFieldName) => {
91
+ const baseKey = gateFieldName ?? InternationalWireVerificationFormFieldNames.businessOwnership;
92
+ const frontFileId = localData[baseKey];
93
+ if (typeof frontFileId === 'string' && frontFileId !== '') {
94
+ return true;
95
+ }
96
+ if (Array.isArray(frontFileId)) {
97
+ return frontFileId.some((fileId) => typeof fileId === 'string' && fileId !== '');
98
+ }
99
+ const backFileId = localData[`${baseKey}${IntlWireVerificationLocalDataSuffix.documentBack}`];
100
+ if (typeof backFileId === 'string' && backFileId !== '') {
101
+ return true;
102
+ }
103
+ const documentOption = localData[`${baseKey}${IntlWireVerificationLocalDataSuffix.documentOption}`];
104
+ return typeof documentOption === 'string' && documentOption !== '';
105
+ };
@@ -1,15 +1,62 @@
1
+ import { InternationalWireVerificationReadonlyHideableFieldNames, InternationalWireVerificationFormFieldNames, } from './internationalWireVerificationFieldConstants';
2
+ import { hasBusinessOwnershipValueInLocalData } from './internationalWireVerificationLocalDataHelpers';
3
+ export const InternationalWireVerificationFormOrder = [
4
+ InternationalWireVerificationFormFieldNames.certificateOfGoodStanding,
5
+ InternationalWireVerificationFormFieldNames.businessOwnership,
6
+ InternationalWireVerificationFormFieldNames.companyProofOfAddress,
7
+ InternationalWireVerificationFormFieldNames.companyOfficerProofOfAddress,
8
+ InternationalWireVerificationFormFieldNames.companyRegistrationDate,
9
+ InternationalWireVerificationFormFieldNames.annualTurnover,
10
+ InternationalWireVerificationFormFieldNames.expectedTransactionVolume,
11
+ InternationalWireVerificationFormFieldNames.employeeCount,
12
+ InternationalWireVerificationFormFieldNames.intendedUseOfAccount,
13
+ InternationalWireVerificationFormFieldNames.transactionCountries,
14
+ InternationalWireVerificationFormFieldNames.stakeHolder,
15
+ InternationalWireVerificationFormFieldNames.controllingPerson,
16
+ ];
17
+ const orderIndex = new Map(InternationalWireVerificationFormOrder.map((name, index) => [name, index]));
18
+ const toFieldValues = (fieldValues) => fieldValues?.map(({ code, description }) => ({ code, description })) ?? [];
19
+ const toSubField = (subfield) => ({
20
+ label: subfield.label,
21
+ placeholder: subfield.field_hint_text ?? '',
22
+ type: subfield.type,
23
+ fieldValues: toFieldValues(subfield.field_values),
24
+ isMultipleOptionsSupported: subfield.is_multiple_options_supported,
25
+ options: subfield.options,
26
+ });
1
27
  export const toDynamicFormField = (key, payload) => ({
2
28
  name: key,
3
29
  label: payload.label,
4
30
  placeholder: payload.field_hint_text ?? '',
5
31
  isMultipleValuesAllowed: payload.is_multiple_values_allowed ?? false,
6
32
  type: payload.type,
7
- fieldValues: payload.field_values != null && payload.field_values.length > 0
8
- ? payload.field_values.map((fieldValue) => {
9
- return {
10
- code: fieldValue.code,
11
- description: fieldValue.description,
12
- };
13
- })
14
- : [],
33
+ fieldValues: toFieldValues(payload.field_values),
34
+ isMultipleOptionsSupported: payload.is_multiple_options_supported,
35
+ options: payload.options,
36
+ requirements: payload.requirements,
37
+ default: payload.default,
38
+ subfields: payload.subfields != null
39
+ ? Object.fromEntries(Object.entries(payload.subfields).map(([subfieldKey, subfield]) => [
40
+ subfieldKey,
41
+ toSubField(subfield),
42
+ ]))
43
+ : undefined,
15
44
  });
45
+ const readonlyHideableVerificationFormFieldNames = new Set(InternationalWireVerificationReadonlyHideableFieldNames);
46
+ export const filterVerificationFormFieldsForReadonlyView = (fields, localData, isReadonly) => {
47
+ if (!isReadonly || hasBusinessOwnershipValueInLocalData(localData)) {
48
+ return fields;
49
+ }
50
+ return fields.filter((field) => !readonlyHideableVerificationFormFieldNames.has(field.name));
51
+ };
52
+ export const sortVerificationFormFields = (fields) => {
53
+ return fields.slice().sort((a, b) => {
54
+ const aIndex = orderIndex.get(a.name) ?? InternationalWireVerificationFormOrder.length;
55
+ const bIndex = orderIndex.get(b.name) ?? InternationalWireVerificationFormOrder.length;
56
+ if (aIndex !== bIndex) {
57
+ return aIndex - bIndex;
58
+ }
59
+ return a.name.localeCompare(b.name);
60
+ });
61
+ };
62
+ export const toVerificationFormFields = (internationalWireFormPayload) => sortVerificationFormFields(Object.keys(internationalWireFormPayload).map((key) => toDynamicFormField(key, internationalWireFormPayload[key])));
@@ -1,9 +1,11 @@
1
1
  import { createSlice } from '@reduxjs/toolkit';
2
- import { toDynamicFormField, } from './internationalWireVerificationPayload';
2
+ import { toVerificationFormFields, } from './internationalWireVerificationPayload';
3
+ import { InternationalWireVerificationBooleanWithSubfieldsFieldNames } from './internationalWireVerificationFieldConstants';
3
4
  export const initialState = {
4
5
  verificationFormFetchState: {
5
6
  fetchState: 'Not-Started',
6
7
  },
8
+ verificationFormFieldLabels: {},
7
9
  verificationFormFields: [],
8
10
  verificationFormLocalData: {},
9
11
  verificationFormSubmitState: {
@@ -31,11 +33,8 @@ const internationalWireVerification = createSlice({
31
33
  },
32
34
  updateInternationalVerificationForm(draft, action) {
33
35
  const { internationalWireFormPayload } = action.payload;
34
- const verificationFormFields = [];
35
- Object.keys(internationalWireFormPayload).forEach((key) => {
36
- verificationFormFields.push(toDynamicFormField(key, internationalWireFormPayload[key]));
37
- });
38
- draft.verificationFormFields = verificationFormFields;
36
+ draft.verificationFormFieldLabels = internationalWireFormPayload;
37
+ draft.verificationFormFields = toVerificationFormFields(internationalWireFormPayload);
39
38
  draft.verificationFormFetchState.fetchState = 'Completed';
40
39
  },
41
40
  updateVerificationFormFailure(draft, action) {
@@ -44,9 +43,26 @@ const internationalWireVerification = createSlice({
44
43
  draft.verificationFormFetchState.error = error;
45
44
  },
46
45
  updateVerificationFormLocalData(draft, action) {
47
- draft.verificationFormLocalData = {
46
+ const mergedLocalData = {
47
+ ...draft.verificationFormLocalData,
48
48
  ...action.payload,
49
49
  };
50
+ if (action.payload[InternationalWireVerificationBooleanWithSubfieldsFieldNames.stakeHolder] === 'false') {
51
+ Object.keys(mergedLocalData).forEach((key) => {
52
+ if (key.startsWith(`${InternationalWireVerificationBooleanWithSubfieldsFieldNames.stakeHolder}_`)) {
53
+ delete mergedLocalData[key];
54
+ }
55
+ });
56
+ }
57
+ if (action.payload[InternationalWireVerificationBooleanWithSubfieldsFieldNames
58
+ .controllingPerson] === 'true') {
59
+ Object.keys(mergedLocalData).forEach((key) => {
60
+ if (key.startsWith(`${InternationalWireVerificationBooleanWithSubfieldsFieldNames.controllingPerson}_`)) {
61
+ delete mergedLocalData[key];
62
+ }
63
+ });
64
+ }
65
+ draft.verificationFormLocalData = mergedLocalData;
50
66
  },
51
67
  submitInternationalVerificationForm: {
52
68
  reducer(draft) {
@@ -1,26 +1,50 @@
1
+ import { getCompanyByCompanyId } from '../../../../entity/company/companySelector';
1
2
  import { getFilesByFileIds } from '../../../../entity/file/fileSelector';
3
+ import { getCurrentTenant } from '../../../../entity/tenant/tenantSelector';
2
4
  import { getFileDeleteStatusById, getFileUpdateNameStatusById, } from '../../../fileView/fileViewSelector';
5
+ import { filterVerificationFormFieldsForReadonlyView } from './internationalWireVerificationPayload';
6
+ const collectFileIdsFromLocalData = (localData) => {
7
+ const fileIds = new Set();
8
+ Object.values(localData).forEach((value) => {
9
+ if (typeof value === 'string' && value.startsWith('file_')) {
10
+ fileIds.add(value);
11
+ return;
12
+ }
13
+ if (Array.isArray(value)) {
14
+ value.forEach((item) => {
15
+ if (typeof item === 'string' && item.startsWith('file_')) {
16
+ fileIds.add(item);
17
+ }
18
+ });
19
+ }
20
+ });
21
+ return Array.from(fileIds);
22
+ };
3
23
  export const getIntlWireVerificationView = (state) => {
4
24
  const deleteFileStatusById = {};
5
25
  const updateFileStatusById = {};
6
- // field with type = file
7
- const fileField = state.internationalWireVerificationState.verificationFormFields.find((field) => field.type === 'file');
8
- let fileId;
9
- if (fileField != null) {
10
- fileId = state.internationalWireVerificationState.verificationFormLocalData[fileField.name];
11
- }
12
- if (fileId != null) {
26
+ const { verificationFormFetchState, verificationFormFields, verificationFormLocalData, verificationFormSubmitState, } = state.internationalWireVerificationState;
27
+ const fileIds = collectFileIdsFromLocalData(verificationFormLocalData);
28
+ fileIds.forEach((fileId) => {
13
29
  deleteFileStatusById[fileId] = getFileDeleteStatusById(state, fileId);
14
30
  updateFileStatusById[fileId] = getFileUpdateNameStatusById(state, fileId);
15
- }
16
- let userFiles = [];
17
- if (fileId != null) {
18
- userFiles = getFilesByFileIds(state.fileState, [fileId]);
19
- }
20
- const fetchState = state.internationalWireVerificationState.verificationFormFetchState
21
- .fetchState;
31
+ });
32
+ const userFiles = fileIds.length > 0 ? getFilesByFileIds(state.fileState, fileIds) : [];
33
+ const fetchState = verificationFormFetchState.fetchState;
34
+ const currentTenant = getCurrentTenant(state);
35
+ const company = currentTenant?.companyId != null
36
+ ? getCompanyByCompanyId(state.companyState, currentTenant.companyId)
37
+ ?.company
38
+ : undefined;
39
+ const onboardingStatusCode = company?.companyBillPayInfo?.internationalWireOnboardingStatus?.code;
40
+ const isReadonly = onboardingStatusCode != null &&
41
+ onboardingStatusCode !== 'onboarding_status_not_started';
42
+ const visibleVerificationFormFields = filterVerificationFormFieldsForReadonlyView(verificationFormFields, verificationFormLocalData, isReadonly);
22
43
  return {
23
- ...state.internationalWireVerificationState,
44
+ verificationFormFetchState,
45
+ verificationFormFields: visibleVerificationFormFields,
46
+ verificationFormLocalData,
47
+ verificationFormSubmitState,
24
48
  deleteFileStatusById,
25
49
  updateFileStatusById,
26
50
  userFiles,
@@ -0,0 +1,189 @@
1
+ import { InternationalWireVerificationBooleanWithSubfieldsFieldNames, InternationalWireVerificationFormFieldNames, InternationalWireVerificationSubfieldNames, } from './internationalWireVerificationFieldConstants';
2
+ export const IntlWireVerificationLocalDataSuffix = {
3
+ documentOption: '_option',
4
+ documentBack: '_back',
5
+ nameFirst: '_first_name',
6
+ nameLast: '_last_name',
7
+ };
8
+ const MULTI_OPTION_FILE_FIELD_NAMES = new Set([
9
+ InternationalWireVerificationFormFieldNames.businessOwnership,
10
+ InternationalWireVerificationFormFieldNames.companyProofOfAddress,
11
+ InternationalWireVerificationFormFieldNames.companyOfficerProofOfAddress,
12
+ ]);
13
+ const BOOLEAN_WITH_SUBFIELDS_FIELD_NAMES = new Set([
14
+ InternationalWireVerificationBooleanWithSubfieldsFieldNames.stakeHolder,
15
+ InternationalWireVerificationBooleanWithSubfieldsFieldNames.controllingPerson,
16
+ ]);
17
+ const FILE_SUBFIELD_NAMES = new Set([
18
+ InternationalWireVerificationSubfieldNames.proofOfIdentity,
19
+ InternationalWireVerificationSubfieldNames.proofOfAddress,
20
+ ]);
21
+ const isInternalLocalDataKey = (key) => key.endsWith(IntlWireVerificationLocalDataSuffix.documentOption) ||
22
+ key.endsWith(IntlWireVerificationLocalDataSuffix.documentBack) ||
23
+ key.endsWith(IntlWireVerificationLocalDataSuffix.nameFirst) ||
24
+ key.endsWith(IntlWireVerificationLocalDataSuffix.nameLast);
25
+ const isPersonSubfieldKey = (key) => key.startsWith(`${InternationalWireVerificationBooleanWithSubfieldsFieldNames.stakeHolder}_`) ||
26
+ key.startsWith(`${InternationalWireVerificationBooleanWithSubfieldsFieldNames.controllingPerson}_`);
27
+ const toFileOptionPayloads = (localData, baseKey, options) => {
28
+ const includeBack = options?.includeBack ?? true;
29
+ const option = localData[`${baseKey}${IntlWireVerificationLocalDataSuffix.documentOption}`];
30
+ if (typeof option !== 'string' || option.length === 0) {
31
+ return undefined;
32
+ }
33
+ const payloads = [];
34
+ const frontFileId = localData[baseKey];
35
+ if (typeof frontFileId === 'string' && frontFileId.length > 0) {
36
+ payloads.push({ file_id: frontFileId, option });
37
+ }
38
+ if (includeBack) {
39
+ const backFileId = localData[`${baseKey}${IntlWireVerificationLocalDataSuffix.documentBack}`];
40
+ if (typeof backFileId === 'string' && backFileId.length > 0) {
41
+ payloads.push({ file_id: backFileId, option });
42
+ }
43
+ }
44
+ return payloads.length > 0 ? payloads : undefined;
45
+ };
46
+ const buildPersonPayload = (localData, keyPrefix) => {
47
+ const person = {};
48
+ const nameBaseKey = `${keyPrefix}_${InternationalWireVerificationSubfieldNames.name}`;
49
+ const firstName = localData[`${nameBaseKey}${IntlWireVerificationLocalDataSuffix.nameFirst}`];
50
+ const lastName = localData[`${nameBaseKey}${IntlWireVerificationLocalDataSuffix.nameLast}`];
51
+ if (typeof firstName === 'string' || typeof lastName === 'string') {
52
+ person.name = {
53
+ first_name: typeof firstName === 'string' ? firstName : '',
54
+ last_name: typeof lastName === 'string' ? lastName : '',
55
+ };
56
+ }
57
+ const assignStringField = (subfieldName, assign) => {
58
+ const value = localData[`${keyPrefix}_${subfieldName}`];
59
+ if (typeof value === 'string' && value.length > 0) {
60
+ assign(value);
61
+ }
62
+ };
63
+ assignStringField(InternationalWireVerificationSubfieldNames.nationality, (value) => {
64
+ person.nationality = value;
65
+ });
66
+ assignStringField(InternationalWireVerificationSubfieldNames.email, (value) => {
67
+ person.email = value;
68
+ });
69
+ assignStringField(InternationalWireVerificationSubfieldNames.companyRole, (value) => {
70
+ person.company_role = value;
71
+ });
72
+ assignStringField(InternationalWireVerificationSubfieldNames.ssn, (value) => {
73
+ person.ssn = value;
74
+ });
75
+ assignStringField(InternationalWireVerificationSubfieldNames.dateOfBirth, (value) => {
76
+ person.date_of_birth = value;
77
+ });
78
+ const ownershipValue = localData[`${keyPrefix}_${InternationalWireVerificationSubfieldNames.ownershipPercentage}`];
79
+ if (ownershipValue != null && ownershipValue !== '') {
80
+ const parsedOwnership = Number(ownershipValue);
81
+ if (!Number.isNaN(parsedOwnership)) {
82
+ person.ownership_percentage = parsedOwnership;
83
+ }
84
+ }
85
+ FILE_SUBFIELD_NAMES.forEach((subfieldName) => {
86
+ const filePayloads = toFileOptionPayloads(localData, `${keyPrefix}_${subfieldName}`);
87
+ if (filePayloads != null) {
88
+ if (subfieldName ===
89
+ InternationalWireVerificationSubfieldNames.proofOfIdentity) {
90
+ person.proof_of_identity = filePayloads;
91
+ }
92
+ else {
93
+ person.proof_of_address = filePayloads;
94
+ }
95
+ }
96
+ });
97
+ return person;
98
+ };
99
+ const getStakeHolderOwnerKeyPrefix = (localData, ownerIndex) => {
100
+ const indexedKeyPrefix = `${InternationalWireVerificationBooleanWithSubfieldsFieldNames.stakeHolder}_${ownerIndex}`;
101
+ if (ownerIndex !== 0) {
102
+ return indexedKeyPrefix;
103
+ }
104
+ const hasIndexedOwnerZeroData = Object.keys(localData).some((key) => key.startsWith(`${indexedKeyPrefix}_`));
105
+ if (hasIndexedOwnerZeroData) {
106
+ return indexedKeyPrefix;
107
+ }
108
+ return InternationalWireVerificationBooleanWithSubfieldsFieldNames.stakeHolder;
109
+ };
110
+ const getStakeHolderOwnerIndices = (localData) => {
111
+ const stakeHolderPrefix = `${InternationalWireVerificationBooleanWithSubfieldsFieldNames.stakeHolder}_`;
112
+ const stakeHolderIndexedPattern = new RegExp(`^${stakeHolderPrefix}(\\d+)_`);
113
+ const stakeHolderBooleanSelectionPattern = new RegExp(`^${InternationalWireVerificationBooleanWithSubfieldsFieldNames.stakeHolder}_(true|false)$`);
114
+ const indices = new Set();
115
+ Object.keys(localData).forEach((key) => {
116
+ const match = key.match(stakeHolderIndexedPattern);
117
+ if (match != null) {
118
+ indices.add(Number.parseInt(match[1], 10));
119
+ }
120
+ });
121
+ if (indices.size === 0) {
122
+ const hasUnindexedStakeHolderData = Object.keys(localData).some((key) => key.startsWith(stakeHolderPrefix) &&
123
+ !stakeHolderBooleanSelectionPattern.test(key));
124
+ if (hasUnindexedStakeHolderData) {
125
+ indices.add(0);
126
+ }
127
+ }
128
+ return Array.from(indices).sort((a, b) => a - b);
129
+ };
130
+ const hasPersonPayloadData = (person) => Object.keys(person).length > 0;
131
+ export const toIntlWireVerificationFormDetails = (localData) => {
132
+ const formDetails = {};
133
+ Object.entries(localData).forEach(([key, value]) => {
134
+ if (BOOLEAN_WITH_SUBFIELDS_FIELD_NAMES.has(key) ||
135
+ isInternalLocalDataKey(key) ||
136
+ isPersonSubfieldKey(key)) {
137
+ return;
138
+ }
139
+ if (MULTI_OPTION_FILE_FIELD_NAMES.has(key)) {
140
+ const filePayloads = toFileOptionPayloads(localData, key, {
141
+ includeBack: false,
142
+ });
143
+ if (filePayloads != null) {
144
+ formDetails[key] = filePayloads;
145
+ }
146
+ else if (Array.isArray(value)) {
147
+ const fileIds = value.filter((fileId) => typeof fileId === 'string' && fileId.length > 0);
148
+ if (fileIds.length > 0) {
149
+ formDetails[key] = fileIds;
150
+ }
151
+ }
152
+ else if (typeof value === 'string' && value.length > 0) {
153
+ // Backward compatibility: older onboarding records can store plain file ids
154
+ // without a paired `_option` key.
155
+ formDetails[key] = value;
156
+ }
157
+ return;
158
+ }
159
+ if (value == null || value === '') {
160
+ return;
161
+ }
162
+ formDetails[key] = value;
163
+ });
164
+ const stakeHolderSelection = localData[InternationalWireVerificationBooleanWithSubfieldsFieldNames.stakeHolder];
165
+ if (stakeHolderSelection === 'true') {
166
+ formDetails[InternationalWireVerificationBooleanWithSubfieldsFieldNames.stakeHolder] = getStakeHolderOwnerIndices(localData)
167
+ .map((ownerIndex) => buildPersonPayload(localData, getStakeHolderOwnerKeyPrefix(localData, ownerIndex)))
168
+ .filter(hasPersonPayloadData);
169
+ }
170
+ else if (stakeHolderSelection === 'false') {
171
+ formDetails[InternationalWireVerificationBooleanWithSubfieldsFieldNames.stakeHolder] = [];
172
+ }
173
+ const controllingPersonSelection = localData[InternationalWireVerificationBooleanWithSubfieldsFieldNames
174
+ .controllingPerson];
175
+ if (controllingPersonSelection === 'false') {
176
+ const controllingPerson = buildPersonPayload(localData, InternationalWireVerificationBooleanWithSubfieldsFieldNames.controllingPerson);
177
+ if (hasPersonPayloadData(controllingPerson)) {
178
+ formDetails[InternationalWireVerificationBooleanWithSubfieldsFieldNames.controllingPerson] = controllingPerson;
179
+ }
180
+ }
181
+ else if (controllingPersonSelection === 'true') {
182
+ formDetails[InternationalWireVerificationBooleanWithSubfieldsFieldNames.controllingPerson] = 'true';
183
+ }
184
+ return formDetails;
185
+ };
186
+ export const toIntlWireVerificationSubmitPayload = (localData) => ({
187
+ is_applicant_declaration: true,
188
+ form_details: toIntlWireVerificationFormDetails(localData),
189
+ });
package/lib/index.d.ts CHANGED
@@ -292,7 +292,6 @@ import { CompletedTransactionsSelectorData, ResolvedBatchDetails, ResolvedBatchF
292
292
  import { AccountReconSectionID, AccountReconciliationByAccount, AccountReconciliationBySection, ExpenseAutomationReconciliationViewSelector } from './view/expenseAutomationView/selectorTypes/reconciliationViewSelectorTypes';
293
293
  import { ExpenseAutomationTransactionViewSelector, TransactionReviewLocalDataSelectorView } from './view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes';
294
294
  import { getExpenseAutomationFluxAnalysisView } from './view/expenseAutomationView/selectors/fluxAnalysisViewSelector';
295
- import { getJEAccountSettingsView } from './view/expenseAutomationView/selectors/jeAccountSettingsViewSelector';
296
295
  import { JEScheduledTransactionWithFailedEntries } from './view/expenseAutomationView/selectors/jeSchedulesViewSelector';
297
296
  import { getExpenseAutomationReconciliationView, getReparseStatementStatusByAccountId, isAccountReconReport } from './view/expenseAutomationView/selectors/reconciliationViewSelector';
298
297
  import { getExpenseAutomationTransactionView, getLastTransferEntryReplacement } from './view/expenseAutomationView/selectors/transactionCategorizationSelector';
@@ -433,10 +432,6 @@ import { clearBillPayReview, fetchDuplicateBill } from './view/spendManagement/b
433
432
  import { BillPayReviewSelectorView, DuplicateBillsSelectorView, getReviewPageBillDetail } from './view/spendManagement/billPay/billPayReview/billPayReviewSelector';
434
433
  import { clearBillPaySetupApproverView, clearBillPaySetupApproverViewUpdateData, deleteBillPayApprovalRule, fetchBillPayApproversDetails, fetchBillPayApproversList, fetchBillPaySetupApproverView, initializeBillPaySetupApproverViewUpdateData, reorderBillPayApprovalRules, saveBillPaySetupApproverViewUpdateData, saveBillPaySetupApproverViewUpdates, setListeningToPusherEvent as setBillsSetupApproverViewListeningToPusherEvent } from './view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewReducer';
435
434
  import { getBillPaySetupApproverUpdateDataView, getBillPaySetupApproverView } from './view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewSelector';
436
- import { clearJEScheduleApprovalRules, fetchJEScheduleApprovalRules, saveJEScheduleApprovalRules } from './view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesReducer';
437
- import { getJEScheduleApprovalRulesView } from './view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesSelector';
438
- import { JEScheduleApprovalRulesView } from './view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesSelector';
439
- import { JEApprovalSettings, JEApprovalThresholdRow, JEScheduleType, SaveJEScheduleApprovalRulesRequestBody } from './view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesPayload';
440
435
  import { ApprovalRuleWithUser as BillPayApprovalRuleWithUser, BillPaySetupApproverUpdateDataView, BillPaySetupApproverView } from './view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewSelectorTypes';
441
436
  import { BillPaySetupApproverViewState } from './view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewState';
442
437
  import { ApprovalRuleCreateData, ApprovalRuleUpdateData, ApprovalUpdateActionType, ApproverViewUpdateData } from './view/spendManagement/billPay/billPaySetupApproverView/types/commonState';
@@ -453,9 +448,10 @@ import { BillDetailLocalData, EditBillDetail, EditBillDetailViewState, EditRecur
453
448
  import { CreateInternationalWireDetailsLocalData, DynamicFormField, SupportedAccountType } from './view/spendManagement/billPay/internationalWire/internationalWire';
454
449
  import { clearInternationalWire, createPaymentInstrument, createPaymentInstrumentUpdateStatus, deletePaymentInstrument, fetchInternationalWireDynamicForm, initializeDynamicForm, initializeInternationalWireLocalData, updateInternationalWireLocalStoreData } from './view/spendManagement/billPay/internationalWire/internationalWireReducer';
455
450
  import { InternationalWireSelectorView, getInternationalWireView } from './view/spendManagement/billPay/internationalWire/internationalWireSelector';
451
+ import { InternationalWireVerificationFormOrder, sortVerificationFormFields } from './view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationPayload';
456
452
  import { fetchInternationalVerificationForm, submitInternationalVerificationForm, updateVerificationFormLocalData } from './view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationReducer';
457
453
  import { InternationalWireVerificationView, getIntlWireVerificationView } from './view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationSelector';
458
- import { FieldValueType, InternationalWireVerificationState, VerificationFormField, VerificationFormLocalData } from './view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationState';
454
+ import { FieldValueType, InternationalWireVerificationState, VerificationFormField, VerificationFormFieldOption, VerificationFormLocalData, VerificationFormSubField } from './view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationState';
459
455
  import { fetchBillAttachment, fetchMagicLinkBankNameByRouting, fetchMagicLinkBankNameBySwift, fetchMagicLinkTenant, saveBankAccount, saveMagicLinkAddressInLocalStore, updateMagicLinkBankAccountLocalStoreData, updateMagicLinkInternationalBankAccountLocalStoreData } from './view/spendManagement/billPay/magicLinkView/magicLinkViewReducer';
460
456
  import { MagicLinkView, getMagicLinkBankAccountView, getMagicLinkCurrentAddressState, getMagicLinkView } from './view/spendManagement/billPay/magicLinkView/magicLinkViewSelector';
461
457
  import { PreviousBillsSelectorView } from './view/spendManagement/billPay/previousBills/previousBillsSelector';
@@ -684,7 +680,7 @@ export { TransactionsOrder, COABalancesSliceOrder, EntityOrder, Section, Section
684
680
  export { ClassesViewSelectorReportV2 };
685
681
  export { BalancesTimeseries, TrendTimeseries, BalanceKind };
686
682
  export { fetchMonthEndCloseChecks, fetchMonthClosePerformanceTrend, MonthClosePerformanceTrend, MonthEndCloseCheck, getMonthEndCloseChecksViewByTenantId, MonthEndCloseChecksView, MonthEndCloseCheckFrequency, MonthCloseCheckMetrics, MonthCloseCheckProgressJson, ALL_MONTH_END_CLOSE_CHECKS_FREQUENCY, MonthEndAuditSummary, };
687
- export { ExpenseAutomationViewSelector, ExpenseAutomationStepDetails, ExpenseAutomationViewType, ExpenseAutomationMissingReceiptsViewSelector, BulkUploadSelectorData, ExpenseAutomationFluxAnalysisViewSelector, FluxAnalysisVendorView, FluxAnalysisViewSectionReport, FluxVendorAccountsAndClassesView, ExpenseAutomationMissingReceiptsViewUIState, ExpenseAutomationMissingReceiptsViewState, ExpenseAutomationViewState, ExpenseAutomationTransactionsTab, ExpenseAutomationMissingReceiptsSortKey, BATCH_FILE_STATUSES, BatchDetails, BatchFile, BatchFileStatus, BatchListItem, isUnmatchedTabFileStatus, BatchStatus, BatchStatusValue, BatchSummary, BulkUploadPhase, BulkUploadResultsTab, BulkUploadSortKey, BulkUploadState, CandidateRef, CompletedSubTab, CompletedTransactionsSelectorData, DEFAULT_COMPLETED_SUB_TAB, MatchCandidate, MatchSource, MissingReceiptsTab, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toCompletedSubTab, toMatchSource, toMissingReceiptsTab, ResolvedBatchFile, ResolvedBatchDetails, ResolvedCandidate, ExpenseAutomationJEScheduleMainTab, ExpenseAutomationJEScheduleSortKey, ExpenseAutomationJESchedulesViewUIState, toExpenseAutomationJEScheduleMainTab, toExpenseAutomationJEScheduleSortKey, getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationCompletedSubTab, fetchExpenseAutomationMissingReceipts, bulkUploadReceipts, bulkUploadAutomatchingTimedOut, bulkUploadReceiptsSuccess, bulkUploadReceiptsFailure, restoreBulkUploadAutomatchingOnMount, restoreBulkUploadMatchingState, updateBulkUploadProgress, pusherBatchStatusUpdate, requestMissingReceiptsTabNavigation, clearMissingReceiptsTabNavigation, fetchBulkUploadBatchDetails, fetchBulkUploadBatchDetailsSuccess, fetchBulkUploadBatchDetailsFailure, storeBatchDetails, fetchMoreBatchDetails, fetchMoreBatchDetailsComplete, fetchMoreBatchDetailsFailure, fetchBulkUploadBatches, fetchBulkUploadBatchesSuccess, fetchBulkUploadBatchesFailure, clearBulkUploadBatchDetailsForScopeChange, markBatchDetailRefreshAttempted, refreshBatchDetailsForBatchId, confirmBulkUploadMatch, confirmBulkUploadMatchSuccess, confirmBulkUploadMatchFailure, setBulkUploadResultsTab, setBulkUploadCompletedSubTab, setBulkUploadSortConfig, setBulkUploadUploadedFileCount, clearBulkUpload, searchTransactionsForManualMatch, searchTransactionsForManualMatchSuccess, searchTransactionsForManualMatchFailure, clearManualSearchResults, acknowledgeBulkUploadConfirmMatchComplete, fetchCompletedTransactions, fetchCompletedTransactionsSuccess, fetchCompletedTransactionsFailure, fetchFluxAnalysisView, clearExpenseAutomationFluxAnalysisView, updateOperatingExpensesIdsForReview as updateFluxOperatingExpensesIdsForReview, updateSelectedSectionIdsForReview as updateFluxAnalysisSelectedSectionIdsForReview, reviewFluxAnalysisView, updateExpenseAutomationMissingReceiptUploadState, updateExpenseAutomationMissingReceiptsUIState, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, FluxAnalysisOperatingExpenseView, FluxAnalysisSectionType, getExpenseAutomationFluxAnalysisView, getJEAccountSettingsView, FluxAnalysisSortKey, FluxAnalysisActionType, FluxBalancesByMonth, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, getLastTransferEntryReplacement, ReconReconcileSortKey, ReconciliationReconcileTabLocalData, FluxAnalysisReviewStatus, updateFluxAnalysisViewUIState, FluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, SaveExpenseAutomationReconciliationActionType, ExcludeAccountFromReconciliationPayload, excludeAccountFromReconciliation, includeAccountInReconciliation, saveExpenseAutomationReconciliationDetail, updateExpenseAutomationReconcileTabListScrollState, updateExpenseAutomationReconReviewTabListSortState, updateExpenseAutomationReconcileTabListSortState, updateExpenseAutomationReconcileTabLocalData, updateExpenseAutomationAccountReconciliationSelectedTab, updateExpenseAutomationAccountReconciliationSelectedAccountId, ExpenseAutomationReconciliationViewSelector, getExpenseAutomationReconciliationView, getReparseStatementStatusByAccountId, AccountReconciliationBySection, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, UploadStatementDocumentAIResponse, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, AccountReconciliationByAccount, AccountReconciliationEntity, getAccountReconByAccountIdAndSelectedPeriod, ExpenseAutomationReconciliationViewTab, toReconciliationTabsType, isAccountReconReport, ReconReviewSortKey, AccountReconSectionID, ReconciliationReviewTabLocalData, TransactionsToReview, RecommendedActionCodeType, ReconciliationStatusCodeType, BalanceDataStatusCodeType, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, updateStatementProcessingFailed, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, BankStatusCodeType, ReconciliationAccountSourceType, toReconciliationAccountSource, StatementStatusCodeType, AccountReconciliationLocalData, StatementDataStatusCodeType, deleteAccountStatement, uploadAccountStatement, parseStatement, parseStatementSuccess, parseStatementFailure, reparseStatement, reparseStatementSuccess, reparseStatementFailure, resetReparseStatementStatus, updateParsedStatementData, updateNodeCollapseState, UploadStatementDocumentAIPayload, updateStatementUploadChosen, submitStatementUpdate, clearStatementDateConflict, StatementDateConflict, updateStatementUpdateLocalData, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, setStatementProcessingDismissedToBackground, updateStatementProcessingBackgroundCompletedSteps, ParsedStatementData, StatementUpdateLocalData, StatementMeta, StatementTransaction, StatementTransactionForUpdate, StatementTransactionsUpdate, };
683
+ export { ExpenseAutomationViewSelector, ExpenseAutomationStepDetails, ExpenseAutomationViewType, ExpenseAutomationMissingReceiptsViewSelector, BulkUploadSelectorData, ExpenseAutomationFluxAnalysisViewSelector, FluxAnalysisVendorView, FluxAnalysisViewSectionReport, FluxVendorAccountsAndClassesView, ExpenseAutomationMissingReceiptsViewUIState, ExpenseAutomationMissingReceiptsViewState, ExpenseAutomationViewState, ExpenseAutomationTransactionsTab, ExpenseAutomationMissingReceiptsSortKey, BATCH_FILE_STATUSES, BatchDetails, BatchFile, BatchFileStatus, BatchListItem, isUnmatchedTabFileStatus, BatchStatus, BatchStatusValue, BatchSummary, BulkUploadPhase, BulkUploadResultsTab, BulkUploadSortKey, BulkUploadState, CandidateRef, CompletedSubTab, CompletedTransactionsSelectorData, DEFAULT_COMPLETED_SUB_TAB, MatchCandidate, MatchSource, MissingReceiptsTab, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toCompletedSubTab, toMatchSource, toMissingReceiptsTab, ResolvedBatchFile, ResolvedBatchDetails, ResolvedCandidate, ExpenseAutomationJEScheduleMainTab, ExpenseAutomationJEScheduleSortKey, ExpenseAutomationJESchedulesViewUIState, toExpenseAutomationJEScheduleMainTab, toExpenseAutomationJEScheduleSortKey, getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationCompletedSubTab, fetchExpenseAutomationMissingReceipts, bulkUploadReceipts, bulkUploadAutomatchingTimedOut, bulkUploadReceiptsSuccess, bulkUploadReceiptsFailure, restoreBulkUploadAutomatchingOnMount, restoreBulkUploadMatchingState, updateBulkUploadProgress, pusherBatchStatusUpdate, requestMissingReceiptsTabNavigation, clearMissingReceiptsTabNavigation, fetchBulkUploadBatchDetails, fetchBulkUploadBatchDetailsSuccess, fetchBulkUploadBatchDetailsFailure, storeBatchDetails, fetchMoreBatchDetails, fetchMoreBatchDetailsComplete, fetchMoreBatchDetailsFailure, fetchBulkUploadBatches, fetchBulkUploadBatchesSuccess, fetchBulkUploadBatchesFailure, clearBulkUploadBatchDetailsForScopeChange, markBatchDetailRefreshAttempted, refreshBatchDetailsForBatchId, confirmBulkUploadMatch, confirmBulkUploadMatchSuccess, confirmBulkUploadMatchFailure, setBulkUploadResultsTab, setBulkUploadCompletedSubTab, setBulkUploadSortConfig, setBulkUploadUploadedFileCount, clearBulkUpload, searchTransactionsForManualMatch, searchTransactionsForManualMatchSuccess, searchTransactionsForManualMatchFailure, clearManualSearchResults, acknowledgeBulkUploadConfirmMatchComplete, fetchCompletedTransactions, fetchCompletedTransactionsSuccess, fetchCompletedTransactionsFailure, fetchFluxAnalysisView, clearExpenseAutomationFluxAnalysisView, updateOperatingExpensesIdsForReview as updateFluxOperatingExpensesIdsForReview, updateSelectedSectionIdsForReview as updateFluxAnalysisSelectedSectionIdsForReview, reviewFluxAnalysisView, updateExpenseAutomationMissingReceiptUploadState, updateExpenseAutomationMissingReceiptsUIState, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, FluxAnalysisOperatingExpenseView, FluxAnalysisSectionType, getExpenseAutomationFluxAnalysisView, FluxAnalysisSortKey, FluxAnalysisActionType, FluxBalancesByMonth, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, getLastTransferEntryReplacement, ReconReconcileSortKey, ReconciliationReconcileTabLocalData, FluxAnalysisReviewStatus, updateFluxAnalysisViewUIState, FluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, SaveExpenseAutomationReconciliationActionType, ExcludeAccountFromReconciliationPayload, excludeAccountFromReconciliation, includeAccountInReconciliation, saveExpenseAutomationReconciliationDetail, updateExpenseAutomationReconcileTabListScrollState, updateExpenseAutomationReconReviewTabListSortState, updateExpenseAutomationReconcileTabListSortState, updateExpenseAutomationReconcileTabLocalData, updateExpenseAutomationAccountReconciliationSelectedTab, updateExpenseAutomationAccountReconciliationSelectedAccountId, ExpenseAutomationReconciliationViewSelector, getExpenseAutomationReconciliationView, getReparseStatementStatusByAccountId, AccountReconciliationBySection, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, UploadStatementDocumentAIResponse, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, AccountReconciliationByAccount, AccountReconciliationEntity, getAccountReconByAccountIdAndSelectedPeriod, ExpenseAutomationReconciliationViewTab, toReconciliationTabsType, isAccountReconReport, ReconReviewSortKey, AccountReconSectionID, ReconciliationReviewTabLocalData, TransactionsToReview, RecommendedActionCodeType, ReconciliationStatusCodeType, BalanceDataStatusCodeType, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, updateStatementProcessingFailed, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, BankStatusCodeType, ReconciliationAccountSourceType, toReconciliationAccountSource, StatementStatusCodeType, AccountReconciliationLocalData, StatementDataStatusCodeType, deleteAccountStatement, uploadAccountStatement, parseStatement, parseStatementSuccess, parseStatementFailure, reparseStatement, reparseStatementSuccess, reparseStatementFailure, resetReparseStatementStatus, updateParsedStatementData, updateNodeCollapseState, UploadStatementDocumentAIPayload, updateStatementUploadChosen, submitStatementUpdate, clearStatementDateConflict, StatementDateConflict, updateStatementUpdateLocalData, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, setStatementProcessingDismissedToBackground, updateStatementProcessingBackgroundCompletedSteps, ParsedStatementData, StatementUpdateLocalData, StatementMeta, StatementTransaction, StatementTransactionForUpdate, StatementTransactionsUpdate, };
688
684
  export { JEScheduleLocalData };
689
685
  export { ExpenseAutomationJESchedulesViewSelector, JEAccountSettingsView, JEScheduledTransactionWithFailedEntries, };
690
686
  export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateTransactionFilters, updateSelectedCheckboxTransactionIds, markCategoryClassRecommendationsFailureForCategorization, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, createTransferEntry, createTransferEntryFailure, createTransferEntryReplacedTransaction, createTransferEntrySuccess, resetCreateTransferEntryStatus, clearTransferEntryRouteReplacement, fetchAccountsForTransferFlow, removeTransactionFromAllTabs, clearExpenseAutomationTransactionsView, TransactionsSortKey, toTransactionsSortKey, TransactionsTab, TransactionCategorizationLineItemData, TransactionReviewLocalData, SupportedTransactionCategorization, ExpenseAutomationTransactionsViewState, ExpenseAutomationTransactionsViewUIState, ExpenseAutomationTransactionViewSelector, TransactionReviewLocalDataSelectorView, };
@@ -832,7 +828,7 @@ export { PaymentAccount, Logo, VERIFIED_PAYMENT_ACCOUNT_PROVIDER_VERIFICATION_ST
832
828
  export { SubscriptionPaymentAccount };
833
829
  export { PreviousBillsSelectorView, InvoiceProcessingPayload, InvoiceProcessingResponse, isSuccessResponse, isInvalidSessionError, isAccessDeniedError, };
834
830
  export { Step, Actor as ApprovalRuleActor, ActorType, ApprovalActionType, StepOperatorType, ApprovalRuleState, ApprovalRule, AmountComparator, AmountCriteria, ConditionType, Criteria, DepartmentCriteria, VendorCriteria, AttributeType, Approvers, RoleType, EntityApprovalStatusState, EntityApprovalStatus, SpendManagementEntityType, SpendManagementEntityTypeWithOtherConnection, getAmountCriteria, getApprovalRulesByEntityType, getDepartmentCriteria, getFallbackApprovalRule, getVendorCriteria, toAttributeTypeStrict, toAttributeOrRoleTypeStrict, toRoleTypeStrict, DetectRuleOverlapInput, RuleForOverlapCheck, RuleOverlap, detectRuleOverlap, };
835
- export { ApprovalRuleUpdateData, ApprovalRuleCreateData, BillPayApprovalRuleWithUser, ApprovalUpdateActionType, ApproverViewUpdateData, BillPaySetupApproverViewState, BillPaySetupApproverView, BillPaySetupApproverUpdateDataView, getBillPaySetupApproverView, getBillPaySetupApproverUpdateDataView, getJEScheduleApprovalRulesView, clearJEScheduleApprovalRules, fetchJEScheduleApprovalRules, saveJEScheduleApprovalRules, JEScheduleApprovalRulesView, JEApprovalSettings, JEApprovalThresholdRow, JEScheduleType, SaveJEScheduleApprovalRulesRequestBody, fetchBillPaySetupApproverView, fetchBillPayApproversDetails, fetchBillPayApproversList, deleteBillPayApprovalRule, reorderBillPayApprovalRules, saveBillPaySetupApproverViewUpdateData, saveBillPaySetupApproverViewUpdates, setBillsSetupApproverViewListeningToPusherEvent, initializeBillPaySetupApproverViewUpdateData, clearBillPaySetupApproverViewUpdateData, clearBillPaySetupApproverView, };
831
+ export { ApprovalRuleUpdateData, ApprovalRuleCreateData, BillPayApprovalRuleWithUser, ApprovalUpdateActionType, ApproverViewUpdateData, BillPaySetupApproverViewState, BillPaySetupApproverView, BillPaySetupApproverUpdateDataView, getBillPaySetupApproverView, getBillPaySetupApproverUpdateDataView, fetchBillPaySetupApproverView, fetchBillPayApproversDetails, fetchBillPayApproversList, deleteBillPayApprovalRule, reorderBillPayApprovalRules, saveBillPaySetupApproverViewUpdateData, saveBillPaySetupApproverViewUpdates, setBillsSetupApproverViewListeningToPusherEvent, initializeBillPaySetupApproverViewUpdateData, clearBillPaySetupApproverViewUpdateData, clearBillPaySetupApproverView, };
836
832
  export { RemiApprovalRuleWithUser, RemiSetupApproverViewState, RemiSetupApproverView, RemiSetupApproverUpdateDataView, getRemiSetupApproverView, getRemiSetupApproverUpdateDataView, fetchRemiSetupApproverView, fetchRemiApproversList, fetchRemiApproversDetails, deleteRemiApprovalRule, reorderRemiApprovalRules, saveRemiSetupApproverViewUpdateData, saveRemiSetupApproverViewUpdates, initializeRemiSetupApproverViewUpdateData, setRemiSetupApproverViewListeningToPusherEvent, clearRemiSetupApproverViewUpdateData, clearRemiSetupApproverView, };
837
833
  export { RemiDetailViewSelector, getRemiDetailView, RemiActivity, RemiDetails, checkApproveRejectBtnShowForRemi, };
838
834
  export { RemiApprovalType, RemiDetailView, DuplicateLine };
@@ -918,7 +914,12 @@ export { getReferralListView, getInviteFormView, ReferralListSelectorView, Refer
918
914
  export { ALL_WEEK_DAYS, DayOfWeek, RecurringDatePickerOptions, RecurringFrequencyType, SEMI_WEEKLY_REQUIRED_DAYS_COUNT, getMinAllowedEndDate, getRecurringEndDateFromCount, toDayOfWeek, toRecurringFrequency, };
919
915
  export { fetchCockpitContext, fetchCompanyTaskManagerView, fetchTaskManagerMetrics, CompanyTaskManagerSelectorView, CompanyTaskManagerViewUIState, TaskManagerMetrics, getCompanyTaskManagerView, TaskWithCompanyDetail, createTaskFromTaskGroupTemplate, TaskGroupTemplate, };
920
916
  export { Country };
921
- export { InternationalWireVerificationState, VerificationFormField, VerificationFormLocalData, FieldValueType, fetchInternationalVerificationForm, submitInternationalVerificationForm, updateVerificationFormLocalData, getIntlWireVerificationView, InternationalWireVerificationView, };
917
+ export { InternationalWireVerificationState, VerificationFormField, VerificationFormFieldOption, VerificationFormLocalData, VerificationFormSubField, FieldValueType, InternationalWireVerificationFormOrder, sortVerificationFormFields, fetchInternationalVerificationForm, submitInternationalVerificationForm, updateVerificationFormLocalData, getIntlWireVerificationView, InternationalWireVerificationView, };
918
+ export { InternationalWireVerificationBooleanWithSubfieldsFieldNameList, InternationalWireVerificationBooleanWithSubfieldsFieldNames, InternationalWireVerificationControllingPersonFieldName, InternationalWireVerificationFormFieldNames, InternationalWireVerificationStakeHolderFieldName, InternationalWireVerificationSubfieldNames, } from './view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationFieldConstants';
919
+ export { IntlWireVerificationLocalDataSuffix, toIntlWireVerificationFormDetails, toIntlWireVerificationSubmitPayload, } from './view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationSubmitPayload';
920
+ export { getStakeHolderOwnerIndicesFromLocalData, } from './view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationLocalDataHelpers';
921
+ export { toVerificationFormLocalDataFromOnboardingDetails, } from './view/spendManagement/billPay/internationalWireVerification/internationalWireOnboardingDetailsToLocalData';
922
+ export type { InternationalWireVerificationBooleanWithSubfieldsFieldName, InternationalWireVerificationFormFieldName, InternationalWireVerificationSubfieldName, } from './view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationFieldConstants';
922
923
  export { fetchExpressPayInitialDetails, updateExpressPayFormLocalData, submitExpressPay, resetExpressPayLocalData, ExpressPayFormLocalData, ExpressPayView, getExpressPayView, };
923
924
  export { acceptTreasuryTerms, fetchTreasurySetupView, clearTreasurySetupView, fetchTreasuryFunds, updatePortfolioAllocation, fetchPortfolioAllocation, updateFundAllocationLocalData, updateTreasuryPromoIntroClosedByOutsideClick, updateTreasuryPromoRemindMeLaterClicked, updateTreasuryVideoViewed, FundAllocationOption, FundComposition, FundData, TreasurySetupView, getTreasurySetupViewDetails, getTreasuryFundsMaximumYield, };
924
925
  export { AiAccountantCustomer, AiAccountantCustomerState, AiAccountantEnrollment, AiAccountantEnrollmentStatus, AiAccountantJob, AiAccountantJobStatus, AiAccountantOperationType, getAllowedOperationsForStatus, toAiAccountantEnrollmentStatus, toAiAccountantJobStatus, toAiAccountantOperationType, } from './entity/aiAccountantCustomer/aiAccountantCustomerState';