[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-wallet-core] 02/02: gana forms are now defined in code
From: |
gnunet |
Subject: |
[taler-wallet-core] 02/02: gana forms are now defined in code |
Date: |
Sun, 05 Jan 2025 19:53:44 +0100 |
This is an automated email from the git hooks/post-receive script.
sebasjm pushed a commit to branch master
in repository wallet-core.
commit d19de01aab70596c6944c4f0a6be2059e10d80a6
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Sun Jan 5 15:53:04 2025 -0300
gana forms are now defined in code
---
packages/kyc-ui/src/forms/VQF_902_1.ts | 498 ++++++
packages/kyc-ui/src/forms/VQF_902_11.ts | 141 ++
packages/kyc-ui/src/forms/VQF_902_12.ts | 386 +++++
packages/kyc-ui/src/forms/VQF_902_13.ts | 385 +++++
packages/kyc-ui/src/forms/VQF_902_14.ts | 139 ++
packages/kyc-ui/src/forms/VQF_902_15.ts | 130 ++
packages/kyc-ui/src/forms/VQF_902_4.ts | 283 ++++
packages/kyc-ui/src/forms/VQF_902_5.ts | 194 +++
packages/kyc-ui/src/forms/VQF_902_9.ts | 129 ++
packages/kyc-ui/src/forms/accept-tos.ts | 58 +-
packages/kyc-ui/src/forms/ganaForms.ts | 288 ----
packages/kyc-ui/src/forms/index.ts | 69 +-
.../kyc-ui/src/forms/taler_aml_attributes.json | 1661 --------------------
packages/kyc-ui/src/forms/taler_aml_attributes.ts | 745 +++++----
packages/kyc-ui/src/hooks/form.ts | 33 +-
packages/kyc-ui/src/pages/FillForm.tsx | 18 +-
packages/kyc-ui/src/pages/Start.tsx | 29 +-
packages/kyc-ui/src/pages/TriggerKyc.tsx | 56 +-
18 files changed, 2917 insertions(+), 2325 deletions(-)
diff --git a/packages/kyc-ui/src/forms/VQF_902_1.ts
b/packages/kyc-ui/src/forms/VQF_902_1.ts
new file mode 100644
index 000000000..a99852d62
--- /dev/null
+++ 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
new file mode 100644
index 000000000..2bf5b705d
--- /dev/null
+++ 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
new file mode 100644
index 000000000..4fd9d2d4e
--- /dev/null
+++ 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
new file mode 100644
index 000000000..6189b1094
--- /dev/null
+++ 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
new file mode 100644
index 000000000..c328f3641
--- /dev/null
+++ 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
new file mode 100644
index 000000000..731f5c0cf
--- /dev/null
+++ 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
new file mode 100644
index 000000000..daaa78e16
--- /dev/null
+++ 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
new file mode 100644
index 000000000..b79f39b06
--- /dev/null
+++ 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
new file mode 100644
index 000000000..20d78064a
--- /dev/null
+++ 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
index 0e05aa996..c95689603 100644
--- 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
deleted file mode 100644
index aec6012fc..000000000
--- a/packages/kyc-ui/src/forms/ganaForms.ts
+++ /dev/null
@@ -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
index 7301b0426..cc6dfe110 100644
--- 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,17 +48,70 @@ 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",
diff --git a/packages/kyc-ui/src/forms/taler_aml_attributes.json
b/packages/kyc-ui/src/forms/taler_aml_attributes.json
deleted file mode 100644
index d980edf0a..000000000
--- a/packages/kyc-ui/src/forms/taler_aml_attributes.json
+++ /dev/null
@@ -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
index 5747a0a8a..322cac855 100644
--- 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
index 3e6b936f9..9a3be1fdf 100644
--- 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
index 68d18e7d0..58b059144 100644
--- 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
index 527124ccb..d1ca99f5e 100644
--- 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
index 9195ed56c..c2a132138 100644
--- 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>
@@ -434,6 +434,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>
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.