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.

189 lines (188 loc) 9.69 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] = "1eb8abf2-7cbe-4bd9-ae40-71960203ed18", e._sentryDebugIdIdentifier = "sentry-dbid-1eb8abf2-7cbe-4bd9-ae40-71960203ed18"); } catch (e) {} import { t as LegalEntityTypes } from "./legal-entity-type-VIfNYnJP.js"; import { t as getLegalEntityCountry } from "./getLegalEntityCountry-C6bSV6sB.js"; import { t as CountryCodes } from "./country-code-CX5KqMBr.js"; import { t as getCapabilities } from "./processCapabilities-DlZY9-Jc.js"; import { d as hasOwnEntityAssociationOfType } from "./entityAssociationUtil-BEzUdPbm.js"; import { t as CompanyTypesValues } from "./company-types-value-BYTAKfjo.js"; import { t as allowIndividualWithoutSoleProp } from "./accountHolderUtils-BYe8xPFy.js"; import { r as SOLE_PROP_COUNTRIES } from "./Individual.rules-DvMQmx90.js"; import { t as ALLOWED_UNINCORPORATED_PARTNERSHIP_COUNTRIES } from "./types-tKfEYBOO.js"; //#region src/components/Shared/forms/BusinessTypeSelection/utils.ts var TRUST_COUNTRIES = [CountryCodes.Australia, CountryCodes.NewZealand]; var BUSINESS_BANK_ACCOUNT_COUNTRIES = [ CountryCodes.UnitedStates, CountryCodes.UnitedKingdom, CountryCodes.Netherlands, CountryCodes.France, CountryCodes.Germany, CountryCodes.Spain, CountryCodes.Belgium ]; /** * this is messy business logic * we determine the legal entity type by the account holder * however we have partnershipIncorporated; * which shares the same account holder type as company (a subtype of company) * we have to force the result of this function to 'legalArrangement' should organization.type is partnershipIncorporated * could possibly be more of such cases in the future. * * @param businessTypeItems - list of BusinessTypeModel * @param accountHolder - the entity we payout to * @param legalEntityType - the type of legal entity * @param companyTypesValue - the subtype of an organization see CompanyValuesType */ var organizationTypesToSkipCompanyStructureForm = ["partnershipIncorporated", "associationIncorporated"]; var getBusinessType = (businessTypeItems, country, accountHolder, legalEntityType, companyTypesValue, capabilities = []) => { const findBusinessType = (id) => businessTypeItems[id]; if (organizationTypesToSkipCompanyStructureForm.includes(companyTypesValue ?? "")) return businessTypeItems.legalArrangement; if (accountHolder) { if ([ "aTrust", "partnershipUnincorporated", "anAssociation" ].includes(accountHolder)) return businessTypeItems.legalArrangement; return Object.values(businessTypeItems).find((businessTypeItem) => businessTypeItem.accountHolder === accountHolder); } switch (legalEntityType) { case LegalEntityTypes.ORGANIZATION: return findBusinessType("company"); case LegalEntityTypes.INDIVIDUAL: if (allowIndividualWithoutSoleProp(capabilities)) return findBusinessType("individual"); if (SOLE_PROP_COUNTRIES.includes(country)) return findBusinessType("soleProprietorship"); return findBusinessType("company"); default: } }; var businessTypeMetadata = { individual: { id: "individual", accountHolder: "myName", name: "individual", description: "youAreNotSoleProprietorAndUseBankAccount" }, soleProprietorship: { id: "soleProprietorship", accountHolder: "mySoleProprietorName", name: "soleProprietorship", description: "youAreRegisteredSoleProprietorAndUseBankAccount" }, company: { id: "company", accountHolder: "theCompanyIWorkFor", name: "company", description: "yourBusinessIsRegisteredAsASeparateLegalEntityFromItsOwners" }, legalArrangement: { id: "legalArrangement", name: "trustPartnershipOrAssociation", description: "youAreIndividualOrCompanyAndUseBankAccountInNameOfTrustPartnershipOrAssociation" } }; var businessTypeIcons = { individual: "user", soleProprietorship: "user-business", company: "company-2", legalArrangement: "users-3" }; var createAllowBusinessTypeOptionDecider = (country, capabilities) => (option) => { switch (option) { case "individual": return allowIndividualWithoutSoleProp(capabilities); case "soleProprietorship": return SOLE_PROP_COUNTRIES.includes(country); default: return true; } }; var getBusinessTypeOptionsAndMetadata = (country, capabilities) => { const shouldAllowBusinessTypeOption = createAllowBusinessTypeOptionDecider(country, capabilities); const allowedBusinessTypeMetadata = {}; Object.entries(businessTypeMetadata).forEach(([key, value]) => { const businessType = key; if (shouldAllowBusinessTypeOption(businessType)) allowedBusinessTypeMetadata[businessType] = value; }); const adjustedBusinessTypeMetadata = { ...allowedBusinessTypeMetadata, ...!TRUST_COUNTRIES.includes(country) ? { legalArrangement: { id: "legalArrangement", name: "partnershipOrAssociation", description: "youAreIndividualOrCompanyAndUseBankAccountInNameOfPartnershipOrAssociation" } } : {} }; if (capabilities?.includes("issueBankAccount") && BUSINESS_BANK_ACCOUNT_COUNTRIES.includes(country)) { delete adjustedBusinessTypeMetadata?.legalArrangement; delete adjustedBusinessTypeMetadata?.individual; } return adjustedBusinessTypeMetadata; }; var legalArrangementMetadata = { aTrust: { id: "aTrust", accountHolder: "aTrust", name: "trust", description: "youAreTrusteeManagingTheTrustForBeneficiaries" }, partnershipIncorporated: { id: "partnershipIncorporated", accountHolder: "theCompanyIWorkFor", name: "partnershipIncorporated", description: "partnershipIncorporatedDescription" }, partnershipUnincorporated: { id: "partnershipUnincorporated", accountHolder: "anUnincorporatedPartnership", name: "partnershipUnincorporated", description: "partnershipUnincorporatedDescription" }, associationIncorporated: { id: "associationIncorporated", accountHolder: "theCompanyIWorkFor", name: "associationIncorporated", description: "yourAssociationIsRegisteredItWasSetUpForNonCommercialPurpose" } }; var legalArragementOptions = Object.keys(legalArrangementMetadata); var getLegalArrangementOptions = (country) => legalArragementOptions.filter((option) => { if (option === "partnershipIncorporated" || option === "associationIncorporated") return true; if (option === "partnershipUnincorporated") return ALLOWED_UNINCORPORATED_PARTNERSHIP_COUNTRIES.includes(country); return TRUST_COUNTRIES.includes(country); }); var useSelectionOptions = (legalEntityResponse) => { const country = getLegalEntityCountry(legalEntityResponse); return { adjustedBusinessTypeMetadata: getBusinessTypeOptionsAndMetadata(country, getCapabilities(legalEntityResponse)), legalArrangementOptions: getLegalArrangementOptions(country) }; }; var mapLegalArrangementOptionToCompanyTypesValue = (legalArrangement) => { switch (legalArrangement) { case "partnershipIncorporated": return CompanyTypesValues.INCORPORATED_PARTNERSHIP; case "associationIncorporated": return CompanyTypesValues.INCORPORATED_ASSOCIATION; default: return; } }; var determineOrganizationTypeToUpdate = (targetLegalArrangement, currentCompanyTypeValue) => { if (targetLegalArrangement === "aTrust") return; if (!targetLegalArrangement) { if (currentCompanyTypeValue === CompanyTypesValues.INCORPORATED_ASSOCIATION || currentCompanyTypeValue === CompanyTypesValues.INCORPORATED_PARTNERSHIP) return CompanyTypesValues.PRIVATE_COMPANY; } return mapLegalArrangementOptionToCompanyTypesValue(targetLegalArrangement); }; var getDefaultLegalArrangementOrSuborganizationType = (legalEntityResponse, accountHolder) => { const entityAssociations = legalEntityResponse?.entityAssociations; const suborganizationType = legalEntityResponse?.organization?.type; if (hasOwnEntityAssociationOfType(LegalEntityTypes.TRUST, entityAssociations, legalEntityResponse?.id) || accountHolder === "aTrust") return "aTrust"; if (hasOwnEntityAssociationOfType(LegalEntityTypes.UNINCORPORATED_PARTNERSHIP, entityAssociations, legalEntityResponse?.id) || accountHolder === "anUnincorporatedPartnership") return "partnershipUnincorporated"; if (suborganizationType === CompanyTypesValues.INCORPORATED_PARTNERSHIP) return "partnershipIncorporated"; if (suborganizationType === CompanyTypesValues.INCORPORATED_ASSOCIATION) return "associationIncorporated"; }; var getTargetLegalEntityType = (businessType, legalArrangement, trusteeType, currentLegalEntityType) => { const trustOrUnincorporatedPartnership = legalArrangement === "aTrust" || legalArrangement === "partnershipUnincorporated"; if (businessType === "legalArrangement" && trustOrUnincorporatedPartnership && trusteeType === "company" || businessType === "company") return LegalEntityTypes.ORGANIZATION; if (businessType === "legalArrangement" && trustOrUnincorporatedPartnership && trusteeType === "individual" || businessType === "individual" || businessType === "soleProprietorship") return LegalEntityTypes.INDIVIDUAL; if (legalArrangement && isLegalArrangementOrganizationSubtype(legalArrangement)) return LegalEntityTypes.ORGANIZATION; return currentLegalEntityType; }; var isLegalArrangementOrganizationSubtype = (legalArrangementOption) => legalArrangementOption === "partnershipIncorporated" || legalArrangementOption === "associationIncorporated"; //#endregion export { getTargetLegalEntityType as a, useSelectionOptions as c, getDefaultLegalArrangementOrSuborganizationType as i, determineOrganizationTypeToUpdate as n, legalArrangementMetadata as o, getBusinessType as r, organizationTypesToSkipCompanyStructureForm as s, businessTypeIcons as t };