commit d19de01aab70596c6944c4f0a6be2059e10d80a6
parent 8fabd3c811f95179650e621994f82335c9b7733d
Author: Sebastian <sebasjm@gmail.com>
Date: Sun, 5 Jan 2025 15:53:04 -0300
gana forms are now defined in code
Diffstat:
18 files changed, 2917 insertions(+), 2326 deletions(-)
diff --git a/packages/kyc-ui/src/forms/VQF_902_1.ts b/packages/kyc-ui/src/forms/VQF_902_1.ts
@@ -0,0 +1,498 @@
+import {
+ InternationalizationAPI,
+ DoubleColumnForm,
+ UIHandlerId,
+ SelectUiChoice,
+} from "@gnu-taler/web-util/browser";
+import { TalerAmlAttributes } from "./taler_aml_attributes.js";
+
+export function countryList(i18n: InternationalizationAPI): SelectUiChoice[] {
+ return [
+ { label: i18n.str`AR`, value: "AR" },
+ { label: i18n.str`DE`, value: "DE" },
+ ];
+}
+
+export function VQF_902_1(i18n: InternationalizationAPI): DoubleColumnForm {
+ return {
+ type: "double-column",
+ design: [
+ {
+ title: i18n.str`This form was completed by`,
+ fields: [
+ {
+ id: "OFFICER_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Full name`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "FORM_FILLING_DATE" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Date`,
+ // gana_type: "AbsoluteDateTime",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy HH:mm:ss",
+ pattern: "dd/MM/yyyy HH:mm:ss",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "CUSTOMER_ID" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Customer`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Information on customer`,
+ description: i18n.str`The customer is the person with whom the member concludes the contract with regard to the financial service provided (civil law). Does the member act as director of a domiciliary company, this domiciliary company is the customer.`,
+ fields: [
+ {
+ id: "CUSTOMER_NATURAL_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Full name`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ {
+ id: "CUSTOMER_NATURAL_RESIDENTIAL" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Residential address`,
+ // gana_type: "ResidentialAddress",
+ type: "textArea",
+ required: true,
+ },
+ {
+ id: "CUSTOMER_NATURAL_PHONE" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Telephone`,
+ // gana_type: "Phone",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "CUSTOMER_NATURAL_EMAIL" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`E-mail`,
+ // gana_type: "Email",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "CUSTOMER_NATURAL_BIRTHDATE" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Date of birth`,
+ // gana_type: "AbsoluteDate",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy",
+ pattern: "dd/MM/yyyy",
+ required: true,
+ },
+ {
+ id: "CUSTOMER_NATURAL_NATIONALITY" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Nationality`,
+ // gana_type: "CountryCode",
+ type: "selectOne",
+ choices: countryList(i18n),
+ required: true,
+ },
+ {
+ id: "CUSTOMER_NATURAL_NATIONAL_ID" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Identification document`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ {
+ id: "CUSTOMER_NATURAL_NATIONAL_ID_COPY" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Picture of identification document`,
+ // gana_type: "File",
+ type: "file",
+ accept: "application/pdf",
+ required: true,
+ },
+ {
+ id: "CUSTOMER_NATURAL_COMPANY_NAME" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Company name`,
+ // gana_type: "String",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "CUSTOMER_NATURAL_REGISTERED_OFFICE" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Registered office`,
+ // gana_type: "String",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "CUSTOMER_NATURAL_COMPANY_ID" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Company identification document`,
+ // gana_type: "String",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "CUSTOMER_NATURAL_COMPANY_ID_COPY" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Picture of company identification document`,
+ // gana_type: "File",
+ type: "file",
+ accept: "application/pdf",
+ required: false,
+ },
+ {
+ id: "CUSTOMER_ENTITY_COMPANY_NAME" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Company name`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ {
+ id: "CUSTOMER_ENTITY_ADDRESS" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Domicile`,
+ // gana_type: "BusinessAddress",
+ type: "textArea",
+ required: true,
+ },
+ {
+ id: "CUSTOMER_ENTITY_CONTACT_PERSON_NAME" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Contact person`,
+ // gana_type: "String",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "CUSTOMER_ENTITY_PHONE" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Telephone`,
+ // gana_type: "Phone",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "CUSTOMER_ENTITY_EMAIL" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`E-mail`,
+ // gana_type: "Email",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "CUSTOMER_ENTITY_ID" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Identification document`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ {
+ id: "CUSTOMER_ENTITY_ID_COPY" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Picutre of identification document`,
+ // gana_type: "File",
+ type: "file",
+ accept: "application/pdf",
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Information on the natural persons who establish the business relationship for legal entities and partnerships`,
+ description: i18n.str`For legal entities and partnerships the identity of the natural persons who establish the business relationship must be verified.`,
+ fields: [
+ {
+ id: "FOUNDER_LIST" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Founders`,
+ // gana_type: "Form<VQF_902_1_founder>[]",
+ type: "array",
+ labelFieldId:
+ "FOUNDER_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_1_founder as UIHandlerId,
+ fields: [
+ {
+ id: "FOUNDER_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_1_founder as UIHandlerId,
+ label: i18n.str`Full name`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ {
+ id: "FOUNDER_RESIDENTIAL_ADDRESS" satisfies keyof TalerAmlAttributes.VQF_902_1_founder as UIHandlerId,
+ label: i18n.str`Residential address`,
+ // gana_type: "ResidentialAddress",
+ type: "textArea",
+ required: true,
+ },
+ {
+ id: "FOUNDER_BIRTHDATE" satisfies keyof TalerAmlAttributes.VQF_902_1_founder as UIHandlerId,
+ label: i18n.str`Date of birth`,
+ // gana_type: "AbsoluteDate",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy",
+ pattern: "dd/MM/yyyy",
+ required: true,
+ },
+ {
+ id: "FOUNDER_NATIONALITY" satisfies keyof TalerAmlAttributes.VQF_902_1_founder as UIHandlerId,
+ label: i18n.str`Nationality`,
+ // gana_type: "CountryCode",
+ type: "selectOne",
+ choices: countryList(i18n),
+ required: true,
+ },
+ {
+ id: "FOUNDER_AUTHORIZATION_TYPE" satisfies keyof TalerAmlAttributes.VQF_902_1_founder as UIHandlerId,
+ label: i18n.str`Type of authorization`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ {
+ id: "FOUNDER_NATIONAL_ID" satisfies keyof TalerAmlAttributes.VQF_902_1_founder as UIHandlerId,
+ label: i18n.str`Identification document`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ {
+ id: "FOUNDER_NATIONAL_COPY" satisfies keyof TalerAmlAttributes.VQF_902_1_founder as UIHandlerId,
+ label: i18n.str`Picutre of identification document`,
+ // gana_type: "File",
+ type: "file",
+ accept: "application/pdf",
+
+ required: true,
+ },
+ {
+ id: "FOUNDER_POWER_OF_ATTORNEY" satisfies keyof TalerAmlAttributes.VQF_902_1_founder as UIHandlerId,
+ label: i18n.str`Power of attorney arrangements`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ ],
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Acceptance of business relationship`,
+ fields: [
+ {
+ id: "ACCEPTANCE_DATE" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Date`,
+ // gana_type: "AbsoluteDate",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy",
+ pattern: "dd/MM/yyyy",
+ required: false,
+ },
+ {
+ id: "ACCEPTANCE_METHOD" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Accepted by`,
+ // gana_type: "String",
+ type: "choiceStacked",
+ choices: [
+ {
+ value:
+ "FACE_TO_FACE" satisfies TalerAmlAttributes.VQF_902_1["ACCEPTANCE_METHOD"],
+ label: i18n.str`Face to face`,
+ },
+ {
+ value:
+ "AUTHENTICATED_COPY" satisfies TalerAmlAttributes.VQF_902_1["ACCEPTANCE_METHOD"],
+ label: i18n.str`Authenticated copy`,
+ },
+ {
+ value:
+ "RESIDENTIAL_ADDRESS_VALIDATED" satisfies TalerAmlAttributes.VQF_902_1["ACCEPTANCE_METHOD"],
+ label: i18n.str`Residentail address validated`,
+ },
+ ],
+ required: false,
+ },
+ {
+ id: "ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Type of correspondence service`,
+ // gana_type: "String",
+ type: "choiceStacked",
+ choices: [
+ {
+ value:
+ "HOLD_AT_BANK" satisfies TalerAmlAttributes.VQF_902_1["ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE"],
+ label: i18n.str`Hold at a bank`,
+ },
+ {
+ value:
+ "TO_A_THIRD_PARTY" satisfies TalerAmlAttributes.VQF_902_1["ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE"],
+ label: i18n.str`To a third party`,
+ },
+ {
+ value:
+ "TO_THE_CUSTOMER" satisfies TalerAmlAttributes.VQF_902_1["ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE"],
+ label: i18n.str`To the customer`,
+ },
+ {
+ value:
+ "TO_THE_MEMBER" satisfies TalerAmlAttributes.VQF_902_1["ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE"],
+ label: i18n.str`To the member`,
+ },
+ ],
+ allowFreeForm: true,
+ required: false,
+ },
+ {
+ id: "ACCEPTANCE_LANGUAGE" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Language`,
+ // gana_type: "LangCode",
+ type: "selectOne",
+ choices: [
+ {
+ value: "AR",
+ label: "ARG",
+ },
+ {
+ value: "DE",
+ label: "German",
+ },
+ ],
+ required: false,
+ },
+ {
+ id: "ACCEPTANCE_FURTHER_INFO" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Further information`,
+ // gana_type: "String",
+ type: "textArea",
+ required: false,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Information on the beneficial owner of the assets and/or controlling person`,
+ description: i18n.str`Establishment of the beneficial owner of the assets and/or controlling person`,
+ fields: [
+ {
+ id: "CUSTOMER_TYPE" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Customer type`,
+ // gana_type: "String",
+ type: "choiceStacked",
+ choices: [
+ {
+ value:
+ "FOUNDATION" satisfies TalerAmlAttributes.VQF_902_1["CUSTOMER_TYPE"],
+ label: i18n.str`Foundation`,
+ },
+ {
+ value:
+ "LEGAL_ENTITY" satisfies TalerAmlAttributes.VQF_902_1["CUSTOMER_TYPE"],
+ label: i18n.str`Legal entity`,
+ },
+ {
+ value:
+ "LIFE_INSURANCE" satisfies TalerAmlAttributes.VQF_902_1["CUSTOMER_TYPE"],
+ label: i18n.str`Life insurance`,
+ },
+ {
+ value:
+ "NATURAL" satisfies TalerAmlAttributes.VQF_902_1["CUSTOMER_TYPE"],
+ label: i18n.str`Natural person`,
+ },
+ {
+ value:
+ "OTHER" satisfies TalerAmlAttributes.VQF_902_1["CUSTOMER_TYPE"],
+ label: i18n.str`Other`,
+ },
+ {
+ value:
+ "TRUST" satisfies TalerAmlAttributes.VQF_902_1["CUSTOMER_TYPE"],
+ label: i18n.str`Trust`,
+ },
+ ],
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Evaluation with regard to embargo procedures/terrorism lists on establishing the business relationship`,
+ description: i18n.str`Verification whether the customer, beneficial owners of the assets, controlling persons, authorized representatives or other involved persons are listed on an embargo/terrorism list (date of verification/result)`,
+ fields: [
+ {
+ id: "EMBARGO_TERRORISM_INFO" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Embargo information`,
+ // gana_type: "Paragraph",
+ type: "textArea",
+ required: false,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Relationship`,
+ fields: [
+ {
+ id: "RELATIONSHIP_TYPE" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Type of business relationship`,
+ // gana_type: "'MONEY_EXCHANGE' | 'MONEY_ASSET_TRANSFER' | String",
+ type: "choiceStacked",
+ choices: [
+ {
+ value:
+ "MONEY_EXCHANGE" satisfies TalerAmlAttributes.VQF_902_1["RELATIONSHIP_TYPE"],
+ label: i18n.str`Money exchange`,
+ },
+ {
+ value:
+ "MONEY_ASSET_TRANSFER" satisfies TalerAmlAttributes.VQF_902_1["RELATIONSHIP_TYPE"],
+ label: i18n.str`Money asset transfer`,
+ },
+ ],
+ allowFreeForm: true,
+ required: false,
+ },
+ {
+ id: "RELATIONSHIP_PURPOSE" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Purpose of the business relationship`,
+ // gana_type: "Paragraph",
+ type: "textArea",
+ required: false,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Enclosures`,
+ fields: [
+ {
+ id: "ENCLOSURE_CUSTOMER_DOCUMENTS" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Customer identification documents`,
+ // gana_type: "Boolean",
+ type: "toggle",
+ required: false,
+ },
+ {
+ id: "ENCLOSURE_IDENTIFICATION_DOCUMENTS" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Customer identification documents`,
+ // gana_type: "Boolean",
+ type: "toggle",
+ required: false,
+ },
+ {
+ id: "ENCLOSURE_BENEFICIAL_OWNER" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Customer identification documents`,
+ // gana_type: "Boolean",
+ type: "toggle",
+ required: false,
+ },
+ {
+ id: "ENCLOSURE_CUSTOMER_PROFILE" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Customer identification documents`,
+ // gana_type: "Boolean",
+ type: "toggle",
+ required: false,
+ },
+ {
+ id: "ENCLOSURE_RISK_PROFILE" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Customer identification documents`,
+ // gana_type: "Boolean",
+ type: "toggle",
+ required: false,
+ },
+ ],
+ },
+ ],
+ };
+}
diff --git a/packages/kyc-ui/src/forms/VQF_902_11.ts b/packages/kyc-ui/src/forms/VQF_902_11.ts
@@ -0,0 +1,141 @@
+import {
+ InternationalizationAPI,
+ DoubleColumnForm,
+ UIHandlerId,
+} from "@gnu-taler/web-util/browser";
+import { TalerAmlAttributes } from "./taler_aml_attributes.js";
+
+export function VQF_902_11(i18n: InternationalizationAPI): DoubleColumnForm {
+ return {
+ type: "double-column",
+ design: [
+ {
+ title: i18n.str`This form was completed by`,
+ fields: [
+ {
+ id: "OFFICER_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_11 as UIHandlerId,
+ label: i18n.str`Full name`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "FORM_FILLING_DATE" satisfies keyof TalerAmlAttributes.VQF_902_11 as UIHandlerId,
+ label: i18n.str`Date`,
+ // gana_type: "AbsoluteDateTime",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy HH:mm:ss",
+ pattern: "dd/MM/yyyy HH:mm:ss",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "CUSTOMER_ID" satisfies keyof TalerAmlAttributes.VQF_902_11 as UIHandlerId,
+ label: i18n.str`Customer`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Contracting partner`,
+ fields: [
+ {
+ id: "CONTROLLING_ENTITY_CONTRACTING_PARTNER" satisfies keyof TalerAmlAttributes.VQF_902_11 as UIHandlerId,
+ label: i18n.str`Contracting partner`,
+ // gana_type: "Paragraph",
+ type: "textArea",
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`The contracting partner hereby declares that:`,
+ fields: [
+ {
+ id: "CONTROLLING_ENTITY_LEVEL" satisfies keyof TalerAmlAttributes.VQF_902_11 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "'25_MORE_RIGHTS' | 'OTHER_WAY' | 'DIRECTOR'",
+ type: "choiceStacked",
+ choices: [
+ {
+ value:
+ "25_MORE_RIGHTS" satisfies TalerAmlAttributes.VQF_902_11["CONTROLLING_ENTITY_LEVEL"],
+ label: i18n.str`Holding 25% or more`,
+ description: i18n.str`the person listed below is holding 25% or more of the contracting partner's share (capital shares or voting rights)`,
+ },
+ {
+ value:
+ "OTHER_WAY" satisfies TalerAmlAttributes.VQF_902_11["CONTROLLING_ENTITY_LEVEL"],
+ label: i18n.str`Other way`,
+ description: i18n.str`the contracting partner hereby declares that the person listed below is contrlling the contracting partner in other ways`,
+ },
+ {
+ value:
+ "DIRECTOR" satisfies TalerAmlAttributes.VQF_902_11["CONTROLLING_ENTITY_LEVEL"],
+ label: i18n.str`Managing director`,
+ description: i18n.str`the contracting partner hereby declares that the person listed below is the managin director`,
+ },
+ ],
+ required: true,
+ },
+ {
+ id: "CONTROLLING_ENTITY_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_11 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ {
+ id: "CONTROLLING_ENTITY_DOMICILE" satisfies keyof TalerAmlAttributes.VQF_902_11 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "ResidentialAddress",
+ type: "textArea",
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Fiduciary holding assets`,
+ fields: [
+ {
+ id: "CONTROLLING_ENTITY_THIRD_PERSON" satisfies keyof TalerAmlAttributes.VQF_902_11 as UIHandlerId,
+ label: i18n.str`Is fiduciary?`,
+ help: i18n.str`Is a third person the beneficial owner of the assets held in the account/securities account?`,
+ // gana_type: "Boolean",
+ type: "toggle",
+ threeState: true,
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`The contracting partner hereby undertakes to inform automatically of any changes to the information contained herein.`,
+ description: i18n.str`It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, documents forgery)`,
+ fields: [
+ {
+ id: "SIGNATURE" satisfies keyof TalerAmlAttributes.VQF_902_9 as UIHandlerId,
+ label: i18n.str`Signature`,
+ // gana_type: "AbsoluteDateTime",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "SIGN_DATE" satisfies keyof TalerAmlAttributes.VQF_902_9 as UIHandlerId,
+ label: i18n.str`Date`,
+ // gana_type: "String",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy HH:mm:ss",
+ pattern: "dd/MM/yyyy HH:mm:ss",
+ required: true,
+ disabled: true,
+ },
+ ],
+ },
+ ],
+ };
+}
diff --git a/packages/kyc-ui/src/forms/VQF_902_12.ts b/packages/kyc-ui/src/forms/VQF_902_12.ts
@@ -0,0 +1,386 @@
+import {
+ InternationalizationAPI,
+ DoubleColumnForm,
+ UIHandlerId,
+} from "@gnu-taler/web-util/browser";
+import { TalerAmlAttributes } from "./taler_aml_attributes.js";
+import { countryList } from "./VQF_902_1.js";
+
+export function VQF_902_12(i18n: InternationalizationAPI): DoubleColumnForm {
+ return {
+ type: "double-column",
+ design: [
+ {
+ title: i18n.str`This form was completed by`,
+ fields: [
+ {
+ id: "OFFICER_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_12 as UIHandlerId,
+ label: i18n.str`Full name`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "FORM_FILLING_DATE" satisfies keyof TalerAmlAttributes.VQF_902_12 as UIHandlerId,
+ label: i18n.str`Date`,
+ // gana_type: "AbsoluteDateTime",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy HH:mm:ss",
+ pattern: "dd/MM/yyyy HH:mm:ss",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "CUSTOMER_ID" satisfies keyof TalerAmlAttributes.VQF_902_12 as UIHandlerId,
+ label: i18n.str`Customer`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Contracing partner`,
+ fields: [
+ {
+ id: "FOUNDATION_CONTRACTING_PARTNER" satisfies keyof TalerAmlAttributes.VQF_902_12 as UIHandlerId,
+ label: i18n.str`Contracting partner`,
+ // gana_type: "Paragraph",
+ type: "textArea",
+ required: true,
+ },
+ {
+ id: "FOUNDATION_KNOWN_AS" satisfies keyof TalerAmlAttributes.VQF_902_12 as UIHandlerId,
+ label: i18n.str`The foundation known as`,
+ // gana_type: "String",
+ type: "text",
+ // help:""
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Name and information pertaining to the foundation`,
+ fields: [
+ {
+ id: "FOUNDATION_NAME" satisfies keyof TalerAmlAttributes.VQF_902_12 as UIHandlerId,
+ label: i18n.str`Name`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ {
+ id: "FOUNDATION_DISCRETIONARY" satisfies keyof TalerAmlAttributes.VQF_902_12 as UIHandlerId,
+ label: i18n.str`Type of foundation`,
+ // gana_type: "Boolean",
+ type: "choiceStacked",
+ choices: [
+ { label: i18n.str`Discretionary foundation`, value: "true" },
+ { label: i18n.str`Non-discretionary foundation`, value: "false" },
+ ],
+ required: true,
+ },
+ {
+ id: "FOUNDATION_REVOCABLE" satisfies keyof TalerAmlAttributes.VQF_902_12 as UIHandlerId,
+ label: i18n.str`Revocability`,
+ // gana_type: "Boolean",
+ type: "choiceStacked",
+ choices: [
+ { label: i18n.str`Revolcable foundation`, value: "true" },
+ { label: i18n.str`Irrevocable foundation`, value: "false" },
+ ],
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Founders`,
+ description: i18n.str`Information pertaining to the (ultimate economic, not fiduciary) founder (individual or entity)`,
+ fields: [
+ {
+ id: "FOUNDATION_FOUNDER_LIST" satisfies keyof TalerAmlAttributes.VQF_902_12 as UIHandlerId,
+ label: i18n.str`Founders`,
+ help: i18n.str``,
+ // gana_type: "Form<VQF_902_12_founder>[]",
+ type: "array",
+ labelFieldId:
+ "FOUNDATION_FOUNDER_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_12_founder as UIHandlerId,
+ fields: [
+ {
+ id: "FOUNDATION_FOUNDER_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_12_founder as UIHandlerId,
+ label: i18n.str`Full name`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ {
+ id: "FOUNDATION_FOUNDER_DOMICILE" satisfies keyof TalerAmlAttributes.VQF_902_12_founder as UIHandlerId,
+ label: i18n.str`Domicile`,
+ // gana_type: "ResidentialAddress",
+ type: "textArea",
+ required: true,
+ },
+ {
+ id: "FOUNDATION_FOUNDER_BIRTHDATE" satisfies keyof TalerAmlAttributes.VQF_902_12_founder as UIHandlerId,
+ label: i18n.str`Birthdate`,
+ // gana_type: "AbsoluteDate",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy",
+ pattern: "dd/MM/yyyy",
+ required: true,
+ },
+ {
+ id: "FOUNDATION_FOUNDER_NATIONALITY" satisfies keyof TalerAmlAttributes.VQF_902_12_founder as UIHandlerId,
+ label: i18n.str`Nationality`,
+ // gana_type: "CountryCode",
+ type: "selectOne",
+ choices: countryList(i18n),
+ required: true,
+ },
+ {
+ id: "FOUNDATION_FOUNDER_DEATHDATE" satisfies keyof TalerAmlAttributes.VQF_902_12_founder as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "AbsoluteDate",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy",
+ pattern: "dd/MM/yyyy",
+ required: true,
+ },
+ {
+ id: "FOUNDATION_FOUNDER_RIGHT_TO_REVOKE" satisfies keyof TalerAmlAttributes.VQF_902_12_founder as UIHandlerId,
+ label: i18n.str`Right to revoke`,
+ // gana_type: "Boolean",
+ type: "toggle",
+ required: true,
+ },
+ ],
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Pre-existing foundation`,
+ description: i18n.str`If the foundation results from the restructuring of pre-existing foundation (re-settlement) or the merger of pre-existing foundations, the following information pertaining to the (actual) founders of the pre-existing foundations has to be given`,
+ fields: [
+ {
+ id: "FOUNDATION_PRE_LIST" satisfies keyof TalerAmlAttributes.VQF_902_12 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Form<VQF_902_12_pre>[]",
+ type: "array",
+ labelFieldId:
+ "FOUNDATION_PRE_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_12_pre as UIHandlerId,
+ fields: [
+ {
+ id: "FOUNDATION_PRE_BIRTHDATE" satisfies keyof TalerAmlAttributes.VQF_902_12_pre as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "AbsoluteDate",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy",
+ pattern: "dd/MM/yyyy",
+ required: true,
+ },
+ {
+ id: "FOUNDATION_PRE_COUNTRY" satisfies keyof TalerAmlAttributes.VQF_902_12_pre as UIHandlerId,
+ label: i18n.str`Country`,
+ // gana_type: "CountryCode",
+ type: "selectOne",
+ choices: countryList(i18n),
+ required: true,
+ },
+ {
+ id: "FOUNDATION_PRE_DEATHDATE" satisfies keyof TalerAmlAttributes.VQF_902_12_pre as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "AbsoluteDate",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy",
+ pattern: "dd/MM/yyyy",
+ required: true,
+ },
+ {
+ id: "FOUNDATION_PRE_DOMICILE" satisfies keyof TalerAmlAttributes.VQF_902_12_pre as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "ResidentialAddress",
+ type: "textArea",
+ required: true,
+ },
+ {
+ id: "FOUNDATION_PRE_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_12_pre as UIHandlerId,
+ label: i18n.str`Full name`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ {
+ id: "FOUNDATION_PRE_NATIONALITY" satisfies keyof TalerAmlAttributes.VQF_902_12_pre as UIHandlerId,
+ label: i18n.str`Nationality`,
+ // gana_type: "CountryCode",
+ type: "selectOne",
+ choices: countryList(i18n),
+ required: true,
+ },
+ ],
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Beneficiaries`,
+ description: i18n.str``,
+ fields: [
+ {
+ id: "FOUNDATION_BENEFICIARY_LIST" satisfies keyof TalerAmlAttributes.VQF_902_12 as UIHandlerId,
+ label: i18n.str`Beneficiaries`,
+ // gana_type: "Form<VQF_902_12_beneficiary>[]",
+ type: "array",
+ labelFieldId:
+ "FOUNDATION_BENEFICIARY_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_12_beneficiary as UIHandlerId,
+ fields: [
+ {
+ id: "FOUNDATION_BENEFICIARY_BIRTHDATE" satisfies keyof TalerAmlAttributes.VQF_902_12_beneficiary as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "AbsoluteDate",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy",
+ pattern: "dd/MM/yyyy",
+ required: false,
+ },
+ {
+ id: "FOUNDATION_BENEFICIARY_COUNTRY" satisfies keyof TalerAmlAttributes.VQF_902_12_beneficiary as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "CountryCode",
+ type: "selectOne",
+ choices: countryList(i18n),
+ required: false,
+ },
+ {
+ id: "FOUNDATION_BENEFICIARY_DOMICILE" satisfies keyof TalerAmlAttributes.VQF_902_12_beneficiary as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "ResidentialAddress",
+ type: "textArea",
+ required: false,
+ },
+ {
+ id: "FOUNDATION_BENEFICIARY_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_12_beneficiary as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "String",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "FOUNDATION_BENEFICIARY_NATIONALITY" satisfies keyof TalerAmlAttributes.VQF_902_12_beneficiary as UIHandlerId,
+ label: i18n.str``,
+ type: "selectOne",
+ choices: countryList(i18n),
+ required: false,
+ },
+ {
+ id: "FOUNDATION_BENEFICIARY_RIGHT_TO_CLAIM" satisfies keyof TalerAmlAttributes.VQF_902_12_beneficiary as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Boolean",
+ type: "toggle",
+ required: false,
+ },
+ ],
+ required: true,
+ },
+ {
+ id: "FOUNDATION_BENEFICIARY_ADDITION" satisfies keyof TalerAmlAttributes.VQF_902_12 as UIHandlerId,
+ label: i18n.str`Addition`,
+ // gana_type: "Paragraph",
+ type: "textArea",
+ required: false,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Further information`,
+ description: i18n.str`Information pertaining to (a) further persons having the right to determine or nominate representatives (e.g.) member of the foundation board), if these representatives may dispose over the assets or have the right to change the distribution of the assets or the nominaton of beneficiaries`,
+ fields: [
+ {
+ id: "FOUNDATION_REPRESENTATIVE_LIST" satisfies keyof TalerAmlAttributes.VQF_902_12 as UIHandlerId,
+ label: i18n.str`Representatives`,
+ // gana_type: "Form<VQF_902_12_representative>[]",
+ type: "array",
+ labelFieldId:
+ "FOUNDATION_REPRESENTATIVE_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_12_representative as UIHandlerId,
+ fields: [
+ {
+ id: "FOUNDATION_REPRESENTATIVE_BIRTHDATE" satisfies keyof TalerAmlAttributes.VQF_902_12_representative as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "AbsoluteDate",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy",
+ pattern: "dd/MM/yyyy",
+ required: true,
+ },
+ {
+ id: "FOUNDATION_REPRESENTATIVE_COUNTRY" satisfies keyof TalerAmlAttributes.VQF_902_12_representative as UIHandlerId,
+ label: i18n.str`Country`,
+ // gana_type: "CountryCode",
+ type: "selectOne",
+ choices: countryList(i18n),
+ required: true,
+ },
+ {
+ id: "FOUNDATION_REPRESENTATIVE_DOMICILE" satisfies keyof TalerAmlAttributes.VQF_902_12_representative as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "ResidentialAddress",
+ type: "textArea",
+ required: true,
+ },
+ {
+ id: "FOUNDATION_REPRESENTATIVE_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_12_representative as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ {
+ id: "FOUNDATION_REPRESENTATIVE_NATIONALITY" satisfies keyof TalerAmlAttributes.VQF_902_12_representative as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "CountryCode",
+ type: "selectOne",
+ choices: countryList(i18n),
+ required: true,
+ },
+ {
+ id: "FOUNDATION_REPRESENTATIVE_RIGHT_TO_REVOKE" satisfies keyof TalerAmlAttributes.VQF_902_12_representative as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Boolean",
+ type: "toggle",
+ required: true,
+ },
+ ],
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`The contracting partner hereby undertakes to inform automatically of any changes to the information contained herein.`,
+ description: i18n.str`It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, documents forgery)`,
+ fields: [
+ {
+ id: "SIGNATURE" satisfies keyof TalerAmlAttributes.VQF_902_9 as UIHandlerId,
+ label: i18n.str`Signature`,
+ // gana_type: "AbsoluteDateTime",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "SIGN_DATE" satisfies keyof TalerAmlAttributes.VQF_902_9 as UIHandlerId,
+ label: i18n.str`Date`,
+ // gana_type: "String",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy HH:mm:ss",
+ pattern: "dd/MM/yyyy HH:mm:ss",
+ required: true,
+ disabled: true,
+ },
+ ],
+ },
+ ],
+ };
+}
diff --git a/packages/kyc-ui/src/forms/VQF_902_13.ts b/packages/kyc-ui/src/forms/VQF_902_13.ts
@@ -0,0 +1,385 @@
+import {
+ InternationalizationAPI,
+ DoubleColumnForm,
+ UIHandlerId,
+} from "@gnu-taler/web-util/browser";
+import { TalerAmlAttributes } from "./taler_aml_attributes.js";
+import { countryList } from "./VQF_902_1.js";
+
+export function VQF_902_13(i18n: InternationalizationAPI): DoubleColumnForm {
+ return {
+ type: "double-column",
+ design: [
+ {
+ title: i18n.str`This form was completed by`,
+ fields: [
+ {
+ id: "OFFICER_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_13 as UIHandlerId,
+ label: i18n.str`Full name`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "FORM_FILLING_DATE" satisfies keyof TalerAmlAttributes.VQF_902_13 as UIHandlerId,
+ label: i18n.str`Date`,
+ // gana_type: "AbsoluteDateTime",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy HH:mm:ss",
+ pattern: "dd/MM/yyyy HH:mm:ss",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "CUSTOMER_ID" satisfies keyof TalerAmlAttributes.VQF_902_13 as UIHandlerId,
+ label: i18n.str`Customer`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Contracing partner`,
+ fields: [
+ {
+ id: "TRUST_CONTRACTING_PARTNER" satisfies keyof TalerAmlAttributes.VQF_902_13 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Paragraph",
+ type: "textArea",
+ required: true,
+ },
+ {
+ id: "TRUST_KNOWN_AS" satisfies keyof TalerAmlAttributes.VQF_902_13 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Name and information pertaining to the trust`,
+ fields: [
+ {
+ id: "TRUST_DISCRETIONARY" satisfies keyof TalerAmlAttributes.VQF_902_13 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Boolean",
+ type: "toggle",
+ required: true,
+ },
+ {
+ id: "TRUST_NAME" satisfies keyof TalerAmlAttributes.VQF_902_13 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ {
+ id: "TRUST_REVOCABLE" satisfies keyof TalerAmlAttributes.VQF_902_13 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Boolean",
+ type: "toggle",
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Settlor`,
+ description: i18n.str`Information pertaining to the (ultimate economic, not fiduciary) settlor of the trust (individual or entity)`,
+ fields: [
+ {
+ id: "TRUST_SETTLOR_LIST" satisfies keyof TalerAmlAttributes.VQF_902_13 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Form<VQF_902_13_settlor>[]",
+ type: "array",
+ labelFieldId:
+ "TRUST_SETTLOR_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_13_settlor as UIHandlerId,
+ fields: [
+ {
+ id: "TRUST_SETTLOR_BIRTHDATE" satisfies keyof TalerAmlAttributes.VQF_902_13_settlor as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "AbsoluteDate",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy",
+ pattern: "dd/MM/yyyy",
+ required: true,
+ },
+ {
+ id: "TRUST_SETTLOR_DEATHDATE" satisfies keyof TalerAmlAttributes.VQF_902_13_settlor as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "AbsoluteDate",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy",
+ pattern: "dd/MM/yyyy",
+ required: true,
+ },
+ {
+ id: "TRUST_SETTLOR_DOMICILE" satisfies keyof TalerAmlAttributes.VQF_902_13_settlor as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "ResidentialAddress",
+ type: "textArea",
+ required: true,
+ },
+ {
+ id: "TRUST_SETTLOR_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_13_settlor as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "String",
+ type: "text",
+
+ required: true,
+ },
+ {
+ id: "TRUST_SETTLOR_NATIONALITY" satisfies keyof TalerAmlAttributes.VQF_902_13_settlor as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "CountryCode",
+ type: "selectOne",
+ choices: countryList(i18n),
+
+ required: true,
+ },
+ {
+ id: "TRUST_SETTLOR_RIGHT_TO_REVOKE" satisfies keyof TalerAmlAttributes.VQF_902_13_settlor as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Boolean",
+ type: "toggle",
+ required: true,
+ },
+ ],
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Pre-existing trust`,
+ description: i18n.str`If the trust results from the restructuring of pre-existing trust (re-settlement) or the merger of pre-existing trusts, the following information pertaining to the (actual) settlor of the pre-existing trusts has to be given`,
+ fields: [
+ {
+ id: "TRUST_PRE_LIST" satisfies keyof TalerAmlAttributes.VQF_902_13 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Form<VQF_902_13_pre>[]",
+ type: "array",
+ labelFieldId:
+ "TRUST_PRE_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_13_pre as UIHandlerId,
+ fields: [
+ {
+ id: "TRUST_PRE_BIRTHDATE" satisfies keyof TalerAmlAttributes.VQF_902_13_pre as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "AbsoluteDate",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy",
+ pattern: "dd/MM/yyyy",
+ required: false,
+ },
+ {
+ id: "TRUST_PRE_COUNTRY" satisfies keyof TalerAmlAttributes.VQF_902_13_pre as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "CountryCode",
+ type: "selectOne",
+ choices: countryList(i18n),
+
+ required: false,
+ },
+ {
+ id: "TRUST_PRE_DEATHDATE" satisfies keyof TalerAmlAttributes.VQF_902_13_pre as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "AbsoluteDate",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy",
+ pattern: "dd/MM/yyyy",
+
+ required: false,
+ },
+ {
+ id: "TRUST_PRE_DOMICILE" satisfies keyof TalerAmlAttributes.VQF_902_13_pre as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "ResidentialAddress",
+ type: "textArea",
+ required: false,
+ },
+ {
+ id: "TRUST_PRE_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_13_pre as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "String",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "TRUST_PRE_NATIONALITY" satisfies keyof TalerAmlAttributes.VQF_902_13_pre as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "CountryCode",
+ type: "selectOne",
+ choices: countryList(i18n),
+
+ required: false,
+ },
+ ],
+
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Beneficiaries`,
+ description: i18n.str``,
+ fields: [
+ {
+ id: "TRUST_BENEFICIARY_LIST" satisfies keyof TalerAmlAttributes.VQF_902_13 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Form<VQF_902_13_beneficiary>[]",
+ type: "array",
+ labelFieldId:
+ "TRUST_BENEFICIARY_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_13_beneficiary as UIHandlerId,
+ fields: [
+ {
+ id: "TRUST_BENEFICIARY_ADDITION" satisfies keyof TalerAmlAttributes.VQF_902_13_beneficiary as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Paragraph",
+ type: "textArea",
+ required: false,
+ },
+ {
+ id: "TRUST_BENEFICIARY_BIRTHDATE" satisfies keyof TalerAmlAttributes.VQF_902_13_beneficiary as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "AbsoluteDate",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy",
+ pattern: "dd/MM/yyyy",
+
+ required: false,
+ },
+ {
+ id: "TRUST_BENEFICIARY_COUNTRY" satisfies keyof TalerAmlAttributes.VQF_902_13_beneficiary as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "CountryCode",
+ type: "selectOne",
+ choices: countryList(i18n),
+
+ required: false,
+ },
+ {
+ id: "TRUST_BENEFICIARY_DOMICILE" satisfies keyof TalerAmlAttributes.VQF_902_13_beneficiary as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "ResidentialAddress",
+ type: "textArea",
+ required: false,
+ },
+ {
+ id: "TRUST_BENEFICIARY_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_13_beneficiary as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "String",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "TRUST_BENEFICIARY_NATIONALITY" satisfies keyof TalerAmlAttributes.VQF_902_13_beneficiary as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "CountryCode",
+ type: "selectOne",
+ choices: countryList(i18n),
+
+ required: false,
+ },
+ {
+ id: "TRUST_BENEFICIARY_RIGHT_TO_CLAIM" satisfies keyof TalerAmlAttributes.VQF_902_13_beneficiary as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Boolean",
+ type: "toggle",
+ required: false,
+ },
+ ],
+
+ required: true,
+ },
+ {
+ id: "TRUST_PROTECTOR_LIST" satisfies keyof TalerAmlAttributes.VQF_902_13 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Form<VQF_902_13_protector>[]",
+ type: "array",
+ labelFieldId:
+ "TRUST_PROTECTOR_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_13_protector as UIHandlerId,
+ fields: [
+ {
+ id: "TRUST_PROTECTOR_BIRTHDATE" satisfies keyof TalerAmlAttributes.VQF_902_13_protector as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "AbsoluteDate",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy",
+ pattern: "dd/MM/yyyy",
+
+ required: false,
+ },
+ {
+ id: "TRUST_PROTECTOR_COUNTRY" satisfies keyof TalerAmlAttributes.VQF_902_13_protector as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "CountryCode",
+ type: "selectOne",
+ choices: countryList(i18n),
+
+ required: false,
+ },
+ {
+ id: "TRUST_PROTECTOR_DOMICILE" satisfies keyof TalerAmlAttributes.VQF_902_13_protector as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "ResidentialAddress",
+ type: "textArea",
+ required: false,
+ },
+ {
+ id: "TRUST_PROTECTOR_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_13_protector as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "String",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "TRUST_PROTECTOR_NATIONALITY" satisfies keyof TalerAmlAttributes.VQF_902_13_protector as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "CountryCode",
+ type: "selectOne",
+ choices: countryList(i18n),
+
+ required: false,
+ },
+ {
+ id: "TRUST_PROTECTOR_RIGHT_TO_REVOKE" satisfies keyof TalerAmlAttributes.VQF_902_13_protector as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Boolean",
+ type: "toggle",
+ required: false,
+ },
+ ],
+
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`The contracting partner hereby undertakes to inform automatically of any changes to the information contained herein.`,
+ description: i18n.str`It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, documents forgery)`,
+ fields: [
+ {
+ id: "SIGNATURE" satisfies keyof TalerAmlAttributes.VQF_902_9 as UIHandlerId,
+ label: i18n.str`Signature`,
+ // gana_type: "AbsoluteDateTime",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "SIGN_DATE" satisfies keyof TalerAmlAttributes.VQF_902_9 as UIHandlerId,
+ label: i18n.str`Date`,
+ // gana_type: "String",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy HH:mm:ss",
+ pattern: "dd/MM/yyyy HH:mm:ss",
+ required: true,
+ disabled: true,
+ },
+ ],
+ },
+ ],
+ };
+}
diff --git a/packages/kyc-ui/src/forms/VQF_902_14.ts b/packages/kyc-ui/src/forms/VQF_902_14.ts
@@ -0,0 +1,139 @@
+import {
+ InternationalizationAPI,
+ DoubleColumnForm,
+ UIHandlerId,
+} from "@gnu-taler/web-util/browser";
+import { TalerAmlAttributes } from "./taler_aml_attributes.js";
+
+export function VQF_902_14(i18n: InternationalizationAPI): DoubleColumnForm {
+ return {
+ type: "double-column",
+ design: [
+ {
+ title: i18n.str`This form was completed by`,
+ fields: [
+ {
+ id: "OFFICER_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_14 as UIHandlerId,
+ label: i18n.str`Full name`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "FORM_FILLING_DATE" satisfies keyof TalerAmlAttributes.VQF_902_14 as UIHandlerId,
+ label: i18n.str`Date`,
+ // gana_type: "AbsoluteDateTime",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy HH:mm:ss",
+ pattern: "dd/MM/yyyy HH:mm:ss",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "CUSTOMER_ID" satisfies keyof TalerAmlAttributes.VQF_902_14 as UIHandlerId,
+ label: i18n.str`Customer`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Reason for special clarifications`,
+ fields: [
+ {
+ id: "INCRISK_REASON" satisfies keyof TalerAmlAttributes.VQF_902_14 as UIHandlerId,
+ label: i18n.str`Reason`,
+ help: i18n.str`Description of the circumstances/transactions, which triggered the special clarifications`,
+ // gana_type: "String",
+ type: "textArea",
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Used means of clarification`,
+ fields: [
+ {
+ id: "INCRISK_MEANS" satisfies keyof TalerAmlAttributes.VQF_902_14 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "'GATHERING' | 'CONSULTATION' | 'ENQUIRIES' | String",
+ type: "choiceStacked",
+ choices: [
+ {
+ label: i18n.str`Gathering`,
+ value: "GATHERING",
+ description: i18n.str`Gathering of information from the customer, beneficial owner of the assets, controlling person`,
+ },
+ {
+ label: i18n.str`Gathering`,
+ value: "CONSULTATION",
+ description: i18n.str`Consultation of generally accessible sources and databases`,
+ },
+ {
+ label: i18n.str`Enquiries`,
+ value: "ENQUIRIES",
+ description: i18n.str`Enquiries with trustworthy persons`,
+ },
+ ],
+ allowFreeForm: true,
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Summary and plausbility check of the gathered information`,
+ description: i18n.str`The results of the clarifications have to be documented and their plausability has to be checked.`,
+ fields: [
+ {
+ id: "INCRISK_SUMMARY" satisfies keyof TalerAmlAttributes.VQF_902_14 as UIHandlerId,
+ label: i18n.str`Summary`,
+ // gana_type: "Paragraph",
+ type: "textArea",
+ required: true,
+ },
+ {
+ id: "INCRISK_DOCUMENTS" satisfies keyof TalerAmlAttributes.VQF_902_14 as UIHandlerId,
+ label: i18n.str`Gathered documentes`,
+ // gana_type: "File[]",
+ type: "array",
+ labelFieldId: "asd" as UIHandlerId,
+ fields: [],
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Result of the special clarification`,
+ fields: [
+ {
+ id: "INCRISK_RESULT" satisfies keyof TalerAmlAttributes.VQF_902_14 as UIHandlerId,
+ label: i18n.str`Result`,
+ type: "choiceStacked",
+ choices: [
+ {
+ label: i18n.str`No suspicion`,
+ value: "NO_SUSPICION",
+ description: i18n.str`The plausibility of the circumstances could be checked, no reasonable suspicion pursuant to Art. 9 AMLA (possibly update of customer profile and/or risk profile)`,
+ },
+ {
+ label: i18n.str`Reasonable suspicion`,
+ value: "REASONABLE_SUSPICION",
+ description: i18n.str`Reasonable suspicion pursuant to Art. 9 AMLA, duty to file a report with MROS`,
+ },
+ {
+ label: i18n.str`Simple suspicion`,
+ value: "SIMPLE_SUSPICION",
+ description: i18n.str`Simple suspicion pursuant to Art. 305 Para. 2 StGB, right to notify MROS`,
+ },
+ ],
+ allowFreeForm: true,
+ required: true,
+ },
+ ],
+ },
+ ],
+ };
+}
diff --git a/packages/kyc-ui/src/forms/VQF_902_15.ts b/packages/kyc-ui/src/forms/VQF_902_15.ts
@@ -0,0 +1,130 @@
+import {
+ InternationalizationAPI,
+ DoubleColumnForm,
+ UIHandlerId,
+} from "@gnu-taler/web-util/browser";
+import { TalerAmlAttributes } from "./taler_aml_attributes.js";
+import { countryList } from "./VQF_902_1.js";
+
+export function VQF_902_15(i18n: InternationalizationAPI): DoubleColumnForm {
+ return {
+ type: "double-column",
+ design: [
+ {
+ title: i18n.str`This form was completed by`,
+ fields: [
+ {
+ id: "OFFICER_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_15 as UIHandlerId,
+ label: i18n.str`Full name`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "FORM_FILLING_DATE" satisfies keyof TalerAmlAttributes.VQF_902_15 as UIHandlerId,
+ label: i18n.str`Date`,
+ // gana_type: "AbsoluteDateTime",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy HH:mm:ss",
+ pattern: "dd/MM/yyyy HH:mm:ss",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "CUSTOMER_ID" satisfies keyof TalerAmlAttributes.VQF_902_15 as UIHandlerId,
+ label: i18n.str`Customer`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Contracting partner`,
+ fields: [
+ {
+ id: "INSURANCE_CONTRACTING_PARTNER" satisfies keyof TalerAmlAttributes.VQF_902_15 as UIHandlerId,
+ label: i18n.str`Contracting partner`,
+ // gana_type: "Paragraph",
+ type: "textArea",
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Relationship`,
+ description: i18n.str`Information about the contractua relationship between the contracting party and the financial intermediary`,
+ fields: [
+ {
+ id: "INSURANCE_RELATIONSHIP_NAME" satisfies keyof TalerAmlAttributes.VQF_902_15 as UIHandlerId,
+ label: i18n.str`Name`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ {
+ id: "INSURANCE_RELATIONSHIP_POLICY" satisfies keyof TalerAmlAttributes.VQF_902_15 as UIHandlerId,
+ label: i18n.str`Insurance policy`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ {
+ type: "caption",
+ label: i18n.str`The contracting partner confirms in accordance with the Art. 41a SRO Regulations that it is a licensed and state-surpervised insurance company and that it has entered into the above-mentioned contractal relationship the assets connected to the life insurance policy also mentioned above.`,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Policy holder`,
+ fields: [
+ {
+ id: "INSURANCE_HOLDER_BIRTHDATE" satisfies keyof TalerAmlAttributes.VQF_902_15 as UIHandlerId,
+ label: i18n.str`Birthdate`,
+ // gana_type: "AbsoluteDate",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy",
+ pattern: "dd/MM/yyyy",
+ required: true,
+ },
+ {
+ id: "INSURANCE_HOLDER_DOMICILE" satisfies keyof TalerAmlAttributes.VQF_902_15 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "ResidentialAddress",
+ type: "textArea",
+ required: true,
+ },
+ {
+ id: "INSURANCE_HOLDER_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_15 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "String",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "INSURANCE_HOLDER_NATIONALITY" satisfies keyof TalerAmlAttributes.VQF_902_15 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "CountryCode",
+ type: "selectOne",
+ choices: countryList(i18n),
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Nature and purpose of the business relationship`,
+ fields: [],
+ },
+ {
+ title: i18n.str`Relationship with third parties`,
+ fields: [],
+ },
+ {
+ title: i18n.str`Further information`,
+ fields: [],
+ },
+ ],
+ };
+}
diff --git a/packages/kyc-ui/src/forms/VQF_902_4.ts b/packages/kyc-ui/src/forms/VQF_902_4.ts
@@ -0,0 +1,283 @@
+import {
+ InternationalizationAPI,
+ DoubleColumnForm,
+ UIHandlerId,
+} from "@gnu-taler/web-util/browser";
+import { TalerAmlAttributes } from "./taler_aml_attributes.js";
+
+export function VQF_902_4(i18n: InternationalizationAPI): DoubleColumnForm {
+ return {
+ type: "double-column",
+ design: [
+ {
+ title: i18n.str`This form was completed by`,
+ fields: [
+ {
+ id: "OFFICER_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Full name`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "FORM_FILLING_DATE" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Date`,
+ // gana_type: "AbsoluteDateTime",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy HH:mm:ss",
+ pattern: "dd/MM/yyyy HH:mm:ss",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "CUSTOMER_ID" satisfies keyof TalerAmlAttributes.VQF_902_1 as UIHandlerId,
+ label: i18n.str`Customer`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Evaluation of politically exposed persons (PEP-Check)`,
+ description: i18n.str`This evaluation has to be completed by all members for every business relationship.`,
+ fields: [
+ {
+ id: "PEP_ACCEPTANCE_DATE" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "AbsoluteDateTime",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy HH:mm:ss",
+ pattern: "dd/MM/yyyy HH:mm:ss",
+ required: false,
+ },
+ {
+ id: "PEP_DOMESTIC" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Boolean",
+ type: "toggle",
+ required: true,
+ },
+ {
+ id: "PEP_FOREIGN" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Boolean",
+ type: "toggle",
+ required: true,
+ },
+ {
+ id: "PEP_INTERNATIONAL_ORGANIZATION" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Boolean",
+ type: "toggle",
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Evaluation "high risk" or non-cooperative country`,
+ description: i18n.str`This evaluation has to be completed by all members for every business relationship.`,
+ fields: [
+ {
+ id: "HIGH_RISK_ACCEPTANCE_DATE" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "AbsoluteDateTime",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy HH:mm:ss",
+ pattern: "dd/MM/yyyy HH:mm:ss",
+ required: false,
+ },
+ {
+ id: "HIGH_RISK_COUNTRY" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Boolean",
+ type: "toggle",
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Evaluation of business relationship risk`,
+ description: i18n.str`This evaluation has to be completed by all members who have in total more than 20 customers for every business relationship. At least two risk categories have to be chosen and assessed.`,
+ fields: [
+ {
+ id: "CONTACT_RISK_LEVEL" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str`Contact risk level`,
+ // gana_type: "'LOW' | 'MEDIUM' | 'HIGH'",
+ choices: [
+ { label: i18n.str`Low`, value: "LOW" },
+ { label: i18n.str`Medium`, value: "MEDIUM" },
+ { label: i18n.str`High`, value: "HIGH" },
+ ],
+ type: "choiceHorizontal",
+ required: false,
+ },
+ {
+ id: "COUNTRY_RISK_LEVEL" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str`Country risk level`,
+ // gana_type: "'LOW' | 'MEDIUM' | 'HIGH'",
+ choices: [
+ { label: i18n.str`Low`, value: "LOW" },
+ { label: i18n.str`Medium`, value: "MEDIUM" },
+ { label: i18n.str`High`, value: "HIGH" },
+ ],
+ type: "choiceHorizontal",
+ required: false,
+ },
+ {
+ id: "COUNTRY_RISK_TYPE" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str`Country risk type`,
+ // gana_type:
+ // "'NATIONALITY_CUSTOMER' | 'NATIONALITY_OWNER' | 'DOMICILE_CUSTOMER' | 'DOMICILE_OWNER' | 'DOMICILE_CONTROLLING' | 'BUSINESS_ACTIVITY' | 'PAYMENTS'",
+ choices: [
+ {
+ label: i18n.str`Nationality customer`,
+ value: "NATIONALITY_CUSTOMER",
+ },
+ {
+ label: i18n.str`Nationality owner`,
+ value: "NATIONALITY_OWNER",
+ },
+ {
+ label: i18n.str`Domicile cusomter`,
+ value: "DOMICILE_CUSTOMER",
+ },
+ { label: i18n.str`Domicile owner`, value: "DOMICILE_OWNER" },
+ {
+ label: i18n.str`Domicile controlling`,
+ value: "DOMICILE_CONTROLLING",
+ },
+ {
+ label: i18n.str`Business activity`,
+ value: "BUSINESS_ACTIVITY",
+ },
+ { label: i18n.str`Payments`, value: "PAYMENTS" },
+ ],
+ type: "choiceStacked",
+ required: false,
+ },
+ {
+ id: "EXTRA_CRITERA_1_RISK_DEFINITION" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str`1. Extra criteria risk`,
+ // gana_type: "String",
+ type: "textArea",
+ required: false,
+ },
+ {
+ id: "EXTRA_CRITERA_1_RISK_LEVEL" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str`1. Extra criteria level`,
+ // gana_type: "'LOW' | 'MEDIUM' | 'HIGH'",
+ choices: [
+ { label: i18n.str`Low`, value: "LOW" },
+ { label: i18n.str`Medium`, value: "MEDIUM" },
+ { label: i18n.str`High`, value: "HIGH" },
+ ],
+ type: "choiceHorizontal",
+ required: false,
+ },
+ {
+ id: "EXTRA_CRITERA_2_RISK_DEFINITION" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str`2. Extra criteria risk`,
+ // gana_type: "String",
+ type: "textArea",
+ required: false,
+ },
+ {
+ id: "EXTRA_CRITERA_2_RISK_LEVEL" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str`2. Extra criteria level`,
+ // gana_type: "'LOW' | 'MEDIUM' | 'HIGH'",
+ choices: [
+ { label: i18n.str`Low`, value: "LOW" },
+ { label: i18n.str`Medium`, value: "MEDIUM" },
+ { label: i18n.str`High`, value: "HIGH" },
+ ],
+ type: "choiceHorizontal",
+ required: false,
+ },
+ {
+ id: "INDUSTRY_RISK_LEVEL" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str`Industry risk level`,
+ // gana_type:
+ // "'TRANSPARENT' | 'HIGH_CASH_TRANSACTION' | 'NOT_WELL_KNOWN' | 'HIGH_RISK_TRADE' | 'UNKNOWN_INDUSTRY'",
+ type: "selectOne",
+ choices: [
+ { label: i18n.str`Transparent`, value: "TRANSPARENT" },
+ {
+ label: i18n.str`High cash transaction`,
+ value: "HIGH_CASH_TRANSACTION",
+ },
+ { label: i18n.str`Not well known`, value: "NOT_WELL_KNOWN" },
+ { label: i18n.str`High risk trade`, value: "HIGH_RISK_TRADE" },
+ { label: i18n.str`Unkown industry`, value: "UNKNOWN_INDUSTRY" },
+ ],
+ required: false,
+ },
+ {
+ id: "INDUSTRY_RISK_TYPE" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str`Industry risk type`,
+ // gana_type: "'CUSTOMER' | 'OWNER'",
+ type: "choiceHorizontal",
+ choices: [
+ { label: i18n.str`Owner`, value: "OWNER" },
+ { label: i18n.str`Customer`, value: "CUSTOMER" },
+ ],
+ required: false,
+ },
+ {
+ id: "PRODUCT_RISK_LEVEL" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str`Product risk level`,
+ // gana_type:
+ // "'EASY' | 'SOPHISTICATED' | 'OFFSHORE' | 'COMPLEX_STRUCTURE' | 'LARGE_NUMBER_OF_ACCOUNTS' | 'COMPLEX_SERVICE' | 'FREQ_TRANS_WITH_HIGH_RISK'",
+ type: "selectOne",
+ choices: [
+ { label: i18n.str`Easy`, value: "EASY" },
+ { label: i18n.str`Sophisticated`, value: "SOPHISTICATED" },
+ { label: i18n.str`Offshore`, value: "OFFSHORE" },
+ {
+ label: i18n.str`Complex structure`,
+ value: "COMPLEX_STRUCTURE",
+ },
+ {
+ label: i18n.str`Large number of accounts`,
+ value: "LARGE_NUMBER_OF_ACCOUNTS",
+ },
+ { label: i18n.str`Complex service`, value: "COMPLEX_SERVICE" },
+ {
+ label: i18n.str`Frequent transactions with high risk`,
+ value: "FREQ_TRANS_WITH_HIGH_RISK",
+ },
+ ],
+ required: false,
+ },
+ {
+ id: "RISK_CLASIFICATION_ACCEPTANCE_DATE" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "AbsoluteDateTime",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy HH:mm:ss",
+ pattern: "dd/MM/yyyy HH:mm:ss",
+ required: false,
+ },
+ {
+ id: "RISK_CLASIFICATION_LEVEL" satisfies keyof TalerAmlAttributes.VQF_902_4 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "'WITH' | 'WITHOUT'",
+ choices: [
+ { label: i18n.str`WITH`, value: "WITH" },
+ { label: i18n.str`WITHOUT`, value: "WITHOUT" },
+ ],
+ type: "choiceHorizontal",
+ required: false,
+ },
+ ],
+ },
+ // This fields seeems to be related to legitimization rules.
+ // {
+ // title: i18n.str`Criteria for identification of increased risk transactions (transaction monitoring)`,
+ // fields: fieldsBySections["4"],
+ // },
+ ],
+ };
+}
diff --git a/packages/kyc-ui/src/forms/VQF_902_5.ts b/packages/kyc-ui/src/forms/VQF_902_5.ts
@@ -0,0 +1,194 @@
+import {
+ InternationalizationAPI,
+ DoubleColumnForm,
+ UIHandlerId,
+} from "@gnu-taler/web-util/browser";
+import { TalerAmlAttributes } from "./taler_aml_attributes.js";
+
+export function VQF_902_5(i18n: InternationalizationAPI): DoubleColumnForm {
+ return {
+ type: "double-column",
+ design: [
+ {
+ title: i18n.str`This form was completed by`,
+ fields: [
+ {
+ id: "OFFICER_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Full name`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "FORM_FILLING_DATE" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Date`,
+ // gana_type: "AbsoluteDateTime",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy HH:mm:ss",
+ pattern: "dd/MM/yyyy HH:mm:ss",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "CUSTOMER_ID" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Customer`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Business activity`,
+ fields: [
+ {
+ id: "BIZREL_PROFESSION" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Profession, business activities, etc. (former, current, potentially planned)`,
+ // gana_type: "String",
+ type: "text",
+ required: false,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Financial circumstances`,
+ fields: [
+ {
+ id: "BIZREL_INCOME" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Income and assets, liabilities (estimated)`,
+ // gana_type: "String",
+ type: "textArea",
+ required: false,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Origin of the deposited assets involved`,
+ fields: [
+ {
+ id: "BIZREL_ORIGIN_AMOUNT" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Amount`,
+ // gana_type: "Amount",
+ type: "amount",
+ currency: "CHF",
+ required: true,
+ },
+ {
+ id: "BIZREL_ORIGIN_CATEGORY" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Category`,
+ // gana_type: "'SAVINGS' | 'OWN_BUSINESS' | 'INHERITANCE' | 'OTHER'",
+ type: "choiceStacked",
+ choices: [
+ { label: i18n.str`Savings`, value: "SAVINGS" },
+ {
+ label: i18n.str`Own business operations`,
+ value: "OWN_BUSINESS",
+ },
+ { label: i18n.str`Inheritance`, value: "INHERITANCE" },
+ { label: i18n.str`Other`, value: "OTHER" },
+ ],
+ allowFreeForm: true,
+ required: true,
+ },
+ {
+ id: "BIZREL_ORIGIN_DETAIL" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Detail description of the origings/economical background of the assets involved in the business relationship`,
+ // gana_type: "Paragraph",
+ type: "textArea",
+ required: false,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Nature and purpose of the business relationship`,
+ fields: [
+ {
+ id: "BIZREL_PURPOSE" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Purpose of the business relationship`,
+ // gana_type: "String",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "BIZREL_DEVELOPMENT" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Information on the planned development of the business relationship and the assets`,
+ // gana_type: "String",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "BIZREL_FINANCIAL_BENEFICIARIES_ADDRESS" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Address`,
+ help: i18n.str`Information of the beneficiary`,
+ // gana_type: "String",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "BIZREL_FINANCIAL_BENEFICIARIES_BANK_ACCOUNT" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Bank account`,
+ help: i18n.str`Information of the beneficiary`,
+ // gana_type: "String",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "BIZREL_FINANCIAL_BENEFICIARIES_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Full name`,
+ help: i18n.str`Information of the beneficiary`,
+ // gana_type: "String",
+ type: "text",
+ required: false,
+ },
+ {
+ id: "BIZREL_FINANCIAL_VOLUME" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Detail on usual business volume`,
+ // gana_type: "String",
+ type: "text",
+ required: false,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Relationship with third parties`,
+ fields: [
+ {
+ id: "BIZREL_THIRDPARTY_RELATIONSHIP" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Relation of the customer to the benefical owner`,
+ // gana_type: "String",
+ type: "textArea",
+ required: false,
+ },
+ {
+ id: "BIZREL_THIRDPARTY_REFERENCES" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Introducer / agents / references`,
+ // gana_type: "String",
+ type: "textArea",
+ required: false,
+ },
+ {
+ id: "BIZREL_THIRDPARTY_AMLA_FILES" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Relation to other AMLA-Files`,
+ // gana_type: "String",
+ type: "textArea",
+ required: false,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Further information`,
+ fields: [
+ {
+ id: "BIZREL_FURTHER_INFO" satisfies keyof TalerAmlAttributes.VQF_902_5 as UIHandlerId,
+ label: i18n.str`Other relevant information`,
+ // gana_type: "String",
+ type: "textArea",
+ required: false,
+ },
+ ],
+ },
+ ],
+ };
+}
diff --git a/packages/kyc-ui/src/forms/VQF_902_9.ts b/packages/kyc-ui/src/forms/VQF_902_9.ts
@@ -0,0 +1,129 @@
+import {
+ InternationalizationAPI,
+ DoubleColumnForm,
+ UIHandlerId,
+} from "@gnu-taler/web-util/browser";
+import { TalerAmlAttributes } from "./taler_aml_attributes.js";
+import { countryList } from "./VQF_902_1.js";
+
+export function VQF_902_9(i18n: InternationalizationAPI): DoubleColumnForm {
+ return {
+ type: "double-column",
+ design: [
+ {
+ title: i18n.str`This form was completed by`,
+ fields: [
+ {
+ id: "OFFICER_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_9 as UIHandlerId,
+ label: i18n.str`Full name`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "FORM_FILLING_DATE" satisfies keyof TalerAmlAttributes.VQF_902_9 as UIHandlerId,
+ label: i18n.str`Date`,
+ // gana_type: "AbsoluteDateTime",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy HH:mm:ss",
+ pattern: "dd/MM/yyyy HH:mm:ss",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "CUSTOMER_ID" satisfies keyof TalerAmlAttributes.VQF_902_9 as UIHandlerId,
+ label: i18n.str`Customer`,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Contracting partner`,
+ fields: [
+ {
+ id: "IDENTITY_CONTRACTING_PARTNER" satisfies keyof TalerAmlAttributes.VQF_902_9 as UIHandlerId,
+ label: i18n.str`Contracting partner`,
+ // gana_type: "Paragraph",
+ type: "textArea",
+ required: true,
+ },
+ ],
+ },
+ {
+ title: i18n.str`Persons`,
+ description: i18n.str`The contracting partner hereby declares that the persons(s) listed below is/are the beneficial owner(s) of the assets involved in the business relationship. If the contracting prtner is also the sole beneficial owner of the assets, the contracting partner's detail must be set out below.`,
+ fields: [
+ {
+ id: "IDENTITY_LIST" satisfies keyof TalerAmlAttributes.VQF_902_9 as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "Form<VQF_902_9_identity>[]",
+ type: "array",
+ labelFieldId: "" as UIHandlerId,
+ fields: [
+ {
+ id: "IDENTITY_FULL_NAME" satisfies keyof TalerAmlAttributes.VQF_902_9_identity as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "String",
+ type: "text",
+ required: true,
+ },
+ {
+ id: "IDENTITY_BIRTHDATE" satisfies keyof TalerAmlAttributes.VQF_902_9_identity as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "AbsoluteDate",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy",
+ pattern: "dd/MM/yyyy",
+ required: true,
+ },
+ {
+ id: "IDENTITY_NATIONALITY" satisfies keyof TalerAmlAttributes.VQF_902_9_identity as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "CountryCode",
+ type: "selectOne",
+ choices: countryList(i18n),
+ required: true,
+ },
+ {
+ id: "IDENTITY_DOMICILE" satisfies keyof TalerAmlAttributes.VQF_902_9_identity as UIHandlerId,
+ label: i18n.str``,
+ // gana_type: "ResidentialAddress",
+ type: "textArea",
+ required: true,
+ },
+ ],
+ required: false,
+ },
+ ],
+ },
+ {
+ title: i18n.str`The contracting partner hereby undertakes to inform automatically of any changes to the information contained herein.`,
+ description: i18n.str`It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, documents forgery)`,
+ fields: [
+ {
+ id: "SIGNATURE" satisfies keyof TalerAmlAttributes.VQF_902_9 as UIHandlerId,
+ label: i18n.str`Signature`,
+ // gana_type: "AbsoluteDateTime",
+ type: "text",
+ required: true,
+ disabled: true,
+ },
+ {
+ id: "SIGN_DATE" satisfies keyof TalerAmlAttributes.VQF_902_9 as UIHandlerId,
+ label: i18n.str`Date`,
+ // gana_type: "String",
+ type: "absoluteTimeText",
+ placeholder: "dd/MM/yyyy HH:mm:ss",
+ pattern: "dd/MM/yyyy HH:mm:ss",
+ required: true,
+ disabled: true,
+ },
+ ],
+ },
+ ],
+ };
+}
diff --git a/packages/kyc-ui/src/forms/accept-tos.ts b/packages/kyc-ui/src/forms/accept-tos.ts
@@ -17,6 +17,8 @@
import type {
DoubleColumnForm,
InternationalizationAPI,
+ SingleColumnForm,
+ UIFormElementConfig,
UIHandlerId,
} from "@gnu-taler/web-util/browser";
@@ -27,27 +29,41 @@ function filterUndefined<T>(ar: Array<T | undefined>): Array<T> {
export const acceptTos = (
i18n: InternationalizationAPI,
context?: any,
-): DoubleColumnForm => ({
- type: "double-column" as const,
- design: [
+): SingleColumnForm => ({
+ type: "single-column" as const,
+ fields: filterUndefined<UIFormElementConfig>([
{
- title: i18n.str`Accept Terms of Service`,
- fields: filterUndefined([
- context?.tos_url
- ? {
- type: "htmlIframe",
- label: context?.provider_name ?? `Link`,
- url: context.tos_url,
- }
- : undefined,
- {
- type: "toggle",
- id: "ACCEPTED_TERMS_OF_SERVICE" as UIHandlerId,
- required: true,
- threeState: true,
- label: i18n.str`Do you accept terms of service`,
- },
- ]),
+ type: "toggle",
+ id: "ACCEPTED_TERMS_OF_SERVICE" as UIHandlerId,
+ required: true,
+ threeState: true,
+ label: i18n.str`Do you accept terms of service`,
},
- ],
+ context?.tos_url
+ ? {
+ type: "htmlIframe",
+ label: context?.provider_name ?? `Link`,
+ url: context.tos_url,
+ }
+ : undefined,
+ {
+ type: "toggle",
+ id: "ACCEPTED_TERMS_OF_SERVICE" as UIHandlerId,
+ required: true,
+ threeState: true,
+ label: i18n.str`Do you accept terms of service`,
+ },
+ {
+ type: "download-link",
+ url: context.tos_url,
+ label: "Download text version",
+ media: "text/plain",
+ },
+ {
+ type: "download-link",
+ url: context.tos_url,
+ label: "Download PDF version",
+ media: "application/pdf",
+ },
+ ]),
});
diff --git a/packages/kyc-ui/src/forms/ganaForms.ts b/packages/kyc-ui/src/forms/ganaForms.ts
@@ -1,288 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2022-2024 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-import {
- DoubleColumnForm,
- InternationalizationAPI,
- UIFormElementConfig,
- UIFormFieldBaseConfig,
- UIHandlerId,
-} from "@gnu-taler/web-util/browser";
-
-import ganaForms from "./taler_aml_attributes.json";
-
-type GanaField = {
- required: boolean;
- section: string;
- type: string;
- label: string;
- order?: number;
- enumeration: string[];
-};
-
-type GanaForm = { [fieldName: string]: GanaField | string };
-
-type FieldsBySection = {
- [section: string]: (UIFormElementConfig & { order?: number })[];
-};
-
-export function VQF_902_1(i18n: InternationalizationAPI): DoubleColumnForm {
- const fieldsBySections = convertGanaJsonToDoubleColumnFormSection(
- ganaForms.VQF_902_1,
- converGanaField,
- );
-
- return {
- type: "double-column",
- design: [
- {
- title: i18n.str`This form was completed by`,
- fields: fieldsBySections["header"].map((f) => {
- (f as UIFormFieldBaseConfig).disabled = true;
- return f;
- }),
- },
- {
- title: i18n.str`Information`,
- description: i18n.str`The customer is the person with whom the member concludes the contract with regard to the financial service provided (civil law). Does the member act as director of a domiciliary company, this domiciliary company is the customer.`,
- fields: fieldsBySections["1"],
- },
- {
- title: i18n.str`Information on the natural persons who establish the business relationship for legal entities and partnerships`,
- description: i18n.str`For legal entities and partnerships the identity of the natural persons who establish the business relationship must be verified.`,
- fields: fieldsBySections["2"],
- },
- {
- title: i18n.str`Acceptance of business relationship`,
- fields: fieldsBySections["3"],
- },
- {
- title: i18n.str`Information on the beneficial owner of the assets and/or controlling person`,
- description: i18n.str`Establishment of the beneficial owner of the assets and/or controlling person`,
- fields: fieldsBySections["4"],
- },
- {
- title: i18n.str`Evaluation with regard to embargo procedures/terrorism lists on establishing the business relationship`,
- description: i18n.str`Verification whether the customer, beneficial owners of the assets, controlling persons, authorized representatives or other involved persons are listed on an embargo/terrorism list (date of verification/result)`,
- fields: fieldsBySections["5"],
- },
- ],
- };
-}
-
-function isArrayType(type: string): keyof typeof ganaForms | undefined {
- if (!type.endsWith("[]")) return undefined;
- return type.substring(0, type.length - 2) as keyof typeof ganaForms;
-}
-
-function isFormType(type: string): keyof typeof ganaForms | undefined {
- const start = type.indexOf("<");
- const end = type.indexOf(">");
-
- if (start === -1 || end === -1) return undefined;
- return type.substring(start + 1, end) as keyof typeof ganaForms;
-}
-
-function converGanaField(
- fieldName: string,
- fieldInfo: GanaField,
-): UIFormElementConfig {
- const arrayType = isArrayType(fieldInfo.type);
- if (arrayType) {
- const ft = isFormType(arrayType);
- const containedType = !ft ? arrayType : ft;
- const fields = mergeAllSections(
- convertGanaJsonToDoubleColumnFormSection(
- ganaForms[containedType],
- converGanaField,
- ),
- );
- const f = fields.find((f) => "id" in f); //?.id;
- const labelFieldId = f && "id" in f ? f.id : ("!!" as UIHandlerId);
- return {
- id: fieldName as UIHandlerId,
- label: !fieldInfo.label ? fieldName : fieldInfo.label,
- type: "array",
- fields,
- labelFieldId,
- };
- }
- const formType = isFormType(fieldInfo.type);
- if (formType) {
- return {
- label: !fieldInfo.label ? fieldName : fieldInfo.label,
- type: "group",
- fields: mergeAllSections(
- convertGanaJsonToDoubleColumnFormSection(
- ganaForms[formType] as GanaForm,
- converGanaField,
- ),
- ),
- };
- }
-
- switch (fieldInfo.type) {
- case "Boolean": {
- return {
- id: fieldName as UIHandlerId,
- label: !fieldInfo.label ? fieldName : fieldInfo.label,
- type: "toggle",
- required: fieldInfo.required,
- threeState: false,
- };
- }
- case "File": {
- return {
- id: fieldName as UIHandlerId,
- label: !fieldInfo.label ? fieldName : fieldInfo.label,
- type: "file",
- required: fieldInfo.required,
- };
- }
- case "String": {
- return {
- id: fieldName as UIHandlerId,
- label: !fieldInfo.label ? fieldName : fieldInfo.label,
- type: "text",
- required: fieldInfo.required,
- };
- }
- case "Email": {
- return {
- id: fieldName as UIHandlerId,
- label: !fieldInfo.label ? fieldName : fieldInfo.label,
- type: "text",
- required: fieldInfo.required,
- };
- }
- case "Phone": {
- return {
- id: fieldName as UIHandlerId,
- label: !fieldInfo.label ? fieldName : fieldInfo.label,
- type: "text",
- required: fieldInfo.required,
- };
- }
- case "Paragraph": {
- return {
- id: fieldName as UIHandlerId,
- label: !fieldInfo.label ? fieldName : fieldInfo.label,
- type: "textArea",
- required: fieldInfo.required,
- };
- }
- case "ResidentialAddress": {
- return {
- id: fieldName as UIHandlerId,
- label: !fieldInfo.label ? fieldName : fieldInfo.label + "!!!",
- type: "text",
- required: fieldInfo.required,
- };
- }
- case "BusinessAddress": {
- return {
- id: fieldName as UIHandlerId,
- label: !fieldInfo.label ? fieldName : fieldInfo.label + "!!!",
- type: "text",
- required: fieldInfo.required,
- };
- }
- case "CountryCode": {
- return {
- id: fieldName as UIHandlerId,
- label: !fieldInfo.label ? fieldName : fieldInfo.label,
- type: "selectOne",
- choices: [
- { label: "AR", value: "AR" },
- { label: "DE", value: "DE" },
- ],
- required: fieldInfo.required,
- };
- }
- case "LangCode": {
- return {
- id: fieldName as UIHandlerId,
- label: !fieldInfo.label ? fieldName : fieldInfo.label,
- type: "text",
- required: fieldInfo.required,
- };
- }
- case "AbsoluteDateTime": {
- return {
- id: fieldName as UIHandlerId,
- label: !fieldInfo.label ? fieldName : fieldInfo.label,
- type: "absoluteTimeText",
- required: fieldInfo.required,
- placeholder: "dd/MM/yyyy HH:mm:ss",
- pattern: "dd/MM/yyyy HH:mm:ss",
- };
- }
- case "AbsoluteDate": {
- return {
- id: fieldName as UIHandlerId,
- label: !fieldInfo.label ? fieldName : fieldInfo.label,
- type: "absoluteTimeText",
- required: fieldInfo.required,
- placeholder: "dd/MM/yyyy",
- pattern: "dd/MM/yyyy",
- };
- }
- case "Amount": {
- return {
- id: fieldName as UIHandlerId,
- label: !fieldInfo.label ? fieldName : fieldInfo.label,
- type: "amount",
- currency: "asd",
- required: fieldInfo.required,
- };
- }
- default: {
- return {
- type: "caption",
- label: `unkown field type ${fieldInfo.type} for id ${fieldName}`,
- };
- }
- }
-}
-
-function convertGanaJsonToDoubleColumnFormSection(
- form: GanaForm,
- convert: (name: string, info: GanaField) => UIFormElementConfig,
-): FieldsBySection {
- const list = Object.entries(form);
- const sections = list.reduce((prev, [key, value]) => {
- if (typeof value === "string") {
- return prev;
- }
- if (!prev[value.section]) {
- prev[value.section] = [];
- }
- const d: UIFormElementConfig & { order?: number } = convert(key, value);
- d.order = value.order;
- prev[value.section].push(d);
- return prev;
- }, {} as FieldsBySection);
-
- Object.values(sections).forEach((sec) => {
- sec.sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
- });
- return sections;
-}
-
-function mergeAllSections(fields: FieldsBySection): UIFormElementConfig[] {
- const list = Object.values(fields).flatMap((d) => d);
- list.sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
- return list;
-}
diff --git a/packages/kyc-ui/src/forms/index.ts b/packages/kyc-ui/src/forms/index.ts
@@ -1,6 +1,6 @@
/*
This file is part of GNU Taler
- (C) 2022-2024 Taler Systems S.A.
+ (C) 2022-2025 Taler Systems S.A.
GNU Taler is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
@@ -21,7 +21,15 @@ import { simplest } from "./simplest.js";
import { acceptTos } from "./accept-tos.js";
import { nameAndDob } from "./nameAndBirthdate.js";
import { personalInfo } from "./personal-info.js";
-import { VQF_902_1 } from "./ganaForms.js";
+import { VQF_902_15 } from "./VQF_902_15.js";
+import { VQF_902_14 } from "./VQF_902_14.js";
+import { VQF_902_13 } from "./VQF_902_13.js";
+import { VQF_902_12 } from "./VQF_902_12.js";
+import { VQF_902_11 } from "./VQF_902_11.js";
+import { VQF_902_9 } from "./VQF_902_9.js";
+import { VQF_902_5 } from "./VQF_902_5.js";
+import { VQF_902_4 } from "./VQF_902_4.js";
+import { VQF_902_1 } from "./VQF_902_1.js";
export const preloadedForms: (
i18n: InternationalizationAPI,
@@ -40,18 +48,71 @@ export const preloadedForms: (
config: personalInfo(i18n),
},
{
- label: i18n.str`Accept Terms of Service`,
+ label: i18n.str`Terms of Service`,
id: "accept-tos",
version: 1,
config: acceptTos(i18n, context),
},
{
- label: i18n.str`Identification form`,
+ label: i18n.str`Identification Form`,
+ description: i18n.str`The customer has to be identified on entering into a permanent business relationship or on concluding a cash transaction, which meets the according threshold.`,
id: "vqf-902-1",
version: 1,
config: VQF_902_1(i18n),
},
{
+ label: i18n.str`Risk Profile AMLA`,
+ id: "vqf-902-4",
+ version: 1,
+ config: VQF_902_4(i18n),
+ },
+ {
+ label: i18n.str`Customer Profile`,
+ description: i18n.str`The information below has to refer to the persons from whom the assets originate ultimately (e.g. beneficial owner of the assets, founder/creator of a trust or foundation). Is the customer an operational legal entity or partnership the information may refer to the entity itself (not to the controlling person), unless the entity holds the assets in trust for a third party.`,
+ id: "vqf-902-5",
+ version: 1,
+ config: VQF_902_5(i18n),
+ },
+ {
+ label: i18n.str`Declaration of identity of the beneficial owner (A)`,
+ id: "vqf-902-9",
+ version: 1,
+ config: VQF_902_9(i18n),
+ },
+ {
+ label: i18n.str`Establishing of the controlling person of operating legal entities and partnerships both not quoted on the stock exchange (K)`,
+ description: i18n.str`for operating legal entities and partnerships that are contracting partner as well as analogously for operating legal entities and partnership that are beneficial owners`,
+ id: "vqf-902-11",
+ version: 1,
+ config: VQF_902_11(i18n),
+ },
+ {
+ label: i18n.str`Foundations (as well as similar constructs) (S)`,
+ id: "vqf-902-12",
+ version: 1,
+ config: VQF_902_12(i18n),
+ },
+ {
+ label: i18n.str`Declaration for trusts (T)`,
+ id: "vqf-902-13",
+ version: 1,
+ config: VQF_902_13(i18n),
+ },
+ {
+ label: i18n.str`Special Clarifications`,
+ description: i18n.str`When a business relationship or transaction is associated with increased risk, appears unusual or evidence exists that the assets are the proceeds of a felony or a qualified tax offence, the member has to perform additional clarifications.`,
+ id: "vqf-902-14",
+ version: 1,
+ config: VQF_902_14(i18n),
+ },
+ {
+ label: i18n.str`Insurance policies (I)`,
+ description: i18n.str`Information of life insurance policies with separately managed accounts/securities accounts (so-called insurance wrappers)`,
+ id: "vqf-902-15",
+ version: 1,
+ config: VQF_902_15(i18n),
+ },
+ {
label: i18n.str`Name and birthdate`,
id: "name_and_dob",
version: 1,
diff --git a/packages/kyc-ui/src/forms/taler_aml_attributes.json b/packages/kyc-ui/src/forms/taler_aml_attributes.json
@@ -1,1661 +0,0 @@
-{
- "VQF_902_1": {
- "ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "Type of correspondence service",
- "order": 3,
- "enumeration": ["TO_THE_CUSTOMER","HOLD_AT_BANK","TO_THE_MEMBER","TO_A_THIRD_PARTY"],
- "section": "3"
- },
- "ACCEPTANCE_DATE": {
- "required": false,
- "closed": false,
- "type": "AbsoluteDate",
- "label": "Date",
- "order": 1,
- "enumeration": [],
- "section": "3"
- },
- "ACCEPTANCE_FURTHER_INFO": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "Further information",
- "order": 5,
- "enumeration": [],
- "section": "3"
- },
- "ACCEPTANCE_LANGUAGE": {
- "required": false,
- "closed": false,
- "type": "LangCode",
- "label": "Language",
- "order": 4,
- "enumeration": [],
- "section": "3"
- },
- "ACCEPTANCE_METHOD": {
- "required": false,
- "closed": true,
- "type": "String",
- "label": "Accepted by",
- "order": 2,
- "enumeration": ["FACE_TO_FACE","AUTHENTICATED_COPY","RESIDENTIAL_ADDRESS_VALIDATED"],
- "section": "3"
- },
- "CUSTOMER_ENTITY_ADDRESS": {
- "required": true,
- "closed": false,
- "type": "BusinessAddress",
- "label": "Domicile",
- "order": 14,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_ENTITY_COMPANY_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "Company name",
- "order": 13,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_ENTITY_CONTACT_PERSON_NAME": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "Contact person",
- "order": 15,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_ENTITY_EMAIL": {
- "required": false,
- "closed": false,
- "type": "Email",
- "label": "E-mail",
- "order": 18,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_ENTITY_ID": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "Identification document",
- "order": 19,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_ENTITY_ID_COPY": {
- "required": true,
- "closed": false,
- "type": "File",
- "label": "Picutre of identification document",
- "order": 20,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_ENTITY_PHONE": {
- "required": false,
- "closed": false,
- "type": "Phone",
- "label": "Telephone",
- "order": 17,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_ID": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "order": 3,
- "enumeration": [],
- "section": "header"
- },
- "CUSTOMER_NATURAL_BIRTHDATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDate",
- "label": "Date of birth",
- "order": 5,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_NATURAL_COMPANY_ID": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "Company identification document",
- "order": 11,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_NATURAL_COMPANY_ID_COPY": {
- "required": false,
- "closed": false,
- "type": "File",
- "label": "Picture of company identification document",
- "order": 12,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_NATURAL_COMPANY_NAME": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "Company name",
- "order": 9,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_NATURAL_EMAIL": {
- "required": false,
- "closed": false,
- "type": "Email",
- "label": "E-mail",
- "order": 4,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_NATURAL_FULL_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "Full name",
- "order": 1,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_NATURAL_NATIONALITY": {
- "required": true,
- "closed": false,
- "type": "CountryCode",
- "label": "Nationality",
- "order": 6,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_NATURAL_NATIONAL_ID": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "Identification document",
- "order": 7,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_NATURAL_NATIONAL_ID_COPY": {
- "required": true,
- "closed": false,
- "type": "File",
- "label": "Picture of identification document",
- "order": 8,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_NATURAL_PHONE": {
- "required": false,
- "closed": false,
- "type": "Phone",
- "label": "Telephone",
- "order": 3,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_NATURAL_REGISTERED_OFFICE": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "Registered office",
- "order": 10,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_NATURAL_RESIDENTIAL": {
- "required": true,
- "closed": false,
- "type": "ResidentialAddress",
- "label": "Residential address",
- "order": 2,
- "enumeration": [],
- "section": "1"
- },
- "CUSTOMER_TYPE": {
- "required": true,
- "closed": true,
- "type": "String",
- "label": "Customer type",
- "order": 1,
- "enumeration": ["NATURAL","LEGAL_ENTITY","FOUNDATION","TRUST","LIFE_INSURANCE","OTHER"],
- "section": "4"
- },
- "EMBARGO_TERRORISM_INFO": {
- "required": false,
- "closed": false,
- "type": "Paragraph",
- "label": "Embargo information",
- "order": 2,
- "enumeration": [],
- "section": "5"
- },
- "FORM_FILLING_DATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDateTime",
- "label": "Date",
- "order": 2,
- "enumeration": [],
- "section": "header"
- },
- "FOUNDER_LIST": {
- "required": true,
- "closed": false,
- "type": "Form<VQF_902_1_founder>[]",
- "label": "Founders",
- "order": 1,
- "enumeration": [],
- "section": "2"
- },
- "OFFICER_FULL_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "Full name",
- "order": 1,
- "enumeration": [],
- "section": "header"
- },
- "RELATIONSHIP_PURPOSE": {
- "required": false,
- "closed": false,
- "type": "Paragraph",
- "label": "Purpose of the business relationship",
- "order": 3,
- "enumeration": [],
- "section": "6"
- },
- "RELATIONSHIP_TYPE": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "Type of business relationship",
- "order": 1,
- "enumeration": ["MONEY_EXCHANGE","MONEY_ASSET_TRANSFER"],
- "section": "6"
- },
-"":""},
- "VQF_902_11": {
- "CONTROLLING_ENTITY_CONTRACTING_PARTNER": {
- "required": true,
- "closed": false,
- "type": "Paragraph",
- "label": "",
- "enumeration": [],
- "section": "1"
- },
- "CONTROLLING_ENTITY_DOMICILE": {
- "required": true,
- "closed": false,
- "type": "ResidentialAddress",
- "label": "",
- "enumeration": [],
- "section": "3"
- },
- "CONTROLLING_ENTITY_FULL_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "3"
- },
- "CONTROLLING_ENTITY_LEVEL": {
- "required": true,
- "closed": true,
- "type": "String",
- "label": "",
- "enumeration": ["25_MORE_RIGHTS","OTHER_WAY","DIRECTOR"],
- "section": "2"
- },
- "CONTROLLING_ENTITY_THIRD_PERSON": {
- "required": true,
- "closed": false,
- "type": "Boolean",
- "label": "",
- "enumeration": [],
- "section": "4"
- },
- "CUSTOMER_ID": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "order": 3,
- "enumeration": [],
- "section": "header"
- },
- "FORM_FILLING_DATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDateTime",
- "label": "Date",
- "order": 2,
- "enumeration": [],
- "section": "header"
- },
- "OFFICER_FULL_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "Full name",
- "order": 1,
- "enumeration": [],
- "section": "header"
- },
- "SIGNATURE": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "order": 2,
- "enumeration": [],
- "section": "footer"
- },
- "SIGN_DATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDateTime",
- "label": "",
- "order": 1,
- "enumeration": [],
- "section": "footer"
- },
-"":""},
- "VQF_902_12": {
- "CUSTOMER_ID": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "order": 3,
- "enumeration": [],
- "section": "header"
- },
- "FORM_FILLING_DATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDateTime",
- "label": "Date",
- "order": 2,
- "enumeration": [],
- "section": "header"
- },
- "FOUNDATION_BENEFICIARY_LIST": {
- "required": true,
- "closed": false,
- "type": "Form<VQF_902_12_beneficiary>[]",
- "label": "",
- "enumeration": [],
- "section": "4"
- },
- "FOUNDATION_CONTRACTING_PARTNER": {
- "required": true,
- "closed": false,
- "type": "Paragraph",
- "label": "",
- "enumeration": [],
- "section": "0"
- },
- "FOUNDATION_DISCRETIONARY": {
- "required": true,
- "closed": false,
- "type": "Boolean",
- "label": "",
- "enumeration": [],
- "section": "1"
- },
- "FOUNDATION_FOUNDER_LIST": {
- "required": true,
- "closed": false,
- "type": "Form<VQF_902_12_founder>[]",
- "label": "",
- "enumeration": [],
- "section": "2"
- },
- "FOUNDATION_KNOWN_AS": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "0"
- },
- "FOUNDATION_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "1"
- },
- "FOUNDATION_PRE_LIST": {
- "required": true,
- "closed": false,
- "type": "Form<VQF_902_12_pre>[]",
- "label": "",
- "enumeration": [],
- "section": "3"
- },
- "FOUNDATION_REPRESENTATIVE_LIST": {
- "required": true,
- "closed": false,
- "type": "Form<VQF_902_12_representative>[]",
- "label": "",
- "enumeration": [],
- "section": "5"
- },
- "FOUNDATION_REVOCABLE": {
- "required": true,
- "closed": false,
- "type": "Boolean",
- "label": "",
- "enumeration": [],
- "section": "1"
- },
- "OFFICER_FULL_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "Full name",
- "order": 1,
- "enumeration": [],
- "section": "header"
- },
- "SIGNATURE": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "order": 2,
- "enumeration": [],
- "section": "footer"
- },
- "SIGN_DATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDateTime",
- "label": "",
- "order": 1,
- "enumeration": [],
- "section": "footer"
- },
-"":""},
- "VQF_902_12_beneficiary": {
- "FOUNDATION_BENEFICIARY_ADDITION": {
- "required": false,
- "closed": false,
- "type": "Paragraph",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_BENEFICIARY_BIRTHDATE": {
- "required": false,
- "closed": false,
- "type": "AbsoluteDate",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_BENEFICIARY_COUNTRY": {
- "required": false,
- "closed": false,
- "type": "CountryCode",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_BENEFICIARY_DOMICILE": {
- "required": false,
- "closed": false,
- "type": "ResidentialAddress",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_BENEFICIARY_FULL_NAME": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_BENEFICIARY_NATIONALITY": {
- "required": false,
- "closed": false,
- "type": "CountryCode",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_BENEFICIARY_RIGHT_TO_CLAIM": {
- "required": false,
- "closed": false,
- "type": "Boolean",
- "label": "",
- "enumeration": [],
- "section": ""
- },
-"":""},
- "VQF_902_12_founder": {
- "FOUNDATION_FOUNDER_BIRTHDATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDate",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_FOUNDER_DEATHDATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDate",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_FOUNDER_DOMICILE": {
- "required": true,
- "closed": false,
- "type": "ResidentialAddress",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_FOUNDER_FULL_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_FOUNDER_NATIONALITY": {
- "required": true,
- "closed": false,
- "type": "CountryCode",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_FOUNDER_RIGHT_TO_REVOKE": {
- "required": true,
- "closed": false,
- "type": "Boolean",
- "label": "",
- "enumeration": [],
- "section": ""
- },
-"":""},
- "VQF_902_12_pre": {
- "FOUNDATION_PRE_BIRTHDATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDate",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_PRE_COUNTRY": {
- "required": true,
- "closed": false,
- "type": "CountryCode",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_PRE_DEATHDATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDate",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_PRE_DOMICILE": {
- "required": true,
- "closed": false,
- "type": "ResidentialAddress",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_PRE_FULL_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_PRE_NATIONALITY": {
- "required": true,
- "closed": false,
- "type": "CountryCode",
- "label": "",
- "enumeration": [],
- "section": ""
- },
-"":""},
- "VQF_902_12_representative": {
- "FOUNDATION_REPRESENTATIVE_BIRTHDATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDate",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_REPRESENTATIVE_COUNTRY": {
- "required": true,
- "closed": false,
- "type": "CountryCode",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_REPRESENTATIVE_DOMICILE": {
- "required": true,
- "closed": false,
- "type": "ResidentialAddress",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_REPRESENTATIVE_FULL_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_REPRESENTATIVE_NATIONALITY": {
- "required": true,
- "closed": false,
- "type": "CountryCode",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "FOUNDATION_REPRESENTATIVE_RIGHT_TO_REVOKE": {
- "required": true,
- "closed": false,
- "type": "Boolean",
- "label": "",
- "enumeration": [],
- "section": ""
- },
-"":""},
- "VQF_902_13": {
- "CUSTOMER_ID": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "order": 3,
- "enumeration": [],
- "section": "header"
- },
- "FORM_FILLING_DATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDateTime",
- "label": "Date",
- "order": 2,
- "enumeration": [],
- "section": "header"
- },
- "OFFICER_FULL_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "Full name",
- "order": 1,
- "enumeration": [],
- "section": "header"
- },
- "SIGNATURE": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "order": 2,
- "enumeration": [],
- "section": "footer"
- },
- "SIGN_DATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDateTime",
- "label": "",
- "order": 1,
- "enumeration": [],
- "section": "footer"
- },
- "TRUST_BENEFICIARY_LIST": {
- "required": true,
- "closed": false,
- "type": "Form<VQF_902_13_beneficiary>[]",
- "label": "",
- "enumeration": [],
- "section": "4"
- },
- "TRUST_CONTRACTING_PARTNER": {
- "required": true,
- "closed": false,
- "type": "Paragraph",
- "label": "",
- "enumeration": [],
- "section": "0"
- },
- "TRUST_DISCRETIONARY": {
- "required": true,
- "closed": false,
- "type": "Boolean",
- "label": "",
- "enumeration": [],
- "section": "1"
- },
- "TRUST_KNOWN_AS": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "0"
- },
- "TRUST_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "1"
- },
- "TRUST_PRE_LIST": {
- "required": true,
- "closed": false,
- "type": "Form<VQF_902_13_pre>[]",
- "label": "",
- "enumeration": [],
- "section": "3"
- },
- "TRUST_PROTECTOR_LIST": {
- "required": true,
- "closed": false,
- "type": "Form<VQF_902_13_protector>[]",
- "label": "",
- "enumeration": [],
- "section": "5"
- },
- "TRUST_REVOCABLE": {
- "required": true,
- "closed": false,
- "type": "Boolean",
- "label": "",
- "enumeration": [],
- "section": "1"
- },
- "TRUST_SETTLOR_LIST": {
- "required": true,
- "closed": false,
- "type": "Form<VQF_902_13_settlor>[]",
- "label": "",
- "enumeration": [],
- "section": "2"
- },
-"":""},
- "VQF_902_13_beneficiary": {
- "TRUST_BENEFICIARY_ADDITION": {
- "required": false,
- "closed": false,
- "type": "Paragraph",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_BENEFICIARY_BIRTHDATE": {
- "required": false,
- "closed": false,
- "type": "AbsoluteDate",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_BENEFICIARY_COUNTRY": {
- "required": false,
- "closed": false,
- "type": "CountryCode",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_BENEFICIARY_DOMICILE": {
- "required": false,
- "closed": false,
- "type": "ResidentialAddress",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_BENEFICIARY_FULL_NAME": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_BENEFICIARY_NATIONALITY": {
- "required": false,
- "closed": false,
- "type": "CountryCode",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_BENEFICIARY_RIGHT_TO_CLAIM": {
- "required": false,
- "closed": false,
- "type": "Boolean",
- "label": "",
- "enumeration": [],
- "section": ""
- },
-"":""},
- "VQF_902_13_further": {
- "TRUST_FURTHER_BIRTHDATE": {
- "required": false,
- "closed": false,
- "type": "AbsoluteDate",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_FURTHER_COUNTRY": {
- "required": false,
- "closed": false,
- "type": "CountryCode",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_FURTHER_DOMICILE": {
- "required": false,
- "closed": false,
- "type": "ResidentialAddress",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_FURTHER_FULL_NAME": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_FURTHER_LIST": {
- "required": true,
- "closed": false,
- "type": "Form<VQF_902_13_further>[]",
- "label": "",
- "enumeration": [],
- "section": "5"
- },
- "TRUST_FURTHER_NATIONALITY": {
- "required": false,
- "closed": false,
- "type": "CountryCode",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_FURTHER_RIGHT_TO_REVOKE": {
- "required": false,
- "closed": false,
- "type": "Boolean",
- "label": "",
- "enumeration": [],
- "section": ""
- },
-"":""},
- "VQF_902_13_pre": {
- "TRUST_PRE_BIRTHDATE": {
- "required": false,
- "closed": false,
- "type": "AbsoluteDate",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_PRE_COUNTRY": {
- "required": false,
- "closed": false,
- "type": "CountryCode",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_PRE_DEATHDATE": {
- "required": false,
- "closed": false,
- "type": "AbsoluteDate",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_PRE_DOMICILE": {
- "required": false,
- "closed": false,
- "type": "ResidentialAddress",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_PRE_FULL_NAME": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_PRE_NATIONALITY": {
- "required": false,
- "closed": false,
- "type": "CountryCode",
- "label": "",
- "enumeration": [],
- "section": ""
- },
-"":""},
- "VQF_902_13_protector": {
- "TRUST_PROTECTOR_BIRTHDATE": {
- "required": false,
- "closed": false,
- "type": "AbsoluteDate",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_PROTECTOR_COUNTRY": {
- "required": false,
- "closed": false,
- "type": "CountryCode",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_PROTECTOR_DOMICILE": {
- "required": false,
- "closed": false,
- "type": "ResidentialAddress",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_PROTECTOR_FULL_NAME": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_PROTECTOR_NATIONALITY": {
- "required": false,
- "closed": false,
- "type": "CountryCode",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_PROTECTOR_RIGHT_TO_REVOKE": {
- "required": false,
- "closed": false,
- "type": "Boolean",
- "label": "",
- "enumeration": [],
- "section": ""
- },
-"":""},
- "VQF_902_13_settlor": {
- "TRUST_SETTLOR_BIRTHDATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDate",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_SETTLOR_DEATHDATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDate",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_SETTLOR_DOMICILE": {
- "required": true,
- "closed": false,
- "type": "ResidentialAddress",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_SETTLOR_FULL_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_SETTLOR_NATIONALITY": {
- "required": true,
- "closed": false,
- "type": "CountryCode",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "TRUST_SETTLOR_RIGHT_TO_REVOKE": {
- "required": true,
- "closed": false,
- "type": "Boolean",
- "label": "",
- "enumeration": [],
- "section": ""
- },
-"":""},
- "VQF_902_14": {
- "CUSTOMER_ID": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "order": 3,
- "enumeration": [],
- "section": "header"
- },
- "FORM_FILLING_DATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDateTime",
- "label": "Date",
- "order": 2,
- "enumeration": [],
- "section": "header"
- },
- "INCRISK_DOCUMENTS": {
- "required": true,
- "closed": false,
- "type": "File[]",
- "label": "",
- "enumeration": [],
- "section": "3"
- },
- "INCRISK_MEANS": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": ["GATHERING","CONSULTATION","ENQUIRIES"],
- "section": "2"
- },
- "INCRISK_REASON": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "1"
- },
- "INCRISK_RESULT": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": ["NO_SUSPICION","REASONABLE_SUSPICION","SIMPLE_SUSPICION"],
- "section": "4"
- },
- "INCRISK_SUMMARY": {
- "required": true,
- "closed": false,
- "type": "Paragraph",
- "label": "",
- "enumeration": [],
- "section": "3"
- },
- "OFFICER_FULL_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "Full name",
- "order": 1,
- "enumeration": [],
- "section": "header"
- },
-"":""},
- "VQF_902_1_founder": {
- "FOUNDER_AUTHORIZATION_TYPE": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "Type of authorization",
- "order": 4,
- "enumeration": [],
- "section": "2"
- },
- "FOUNDER_BIRTHDATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDate",
- "label": "Date of birth",
- "order": 2,
- "enumeration": [],
- "section": ""
- },
- "FOUNDER_FULL_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "Full name",
- "order": 1,
- "enumeration": [],
- "section": ""
- },
- "FOUNDER_NATIONALITY": {
- "required": true,
- "closed": false,
- "type": "CountryCode",
- "label": "Nationality",
- "order": 3,
- "enumeration": [],
- "section": ""
- },
- "FOUNDER_NATIONAL_ID": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "Identification document",
- "order": 5,
- "enumeration": [],
- "section": ""
- },
- "FOUNDER_NATIONAL__COPY": {
- "required": true,
- "closed": false,
- "type": "File",
- "label": "Picutre of identification document",
- "order": 6,
- "enumeration": [],
- "section": ""
- },
- "FOUNDER_POWER_OF_ATTORNEY": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "Power of attorney arrangements",
- "order": 7,
- "enumeration": ["CR","MANDATE","OTHER"],
- "section": ""
- },
- "FOUNDER_RESIDENTIAL_ADDRESS": {
- "required": true,
- "closed": false,
- "type": "ResidentialAddress",
- "label": "Residential address",
- "order": 1,
- "enumeration": [],
- "section": ""
- },
-"":""},
- "VQF_902_4": {
- "CONTACT_RISK_LEVEL": {
- "required": false,
- "closed": true,
- "type": "String",
- "label": "",
- "enumeration": ["LOW","MEDIUM","HIGH"],
- "section": "3"
- },
- "COUNTRY_RISK_LEVEL": {
- "required": false,
- "closed": true,
- "type": "String",
- "label": "",
- "enumeration": ["LOW","MEDIUM","HIGH"],
- "section": "3"
- },
- "COUNTRY_RISK_TYPE": {
- "required": false,
- "closed": true,
- "type": "String",
- "label": "",
- "enumeration": ["NATIONALITY_CUSTOMER","NATIONALITY_OWNER","DOMICILE_CUSTOMER","DOMICILE_OWNER","DOMICILE_CONTROLLING","BUSINESS_ACTIVITY","PAYMENTS"],
- "section": "3"
- },
- "CUSTOMER_ID": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "order": 3,
- "enumeration": [],
- "section": "header"
- },
- "EXTRA_CRITERA_1_RISK_DEFINITION": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "3"
- },
- "EXTRA_CRITERA_1_RISK_LEVEL": {
- "required": false,
- "closed": true,
- "type": "String",
- "label": "",
- "enumeration": ["LOW","MEDIUM","HIGH"],
- "section": "3"
- },
- "EXTRA_CRITERA_2_RISK_DEFINITION": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "3"
- },
- "EXTRA_CRITERA_2_RISK_LEVEL": {
- "required": false,
- "closed": true,
- "type": "String",
- "label": "",
- "enumeration": ["LOW","MEDIUM","HIGH"],
- "section": "3"
- },
- "FORM_FILLING_DATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDateTime",
- "label": "Date",
- "order": 2,
- "enumeration": [],
- "section": "header"
- },
- "HIGH_RISK_COUNTRY": {
- "required": true,
- "closed": false,
- "type": "Boolean",
- "label": "",
- "enumeration": [],
- "section": "2"
- },
- "HIGH_RISK__ACCEPTANCE_DATE": {
- "required": false,
- "closed": false,
- "type": "AbsoluteDateTime",
- "label": "",
- "enumeration": [],
- "section": "2"
- },
- "INDUSTRY_RISK_LEVEL": {
- "required": false,
- "closed": true,
- "type": "String",
- "label": "",
- "enumeration": ["TRANSPARENT","HIGH_CASH_TRANSACTION","NOT_WELL_KNOWN","HIGH_RISK_TRADE","UNKNOWN_INDUSTRY"],
- "section": "3"
- },
- "INDUSTRY_RISK_TYPE": {
- "required": false,
- "closed": true,
- "type": "String",
- "label": "",
- "enumeration": ["CUSTOMER","OWNER"],
- "section": "3"
- },
- "OFFICER_FULL_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "Full name",
- "order": 1,
- "enumeration": [],
- "section": "header"
- },
- "PEP_ACCEPTANCE_DATE": {
- "required": false,
- "closed": false,
- "type": "AbsoluteDateTime",
- "label": "",
- "enumeration": [],
- "section": "1"
- },
- "PEP_DOMESTIC": {
- "required": true,
- "closed": false,
- "type": "Boolean",
- "label": "",
- "enumeration": [],
- "section": "1"
- },
- "PEP_FOREIGN": {
- "required": true,
- "closed": false,
- "type": "Boolean",
- "label": "",
- "enumeration": [],
- "section": "1"
- },
- "PEP_INTERNATIONAL_ORGANIZATION": {
- "required": true,
- "closed": false,
- "type": "Boolean",
- "label": "",
- "enumeration": [],
- "section": "1"
- },
- "PRODUCT_RISK_LEVEL": {
- "required": false,
- "closed": true,
- "type": "String",
- "label": "",
- "enumeration": ["EASY","SOPHISTICATED","OFFSHORE,","COMPLEX_STRUCTURE","LARGE_NUMBER_OF_ACCOUNTS","COMPLEX_SERVICE","FREQ_TRANS_WITH_HIGH_RISK"],
- "section": "3"
- },
- "RISK_CLASIFICATION_ACCEPTANCE_DATE": {
- "required": false,
- "closed": false,
- "type": "AbsoluteDateTime",
- "label": "",
- "enumeration": [],
- "section": "3"
- },
- "RISK_CLASIFICATION_LEVEL": {
- "required": false,
- "closed": true,
- "type": "String",
- "label": "",
- "enumeration": ["WITH","WITHOUT"],
- "section": "3"
- },
-"":""},
- "VQF_902_5": {
- "BIZREL_DEVELOPMENT": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "4"
- },
- "BIZREL_FINANCIAL_BENEFICIARIES_ADDRESS": {
- "required": false,
- "closed": false,
- "type": "BusinessAddress",
- "label": "",
- "enumeration": [],
- "section": "4"
- },
- "BIZREL_FINANCIAL_BENEFICIARIES_BANK_ACCOUNT": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "4"
- },
- "BIZREL_FINANCIAL_BENEFICIARIES_FULL_NAME": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "4"
- },
- "BIZREL_FINANCIAL_VOLUME": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "4"
- },
- "BIZREL_FURTHER_INFO": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "6"
- },
- "BIZREL_INCOME": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "2"
- },
- "BIZREL_ORIGIN_AMOUNT": {
- "required": true,
- "closed": false,
- "type": "Amount",
- "label": "",
- "enumeration": [],
- "section": "3"
- },
- "BIZREL_ORIGIN_CATEGORY": {
- "required": true,
- "closed": true,
- "type": "String",
- "label": "",
- "enumeration": ["SAVINGS","OWN_BUSINESS","INHERITANCE","OTHER"],
- "section": "3"
- },
- "BIZREL_ORIGIN_CATEGORY_OTHER": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "3"
- },
- "BIZREL_ORIGIN_DETAIL": {
- "required": false,
- "closed": false,
- "type": "Paragraph",
- "label": "",
- "enumeration": [],
- "section": "3"
- },
- "BIZREL_PROFESSION": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "1"
- },
- "BIZREL_PURPOSE": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "4"
- },
- "BIZREL_THIRDPARTY_AMLA_FILES": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "5"
- },
- "BIZREL_THIRDPARTY_REFERENCES": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "5"
- },
- "BIZREL_THIRDPARTY_RELATIONSHIP": {
- "required": false,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": "5"
- },
- "CUSTOMER_ID": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "order": 3,
- "enumeration": [],
- "section": "header"
- },
- "FORM_FILLING_DATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDateTime",
- "label": "Date",
- "order": 2,
- "enumeration": [],
- "section": "header"
- },
- "OFFICER_FULL_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "Full name",
- "order": 1,
- "enumeration": [],
- "section": "header"
- },
-"":""},
- "VQF_902_9": {
- "CUSTOMER_ID": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "order": 3,
- "enumeration": [],
- "section": "header"
- },
- "FORM_FILLING_DATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDateTime",
- "label": "Date",
- "order": 2,
- "enumeration": [],
- "section": "header"
- },
- "IDENTITY_CONTRACTING_PARTNER": {
- "required": true,
- "closed": false,
- "type": "Paragraph",
- "label": "",
- "enumeration": [],
- "section": "1"
- },
- "IDENTITY_LIST": {
- "required": false,
- "closed": false,
- "type": "Form<VQF_902_9_identity>[]",
- "label": "",
- "enumeration": [],
- "section": "2"
- },
- "OFFICER_FULL_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "Full name",
- "order": 1,
- "enumeration": [],
- "section": "header"
- },
- "SIGNATURE": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "order": 2,
- "enumeration": [],
- "section": "footer"
- },
- "SIGN_DATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDateTime",
- "label": "",
- "order": 1,
- "enumeration": [],
- "section": "footer"
- },
-"":""},
- "VQF_902_9_identity": {
- "IDENTITY_BIRTHDATE": {
- "required": true,
- "closed": false,
- "type": "AbsoluteDate",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "IDENTITY_DOMICILE": {
- "required": true,
- "closed": false,
- "type": "ResidentialAddress",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "IDENTITY_FULL_NAME": {
- "required": true,
- "closed": false,
- "type": "String",
- "label": "",
- "enumeration": [],
- "section": ""
- },
- "IDENTITY_NATIONALITY": {
- "required": true,
- "closed": false,
- "type": "CountryCode",
- "label": "",
- "enumeration": [],
- "section": ""
- },
-"":""},
-"":""}
-\ No newline at end of file
diff --git a/packages/kyc-ui/src/forms/taler_aml_attributes.ts b/packages/kyc-ui/src/forms/taler_aml_attributes.ts
@@ -36,1012 +36,1157 @@ type Form<T> = T;
export namespace TalerAmlAttributes {
export interface VQF_902_1 {
/**
- *
- * Required:
+ *
+ * Required:
*/
- ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE: String;
+ ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE:
+ | "TO_THE_CUSTOMER"
+ | "HOLD_AT_BANK"
+ | "TO_THE_MEMBER"
+ | "TO_A_THIRD_PARTY"
+ | String;
/**
- *
- * Required:
+ *
+ * Required:
*/
ACCEPTANCE_DATE: AbsoluteDate;
/**
- *
- * Required:
+ *
+ * Required:
*/
ACCEPTANCE_FURTHER_INFO: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
ACCEPTANCE_LANGUAGE: LangCode;
/**
- *
- * Required:
+ *
+ * Required:
*/
- ACCEPTANCE_METHOD: String;
+ ACCEPTANCE_METHOD:
+ | "FACE_TO_FACE"
+ | "AUTHENTICATED_COPY"
+ | "RESIDENTIAL_ADDRESS_VALIDATED";
/**
- *
+ *
* Required: true
*/
CUSTOMER_ENTITY_ADDRESS: BusinessAddress;
/**
- *
+ *
* Required: true
*/
CUSTOMER_ENTITY_COMPANY_NAME: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
CUSTOMER_ENTITY_CONTACT_PERSON_NAME: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
CUSTOMER_ENTITY_EMAIL: Email;
/**
- *
+ *
* Required: true
*/
CUSTOMER_ENTITY_ID: String;
/**
- *
+ *
* Required: true
*/
CUSTOMER_ENTITY_ID_COPY: File;
/**
- *
- * Required:
+ *
+ * Required:
*/
CUSTOMER_ENTITY_PHONE: Phone;
/**
- *
+ *
* Required: true
*/
CUSTOMER_ID: String;
/**
- *
+ *
* Required: true
*/
CUSTOMER_NATURAL_BIRTHDATE: AbsoluteDate;
/**
- *
- * Required:
+ *
+ * Required:
*/
CUSTOMER_NATURAL_COMPANY_ID: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
CUSTOMER_NATURAL_COMPANY_ID_COPY: File;
/**
- *
- * Required:
+ *
+ * Required:
*/
CUSTOMER_NATURAL_COMPANY_NAME: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
CUSTOMER_NATURAL_EMAIL: Email;
/**
- *
+ *
* Required: true
*/
CUSTOMER_NATURAL_FULL_NAME: String;
/**
- *
+ *
* Required: true
*/
CUSTOMER_NATURAL_NATIONALITY: CountryCode;
/**
- *
+ *
* Required: true
*/
CUSTOMER_NATURAL_NATIONAL_ID: String;
/**
- *
+ *
* Required: true
*/
CUSTOMER_NATURAL_NATIONAL_ID_COPY: File;
/**
- *
- * Required:
+ *
+ * Required:
*/
CUSTOMER_NATURAL_PHONE: Phone;
/**
- *
- * Required:
+ *
+ * Required:
*/
CUSTOMER_NATURAL_REGISTERED_OFFICE: String;
/**
- *
+ *
* Required: true
*/
CUSTOMER_NATURAL_RESIDENTIAL: ResidentialAddress;
/**
- *
+ *
* Required: true
*/
- CUSTOMER_TYPE: String;
+ CUSTOMER_TYPE:
+ | "NATURAL"
+ | "LEGAL_ENTITY"
+ | "FOUNDATION"
+ | "TRUST"
+ | "LIFE_INSURANCE"
+ | "OTHER";
/**
- *
- * Required:
+ *
+ * Required:
*/
EMBARGO_TERRORISM_INFO: Paragraph;
/**
- *
+ *
+ * Required:
+ */
+ ENCLOSURE_BENEFICIAL_OWNER: Boolean;
+ /**
+ *
+ * Required:
+ */
+ ENCLOSURE_CUSTOMER_DOCUMENTS: Boolean;
+ /**
+ *
+ * Required:
+ */
+ ENCLOSURE_CUSTOMER_PROFILE: Boolean;
+ /**
+ *
+ * Required:
+ */
+ ENCLOSURE_IDENTIFICATION_DOCUMENTS: Boolean;
+ /**
+ *
+ * Required:
+ */
+ ENCLOSURE_RISK_PROFILE: Boolean;
+ /**
+ *
* Required: true
*/
FORM_FILLING_DATE: AbsoluteDateTime;
/**
- *
+ *
* Required: true
*/
FOUNDER_LIST: Form<VQF_902_1_founder>[];
/**
- *
+ *
* Required: true
*/
OFFICER_FULL_NAME: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
RELATIONSHIP_PURPOSE: Paragraph;
/**
- *
- * Required:
+ *
+ * Required:
*/
- RELATIONSHIP_TYPE: String;
+ RELATIONSHIP_TYPE: "MONEY_EXCHANGE" | "MONEY_ASSET_TRANSFER" | String;
}
export interface VQF_902_11 {
/**
- *
+ *
* Required: true
*/
CONTROLLING_ENTITY_CONTRACTING_PARTNER: Paragraph;
/**
- *
+ *
* Required: true
*/
CONTROLLING_ENTITY_DOMICILE: ResidentialAddress;
/**
- *
+ *
* Required: true
*/
CONTROLLING_ENTITY_FULL_NAME: String;
/**
- *
+ *
* Required: true
*/
- CONTROLLING_ENTITY_LEVEL: String;
+ CONTROLLING_ENTITY_LEVEL: "25_MORE_RIGHTS" | "OTHER_WAY" | "DIRECTOR";
/**
- *
+ *
* Required: true
*/
CONTROLLING_ENTITY_THIRD_PERSON: Boolean;
/**
- *
+ *
* Required: true
*/
CUSTOMER_ID: String;
/**
- *
+ *
* Required: true
*/
FORM_FILLING_DATE: AbsoluteDateTime;
/**
- *
+ *
* Required: true
*/
OFFICER_FULL_NAME: String;
/**
- *
+ *
* Required: true
*/
SIGNATURE: String;
/**
- *
+ *
* Required: true
*/
SIGN_DATE: AbsoluteDateTime;
}
export interface VQF_902_12 {
/**
- *
+ *
* Required: true
*/
CUSTOMER_ID: String;
/**
- *
+ *
* Required: true
*/
FORM_FILLING_DATE: AbsoluteDateTime;
/**
- *
+ *
+ * Required:
+ */
+ FOUNDATION_BENEFICIARY_ADDITION: Paragraph;
+ /**
+ *
* Required: true
*/
FOUNDATION_BENEFICIARY_LIST: Form<VQF_902_12_beneficiary>[];
/**
- *
+ *
* Required: true
*/
FOUNDATION_CONTRACTING_PARTNER: Paragraph;
/**
- *
+ *
* Required: true
*/
FOUNDATION_DISCRETIONARY: Boolean;
/**
- *
+ *
* Required: true
*/
FOUNDATION_FOUNDER_LIST: Form<VQF_902_12_founder>[];
/**
- *
+ *
* Required: true
*/
FOUNDATION_KNOWN_AS: String;
/**
- *
+ *
* Required: true
*/
FOUNDATION_NAME: String;
/**
- *
+ *
* Required: true
*/
FOUNDATION_PRE_LIST: Form<VQF_902_12_pre>[];
/**
- *
+ *
* Required: true
*/
FOUNDATION_REPRESENTATIVE_LIST: Form<VQF_902_12_representative>[];
/**
- *
+ *
* Required: true
*/
FOUNDATION_REVOCABLE: Boolean;
/**
- *
+ *
* Required: true
*/
OFFICER_FULL_NAME: String;
/**
- *
+ *
* Required: true
*/
SIGNATURE: String;
/**
- *
+ *
* Required: true
*/
SIGN_DATE: AbsoluteDateTime;
}
export interface VQF_902_12_beneficiary {
/**
- *
- * Required:
- */
- FOUNDATION_BENEFICIARY_ADDITION: Paragraph;
- /**
- *
- * Required:
+ *
+ * Required:
*/
FOUNDATION_BENEFICIARY_BIRTHDATE: AbsoluteDate;
/**
- *
- * Required:
+ *
+ * Required:
*/
FOUNDATION_BENEFICIARY_COUNTRY: CountryCode;
/**
- *
- * Required:
+ *
+ * Required:
*/
FOUNDATION_BENEFICIARY_DOMICILE: ResidentialAddress;
/**
- *
- * Required:
+ *
+ * Required:
*/
FOUNDATION_BENEFICIARY_FULL_NAME: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
FOUNDATION_BENEFICIARY_NATIONALITY: CountryCode;
/**
- *
- * Required:
+ *
+ * Required:
*/
FOUNDATION_BENEFICIARY_RIGHT_TO_CLAIM: Boolean;
}
export interface VQF_902_12_founder {
/**
- *
+ *
* Required: true
*/
FOUNDATION_FOUNDER_BIRTHDATE: AbsoluteDate;
/**
- *
+ *
* Required: true
*/
FOUNDATION_FOUNDER_DEATHDATE: AbsoluteDate;
/**
- *
+ *
* Required: true
*/
FOUNDATION_FOUNDER_DOMICILE: ResidentialAddress;
/**
- *
+ *
* Required: true
*/
FOUNDATION_FOUNDER_FULL_NAME: String;
/**
- *
+ *
* Required: true
*/
FOUNDATION_FOUNDER_NATIONALITY: CountryCode;
/**
- *
+ *
* Required: true
*/
FOUNDATION_FOUNDER_RIGHT_TO_REVOKE: Boolean;
}
export interface VQF_902_12_pre {
/**
- *
+ *
* Required: true
*/
FOUNDATION_PRE_BIRTHDATE: AbsoluteDate;
/**
- *
+ *
* Required: true
*/
FOUNDATION_PRE_COUNTRY: CountryCode;
/**
- *
+ *
* Required: true
*/
FOUNDATION_PRE_DEATHDATE: AbsoluteDate;
/**
- *
+ *
* Required: true
*/
FOUNDATION_PRE_DOMICILE: ResidentialAddress;
/**
- *
+ *
* Required: true
*/
FOUNDATION_PRE_FULL_NAME: String;
/**
- *
+ *
* Required: true
*/
FOUNDATION_PRE_NATIONALITY: CountryCode;
}
export interface VQF_902_12_representative {
/**
- *
+ *
* Required: true
*/
FOUNDATION_REPRESENTATIVE_BIRTHDATE: AbsoluteDate;
/**
- *
+ *
* Required: true
*/
FOUNDATION_REPRESENTATIVE_COUNTRY: CountryCode;
/**
- *
+ *
* Required: true
*/
FOUNDATION_REPRESENTATIVE_DOMICILE: ResidentialAddress;
/**
- *
+ *
* Required: true
*/
FOUNDATION_REPRESENTATIVE_FULL_NAME: String;
/**
- *
+ *
* Required: true
*/
FOUNDATION_REPRESENTATIVE_NATIONALITY: CountryCode;
/**
- *
+ *
* Required: true
*/
FOUNDATION_REPRESENTATIVE_RIGHT_TO_REVOKE: Boolean;
}
export interface VQF_902_13 {
/**
- *
+ *
* Required: true
*/
CUSTOMER_ID: String;
/**
- *
+ *
* Required: true
*/
FORM_FILLING_DATE: AbsoluteDateTime;
/**
- *
+ *
* Required: true
*/
OFFICER_FULL_NAME: String;
/**
- *
+ *
* Required: true
*/
SIGNATURE: String;
/**
- *
+ *
* Required: true
*/
SIGN_DATE: AbsoluteDateTime;
/**
- *
+ *
* Required: true
*/
TRUST_BENEFICIARY_LIST: Form<VQF_902_13_beneficiary>[];
/**
- *
+ *
* Required: true
*/
TRUST_CONTRACTING_PARTNER: Paragraph;
/**
- *
+ *
* Required: true
*/
TRUST_DISCRETIONARY: Boolean;
/**
- *
+ *
* Required: true
*/
TRUST_KNOWN_AS: String;
/**
- *
+ *
* Required: true
*/
TRUST_NAME: String;
/**
- *
+ *
* Required: true
*/
TRUST_PRE_LIST: Form<VQF_902_13_pre>[];
/**
- *
+ *
* Required: true
*/
TRUST_PROTECTOR_LIST: Form<VQF_902_13_protector>[];
/**
- *
+ *
* Required: true
*/
TRUST_REVOCABLE: Boolean;
/**
- *
+ *
* Required: true
*/
TRUST_SETTLOR_LIST: Form<VQF_902_13_settlor>[];
}
export interface VQF_902_13_beneficiary {
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_BENEFICIARY_ADDITION: Paragraph;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_BENEFICIARY_BIRTHDATE: AbsoluteDate;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_BENEFICIARY_COUNTRY: CountryCode;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_BENEFICIARY_DOMICILE: ResidentialAddress;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_BENEFICIARY_FULL_NAME: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_BENEFICIARY_NATIONALITY: CountryCode;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_BENEFICIARY_RIGHT_TO_CLAIM: Boolean;
}
export interface VQF_902_13_further {
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_FURTHER_BIRTHDATE: AbsoluteDate;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_FURTHER_COUNTRY: CountryCode;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_FURTHER_DOMICILE: ResidentialAddress;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_FURTHER_FULL_NAME: String;
/**
- *
+ *
* Required: true
*/
TRUST_FURTHER_LIST: Form<VQF_902_13_further>[];
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_FURTHER_NATIONALITY: CountryCode;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_FURTHER_RIGHT_TO_REVOKE: Boolean;
}
export interface VQF_902_13_pre {
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_PRE_BIRTHDATE: AbsoluteDate;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_PRE_COUNTRY: CountryCode;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_PRE_DEATHDATE: AbsoluteDate;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_PRE_DOMICILE: ResidentialAddress;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_PRE_FULL_NAME: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_PRE_NATIONALITY: CountryCode;
}
export interface VQF_902_13_protector {
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_PROTECTOR_BIRTHDATE: AbsoluteDate;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_PROTECTOR_COUNTRY: CountryCode;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_PROTECTOR_DOMICILE: ResidentialAddress;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_PROTECTOR_FULL_NAME: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_PROTECTOR_NATIONALITY: CountryCode;
/**
- *
- * Required:
+ *
+ * Required:
*/
TRUST_PROTECTOR_RIGHT_TO_REVOKE: Boolean;
}
export interface VQF_902_13_settlor {
/**
- *
+ *
* Required: true
*/
TRUST_SETTLOR_BIRTHDATE: AbsoluteDate;
/**
- *
+ *
* Required: true
*/
TRUST_SETTLOR_DEATHDATE: AbsoluteDate;
/**
- *
+ *
* Required: true
*/
TRUST_SETTLOR_DOMICILE: ResidentialAddress;
/**
- *
+ *
* Required: true
*/
TRUST_SETTLOR_FULL_NAME: String;
/**
- *
+ *
* Required: true
*/
TRUST_SETTLOR_NATIONALITY: CountryCode;
/**
- *
+ *
* Required: true
*/
TRUST_SETTLOR_RIGHT_TO_REVOKE: Boolean;
}
export interface VQF_902_14 {
/**
- *
+ *
* Required: true
*/
CUSTOMER_ID: String;
/**
- *
+ *
* Required: true
*/
FORM_FILLING_DATE: AbsoluteDateTime;
/**
- *
+ *
* Required: true
*/
INCRISK_DOCUMENTS: File[];
/**
- *
+ *
* Required: true
*/
- INCRISK_MEANS: String;
+ INCRISK_MEANS: "GATHERING" | "CONSULTATION" | "ENQUIRIES" | String;
/**
- *
+ *
* Required: true
*/
INCRISK_REASON: String;
/**
- *
+ *
* Required: true
*/
- INCRISK_RESULT: String;
+ INCRISK_RESULT:
+ | "NO_SUSPICION"
+ | "REASONABLE_SUSPICION"
+ | "SIMPLE_SUSPICION";
/**
- *
+ *
* Required: true
*/
INCRISK_SUMMARY: Paragraph;
/**
- *
+ *
+ * Required: true
+ */
+ OFFICER_FULL_NAME: String;
+ }
+ export interface VQF_902_15 {
+ /**
+ *
+ * Required: true
+ */
+ CUSTOMER_ID: String;
+ /**
+ *
+ * Required: true
+ */
+ FORM_FILLING_DATE: AbsoluteDateTime;
+ /**
+ *
+ * Required: true
+ */
+ INSURANCE_CONTRACTING_PARTNER: Paragraph;
+ /**
+ *
+ * Required: true
+ */
+ INSURANCE_HOLDER_BIRTHDATE: AbsoluteDate;
+ /**
+ *
+ * Required: true
+ */
+ INSURANCE_HOLDER_DOMICILE: ResidentialAddress;
+ /**
+ *
+ * Required:
+ */
+ INSURANCE_HOLDER_FULL_NAME: String;
+ /**
+ *
+ * Required: true
+ */
+ INSURANCE_HOLDER_NATIONALITY: CountryCode;
+ /**
+ *
+ * Required: true
+ */
+ INSURANCE_PAYER_BIRTHDATE: AbsoluteDate;
+ /**
+ *
+ * Required: true
+ */
+ INSURANCE_PAYER_DOMICILE: ResidentialAddress;
+ /**
+ *
+ * Required:
+ */
+ INSURANCE_PAYER_FULL_NAME: String;
+ /**
+ *
+ * Required: true
+ */
+ INSURANCE_PAYER_NATIONALITY: CountryCode;
+ /**
+ *
+ * Required: true
+ */
+ INSURANCE_RELATIONSHIP_NAME: String;
+ /**
+ *
+ * Required: true
+ */
+ INSURANCE_RELATIONSHIP_POLICY: String;
+ /**
+ *
* Required: true
*/
OFFICER_FULL_NAME: String;
+ /**
+ *
+ * Required: true
+ */
+ SIGNATURE: String;
+ /**
+ *
+ * Required: true
+ */
+ SIGN_DATE: AbsoluteDateTime;
}
export interface VQF_902_1_founder {
/**
- *
+ *
* Required: true
*/
FOUNDER_AUTHORIZATION_TYPE: String;
/**
- *
+ *
* Required: true
*/
FOUNDER_BIRTHDATE: AbsoluteDate;
/**
- *
+ *
* Required: true
*/
FOUNDER_FULL_NAME: String;
/**
- *
+ *
* Required: true
*/
FOUNDER_NATIONALITY: CountryCode;
/**
- *
+ *
* Required: true
*/
- FOUNDER_NATIONAL_ID: String;
+ FOUNDER_NATIONAL_COPY: File;
/**
- *
+ *
* Required: true
*/
- FOUNDER_NATIONAL__COPY: File;
+ FOUNDER_NATIONAL_ID: String;
/**
- *
+ *
* Required: true
*/
- FOUNDER_POWER_OF_ATTORNEY: String;
+ FOUNDER_POWER_OF_ATTORNEY: "CR" | "MANDATE" | "OTHER" | String;
/**
- *
+ *
* Required: true
*/
FOUNDER_RESIDENTIAL_ADDRESS: ResidentialAddress;
}
export interface VQF_902_4 {
/**
- *
- * Required:
+ *
+ * Required:
*/
- CONTACT_RISK_LEVEL: String;
+ CONTACT_RISK_LEVEL: "LOW" | "MEDIUM" | "HIGH";
/**
- *
- * Required:
+ *
+ * Required:
*/
- COUNTRY_RISK_LEVEL: String;
+ COUNTRY_RISK_LEVEL: "LOW" | "MEDIUM" | "HIGH";
/**
- *
- * Required:
+ *
+ * Required:
*/
- COUNTRY_RISK_TYPE: String;
+ COUNTRY_RISK_TYPE:
+ | "NATIONALITY_CUSTOMER"
+ | "NATIONALITY_OWNER"
+ | "DOMICILE_CUSTOMER"
+ | "DOMICILE_OWNER"
+ | "DOMICILE_CONTROLLING"
+ | "BUSINESS_ACTIVITY"
+ | "PAYMENTS";
/**
- *
+ *
* Required: true
*/
CUSTOMER_ID: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
EXTRA_CRITERA_1_RISK_DEFINITION: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
- EXTRA_CRITERA_1_RISK_LEVEL: String;
+ EXTRA_CRITERA_1_RISK_LEVEL: "LOW" | "MEDIUM" | "HIGH";
/**
- *
- * Required:
+ *
+ * Required:
*/
EXTRA_CRITERA_2_RISK_DEFINITION: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
- EXTRA_CRITERA_2_RISK_LEVEL: String;
+ EXTRA_CRITERA_2_RISK_LEVEL: "LOW" | "MEDIUM" | "HIGH";
/**
- *
+ *
* Required: true
*/
FORM_FILLING_DATE: AbsoluteDateTime;
/**
- *
- * Required: true
+ *
+ * Required:
*/
- HIGH_RISK_COUNTRY: Boolean;
+ HIGH_RISK_ACCEPTANCE_DATE: AbsoluteDateTime;
/**
- *
- * Required:
+ *
+ * Required: true
*/
- HIGH_RISK__ACCEPTANCE_DATE: AbsoluteDateTime;
+ HIGH_RISK_COUNTRY: Boolean;
/**
- *
- * Required:
+ *
+ * Required:
*/
- INDUSTRY_RISK_LEVEL: String;
+ INDUSTRY_RISK_LEVEL:
+ | "TRANSPARENT"
+ | "HIGH_CASH_TRANSACTION"
+ | "NOT_WELL_KNOWN"
+ | "HIGH_RISK_TRADE"
+ | "UNKNOWN_INDUSTRY";
/**
- *
- * Required:
+ *
+ * Required:
*/
- INDUSTRY_RISK_TYPE: String;
+ INDUSTRY_RISK_TYPE: "CUSTOMER" | "OWNER";
/**
- *
+ *
* Required: true
*/
OFFICER_FULL_NAME: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
PEP_ACCEPTANCE_DATE: AbsoluteDateTime;
/**
- *
+ *
* Required: true
*/
PEP_DOMESTIC: Boolean;
/**
- *
+ *
* Required: true
*/
PEP_FOREIGN: Boolean;
/**
- *
+ *
* Required: true
*/
PEP_INTERNATIONAL_ORGANIZATION: Boolean;
/**
- *
- * Required:
+ *
+ * Required:
*/
- PRODUCT_RISK_LEVEL: String;
+ PRODUCT_RISK_LEVEL:
+ | "EASY"
+ | "SOPHISTICATED"
+ | "OFFSHORE"
+ | "COMPLEX_STRUCTURE"
+ | "LARGE_NUMBER_OF_ACCOUNTS"
+ | "COMPLEX_SERVICE"
+ | "FREQ_TRANS_WITH_HIGH_RISK";
/**
- *
- * Required:
+ *
+ * Required:
*/
RISK_CLASIFICATION_ACCEPTANCE_DATE: AbsoluteDateTime;
/**
- *
- * Required:
+ *
+ * Required:
*/
- RISK_CLASIFICATION_LEVEL: String;
+ RISK_CLASIFICATION_LEVEL: "WITH" | "WITHOUT";
}
export interface VQF_902_5 {
/**
- *
- * Required:
+ *
+ * Required:
*/
BIZREL_DEVELOPMENT: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
BIZREL_FINANCIAL_BENEFICIARIES_ADDRESS: BusinessAddress;
/**
- *
- * Required:
+ *
+ * Required:
*/
BIZREL_FINANCIAL_BENEFICIARIES_BANK_ACCOUNT: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
BIZREL_FINANCIAL_BENEFICIARIES_FULL_NAME: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
BIZREL_FINANCIAL_VOLUME: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
BIZREL_FURTHER_INFO: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
BIZREL_INCOME: String;
/**
- *
+ *
* Required: true
*/
BIZREL_ORIGIN_AMOUNT: Amount;
/**
- *
+ *
* Required: true
*/
- BIZREL_ORIGIN_CATEGORY: String;
+ BIZREL_ORIGIN_CATEGORY:
+ | "SAVINGS"
+ | "OWN_BUSINESS"
+ | "INHERITANCE"
+ | "OTHER";
/**
- *
- * Required:
+ *
+ * Required:
*/
BIZREL_ORIGIN_CATEGORY_OTHER: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
BIZREL_ORIGIN_DETAIL: Paragraph;
/**
- *
- * Required:
+ *
+ * Required:
*/
BIZREL_PROFESSION: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
BIZREL_PURPOSE: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
BIZREL_THIRDPARTY_AMLA_FILES: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
BIZREL_THIRDPARTY_REFERENCES: String;
/**
- *
- * Required:
+ *
+ * Required:
*/
BIZREL_THIRDPARTY_RELATIONSHIP: String;
/**
- *
+ *
* Required: true
*/
CUSTOMER_ID: String;
/**
- *
+ *
* Required: true
*/
FORM_FILLING_DATE: AbsoluteDateTime;
/**
- *
+ *
* Required: true
*/
OFFICER_FULL_NAME: String;
}
export interface VQF_902_9 {
/**
- *
+ *
* Required: true
*/
CUSTOMER_ID: String;
/**
- *
+ *
* Required: true
*/
FORM_FILLING_DATE: AbsoluteDateTime;
/**
- *
+ *
* Required: true
*/
IDENTITY_CONTRACTING_PARTNER: Paragraph;
/**
- *
- * Required:
+ *
+ * Required:
*/
IDENTITY_LIST: Form<VQF_902_9_identity>[];
/**
- *
+ *
* Required: true
*/
OFFICER_FULL_NAME: String;
/**
- *
+ *
* Required: true
*/
SIGNATURE: String;
/**
- *
+ *
* Required: true
*/
SIGN_DATE: AbsoluteDateTime;
}
export interface VQF_902_9_identity {
/**
- *
+ *
* Required: true
*/
IDENTITY_BIRTHDATE: AbsoluteDate;
/**
- *
+ *
* Required: true
*/
IDENTITY_DOMICILE: ResidentialAddress;
/**
- *
+ *
* Required: true
*/
IDENTITY_FULL_NAME: String;
/**
- *
+ *
* Required: true
*/
IDENTITY_NATIONALITY: CountryCode;
}
-
-
}
diff --git a/packages/kyc-ui/src/hooks/form.ts b/packages/kyc-ui/src/hooks/form.ts
@@ -163,7 +163,10 @@ export function setValueDeeper(object: any, names: string[], value: any): any {
if (object === undefined) {
return undefinedIfEmpty({ [head]: setValueDeeper({}, rest, value) });
}
- return undefinedIfEmpty({ ...object, [head]: setValueDeeper(object[head] ?? {}, rest, value) });
+ return undefinedIfEmpty({
+ ...object,
+ [head]: setValueDeeper(object[head] ?? {}, rest, value),
+ });
}
export function getShapeFromFields(
@@ -174,15 +177,12 @@ export function getShapeFromFields(
if ("id" in field) {
// FIXME: this should be a validation when loading the form
// consistency check
- if (shape.indexOf(field.id) !== -1) {
- throw Error(`already present: ${field.id}`);
- }
+ // if (shape.indexOf(field.id) !== -1) {
+ // throw Error(`already present: ${field.id}`);
+ // }
shape.push(field.id);
} else if (field.type === "group") {
- Array.prototype.push.apply(
- shape,
- getShapeFromFields(field.fields),
- );
+ Array.prototype.push.apply(shape, getShapeFromFields(field.fields));
}
});
return shape;
@@ -196,18 +196,15 @@ export function getRequiredFields(
if ("id" in field) {
// FIXME: this should be a validation when loading the form
// consistency check
- if (shape.indexOf(field.id) !== -1) {
- throw Error(`already present: ${field.id}`);
- }
+ // if (shape.indexOf(field.id) !== -1) {
+ // throw Error(`already present: ${field.id}`);
+ // }
if (!field.required) {
return;
}
shape.push(field.id);
} else if (field.type === "group") {
- Array.prototype.push.apply(
- shape,
- getRequiredFields(field.fields),
- );
+ Array.prototype.push.apply(shape, getRequiredFields(field.fields));
}
});
return shape;
@@ -221,7 +218,11 @@ export function validateRequiredFields<FormType>(
fields.forEach((f) => {
const path = f.split(".");
const v = getValueDeeper(form as any, path);
- result = setValueDeeper(result, path, v === undefined ? "required" : undefined);
+ result = setValueDeeper(
+ result,
+ path,
+ v === undefined ? "required" : undefined,
+ );
});
return result;
}
diff --git a/packages/kyc-ui/src/pages/FillForm.tsx b/packages/kyc-ui/src/pages/FillForm.tsx
@@ -282,12 +282,14 @@ export function FillForm({
{preferences.showDebugInfo ? (
<div class="m-4">
- <p class="text-sm font-semibold leading-6 text-gray-900">
+ <p class="text-sm font-semibold leading-6 text-gray-300">
<i18n.Translate>
Debug information about the values in the form
</i18n.Translate>
</p>
- <pre>{JSON.stringify(state.result, undefined, 2)}</pre>
+ <pre class="text-sm text-gray-300">
+ {JSON.stringify(state.result, undefined, 2)}
+ </pre>
</div>
) : (
<Fragment />
@@ -318,9 +320,9 @@ function getRequiredFields(fields: UIFormElementConfig[]): Array<UIHandlerId> {
if ("id" in field) {
// FIXME: this should be a validation when loading the form
// consistency check
- if (shape.indexOf(field.id) !== -1) {
- throw Error(`already present: ${field.id}`);
- }
+ // if (shape.indexOf(field.id) !== -1) {
+ // throw Error(`already present: ${field.id}`);
+ // }
if (!field.required) {
return;
}
@@ -340,9 +342,9 @@ function getShapeFromFields(
if ("id" in field) {
// FIXME: this should be a validation when loading the form
// consistency check
- if (shape.indexOf(field.id) !== -1) {
- throw Error(`already present: ${field.id}`);
- }
+ // if (shape.indexOf(field.id) !== -1) {
+ // throw Error(`already present: ${field.id}`);
+ // }
shape.push(field.id);
} else if (field.type === "group") {
Array.prototype.push.apply(
diff --git a/packages/kyc-ui/src/pages/Start.tsx b/packages/kyc-ui/src/pages/Start.tsx
@@ -174,9 +174,15 @@ export function ShowReqList({
<div class="isolate bg-white px-6 py-12">
<div class="mx-auto max-w-2xl text-center">
<h2 class="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
- <i18n.Translate>
- Complete any of the following requirements
- </i18n.Translate>
+ {requirements.length === 1 ? (
+ <i18n.Translate>
+ Please, complete the following requirement:
+ </i18n.Translate>
+ ) : (
+ <i18n.Translate>
+ Please, complete any of the following requirements:
+ </i18n.Translate>
+ )}
</h2>
</div>
@@ -273,11 +279,13 @@ function RequirementRow({
<div class="min-w-0 flex-auto">
<p class="text-sm font-semibold leading-6 text-gray-900">
<span class="absolute inset-x-0 -top-px bottom-0"></span>
- <i18n.Translate>Information</i18n.Translate>
- </p>
- <p class="mt-1 flex text-xs leading-5 text-gray-500">
- {req.description}
+ <i18n.Translate context="KYC_REQUIREMENT_INFO_DESCRIPTION">
+ {req.description}
+ </i18n.Translate>
</p>
+ {/* <p class="mt-1 flex text-xs leading-5 text-gray-500">
+
+ </p> */}
</div>
</div>
</Fragment>
@@ -307,12 +315,11 @@ function RequirementRow({
<p class="text-sm font-semibold leading-6 text-gray-900">
<Button type="submit" handler={startHandler}>
<span class="absolute inset-x-0 -top-px bottom-0"></span>
- <i18n.Translate>Begin KYC process</i18n.Translate>
+ <i18n.Translate context="KYC_REQUIREMENT_LINK_DESCRIPTION">
+ {req.description}
+ </i18n.Translate>
</Button>
</p>
- <p class="mt-1 flex text-xs leading-5 text-gray-500">
- {req.description}
- </p>
</div>
</div>
<div class="flex shrink-0 items-center gap-x-4">
diff --git a/packages/kyc-ui/src/pages/TriggerKyc.tsx b/packages/kyc-ui/src/pages/TriggerKyc.tsx
@@ -322,7 +322,7 @@ export function TriggerKyc({ onKycStarted }: Props): VNode {
<Button
type="submit"
handler={triggerAmount(
- Amounts.parseOrThrow(`${config.currency}:1000070`),
+ Amounts.parseOrThrow(`${config.currency}:1000000`),
)}
// disabled={!submitHandler}
class="disabled:opacity-50 disabled:cursor-default rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
@@ -334,7 +334,7 @@ export function TriggerKyc({ onKycStarted }: Props): VNode {
<Button
type="submit"
handler={triggerAmount(
- Amounts.parseOrThrow(`${config.currency}:1000080`),
+ Amounts.parseOrThrow(`${config.currency}:1000010`),
)}
// disabled={!submitHandler}
class="disabled:opacity-50 disabled:cursor-default rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
@@ -346,84 +346,84 @@ export function TriggerKyc({ onKycStarted }: Props): VNode {
<Button
type="submit"
handler={triggerAmount(
- Amounts.parseOrThrow(`${config.currency}:1000000`),
+ Amounts.parseOrThrow(`${config.currency}:1000020`),
)}
// disabled={!submitHandler}
class="disabled:opacity-50 disabled:cursor-default rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
>
- <i18n.Translate>Trigger VQF Start</i18n.Translate>
+ <i18n.Translate>Trigger VQF 902.1</i18n.Translate>
</Button>
</div>
<div>
<Button
type="submit"
handler={triggerAmount(
- Amounts.parseOrThrow(`${config.currency}:1000010`),
+ Amounts.parseOrThrow(`${config.currency}:1000030`),
)}
// disabled={!submitHandler}
class="disabled:opacity-50 disabled:cursor-default rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
>
- <i18n.Translate>Trigger VQF Natural</i18n.Translate>
+ <i18n.Translate>Trigger VQF 902.4</i18n.Translate>
</Button>
</div>
<div>
<Button
type="submit"
handler={triggerAmount(
- Amounts.parseOrThrow(`${config.currency}:1000020`),
+ Amounts.parseOrThrow(`${config.currency}:1000040`),
)}
// disabled={!submitHandler}
class="disabled:opacity-50 disabled:cursor-default rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
>
- <i18n.Translate>Trigger VQF operational</i18n.Translate>
+ <i18n.Translate>Trigger VQF 902.5</i18n.Translate>
</Button>
</div>
<div>
<Button
type="submit"
handler={triggerAmount(
- Amounts.parseOrThrow(`${config.currency}:1000030`),
+ Amounts.parseOrThrow(`${config.currency}:1000050`),
)}
// disabled={!submitHandler}
class="disabled:opacity-50 disabled:cursor-default rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
>
- <i18n.Translate>Trigger VQF foundation</i18n.Translate>
+ <i18n.Translate>Trigger VQF 902.9</i18n.Translate>
</Button>
</div>
<div>
<Button
type="submit"
handler={triggerAmount(
- Amounts.parseOrThrow(`${config.currency}:1000040`),
+ Amounts.parseOrThrow(`${config.currency}:1000060`),
)}
// disabled={!submitHandler}
class="disabled:opacity-50 disabled:cursor-default rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
>
- <i18n.Translate>Trigger VQF insurance</i18n.Translate>
+ <i18n.Translate>Trigger VQF 902.11</i18n.Translate>
</Button>
</div>
<div>
<Button
type="submit"
handler={triggerAmount(
- Amounts.parseOrThrow(`${config.currency}:1000050`),
+ Amounts.parseOrThrow(`${config.currency}:1000070`),
)}
// disabled={!submitHandler}
class="disabled:opacity-50 disabled:cursor-default rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
>
- <i18n.Translate>Trigger VQF trust</i18n.Translate>
+ <i18n.Translate>Trigger VQF 902.12</i18n.Translate>
</Button>
</div>
<div>
<Button
type="submit"
handler={triggerAmount(
- Amounts.parseOrThrow(`${config.currency}:1000060`),
+ Amounts.parseOrThrow(`${config.currency}:1000080`),
)}
// disabled={!submitHandler}
class="disabled:opacity-50 disabled:cursor-default rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
>
- <i18n.Translate>Trigger VQF other</i18n.Translate>
+ <i18n.Translate>Trigger VQF 902.13</i18n.Translate>
</Button>
</div>
<div>
@@ -435,6 +435,30 @@ export function TriggerKyc({ onKycStarted }: Props): VNode {
// disabled={!submitHandler}
class="disabled:opacity-50 disabled:cursor-default rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
>
+ <i18n.Translate>Trigger VQF 902.14</i18n.Translate>
+ </Button>
+ </div>
+ <div>
+ <Button
+ type="submit"
+ handler={triggerAmount(
+ Amounts.parseOrThrow(`${config.currency}:1000100`),
+ )}
+ // disabled={!submitHandler}
+ class="disabled:opacity-50 disabled:cursor-default rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
+ >
+ <i18n.Translate>Trigger VQF 902.15</i18n.Translate>
+ </Button>
+ </div>
+ <div>
+ <Button
+ type="submit"
+ handler={triggerAmount(
+ Amounts.parseOrThrow(`${config.currency}:1000110`),
+ )}
+ // disabled={!submitHandler}
+ class="disabled:opacity-50 disabled:cursor-default rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
+ >
<i18n.Translate>Challenger test</i18n.Translate>
</Button>
</div>