@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.
- package/lib/commonPayloadTypes/commonPayload.d.ts +25 -4
- package/lib/entity/tenant/clearAllEpic.d.ts +1 -2
- package/lib/entity/tenant/clearAllEpic.js +0 -2
- package/lib/epic.d.ts +1 -3
- package/lib/epic.js +1 -3
- package/lib/esm/entity/tenant/clearAllEpic.js +0 -2
- package/lib/esm/epic.js +1 -3
- package/lib/esm/index.js +8 -6
- package/lib/esm/reducer.js +0 -3
- package/lib/esm/view/spendManagement/billPay/internationalWireVerification/epics/fetchIntlVerificationFormEpic.js +7 -3
- package/lib/esm/view/spendManagement/billPay/internationalWireVerification/epics/initializeIntlVerificationFormEpic.js +56 -34
- package/lib/esm/view/spendManagement/billPay/internationalWireVerification/epics/submitIntlVerificationEpic.js +2 -7
- package/lib/esm/view/spendManagement/billPay/internationalWireVerification/internationalWireOnboardingDetailsToLocalData.js +164 -0
- package/lib/esm/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationFieldConstants.js +45 -0
- package/lib/esm/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationLocalDataHelpers.js +105 -0
- package/lib/esm/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationPayload.js +55 -8
- package/lib/esm/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationReducer.js +23 -7
- package/lib/esm/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationSelector.js +39 -15
- package/lib/esm/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationSubmitPayload.js +189 -0
- package/lib/index.d.ts +10 -9
- package/lib/index.js +63 -53
- package/lib/reducer.d.ts +0 -3
- package/lib/reducer.js +0 -3
- package/lib/view/spendManagement/billPay/internationalWireVerification/epics/fetchIntlVerificationFormEpic.d.ts +3 -3
- package/lib/view/spendManagement/billPay/internationalWireVerification/epics/fetchIntlVerificationFormEpic.js +6 -2
- package/lib/view/spendManagement/billPay/internationalWireVerification/epics/initializeIntlVerificationFormEpic.d.ts +2 -1
- package/lib/view/spendManagement/billPay/internationalWireVerification/epics/initializeIntlVerificationFormEpic.js +55 -33
- package/lib/view/spendManagement/billPay/internationalWireVerification/epics/submitIntlVerificationEpic.js +2 -7
- package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireOnboardingDetailsToLocalData.d.ts +4 -0
- package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireOnboardingDetailsToLocalData.js +168 -0
- package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationFieldConstants.d.ts +43 -0
- package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationFieldConstants.js +48 -0
- package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationLocalDataHelpers.d.ts +29 -0
- package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationLocalDataHelpers.js +115 -0
- package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationPayload.d.ts +24 -1
- package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationPayload.js +59 -9
- package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationReducer.js +22 -6
- package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationSelector.js +39 -15
- package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationState.d.ts +20 -1
- package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationSubmitPayload.d.ts +32 -0
- package/lib/view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationSubmitPayload.js +194 -0
- package/package.json +1 -1
- package/lib/esm/view/settings/jeScheduleApprovalRules/epic/fetchJEScheduleApprovalRulesEpic.js +0 -21
- package/lib/esm/view/settings/jeScheduleApprovalRules/epic/saveJEScheduleApprovalRulesEpic.js +0 -20
- package/lib/esm/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesPayload.js +0 -1
- package/lib/esm/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesReducer.js +0 -76
- package/lib/esm/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesSelector.js +0 -9
- package/lib/esm/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesState.js +0 -1
- package/lib/view/settings/jeScheduleApprovalRules/epic/fetchJEScheduleApprovalRulesEpic.d.ts +0 -7
- package/lib/view/settings/jeScheduleApprovalRules/epic/fetchJEScheduleApprovalRulesEpic.js +0 -25
- package/lib/view/settings/jeScheduleApprovalRules/epic/saveJEScheduleApprovalRulesEpic.d.ts +0 -6
- package/lib/view/settings/jeScheduleApprovalRules/epic/saveJEScheduleApprovalRulesEpic.js +0 -24
- package/lib/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesPayload.d.ts +0 -29
- package/lib/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesPayload.js +0 -2
- package/lib/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesReducer.d.ts +0 -16
- package/lib/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesReducer.js +0 -80
- package/lib/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesSelector.d.ts +0 -12
- package/lib/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesSelector.js +0 -12
- package/lib/view/settings/jeScheduleApprovalRules/jeScheduleApprovalRulesState.d.ts +0 -8
- 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
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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 {
|
|
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
|
-
|
|
35
|
-
|
|
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
|
-
|
|
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
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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';
|