UNPKG

@adyen/kyc-components

Version:

This guide assumes that you have already an account with Adyen. A legalEntity needs to be created, and you need to have a `legalEntityId` to instatiate a Component.

806 lines (805 loc) 24.9 kB
try { let e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack; n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "417c4542-afe4-4560-ad35-1e1184bd4b2e", e._sentryDebugIdIdentifier = "sentry-dbid-417c4542-afe4-4560-ad35-1e1184bd4b2e"); } catch (e) {} import { i as Typography } from "./translation-BFxyJ1c5.js"; import { t as LegalEntityTypes } from "./legal-entity-type-VIfNYnJP.js"; import { t as localizeDateString } from "./localizeDateString-1A3eC6hp.js"; import { t as Currencies } from "./currency-CfIDpZh9.js"; import { jsx } from "preact/jsx-runtime"; //#region src/utils/formatCurrency.ts var formatCurrency = (amount, currency, locale) => { const { format } = new Intl.NumberFormat(locale, currency ? { style: "currency", currency } : void 0); return format(amount); }; var formatAmountWithCurrency = (amount, currency) => { const formattedAmount = formatCurrency(amount, currency, [ "EUR", "BRL", "ARS", "CHF" ].includes(currency.toUpperCase()) ? "de-DE" : "en-US"); if (!formattedAmount) return; return `${formattedAmount} ${currency}`; }; //#endregion //#region src/components/EFP/tasks/SourceOfFundsDropin/types.ts var additionalDataSchemaKeys = [ "description", "dateOfFundsReceived", "purpose", "relationship", "originatorLegalEntityId", "amount", "financiers", "cryptocurrencyExchange", "dateOfSourceEvent", "website" ]; //#endregion //#region src/components/EFP/tasks/SourceOfFundsDropin/utils.tsx var allowedCurrencies = Object.entries(Currencies).map(([key]) => ({ name: key, id: key })); var TODAY_DATE = (/* @__PURE__ */ new Date()).toISOString().split("T")[0]; var getSchemaForOriginator = (baseSchema, originatorType) => { if (originatorType === "organization") return [...baseSchema, "legalName"]; if (originatorType === "individual") return [ ...baseSchema, "firstName", "lastName" ]; return baseSchema; }; var getAdditionalDataSchemaKeys = (sourceOfFundsType, originatorType) => { switch (sourceOfFundsType) { case "business": return ["amount", "description"]; case "donations": return getSchemaForOriginator([ "dateOfFundsReceived", "purpose", "relationship", "country", "originatorType" ], originatorType); case "inheritance": return getSchemaForOriginator([ "dateOfFundsReceived", "amount", "relationship", "country", "originatorType" ], originatorType); case "thirdPartyFunding": return ["financiers"]; case "cryptocurrencyIncome": return ["cryptocurrencyExchange"]; case "assetSale": return [ "dateOfSourceEvent", "description", "amount" ]; case "gamblingWinnings": return [ "dateOfSourceEvent", "website", "amount" ]; default: return []; } }; var getServiceTranslation = (t, service) => { switch (service) { case "banking": return t(($) => $["businessBankAccounts"]); case "issuing": return t(($) => $["paymentCards"]); case "paymentProcessing": return t(($) => $["acceptingPayments"]); default: return t(($) => $["supportingDocuments"]); } }; var getServiceTranslationSelectTitle = (t, service) => { switch (service) { case "banking": return t(($) => $["forYourBusinessBankAccounts"]); case "issuing": return t(($) => $["forYourPaymentCards"]); case "paymentProcessing": return t(($) => $["whenAcceptingPayments"]); default: return t(($) => $["supportingDocuments"]); } }; var getServiceTranslationKey = (service) => { switch (service) { case "banking": return "bankingService"; case "issuing": return "issuingService"; case "paymentProcessing": return "paymentService"; default: return "supportingDocuments"; } }; var getGettingStartedCardDetails = (sourceOfFundsType, t, data) => { const details = []; sourceOfFundsType?.forEach((type) => { switch (type) { case "amount": details.push({ term: t(($) => $["amount"]), details: data?.amount?.currency && data?.amount?.value ? formatAmountWithCurrency(data.amount.value, data.amount.currency) : "" }); break; case "description": details.push({ term: t(($) => $["description"]), details: data?.description || "" }); break; case "dateOfFundsReceived": details.push({ term: t(($) => $["date"]), details: localizeDateString(data?.dateOfFundsReceived || "", navigator.language) }); break; case "purpose": details.push({ term: t(($) => $["reason"]), details: data?.purpose || "" }); break; case "relationship": details.push({ term: t(($) => $["relationship"]), details: data?.relationship || "" }); break; case "originatorLegalEntityId": details.push({ term: t(($) => $["benefactorDetails"]), details: [data?.legalName ? `${data?.legalName}` : `${data?.firstName} ${data?.lastName}`, /* @__PURE__ */ jsx(Typography, { color: "secondary", children: data?.country || "" }, "location")] }); break; case "financiers": data?.financiers?.map((financier) => { return details.push({ term: t(($) => $["investor"]), details: [ `${financier?.firstName} ${financier?.lastName}`, /* @__PURE__ */ jsx(Typography, { color: "secondary", children: financier?.location || "" }, "location"), /* @__PURE__ */ jsx(Typography, { color: "secondary", children: financier?.amount?.currency && financier?.amount?.value ? formatAmountWithCurrency(financier.amount.value, financier.amount.currency) || "" : "" }, "value") ] }); }); break; case "cryptocurrencyExchange": details.push({ term: t(($) => $["cryptocurrencyExchange"]), details: data?.cryptocurrencyExchange || "" }); break; case "dateOfSourceEvent": details.push({ term: t(($) => $["dateOfSourceEvent"]), details: localizeDateString(data?.dateOfSourceEvent || "", navigator.language) }); break; case "website": details.push({ term: t(($) => $["website"]), details: data?.website || "" }); break; default: break; } }); return details; }; var sourceOfFundsForms = { sourceOfFundsType: { formId: "sourceOfFundsType", formName: "selectASourceOfFunding", fields: ["type"] }, additionalData: { formId: "additionalData", formName: "tellUsMoreAboutThisSource", fields: [...additionalDataSchemaKeys] } }; var getSourceOfFundsRequiredFields = (data) => { const sourceOfFundsType = data?.sourceOfFundsType?.type; const originatorType = data?.additionalData?.originatorType; return { sourceOfFundsType: ["type"], additionalData: getAdditionalDataSchemaKeys(sourceOfFundsType, originatorType) }; }; var typesRequiringAdditionalData = [ "business", "donations", "inheritance", "thirdPartyFunding", "cryptocurrencyIncome", "assetSale", "gamblingWinnings" ]; var getSourceOfFundsRequiredForms = (data) => { return Object.fromEntries(Object.entries(sourceOfFundsForms).filter(([form]) => { if (!data?.type || !typesRequiringAdditionalData.includes(data?.type)) return form !== sourceOfFundsForms.additionalData.formId; return form; })); }; var getInputErrors = ({ formErrors, data, key, value }) => { const isEmpty = value === "" || value === null || value === void 0; let errors = { ...formErrors }; if (isEmpty) errors = { ...formErrors, [key]: "fieldIsRequired" }; else errors = { ...formErrors, [key]: void 0 }; if (["amount", "currency"].includes(key)) { if (data?.amount?.value && data?.amount?.currency) errors = { ...formErrors, amount: void 0 }; if (!data?.amount?.currency) errors = { ...formErrors, amount: "currencyIsRequired" }; if (!data?.amount?.value) errors = { ...formErrors, amount: "amountIsRequired" }; else if (isNaN(data?.amount.value)) errors = { ...formErrors, amount: "pleaseEnterAValidAmount" }; } return errors; }; var getPageHeadings = (type) => { switch (type) { case "cryptocurrencyIncome": return { heading: "cryptocurrencyProceedDetails", description: "tellUsMoreAboutTheCryptocurrency" }; case "assetSale": return { heading: "propertySaleDetails", description: "tellUsMoreAboutTheProperty" }; case "gamblingWinnings": return { heading: "gamblingProceedDetails", description: "tellUsMoreAboutTheGamblingProceeds" }; case "business": return { heading: "businessEarningDetails", description: "tellUsMoreAboutThePreviousBusinessEarnings" }; case "thirdPartyFunding": return { heading: "thirdPartyInvestmentDetails", description: "tellUsMoreAboutTheInvestors" }; case "inheritance": return { heading: "inheritanceDetails", description: "tellUsMoreAboutTheInheritanceProceeds" }; case "donations": return { heading: "giftOrDonationDetails", description: "tellUsMoreAboutTheGiftOrDonationProceeds" }; default: return { heading: "tellUsMoreAboutThisSource" }; } }; var getDocumentRequirements = { loanAgreement: [ "yourBusinessName", "lendersNameAndAddress", "principalAmount", "loanDate", "purposeOfLoan" ], loanStatement: [ "yourBusinessName", "lendersNameAndAddress", "principalAmount", "loanDate", "purposeOfLoan" ], proofOfWalletOwnership: [ "yourBusinessName", "nameOfTheCryptocurrencyExchange", "nameOfTheCoins", "issueDateWithinTheLast12Months" ], transactionStatement: [ "showsYourBusinessName", "showsTheNameOfTheCryptocurrencyExchange", "showsTheNameOfTheCoins", "issueDateWithinTheLast12Months" ], taxFiling: [ "showsYourBusinessName", "showsTheNameOfTheCryptocurrencyExchange", "showsTheNameOfTheCoins", "issueDateWithinTheLast12Months" ], proofOfWinnings: [ "winningProceedAmount", "dateOfWinning", "nameOfCasinoLottery" ], winReport: [ "winningProceedAmount", "dateOfWinning", "nameOfCasinoLottery" ], winLossStatement: [ "winningProceedAmount", "dateOfWinning", "nameOfCasinoLottery" ], taxDeclaration: ["winningProceedAmount", "issuedWithinTheLast12Months"], annualStatements: [ "yourBusinessName", "proofOfAnnualTurnoverAmount", "issueDateWithinTheLast12Months" ], latestTaxFiling: [ "yourBusinessName", "proofOfAnnualTurnoverAmount", "issueDateWithinTheLast12Months" ], letterFromAccountant: [ "yourBusinessName", "proofOfAnnualTurnoverAmount", "signatureAndDateWithinTheLast12Months" ], recentInvoices: ["yourBusinessName", "invoicesFromThe3MostRecentMonths"], bankStatements: [ "yourBusinessName", "issueDate", "banksLogoAndName", "allStatementsFrom3MostRecentMonths" ], payslips: [ "employersName", "issueDate", "banksLogoAndName", "allPayslipsFrom3MostRecentMonths" ], contractSpecifyingDividends: [ "theBusinessName", "termLengthAndDividendYield", "namesOfInvolvedParties" ], latestTaxReturn: ["theBusinessName", "reportedDividendAmount"], investmentCertificate: ["theBusinessName", "termLengthAndDividendYield"], brokerStatements: [ "theBrokerageName", "dividendAmount", "issueDateWithinTheLast3Months", "namesOfInvolvedParties" ], investorContract: [ "yourBusinessName", "nameAddressSignatureOfAllInvestors", "investmentAmount", "fundDepositDate" ], investorMemo: [ "yourBusinessName", "nameAddressSignatureOfAllInvestors", "investmentAmount", "fundDepositDate" ], notarizedStatement: [ "yourBusinessName", "nameAddressSignatureOfAllInvestors", "investmentAmount", "fundDepositDate" ], partnershipAgreement: [ "yourBusinessName", "nameAddressSignatureOfAllInvestors", "investmentAmount", "fundDepositDate" ], proofOfOwnership: [ "descriptionOfProperty", "netProceedAmount", "fundDepositDate", "propertyAddress" ], letterFromAttorney: [ "descriptionOfProperty", "netProceedAmount", "fundDepositDate", "propertyAddress" ], saleContract: [ "descriptionOfProperty", "netProceedAmount", "fundDepositDate", "propertyAddress" ], taxDeclarationProperty: [ "descriptionOfProperty", "netProceedAmount", "fundDepositDate", "propertyAddress" ], titleDeed: [ "descriptionOfProperty", "netProceedAmount", "fundDepositDate", "propertyAddress" ], rentalAgreementOrLease: [ "namesOfLandlordAndTenant", "propertyAddress", "rentAmount" ], proofOfOwnershipRent: ["yourName", "propertyAddress"], giftOrDonationAgreement: [ "donorsName", "fundTransferDate", "fundDepositAmount" ], royaltyAgreement: [ "descriptionOfIntellectualProperty", "royaltyAmount", "agreementPeriod" ], taxDocuments: ["royaltyAmount", "provideMostRecentYearAvailable"], certificateOfInheritance: [ "decedentsName", "inheritanceAmount", "fundDepositDate", "estateAttorneysName" ], grantOfProbate: [ "decedentsName", "inheritanceAmount", "fundDepositDate", "estateAttorneysName" ], letterFromAttorneyOrNotary: [ "decedentsName", "inheritanceAmount", "fundDepositDate", "estateAttorneysName" ], signedCopyOfTheWill: [ "decedentsName", "inheritanceAmount", "fundDepositDate", "estateAttorneysName" ], pensionSlip: [ "yourFullName", "previousEmployersName", "pensionPaymentAmount" ], letterFromPreviousEmployer: [ "yourFullName", "previousEmployersName", "pensionPaymentAmountOrTotalValue" ], pensionStatement: [ "yourFullName", "previousEmployersName", "pensionPaymentAmountOrTotalValue" ], courtOrder: [ "yourFullName", "totalSettlementAmount", "fundDepositDate" ], letterFromAttorneyInsurance: [ "yourFullName", "totalSettlementAmount", "fundDepositDate" ], letterFromInsurer: [ "yourFullName", "totalSettlementAmount", "fundDepositDate" ], confirmationOfGrantOrSubsidy: [ "benefactorsName", "subsidyOrGrantAmount", "timePeriodIfApplicable" ] }; var getDocumentLists = (sourceOfFundsType) => { switch (sourceOfFundsType) { case "loans": return ["loanAgreement", "loanStatement"]; case "gamblingWinnings": return [ "proofOfWinnings", "winReport", "winLossStatement", "taxDeclaration" ]; case "cryptocurrencyIncome": return [ "proofOfWalletOwnership", "transactionStatement", "taxFiling" ]; case "business": return [ "annualStatements", "latestTaxFiling", "letterFromAccountant", "recentInvoices" ]; case "employment": return ["bankStatements", "payslips"]; case "dividendIncome": return [ "contractSpecifyingDividends", "latestTaxReturn", "investmentCertificate", "brokerStatements" ]; case "thirdPartyFunding": return [ "investorContract", "investorMemo", "notarizedStatement", "partnershipAgreement" ]; case "assetSale": return [ "proofOfOwnership", "letterFromAttorney", "saleContract", "taxDeclarationProperty", "titleDeed" ]; case "rentalIncome": return ["rentalAgreementOrLease", "proofOfOwnership"]; case "donations": return ["giftOrDonationAgreement"]; case "royaltyIncome": return ["royaltyAgreement", "taxDocuments"]; case "inheritance": return [ "certificateOfInheritance", "grantOfProbate", "letterFromAttorneyOrNotary", "signedCopyOfTheWill" ]; case "pensionIncome": return [ "pensionSlip", "letterFromPreviousEmployer", "pensionStatement" ]; case "insuranceSettlement": return [ "courtOrder", "letterFromAttorneyInsurance", "letterFromInsurer" ]; case "financialAid": return ["confirmationOfGrantOrSubsidy"]; default: return []; } }; var parseSOFDocumentDescription = (t, documentDescription) => { if (!documentDescription || documentDescription.trim() === "" || !documentDescription.startsWith("$")) return; const [servicePart, typePart] = documentDescription.split("--"); const selectedService = servicePart.split(":")[1]; const documentType = typePart.split(":")[1]; const parsed = { selectedService: getServiceTranslation(t, selectedService || ""), documentType: t(($) => $[documentType]) }; return `${parsed.selectedService} (${parsed.documentType})`; }; var MISSING_DATA_SOF_UPLOAD_CODE = "2_8224"; var parseOriginatorDetails = (originatorDetails, businessLine) => { const copiedBusinessLine = { ...businessLine }; if (copiedBusinessLine.sourceOfFunds) { if (originatorDetails.organization) { copiedBusinessLine.sourceOfFunds.legalName = originatorDetails.organization.legalName; copiedBusinessLine.sourceOfFunds.country = originatorDetails.organization?.registeredAddress?.country; copiedBusinessLine.sourceOfFunds.originatorType = "organization"; } if (originatorDetails.individual) { copiedBusinessLine.sourceOfFunds.firstName = originatorDetails.individual.name?.firstName; copiedBusinessLine.sourceOfFunds.lastName = originatorDetails.individual.name?.lastName; copiedBusinessLine.sourceOfFunds.country = originatorDetails.individual.residentialAddress?.country; copiedBusinessLine.sourceOfFunds.originatorType = "individual"; } } return copiedBusinessLine; }; var getSourceOfFundsPayload = (sofType, additionalData) => { switch (sofType) { case "business": return { adyenProcessedFunds: false, type: "business", description: additionalData?.description, amount: { currency: additionalData?.amount?.currency ?? "USD", value: additionalData?.amount?.value ?? 0 } }; case "employment": return { adyenProcessedFunds: false, type: "employment" }; case "donations": return { adyenProcessedFunds: false, type: "donations", dateOfFundsReceived: additionalData?.dateOfFundsReceived, purpose: additionalData?.purpose, relationship: additionalData?.relationship, originatorLegalEntityId: additionalData?.originatorLegalEntityId }; case "inheritance": return { adyenProcessedFunds: false, type: "inheritance", dateOfFundsReceived: additionalData?.dateOfFundsReceived, amount: additionalData?.amount, relationship: additionalData?.relationship, originatorLegalEntityId: additionalData?.originatorLegalEntityId }; case "financialAid": return { adyenProcessedFunds: false, type: "financialAid" }; case "rentalIncome": return { adyenProcessedFunds: false, type: "rentalIncome" }; case "dividendIncome": return { adyenProcessedFunds: false, type: "dividendIncome" }; case "royaltyIncome": return { adyenProcessedFunds: false, type: "royaltyIncome" }; case "pensionIncome": return { adyenProcessedFunds: false, type: "pensionIncome" }; case "insuranceSettlement": return { adyenProcessedFunds: false, type: "insuranceSettlement" }; case "thirdPartyFunding": return { adyenProcessedFunds: false, type: "thirdPartyFunding", financiers: additionalData?.financiers }; case "cryptocurrencyIncome": return { adyenProcessedFunds: false, type: "cryptocurrencyIncome", cryptocurrencyExchange: additionalData?.cryptocurrencyExchange }; case "assetSale": return { adyenProcessedFunds: false, type: "assetSale", cryptocurrencyExchange: additionalData?.cryptocurrencyExchange, dateOfSourceEvent: additionalData?.dateOfSourceEvent, description: additionalData?.description, amount: additionalData?.amount }; case "loans": return { adyenProcessedFunds: false, type: "loans" }; case "gamblingWinnings": return { adyenProcessedFunds: false, type: "gamblingWinnings", dateOfSourceEvent: additionalData?.dateOfSourceEvent, website: additionalData?.website && !additionalData.website.startsWith("http://") && !additionalData.website.startsWith("https://") ? `https://${additionalData.website}` : additionalData?.website, amount: additionalData?.amount }; default: return { adyenProcessedFunds: true }; } }; var parseSofOriginatorPayload = (additionalData) => { let sofOriginator; if (additionalData?.originatorType === "individual") sofOriginator = { type: LegalEntityTypes.INDIVIDUAL, individual: { name: { firstName: additionalData?.firstName ?? "", lastName: additionalData?.lastName ?? "" }, residentialAddress: { country: additionalData?.country } } }; else sofOriginator = { type: LegalEntityTypes.ORGANIZATION, organization: { legalName: additionalData?.legalName ?? "", registeredAddress: { country: additionalData?.country } } }; return sofOriginator; }; var formatDateForInput = (isoDateString) => { if (!isoDateString) return ""; try { const datePart = isoDateString.split("T")[0]; if (/^\d{4}-\d{2}-\d{2}$/.test(datePart)) return datePart; return ""; } catch { return ""; } }; var getSofCardDetails = (t, sourceOfFunds) => { if (!sourceOfFunds) return ""; if (sourceOfFunds?.adyenProcessedFunds) return t(($) => $["transactionsOnThisPlatform"]); if (sourceOfFunds?.type) return sourceOfFunds?.type ? t(($) => $[sofCategoryItemMapper[sourceOfFunds.type]]) : ""; return ""; }; var ALLOWED_SOF_SERVICES = ["issuing", "banking"]; /** * Returns business lines that require SoF (based on ALLOWED_SOF_SERVICES) */ var getApplicableBusinessLines = (businessLines) => { return businessLines.filter((bl) => ALLOWED_SOF_SERVICES.includes(bl.service)); }; /** * Deep comparison of SoF data. * Returns true if all business-relevant fields are identical. */ var areSourceOfFundsEqual = (sof1, sof2) => { const type1 = sof1.sourceOfFundsType?.type; if (type1 !== sof2.sourceOfFundsType?.type) return false; if (type1 === "donations" || type1 === "inheritance") { const ad1 = sof1.additionalData || {}; const ad2 = sof2.additionalData || {}; if (ad1.originatorType !== ad2.originatorType) return false; if (ad1.originatorType === "individual") return ad1.firstName === ad2.firstName && ad1.lastName === ad2.lastName && ad1.country === ad2.country && ad1.relationship === ad2.relationship && ad1.purpose === ad2.purpose && ad1.dateOfFundsReceived === ad2.dateOfFundsReceived; else if (ad1.originatorType === "organization") return ad1.legalName === ad2.legalName && ad1.country === ad2.country && ad1.relationship === ad2.relationship && ad1.purpose === ad2.purpose && ad1.dateOfFundsReceived === ad2.dateOfFundsReceived; return false; } const ad1 = sof1.additionalData || {}; const ad2 = sof2.additionalData || {}; const keys1 = Object.keys(ad1); const keys2 = Object.keys(ad2); if (keys1.length !== keys2.length) return false; return keys1.every((key) => { const val1 = ad1[key]; const val2 = ad2[key]; return JSON.stringify(val1) === JSON.stringify(val2); }); }; var SOF_INVALID_INPUT_ERROR_CODES = ["1_93", "1_94"]; var getRelevantErrors = (problems, targetCodes) => { if (!problems) return false; return problems.flatMap((problem) => (problem.verificationErrors || []).filter((error) => targetCodes.includes(error.code) || (error.subErrors || []).some((sub) => targetCodes.includes(sub.code)))); }; var getUniqueRemediationActions = (error) => { return [...error.remediatingActions || [], ...error.subErrors?.flatMap((sub) => sub.remediatingActions || []) || []].filter((action, i, arr) => arr.findIndex((a) => a.code === action.code) === i); }; var sofCategoryItemMapper = { business: "otherBusinessEarnings", employment: "employmentWages", cryptocurrencyIncome: "cryptocurrency", dividendIncome: "dividends", loans: "loans", financialAid: "financialAid", thirdPartyFunding: "thirdPartyFunding", rentalIncome: "rentalIncome", royaltyIncome: "royaltyIncome", gamblingWinnings: "gambling", inheritance: "inheritance", pensionIncome: "pensionIncome", insuranceSettlement: "insuranceSettlement", assetSale: "propertySale", donations: "giftOrDonation" }; /** * Prepares additional data for originator creation/update. * When useSameAs is true, appends the originatorLegalEntityId from the source * so that createOrUpdateOriginator can update the existing LE instead of creating a new one. */ var getAdditionalDataForOriginator = (additionalData, sourceAdditionalData, useSameAs) => { if (useSameAs) return { ...additionalData, originatorLegalEntityId: sourceAdditionalData?.originatorLegalEntityId }; return additionalData; }; //#endregion export { formatCurrency as A, getSourceOfFundsRequiredForms as C, parseSofOriginatorPayload as D, parseSOFDocumentDescription as E, sofCategoryItemMapper as O, getSourceOfFundsRequiredFields as S, parseOriginatorDetails as T, getServiceTranslation as _, allowedCurrencies as a, getSofCardDetails as b, getAdditionalDataForOriginator as c, getDocumentLists as d, getDocumentRequirements as f, getRelevantErrors as g, getPageHeadings as h, TODAY_DATE as i, formatAmountWithCurrency as k, getAdditionalDataSchemaKeys as l, getInputErrors as m, MISSING_DATA_SOF_UPLOAD_CODE as n, areSourceOfFundsEqual as o, getGettingStartedCardDetails as p, SOF_INVALID_INPUT_ERROR_CODES as r, formatDateForInput as s, ALLOWED_SOF_SERVICES as t, getApplicableBusinessLines as u, getServiceTranslationKey as v, getUniqueRemediationActions as w, getSourceOfFundsPayload as x, getServiceTranslationSelectTitle as y };