taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 1d366c84a34ebab782ff6f2c8cac61dbbb11a834
parent e953aab7a753ea396bcb92903afa7e4f03c65ff4
Author: Sebastian <sebasjm@gmail.com>
Date:   Sat,  1 Mar 2025 18:09:34 -0300

work on #9577

Diffstat:
Mpackages/web-util/src/forms/fields/InputArray.tsx | 9++++++---
Mpackages/web-util/src/forms/fields/InputDuration.tsx | 4+++-
Mpackages/web-util/src/forms/fields/InputFile.tsx | 2+-
Mpackages/web-util/src/forms/fields/InputLine.tsx | 4+++-
Mpackages/web-util/src/forms/fields/InputSelectMultiple.tsx | 5+++++
Mpackages/web-util/src/forms/fields/InputSelectOne.tsx | 6+++++-
Mpackages/web-util/src/forms/forms-types.ts | 19++++++++++++++++---
Mpackages/web-util/src/forms/forms-ui.tsx | 15++++++++++-----
Mpackages/web-util/src/forms/forms-utils.ts | 18++++++++++++++----
Mpackages/web-util/src/forms/gana/GLS_Onboarding.ts | 89+++++++++++++++++++++++++++++++++++++++++++------------------------------------
Dpackages/web-util/src/forms/gana/VQF_902_1.stories.tsx | 37-------------------------------------
Dpackages/web-util/src/forms/gana/VQF_902_1.ts | 485-------------------------------------------------------------------------------
Mpackages/web-util/src/forms/gana/VQF_902_11.ts | 29++++++++++++++---------------
Mpackages/web-util/src/forms/gana/VQF_902_12.ts | 110++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------
Mpackages/web-util/src/forms/gana/VQF_902_13.ts | 104+++++++++++++++++++++++++++++++++++++++++++++++--------------------------------
Mpackages/web-util/src/forms/gana/VQF_902_14.ts | 14+++++++-------
Mpackages/web-util/src/forms/gana/VQF_902_15.ts | 18+++++++++---------
Apackages/web-util/src/forms/gana/VQF_902_1_all.stories.tsx | 37+++++++++++++++++++++++++++++++++++++
Apackages/web-util/src/forms/gana/VQF_902_1_all.ts | 556+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Apackages/web-util/src/forms/gana/VQF_902_1_customer.stories.tsx | 37+++++++++++++++++++++++++++++++++++++
Apackages/web-util/src/forms/gana/VQF_902_1_customer.ts | 416+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Apackages/web-util/src/forms/gana/VQF_902_1_officer.stories.tsx | 37+++++++++++++++++++++++++++++++++++++
Apackages/web-util/src/forms/gana/VQF_902_1_officer.ts | 143+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mpackages/web-util/src/forms/gana/VQF_902_4.ts | 49++++++++++++++++++++++++++-----------------------
Mpackages/web-util/src/forms/gana/VQF_902_5.ts | 37++++++++++++++++++++-----------------
Mpackages/web-util/src/forms/gana/VQF_902_9.ts | 26+++++++++++++++-----------
Mpackages/web-util/src/forms/gana/index.stories.ts | 4+++-
Mpackages/web-util/src/forms/gana/taler_form_attributes.ts | 2542++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------
Mpackages/web-util/src/forms/index.ts | 4+++-
Mpackages/web-util/src/hooks/useForm.ts | 59++++++++++++++++++++++++++++++++++++-----------------------
Apackages/web-util/src/utils/languagues.ts | 1257+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
31 files changed, 4662 insertions(+), 1510 deletions(-)

diff --git a/packages/web-util/src/forms/fields/InputArray.tsx b/packages/web-util/src/forms/fields/InputArray.tsx @@ -106,7 +106,8 @@ export function InputArray<T extends object, K extends keyof T>( labelField: string; } & UIFormProps<T, K>, ): VNode { - const { fields, labelField, name, label, required, tooltip } = props; + const { fields, labelField, name, label, required, tooltip, hidden } = props; + const { i18n } = useTranslationContext(); const { value, onChange, state } = props.handler ?? noHandlerPropsAndNoContextForField(props.name); @@ -115,11 +116,13 @@ export function InputArray<T extends object, K extends keyof T>( const [selectedIndex, setSelectedIndex] = useState<number | undefined>( undefined, ); + + if (hidden) { + return <Fragment />; + } const selected = selectedIndex === undefined ? undefined : list[selectedIndex]; - const { i18n } = useTranslationContext(); - return ( <div class="sm:col-span-6"> <LabelWithTooltipMaybeRequired diff --git a/packages/web-util/src/forms/fields/InputDuration.tsx b/packages/web-util/src/forms/fields/InputDuration.tsx @@ -83,7 +83,9 @@ export function InputDuration<T extends object, K extends keyof T>( yearsRef.current.value = strYears; }, [strYears]); - if (state.hidden) return <div />; + if (state.hidden) { + return <Fragment />; + } let clazz = "block w-full rounded-md border-0 py-1.5 shadow-sm ring-1 ring-inset focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200"; diff --git a/packages/web-util/src/forms/fields/InputFile.tsx b/packages/web-util/src/forms/fields/InputFile.tsx @@ -12,7 +12,7 @@ export function InputFile<T extends object, K extends keyof T>( const help = propsHelp ?? state.help; if (state.hidden) { - return <div />; + return <Fragment />; } const valueStr = !value ? "" : value.toString(); diff --git a/packages/web-util/src/forms/fields/InputLine.tsx b/packages/web-util/src/forms/fields/InputLine.tsx @@ -185,7 +185,9 @@ export function InputLine<T extends object, K extends keyof T>( input.current.value = !value ? "" : toString(value); }, [value]); - if (state.hidden) return <div />; + if (state.hidden) { + return <Fragment />; + } let clazz = "block w-full rounded-md border-0 py-1.5 shadow-sm ring-1 ring-inset focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6 disabled:cursor-not-allowed disabled:bg-gray-50 disabled:text-gray-500 disabled:ring-gray-200"; diff --git a/packages/web-util/src/forms/fields/InputSelectMultiple.tsx b/packages/web-util/src/forms/fields/InputSelectMultiple.tsx @@ -21,6 +21,7 @@ export function InputSelectMultiple<T extends object, K extends keyof T>( tooltip, help, required, + hidden, unique, max, } = props; @@ -30,6 +31,10 @@ export function InputSelectMultiple<T extends object, K extends keyof T>( const [filter, setFilter] = useState<string | undefined>(undefined); const [dirty, setDirty] = useState<boolean>(); + + if (hidden) { + return <Fragment />; + } const regex = new RegExp(`.*${filter}.*`, "i"); const choiceMap = choices.reduce( (prev, curr) => { diff --git a/packages/web-util/src/forms/fields/InputSelectOne.tsx b/packages/web-util/src/forms/fields/InputSelectOne.tsx @@ -10,7 +10,8 @@ export function InputSelectOne<T extends object, K extends keyof T>( choices: ChoiceS<T[K]>[]; } & UIFormProps<T, K>, ): VNode { - const { label, choices, placeholder, tooltip, required, help } = props; + const { label, choices, placeholder, tooltip, required, help, hidden } = + props; const { value, onChange, error } = props.handler ?? noHandlerPropsAndNoContextForField(props.name); @@ -23,6 +24,9 @@ export function InputSelectOne<T extends object, K extends keyof T>( }, {} as Record<string, string>, ); + if (hidden) { + return <Fragment />; + } const filteredChoices = filter === undefined diff --git a/packages/web-util/src/forms/forms-types.ts b/packages/web-util/src/forms/forms-types.ts @@ -42,6 +42,11 @@ export type DoubleColumnFormSection = { title: string; description?: string; fields: UIFormElementConfig[]; + /* + return if the field should be hidden. + receives the value after conversion and the root of the form. + */ + hide?: (root: undefined | Record<string, any>) => boolean | undefined; }; export type UIFormElementConfig = @@ -222,10 +227,18 @@ export type UIFormFieldBaseConfig = UIFieldElementDescription & { */ converterId?: string; - /* return an error message if the value is not valid, returns un undefined - if there is no error + /* + return if the field should be hidden. + receives the value after conversion and the root of the form. + */ + hide?: (value: any, root?: any) => boolean | undefined; + + /* + return an error message if the value is not valid. + should returns un undefined if there is no error. + this function is called before conversion */ - validator?: (value: string) => TranslatedString | undefined; + validator?: (text: string) => TranslatedString | undefined; /* property id of the form */ id: UIHandlerId; diff --git a/packages/web-util/src/forms/forms-ui.tsx b/packages/web-util/src/forms/forms-ui.tsx @@ -67,6 +67,7 @@ export function FormUI<T>({ if (!section) return <Fragment />; return ( <DoubleColumnFormSectionUI + key={i} name={name} section={section} handler={handler} @@ -101,6 +102,13 @@ export function DoubleColumnFormSectionUI<T>({ focus?: boolean; }): VNode { const { i18n } = useTranslationContext(); + const fs = convertFormConfigToUiField(i18n, section.fields, handler); + const allHidden = fs.every((v) => { + return "hidden" in v.properties && !!v.properties.hidden; + }); + if (allHidden) { + return <Fragment />; + } return ( <form name={name} @@ -119,10 +127,7 @@ export function DoubleColumnFormSectionUI<T>({ <div class="bg-white shadow-sm ring-1 ring-gray-900/5 rounded-md md:col-span-2"> <div class="p-3"> <div class="grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6"> - <RenderAllFieldsByUiConfig - fields={convertFormConfigToUiField(i18n, section.fields, handler)} - focus={focus} - /> + <RenderAllFieldsByUiConfig fields={fs} focus={focus} /> </div> </div> </div> @@ -173,7 +178,7 @@ export function RenderAllFieldsByUiConfig({ field.type ] as FieldComponentFunction<any>; const p = { ...field.properties, focus: !!focus && i === 0 }; - return <Component {...p} />; + return <Component key={i} {...p} />; }), ); } diff --git a/packages/web-util/src/forms/forms-utils.ts b/packages/web-util/src/forms/forms-utils.ts @@ -338,6 +338,15 @@ function getConverterByFieldType( return nullConverter as StringConverter<unknown>; } +/** + * Input field take most of the properties from the + * handler, since the input value can change the + * some states like hidden or disabled. + * @param form + * @param p + * @param converter + * @returns + */ function converInputFieldsProps( form: object, p: UIFormFieldBaseConfig, @@ -345,11 +354,13 @@ function converInputFieldsProps( ) { const names = p.id.split("."); // console.log("NAMES", names, getValueDeeper2(form, names), form) + const h = getValueDeeper2(form, names); return { converter, - handler: getValueDeeper2(form, names), - required: p.required, - disabled: p.disabled, + handler: h, + hidden: h.state.hidden, + required: h.state.required, + disabled: h.state.disabled, name: names[names.length - 1], help: p.help, placeholder: p.placeholder, @@ -365,7 +376,6 @@ function converBaseFieldsProps( return { after: getAddonById(p.addonAfterId), before: getAddonById(p.addonBeforeId), - hidden: p.hidden, help: i18n_.str`${p.help}`, label: i18n_.str`${p.label}`, tooltip: i18n_.str`${p.tooltip}`, diff --git a/packages/web-util/src/forms/gana/GLS_Onboarding.ts b/packages/web-util/src/forms/gana/GLS_Onboarding.ts @@ -21,7 +21,7 @@ export function GLS_Onboarding( // description: i18n.str``, fields: [ { - id: "PERSON_FULL_NAME" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.PERSON_FULL_NAME.id, label: i18n.str`First name(s)`, help: i18n.str`As on your ID document`, // gana_type: "String", @@ -29,14 +29,14 @@ export function GLS_Onboarding( required: true, }, { - id: "PERSON_LAST_NAME" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.PERSON_LAST_NAME.id, label: i18n.str`Last name`, // gana_type: "String", type: "text", required: true, }, { - id: "PERSON_DATE_OF_BIRTH" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.PERSON_DATE_OF_BIRTH.id, label: i18n.str`Date of birth`, // gana_type: "ISO8601Date", type: "isoTimeText", @@ -45,7 +45,7 @@ export function GLS_Onboarding( required: true, }, { - id: "PERSON_NATIONALITY" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.PERSON_NATIONALITY.id, label: i18n.str`Nationality`, // gana_type: "CountryCode", type: "selectOne", @@ -54,7 +54,7 @@ export function GLS_Onboarding( }, { type: "toggle", - id: "ACCEPTED_TERMS_OF_SERVICE" as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.ACCEPTED_TERMS_OF_SERVICE.id, required: true, // threeState: true, label: i18n.str`Do you accept the terms of service?`, @@ -64,9 +64,6 @@ export function GLS_Onboarding( : undefined; }, }, - // !context || !context.tos_url - // ? { type: "void" } - // : { type: "external-link", url: "https://google.com", @@ -79,35 +76,37 @@ export function GLS_Onboarding( title: i18n.str`Business company information`, fields: [ { - id: "BUSINESS_DISPLAY_NAME" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.BUSINESS_DISPLAY_NAME.id, label: i18n.str`Name of the company`, // gana_type: "String", type: "text", required: true, }, { - id: "BUSINESS_TYPE" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.BUSINESS_TYPE.id, label: i18n.str`Business type`, // gana_type: "String", type: "text", required: true, }, { - id: "BUSINESS_REGISTRATION_ID" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.BUSINESS_REGISTRATION_ID.id, label: i18n.str`Registration ID`, // gana_type: "String", type: "text", required: true, }, { - id: "BUSINESS_LEGAL_JURISDICTION" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.BUSINESS_LEGAL_JURISDICTION + .id, label: i18n.str`Legal jurisdiction`, // gana_type: "String", type: "text", required: true, }, { - id: "BUSINESS_REGISTRATION_DATE" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.BUSINESS_REGISTRATION_DATE + .id, label: i18n.str`Registration date`, // gana_type: "ISO8601Date", type: "isoTimeText", @@ -116,42 +115,48 @@ export function GLS_Onboarding( required: true, }, { - id: "BUSINESS_IS_NON_PROFIT" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.BUSINESS_IS_NON_PROFIT.id, label: i18n.str`Is non profit?`, // gana_type: "Boolean", type: "toggle", required: true, }, { - id: "BUSINESS_INDUSTRY" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.BUSINESS_INDUSTRY.id, label: i18n.str`Industry`, // gana_type: "String", type: "text", required: true, }, { - id: "BUSINESS_LEGAL_REPRESENTATIVES" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding + .BUSINESS_LEGAL_REPRESENTATIVES.id, label: i18n.str`Legal representatives`, // gana_type: "GLS_BusinessRepresentative[]", type: "array", - labelFieldId: "GLS_REPRESENTATIVE_FULL_NAME" as UIHandlerId, + labelFieldId: + TalerFormAttributes.GLS_BusinessRepresentative + .GLS_REPRESENTATIVE_FULL_NAME.id, fields: [ { - id: "GLS_REPRESENTATIVE_FULL_NAME" satisfies keyof TalerFormAttributes.GLS_BusinessRepresentative as UIHandlerId, + id: TalerFormAttributes.GLS_BusinessRepresentative + .GLS_REPRESENTATIVE_FULL_NAME.id, label: i18n.str`Full name`, // gana_type: "String", type: "text", required: true, }, { - id: "GLS_REPRESENTATIVE_LAST_NAME" satisfies keyof TalerFormAttributes.GLS_BusinessRepresentative as UIHandlerId, + id: TalerFormAttributes.GLS_BusinessRepresentative + .GLS_REPRESENTATIVE_LAST_NAME.id, label: i18n.str`Last name`, // gana_type: "String", type: "text", required: true, }, { - id: "GLS_REPRESENTATIVE_DATE_OF_BIRTH" satisfies keyof TalerFormAttributes.GLS_BusinessRepresentative as UIHandlerId, + id: TalerFormAttributes.GLS_BusinessRepresentative + .GLS_REPRESENTATIVE_DATE_OF_BIRTH.id, label: i18n.str`Date of birth`, // gana_type: "ISO8601Date", type: "isoTimeText", @@ -160,21 +165,22 @@ export function GLS_Onboarding( required: true, }, { - id: "GLS_REPRESENTATIVE_NATIONALITY" satisfies keyof TalerFormAttributes.GLS_BusinessRepresentative as UIHandlerId, + id: TalerFormAttributes.GLS_BusinessRepresentative + .GLS_REPRESENTATIVE_NATIONALITY.id, label: i18n.str`Nationality`, // gana_type: "String", type: "text", required: true, }, // { - // id: "GLS_REPRESENTATIVE_NATIONAL_ID" satisfies keyof TalerFormAttributes.GLS_BusinessRepresentative as UIHandlerId, + // id: TalerFormAttributes.GLS_BusinessRepresentative.GLS_REPRESENTATIVE_NATIONAL_ID.id, // label: i18n.str`National ID number`, // // gana_type: "String", // type: "text", // required: true, // }, // { - // id: "GLS_REPRESENTATIVE_NATIONAL_ID_SCAN" satisfies keyof TalerFormAttributes.GLS_BusinessRepresentative as UIHandlerId, + // id: TalerFormAttributes.GLS_BusinessRepresentative.GLS_REPRESENTATIVE_NATIONAL_ID_SCAN.id, // label: i18n.str`National ID photo`, // // gana_type: "File", // type: "file", @@ -189,21 +195,21 @@ export function GLS_Onboarding( title: i18n.str`Contact information of company headquarters`, fields: [ { - id: "CONTACT_WEB_DOMAIN" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.CONTACT_WEB_DOMAIN.id, label: i18n.str`Web site`, // gana_type: "HttpHostnamePath", type: "text", required: true, }, { - id: "CONTACT_EMAIL" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.CONTACT_EMAIL.id, label: i18n.str`Email`, // gana_type: "Email", type: "text", required: true, }, { - id: "CONTACT_PHONE" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.CONTACT_PHONE.id, label: i18n.str`Phone`, // gana_type: "Phone", type: "text", @@ -215,7 +221,7 @@ export function GLS_Onboarding( title: i18n.str`Location information`, fields: [ { - id: "ADDRESS_COUNTRY" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.ADDRESS_COUNTRY.id, label: i18n.str`Country`, // gana_type: "CountryCode", type: "selectOne", @@ -223,63 +229,64 @@ export function GLS_Onboarding( required: true, }, { - id: "ADDRESS_COUNTRY_SUBDIVISION" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.ADDRESS_COUNTRY_SUBDIVISION + .id, label: i18n.str`Country subdivision`, // gana_type: "Hostname", type: "text", // required: true, }, { - id: "ADDRESS_STREET_NAME" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.ADDRESS_STREET_NAME.id, label: i18n.str`Street name`, // gana_type: "String", type: "text", required: true, }, { - id: "ADDRESS_STREET_NUMBER" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.ADDRESS_STREET_NUMBER.id, label: i18n.str`Street number`, // gana_type: "String", type: "text", required: true, }, { - id: "ADDRESS_LINES" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.ADDRESS_LINES.id, label: i18n.str`Street lines`, // gana_type: "String", type: "textArea", // required: true, }, { - id: "ADDRESS_BUILDING_NAME" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.ADDRESS_BUILDING_NAME.id, label: i18n.str`Building name`, // gana_type: "String", type: "text", // required: true, }, { - id: "ADDRESS_BUILDING_NUMBER" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.ADDRESS_BUILDING_NUMBER.id, label: i18n.str`Building number`, // gana_type: "String", type: "text", // required: true, }, { - id: "ADDRESS_ZIPCODE" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.ADDRESS_ZIPCODE.id, label: i18n.str`Zipcode`, // gana_type: "Hostname", type: "text", required: true, }, { - id: "ADDRESS_TOWN_LOCATION" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.ADDRESS_TOWN_LOCATION.id, label: i18n.str`Town location`, // gana_type: "Hostname", type: "text", // required: true, }, { - id: "ADDRESS_TOWN_DISTRICT" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.ADDRESS_TOWN_DISTRICT.id, label: i18n.str`Town district`, // gana_type: "Hostname", type: "text", @@ -291,7 +298,7 @@ export function GLS_Onboarding( title: i18n.str`Tax information`, fields: [ { - id: "TAX_COUNTRY" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.TAX_COUNTRY.id, label: i18n.str`Country`, // gana_type: "CountryCode", type: "selectOne", @@ -299,14 +306,14 @@ export function GLS_Onboarding( required: true, }, { - id: "TAX_ID" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.TAX_ID.id, label: i18n.str`ID`, // gana_type: "Hostname", type: "text", required: true, }, { - id: "TAX_IS_USA_LAW" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.TAX_IS_USA_LAW.id, label: i18n.str`under USA law?`, // help: i18n.str`wurde die gesellschaft in den USA oder nach US-Recht gergrudent`, // gana_type: "Boolean", @@ -314,7 +321,7 @@ export function GLS_Onboarding( required: true, }, { - id: "TAX_IS_ACTIVE" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.TAX_IS_ACTIVE.id, label: i18n.str`is economically active?`, // help: i18n.str`wirtschaftlich aktiv oder passiv`, // gana_type: "Boolean", @@ -322,7 +329,7 @@ export function GLS_Onboarding( required: true, }, { - id: "TAX_IS_DEDUCTED" satisfies keyof TalerFormAttributes.GLS_Onboarding as UIHandlerId, + id: TalerFormAttributes.GLS_Onboarding.TAX_IS_DEDUCTED.id, label: i18n.str`entitled to deduct tax?`, // help: i18n.str`sind sie vorsteuerabzugsberechtigt`, // gana_type: "Boolean", diff --git a/packages/web-util/src/forms/gana/VQF_902_1.stories.tsx b/packages/web-util/src/forms/gana/VQF_902_1.stories.tsx @@ -1,37 +0,0 @@ -/* - This file is part of GNU Taler - (C) 2022 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/> - */ - -/** - * - * @author Sebastian Javier Marchano (sebasjm) - */ - -import { i18n, setupI18n } from "@gnu-taler/taler-util"; -import * as tests from "../../tests/hook.js"; -import { DefaultForm as TestedComponent } from "../forms-ui.js"; -import { VQF_902_1 } from "./VQF_902_1.js"; -export default { - title: "VQF_902_1e", -}; - -setupI18n("en", {}); -type TargetObject = {}; -const initial: TargetObject = {}; - -export const EmptyForm = tests.createExample(TestedComponent, { - initial, - design: VQF_902_1(i18n), -}); diff --git a/packages/web-util/src/forms/gana/VQF_902_1.ts b/packages/web-util/src/forms/gana/VQF_902_1.ts @@ -1,485 +0,0 @@ -import { - DoubleColumnFormDesign, - InternationalizationAPI, - UIHandlerId, -} from "../../index.browser.js"; -import { countryNationalityList } from "../../utils/countries.js"; -import { TalerFormAttributes } from "./taler_form_attributes.js"; - -export function VQF_902_1( - i18n: InternationalizationAPI, -): DoubleColumnFormDesign { - return { - type: "double-column", - sections: [ - // { - // title: i18n.str`This form was completed by`, - // fields: [ - // { - // id: "FORM_FILLING_DATE" satisfies keyof TalerFormAttributes.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 TalerFormAttributes.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 TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Full name`, - // gana_type: "String", - type: "text", - required: true, - }, - { - id: "CUSTOMER_NATURAL_RESIDENTIAL" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Residential address`, - // gana_type: "ResidentialAddress", - type: "textArea", - required: true, - }, - { - id: "CUSTOMER_NATURAL_PHONE" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Telephone`, - // gana_type: "Phone", - type: "text", - required: false, - }, - { - id: "CUSTOMER_NATURAL_EMAIL" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`E-mail`, - // gana_type: "Email", - type: "text", - required: false, - }, - { - id: "CUSTOMER_NATURAL_BIRTHDATE" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Date of birth`, - // gana_type: "AbsoluteDate", - type: "isoTimeText", - placeholder: "dd/MM/yyyy", - pattern: "dd/MM/yyyy", - required: true, - }, - { - id: "CUSTOMER_NATURAL_NATIONALITY" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Nationality`, - // gana_type: "CountryCode", - type: "selectOne", - choices: countryNationalityList(i18n), - required: true, - }, - { - id: "CUSTOMER_NATURAL_NATIONAL_ID" satisfies keyof TalerFormAttributes.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 TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Copy of identification document`, - // gana_type: "File", - type: "file", - accept: "application/pdf", - required: true, - }, - { - id: "CUSTOMER_NATURAL_COMPANY_NAME" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Company name`, - // gana_type: "String", - type: "text", - required: false, - }, - { - id: "CUSTOMER_NATURAL_REGISTERED_OFFICE" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Registered office`, - // gana_type: "String", - type: "text", - required: false, - }, - { - id: "CUSTOMER_NATURAL_COMPANY_ID" satisfies keyof TalerFormAttributes.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 TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Copy of company identification document`, - // gana_type: "File", - type: "file", - accept: "application/pdf", - required: false, - }, - { - id: "CUSTOMER_ENTITY_COMPANY_NAME" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Company name`, - // gana_type: "String", - type: "text", - required: true, - }, - { - id: "CUSTOMER_ENTITY_ADDRESS" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Domicile`, - // gana_type: "BusinessAddress", - type: "textArea", - required: true, - }, - { - id: "CUSTOMER_ENTITY_CONTACT_PERSON_NAME" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Contact person`, - // gana_type: "String", - type: "text", - required: false, - }, - { - id: "CUSTOMER_ENTITY_PHONE" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Telephone`, - // gana_type: "Phone", - type: "text", - required: false, - }, - { - id: "CUSTOMER_ENTITY_EMAIL" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`E-mail`, - // gana_type: "Email", - type: "text", - required: false, - }, - { - id: "CUSTOMER_ENTITY_ID" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Identification document`, - // gana_type: "String", - type: "text", - required: true, - }, - { - id: "CUSTOMER_ENTITY_ID_COPY" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Copy 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 TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Founders`, - // gana_type: "Form<VQF_902_1_founder>[]", - type: "array", - labelFieldId: - "FOUNDER_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_1_founder as UIHandlerId, - fields: [ - { - id: "FOUNDER_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_1_founder as UIHandlerId, - label: i18n.str`Full name`, - // gana_type: "String", - type: "text", - required: true, - }, - { - id: "FOUNDER_RESIDENTIAL_ADDRESS" satisfies keyof TalerFormAttributes.VQF_902_1_founder as UIHandlerId, - label: i18n.str`Residential address`, - // gana_type: "ResidentialAddress", - type: "textArea", - required: true, - }, - { - id: "FOUNDER_BIRTHDATE" satisfies keyof TalerFormAttributes.VQF_902_1_founder as UIHandlerId, - label: i18n.str`Date of birth`, - // gana_type: "AbsoluteDate", - type: "isoTimeText", - placeholder: "dd/MM/yyyy", - pattern: "dd/MM/yyyy", - required: true, - }, - { - id: "FOUNDER_NATIONALITY" satisfies keyof TalerFormAttributes.VQF_902_1_founder as UIHandlerId, - label: i18n.str`Nationality`, - // gana_type: "CountryCode", - type: "selectOne", - choices: countryNationalityList(i18n), - required: true, - }, - { - id: "FOUNDER_AUTHORIZATION_TYPE" satisfies keyof TalerFormAttributes.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 TalerFormAttributes.VQF_902_1_founder as UIHandlerId, - label: i18n.str`Identification document`, - // gana_type: "String", - type: "text", - required: true, - }, - { - id: "FOUNDER_NATIONAL_COPY" satisfies keyof TalerFormAttributes.VQF_902_1_founder as UIHandlerId, - label: i18n.str`Copy of identification document`, - // gana_type: "File", - type: "file", - accept: "application/pdf", - - required: true, - }, - { - id: "FOUNDER_POWER_OF_ATTORNEY" satisfies keyof TalerFormAttributes.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 TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Date`, - // gana_type: "AbsoluteDate", - type: "isoTimeText", - placeholder: "dd/MM/yyyy", - pattern: "dd/MM/yyyy", - required: false, - }, - { - id: "ACCEPTANCE_METHOD" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Accepted by`, - // gana_type: "String", - type: "choiceStacked", - choices: [ - { - value: - "FACE_TO_FACE" satisfies TalerFormAttributes.VQF_902_1["ACCEPTANCE_METHOD"], - label: i18n.str`Face to face`, - }, - { - value: - "AUTHENTICATED_COPY" satisfies TalerFormAttributes.VQF_902_1["ACCEPTANCE_METHOD"], - label: i18n.str`Authenticated copy`, - }, - { - value: - "RESIDENTIAL_ADDRESS_VALIDATED" satisfies TalerFormAttributes.VQF_902_1["ACCEPTANCE_METHOD"], - label: i18n.str`Residentail address validated`, - }, - ], - required: false, - }, - { - id: "ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Type of correspondence service`, - // gana_type: "String", - type: "choiceStacked", - choices: [ - { - value: - "HOLD_AT_BANK" satisfies TalerFormAttributes.VQF_902_1["ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE"], - label: i18n.str`Hold at a bank`, - }, - { - value: - "TO_A_THIRD_PARTY" satisfies TalerFormAttributes.VQF_902_1["ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE"], - label: i18n.str`To a third party`, - }, - { - value: - "TO_THE_CUSTOMER" satisfies TalerFormAttributes.VQF_902_1["ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE"], - label: i18n.str`To the customer`, - }, - { - value: - "TO_THE_MEMBER" satisfies TalerFormAttributes.VQF_902_1["ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE"], - label: i18n.str`To the member`, - }, - ], - allowFreeForm: true, - required: false, - }, - { - id: "ACCEPTANCE_LANGUAGE" satisfies keyof TalerFormAttributes.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 TalerFormAttributes.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 TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Customer type`, - // gana_type: "String", - type: "choiceStacked", - choices: [ - { - value: - "FOUNDATION" satisfies TalerFormAttributes.VQF_902_1["CUSTOMER_TYPE"], - label: i18n.str`Foundation`, - }, - { - value: - "LEGAL_ENTITY" satisfies TalerFormAttributes.VQF_902_1["CUSTOMER_TYPE"], - label: i18n.str`Legal entity`, - }, - { - value: - "LIFE_INSURANCE" satisfies TalerFormAttributes.VQF_902_1["CUSTOMER_TYPE"], - label: i18n.str`Life insurance`, - }, - { - value: - "NATURAL" satisfies TalerFormAttributes.VQF_902_1["CUSTOMER_TYPE"], - label: i18n.str`Natural person`, - }, - { - value: - "OTHER" satisfies TalerFormAttributes.VQF_902_1["CUSTOMER_TYPE"], - label: i18n.str`Other`, - }, - { - value: - "TRUST" satisfies TalerFormAttributes.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 TalerFormAttributes.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 TalerFormAttributes.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 TalerFormAttributes.VQF_902_1["RELATIONSHIP_TYPE"], - label: i18n.str`Money exchange`, - }, - { - value: - "MONEY_ASSET_TRANSFER" satisfies TalerFormAttributes.VQF_902_1["RELATIONSHIP_TYPE"], - label: i18n.str`Money asset transfer`, - }, - ], - allowFreeForm: true, - required: false, - }, - { - id: "RELATIONSHIP_PURPOSE" satisfies keyof TalerFormAttributes.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 TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Customer identification documents`, - // gana_type: "Boolean", - type: "toggle", - required: false, - }, - { - id: "ENCLOSURE_IDENTIFICATION_DOCUMENTS" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Customer identification documents`, - // gana_type: "Boolean", - type: "toggle", - required: false, - }, - { - id: "ENCLOSURE_BENEFICIAL_OWNER" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Customer identification documents`, - // gana_type: "Boolean", - type: "toggle", - required: false, - }, - { - id: "ENCLOSURE_CUSTOMER_PROFILE" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Customer identification documents`, - // gana_type: "Boolean", - type: "toggle", - required: false, - }, - { - id: "ENCLOSURE_RISK_PROFILE" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, - label: i18n.str`Customer identification documents`, - // gana_type: "Boolean", - type: "toggle", - required: false, - }, - ], - }, - ], - }; -} diff --git a/packages/web-util/src/forms/gana/VQF_902_11.ts b/packages/web-util/src/forms/gana/VQF_902_11.ts @@ -15,7 +15,7 @@ export function VQF_902_11( // title: i18n.str`This form was completed by`, // fields: [ // { - // id: "FORM_FILLING_DATE" satisfies keyof TalerFormAttributes.VQF_902_11 as UIHandlerId, + // id: TalerFormAttributes.VQF_902_11.FORM_FILLING_DATE.id, // label: i18n.str`Date`, // // gana_type: "AbsoluteDateTime", // type: "absoluteTimeText", @@ -25,7 +25,7 @@ export function VQF_902_11( // disabled: true, // }, // { - // id: "CUSTOMER_ID" satisfies keyof TalerFormAttributes.VQF_902_11 as UIHandlerId, + // id: TalerFormAttributes.VQF_902_11.CUSTOMER_ID.id, // label: i18n.str`Customer`, // // gana_type: "String", // type: "text", @@ -38,7 +38,8 @@ export function VQF_902_11( title: i18n.str`Contracting partner`, fields: [ { - id: "CONTROLLING_ENTITY_CONTRACTING_PARTNER" satisfies keyof TalerFormAttributes.VQF_902_11 as UIHandlerId, + id: TalerFormAttributes.VQF_902_11 + .CONTROLLING_ENTITY_CONTRACTING_PARTNER.id, label: i18n.str`Contracting partner`, // gana_type: "Paragraph", type: "textArea", @@ -50,26 +51,23 @@ export function VQF_902_11( title: i18n.str`The contracting partner hereby declares that:`, fields: [ { - id: "CONTROLLING_ENTITY_LEVEL" satisfies keyof TalerFormAttributes.VQF_902_11 as UIHandlerId, + id: TalerFormAttributes.VQF_902_11.CONTROLLING_ENTITY_LEVEL.id, label: i18n.str`Level`, // gana_type: "'25_MORE_RIGHTS' | 'OTHER_WAY' | 'DIRECTOR'", type: "choiceStacked", choices: [ { - value: - "25_MORE_RIGHTS" satisfies TalerFormAttributes.VQF_902_11["CONTROLLING_ENTITY_LEVEL"], + value: "25_MORE_RIGHTS", 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 TalerFormAttributes.VQF_902_11["CONTROLLING_ENTITY_LEVEL"], + value: "OTHER_WAY", 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 TalerFormAttributes.VQF_902_11["CONTROLLING_ENTITY_LEVEL"], + value: "DIRECTOR", label: i18n.str`Managing director`, description: i18n.str`the contracting partner hereby declares that the person listed below is the managin director`, }, @@ -77,14 +75,14 @@ export function VQF_902_11( required: true, }, { - id: "CONTROLLING_ENTITY_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_11 as UIHandlerId, + id: TalerFormAttributes.VQF_902_11.CONTROLLING_ENTITY_FULL_NAME.id, label: i18n.str`Full name`, // gana_type: "String", type: "text", required: true, }, { - id: "CONTROLLING_ENTITY_DOMICILE" satisfies keyof TalerFormAttributes.VQF_902_11 as UIHandlerId, + id: TalerFormAttributes.VQF_902_11.CONTROLLING_ENTITY_DOMICILE.id, label: i18n.str`Domicile`, // gana_type: "ResidentialAddress", type: "textArea", @@ -96,7 +94,8 @@ export function VQF_902_11( title: i18n.str`Fiduciary holding assets`, fields: [ { - id: "CONTROLLING_ENTITY_THIRD_PERSON" satisfies keyof TalerFormAttributes.VQF_902_11 as UIHandlerId, + id: TalerFormAttributes.VQF_902_11.CONTROLLING_ENTITY_THIRD_PERSON + .id, 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", @@ -111,7 +110,7 @@ export function VQF_902_11( 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 TalerFormAttributes.VQF_902_9 as UIHandlerId, + id: TalerFormAttributes.VQF_902_9.SIGNATURE.id, label: i18n.str`Signature`, // gana_type: "AbsoluteDateTime", type: "text", @@ -119,7 +118,7 @@ export function VQF_902_11( disabled: true, }, { - id: "SIGN_DATE" satisfies keyof TalerFormAttributes.VQF_902_9 as UIHandlerId, + id: TalerFormAttributes.VQF_902_9.SIGN_DATE.id, label: i18n.str`Date`, // gana_type: "String", type: "absoluteTimeText", diff --git a/packages/web-util/src/forms/gana/VQF_902_12.ts b/packages/web-util/src/forms/gana/VQF_902_12.ts @@ -19,14 +19,15 @@ export function VQF_902_12( title: i18n.str`Contracing partner`, fields: [ { - id: "FOUNDATION_CONTRACTING_PARTNER" satisfies keyof TalerFormAttributes.VQF_902_12 as UIHandlerId, + id: TalerFormAttributes.VQF_902_12.FOUNDATION_CONTRACTING_PARTNER + .id, label: i18n.str`Contracting partner`, // gana_type: "Paragraph", type: "textArea", required: true, }, { - id: "FOUNDATION_KNOWN_AS" satisfies keyof TalerFormAttributes.VQF_902_12 as UIHandlerId, + id: TalerFormAttributes.VQF_902_12.FOUNDATION_KNOWN_AS.id, label: i18n.str`The undersigned hereby declare(s) that as board member of the foundation, or of the highest supervisory body of an underlying company of a foundation, known as:`, // gana_type: "String", type: "text", @@ -43,14 +44,14 @@ export function VQF_902_12( title: i18n.str`Name and information pertaining to the foundation`, fields: [ { - id: "FOUNDATION_NAME" satisfies keyof TalerFormAttributes.VQF_902_12 as UIHandlerId, + id: TalerFormAttributes.VQF_902_12.FOUNDATION_NAME.id, label: i18n.str`Name`, // gana_type: "String", type: "text", required: true, }, { - id: "FOUNDATION_DISCRETIONARY" satisfies keyof TalerFormAttributes.VQF_902_12 as UIHandlerId, + id: TalerFormAttributes.VQF_902_12.FOUNDATION_DISCRETIONARY.id, label: i18n.str`Type of foundation`, // gana_type: "Boolean", type: "choiceStacked", @@ -61,7 +62,7 @@ export function VQF_902_12( required: true, }, { - id: "FOUNDATION_REVOCABLE" satisfies keyof TalerFormAttributes.VQF_902_12 as UIHandlerId, + id: TalerFormAttributes.VQF_902_12.FOUNDATION_REVOCABLE.id, label: i18n.str`Revocability`, // gana_type: "Boolean", type: "choiceStacked", @@ -78,29 +79,33 @@ export function VQF_902_12( description: i18n.str`Information pertaining to the (ultimate economic, not fiduciary) founder (individual or entity)`, fields: [ { - id: "FOUNDATION_FOUNDER_LIST" satisfies keyof TalerFormAttributes.VQF_902_12 as UIHandlerId, + id: TalerFormAttributes.VQF_902_12.FOUNDATION_FOUNDER_LIST.id, label: i18n.str`Founders`, // gana_type: "Form<VQF_902_12_founder>[]", type: "array", labelFieldId: - "FOUNDATION_FOUNDER_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_12_founder as UIHandlerId, + TalerFormAttributes.VQF_902_12_founder + .FOUNDATION_FOUNDER_FULL_NAME.id, fields: [ { - id: "FOUNDATION_FOUNDER_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_12_founder as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_founder + .FOUNDATION_FOUNDER_FULL_NAME.id, label: i18n.str`Full name`, // gana_type: "String", type: "text", required: true, }, { - id: "FOUNDATION_FOUNDER_DOMICILE" satisfies keyof TalerFormAttributes.VQF_902_12_founder as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_founder + .FOUNDATION_FOUNDER_DOMICILE.id, label: i18n.str`Domicile`, // gana_type: "ResidentialAddress", type: "textArea", required: true, }, { - id: "FOUNDATION_FOUNDER_BIRTHDATE" satisfies keyof TalerFormAttributes.VQF_902_12_founder as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_founder + .FOUNDATION_FOUNDER_BIRTHDATE.id, label: i18n.str`Birthdate`, // gana_type: "AbsoluteDate", type: "isoTimeText", @@ -109,7 +114,8 @@ export function VQF_902_12( required: true, }, { - id: "FOUNDATION_FOUNDER_NATIONALITY" satisfies keyof TalerFormAttributes.VQF_902_12_founder as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_founder + .FOUNDATION_FOUNDER_NATIONALITY.id, label: i18n.str`Nationality`, // gana_type: "CountryCode", type: "selectOne", @@ -117,7 +123,8 @@ export function VQF_902_12( required: true, }, { - id: "FOUNDATION_FOUNDER_DEATHDATE" satisfies keyof TalerFormAttributes.VQF_902_12_founder as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_founder + .FOUNDATION_FOUNDER_DEATHDATE.id, label: i18n.str`Date of death`, // gana_type: "AbsoluteDate", type: "isoTimeText", @@ -125,7 +132,8 @@ export function VQF_902_12( pattern: "dd/MM/yyyy", }, { - id: "FOUNDATION_FOUNDER_RIGHT_TO_REVOKE" satisfies keyof TalerFormAttributes.VQF_902_12_founder as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_founder + .FOUNDATION_FOUNDER_RIGHT_TO_REVOKE.id, label: i18n.str`Right to revoke`, // gana_type: "Boolean", type: "toggle", @@ -141,29 +149,32 @@ export function VQF_902_12( 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 TalerFormAttributes.VQF_902_12 as UIHandlerId, + id: TalerFormAttributes.VQF_902_12.FOUNDATION_PRE_LIST.id, label: i18n.str`Persons`, // gana_type: "Form<VQF_902_12_pre>[]", type: "array", labelFieldId: - "FOUNDATION_PRE_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_12_pre as UIHandlerId, + TalerFormAttributes.VQF_902_12_pre.FOUNDATION_PRE_FULL_NAME.id, fields: [ { - id: "FOUNDATION_PRE_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_12_pre as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_pre.FOUNDATION_PRE_FULL_NAME + .id, label: i18n.str`Full name`, // gana_type: "String", type: "text", required: true, }, { - id: "FOUNDATION_PRE_DOMICILE" satisfies keyof TalerFormAttributes.VQF_902_12_pre as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_pre.FOUNDATION_PRE_DOMICILE + .id, label: i18n.str`Domicile`, // gana_type: "ResidentialAddress", type: "textArea", required: true, }, { - id: "FOUNDATION_PRE_COUNTRY" satisfies keyof TalerFormAttributes.VQF_902_12_pre as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_pre.FOUNDATION_PRE_COUNTRY + .id, label: i18n.str`Country`, // gana_type: "CountryCode", type: "selectOne", @@ -171,7 +182,8 @@ export function VQF_902_12( required: true, }, { - id: "FOUNDATION_PRE_BIRTHDATE" satisfies keyof TalerFormAttributes.VQF_902_12_pre as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_pre.FOUNDATION_PRE_BIRTHDATE + .id, label: i18n.str`Birthdate`, // gana_type: "AbsoluteDate", type: "isoTimeText", @@ -180,7 +192,8 @@ export function VQF_902_12( required: true, }, { - id: "FOUNDATION_PRE_NATIONALITY" satisfies keyof TalerFormAttributes.VQF_902_12_pre as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_pre + .FOUNDATION_PRE_NATIONALITY.id, label: i18n.str`Nationality`, // gana_type: "CountryCode", type: "selectOne", @@ -188,7 +201,8 @@ export function VQF_902_12( required: true, }, { - id: "FOUNDATION_PRE_DEATHDATE" satisfies keyof TalerFormAttributes.VQF_902_12_pre as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_pre.FOUNDATION_PRE_DEATHDATE + .id, label: i18n.str`Date of death`, // gana_type: "AbsoluteDate", type: "isoTimeText", @@ -205,29 +219,33 @@ export function VQF_902_12( description: i18n.str`Pertaining to the beneficiary/-ies at the time of the signing of this form:`, fields: [ { - id: "FOUNDATION_BENEFICIARY_LIST" satisfies keyof TalerFormAttributes.VQF_902_12 as UIHandlerId, + id: TalerFormAttributes.VQF_902_12.FOUNDATION_BENEFICIARY_LIST.id, label: i18n.str`Beneficiaries`, // gana_type: "Form<VQF_902_12_beneficiary>[]", type: "array", labelFieldId: - "FOUNDATION_BENEFICIARY_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_12_beneficiary as UIHandlerId, + TalerFormAttributes.VQF_902_12_beneficiary + .FOUNDATION_BENEFICIARY_FULL_NAME.id, fields: [ { - id: "FOUNDATION_BENEFICIARY_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_12_beneficiary as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_beneficiary + .FOUNDATION_BENEFICIARY_FULL_NAME.id, label: i18n.str`Full name`, // gana_type: "String", type: "text", required: true, }, { - id: "FOUNDATION_BENEFICIARY_DOMICILE" satisfies keyof TalerFormAttributes.VQF_902_12_beneficiary as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_beneficiary + .FOUNDATION_BENEFICIARY_DOMICILE.id, label: i18n.str`Domicile`, // gana_type: "ResidentialAddress", type: "textArea", required: true, }, { - id: "FOUNDATION_BENEFICIARY_COUNTRY" satisfies keyof TalerFormAttributes.VQF_902_12_beneficiary as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_beneficiary + .FOUNDATION_BENEFICIARY_COUNTRY.id, label: i18n.str`Country`, // gana_type: "CountryCode", type: "selectOne", @@ -235,7 +253,8 @@ export function VQF_902_12( required: false, }, { - id: "FOUNDATION_BENEFICIARY_BIRTHDATE" satisfies keyof TalerFormAttributes.VQF_902_12_beneficiary as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_beneficiary + .FOUNDATION_BENEFICIARY_BIRTHDATE.id, label: i18n.str`Full name`, // gana_type: "AbsoluteDate", type: "isoTimeText", @@ -244,14 +263,16 @@ export function VQF_902_12( required: false, }, { - id: "FOUNDATION_BENEFICIARY_NATIONALITY" satisfies keyof TalerFormAttributes.VQF_902_12_beneficiary as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_beneficiary + .FOUNDATION_BENEFICIARY_NATIONALITY.id, label: i18n.str`Nationality`, type: "selectOne", choices: countryNationalityList(i18n), required: false, }, { - id: "FOUNDATION_BENEFICIARY_RIGHT_TO_CLAIM" satisfies keyof TalerFormAttributes.VQF_902_12_beneficiary as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_beneficiary + .FOUNDATION_BENEFICIARY_RIGHT_TO_CLAIM.id, label: i18n.str`Right to claim`, // gana_type: "Boolean", type: "toggle", @@ -261,7 +282,8 @@ export function VQF_902_12( required: true, }, { - id: "FOUNDATION_BENEFICIARY_ADDITION" satisfies keyof TalerFormAttributes.VQF_902_12 as UIHandlerId, + id: TalerFormAttributes.VQF_902_12.FOUNDATION_BENEFICIARY_ADDITION + .id, label: i18n.str`and in addition to certain beneficiaries or if there is/are no defined beneficiary/ies pertaining to (a) group(s) of beneficiaries (e.g. descendants of the founder) known at the time of the signing of this form:`, // gana_type: "Paragraph", type: "textArea", @@ -274,29 +296,34 @@ export function VQF_902_12( 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 TalerFormAttributes.VQF_902_12 as UIHandlerId, + id: TalerFormAttributes.VQF_902_12.FOUNDATION_REPRESENTATIVE_LIST + .id, label: i18n.str`Representatives`, // gana_type: "Form<VQF_902_12_representative>[]", type: "array", labelFieldId: - "FOUNDATION_REPRESENTATIVE_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_12_representative as UIHandlerId, + TalerFormAttributes.VQF_902_12_representative + .FOUNDATION_REPRESENTATIVE_FULL_NAME.id, fields: [ { - id: "FOUNDATION_REPRESENTATIVE_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_12_representative as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_representative + .FOUNDATION_REPRESENTATIVE_FULL_NAME.id, label: i18n.str`Full name`, // gana_type: "String", type: "text", required: true, }, { - id: "FOUNDATION_REPRESENTATIVE_DOMICILE" satisfies keyof TalerFormAttributes.VQF_902_12_representative as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_representative + .FOUNDATION_REPRESENTATIVE_DOMICILE.id, label: i18n.str`Domcile`, // gana_type: "ResidentialAddress", type: "textArea", required: true, }, { - id: "FOUNDATION_REPRESENTATIVE_COUNTRY" satisfies keyof TalerFormAttributes.VQF_902_12_representative as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_representative + .FOUNDATION_REPRESENTATIVE_COUNTRY.id, label: i18n.str`Country`, // gana_type: "CountryCode", type: "selectOne", @@ -304,7 +331,8 @@ export function VQF_902_12( required: true, }, { - id: "FOUNDATION_REPRESENTATIVE_BIRTHDATE" satisfies keyof TalerFormAttributes.VQF_902_12_representative as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_representative + .FOUNDATION_REPRESENTATIVE_BIRTHDATE.id, label: i18n.str`Birthdate`, // gana_type: "AbsoluteDate", type: "isoTimeText", @@ -313,7 +341,8 @@ export function VQF_902_12( required: true, }, { - id: "FOUNDATION_REPRESENTATIVE_NATIONALITY" satisfies keyof TalerFormAttributes.VQF_902_12_representative as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_representative + .FOUNDATION_REPRESENTATIVE_NATIONALITY.id, label: i18n.str`Naitonality`, // gana_type: "CountryCode", type: "selectOne", @@ -321,7 +350,8 @@ export function VQF_902_12( required: true, }, { - id: "FOUNDATION_REPRESENTATIVE_RIGHT_TO_REVOKE" satisfies keyof TalerFormAttributes.VQF_902_12_representative as UIHandlerId, + id: TalerFormAttributes.VQF_902_12_representative + .FOUNDATION_REPRESENTATIVE_RIGHT_TO_REVOKE.id, label: i18n.str`Right to revoke`, // gana_type: "Boolean", type: "toggle", @@ -336,7 +366,7 @@ export function VQF_902_12( 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 TalerFormAttributes.VQF_902_9 as UIHandlerId, + id: TalerFormAttributes.VQF_902_9.SIGNATURE.id, label: i18n.str`Signature`, // gana_type: "AbsoluteDateTime", type: "text", @@ -344,7 +374,7 @@ export function VQF_902_12( disabled: true, }, { - id: "SIGN_DATE" satisfies keyof TalerFormAttributes.VQF_902_9 as UIHandlerId, + id: TalerFormAttributes.VQF_902_9.SIGN_DATE.id, label: i18n.str`Date`, // gana_type: "String", type: "absoluteTimeText", diff --git a/packages/web-util/src/forms/gana/VQF_902_13.ts b/packages/web-util/src/forms/gana/VQF_902_13.ts @@ -19,7 +19,7 @@ export function VQF_902_13( // title: i18n.str`This form was completed by`, // fields: [ // { - // id: "FORM_FILLING_DATE" satisfies keyof TalerFormAttributes.VQF_902_13 as UIHandlerId, + // id: TalerFormAttributes.VQF_902_13.FORM_FILLING_DATE.id, // label: i18n.str`Date`, // // gana_type: "AbsoluteDateTime", // type: "absoluteTimeText", @@ -29,7 +29,7 @@ export function VQF_902_13( // disabled: true, // }, // { - // id: "CUSTOMER_ID" satisfies keyof TalerFormAttributes.VQF_902_13 as UIHandlerId, + // id: TalerFormAttributes.VQF_902_13.CUSTOMER_ID.id, // label: i18n.str`Customer`, // // gana_type: "String", // type: "text", @@ -42,14 +42,14 @@ export function VQF_902_13( title: i18n.str`Contracing partner`, fields: [ { - id: "TRUST_CONTRACTING_PARTNER" satisfies keyof TalerFormAttributes.VQF_902_13 as UIHandlerId, + id: TalerFormAttributes.VQF_902_13.TRUST_CONTRACTING_PARTNER.id, label: i18n.str`Contracting partner`, // gana_type: "Paragraph", type: "textArea", required: true, }, { - id: "TRUST_KNOWN_AS" satisfies keyof TalerFormAttributes.VQF_902_13 as UIHandlerId, + id: TalerFormAttributes.VQF_902_13.TRUST_KNOWN_AS.id, label: i18n.str`Known as`, // gana_type: "String", type: "text", @@ -61,21 +61,21 @@ export function VQF_902_13( title: i18n.str`Name and information pertaining to the trust`, fields: [ { - id: "TRUST_DISCRETIONARY" satisfies keyof TalerFormAttributes.VQF_902_13 as UIHandlerId, + id: TalerFormAttributes.VQF_902_13.TRUST_DISCRETIONARY.id, label: i18n.str`Discretionary`, // gana_type: "Boolean", type: "toggle", required: true, }, { - id: "TRUST_NAME" satisfies keyof TalerFormAttributes.VQF_902_13 as UIHandlerId, + id: TalerFormAttributes.VQF_902_13.TRUST_NAME.id, label: i18n.str`Name`, // gana_type: "String", type: "text", required: true, }, { - id: "TRUST_REVOCABLE" satisfies keyof TalerFormAttributes.VQF_902_13 as UIHandlerId, + id: TalerFormAttributes.VQF_902_13.TRUST_REVOCABLE.id, label: i18n.str`Revocable`, // gana_type: "Boolean", type: "toggle", @@ -88,15 +88,16 @@ export function VQF_902_13( 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 TalerFormAttributes.VQF_902_13 as UIHandlerId, + id: TalerFormAttributes.VQF_902_13.TRUST_SETTLOR_LIST.id, label: i18n.str`Persons`, // gana_type: "Form<VQF_902_13_settlor>[]", type: "array", labelFieldId: - "TRUST_SETTLOR_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_13_settlor as UIHandlerId, + TalerFormAttributes.VQF_902_13_settlor.TRUST_SETTLOR_FULL_NAME.id, fields: [ { - id: "TRUST_SETTLOR_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_13_settlor as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_settlor + .TRUST_SETTLOR_FULL_NAME.id, label: i18n.str`Full name`, // gana_type: "String", type: "text", @@ -104,14 +105,16 @@ export function VQF_902_13( required: true, }, { - id: "TRUST_SETTLOR_DOMICILE" satisfies keyof TalerFormAttributes.VQF_902_13_settlor as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_settlor + .TRUST_SETTLOR_DOMICILE.id, label: i18n.str`Domicile`, // gana_type: "ResidentialAddress", type: "textArea", required: true, }, { - id: "TRUST_SETTLOR_BIRTHDATE" satisfies keyof TalerFormAttributes.VQF_902_13_settlor as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_settlor + .TRUST_SETTLOR_BIRTHDATE.id, label: i18n.str`Full name`, // gana_type: "AbsoluteDate", type: "isoTimeText", @@ -120,7 +123,8 @@ export function VQF_902_13( required: true, }, { - id: "TRUST_SETTLOR_NATIONALITY" satisfies keyof TalerFormAttributes.VQF_902_13_settlor as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_settlor + .TRUST_SETTLOR_NATIONALITY.id, label: i18n.str`Nationality`, // gana_type: "CountryCode", type: "selectOne", @@ -128,7 +132,8 @@ export function VQF_902_13( required: true, }, { - id: "TRUST_SETTLOR_DEATHDATE" satisfies keyof TalerFormAttributes.VQF_902_13_settlor as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_settlor + .TRUST_SETTLOR_DEATHDATE.id, label: i18n.str`Date of death`, // gana_type: "AbsoluteDate", type: "isoTimeText", @@ -136,7 +141,8 @@ export function VQF_902_13( pattern: "dd/MM/yyyy", }, { - id: "TRUST_SETTLOR_RIGHT_TO_REVOKE" satisfies keyof TalerFormAttributes.VQF_902_13_settlor as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_settlor + .TRUST_SETTLOR_RIGHT_TO_REVOKE.id, label: i18n.str`Right to revoke`, // gana_type: "Boolean", type: "toggle", @@ -151,29 +157,29 @@ export function VQF_902_13( 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 TalerFormAttributes.VQF_902_13 as UIHandlerId, + id: TalerFormAttributes.VQF_902_13.TRUST_PRE_LIST.id, label: i18n.str`Persons`, // gana_type: "Form<VQF_902_13_pre>[]", type: "array", labelFieldId: - "TRUST_PRE_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_13_pre as UIHandlerId, + TalerFormAttributes.VQF_902_13_pre.TRUST_PRE_FULL_NAME.id, fields: [ { - id: "TRUST_PRE_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_13_pre as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_pre.TRUST_PRE_FULL_NAME.id, label: i18n.str`Full name`, // gana_type: "String", type: "text", required: false, }, { - id: "TRUST_PRE_DOMICILE" satisfies keyof TalerFormAttributes.VQF_902_13_pre as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_pre.TRUST_PRE_DOMICILE.id, label: i18n.str`Domicile`, // gana_type: "ResidentialAddress", type: "textArea", required: false, }, { - id: "TRUST_PRE_COUNTRY" satisfies keyof TalerFormAttributes.VQF_902_13_pre as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_pre.TRUST_PRE_COUNTRY.id, label: i18n.str`Country`, // gana_type: "CountryCode", type: "selectOne", @@ -182,7 +188,7 @@ export function VQF_902_13( required: false, }, { - id: "TRUST_PRE_BIRTHDATE" satisfies keyof TalerFormAttributes.VQF_902_13_pre as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_pre.TRUST_PRE_BIRTHDATE.id, label: i18n.str`Birthdate`, // gana_type: "AbsoluteDate", type: "isoTimeText", @@ -191,7 +197,7 @@ export function VQF_902_13( required: false, }, { - id: "TRUST_PRE_NATIONALITY" satisfies keyof TalerFormAttributes.VQF_902_13_pre as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_pre.TRUST_PRE_NATIONALITY.id, label: i18n.str`Nationality`, // gana_type: "CountryCode", type: "selectOne", @@ -200,7 +206,7 @@ export function VQF_902_13( required: false, }, { - id: "TRUST_PRE_DEATHDATE" satisfies keyof TalerFormAttributes.VQF_902_13_pre as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_pre.TRUST_PRE_DEATHDATE.id, label: i18n.str`Date of death`, // gana_type: "AbsoluteDate", type: "isoTimeText", @@ -217,29 +223,33 @@ export function VQF_902_13( title: i18n.str`Beneficiaries`, fields: [ { - id: "TRUST_BENEFICIARY_LIST" satisfies keyof TalerFormAttributes.VQF_902_13 as UIHandlerId, + id: TalerFormAttributes.VQF_902_13.TRUST_BENEFICIARY_LIST.id, label: i18n.str`Persons`, // gana_type: "Form<VQF_902_13_beneficiary>[]", type: "array", labelFieldId: - "TRUST_BENEFICIARY_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_13_beneficiary as UIHandlerId, + TalerFormAttributes.VQF_902_13_beneficiary + .TRUST_BENEFICIARY_FULL_NAME.id, fields: [ { - id: "TRUST_BENEFICIARY_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_13_beneficiary as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_beneficiary + .TRUST_BENEFICIARY_FULL_NAME.id, label: i18n.str`Full name`, // gana_type: "String", type: "text", required: true, }, { - id: "TRUST_BENEFICIARY_DOMICILE" satisfies keyof TalerFormAttributes.VQF_902_13_beneficiary as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_beneficiary + .TRUST_BENEFICIARY_DOMICILE.id, label: i18n.str`Domicile`, // gana_type: "ResidentialAddress", type: "textArea", required: false, }, { - id: "TRUST_BENEFICIARY_COUNTRY" satisfies keyof TalerFormAttributes.VQF_902_13_beneficiary as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_beneficiary + .TRUST_BENEFICIARY_COUNTRY.id, label: i18n.str`Country`, // gana_type: "CountryCode", type: "selectOne", @@ -248,7 +258,8 @@ export function VQF_902_13( required: false, }, { - id: "TRUST_BENEFICIARY_BIRTHDATE" satisfies keyof TalerFormAttributes.VQF_902_13_beneficiary as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_beneficiary + .TRUST_BENEFICIARY_BIRTHDATE.id, label: i18n.str`Birthdate`, // gana_type: "AbsoluteDate", type: "isoTimeText", @@ -258,7 +269,8 @@ export function VQF_902_13( required: false, }, { - id: "TRUST_BENEFICIARY_NATIONALITY" satisfies keyof TalerFormAttributes.VQF_902_13_beneficiary as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_beneficiary + .TRUST_BENEFICIARY_NATIONALITY.id, label: i18n.str`Nationality`, // gana_type: "CountryCode", type: "selectOne", @@ -266,14 +278,15 @@ export function VQF_902_13( required: false, }, { - id: "TRUST_BENEFICIARY_RIGHT_TO_CLAIM" satisfies keyof TalerFormAttributes.VQF_902_13_beneficiary as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_beneficiary + .TRUST_BENEFICIARY_RIGHT_TO_CLAIM.id, label: i18n.str`Right to claim`, // gana_type: "Boolean", type: "toggle", required: false, }, // { - // id: "TRUST_BENEFICIARY_ADDITION" satisfies keyof TalerFormAttributes.VQF_902_13_beneficiary as UIHandlerId, + // id: TalerFormAttributes.VQF_902_13_beneficiary.TRUST_BENEFICIARY_ADDITION.id, // label: i18n.str`and in addition to certain beneficiaries or if no beneficiary/-ies has/have been determined, pertaining to (a) group(s) of beneficiaries (e.g. descendants of the settlor) known at the time of the signing of this form`, // // gana_type: "Paragraph", // type: "textArea", @@ -284,29 +297,33 @@ export function VQF_902_13( required: true, }, { - id: "TRUST_PROTECTOR_LIST" satisfies keyof TalerFormAttributes.VQF_902_13 as UIHandlerId, + id: TalerFormAttributes.VQF_902_13.TRUST_PROTECTOR_LIST.id, label: i18n.str`Persons`, // gana_type: "Form<VQF_902_13_protector>[]", type: "array", labelFieldId: - "TRUST_PROTECTOR_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_13_protector as UIHandlerId, + TalerFormAttributes.VQF_902_13_protector.TRUST_PROTECTOR_FULL_NAME + .id, fields: [ { - id: "TRUST_PROTECTOR_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_13_protector as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_protector + .TRUST_PROTECTOR_FULL_NAME.id, label: i18n.str`Full name`, // gana_type: "String", type: "text", required: false, }, { - id: "TRUST_PROTECTOR_DOMICILE" satisfies keyof TalerFormAttributes.VQF_902_13_protector as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_protector + .TRUST_PROTECTOR_DOMICILE.id, label: i18n.str`Domicile`, // gana_type: "ResidentialAddress", type: "textArea", required: false, }, { - id: "TRUST_PROTECTOR_COUNTRY" satisfies keyof TalerFormAttributes.VQF_902_13_protector as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_protector + .TRUST_PROTECTOR_COUNTRY.id, label: i18n.str`Country`, // gana_type: "CountryCode", type: "selectOne", @@ -315,7 +332,8 @@ export function VQF_902_13( required: false, }, { - id: "TRUST_PROTECTOR_BIRTHDATE" satisfies keyof TalerFormAttributes.VQF_902_13_protector as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_protector + .TRUST_PROTECTOR_BIRTHDATE.id, label: i18n.str`Birthdate`, // gana_type: "AbsoluteDate", type: "isoTimeText", @@ -325,7 +343,8 @@ export function VQF_902_13( required: false, }, { - id: "TRUST_PROTECTOR_NATIONALITY" satisfies keyof TalerFormAttributes.VQF_902_13_protector as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_protector + .TRUST_PROTECTOR_NATIONALITY.id, label: i18n.str`Nationality`, // gana_type: "CountryCode", type: "selectOne", @@ -334,7 +353,8 @@ export function VQF_902_13( required: false, }, { - id: "TRUST_PROTECTOR_RIGHT_TO_REVOKE" satisfies keyof TalerFormAttributes.VQF_902_13_protector as UIHandlerId, + id: TalerFormAttributes.VQF_902_13_protector + .TRUST_PROTECTOR_RIGHT_TO_REVOKE.id, label: i18n.str`Right to revoke`, // gana_type: "Boolean", type: "toggle", @@ -351,7 +371,7 @@ export function VQF_902_13( 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 TalerFormAttributes.VQF_902_9 as UIHandlerId, + id: TalerFormAttributes.VQF_902_9.SIGNATURE.id, label: i18n.str`Signature`, // gana_type: "AbsoluteDateTime", type: "text", @@ -359,7 +379,7 @@ export function VQF_902_13( disabled: true, }, { - id: "SIGN_DATE" satisfies keyof TalerFormAttributes.VQF_902_9 as UIHandlerId, + id: TalerFormAttributes.VQF_902_9.SIGN_DATE.id, label: i18n.str`Date`, // gana_type: "String", type: "absoluteTimeText", diff --git a/packages/web-util/src/forms/gana/VQF_902_14.ts b/packages/web-util/src/forms/gana/VQF_902_14.ts @@ -15,7 +15,7 @@ export function VQF_902_14( // title: i18n.str`This form was completed by`, // fields: [ // { - // id: "FORM_FILLING_DATE" satisfies keyof TalerFormAttributes.VQF_902_14 as UIHandlerId, + // id: TalerFormAttributes.VQF_902_14.FORM_FILLING_DATE.id, // label: i18n.str`Date`, // // gana_type: "AbsoluteDateTime", // type: "absoluteTimeText", @@ -25,7 +25,7 @@ export function VQF_902_14( // disabled: true, // }, // { - // id: "CUSTOMER_ID" satisfies keyof TalerFormAttributes.VQF_902_14 as UIHandlerId, + // id: TalerFormAttributes.VQF_902_14.CUSTOMER_ID.id, // label: i18n.str`Customer`, // // gana_type: "String", // type: "text", @@ -38,7 +38,7 @@ export function VQF_902_14( title: i18n.str`Reason for special clarifications`, fields: [ { - id: "INCRISK_REASON" satisfies keyof TalerFormAttributes.VQF_902_14 as UIHandlerId, + id: TalerFormAttributes.VQF_902_14.INCRISK_REASON.id, label: i18n.str`Reason`, help: i18n.str`Description of the circumstances/transactions, which triggered the special clarifications`, // gana_type: "String", @@ -51,7 +51,7 @@ export function VQF_902_14( title: i18n.str`Used means of clarification`, fields: [ { - id: "INCRISK_MEANS" satisfies keyof TalerFormAttributes.VQF_902_14 as UIHandlerId, + id: TalerFormAttributes.VQF_902_14.INCRISK_MEANS.id, label: i18n.str`Means`, // gana_type: "'GATHERING' | 'CONSULTATION' | 'ENQUIRIES' | String", type: "choiceStacked", @@ -82,14 +82,14 @@ export function VQF_902_14( 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 TalerFormAttributes.VQF_902_14 as UIHandlerId, + id: TalerFormAttributes.VQF_902_14.INCRISK_SUMMARY.id, label: i18n.str`Summary`, // gana_type: "Paragraph", type: "textArea", required: true, }, // { - // id: "INCRISK_DOCUMENTS" satisfies keyof TalerFormAttributes.VQF_902_14 as UIHandlerId, + // id: TalerFormAttributes.VQF_902_14.INCRISK_DOCUMENTS.id, // label: i18n.str`Gathered documentes`, // // gana_type: "File[]", // type: "array", @@ -103,7 +103,7 @@ export function VQF_902_14( title: i18n.str`Result of the special clarification`, fields: [ { - id: "INCRISK_RESULT" satisfies keyof TalerFormAttributes.VQF_902_14 as UIHandlerId, + id: TalerFormAttributes.VQF_902_14.INCRISK_RESULT.id, label: i18n.str`Result`, type: "choiceStacked", choices: [ diff --git a/packages/web-util/src/forms/gana/VQF_902_15.ts b/packages/web-util/src/forms/gana/VQF_902_15.ts @@ -16,7 +16,7 @@ export function VQF_902_15( // title: i18n.str`This form was completed by`, // fields: [ // { - // id: "FORM_FILLING_DATE" satisfies keyof TalerFormAttributes.VQF_902_15 as UIHandlerId, + // id: TalerFormAttributes.VQF_902_15.FORM_FILLING_DATE.id, // label: i18n.str`Date`, // // gana_type: "AbsoluteDateTime", // type: "absoluteTimeText", @@ -26,7 +26,7 @@ export function VQF_902_15( // disabled: true, // }, // { - // id: "CUSTOMER_ID" satisfies keyof TalerFormAttributes.VQF_902_15 as UIHandlerId, + // id: TalerFormAttributes.VQF_902_15.CUSTOMER_ID.id, // label: i18n.str`Customer`, // // gana_type: "String", // type: "text", @@ -39,7 +39,7 @@ export function VQF_902_15( title: i18n.str`Contracting partner`, fields: [ { - id: "INSURANCE_CONTRACTING_PARTNER" satisfies keyof TalerFormAttributes.VQF_902_15 as UIHandlerId, + id: TalerFormAttributes.VQF_902_15.INSURANCE_CONTRACTING_PARTNER.id, label: i18n.str`Contracting partner`, // gana_type: "Paragraph", type: "textArea", @@ -52,14 +52,14 @@ export function VQF_902_15( description: i18n.str`Information about the contractua relationship between the contracting party and the financial intermediary`, fields: [ { - id: "INSURANCE_RELATIONSHIP_NAME" satisfies keyof TalerFormAttributes.VQF_902_15 as UIHandlerId, + id: TalerFormAttributes.VQF_902_15.INSURANCE_RELATIONSHIP_NAME.id, label: i18n.str`Name`, // gana_type: "String", type: "text", required: true, }, { - id: "INSURANCE_RELATIONSHIP_POLICY" satisfies keyof TalerFormAttributes.VQF_902_15 as UIHandlerId, + id: TalerFormAttributes.VQF_902_15.INSURANCE_RELATIONSHIP_POLICY.id, label: i18n.str`Insurance policy`, // gana_type: "String", type: "text", @@ -75,21 +75,21 @@ export function VQF_902_15( title: i18n.str`Policy holder`, fields: [ { - id: "INSURANCE_HOLDER_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_15 as UIHandlerId, + id: TalerFormAttributes.VQF_902_15.INSURANCE_HOLDER_FULL_NAME.id, label: i18n.str`Full name`, // gana_type: "String", type: "text", required: false, }, { - id: "INSURANCE_HOLDER_DOMICILE" satisfies keyof TalerFormAttributes.VQF_902_15 as UIHandlerId, + id: TalerFormAttributes.VQF_902_15.INSURANCE_HOLDER_DOMICILE.id, label: i18n.str`Domcile`, // gana_type: "ResidentialAddress", type: "textArea", required: true, }, { - id: "INSURANCE_HOLDER_BIRTHDATE" satisfies keyof TalerFormAttributes.VQF_902_15 as UIHandlerId, + id: TalerFormAttributes.VQF_902_15.INSURANCE_HOLDER_BIRTHDATE.id, label: i18n.str`Birthdate`, // gana_type: "AbsoluteDate", type: "isoTimeText", @@ -98,7 +98,7 @@ export function VQF_902_15( required: true, }, { - id: "INSURANCE_HOLDER_NATIONALITY" satisfies keyof TalerFormAttributes.VQF_902_15 as UIHandlerId, + id: TalerFormAttributes.VQF_902_15.INSURANCE_HOLDER_NATIONALITY.id, label: i18n.str`Nationality`, // gana_type: "CountryCode", type: "selectOne", diff --git a/packages/web-util/src/forms/gana/VQF_902_1_all.stories.tsx b/packages/web-util/src/forms/gana/VQF_902_1_all.stories.tsx @@ -0,0 +1,37 @@ +/* + This file is part of GNU Taler + (C) 2022 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/> + */ + +/** + * + * @author Sebastian Javier Marchano (sebasjm) + */ + +import { i18n, setupI18n } from "@gnu-taler/taler-util"; +import * as tests from "../../tests/hook.js"; +import { DefaultForm as TestedComponent } from "../forms-ui.js"; +import { VQF_902_1_all } from "./VQF_902_1_all.js"; +export default { + title: "VQF_902_1e ALL fields", +}; + +setupI18n("en", {}); +type TargetObject = {}; +const initial: TargetObject = {}; + +export const EmptyForm = tests.createExample(TestedComponent, { + initial, + design: VQF_902_1_all(i18n), +}); diff --git a/packages/web-util/src/forms/gana/VQF_902_1_all.ts b/packages/web-util/src/forms/gana/VQF_902_1_all.ts @@ -0,0 +1,556 @@ +import { + DoubleColumnFormDesign, + InternationalizationAPI, + UIHandlerId, +} from "../../index.browser.js"; +import { countryNationalityList } from "../../utils/countries.js"; +import { languageNameList } from "../../utils/languagues.js"; +import { TalerFormAttributes } from "./taler_form_attributes.js"; + +/** + * VQF_902_1 filled with all fieldsto be filled + * + * @returns + */ +export function VQF_902_1_all( + i18n: InternationalizationAPI, +): DoubleColumnFormDesign { + return { + type: "double-column", + sections: [ + { + 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: TalerFormAttributes.VQF_902_1.CUSTOMER_TYPE.id, + label: i18n.str`Customer type`, + // gana_type: "String", + type: "choiceStacked", + choices: [ + { + value: "NATURAL", + label: i18n.str`Natural person`, + }, + { + value: "OPERATIONAL", + label: i18n.str`Operational legal entity or partnership`, + }, + { + value: "FOUNDATION", + label: i18n.str`Foundation`, + }, + { + value: "TRUST", + label: i18n.str`Trust`, + }, + { + value: "LIFE_INSURANCE", + label: i18n.str`Life insurance`, + }, + { + value: "OTHER", + label: i18n.str`Other`, + }, + ], + required: 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: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_FULL_NAME.id, + label: i18n.str`Full name`, + // gana_type: "String", + type: "text", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL_PERSON"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_RESIDENTIAL.id, + label: i18n.str`Residential address`, + // gana_type: "ResidentialAddress", + type: "textArea", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL_PERSON"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_PHONE.id, + label: i18n.str`Telephone`, + // gana_type: "Phone", + type: "text", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL_PERSON"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_EMAIL.id, + label: i18n.str`E-mail`, + // gana_type: "Email", + type: "text", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL_PERSON"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_BIRTHDATE.id, + label: i18n.str`Date of birth`, + // gana_type: "AbsoluteDate", + type: "isoTimeText", + placeholder: "dd/MM/yyyy", + pattern: "dd/MM/yyyy", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL_PERSON"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_NATIONALITY.id, + label: i18n.str`Nationality`, + // gana_type: "CountryCode", + type: "selectOne", + choices: countryNationalityList(i18n), + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL_PERSON"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_NATIONAL_ID.id, + label: i18n.str`Identification document`, + // gana_type: "String", + type: "text", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL_PERSON"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_NATIONAL_ID_COPY + .id, + label: i18n.str`Copy of identification document`, + // gana_type: "File", + type: "file", + accept: "application/pdf", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL_PERSON"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_COMPANY_NAME.id, + label: i18n.str`Company name`, + // gana_type: "String", + type: "text", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_REGISTERED_OFFICE + .id, + label: i18n.str`Registered office`, + // gana_type: "String", + type: "text", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_COMPANY_ID.id, + label: i18n.str`Company identification document`, + // gana_type: "String", + type: "text", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_COMPANY_ID_COPY + .id, + label: i18n.str`Copy of company identification document`, + // gana_type: "File", + type: "file", + accept: "application/pdf", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_ENTITY_COMPANY_NAME.id, + label: i18n.str`Company name`, + // gana_type: "String", + type: "text", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_ENTITY_ADDRESS.id, + label: i18n.str`Domicile`, + // gana_type: "BusinessAddress", + type: "textArea", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1 + .CUSTOMER_ENTITY_CONTACT_PERSON_NAME.id, + label: i18n.str`Contact person`, + // gana_type: "String", + type: "text", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_ENTITY_PHONE.id, + label: i18n.str`Telephone`, + // gana_type: "Phone", + type: "text", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_ENTITY_EMAIL.id, + label: i18n.str`E-mail`, + // gana_type: "Email", + type: "text", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_ENTITY_ID.id, + label: i18n.str`Identification document`, + // gana_type: "String", + type: "text", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_ENTITY_ID_COPY.id, + label: i18n.str`Copy of identification document`, + // gana_type: "File", + type: "file", + accept: "application/pdf", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + ], + }, + { + 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.`, + hide(root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + fields: [ + { + id: TalerFormAttributes.VQF_902_1.FOUNDER_LIST.id, + label: i18n.str`Founders`, + // gana_type: "Form<VQF_902_1_founder>[]", + type: "array", + labelFieldId: + TalerFormAttributes.VQF_902_1_founder.FOUNDER_FULL_NAME.id, + fields: [ + { + id: TalerFormAttributes.VQF_902_1_founder.FOUNDER_FULL_NAME.id, + label: i18n.str`Full name`, + // gana_type: "String", + type: "text", + required: true, + }, + { + id: TalerFormAttributes.VQF_902_1_founder + .FOUNDER_RESIDENTIAL_ADDRESS.id, + label: i18n.str`Residential address`, + // gana_type: "ResidentialAddress", + type: "textArea", + required: true, + }, + { + id: TalerFormAttributes.VQF_902_1_founder.FOUNDER_BIRTHDATE.id, + label: i18n.str`Date of birth`, + // gana_type: "AbsoluteDate", + type: "isoTimeText", + placeholder: "dd/MM/yyyy", + pattern: "dd/MM/yyyy", + required: true, + }, + { + id: TalerFormAttributes.VQF_902_1_founder.FOUNDER_NATIONALITY + .id, + label: i18n.str`Nationality`, + // gana_type: "CountryCode", + type: "selectOne", + choices: countryNationalityList(i18n), + required: true, + }, + { + id: TalerFormAttributes.VQF_902_1_founder + .FOUNDER_AUTHORIZATION_TYPE.id, + label: i18n.str`Type of authorization`, + // gana_type: "String", + type: "text", + required: true, + }, + { + id: TalerFormAttributes.VQF_902_1_founder.FOUNDER_NATIONAL_ID + .id, + label: i18n.str`Identification document`, + // gana_type: "String", + type: "text", + required: true, + }, + { + id: TalerFormAttributes.VQF_902_1_founder.FOUNDER_NATIONAL_COPY + .id, + label: i18n.str`Copy of identification document`, + // gana_type: "File", + type: "file", + accept: "application/pdf", + + required: true, + }, + { + id: TalerFormAttributes.VQF_902_1_founder + .FOUNDER_POWER_OF_ATTORNEY.id, + label: i18n.str`Power of attorney arrangements`, + // gana_type: "String", + type: "choiceStacked", + choices: [ + { + value: "CR", + label: i18n.str`CR extract`, + }, + { + value: "MANDATE", + label: i18n.str`Mandate`, + }, + ], + allowFreeForm: true, + required: true, + }, + ], + required: true, + }, + ], + }, + { + title: i18n.str`Acceptance of business relationship`, + fields: [ + { + id: TalerFormAttributes.VQF_902_1.ACCEPTANCE_DATE.id, + label: i18n.str`Date`, + // gana_type: "AbsoluteDate",fdfdf + type: "isoTimeText", + placeholder: "dd/MM/yyyy", + pattern: "dd/MM/yyyy", + required: false, + }, + { + id: TalerFormAttributes.VQF_902_1.ACCEPTANCE_METHOD.id, + label: i18n.str`Accepted by`, + // gana_type: "String", + type: "choiceStacked", + choices: [ + { + value: "FACE_TO_FACE", + label: i18n.str`Face to face`, + }, + { + value: "AUTHENTICATED_COPY", + label: i18n.str`Authenticated copy`, + }, + { + value: "RESIDENTIAL_ADDRESS_VALIDATED", + label: i18n.str`Residentail address validated`, + }, + ], + required: false, + }, + { + id: TalerFormAttributes.VQF_902_1 + .ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE.id, + label: i18n.str`Type of correspondence service`, + // gana_type: "String", + type: "choiceStacked", + choices: [ + { + value: "HOLD_AT_BANK", + label: i18n.str`Hold at a bank`, + }, + { + value: "TO_THE_CUSTOMER", + label: i18n.str`To the customer`, + }, + { + value: "TO_THE_MEMBER", + label: i18n.str`To the member`, + }, + { + value: "TO_A_THIRD_PARTY", + label: i18n.str`To a third party`, + }, + ], + required: false, + }, + { + id: TalerFormAttributes.VQF_902_1 + .ACCEPTANCE_CORRESPONDENCE_SERVICE_THIRD_PARTY_FULL_NAME.id, + label: i18n.str`Third party full name`, + // gana_type: "String", + type: "text", + required: true, + hide(value, root) { + return ( + !!root && + root["ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE"] !== + "TO_A_THIRD_PARTY" + ); + }, + }, + { + id: TalerFormAttributes.VQF_902_1 + .ACCEPTANCE_CORRESPONDENCE_SERVICE_THIRD_PARTY_ADDRESS.id, + label: i18n.str`Third party address`, + // gana_type: "ResidentialAddress", + type: "textArea", + required: true, + hide(value, root) { + return ( + !!root && + root["ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE"] !== + "TO_A_THIRD_PARTY" + ); + }, + }, + { + id: TalerFormAttributes.VQF_902_1.ACCEPTANCE_LANGUAGE.id, + label: i18n.str`Language`, + // gana_type: "LangCode", + type: "selectOne", + choices: languageNameList(i18n), + required: false, + }, + { + id: TalerFormAttributes.VQF_902_1.ACCEPTANCE_FURTHER_INFO.id, + label: i18n.str`Further information`, + // gana_type: "String", + type: "textArea", + required: false, + }, + ], + }, + { + 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: TalerFormAttributes.VQF_902_1.EMBARGO_TERRORISM_INFO.id, + label: i18n.str`Embargo information`, + // gana_type: "Paragraph", + type: "textArea", + required: false, + }, + ], + }, + // { + // title: i18n.str`Relationship`, + // fields: [ + // { + // id: TalerFormAttributes.VQF_902_1.RELATIONSHIP_TYPE.id, + // label: i18n.str`Type of business relationship`, + // // gana_type: "'MONEY_EXCHANGE' | 'MONEY_ASSET_TRANSFER' | String", + // type: "choiceStacked", + // choices: [ + // { + // value: "MONEY_EXCHANGE", + // label: i18n.str`Money exchange`, + // }, + // { + // value: "MONEY_ASSET_TRANSFER", + // label: i18n.str`Money asset transfer`, + // }, + // ], + // allowFreeForm: true, + // required: false, + // }, + // { + // id: TalerFormAttributes.VQF_902_1.RELATIONSHIP_PURPOSE.id, + // label: i18n.str`Purpose of the business relationship`, + // // gana_type: "Paragraph", + // type: "textArea", + // required: false, + // }, + // ], + // }, + // { + // title: i18n.str`Enclosures`, + // fields: [ + // { + // id: TalerFormAttributes.VQF_902_1.ENCLOSURE_CUSTOMER_DOCUMENTS.id, + // label: i18n.str`Customer identification documents`, + // // gana_type: "Boolean", + // type: "toggle", + // required: false, + // }, + // { + // id: TalerFormAttributes.VQF_902_1.ENCLOSURE_IDENTIFICATION_DOCUMENTS + // .id, + // label: i18n.str`Customer identification documents`, + // // gana_type: "Boolean", + // type: "toggle", + // required: false, + // }, + // { + // id: TalerFormAttributes.VQF_902_1.ENCLOSURE_BENEFICIAL_OWNER.id, + // label: i18n.str`Customer identification documents`, + // // gana_type: "Boolean", + // type: "toggle", + // required: false, + // }, + // { + // id: TalerFormAttributes.VQF_902_1.ENCLOSURE_CUSTOMER_PROFILE.id, + // label: i18n.str`Customer identification documents`, + // // gana_type: "Boolean", + // type: "toggle", + // required: false, + // }, + // { + // id: TalerFormAttributes.VQF_902_1.ENCLOSURE_RISK_PROFILE.id, + // label: i18n.str`Customer identification documents`, + // // gana_type: "Boolean", + // type: "toggle", + // required: false, + // }, + // ], + // }, + ], + }; +} diff --git a/packages/web-util/src/forms/gana/VQF_902_1_customer.stories.tsx b/packages/web-util/src/forms/gana/VQF_902_1_customer.stories.tsx @@ -0,0 +1,37 @@ +/* + This file is part of GNU Taler + (C) 2022 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/> + */ + +/** + * + * @author Sebastian Javier Marchano (sebasjm) + */ + +import { i18n, setupI18n } from "@gnu-taler/taler-util"; +import * as tests from "../../tests/hook.js"; +import { DefaultForm as TestedComponent } from "../forms-ui.js"; +import { VQF_902_1_customer } from "./VQF_902_1_customer.js"; +export default { + title: "VQF_902_1e customer fields", +}; + +setupI18n("en", {}); +type TargetObject = {}; +const initial: TargetObject = {}; + +export const EmptyForm = tests.createExample(TestedComponent, { + initial, + design: VQF_902_1_customer(i18n), +}); diff --git a/packages/web-util/src/forms/gana/VQF_902_1_customer.ts b/packages/web-util/src/forms/gana/VQF_902_1_customer.ts @@ -0,0 +1,416 @@ +import { + DoubleColumnFormDesign, + InternationalizationAPI, +} from "../../index.browser.js"; +import { countryNationalityList } from "../../utils/countries.js"; +import { TalerFormAttributes } from "./taler_form_attributes.js"; + +import { UIHandlerId } from "@gnu-taler/web-util/browser"; + +/** + * VQF_902_1 filled by customer + * + * @returns + */ +export function VQF_902_1_customer( + i18n: InternationalizationAPI, +): DoubleColumnFormDesign { + return { + type: "double-column", + sections: [ + { + 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: TalerFormAttributes.VQF_902_1.CUSTOMER_TYPE.id, + label: i18n.str`Customer type`, + // gana_type: "String", + type: "choiceStacked", + choices: [ + { + value: "NATURAL", + label: i18n.str`Natural person`, + }, + { + value: "OPERATIONAL", + label: i18n.str`Operational legal entity or partnership`, + }, + { + value: "FOUNDATION", + label: i18n.str`Foundation`, + }, + { + value: "TRUST", + label: i18n.str`Trust`, + }, + { + value: "LIFE_INSURANCE", + label: i18n.str`Life insurance`, + }, + { + value: "OTHER", + label: i18n.str`Other`, + }, + ], + required: 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: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_FULL_NAME.id, + label: i18n.str`Full name`, + // gana_type: "String", + type: "text", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_RESIDENTIAL.id, + label: i18n.str`Residential address`, + // gana_type: "ResidentialAddress", + type: "textArea", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_PHONE.id, + label: i18n.str`Telephone`, + // gana_type: "Phone", + type: "text", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_EMAIL.id, + label: i18n.str`E-mail`, + // gana_type: "Email", + type: "text", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_BIRTHDATE.id, + label: i18n.str`Date of birth`, + // gana_type: "AbsoluteDate", + type: "isoTimeText", + placeholder: "dd/MM/yyyy", + pattern: "dd/MM/yyyy", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_NATIONALITY.id, + label: i18n.str`Nationality`, + // gana_type: "CountryCode", + type: "selectOne", + choices: countryNationalityList(i18n), + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_NATIONAL_ID.id, + label: i18n.str`Identification document`, + // gana_type: "String", + type: "text", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_NATIONAL_ID_COPY + .id, + label: i18n.str`Copy of identification document`, + // gana_type: "File", + type: "file", + accept: "application/pdf", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_COMPANY_NAME.id, + label: i18n.str`Company name`, + // gana_type: "String", + type: "text", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_REGISTERED_OFFICE + .id, + label: i18n.str`Registered office`, + // gana_type: "String", + type: "text", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_COMPANY_ID.id, + label: i18n.str`Company identification document`, + // gana_type: "String", + type: "text", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_NATURAL_COMPANY_ID_COPY + .id, + label: i18n.str`Copy of company identification document`, + // gana_type: "File", + type: "file", + accept: "application/pdf", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "NATURAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_ENTITY_COMPANY_NAME.id, + label: i18n.str`Company name`, + // gana_type: "String", + type: "text", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_ENTITY_ADDRESS.id, + label: i18n.str`Domicile`, + // gana_type: "BusinessAddress", + type: "textArea", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1 + .CUSTOMER_ENTITY_CONTACT_PERSON_NAME.id, + label: i18n.str`Contact person`, + // gana_type: "String", + type: "text", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_ENTITY_PHONE.id, + label: i18n.str`Telephone`, + // gana_type: "Phone", + type: "text", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_ENTITY_EMAIL.id, + label: i18n.str`E-mail`, + // gana_type: "Email", + type: "text", + required: false, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_ENTITY_ID.id, + label: i18n.str`Identification document`, + // gana_type: "String", + type: "text", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + { + id: TalerFormAttributes.VQF_902_1.CUSTOMER_ENTITY_ID_COPY.id, + label: i18n.str`Copy of identification document`, + // gana_type: "File", + type: "file", + accept: "application/pdf", + required: true, + hide(value, root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + }, + ], + }, + { + 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.`, + hide(root) { + return !!root && root["CUSTOMER_TYPE"] !== "OPERATIONAL"; + }, + fields: [ + { + id: TalerFormAttributes.VQF_902_1.FOUNDER_LIST.id, + label: i18n.str`Founders`, + // gana_type: "Form<VQF_902_1_founder>[]", + type: "array", + labelFieldId: + TalerFormAttributes.VQF_902_1_founder.FOUNDER_FULL_NAME.id, + fields: [ + { + id: TalerFormAttributes.VQF_902_1_founder.FOUNDER_FULL_NAME.id, + label: i18n.str`Full name`, + // gana_type: "String", + type: "text", + required: true, + }, + { + id: TalerFormAttributes.VQF_902_1_founder + .FOUNDER_RESIDENTIAL_ADDRESS.id, + label: i18n.str`Residential address`, + // gana_type: "ResidentialAddress", + type: "textArea", + required: true, + }, + { + id: TalerFormAttributes.VQF_902_1_founder.FOUNDER_BIRTHDATE.id, + label: i18n.str`Date of birth`, + // gana_type: "AbsoluteDate", + type: "isoTimeText", + placeholder: "dd/MM/yyyy", + pattern: "dd/MM/yyyy", + required: true, + }, + { + id: TalerFormAttributes.VQF_902_1_founder.FOUNDER_NATIONALITY + .id, + label: i18n.str`Nationality`, + // gana_type: "CountryCode", + type: "selectOne", + choices: countryNationalityList(i18n), + required: true, + }, + { + id: TalerFormAttributes.VQF_902_1_founder + .FOUNDER_AUTHORIZATION_TYPE.id, + label: i18n.str`Type of authorization`, + // gana_type: "String", + type: "text", + required: true, + }, + { + id: TalerFormAttributes.VQF_902_1_founder.FOUNDER_NATIONAL_ID + .id, + label: i18n.str`Identification document`, + // gana_type: "String", + type: "text", + required: true, + }, + { + id: TalerFormAttributes.VQF_902_1_founder.FOUNDER_NATIONAL_COPY + .id, + label: i18n.str`Copy of identification document`, + // gana_type: "File", + type: "file", + accept: "application/pdf", + + required: true, + }, + { + id: TalerFormAttributes.VQF_902_1_founder + .FOUNDER_POWER_OF_ATTORNEY.id, + label: i18n.str`Power of attorney arrangements`, + // gana_type: "'CR' | 'MANDATE' | 'OTHER' | String", + type: "choiceStacked", + choices: [ + { + value: "CR", + label: i18n.str`Hold at a bank`, + }, + { + value: "MANDATE", + label: i18n.str`To a third party`, + }, + { + value: "TO_THE_CUSTOMER", + label: i18n.str`To the customer`, + }, + { + value: "TO_THE_MEMBER", + label: i18n.str`To the member`, + }, + ], + allowFreeForm: true, + required: true, + }, + ], + required: true, + }, + ], + }, + + // { + // title: i18n.str`Enclosures`, + // fields: [ + // { + // id: TalerFormAttributes.VQF_902_1.ENCLOSURE_CUSTOMER_DOCUMENTS.id, + // label: i18n.str`Customer identification documents`, + // // gana_type: "Boolean", + // type: "toggle", + // required: false, + // }, + // { + // id: TalerFormAttributes.VQF_902_1.ENCLOSURE_IDENTIFICATION_DOCUMENTS + // .id, + // label: i18n.str`Customer identification documents`, + // // gana_type: "Boolean", + // type: "toggle", + // required: false, + // }, + // { + // id: TalerFormAttributes.VQF_902_1.ENCLOSURE_BENEFICIAL_OWNER.id, + // label: i18n.str`Customer identification documents`, + // // gana_type: "Boolean", + // type: "toggle", + // required: false, + // }, + // { + // id: TalerFormAttributes.VQF_902_1.ENCLOSURE_CUSTOMER_PROFILE.id, + // label: i18n.str`Customer identification documents`, + // // gana_type: "Boolean", + // type: "toggle", + // required: false, + // }, + // { + // id: TalerFormAttributes.VQF_902_1.ENCLOSURE_RISK_PROFILE.id, + // label: i18n.str`Customer identification documents`, + // // gana_type: "Boolean", + // type: "toggle", + // required: false, + // }, + // ], + // }, + ], + }; +} diff --git a/packages/web-util/src/forms/gana/VQF_902_1_officer.stories.tsx b/packages/web-util/src/forms/gana/VQF_902_1_officer.stories.tsx @@ -0,0 +1,37 @@ +/* + This file is part of GNU Taler + (C) 2022 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/> + */ + +/** + * + * @author Sebastian Javier Marchano (sebasjm) + */ + +import { i18n, setupI18n } from "@gnu-taler/taler-util"; +import * as tests from "../../tests/hook.js"; +import { DefaultForm as TestedComponent } from "../forms-ui.js"; +import { VQF_902_1_officer } from "./VQF_902_1_officer.js"; +export default { + title: "VQF_902_1e Officer fields (after customer)", +}; + +setupI18n("en", {}); +type TargetObject = {}; +const initial: TargetObject = {}; + +export const EmptyForm = tests.createExample(TestedComponent, { + initial, + design: VQF_902_1_officer(i18n), +}); diff --git a/packages/web-util/src/forms/gana/VQF_902_1_officer.ts b/packages/web-util/src/forms/gana/VQF_902_1_officer.ts @@ -0,0 +1,143 @@ +import { + DoubleColumnFormDesign, + InternationalizationAPI, + UIHandlerId, +} from "../../index.browser.js"; +import { countryNationalityList } from "../../utils/countries.js"; +import { languageNameList } from "../../utils/languagues.js"; +import { TalerFormAttributes } from "./taler_form_attributes.js"; + +/** + * VQF_902_1 filled by AML officer when the customer + * as complete VQF 902 1 partially + * + * @returns + */ +export function VQF_902_1_officer( + i18n: InternationalizationAPI, +): DoubleColumnFormDesign { + return { + type: "double-column", + sections: [ + { + title: i18n.str`Acceptance of business relationship`, + fields: [ + { + id: TalerFormAttributes.VQF_902_1.ACCEPTANCE_DATE.id, + label: i18n.str`Date`, + // gana_type: "AbsoluteDate",fdfdf + type: "isoTimeText", + placeholder: "dd/MM/yyyy", + pattern: "dd/MM/yyyy", + required: false, + }, + { + id: TalerFormAttributes.VQF_902_1.ACCEPTANCE_METHOD.id, + label: i18n.str`Accepted by`, + // gana_type: "String", + type: "choiceStacked", + choices: [ + { + value: "FACE_TO_FACE", + label: i18n.str`Face to face`, + }, + { + value: "AUTHENTICATED_COPY", + label: i18n.str`Authenticated copy`, + }, + { + value: "RESIDENTIAL_ADDRESS_VALIDATED", + label: i18n.str`Residentail address validated`, + }, + ], + required: false, + }, + { + id: TalerFormAttributes.VQF_902_1 + .ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE.id, + label: i18n.str`Type of correspondence service`, + // gana_type: "String", + type: "choiceStacked", + choices: [ + { + value: "HOLD_AT_BANK", + label: i18n.str`Hold at a bank`, + }, + { + value: "TO_THE_CUSTOMER", + label: i18n.str`To the customer`, + }, + { + value: "TO_THE_MEMBER", + label: i18n.str`To the member`, + }, + { + value: "TO_A_THIRD_PARTY", + label: i18n.str`To a third party`, + }, + ], + required: false, + }, + { + id: TalerFormAttributes.VQF_902_1 + .ACCEPTANCE_CORRESPONDENCE_SERVICE_THIRD_PARTY_FULL_NAME.id, + label: i18n.str`Third party full name`, + // gana_type: "String", + type: "text", + required: true, + hide(value, root) { + return ( + !!root && + root["ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE"] !== + "TO_A_THIRD_PARTY" + ); + }, + }, + { + id: TalerFormAttributes.VQF_902_1 + .ACCEPTANCE_CORRESPONDENCE_SERVICE_THIRD_PARTY_ADDRESS.id, + label: i18n.str`Third party address`, + // gana_type: "ResidentialAddress", + type: "textArea", + required: true, + hide(value, root) { + return ( + !!root && + root["ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE"] !== + "TO_A_THIRD_PARTY" + ); + }, + }, + { + id: TalerFormAttributes.VQF_902_1.ACCEPTANCE_LANGUAGE.id, + label: i18n.str`Language`, + // gana_type: "LangCode", + type: "selectOne", + choices: languageNameList(i18n), + required: false, + }, + { + id: TalerFormAttributes.VQF_902_1.ACCEPTANCE_FURTHER_INFO.id, + label: i18n.str`Further information`, + // gana_type: "String", + type: "textArea", + required: false, + }, + ], + }, + { + 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: TalerFormAttributes.VQF_902_1.EMBARGO_TERRORISM_INFO.id, + label: i18n.str`Embargo information`, + // gana_type: "Paragraph", + type: "textArea", + required: false, + }, + ], + }, + ], + }; +} diff --git a/packages/web-util/src/forms/gana/VQF_902_4.ts b/packages/web-util/src/forms/gana/VQF_902_4.ts @@ -15,7 +15,7 @@ export function VQF_902_4( // title: i18n.str`This form was completed by`, // fields: [ // { - // id: "FORM_FILLING_DATE" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, + // id: TalerFormAttributes.VQF_902_1.FORM_FILLING_DATE.id, // label: i18n.str`Date`, // // gana_type: "AbsoluteDateTime", // type: "absoluteTimeText", @@ -25,7 +25,7 @@ export function VQF_902_4( // disabled: true, // }, // { - // id: "CUSTOMER_ID" satisfies keyof TalerFormAttributes.VQF_902_1 as UIHandlerId, + // id: TalerFormAttributes.VQF_902_1.CUSTOMER_ID.id, // label: i18n.str`Customer`, // // gana_type: "String", // type: "text", @@ -39,7 +39,7 @@ export function VQF_902_4( description: i18n.str`This evaluation has to be completed by all members for every business relationship.`, fields: [ { - id: "PEP_FOREIGN" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.PEP_FOREIGN.id, label: i18n.str`Foreign PEP`, help: i18n.str`Is the customer, the beneficial owner or the controlling person or authorised representative a foreign PEP or closely related to such a person?`, // gana_type: "Boolean", @@ -47,7 +47,7 @@ export function VQF_902_4( required: true, }, { - id: "PEP_DOMESTIC" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.PEP_DOMESTIC.id, label: i18n.str`Domestic PEP`, help: i18n.str`Is the customer, the beneficial owner or the controlling person or authorised representative a domestic PEP or closely related to such a person?`, // gana_type: "Boolean", @@ -55,7 +55,7 @@ export function VQF_902_4( required: true, }, { - id: "PEP_INTERNATIONAL_ORGANIZATION" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.PEP_INTERNATIONAL_ORGANIZATION.id, label: i18n.str`PEP of International Organisatons`, help: i18n.str`Is the customer, the beneficial owner or the controlling person or authorised representative a PEP in International Organizations or closely related to such a person?`, // gana_type: "Boolean", @@ -63,7 +63,7 @@ export function VQF_902_4( required: true, }, { - id: "PEP_ACCEPTANCE_DATE" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.PEP_ACCEPTANCE_DATE.id, label: i18n.str`Acceptance date`, help: i18n.str`When the decision of the Senior executive body on the acceptance of a business relationship with a PEP was obtain on.`, // gana_type: "AbsoluteDateTime", @@ -79,7 +79,7 @@ export function VQF_902_4( description: i18n.str`This evaluation has to be completed by all members for every business relationship.`, fields: [ { - id: "HIGH_RISK_COUNTRY" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.HIGH_RISK_COUNTRY.id, label: i18n.str`High-risk or non-cooperative country`, help: i18n.str`Is the customer, the beneficial owner or the controlling person or authorised representative in a country considered by the FATF as high-risk or non-cooperative and for which FATF requires increased diligence?`, // gana_type: "Boolean", @@ -87,7 +87,7 @@ export function VQF_902_4( required: true, }, { - id: "HIGH_RISK_ACCEPTANCE_DATE" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.HIGH_RISK_ACCEPTANCE_DATE.id, label: i18n.str`Acceptance date`, help: i18n.str`When the decision of the Senior executive body on the acceptance of a business relationship with a PEP was obtain on.`, // gana_type: "AbsoluteDateTime", @@ -103,7 +103,7 @@ export function VQF_902_4( 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: "COUNTRY_RISK_NATIONALITY_TYPE" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.COUNTRY_RISK_NATIONALITY_TYPE.id, label: i18n.str`Country risk type (nationality)`, // gana_type: "'LOW' | 'MEDIUM' | 'HIGH'", choices: [ @@ -129,7 +129,7 @@ export function VQF_902_4( required: false, }, { - id: "COUNTRY_RISK_NATIONALITY_LEVEL" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.COUNTRY_RISK_NATIONALITY_LEVEL.id, label: i18n.str`Country risk level (nationality)`, // gana_type: // "'NATIONALITY_CUSTOMER' | 'NATIONALITY_OWNER' | 'DOMICILE_CUSTOMER' | 'DOMICILE_OWNER' | 'DOMICILE_CONTROLLING' | 'BUSINESS_ACTIVITY' | 'PAYMENTS'", @@ -166,7 +166,7 @@ export function VQF_902_4( required: false, }, { - id: "COUNTRY_RISK_BUSINESS_TYPE" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.COUNTRY_RISK_BUSINESS_TYPE.id, label: i18n.str`Country risk type (business activity)`, // gana_type: "'LOW' | 'MEDIUM' | 'HIGH'", choices: [ @@ -183,7 +183,7 @@ export function VQF_902_4( required: false, }, { - id: "COUNTRY_RISK_BUSINESS_LEVEL" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.COUNTRY_RISK_BUSINESS_LEVEL.id, label: i18n.str`Country risk level (business activity)`, // gana_type: // "'NATIONALITY_CUSTOMER' | 'NATIONALITY_OWNER' | 'DOMICILE_CUSTOMER' | 'DOMICILE_OWNER' | 'DOMICILE_CONTROLLING' | 'BUSINESS_ACTIVITY' | 'PAYMENTS'", @@ -196,7 +196,7 @@ export function VQF_902_4( required: false, }, { - id: "COUNTRY_RISK_PAYMENTS_LEVEL" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.COUNTRY_RISK_PAYMENTS_LEVEL.id, label: i18n.str`Country risk level (payments)`, help: i18n.str`Contry of origin ad destination of the frequent payments (if known)`, // gana_type: @@ -210,7 +210,7 @@ export function VQF_902_4( required: false, }, { - id: "INDUSTRY_RISK_TYPE" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.INDUSTRY_RISK_TYPE.id, label: i18n.str`Industry risk type`, help: i18n.str`Nature of customer's business activity`, // gana_type: "'CUSTOMER' | 'OWNER'", @@ -222,7 +222,7 @@ export function VQF_902_4( required: false, }, { - id: "INDUSTRY_RISK_LEVEL" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.INDUSTRY_RISK_LEVEL.id, label: i18n.str`Industry risk level`, // gana_type: // "'TRANSPARENT' | 'HIGH_CASH_TRANSACTION' | 'NOT_WELL_KNOWN' | 'HIGH_RISK_TRADE' | 'UNKNOWN_INDUSTRY'", @@ -252,7 +252,7 @@ export function VQF_902_4( required: false, }, { - id: "CONTACT_RISK_LEVEL" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.CONTACT_RISK_LEVEL.id, label: i18n.str`Contact risk level`, help: i18n.str`Type of contact to the customer/benefcial owner of the assets.`, // gana_type: "'LOW' | 'MEDIUM' | 'HIGH'", @@ -275,7 +275,7 @@ export function VQF_902_4( }, { - id: "PRODUCT_RISK_LEVEL" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.PRODUCT_RISK_LEVEL.id, label: i18n.str`Product risk level`, help: i18n.str`Nature of services and products requested by the customer.`, // gana_type: @@ -315,7 +315,8 @@ export function VQF_902_4( }, { - id: "EXTRA_CRITERA_1_RISK_DEFINITION" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.EXTRA_CRITERA_1_RISK_DEFINITION + .id, label: i18n.str`1. Extra criteria risk`, help: i18n.str`Criteria defined by the member.`, // gana_type: "String", @@ -323,7 +324,7 @@ export function VQF_902_4( required: false, }, { - id: "EXTRA_CRITERA_1_RISK_LEVEL" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.EXTRA_CRITERA_1_RISK_LEVEL.id, label: i18n.str`1. Extra criteria level`, // gana_type: "'LOW' | 'MEDIUM' | 'HIGH'", choices: [ @@ -335,7 +336,8 @@ export function VQF_902_4( required: false, }, { - id: "EXTRA_CRITERA_2_RISK_DEFINITION" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.EXTRA_CRITERA_2_RISK_DEFINITION + .id, label: i18n.str`2. Extra criteria risk`, help: i18n.str`Criteria defined by the member.`, // gana_type: "String", @@ -343,7 +345,7 @@ export function VQF_902_4( required: false, }, { - id: "EXTRA_CRITERA_2_RISK_LEVEL" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.EXTRA_CRITERA_2_RISK_LEVEL.id, label: i18n.str`2. Extra criteria level`, // gana_type: "'LOW' | 'MEDIUM' | 'HIGH'", choices: [ @@ -356,7 +358,8 @@ export function VQF_902_4( }, { - id: "RISK_CLASIFICATION_ACCEPTANCE_DATE" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.RISK_CLASIFICATION_ACCEPTANCE_DATE + .id, label: i18n.str`Acceptance date`, help: i18n.str`When the decision of the Senior executive body on the acceptance of a business relationship with increased risk was obtain on.`, // gana_type: "AbsoluteDateTime", @@ -366,7 +369,7 @@ export function VQF_902_4( required: false, }, { - id: "RISK_CLASIFICATION_LEVEL" satisfies keyof TalerFormAttributes.VQF_902_4 as UIHandlerId, + id: TalerFormAttributes.VQF_902_4.RISK_CLASIFICATION_LEVEL.id, label: i18n.str`Risk clasification`, help: i18n.str`Conclusion whether the business relationship is with or without increased risk.`, // gana_type: "'WITH' | 'WITHOUT'", diff --git a/packages/web-util/src/forms/gana/VQF_902_5.ts b/packages/web-util/src/forms/gana/VQF_902_5.ts @@ -15,7 +15,7 @@ export function VQF_902_5( // title: i18n.str`This form was completed by`, // fields: [ // { - // id: "FORM_FILLING_DATE" satisfies keyof TalerFormAttributes.VQF_902_5 as UIHandlerId, + // id: TalerFormAttributes.VQF_902_5.FORM_FILLING_DATE.id, // label: i18n.str`Date`, // // gana_type: "AbsoluteDateTime", // type: "absoluteTimeText", @@ -25,7 +25,7 @@ export function VQF_902_5( // disabled: true, // }, // { - // id: "CUSTOMER_ID" satisfies keyof TalerFormAttributes.VQF_902_5 as UIHandlerId, + // id: TalerFormAttributes.VQF_902_5.CUSTOMER_ID.id, // label: i18n.str`Customer`, // // gana_type: "String", // type: "text", @@ -38,7 +38,7 @@ export function VQF_902_5( title: i18n.str`Business activity`, fields: [ { - id: "BIZREL_PROFESSION" satisfies keyof TalerFormAttributes.VQF_902_5 as UIHandlerId, + id: TalerFormAttributes.VQF_902_5.BIZREL_PROFESSION.id, label: i18n.str`Profession, business activities, etc. (former, current, potentially planned)`, // gana_type: "String", type: "text", @@ -50,7 +50,7 @@ export function VQF_902_5( title: i18n.str`Financial circumstances`, fields: [ { - id: "BIZREL_INCOME" satisfies keyof TalerFormAttributes.VQF_902_5 as UIHandlerId, + id: TalerFormAttributes.VQF_902_5.BIZREL_INCOME.id, label: i18n.str`Income and assets, liabilities (estimated)`, // gana_type: "String", type: "textArea", @@ -62,7 +62,7 @@ export function VQF_902_5( title: i18n.str`Origin of the deposited assets involved`, fields: [ { - id: "BIZREL_ORIGIN_AMOUNT" satisfies keyof TalerFormAttributes.VQF_902_5 as UIHandlerId, + id: TalerFormAttributes.VQF_902_5.BIZREL_ORIGIN_AMOUNT.id, label: i18n.str`Amount`, // gana_type: "Amount", type: "amount", @@ -70,7 +70,7 @@ export function VQF_902_5( required: true, }, { - id: "BIZREL_ORIGIN_CATEGORY" satisfies keyof TalerFormAttributes.VQF_902_5 as UIHandlerId, + id: TalerFormAttributes.VQF_902_5.BIZREL_ORIGIN_CATEGORY.id, label: i18n.str`Category`, // gana_type: "'SAVINGS' | 'OWN_BUSINESS' | 'INHERITANCE' | 'OTHER'", type: "choiceStacked", @@ -87,7 +87,7 @@ export function VQF_902_5( required: true, }, { - id: "BIZREL_ORIGIN_DETAIL" satisfies keyof TalerFormAttributes.VQF_902_5 as UIHandlerId, + id: TalerFormAttributes.VQF_902_5.BIZREL_ORIGIN_DETAIL.id, label: i18n.str`Detail description of the origings/economical background of the assets involved in the business relationship`, // gana_type: "Paragraph", type: "textArea", @@ -99,21 +99,22 @@ export function VQF_902_5( title: i18n.str`Nature and purpose of the business relationship`, fields: [ { - id: "BIZREL_PURPOSE" satisfies keyof TalerFormAttributes.VQF_902_5 as UIHandlerId, + id: TalerFormAttributes.VQF_902_5.BIZREL_PURPOSE.id, label: i18n.str`Purpose of the business relationship`, // gana_type: "String", type: "text", required: false, }, { - id: "BIZREL_DEVELOPMENT" satisfies keyof TalerFormAttributes.VQF_902_5 as UIHandlerId, + id: TalerFormAttributes.VQF_902_5.BIZREL_DEVELOPMENT.id, 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 TalerFormAttributes.VQF_902_5 as UIHandlerId, + id: TalerFormAttributes.VQF_902_5 + .BIZREL_FINANCIAL_BENEFICIARIES_ADDRESS.id, label: i18n.str`Address`, help: i18n.str`Information of the beneficiary`, // gana_type: "String", @@ -121,7 +122,8 @@ export function VQF_902_5( required: false, }, { - id: "BIZREL_FINANCIAL_BENEFICIARIES_BANK_ACCOUNT" satisfies keyof TalerFormAttributes.VQF_902_5 as UIHandlerId, + id: TalerFormAttributes.VQF_902_5 + .BIZREL_FINANCIAL_BENEFICIARIES_BANK_ACCOUNT.id, label: i18n.str`Bank account`, help: i18n.str`Information of the beneficiary`, // gana_type: "String", @@ -129,7 +131,8 @@ export function VQF_902_5( required: false, }, { - id: "BIZREL_FINANCIAL_BENEFICIARIES_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_5 as UIHandlerId, + id: TalerFormAttributes.VQF_902_5 + .BIZREL_FINANCIAL_BENEFICIARIES_FULL_NAME.id, label: i18n.str`Full name`, help: i18n.str`Information of the beneficiary`, // gana_type: "String", @@ -137,7 +140,7 @@ export function VQF_902_5( required: false, }, { - id: "BIZREL_FINANCIAL_VOLUME" satisfies keyof TalerFormAttributes.VQF_902_5 as UIHandlerId, + id: TalerFormAttributes.VQF_902_5.BIZREL_FINANCIAL_VOLUME.id, label: i18n.str`Detail on usual business volume`, // gana_type: "String", type: "text", @@ -149,21 +152,21 @@ export function VQF_902_5( title: i18n.str`Relationship with third parties`, fields: [ { - id: "BIZREL_THIRDPARTY_RELATIONSHIP" satisfies keyof TalerFormAttributes.VQF_902_5 as UIHandlerId, + id: TalerFormAttributes.VQF_902_5.BIZREL_THIRDPARTY_RELATIONSHIP.id, label: i18n.str`Relation of the customer to the benefical owner`, // gana_type: "String", type: "textArea", required: false, }, { - id: "BIZREL_THIRDPARTY_REFERENCES" satisfies keyof TalerFormAttributes.VQF_902_5 as UIHandlerId, + id: TalerFormAttributes.VQF_902_5.BIZREL_THIRDPARTY_REFERENCES.id, label: i18n.str`Introducer / agents / references`, // gana_type: "String", type: "textArea", required: false, }, { - id: "BIZREL_THIRDPARTY_AMLA_FILES" satisfies keyof TalerFormAttributes.VQF_902_5 as UIHandlerId, + id: TalerFormAttributes.VQF_902_5.BIZREL_THIRDPARTY_AMLA_FILES.id, label: i18n.str`Relation to other AMLA-Files`, // gana_type: "String", type: "textArea", @@ -175,7 +178,7 @@ export function VQF_902_5( title: i18n.str`Further information`, fields: [ { - id: "BIZREL_FURTHER_INFO" satisfies keyof TalerFormAttributes.VQF_902_5 as UIHandlerId, + id: TalerFormAttributes.VQF_902_5.BIZREL_FURTHER_INFO.id, label: i18n.str`Other relevant information`, // gana_type: "String", type: "textArea", diff --git a/packages/web-util/src/forms/gana/VQF_902_9.ts b/packages/web-util/src/forms/gana/VQF_902_9.ts @@ -16,7 +16,7 @@ export function VQF_902_9( // title: i18n.str`This form was completed by`, // fields: [ // { - // id: "FORM_FILLING_DATE" satisfies keyof TalerFormAttributes.VQF_902_9 as UIHandlerId, + // id: TalerFormAttributes.VQF_902_9.FORM_FILLING_DATE.id, // label: i18n.str`Date`, // // gana_type: "AbsoluteDateTime", // type: "absoluteTimeText", @@ -26,7 +26,7 @@ export function VQF_902_9( // disabled: true, // }, // { - // id: "CUSTOMER_ID" satisfies keyof TalerFormAttributes.VQF_902_9 as UIHandlerId, + // id: TalerFormAttributes.VQF_902_9.CUSTOMER_ID.id, // label: i18n.str`Customer`, // // gana_type: "String", // type: "text", @@ -39,7 +39,7 @@ export function VQF_902_9( title: i18n.str`Contracting partner`, fields: [ { - id: "IDENTITY_CONTRACTING_PARTNER" satisfies keyof TalerFormAttributes.VQF_902_9 as UIHandlerId, + id: TalerFormAttributes.VQF_902_9.IDENTITY_CONTRACTING_PARTNER.id, label: i18n.str`Contracting partner`, // gana_type: "Paragraph", type: "textArea", @@ -52,28 +52,31 @@ export function VQF_902_9( 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 TalerFormAttributes.VQF_902_9 as UIHandlerId, + id: TalerFormAttributes.VQF_902_9.IDENTITY_LIST.id, label: i18n.str`Persons`, // gana_type: "Form<VQF_902_9_identity>[]", type: "array", - labelFieldId: "IDENTITY_FULL_NAME" as UIHandlerId, + labelFieldId: + TalerFormAttributes.VQF_902_9_identity.IDENTITY_FULL_NAME.id, fields: [ { - id: "IDENTITY_FULL_NAME" satisfies keyof TalerFormAttributes.VQF_902_9_identity as UIHandlerId, + id: TalerFormAttributes.VQF_902_9_identity.IDENTITY_FULL_NAME + .id, label: i18n.str`Full name`, // gana_type: "String", type: "text", required: true, }, { - id: "IDENTITY_DOMICILE" satisfies keyof TalerFormAttributes.VQF_902_9_identity as UIHandlerId, + id: TalerFormAttributes.VQF_902_9_identity.IDENTITY_DOMICILE.id, label: i18n.str`Domicile`, // gana_type: "ResidentialAddress", type: "textArea", required: true, }, { - id: "IDENTITY_BIRTHDATE" satisfies keyof TalerFormAttributes.VQF_902_9_identity as UIHandlerId, + id: TalerFormAttributes.VQF_902_9_identity.IDENTITY_BIRTHDATE + .id, label: i18n.str`Birhtdate`, // gana_type: "AbsoluteDate", type: "isoTimeText", @@ -82,7 +85,8 @@ export function VQF_902_9( required: true, }, { - id: "IDENTITY_NATIONALITY" satisfies keyof TalerFormAttributes.VQF_902_9_identity as UIHandlerId, + id: TalerFormAttributes.VQF_902_9_identity.IDENTITY_NATIONALITY + .id, label: i18n.str`Nationality`, // gana_type: "CountryCode", type: "selectOne", @@ -99,7 +103,7 @@ export function VQF_902_9( 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 TalerFormAttributes.VQF_902_9 as UIHandlerId, + id: TalerFormAttributes.VQF_902_9.SIGNATURE.id, label: i18n.str`Signature`, // gana_type: "AbsoluteDateTime", type: "text", @@ -107,7 +111,7 @@ export function VQF_902_9( disabled: true, }, { - id: "SIGN_DATE" satisfies keyof TalerFormAttributes.VQF_902_9 as UIHandlerId, + id: TalerFormAttributes.VQF_902_9.SIGN_DATE.id, label: i18n.str`Date`, // gana_type: "String", type: "absoluteTimeText", diff --git a/packages/web-util/src/forms/gana/index.stories.ts b/packages/web-util/src/forms/gana/index.stories.ts @@ -1,5 +1,7 @@ export * as a1 from "./GLS_Onboarding.stories.js"; -export * as a2 from "./VQF_902_1.stories.js"; +export * as a21 from "./VQF_902_1_all.stories.js"; +export * as a22 from "./VQF_902_1_customer.stories.js"; +export * as a23 from "./VQF_902_1_officer.stories.js"; export * as a3 from "./VQF_902_4.stories.js"; export * as a4 from "./VQF_902_5.stories.js"; export * as a5 from "./VQF_902_9.stories.js"; diff --git a/packages/web-util/src/forms/gana/taler_form_attributes.ts b/packages/web-util/src/forms/gana/taler_form_attributes.ts @@ -20,1395 +20,2459 @@ Note: the LGPL does not apply to all components of GNU Taler, but it does apply to this file. */ +import { UIHandlerId } from "@gnu-taler/web-util/browser"; -type AbsoluteDateTime = string; -type AbsoluteDate = string; -type ISO8601Date = string; -type CountryCode = string; -type Amount = string; -type ResidentialAddress = string; -type BusinessAddress = string; -type Paragraph = string; -type LangCode = string; -type Email = string; -type Phone = string; -type Hostname = string; -type HttpHostnamePath = string; -type Form<T> = T; +type FormFieldInfo = { + id: UIHandlerId; + description: String; +}; export namespace TalerFormAttributes { - export interface VQF_902_1 { + export const VQF_902_1 = { /** + * Description: * - * Required: false + * GANA Type: BusinessAddress */ - ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE?: - | "TO_THE_CUSTOMER" - | "HOLD_AT_BANK" - | "TO_THE_MEMBER" - | "TO_A_THIRD_PARTY" - | String; + ACCEPTANCE_CORRESPONDENCE_SERVICE_THIRD_PARTY_ADDRESS: { + id: "ACCEPTANCE_CORRESPONDENCE_SERVICE_THIRD_PARTY_ADDRESS" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * Conclusion of the conract - * Required: false + * Description: + * + * GANA Type: String */ - ACCEPTANCE_DATE?: AbsoluteDate; + ACCEPTANCE_CORRESPONDENCE_SERVICE_THIRD_PARTY_FULL_NAME: { + id: "ACCEPTANCE_CORRESPONDENCE_SERVICE_THIRD_PARTY_FULL_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: 'TO_THE_CUSTOMER' | 'HOLD_AT_BANK' | 'TO_THE_MEMBER' | 'TO_A_THIRD_PARTY' */ - ACCEPTANCE_FURTHER_INFO?: String; + ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE: { + id: "ACCEPTANCE_CORRESPONDENCE_SERVICE_TYPE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: Conclusion of the conract * - * Required: false + * GANA Type: AbsoluteDate */ - ACCEPTANCE_LANGUAGE?: LangCode; + ACCEPTANCE_DATE: { + id: "ACCEPTANCE_DATE" as UIHandlerId, + description: "Conclusion of the conract", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: String */ - ACCEPTANCE_METHOD?: - | "FACE_TO_FACE" - | "AUTHENTICATED_COPY" - | "RESIDENTIAL_ADDRESS_VALIDATED"; + ACCEPTANCE_FURTHER_INFO: { + id: "ACCEPTANCE_FURTHER_INFO" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * If the customer is a legal entity. - * Required: true + * Description: + * + * GANA Type: LangCode */ - CUSTOMER_ENTITY_ADDRESS: BusinessAddress; + ACCEPTANCE_LANGUAGE: { + id: "ACCEPTANCE_LANGUAGE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * If the customer is a legal entity. - * Required: true + * Description: + * + * GANA Type: 'FACE_TO_FACE' | 'AUTHENTICATED_COPY' | 'RESIDENTIAL_ADDRESS_VALIDATED' */ - CUSTOMER_ENTITY_COMPANY_NAME: String; + ACCEPTANCE_METHOD: { + id: "ACCEPTANCE_METHOD" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * If the customer is a legal entity. - * Required: false + * Description: If the customer is a legal entity. + * + * GANA Type: BusinessAddress */ - CUSTOMER_ENTITY_CONTACT_PERSON_NAME?: String; + CUSTOMER_ENTITY_ADDRESS: { + id: "CUSTOMER_ENTITY_ADDRESS" as UIHandlerId, + description: "If the customer is a legal entity.", + } as FormFieldInfo, /** - * If the customer is a legal entity. - * Required: false + * Description: If the customer is a legal entity. + * + * GANA Type: String */ - CUSTOMER_ENTITY_EMAIL?: Email; + CUSTOMER_ENTITY_COMPANY_NAME: { + id: "CUSTOMER_ENTITY_COMPANY_NAME" as UIHandlerId, + description: "If the customer is a legal entity.", + } as FormFieldInfo, /** - * Not older than 12 month - * Required: true + * Description: If the customer is a legal entity. + * + * GANA Type: String */ - CUSTOMER_ENTITY_ID: String; + CUSTOMER_ENTITY_CONTACT_PERSON_NAME: { + id: "CUSTOMER_ENTITY_CONTACT_PERSON_NAME" as UIHandlerId, + description: "If the customer is a legal entity.", + } as FormFieldInfo, /** + * Description: If the customer is a legal entity. * - * Required: true + * GANA Type: Email */ - CUSTOMER_ENTITY_ID_COPY: File; + CUSTOMER_ENTITY_EMAIL: { + id: "CUSTOMER_ENTITY_EMAIL" as UIHandlerId, + description: "If the customer is a legal entity.", + } as FormFieldInfo, /** - * If the customer is a legal entity. - * Required: false + * Description: Not older than 12 month + * + * GANA Type: String */ - CUSTOMER_ENTITY_PHONE?: Phone; + CUSTOMER_ENTITY_ID: { + id: "CUSTOMER_ENTITY_ID" as UIHandlerId, + description: "Not older than 12 month", + } as FormFieldInfo, /** - * Customer system ID required to correlate different AML forms. - * Required: true + * Description: + * + * GANA Type: File */ - CUSTOMER_ID: String; + CUSTOMER_ENTITY_ID_COPY: { + id: "CUSTOMER_ENTITY_ID_COPY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * If the customer is a natural person. - * Required: true + * Description: If the customer is a legal entity. + * + * GANA Type: Phone */ - CUSTOMER_NATURAL_BIRTHDATE: AbsoluteDate; + CUSTOMER_ENTITY_PHONE: { + id: "CUSTOMER_ENTITY_PHONE" as UIHandlerId, + description: "If the customer is a legal entity.", + } as FormFieldInfo, /** - * If the customer is a natural person. - * Required: false + * Description: Customer system ID required to correlate different AML forms. + * + * GANA Type: String */ - CUSTOMER_NATURAL_COMPANY_ID?: String; + CUSTOMER_ID: { + id: "CUSTOMER_ID" as UIHandlerId, + description: + "Customer system ID required to correlate different AML forms.", + } as FormFieldInfo, /** - * If the customer is a natural person. - * Required: false + * Description: If the customer is a natural person. + * + * GANA Type: AbsoluteDate */ - CUSTOMER_NATURAL_COMPANY_ID_COPY?: File; + CUSTOMER_NATURAL_BIRTHDATE: { + id: "CUSTOMER_NATURAL_BIRTHDATE" as UIHandlerId, + description: "If the customer is a natural person.", + } as FormFieldInfo, /** - * If the customer is a natural person. - * Required: false + * Description: If the customer is a natural person. + * + * GANA Type: String */ - CUSTOMER_NATURAL_COMPANY_NAME?: String; + CUSTOMER_NATURAL_COMPANY_ID: { + id: "CUSTOMER_NATURAL_COMPANY_ID" as UIHandlerId, + description: "If the customer is a natural person.", + } as FormFieldInfo, /** - * If the customer is a natural person. - * Required: false + * Description: If the customer is a natural person. + * + * GANA Type: File */ - CUSTOMER_NATURAL_EMAIL?: Email; + CUSTOMER_NATURAL_COMPANY_ID_COPY: { + id: "CUSTOMER_NATURAL_COMPANY_ID_COPY" as UIHandlerId, + description: "If the customer is a natural person.", + } as FormFieldInfo, /** + * Description: If the customer is a natural person. * - * Required: true + * GANA Type: String */ - CUSTOMER_NATURAL_FULL_NAME: String; + CUSTOMER_NATURAL_COMPANY_NAME: { + id: "CUSTOMER_NATURAL_COMPANY_NAME" as UIHandlerId, + description: "If the customer is a natural person.", + } as FormFieldInfo, /** - * If the customer is a natural person. - * Required: true + * Description: If the customer is a natural person. + * + * GANA Type: Email */ - CUSTOMER_NATURAL_NATIONALITY: CountryCode; + CUSTOMER_NATURAL_EMAIL: { + id: "CUSTOMER_NATURAL_EMAIL" as UIHandlerId, + description: "If the customer is a natural person.", + } as FormFieldInfo, /** - * If the customer is a natural person. - * Required: true + * Description: + * + * GANA Type: String */ - CUSTOMER_NATURAL_NATIONAL_ID: String; + CUSTOMER_NATURAL_FULL_NAME: { + id: "CUSTOMER_NATURAL_FULL_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * If the customer is a natural person. - * Required: true + * Description: If the customer is a natural person. + * + * GANA Type: CountryCode */ - CUSTOMER_NATURAL_NATIONAL_ID_COPY: File; + CUSTOMER_NATURAL_NATIONALITY: { + id: "CUSTOMER_NATURAL_NATIONALITY" as UIHandlerId, + description: "If the customer is a natural person.", + } as FormFieldInfo, /** - * If the customer is a natural person. - * Required: false + * Description: If the customer is a natural person. + * + * GANA Type: String */ - CUSTOMER_NATURAL_PHONE?: Phone; + CUSTOMER_NATURAL_NATIONAL_ID: { + id: "CUSTOMER_NATURAL_NATIONAL_ID" as UIHandlerId, + description: "If the customer is a natural person.", + } as FormFieldInfo, /** - * If the customer is a natural person. - * Required: false + * Description: If the customer is a natural person. + * + * GANA Type: File */ - CUSTOMER_NATURAL_REGISTERED_OFFICE?: String; + CUSTOMER_NATURAL_NATIONAL_ID_COPY: { + id: "CUSTOMER_NATURAL_NATIONAL_ID_COPY" as UIHandlerId, + description: "If the customer is a natural person.", + } as FormFieldInfo, /** - * If the customer is a natural person. - * Required: true + * Description: If the customer is a natural person. + * + * GANA Type: Phone */ - CUSTOMER_NATURAL_RESIDENTIAL: ResidentialAddress; + CUSTOMER_NATURAL_PHONE: { + id: "CUSTOMER_NATURAL_PHONE" as UIHandlerId, + description: "If the customer is a natural person.", + } as FormFieldInfo, /** - * Establishment of the beneficial owner of the assets and/or contrilling person - * Required: true + * Description: If the customer is a natural person. + * + * GANA Type: String */ - CUSTOMER_TYPE: - | "NATURAL" - | "LEGAL_ENTITY" - | "FOUNDATION" - | "TRUST" - | "LIFE_INSURANCE" - | "OTHER"; + CUSTOMER_NATURAL_REGISTERED_OFFICE: { + id: "CUSTOMER_NATURAL_REGISTERED_OFFICE" as UIHandlerId, + description: "If the customer is a natural person.", + } as FormFieldInfo, /** - * Verification whether the customer, beneficial owners of the assets, controlling persons, authorised representatives or other involved persons are listed on an embargo-/terrorism list (date of verification/result) - * Required: false + * Description: If the customer is a natural person. + * + * GANA Type: ResidentialAddress */ - EMBARGO_TERRORISM_INFO?: Paragraph; + CUSTOMER_NATURAL_RESIDENTIAL: { + id: "CUSTOMER_NATURAL_RESIDENTIAL" as UIHandlerId, + description: "If the customer is a natural person.", + } as FormFieldInfo, /** + * Description: Establishment of the beneficial owner of the assets and/or contrilling person * - * Required: false + * GANA Type: 'NATURAL' | 'OPERATIONAL' | 'FOUNDATION' | 'TRUST' | 'LIFE_INSURANCE' | 'OTHER' */ - ENCLOSURE_BENEFICIAL_OWNER?: Boolean; + CUSTOMER_TYPE: { + id: "CUSTOMER_TYPE" as UIHandlerId, + description: + "Establishment of the beneficial owner of the assets and/or contrilling person", + } as FormFieldInfo, /** + * Description: Verification whether the customer, beneficial owners of the assets, controlling persons, authorised representatives or other involved persons are listed on an embargo-/terrorism list (date of verification/result) * - * Required: false + * GANA Type: Paragraph */ - ENCLOSURE_CUSTOMER_DOCUMENTS?: Boolean; + EMBARGO_TERRORISM_INFO: { + id: "EMBARGO_TERRORISM_INFO" as UIHandlerId, + description: + "Verification whether the customer, beneficial owners of the assets, controlling persons, authorised representatives or other involved persons are listed on an embargo-/terrorism list (date of verification/result)", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: Boolean */ - ENCLOSURE_CUSTOMER_PROFILE?: Boolean; + ENCLOSURE_BENEFICIAL_OWNER: { + id: "ENCLOSURE_BENEFICIAL_OWNER" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: Boolean */ - ENCLOSURE_IDENTIFICATION_DOCUMENTS?: Boolean; + ENCLOSURE_CUSTOMER_DOCUMENTS: { + id: "ENCLOSURE_CUSTOMER_DOCUMENTS" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: Boolean */ - ENCLOSURE_RISK_PROFILE?: Boolean; + ENCLOSURE_CUSTOMER_PROFILE: { + id: "ENCLOSURE_CUSTOMER_PROFILE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * When the form was completed. - * Required: true + * Description: + * + * GANA Type: Boolean */ - FORM_FILLING_DATE: AbsoluteDateTime; + ENCLOSURE_IDENTIFICATION_DOCUMENTS: { + id: "ENCLOSURE_IDENTIFICATION_DOCUMENTS" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * List of founder with the fields below. - * Required: true + * Description: + * + * GANA Type: Boolean */ - FOUNDER_LIST: Form<VQF_902_1_founder>[]; + ENCLOSURE_RISK_PROFILE: { + id: "ENCLOSURE_RISK_PROFILE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * Purpose of service requested - * Required: false + * Description: When the form was completed. + * + * GANA Type: AbsoluteDateTime */ - RELATIONSHIP_PURPOSE?: Paragraph; + FORM_FILLING_DATE: { + id: "FORM_FILLING_DATE" as UIHandlerId, + description: "When the form was completed.", + } as FormFieldInfo, /** + * Description: List of founder with the fields below. * - * Required: false + * GANA Type: Form<VQF_902_1_founder>[] */ - RELATIONSHIP_TYPE?: "MONEY_EXCHANGE" | "MONEY_ASSET_TRANSFER" | String; - } - export interface VQF_902_11 { + FOUNDER_LIST: { + id: "FOUNDER_LIST" as UIHandlerId, + description: "List of founder with the fields below.", + } as FormFieldInfo, /** + * Description: Purpose of service requested * - * Required: true + * GANA Type: Paragraph */ - CONTROLLING_ENTITY_CONTRACTING_PARTNER: Paragraph; + RELATIONSHIP_PURPOSE: { + id: "RELATIONSHIP_PURPOSE" as UIHandlerId, + description: "Purpose of service requested", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: 'MONEY_EXCHANGE' | 'MONEY_ASSET_TRANSFER' | String */ - CONTROLLING_ENTITY_DOMICILE: ResidentialAddress; + RELATIONSHIP_TYPE: { + id: "RELATIONSHIP_TYPE" as UIHandlerId, + description: "", + } as FormFieldInfo, + } as const; + export const VQF_902_11 = { /** + * Description: * - * Required: true + * GANA Type: Paragraph */ - CONTROLLING_ENTITY_FULL_NAME: String; + CONTROLLING_ENTITY_CONTRACTING_PARTNER: { + id: "CONTROLLING_ENTITY_CONTRACTING_PARTNER" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: ResidentialAddress */ - CONTROLLING_ENTITY_LEVEL: "25_MORE_RIGHTS" | "OTHER_WAY" | "DIRECTOR"; + CONTROLLING_ENTITY_DOMICILE: { + id: "CONTROLLING_ENTITY_DOMICILE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * Is a third person the beneficial owner of the assets? - * Required: true + * Description: + * + * GANA Type: String */ - CONTROLLING_ENTITY_THIRD_PERSON: Boolean; + CONTROLLING_ENTITY_FULL_NAME: { + id: "CONTROLLING_ENTITY_FULL_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * Customer system ID required to correlate different AML forms. - * Required: true + * Description: + * + * GANA Type: '25_MORE_RIGHTS' | 'OTHER_WAY' | 'DIRECTOR' */ - CUSTOMER_ID: String; + CONTROLLING_ENTITY_LEVEL: { + id: "CONTROLLING_ENTITY_LEVEL" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * When the form was completed. - * Required: true + * Description: Is a third person the beneficial owner of the assets? + * + * GANA Type: Boolean */ - FORM_FILLING_DATE: AbsoluteDateTime; + CONTROLLING_ENTITY_THIRD_PERSON: { + id: "CONTROLLING_ENTITY_THIRD_PERSON" as UIHandlerId, + description: "Is a third person the beneficial owner of the assets?", + } as FormFieldInfo, /** + * Description: Customer system ID required to correlate different AML forms. * - * Required: true + * GANA Type: String */ - SIGNATURE: String; + CUSTOMER_ID: { + id: "CUSTOMER_ID" as UIHandlerId, + description: + "Customer system ID required to correlate different AML forms.", + } as FormFieldInfo, /** - * Contracing partner signature, - * Required: true + * Description: When the form was completed. + * + * GANA Type: AbsoluteDateTime */ - SIGN_DATE: AbsoluteDateTime; - } - export interface VQF_902_12 { + FORM_FILLING_DATE: { + id: "FORM_FILLING_DATE" as UIHandlerId, + description: "When the form was completed.", + } as FormFieldInfo, /** - * Customer system ID required to correlate different AML forms. - * Required: true + * Description: + * + * GANA Type: String */ - CUSTOMER_ID: String; + SIGNATURE: { + id: "SIGNATURE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * When the form was completed. - * Required: true + * Description: Contracing partner signature, + * + * GANA Type: AbsoluteDateTime */ - FORM_FILLING_DATE: AbsoluteDateTime; + SIGN_DATE: { + id: "SIGN_DATE" as UIHandlerId, + description: "Contracing partner signature,", + } as FormFieldInfo, + } as const; + export const VQF_902_12 = { /** + * Description: Customer system ID required to correlate different AML forms. * - * Required: false + * GANA Type: String */ - FOUNDATION_BENEFICIARY_ADDITION?: Paragraph; + CUSTOMER_ID: { + id: "CUSTOMER_ID" as UIHandlerId, + description: + "Customer system ID required to correlate different AML forms.", + } as FormFieldInfo, /** + * Description: When the form was completed. * - * Required: true + * GANA Type: AbsoluteDateTime */ - FOUNDATION_BENEFICIARY_LIST: Form<VQF_902_12_beneficiary>[]; + FORM_FILLING_DATE: { + id: "FORM_FILLING_DATE" as UIHandlerId, + description: "When the form was completed.", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: Paragraph */ - FOUNDATION_CONTRACTING_PARTNER: Paragraph; + FOUNDATION_BENEFICIARY_ADDITION: { + id: "FOUNDATION_BENEFICIARY_ADDITION" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: Form<VQF_902_12_beneficiary>[] */ - FOUNDATION_DISCRETIONARY: Boolean; + FOUNDATION_BENEFICIARY_LIST: { + id: "FOUNDATION_BENEFICIARY_LIST" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: Paragraph */ - FOUNDATION_FOUNDER_LIST: Form<VQF_902_12_founder>[]; + FOUNDATION_CONTRACTING_PARTNER: { + id: "FOUNDATION_CONTRACTING_PARTNER" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: Boolean */ - FOUNDATION_KNOWN_AS: String; + FOUNDATION_DISCRETIONARY: { + id: "FOUNDATION_DISCRETIONARY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: Form<VQF_902_12_founder>[] */ - FOUNDATION_NAME: String; + FOUNDATION_FOUNDER_LIST: { + id: "FOUNDATION_FOUNDER_LIST" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: String */ - FOUNDATION_PRE_LIST: Form<VQF_902_12_pre>[]; + FOUNDATION_KNOWN_AS: { + id: "FOUNDATION_KNOWN_AS" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: String */ - FOUNDATION_REPRESENTATIVE_LIST: Form<VQF_902_12_representative>[]; + FOUNDATION_NAME: { + id: "FOUNDATION_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: Form<VQF_902_12_pre>[] */ - FOUNDATION_REVOCABLE: Boolean; + FOUNDATION_PRE_LIST: { + id: "FOUNDATION_PRE_LIST" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: Form<VQF_902_12_representative>[] */ - SIGNATURE: String; + FOUNDATION_REPRESENTATIVE_LIST: { + id: "FOUNDATION_REPRESENTATIVE_LIST" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * Contracing partner signature, - * Required: true + * Description: + * + * GANA Type: Boolean */ - SIGN_DATE: AbsoluteDateTime; - } - export interface VQF_902_12_beneficiary { + FOUNDATION_REVOCABLE: { + id: "FOUNDATION_REVOCABLE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: String */ - FOUNDATION_BENEFICIARY_BIRTHDATE?: AbsoluteDate; + SIGNATURE: { + id: "SIGNATURE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: Contracing partner signature, * - * Required: false + * GANA Type: AbsoluteDateTime */ - FOUNDATION_BENEFICIARY_COUNTRY?: CountryCode; + SIGN_DATE: { + id: "SIGN_DATE" as UIHandlerId, + description: "Contracing partner signature,", + } as FormFieldInfo, + } as const; + export const VQF_902_12_beneficiary = { /** + * Description: * - * Required: false + * GANA Type: AbsoluteDate */ - FOUNDATION_BENEFICIARY_DOMICILE?: ResidentialAddress; + FOUNDATION_BENEFICIARY_BIRTHDATE: { + id: "FOUNDATION_BENEFICIARY_BIRTHDATE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: CountryCode */ - FOUNDATION_BENEFICIARY_FULL_NAME?: String; + FOUNDATION_BENEFICIARY_COUNTRY: { + id: "FOUNDATION_BENEFICIARY_COUNTRY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: ResidentialAddress */ - FOUNDATION_BENEFICIARY_NATIONALITY?: CountryCode; + FOUNDATION_BENEFICIARY_DOMICILE: { + id: "FOUNDATION_BENEFICIARY_DOMICILE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: String */ - FOUNDATION_BENEFICIARY_RIGHT_TO_CLAIM?: Boolean; - } - export interface VQF_902_12_founder { + FOUNDATION_BENEFICIARY_FULL_NAME: { + id: "FOUNDATION_BENEFICIARY_FULL_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: CountryCode */ - FOUNDATION_FOUNDER_BIRTHDATE: AbsoluteDate; + FOUNDATION_BENEFICIARY_NATIONALITY: { + id: "FOUNDATION_BENEFICIARY_NATIONALITY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: Boolean */ - FOUNDATION_FOUNDER_DEATHDATE: AbsoluteDate; + FOUNDATION_BENEFICIARY_RIGHT_TO_CLAIM: { + id: "FOUNDATION_BENEFICIARY_RIGHT_TO_CLAIM" as UIHandlerId, + description: "", + } as FormFieldInfo, + } as const; + export const VQF_902_12_founder = { /** + * Description: * - * Required: true + * GANA Type: AbsoluteDate */ - FOUNDATION_FOUNDER_DOMICILE: ResidentialAddress; + FOUNDATION_FOUNDER_BIRTHDATE: { + id: "FOUNDATION_FOUNDER_BIRTHDATE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: AbsoluteDate */ - FOUNDATION_FOUNDER_FULL_NAME: String; + FOUNDATION_FOUNDER_DEATHDATE: { + id: "FOUNDATION_FOUNDER_DEATHDATE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: ResidentialAddress */ - FOUNDATION_FOUNDER_NATIONALITY: CountryCode; + FOUNDATION_FOUNDER_DOMICILE: { + id: "FOUNDATION_FOUNDER_DOMICILE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: String */ - FOUNDATION_FOUNDER_RIGHT_TO_REVOKE: Boolean; - } - export interface VQF_902_12_pre { + FOUNDATION_FOUNDER_FULL_NAME: { + id: "FOUNDATION_FOUNDER_FULL_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: CountryCode */ - FOUNDATION_PRE_BIRTHDATE: AbsoluteDate; + FOUNDATION_FOUNDER_NATIONALITY: { + id: "FOUNDATION_FOUNDER_NATIONALITY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: Boolean */ - FOUNDATION_PRE_COUNTRY: CountryCode; + FOUNDATION_FOUNDER_RIGHT_TO_REVOKE: { + id: "FOUNDATION_FOUNDER_RIGHT_TO_REVOKE" as UIHandlerId, + description: "", + } as FormFieldInfo, + } as const; + export const VQF_902_12_pre = { /** + * Description: * - * Required: true + * GANA Type: AbsoluteDate */ - FOUNDATION_PRE_DEATHDATE: AbsoluteDate; + FOUNDATION_PRE_BIRTHDATE: { + id: "FOUNDATION_PRE_BIRTHDATE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: CountryCode */ - FOUNDATION_PRE_DOMICILE: ResidentialAddress; + FOUNDATION_PRE_COUNTRY: { + id: "FOUNDATION_PRE_COUNTRY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: AbsoluteDate */ - FOUNDATION_PRE_FULL_NAME: String; + FOUNDATION_PRE_DEATHDATE: { + id: "FOUNDATION_PRE_DEATHDATE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: ResidentialAddress */ - FOUNDATION_PRE_NATIONALITY: CountryCode; - } - export interface VQF_902_12_representative { + FOUNDATION_PRE_DOMICILE: { + id: "FOUNDATION_PRE_DOMICILE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: String */ - FOUNDATION_REPRESENTATIVE_BIRTHDATE: AbsoluteDate; + FOUNDATION_PRE_FULL_NAME: { + id: "FOUNDATION_PRE_FULL_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: CountryCode */ - FOUNDATION_REPRESENTATIVE_COUNTRY: CountryCode; + FOUNDATION_PRE_NATIONALITY: { + id: "FOUNDATION_PRE_NATIONALITY" as UIHandlerId, + description: "", + } as FormFieldInfo, + } as const; + export const VQF_902_12_representative = { /** + * Description: * - * Required: true + * GANA Type: AbsoluteDate */ - FOUNDATION_REPRESENTATIVE_DOMICILE: ResidentialAddress; + FOUNDATION_REPRESENTATIVE_BIRTHDATE: { + id: "FOUNDATION_REPRESENTATIVE_BIRTHDATE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: CountryCode */ - FOUNDATION_REPRESENTATIVE_FULL_NAME: String; + FOUNDATION_REPRESENTATIVE_COUNTRY: { + id: "FOUNDATION_REPRESENTATIVE_COUNTRY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: ResidentialAddress */ - FOUNDATION_REPRESENTATIVE_NATIONALITY: CountryCode; + FOUNDATION_REPRESENTATIVE_DOMICILE: { + id: "FOUNDATION_REPRESENTATIVE_DOMICILE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: String */ - FOUNDATION_REPRESENTATIVE_RIGHT_TO_REVOKE: Boolean; - } - export interface VQF_902_13 { + FOUNDATION_REPRESENTATIVE_FULL_NAME: { + id: "FOUNDATION_REPRESENTATIVE_FULL_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * Customer system ID required to correlate different AML forms. - * Required: true + * Description: + * + * GANA Type: CountryCode */ - CUSTOMER_ID: String; + FOUNDATION_REPRESENTATIVE_NATIONALITY: { + id: "FOUNDATION_REPRESENTATIVE_NATIONALITY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * When the form was completed. - * Required: true + * Description: + * + * GANA Type: Boolean */ - FORM_FILLING_DATE: AbsoluteDateTime; + FOUNDATION_REPRESENTATIVE_RIGHT_TO_REVOKE: { + id: "FOUNDATION_REPRESENTATIVE_RIGHT_TO_REVOKE" as UIHandlerId, + description: "", + } as FormFieldInfo, + } as const; + export const VQF_902_13 = { /** + * Description: Customer system ID required to correlate different AML forms. * - * Required: true + * GANA Type: String */ - SIGNATURE: String; + CUSTOMER_ID: { + id: "CUSTOMER_ID" as UIHandlerId, + description: + "Customer system ID required to correlate different AML forms.", + } as FormFieldInfo, /** - * Contracing partner signature, - * Required: true + * Description: When the form was completed. + * + * GANA Type: AbsoluteDateTime */ - SIGN_DATE: AbsoluteDateTime; + FORM_FILLING_DATE: { + id: "FORM_FILLING_DATE" as UIHandlerId, + description: "When the form was completed.", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: String */ - TRUST_BENEFICIARY_LIST: Form<VQF_902_13_beneficiary>[]; + SIGNATURE: { + id: "SIGNATURE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: Contracing partner signature, * - * Required: true + * GANA Type: AbsoluteDateTime */ - TRUST_CONTRACTING_PARTNER: Paragraph; + SIGN_DATE: { + id: "SIGN_DATE" as UIHandlerId, + description: "Contracing partner signature,", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: Form<VQF_902_13_beneficiary>[] */ - TRUST_DISCRETIONARY: Boolean; + TRUST_BENEFICIARY_LIST: { + id: "TRUST_BENEFICIARY_LIST" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: Paragraph */ - TRUST_KNOWN_AS: String; + TRUST_CONTRACTING_PARTNER: { + id: "TRUST_CONTRACTING_PARTNER" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: Boolean */ - TRUST_NAME: String; + TRUST_DISCRETIONARY: { + id: "TRUST_DISCRETIONARY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: String */ - TRUST_PRE_LIST: Form<VQF_902_13_pre>[]; + TRUST_KNOWN_AS: { + id: "TRUST_KNOWN_AS" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: String */ - TRUST_PROTECTOR_LIST: Form<VQF_902_13_protector>[]; + TRUST_NAME: { + id: "TRUST_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: Form<VQF_902_13_pre>[] */ - TRUST_REVOCABLE: Boolean; + TRUST_PRE_LIST: { + id: "TRUST_PRE_LIST" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: Form<VQF_902_13_protector>[] */ - TRUST_SETTLOR_LIST: Form<VQF_902_13_settlor>[]; - } - export interface VQF_902_13_beneficiary { + TRUST_PROTECTOR_LIST: { + id: "TRUST_PROTECTOR_LIST" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: Boolean */ - TRUST_BENEFICIARY_ADDITION?: Paragraph; + TRUST_REVOCABLE: { + id: "TRUST_REVOCABLE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: Form<VQF_902_13_settlor>[] */ - TRUST_BENEFICIARY_BIRTHDATE?: AbsoluteDate; + TRUST_SETTLOR_LIST: { + id: "TRUST_SETTLOR_LIST" as UIHandlerId, + description: "", + } as FormFieldInfo, + } as const; + export const VQF_902_13_beneficiary = { /** + * Description: * - * Required: false + * GANA Type: Paragraph */ - TRUST_BENEFICIARY_COUNTRY?: CountryCode; + TRUST_BENEFICIARY_ADDITION: { + id: "TRUST_BENEFICIARY_ADDITION" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: AbsoluteDate */ - TRUST_BENEFICIARY_DOMICILE?: ResidentialAddress; + TRUST_BENEFICIARY_BIRTHDATE: { + id: "TRUST_BENEFICIARY_BIRTHDATE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: CountryCode */ - TRUST_BENEFICIARY_FULL_NAME?: String; + TRUST_BENEFICIARY_COUNTRY: { + id: "TRUST_BENEFICIARY_COUNTRY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: ResidentialAddress */ - TRUST_BENEFICIARY_NATIONALITY?: CountryCode; + TRUST_BENEFICIARY_DOMICILE: { + id: "TRUST_BENEFICIARY_DOMICILE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: String */ - TRUST_BENEFICIARY_RIGHT_TO_CLAIM?: Boolean; - } - export interface VQF_902_13_further { + TRUST_BENEFICIARY_FULL_NAME: { + id: "TRUST_BENEFICIARY_FULL_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: CountryCode */ - TRUST_FURTHER_BIRTHDATE?: AbsoluteDate; + TRUST_BENEFICIARY_NATIONALITY: { + id: "TRUST_BENEFICIARY_NATIONALITY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: Boolean */ - TRUST_FURTHER_COUNTRY?: CountryCode; + TRUST_BENEFICIARY_RIGHT_TO_CLAIM: { + id: "TRUST_BENEFICIARY_RIGHT_TO_CLAIM" as UIHandlerId, + description: "", + } as FormFieldInfo, + } as const; + export const VQF_902_13_further = { /** + * Description: * - * Required: false + * GANA Type: AbsoluteDate */ - TRUST_FURTHER_DOMICILE?: ResidentialAddress; + TRUST_FURTHER_BIRTHDATE: { + id: "TRUST_FURTHER_BIRTHDATE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: CountryCode */ - TRUST_FURTHER_FULL_NAME?: String; + TRUST_FURTHER_COUNTRY: { + id: "TRUST_FURTHER_COUNTRY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: ResidentialAddress */ - TRUST_FURTHER_LIST: Form<VQF_902_13_further>[]; + TRUST_FURTHER_DOMICILE: { + id: "TRUST_FURTHER_DOMICILE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: String */ - TRUST_FURTHER_NATIONALITY?: CountryCode; + TRUST_FURTHER_FULL_NAME: { + id: "TRUST_FURTHER_FULL_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: Form<VQF_902_13_further>[] */ - TRUST_FURTHER_RIGHT_TO_REVOKE?: Boolean; - } - export interface VQF_902_13_pre { + TRUST_FURTHER_LIST: { + id: "TRUST_FURTHER_LIST" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: CountryCode */ - TRUST_PRE_BIRTHDATE?: AbsoluteDate; + TRUST_FURTHER_NATIONALITY: { + id: "TRUST_FURTHER_NATIONALITY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: Boolean */ - TRUST_PRE_COUNTRY?: CountryCode; + TRUST_FURTHER_RIGHT_TO_REVOKE: { + id: "TRUST_FURTHER_RIGHT_TO_REVOKE" as UIHandlerId, + description: "", + } as FormFieldInfo, + } as const; + export const VQF_902_13_pre = { /** + * Description: * - * Required: false + * GANA Type: AbsoluteDate */ - TRUST_PRE_DEATHDATE?: AbsoluteDate; + TRUST_PRE_BIRTHDATE: { + id: "TRUST_PRE_BIRTHDATE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: CountryCode */ - TRUST_PRE_DOMICILE?: ResidentialAddress; + TRUST_PRE_COUNTRY: { + id: "TRUST_PRE_COUNTRY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: AbsoluteDate */ - TRUST_PRE_FULL_NAME?: String; + TRUST_PRE_DEATHDATE: { + id: "TRUST_PRE_DEATHDATE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: ResidentialAddress */ - TRUST_PRE_NATIONALITY?: CountryCode; - } - export interface VQF_902_13_protector { + TRUST_PRE_DOMICILE: { + id: "TRUST_PRE_DOMICILE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: String */ - TRUST_PROTECTOR_BIRTHDATE?: AbsoluteDate; + TRUST_PRE_FULL_NAME: { + id: "TRUST_PRE_FULL_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: CountryCode */ - TRUST_PROTECTOR_COUNTRY?: CountryCode; + TRUST_PRE_NATIONALITY: { + id: "TRUST_PRE_NATIONALITY" as UIHandlerId, + description: "", + } as FormFieldInfo, + } as const; + export const VQF_902_13_protector = { /** + * Description: * - * Required: false + * GANA Type: AbsoluteDate */ - TRUST_PROTECTOR_DOMICILE?: ResidentialAddress; + TRUST_PROTECTOR_BIRTHDATE: { + id: "TRUST_PROTECTOR_BIRTHDATE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: CountryCode */ - TRUST_PROTECTOR_FULL_NAME?: String; + TRUST_PROTECTOR_COUNTRY: { + id: "TRUST_PROTECTOR_COUNTRY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: ResidentialAddress */ - TRUST_PROTECTOR_NATIONALITY?: CountryCode; + TRUST_PROTECTOR_DOMICILE: { + id: "TRUST_PROTECTOR_DOMICILE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: String */ - TRUST_PROTECTOR_RIGHT_TO_REVOKE?: Boolean; - } - export interface VQF_902_13_settlor { + TRUST_PROTECTOR_FULL_NAME: { + id: "TRUST_PROTECTOR_FULL_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: CountryCode */ - TRUST_SETTLOR_BIRTHDATE: AbsoluteDate; + TRUST_PROTECTOR_NATIONALITY: { + id: "TRUST_PROTECTOR_NATIONALITY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: Boolean */ - TRUST_SETTLOR_DEATHDATE: AbsoluteDate; + TRUST_PROTECTOR_RIGHT_TO_REVOKE: { + id: "TRUST_PROTECTOR_RIGHT_TO_REVOKE" as UIHandlerId, + description: "", + } as FormFieldInfo, + } as const; + export const VQF_902_13_settlor = { /** + * Description: * - * Required: true + * GANA Type: AbsoluteDate */ - TRUST_SETTLOR_DOMICILE: ResidentialAddress; + TRUST_SETTLOR_BIRTHDATE: { + id: "TRUST_SETTLOR_BIRTHDATE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: AbsoluteDate */ - TRUST_SETTLOR_FULL_NAME: String; + TRUST_SETTLOR_DEATHDATE: { + id: "TRUST_SETTLOR_DEATHDATE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: ResidentialAddress */ - TRUST_SETTLOR_NATIONALITY: CountryCode; + TRUST_SETTLOR_DOMICILE: { + id: "TRUST_SETTLOR_DOMICILE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: String */ - TRUST_SETTLOR_RIGHT_TO_REVOKE: Boolean; - } - export interface VQF_902_14 { + TRUST_SETTLOR_FULL_NAME: { + id: "TRUST_SETTLOR_FULL_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * Customer system ID required to correlate different AML forms. - * Required: true + * Description: + * + * GANA Type: CountryCode */ - CUSTOMER_ID: String; + TRUST_SETTLOR_NATIONALITY: { + id: "TRUST_SETTLOR_NATIONALITY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * When the form was completed. - * Required: true + * Description: + * + * GANA Type: Boolean */ - FORM_FILLING_DATE: AbsoluteDateTime; + TRUST_SETTLOR_RIGHT_TO_REVOKE: { + id: "TRUST_SETTLOR_RIGHT_TO_REVOKE" as UIHandlerId, + description: "", + } as FormFieldInfo, + } as const; + export const VQF_902_14 = { /** - * Gathered or consulted documents - * Required: true + * Description: Customer system ID required to correlate different AML forms. + * + * GANA Type: String */ - INCRISK_DOCUMENTS: File[]; + CUSTOMER_ID: { + id: "CUSTOMER_ID" as UIHandlerId, + description: + "Customer system ID required to correlate different AML forms.", + } as FormFieldInfo, /** + * Description: When the form was completed. * - * Required: true + * GANA Type: AbsoluteDateTime */ - INCRISK_MEANS: "GATHERING" | "CONSULTATION" | "ENQUIRIES" | String; + FORM_FILLING_DATE: { + id: "FORM_FILLING_DATE" as UIHandlerId, + description: "When the form was completed.", + } as FormFieldInfo, /** - * Description of the circumstances/transactions, which triggered the special clarifications - * Required: true + * Description: Gathered or consulted documents + * + * GANA Type: File[] */ - INCRISK_REASON: String; + INCRISK_DOCUMENTS: { + id: "INCRISK_DOCUMENTS" as UIHandlerId, + description: "Gathered or consulted documents", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: 'GATHERING' | 'CONSULTATION' | 'ENQUIRIES' | String */ - INCRISK_RESULT: - | "NO_SUSPICION" - | "REASONABLE_SUSPICION" - | "SIMPLE_SUSPICION"; + INCRISK_MEANS: { + id: "INCRISK_MEANS" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: Description of the circumstances/transactions, which triggered the special clarifications * - * Required: true + * GANA Type: String */ - INCRISK_SUMMARY: Paragraph; - } - export interface VQF_902_15 { + INCRISK_REASON: { + id: "INCRISK_REASON" as UIHandlerId, + description: + "Description of the circumstances/transactions, which triggered the special clarifications", + } as FormFieldInfo, /** - * Customer system ID required to correlate different AML forms. - * Required: true + * Description: + * + * GANA Type: 'NO_SUSPICION' | 'REASONABLE_SUSPICION' | 'SIMPLE_SUSPICION' */ - CUSTOMER_ID: String; + INCRISK_RESULT: { + id: "INCRISK_RESULT" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * When the form was completed. - * Required: true + * Description: + * + * GANA Type: Paragraph */ - FORM_FILLING_DATE: AbsoluteDateTime; + INCRISK_SUMMARY: { + id: "INCRISK_SUMMARY" as UIHandlerId, + description: "", + } as FormFieldInfo, + } as const; + export const VQF_902_15 = { /** + * Description: Customer system ID required to correlate different AML forms. * - * Required: true + * GANA Type: String */ - INSURANCE_CONTRACTING_PARTNER: Paragraph; + CUSTOMER_ID: { + id: "CUSTOMER_ID" as UIHandlerId, + description: + "Customer system ID required to correlate different AML forms.", + } as FormFieldInfo, /** + * Description: When the form was completed. * - * Required: true + * GANA Type: AbsoluteDateTime */ - INSURANCE_HOLDER_BIRTHDATE: AbsoluteDate; + FORM_FILLING_DATE: { + id: "FORM_FILLING_DATE" as UIHandlerId, + description: "When the form was completed.", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: Paragraph */ - INSURANCE_HOLDER_DOMICILE: ResidentialAddress; + INSURANCE_CONTRACTING_PARTNER: { + id: "INSURANCE_CONTRACTING_PARTNER" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * The beneficial owners of the assets involved in the business relationship. - * Required: false + * Description: + * + * GANA Type: AbsoluteDate */ - INSURANCE_HOLDER_FULL_NAME?: String; + INSURANCE_HOLDER_BIRTHDATE: { + id: "INSURANCE_HOLDER_BIRTHDATE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: ResidentialAddress */ - INSURANCE_HOLDER_NATIONALITY: CountryCode; + INSURANCE_HOLDER_DOMICILE: { + id: "INSURANCE_HOLDER_DOMICILE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: The beneficial owners of the assets involved in the business relationship. * - * Required: true + * GANA Type: String */ - INSURANCE_PAYER_BIRTHDATE: AbsoluteDate; + INSURANCE_HOLDER_FULL_NAME: { + id: "INSURANCE_HOLDER_FULL_NAME" as UIHandlerId, + description: + "The beneficial owners of the assets involved in the business relationship.", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: CountryCode */ - INSURANCE_PAYER_DOMICILE: ResidentialAddress; + INSURANCE_HOLDER_NATIONALITY: { + id: "INSURANCE_HOLDER_NATIONALITY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * The beneficial owners of the assets involved in the business relationship. - * Required: false + * Description: + * + * GANA Type: AbsoluteDate */ - INSURANCE_PAYER_FULL_NAME?: String; + INSURANCE_PAYER_BIRTHDATE: { + id: "INSURANCE_PAYER_BIRTHDATE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: ResidentialAddress */ - INSURANCE_PAYER_NATIONALITY: CountryCode; + INSURANCE_PAYER_DOMICILE: { + id: "INSURANCE_PAYER_DOMICILE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * Name or number of the contractual relationship between the contracting party and the financial intermediary - * Required: true + * Description: The beneficial owners of the assets involved in the business relationship. + * + * GANA Type: String */ - INSURANCE_RELATIONSHIP_NAME: String; + INSURANCE_PAYER_FULL_NAME: { + id: "INSURANCE_PAYER_FULL_NAME" as UIHandlerId, + description: + "The beneficial owners of the assets involved in the business relationship.", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: CountryCode */ - INSURANCE_RELATIONSHIP_POLICY: String; + INSURANCE_PAYER_NATIONALITY: { + id: "INSURANCE_PAYER_NATIONALITY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: Name or number of the contractual relationship between the contracting party and the financial intermediary * - * Required: true + * GANA Type: String */ - SIGNATURE: String; + INSURANCE_RELATIONSHIP_NAME: { + id: "INSURANCE_RELATIONSHIP_NAME" as UIHandlerId, + description: + "Name or number of the contractual relationship between the contracting party and the financial intermediary", + } as FormFieldInfo, /** - * Contracing partner signature, - * Required: true + * Description: + * + * GANA Type: String */ - SIGN_DATE: AbsoluteDateTime; - } - export interface VQF_902_1_founder { + INSURANCE_RELATIONSHIP_POLICY: { + id: "INSURANCE_RELATIONSHIP_POLICY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * Signatory of representation - * Required: true + * Description: + * + * GANA Type: String */ - FOUNDER_AUTHORIZATION_TYPE: String; + SIGNATURE: { + id: "SIGNATURE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: Contracing partner signature, * - * Required: true + * GANA Type: AbsoluteDateTime */ - FOUNDER_BIRTHDATE: AbsoluteDate; + SIGN_DATE: { + id: "SIGN_DATE" as UIHandlerId, + description: "Contracing partner signature,", + } as FormFieldInfo, + } as const; + export const VQF_902_1_founder = { /** + * Description: Signatory of representation * - * Required: true + * GANA Type: String */ - FOUNDER_FULL_NAME: String; + FOUNDER_AUTHORIZATION_TYPE: { + id: "FOUNDER_AUTHORIZATION_TYPE" as UIHandlerId, + description: "Signatory of representation", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: AbsoluteDate */ - FOUNDER_NATIONALITY: CountryCode; + FOUNDER_BIRTHDATE: { + id: "FOUNDER_BIRTHDATE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: String */ - FOUNDER_NATIONAL_COPY: File; + FOUNDER_FULL_NAME: { + id: "FOUNDER_FULL_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: CountryCode */ - FOUNDER_NATIONAL_ID: String; + FOUNDER_NATIONALITY: { + id: "FOUNDER_NATIONALITY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: File */ - FOUNDER_POWER_OF_ATTORNEY: "CR" | "MANDATE" | "OTHER" | String; + FOUNDER_NATIONAL_COPY: { + id: "FOUNDER_NATIONAL_COPY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: String */ - FOUNDER_RESIDENTIAL_ADDRESS: ResidentialAddress; - } - export interface VQF_902_4 { + FOUNDER_NATIONAL_ID: { + id: "FOUNDER_NATIONAL_ID" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * Based on 902.4.1 country list - * Required: false + * Description: + * + * GANA Type: 'CR' | 'MANDATE' | String */ - CONTACT_RISK_LEVEL?: "LOW" | "MEDIUM" | "HIGH"; + FOUNDER_POWER_OF_ATTORNEY: { + id: "FOUNDER_POWER_OF_ATTORNEY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * Based on 902.4.1 country list - * Required: false + * Description: + * + * GANA Type: ResidentialAddress */ - COUNTRY_RISK_BUSINESS_LEVEL?: "LOW" | "MEDIUM" | "HIGH"; + FOUNDER_RESIDENTIAL_ADDRESS: { + id: "FOUNDER_RESIDENTIAL_ADDRESS" as UIHandlerId, + description: "", + } as FormFieldInfo, + } as const; + export const VQF_902_4 = { /** + * Description: Based on 902.4.1 country list * - * Required: false + * GANA Type: 'LOW' | 'MEDIUM' | 'HIGH' */ - COUNTRY_RISK_BUSINESS_TYPE?: "CUSTOMER" | "OWNER"; + CONTACT_RISK_LEVEL: { + id: "CONTACT_RISK_LEVEL" as UIHandlerId, + description: "Based on 902.4.1 country list", + } as FormFieldInfo, /** - * Based on 902.4.1 country list - * Required: false + * Description: Based on 902.4.1 country list + * + * GANA Type: 'LOW' | 'MEDIUM' | 'HIGH' */ - COUNTRY_RISK_NATIONALITY_LEVEL?: "LOW" | "MEDIUM" | "HIGH"; + COUNTRY_RISK_BUSINESS_LEVEL: { + id: "COUNTRY_RISK_BUSINESS_LEVEL" as UIHandlerId, + description: "Based on 902.4.1 country list", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: 'CUSTOMER' | 'OWNER' */ - COUNTRY_RISK_NATIONALITY_TYPE?: - | "NATIONALITY_CUSTOMER" - | "NATIONALITY_OWNER" - | "DOMICILE_CUSTOMER" - | "DOMICILE_OWNER" - | "DOMICILE_CONTROLLING"; + COUNTRY_RISK_BUSINESS_TYPE: { + id: "COUNTRY_RISK_BUSINESS_TYPE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * Based on 902.4.1 country list - * Required: false + * Description: Based on 902.4.1 country list + * + * GANA Type: 'LOW' | 'MEDIUM' | 'HIGH' */ - COUNTRY_RISK_PAYMENTS_LEVEL?: "LOW" | "MEDIUM" | "HIGH"; + COUNTRY_RISK_NATIONALITY_LEVEL: { + id: "COUNTRY_RISK_NATIONALITY_LEVEL" as UIHandlerId, + description: "Based on 902.4.1 country list", + } as FormFieldInfo, /** - * Customer system ID required to correlate different AML forms. - * Required: true + * Description: + * + * GANA Type: 'NATIONALITY_CUSTOMER' | 'NATIONALITY_OWNER' | 'DOMICILE_CUSTOMER' | 'DOMICILE_OWNER' | 'DOMICILE_CONTROLLING' */ - CUSTOMER_ID: String; + COUNTRY_RISK_NATIONALITY_TYPE: { + id: "COUNTRY_RISK_NATIONALITY_TYPE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** - * Criteria description - * Required: false + * Description: Based on 902.4.1 country list + * + * GANA Type: 'LOW' | 'MEDIUM' | 'HIGH' */ - EXTRA_CRITERA_1_RISK_DEFINITION?: String; + COUNTRY_RISK_PAYMENTS_LEVEL: { + id: "COUNTRY_RISK_PAYMENTS_LEVEL" as UIHandlerId, + description: "Based on 902.4.1 country list", + } as FormFieldInfo, /** - * Based on 902.4.1 country list - * Required: false + * Description: Customer system ID required to correlate different AML forms. + * + * GANA Type: String + */ + CUSTOMER_ID: { + id: "CUSTOMER_ID" as UIHandlerId, + description: + "Customer system ID required to correlate different AML forms.", + } as FormFieldInfo, + /** + * Description: Criteria description + * + * GANA Type: String + */ + EXTRA_CRITERA_1_RISK_DEFINITION: { + id: "EXTRA_CRITERA_1_RISK_DEFINITION" as UIHandlerId, + description: "Criteria description", + } as FormFieldInfo, + /** + * Description: Based on 902.4.1 country list + * + * GANA Type: 'LOW' | 'MEDIUM' | 'HIGH' + */ + EXTRA_CRITERA_1_RISK_LEVEL: { + id: "EXTRA_CRITERA_1_RISK_LEVEL" as UIHandlerId, + description: "Based on 902.4.1 country list", + } as FormFieldInfo, + /** + * Description: Criteria description + * + * GANA Type: String */ - EXTRA_CRITERA_1_RISK_LEVEL?: "LOW" | "MEDIUM" | "HIGH"; + EXTRA_CRITERA_2_RISK_DEFINITION: { + id: "EXTRA_CRITERA_2_RISK_DEFINITION" as UIHandlerId, + description: "Criteria description", + } as FormFieldInfo, /** - * Criteria description - * Required: false + * Description: Based on 902.4.1 country list + * + * GANA Type: 'LOW' | 'MEDIUM' | 'HIGH' */ - EXTRA_CRITERA_2_RISK_DEFINITION?: String; + EXTRA_CRITERA_2_RISK_LEVEL: { + id: "EXTRA_CRITERA_2_RISK_LEVEL" as UIHandlerId, + description: "Based on 902.4.1 country list", + } as FormFieldInfo, /** - * Based on 902.4.1 country list - * Required: false + * Description: When the form was completed. + * + * GANA Type: AbsoluteDateTime */ - EXTRA_CRITERA_2_RISK_LEVEL?: "LOW" | "MEDIUM" | "HIGH"; + FORM_FILLING_DATE: { + id: "FORM_FILLING_DATE" as UIHandlerId, + description: "When the form was completed.", + } as FormFieldInfo, /** - * When the form was completed. - * Required: true + * Description: The decision of the Senior executive body on the acceptance of a business relationsip was obtained on ___ + * + * GANA Type: AbsoluteDateTime */ - FORM_FILLING_DATE: AbsoluteDateTime; + HIGH_RISK_ACCEPTANCE_DATE: { + id: "HIGH_RISK_ACCEPTANCE_DATE" as UIHandlerId, + description: + "The decision of the Senior executive body on the acceptance of a business relationsip was obtained on ___", + } as FormFieldInfo, /** - * The decision of the Senior executive body on the acceptance of a business relationsip was obtained on ___ - * Required: false + * Description: True if the person is in a country for which FATF requires incresed dilegence. + * + * GANA Type: Boolean */ - HIGH_RISK_ACCEPTANCE_DATE?: AbsoluteDateTime; + HIGH_RISK_COUNTRY: { + id: "HIGH_RISK_COUNTRY" as UIHandlerId, + description: + "True if the person is in a country for which FATF requires incresed dilegence.", + } as FormFieldInfo, /** - * True if the person is in a country for which FATF requires incresed dilegence. - * Required: true + * Description: + * + * GANA Type: 'TRANSPARENT' | 'HIGH_CASH_TRANSACTION' | 'NOT_WELL_KNOWN' | 'HIGH_RISK_TRADE' | 'UNKNOWN_INDUSTRY' */ - HIGH_RISK_COUNTRY: Boolean; + INDUSTRY_RISK_LEVEL: { + id: "INDUSTRY_RISK_LEVEL" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: 'CUSTOMER' | 'OWNER' */ - INDUSTRY_RISK_LEVEL?: - | "TRANSPARENT" - | "HIGH_CASH_TRANSACTION" - | "NOT_WELL_KNOWN" - | "HIGH_RISK_TRADE" - | "UNKNOWN_INDUSTRY"; + INDUSTRY_RISK_TYPE: { + id: "INDUSTRY_RISK_TYPE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: The decision of the Senior executive body on the acceptance of a business relationsip was obtained on ___ * - * Required: false + * GANA Type: AbsoluteDateTime */ - INDUSTRY_RISK_TYPE?: "CUSTOMER" | "OWNER"; + PEP_ACCEPTANCE_DATE: { + id: "PEP_ACCEPTANCE_DATE" as UIHandlerId, + description: + "The decision of the Senior executive body on the acceptance of a business relationsip was obtained on ___", + } as FormFieldInfo, /** - * The decision of the Senior executive body on the acceptance of a business relationsip was obtained on ___ - * Required: false + * Description: True if the person is a PEP defined by 'Art 7 lit. g numeral 2' + * + * GANA Type: Boolean */ - PEP_ACCEPTANCE_DATE?: AbsoluteDateTime; + PEP_DOMESTIC: { + id: "PEP_DOMESTIC" as UIHandlerId, + description: + "True if the person is a PEP defined by 'Art 7 lit. g numeral 2'", + } as FormFieldInfo, /** - * True if the person is a PEP defined by 'Art 7 lit. g numeral 2' - * Required: true + * Description: True if the person is a PEP defined by 'Art 7 lit. g numeral 1' + * + * GANA Type: Boolean */ - PEP_DOMESTIC: Boolean; + PEP_FOREIGN: { + id: "PEP_FOREIGN" as UIHandlerId, + description: + "True if the person is a PEP defined by 'Art 7 lit. g numeral 1'", + } as FormFieldInfo, /** - * True if the person is a PEP defined by 'Art 7 lit. g numeral 1' - * Required: true + * Description: True if the person is a PEP defined by 'Art 7 lit. g numeral 3' + * + * GANA Type: Boolean */ - PEP_FOREIGN: Boolean; + PEP_INTERNATIONAL_ORGANIZATION: { + id: "PEP_INTERNATIONAL_ORGANIZATION" as UIHandlerId, + description: + "True if the person is a PEP defined by 'Art 7 lit. g numeral 3'", + } as FormFieldInfo, /** - * True if the person is a PEP defined by 'Art 7 lit. g numeral 3' - * Required: true + * Description: + * + * GANA Type: 'EASY' | 'SOPHISTICATED' | 'OFFSHORE' | 'COMPLEX_STRUCTURE' | 'LARGE_NUMBER_OF_ACCOUNTS' | 'COMPLEX_SERVICE' | 'FREQ_TRANS_WITH_HIGH_RISK' */ - PEP_INTERNATIONAL_ORGANIZATION: Boolean; + PRODUCT_RISK_LEVEL: { + id: "PRODUCT_RISK_LEVEL" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: The decision of the Senior executive body on the acceptance of a business relationsip was obtained on ___ * - * Required: false + * GANA Type: AbsoluteDateTime */ - PRODUCT_RISK_LEVEL?: - | "EASY" - | "SOPHISTICATED" - | "OFFSHORE" - | "COMPLEX_STRUCTURE" - | "LARGE_NUMBER_OF_ACCOUNTS" - | "COMPLEX_SERVICE" - | "FREQ_TRANS_WITH_HIGH_RISK"; + RISK_CLASIFICATION_ACCEPTANCE_DATE: { + id: "RISK_CLASIFICATION_ACCEPTANCE_DATE" as UIHandlerId, + description: + "The decision of the Senior executive body on the acceptance of a business relationsip was obtained on ___", + } as FormFieldInfo, /** - * The decision of the Senior executive body on the acceptance of a business relationsip was obtained on ___ - * Required: false + * Description: + * + * GANA Type: 'WITH' | 'WITHOUT' */ - RISK_CLASIFICATION_ACCEPTANCE_DATE?: AbsoluteDateTime; + RISK_CLASIFICATION_LEVEL: { + id: "RISK_CLASIFICATION_LEVEL" as UIHandlerId, + description: "", + } as FormFieldInfo, + } as const; + export const VQF_902_5 = { /** + * Description: Information on the planned development of the business relationship and the assets. * - * Required: false + * GANA Type: String */ - RISK_CLASIFICATION_LEVEL?: "WITH" | "WITHOUT"; - } - export interface VQF_902_5 { + BIZREL_DEVELOPMENT: { + id: "BIZREL_DEVELOPMENT" as UIHandlerId, + description: + "Information on the planned development of the business relationship and the assets.", + } as FormFieldInfo, /** - * Information on the planned development of the business relationship and the assets. - * Required: false + * Description: In the case of cash or money and asset transfer transacction with regular customer + * + * GANA Type: BusinessAddress */ - BIZREL_DEVELOPMENT?: String; + BIZREL_FINANCIAL_BENEFICIARIES_ADDRESS: { + id: "BIZREL_FINANCIAL_BENEFICIARIES_ADDRESS" as UIHandlerId, + description: + "In the case of cash or money and asset transfer transacction with regular customer", + } as FormFieldInfo, /** - * In the case of cash or money and asset transfer transacction with regular customer - * Required: false + * Description: In the case of cash or money and asset transfer transacction with regular customer + * + * GANA Type: String */ - BIZREL_FINANCIAL_BENEFICIARIES_ADDRESS?: BusinessAddress; + BIZREL_FINANCIAL_BENEFICIARIES_BANK_ACCOUNT: { + id: "BIZREL_FINANCIAL_BENEFICIARIES_BANK_ACCOUNT" as UIHandlerId, + description: + "In the case of cash or money and asset transfer transacction with regular customer", + } as FormFieldInfo, /** - * In the case of cash or money and asset transfer transacction with regular customer - * Required: false + * Description: In the case of cash or money and asset transfer transacction with regular customer + * + * GANA Type: String */ - BIZREL_FINANCIAL_BENEFICIARIES_BANK_ACCOUNT?: String; + BIZREL_FINANCIAL_BENEFICIARIES_FULL_NAME: { + id: "BIZREL_FINANCIAL_BENEFICIARIES_FULL_NAME" as UIHandlerId, + description: + "In the case of cash or money and asset transfer transacction with regular customer", + } as FormFieldInfo, /** - * In the case of cash or money and asset transfer transacction with regular customer - * Required: false + * Description: In the case of cash or money and asset transfer transacction with regular customer + * + * GANA Type: String */ - BIZREL_FINANCIAL_BENEFICIARIES_FULL_NAME?: String; + BIZREL_FINANCIAL_VOLUME: { + id: "BIZREL_FINANCIAL_VOLUME" as UIHandlerId, + description: + "In the case of cash or money and asset transfer transacction with regular customer", + } as FormFieldInfo, /** - * In the case of cash or money and asset transfer transacction with regular customer - * Required: false + * Description: Other relevant information. + * + * GANA Type: String */ - BIZREL_FINANCIAL_VOLUME?: String; + BIZREL_FURTHER_INFO: { + id: "BIZREL_FURTHER_INFO" as UIHandlerId, + description: "Other relevant information.", + } as FormFieldInfo, /** - * Other relevant information. - * Required: false + * Description: Income and assets, liabilities (estimated) + * + * GANA Type: String */ - BIZREL_FURTHER_INFO?: String; + BIZREL_INCOME: { + id: "BIZREL_INCOME" as UIHandlerId, + description: "Income and assets, liabilities (estimated)", + } as FormFieldInfo, /** - * Income and assets, liabilities (estimated) - * Required: false + * Description: Nature, amount and currency of the involved assets. + * + * GANA Type: Amount */ - BIZREL_INCOME?: String; + BIZREL_ORIGIN_AMOUNT: { + id: "BIZREL_ORIGIN_AMOUNT" as UIHandlerId, + description: "Nature, amount and currency of the involved assets.", + } as FormFieldInfo, /** - * Nature, amount and currency of the involved assets. - * Required: true + * Description: + * + * GANA Type: 'SAVINGS' | 'OWN_BUSINESS' | 'INHERITANCE' | 'OTHER' */ - BIZREL_ORIGIN_AMOUNT: Amount; + BIZREL_ORIGIN_CATEGORY: { + id: "BIZREL_ORIGIN_CATEGORY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: String */ - BIZREL_ORIGIN_CATEGORY: - | "SAVINGS" - | "OWN_BUSINESS" - | "INHERITANCE" - | "OTHER"; + BIZREL_ORIGIN_CATEGORY_OTHER: { + id: "BIZREL_ORIGIN_CATEGORY_OTHER" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: Define the category if 'other'. * - * Required: false + * GANA Type: Paragraph */ - BIZREL_ORIGIN_CATEGORY_OTHER?: String; + BIZREL_ORIGIN_DETAIL: { + id: "BIZREL_ORIGIN_DETAIL" as UIHandlerId, + description: "Define the category if 'other'.", + } as FormFieldInfo, /** - * Define the category if 'other'. - * Required: false + * Description: Profession, business activities, etc. (former, current, potentially planned) + * + * GANA Type: String */ - BIZREL_ORIGIN_DETAIL?: Paragraph; + BIZREL_PROFESSION: { + id: "BIZREL_PROFESSION" as UIHandlerId, + description: + "Profession, business activities, etc. (former, current, potentially planned)", + } as FormFieldInfo, /** - * Profession, business activities, etc. (former, current, potentially planned) - * Required: false + * Description: Purpose of the business relationship. + * + * GANA Type: String */ - BIZREL_PROFESSION?: String; + BIZREL_PURPOSE: { + id: "BIZREL_PURPOSE" as UIHandlerId, + description: "Purpose of the business relationship.", + } as FormFieldInfo, /** - * Purpose of the business relationship. - * Required: false + * Description: Relation to other AMLA-files. + * + * GANA Type: String */ - BIZREL_PURPOSE?: String; + BIZREL_THIRDPARTY_AMLA_FILES: { + id: "BIZREL_THIRDPARTY_AMLA_FILES" as UIHandlerId, + description: "Relation to other AMLA-files.", + } as FormFieldInfo, /** - * Relation to other AMLA-files. - * Required: false + * Description: Introducer / agents / references. + * + * GANA Type: String */ - BIZREL_THIRDPARTY_AMLA_FILES?: String; + BIZREL_THIRDPARTY_REFERENCES: { + id: "BIZREL_THIRDPARTY_REFERENCES" as UIHandlerId, + description: "Introducer / agents / references.", + } as FormFieldInfo, /** - * Introducer / agents / references. - * Required: false + * Description: Relation of the customer to the beneficial owner, controlling persons, authorised signatories and other persons involved in the business relationship. + * + * GANA Type: String */ - BIZREL_THIRDPARTY_REFERENCES?: String; + BIZREL_THIRDPARTY_RELATIONSHIP: { + id: "BIZREL_THIRDPARTY_RELATIONSHIP" as UIHandlerId, + description: + "Relation of the customer to the beneficial owner, controlling persons, authorised signatories and other persons involved in the business relationship.", + } as FormFieldInfo, /** - * Relation of the customer to the beneficial owner, controlling persons, authorised signatories and other persons involved in the business relationship. - * Required: false + * Description: Customer system ID required to correlate different AML forms. + * + * GANA Type: String */ - BIZREL_THIRDPARTY_RELATIONSHIP?: String; + CUSTOMER_ID: { + id: "CUSTOMER_ID" as UIHandlerId, + description: + "Customer system ID required to correlate different AML forms.", + } as FormFieldInfo, /** - * Customer system ID required to correlate different AML forms. - * Required: true + * Description: When the form was completed. + * + * GANA Type: AbsoluteDateTime */ - CUSTOMER_ID: String; + FORM_FILLING_DATE: { + id: "FORM_FILLING_DATE" as UIHandlerId, + description: "When the form was completed.", + } as FormFieldInfo, + } as const; + export const VQF_902_9 = { /** - * When the form was completed. - * Required: true + * Description: Customer system ID required to correlate different AML forms. + * + * GANA Type: String */ - FORM_FILLING_DATE: AbsoluteDateTime; - } - export interface VQF_902_9 { + CUSTOMER_ID: { + id: "CUSTOMER_ID" as UIHandlerId, + description: + "Customer system ID required to correlate different AML forms.", + } as FormFieldInfo, /** - * Customer system ID required to correlate different AML forms. - * Required: true + * Description: When the form was completed. + * + * GANA Type: AbsoluteDateTime */ - CUSTOMER_ID: String; + FORM_FILLING_DATE: { + id: "FORM_FILLING_DATE" as UIHandlerId, + description: "When the form was completed.", + } as FormFieldInfo, /** - * When the form was completed. - * Required: true + * Description: + * + * GANA Type: Paragraph */ - FORM_FILLING_DATE: AbsoluteDateTime; + IDENTITY_CONTRACTING_PARTNER: { + id: "IDENTITY_CONTRACTING_PARTNER" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: The beneficial owners of the assets involved in the business relationship. * - * Required: true + * GANA Type: Form<VQF_902_9_identity>[] */ - IDENTITY_CONTRACTING_PARTNER: Paragraph; + IDENTITY_LIST: { + id: "IDENTITY_LIST" as UIHandlerId, + description: + "The beneficial owners of the assets involved in the business relationship.", + } as FormFieldInfo, /** - * The beneficial owners of the assets involved in the business relationship. - * Required: false + * Description: + * + * GANA Type: String */ - IDENTITY_LIST?: Form<VQF_902_9_identity>[]; + SIGNATURE: { + id: "SIGNATURE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: Contracing partner signature, * - * Required: true + * GANA Type: AbsoluteDateTime */ - SIGNATURE: String; + SIGN_DATE: { + id: "SIGN_DATE" as UIHandlerId, + description: "Contracing partner signature,", + } as FormFieldInfo, + } as const; + export const VQF_902_9_identity = { /** - * Contracing partner signature, - * Required: true + * Description: + * + * GANA Type: AbsoluteDate */ - SIGN_DATE: AbsoluteDateTime; - } - export interface VQF_902_9_identity { + IDENTITY_BIRTHDATE: { + id: "IDENTITY_BIRTHDATE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: ResidentialAddress */ - IDENTITY_BIRTHDATE: AbsoluteDate; + IDENTITY_DOMICILE: { + id: "IDENTITY_DOMICILE" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: String */ - IDENTITY_DOMICILE: ResidentialAddress; + IDENTITY_FULL_NAME: { + id: "IDENTITY_FULL_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: true + * GANA Type: CountryCode */ - IDENTITY_FULL_NAME: String; + IDENTITY_NATIONALITY: { + id: "IDENTITY_NATIONALITY" as UIHandlerId, + description: "", + } as FormFieldInfo, + } as const; + export const GLS_Onboarding = { /** + * Description: Name of the version of the terms of service accepted by the customer. * - * Required: true + * GANA Type: Boolean */ - IDENTITY_NATIONALITY: CountryCode; - } - export interface GLS_Onboarding { + ACCEPTED_TERMS_OF_SERVICE: { + id: "ACCEPTED_TERMS_OF_SERVICE" as UIHandlerId, + description: + "Name of the version of the terms of service accepted by the customer.", + } as FormFieldInfo, /** - * Building name of the of the individual or business. - * Required: false + * Description: Building name of the of the individual or business. + * + * GANA Type: String */ - ADDRESS_BUILDING_NAME?: String; + ADDRESS_BUILDING_NAME: { + id: "ADDRESS_BUILDING_NAME" as UIHandlerId, + description: "Building name of the of the individual or business.", + } as FormFieldInfo, /** - * Building number of the individual or business. - * Required: false + * Description: Building number of the individual or business. + * + * GANA Type: String */ - ADDRESS_BUILDING_NUMBER?: String; + ADDRESS_BUILDING_NUMBER: { + id: "ADDRESS_BUILDING_NUMBER" as UIHandlerId, + description: "Building number of the individual or business.", + } as FormFieldInfo, /** - * Country where the individual or business resides. Format is 2-letter ISO country-code. - * Required: false + * Description: Country where the individual or business resides. Format is 2-letter ISO country-code. + * + * GANA Type: CountryCode */ - ADDRESS_COUNTRY?: CountryCode; + ADDRESS_COUNTRY: { + id: "ADDRESS_COUNTRY" as UIHandlerId, + description: + "Country where the individual or business resides. Format is 2-letter ISO country-code.", + } as FormFieldInfo, /** - * Country subdivision of the individual or business. - * Required: false + * Description: Country subdivision of the individual or business. + * + * GANA Type: String */ - ADDRESS_COUNTRY_SUBDIVISION?: String; + ADDRESS_COUNTRY_SUBDIVISION: { + id: "ADDRESS_COUNTRY_SUBDIVISION" as UIHandlerId, + description: "Country subdivision of the individual or business.", + } as FormFieldInfo, /** - * Additional address information of the individual or business. - * Required: false + * Description: Additional address information of the individual or business. + * + * GANA Type: String */ - ADDRESS_LINES?: String; + ADDRESS_LINES: { + id: "ADDRESS_LINES" as UIHandlerId, + description: + "Additional address information of the individual or business.", + } as FormFieldInfo, /** - * Street address name of the individual or business. - * Required: false + * Description: Street address name of the individual or business. + * + * GANA Type: String */ - ADDRESS_STREET_NAME?: String; + ADDRESS_STREET_NAME: { + id: "ADDRESS_STREET_NAME" as UIHandlerId, + description: "Street address name of the individual or business.", + } as FormFieldInfo, /** - * Street address number of the individual or business. - * Required: false + * Description: Street address number of the individual or business. + * + * GANA Type: String */ - ADDRESS_STREET_NUMBER?: String; + ADDRESS_STREET_NUMBER: { + id: "ADDRESS_STREET_NUMBER" as UIHandlerId, + description: "Street address number of the individual or business.", + } as FormFieldInfo, /** - * Town district of the individual or business. - * Required: false + * Description: Town district of the individual or business. + * + * GANA Type: String */ - ADDRESS_TOWN_DISTRICT?: String; + ADDRESS_TOWN_DISTRICT: { + id: "ADDRESS_TOWN_DISTRICT" as UIHandlerId, + description: "Town district of the individual or business.", + } as FormFieldInfo, /** - * Town location of the individual or business. - * Required: false + * Description: Town location of the individual or business. + * + * GANA Type: String */ - ADDRESS_TOWN_LOCATION?: String; + ADDRESS_TOWN_LOCATION: { + id: "ADDRESS_TOWN_LOCATION" as UIHandlerId, + description: "Town location of the individual or business.", + } as FormFieldInfo, /** - * Postal code of the city where the individual or business resides. - * Required: false + * Description: Postal code of the city where the individual or business resides. + * + * GANA Type: String */ - ADDRESS_ZIPCODE?: String; + ADDRESS_ZIPCODE: { + id: "ADDRESS_ZIPCODE" as UIHandlerId, + description: + "Postal code of the city where the individual or business resides.", + } as FormFieldInfo, /** - * Name of the company or business. - * Required: false + * Description: Name of the company or business. + * + * GANA Type: String */ - BUSINESS_DISPLAY_NAME?: String; + BUSINESS_DISPLAY_NAME: { + id: "BUSINESS_DISPLAY_NAME" as UIHandlerId, + description: "Name of the company or business.", + } as FormFieldInfo, /** - * Industry in which the company or business mainly operate. - * Required: false + * Description: Industry in which the company or business mainly operate. + * + * GANA Type: String */ - BUSINESS_INDUSTRY?: String; + BUSINESS_INDUSTRY: { + id: "BUSINESS_INDUSTRY" as UIHandlerId, + description: "Industry in which the company or business mainly operate.", + } as FormFieldInfo, /** - * True if the company or business is a non-profit. - * Required: false + * Description: True if the company or business is a non-profit. + * + * GANA Type: Boolean */ - BUSINESS_IS_NON_PROFIT?: Boolean; + BUSINESS_IS_NON_PROFIT: { + id: "BUSINESS_IS_NON_PROFIT" as UIHandlerId, + description: "True if the company or business is a non-profit.", + } as FormFieldInfo, /** - * City or location where the company or business is registered. - * Required: false + * Description: City or location where the company or business is registered. + * + * GANA Type: String */ - BUSINESS_LEGAL_JURISDICTION?: String; + BUSINESS_LEGAL_JURISDICTION: { + id: "BUSINESS_LEGAL_JURISDICTION" as UIHandlerId, + description: + "City or location where the company or business is registered.", + } as FormFieldInfo, /** - * List of natural persons that are legal representatives or shareholders. - * Required: false + * Description: List of natural persons that are legal representatives or shareholders. + * + * GANA Type: GLS_BusinessRepresentative[] */ - BUSINESS_LEGAL_REPRESENTATIVES?: GLS_BusinessRepresentative[]; + BUSINESS_LEGAL_REPRESENTATIVES: { + id: "BUSINESS_LEGAL_REPRESENTATIVES" as UIHandlerId, + description: + "List of natural persons that are legal representatives or shareholders.", + } as FormFieldInfo, /** - * Registration founding date of the company or business. - * Required: false + * Description: Registration founding date of the company or business. + * + * GANA Type: AbsoluteDate */ - BUSINESS_REGISTRATION_DATE?: ISO8601Date; + BUSINESS_REGISTRATION_DATE: { + id: "BUSINESS_REGISTRATION_DATE" as UIHandlerId, + description: "Registration founding date of the company or business.", + } as FormFieldInfo, /** - * Registration id on legal entity of the company or business. - * Required: false + * Description: Registration id on legal entity of the company or business. + * + * GANA Type: String */ - BUSINESS_REGISTRATION_ID?: String; + BUSINESS_REGISTRATION_ID: { + id: "BUSINESS_REGISTRATION_ID" as UIHandlerId, + description: + "Registration id on legal entity of the company or business.", + } as FormFieldInfo, /** - * Type of company form or business (limited liability company, general partnership, limited partnership, corporations, etc... ). - * Required: false + * Description: Type of company form or business (limited liability company, general partnership, limited partnership, corporations, etc... ). + * + * GANA Type: String */ - BUSINESS_TYPE?: String; + BUSINESS_TYPE: { + id: "BUSINESS_TYPE" as UIHandlerId, + description: + "Type of company form or business (limited liability company, general partnership, limited partnership, corporations, etc... ).", + } as FormFieldInfo, /** - * DNS domain name owned by the individual or business. - * Required: false + * Description: DNS domain name owned by the individual or business. + * + * GANA Type: Hostname */ - CONTACT_DNS_DOMAIN?: Hostname; + CONTACT_DNS_DOMAIN: { + id: "CONTACT_DNS_DOMAIN" as UIHandlerId, + description: "DNS domain name owned by the individual or business.", + } as FormFieldInfo, /** - * E-mail address to contact the individual or business. Can be validated via E-mail with TAN. - * Required: false + * Description: E-mail address to contact the individual or business. Can be validated via E-mail with TAN. + * + * GANA Type: Email */ - CONTACT_EMAIL?: Email; + CONTACT_EMAIL: { + id: "CONTACT_EMAIL" as UIHandlerId, + description: + "E-mail address to contact the individual or business. Can be validated via E-mail with TAN.", + } as FormFieldInfo, /** - * Phone number to contact the individual or business. Can be validated via SMS-TAN or phone call. - * Required: false + * Description: Phone number to contact the individual or business. Can be validated via SMS-TAN or phone call. + * + * GANA Type: Phone */ - CONTACT_PHONE?: Phone; + CONTACT_PHONE: { + id: "CONTACT_PHONE" as UIHandlerId, + description: + "Phone number to contact the individual or business. Can be validated via SMS-TAN or phone call.", + } as FormFieldInfo, /** - * Web site owned by the individual or business. - * Required: false + * Description: Web site owned by the individual or business. + * + * GANA Type: HttpHostnamePath */ - CONTACT_WEB_DOMAIN?: HttpHostnamePath; + CONTACT_WEB_DOMAIN: { + id: "CONTACT_WEB_DOMAIN" as UIHandlerId, + description: "Web site owned by the individual or business.", + } as FormFieldInfo, /** - * Date of birth of an individual. Format is YYYY-MM-DD. - * Required: false + * Description: Date of birth of an individual. Format is YYYY-MM-DD. + * + * GANA Type: AbsoluteDate */ - PERSON_DATE_OF_BIRTH?: ISO8601Date; + PERSON_DATE_OF_BIRTH: { + id: "PERSON_DATE_OF_BIRTH" as UIHandlerId, + description: "Date of birth of an individual. Format is YYYY-MM-DD.", + } as FormFieldInfo, /** - * Full legal name of an individual as in the national identity card. - * Required: false + * Description: Full legal name of an individual as in the national identity card. + * + * GANA Type: String */ - PERSON_FULL_NAME?: String; + PERSON_FULL_NAME: { + id: "PERSON_FULL_NAME" as UIHandlerId, + description: + "Full legal name of an individual as in the national identity card.", + } as FormFieldInfo, /** - * Last name of an individual as in the national identity card. - * Required: false + * Description: Last name of an individual as in the national identity card. + * + * GANA Type: String */ - PERSON_LAST_NAME?: String; + PERSON_LAST_NAME: { + id: "PERSON_LAST_NAME" as UIHandlerId, + description: + "Last name of an individual as in the national identity card.", + } as FormFieldInfo, /** - * Nationality of an individual. Format is 2-letter ISO country-code. - * Required: false + * Description: Nationality of an individual. Format is 2-letter ISO country-code. + * + * GANA Type: CountryCode */ - PERSON_NATIONALITY?: CountryCode; + PERSON_NATIONALITY: { + id: "PERSON_NATIONALITY" as UIHandlerId, + description: + "Nationality of an individual. Format is 2-letter ISO country-code.", + } as FormFieldInfo, /** - * Identification number or string of national identity card. - * Required: false + * Description: Identification number or string of national identity card. + * + * GANA Type: String */ - PERSON_NATIONAL_ID?: String; + PERSON_NATIONAL_ID: { + id: "PERSON_NATIONAL_ID" as UIHandlerId, + description: "Identification number or string of national identity card.", + } as FormFieldInfo, /** - * Scan of a recognized national identity card of an individual. - * Required: false + * Description: Scan of a recognized national identity card of an individual. + * + * GANA Type: File */ - PERSON_NATIONAL_ID_SCAN?: File; + PERSON_NATIONAL_ID_SCAN: { + id: "PERSON_NATIONAL_ID_SCAN" as UIHandlerId, + description: + "Scan of a recognized national identity card of an individual.", + } as FormFieldInfo, /** - * Country name of of the individual or business. - * Required: false + * Description: Country name of of the individual or business. + * + * GANA Type: CountryCode */ - TAX_COUNTRY?: CountryCode; + TAX_COUNTRY: { + id: "TAX_COUNTRY" as UIHandlerId, + description: "Country name of of the individual or business.", + } as FormFieldInfo, /** - * Tax identifier of the individual or business. - * Required: false + * Description: Tax identifier of the individual or business. + * + * GANA Type: String */ - TAX_ID?: String; + TAX_ID: { + id: "TAX_ID" as UIHandlerId, + description: "Tax identifier of the individual or business.", + } as FormFieldInfo, /** - * Is the individual or business economically active or passive. - * Required: false + * Description: Is the individual or business economically active or passive. + * + * GANA Type: Boolean */ - TAX_IS_ACTIVE?: Boolean; + TAX_IS_ACTIVE: { + id: "TAX_IS_ACTIVE" as UIHandlerId, + description: + "Is the individual or business economically active or passive.", + } as FormFieldInfo, /** - * Is the business entitled to deduct input tax. - * Required: false + * Description: Is the business entitled to deduct input tax. + * + * GANA Type: Boolean */ - TAX_IS_DEDUCTED?: Boolean; + TAX_IS_DEDUCTED: { + id: "TAX_IS_DEDUCTED" as UIHandlerId, + description: "Is the business entitled to deduct input tax.", + } as FormFieldInfo, /** - * Is business founded or under USA law. - * Required: false + * Description: Is business founded or under USA law. + * + * GANA Type: Boolean */ - TAX_IS_USA_LAW?: Boolean; - } - export interface GLS_BusinessRepresentative { + TAX_IS_USA_LAW: { + id: "TAX_IS_USA_LAW" as UIHandlerId, + description: "Is business founded or under USA law.", + } as FormFieldInfo, + } as const; + export const GLS_BusinessRepresentative = { /** + * Description: * - * Required: false + * GANA Type: AbsoluteDate */ - GLS_REPRESENTATIVE_DATE_OF_BIRTH?: ISO8601Date; + GLS_REPRESENTATIVE_DATE_OF_BIRTH: { + id: "GLS_REPRESENTATIVE_DATE_OF_BIRTH" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: String */ - GLS_REPRESENTATIVE_FULL_NAME?: String; + GLS_REPRESENTATIVE_FULL_NAME: { + id: "GLS_REPRESENTATIVE_FULL_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: String */ - GLS_REPRESENTATIVE_LAST_NAME?: String; + GLS_REPRESENTATIVE_LAST_NAME: { + id: "GLS_REPRESENTATIVE_LAST_NAME" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: CountryCode */ - GLS_REPRESENTATIVE_NATIONALITY?: CountryCode; + GLS_REPRESENTATIVE_NATIONALITY: { + id: "GLS_REPRESENTATIVE_NATIONALITY" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: String */ - GLS_REPRESENTATIVE_NATIONAL_ID?: String; + GLS_REPRESENTATIVE_NATIONAL_ID: { + id: "GLS_REPRESENTATIVE_NATIONAL_ID" as UIHandlerId, + description: "", + } as FormFieldInfo, /** + * Description: * - * Required: false + * GANA Type: File */ - GLS_REPRESENTATIVE_NATIONAL_ID_SCAN?: File; - } - export interface AccountProperties { + GLS_REPRESENTATIVE_NATIONAL_ID_SCAN: { + id: "GLS_REPRESENTATIVE_NATIONAL_ID_SCAN" as UIHandlerId, + description: "", + } as FormFieldInfo, + } as const; + export const AccountProperties = { /** - * True if deposit limit changed from zero to greater than zero. - * Required: false + * Description: True if deposit limit changed from zero to greater than zero. + * + * GANA Type: Boolean */ - AML_ACCOUNT_ACTIVE_DEPOSIT?: Boolean; + AML_ACCOUNT_ACTIVE_DEPOSIT: { + id: "AML_ACCOUNT_ACTIVE_DEPOSIT" as UIHandlerId, + description: + "True if deposit limit changed from zero to greater than zero.", + } as FormFieldInfo, /** - * True if this is an account controlled by domestic PEP. - * Required: false + * Description: True if this is an account controlled by domestic PEP. + * + * GANA Type: Boolean */ - AML_DOMESTIC_PEP?: Boolean; + AML_DOMESTIC_PEP: { + id: "AML_DOMESTIC_PEP" as UIHandlerId, + description: "True if this is an account controlled by domestic PEP.", + } as FormFieldInfo, /** - * True if this is an account controlled by foreign PEP. - * Required: false + * Description: True if this is an account controlled by foreign PEP. + * + * GANA Type: Boolean */ - AML_FOREIGN_PEP?: Boolean; + AML_FOREIGN_PEP: { + id: "AML_FOREIGN_PEP" as UIHandlerId, + description: "True if this is an account controlled by foreign PEP.", + } as FormFieldInfo, /** - * True if this is an account of a high-rish business. - * Required: false + * Description: True if this is an account of a high-rish business. + * + * GANA Type: Boolean */ - AML_HIGH_RISK_BUSINESS?: Boolean; + AML_HIGH_RISK_BUSINESS: { + id: "AML_HIGH_RISK_BUSINESS" as UIHandlerId, + description: "True if this is an account of a high-rish business.", + } as FormFieldInfo, /** - * True if this is an account controlled by person from high-risk country. - * Required: false + * Description: True if this is an account controlled by person from high-risk country. + * + * GANA Type: String */ - AML_HIGH_RISK_COUNTRY?: String; + AML_HIGH_RISK_COUNTRY: { + id: "AML_HIGH_RISK_COUNTRY" as UIHandlerId, + description: + "True if this is an account controlled by person from high-risk country.", + } as FormFieldInfo, /** - * True if account is involved in proceedings for which Art 6 GwG, and completed. - * Required: false + * Description: True if account is involved in proceedings for which Art 6 GwG, and completed. + * + * GANA Type: Boolean */ - AML_INVESTIGATION_ART6_COMPLETED?: Boolean; + AML_INVESTIGATION_ART6_COMPLETED: { + id: "AML_INVESTIGATION_ART6_COMPLETED" as UIHandlerId, + description: + "True if account is involved in proceedings for which Art 6 GwG, and completed.", + } as FormFieldInfo, /** - * True if account is involved in proceedings for which Art 6 GwG, but failed. - * Required: false + * Description: True if account is involved in proceedings for which Art 6 GwG, but failed. + * + * GANA Type: Boolean */ - AML_INVESTIGATION_ART6_FAILED?: Boolean; + AML_INVESTIGATION_ART6_FAILED: { + id: "AML_INVESTIGATION_ART6_FAILED" as UIHandlerId, + description: + "True if account is involved in proceedings for which Art 6 GwG, but failed.", + } as FormFieldInfo, /** - * True if this account is going to be reported by right to do so (based on Art 305ter Abs. 2 StGB). - * Required: false + * Description: True if this account is going to be reported by right to do so (based on Art 305ter Abs. 2 StGB). + * + * GANA Type: Boolean */ - AML_MROS_REPORTED_ART305?: Boolean; + AML_MROS_REPORTED_ART305: { + id: "AML_MROS_REPORTED_ART305" as UIHandlerId, + description: + "True if this account is going to be reported by right to do so (based on Art 305ter Abs. 2 StGB).", + } as FormFieldInfo, /** - * True if this account is going to be reported by obligation to do so (based on Art 9 Abs. 1 GwG). - * Required: false + * Description: True if this account is going to be reported by obligation to do so (based on Art 9 Abs. 1 GwG). + * + * GANA Type: Boolean */ - AML_MROS_REPORTED_ART9?: Boolean; + AML_MROS_REPORTED_ART9: { + id: "AML_MROS_REPORTED_ART9" as UIHandlerId, + description: + "True if this account is going to be reported by obligation to do so (based on Art 9 Abs. 1 GwG).", + } as FormFieldInfo, /** - * True if the account made no operaton during a period of time. - * Required: false + * Description: True if the account made no operaton during a period of time. + * + * GANA Type: Boolean */ - AML_NO_OPERATION_DURING_PERIOD?: Boolean; - } + AML_NO_OPERATION_DURING_PERIOD: { + id: "AML_NO_OPERATION_DURING_PERIOD" as UIHandlerId, + description: + "True if the account made no operaton during a period of time.", + } as FormFieldInfo, + } as const; } diff --git a/packages/web-util/src/forms/index.ts b/packages/web-util/src/forms/index.ts @@ -4,7 +4,9 @@ export * from "./HtmlIframe.js"; export * from "./Dialog.js"; export * from "./FormProvider.js"; export * from "./Group.js"; -export * from "./gana/VQF_902_1.js"; +export * from "./gana/VQF_902_1_all.js"; +export * from "./gana/VQF_902_1_customer.js"; +export * from "./gana/VQF_902_1_officer.js"; export * from "./gana/VQF_902_4.js"; export * from "./gana/VQF_902_5.js"; export * from "./gana/VQF_902_9.js"; diff --git a/packages/web-util/src/hooks/useForm.ts b/packages/web-util/src/hooks/useForm.ts @@ -24,8 +24,10 @@ import { import { useState } from "preact/hooks"; import { FormDesign, + InternationalizationAPI, UIFieldHandler, UIFormElementConfig, + useTranslationContext, } from "../index.browser.js"; export type FormHandler<T> = { @@ -97,11 +99,19 @@ export function useForm<T>( design: FormDesign<T>, initialValue: RecursivePartial<FormValues<T>>, ): FormState<T> { + const { i18n } = useTranslationContext(); const [formValue, formUpdateHandler] = useState<RecursivePartial<FormValues<T>>>(initialValue); const errors = undefinedIfEmpty<FormErrors<T> | undefined>( - validateRequiredFields(formValue, design), + validateRequiredFields(formValue, design, i18n), + ); + + const handler = constructFormHandler( + design, + formValue, + formUpdateHandler, + errors, ); const status = @@ -113,13 +123,6 @@ export function useForm<T>( errors, }; - const handler = constructFormHandler( - design, - formValue, - formUpdateHandler, - status?.errors, - ); - return { handler, status, @@ -193,13 +196,11 @@ export function undefinedIfEmpty<T extends object | undefined>( function validateRequiredFields<FormType>( form: object, config: FormDesign, + i18n: InternationalizationAPI, ): FormErrors<FormType> | undefined { let result: FormErrors<FormType> | undefined = undefined; function checkIfRequiredFieldHasValue(formElement: UIFormElementConfig) { - if ("fields" in formElement) { - // formElement.fields.forEach(checkIfRequiredFieldHasValue); - } if (!("id" in formElement)) { return; } @@ -208,7 +209,7 @@ function validateRequiredFields<FormType>( if (formElement.required && v === undefined) { const e: ErrorAndLabel = { label: formElement.label as TranslatedString, - message: "required" as TranslatedString, // FIXME: should be translated + message: i18n.str`required`, }; result = setValueIntoPath(result, path, e); } @@ -257,28 +258,28 @@ function validateRequiredFields<FormType>( function constructFormHandler<T>( design: FormDesign, - value: RecursivePartial<FormValues<T>>, + formValue: RecursivePartial<FormValues<T>>, onValueChange: (d: RecursivePartial<FormValues<T>>) => void, errors: FormErrors<T> | undefined, ): FormHandler<T> { let formHandler: FormHandler<T> = {}; - function createFieldHandler(formElement: UIFormElementConfig): void { - if ("fields" in formElement) { - // formElement.fields.forEach(notifyUpdateOnFieldChange); - } + function createFieldHandler( + formElement: UIFormElementConfig, + hiddenSection: boolean | undefined, + ): void { if (!("id" in formElement)) { return; } const path = formElement.id.split("."); function updater(newValue: unknown) { - const updated = setValueIntoPath(value, path, newValue); + const updated = setValueIntoPath(formValue, path, newValue); onValueChange(updated); } const currentValue = getValueFromPath<string>( - value as any, + formValue as any, path, undefined, ); @@ -287,11 +288,22 @@ function constructFormHandler<T>( path, undefined, ); + + const isHidden = !!hiddenSection + ? true + : formElement.hide + ? formElement.hide(currentValue, formValue) + : formElement.hidden; + const field: UIFieldHandler = { error: currentError?.message, - value: currentValue, + value: isHidden ? undefined : currentValue, onChange: updater, - state: {}, //FIXME: add the state of the field (hidden, ) + state: { + hidden: isHidden, + required: formElement.required, + disabled: formElement.disabled, + }, }; formHandler = setValueIntoPath(formHandler, path, field); @@ -300,12 +312,13 @@ function constructFormHandler<T>( switch (design.type) { case "double-column": { design.sections.forEach((sec) => { - sec.fields.forEach(createFieldHandler); + const hidden = sec.hide ? sec.hide(formValue) : undefined; + sec.fields.forEach((f) => createFieldHandler(f, hidden)); }); break; } case "single-column": { - design.fields.forEach(createFieldHandler); + design.fields.forEach((f) => createFieldHandler(f, undefined)); break; } default: { diff --git a/packages/web-util/src/utils/languagues.ts b/packages/web-util/src/utils/languagues.ts @@ -0,0 +1,1257 @@ +/* + 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 { TranslatedString } from "../../../taler-util/src/i18n.js"; +import { InternationalizationAPI, SelectUiChoice } from "../index.browser.js"; + +/** + * + * Taken from https://raw.githubusercontent.com/umpirsky/language-list/refs/heads/master/data/ak/language.txt + */ +export const enum LangCode { + aa, + ab, + ace, + ach, + ada, + ady, + ae, + aeb, + af, + afh, + agq, + ain, + ak, + akk, + akz, + ale, + aln, + alt, + am, + an, + ang, + anp, + ar_001, + ar, + arc, + arn, + aro, + arp, + arq, + arw, + ary, + arz, + asa, + as, + ase, + ast, + av, + avk, + awa, + ay, + az, + azb, + ba, + bal, + ban, + bar, + bas, + bax, + bbc, + bbj, + be, + bej, + bem, + bew, + bez, + bfd, + bfq, + bg, + bho, + bi, + bik, + bin, + bjn, + bkm, + bla, + bm, + bn, + bo, + bpy, + bqi, + bra, + br, + brh, + brx, + bs, + bss, + bua, + bug, + bum, + byn, + byv, + ca, + cad, + car, + cay, + cch, + ceb, + ce, + cgg, + chb, + ch, + chg, + chk, + chm, + chn, + cho, + chp, + chr, + chy, + ckb, + co, + cop, + cps, + cr, + crh, + csb, + cs, + cu, + cv, + cy, + da, + dak, + dar, + dav, + de_AT, + de_CH, + de, + del, + den, + dgr, + din, + dje, + doi, + dsb, + dtp, + dua, + dum, + dv, + dyo, + dyu, + dz, + dzg, + ebu, + ee, + efi, + egl, + egy, + eka, + el, + elx, + en_AU, + en, + en_CA, + en_GB, + enm, + en_US, + eo, + es_419, + es_ES, + es_MX, + es, + esu, + et, + eu, + ewo, + ext, + fan, + fa, + fat, + ff, + fi, + fil, + fit, + fj, + fo, + fon, + fr_CA, + frc, + fr_CH, + fr, + frm, + fro, + frp, + frr, + frs, + fur, + fy, + gaa, + gag, + ga, + gan, + gay, + gba, + gbz, + gd, + gez, + gil, + gl, + glk, + gmh, + gn, + goh, + gom, + gon, + gor, + got, + grb, + grc, + gsw, + guc, + gu, + gur, + guz, + gv, + gwi, + ha, + hai, + hak, + haw, + he, + hif, + hi, + hil, + hit, + hmn, + ho, + hr, + hsb, + hsn, + ht, + hu, + hup, + hy, + hz, + ia, + iba, + ibb, + id, + ie, + ig, + ii, + ik, + ilo, + inh, + io, + is, + it, + iu, + izh, + ja, + jam, + jbo, + jgo, + jmc, + jpr, + jrb, + jut, + jv, + kaa, + kab, + kac, + ka, + kaj, + kam, + kaw, + kbd, + kbl, + kcg, + kde, + kea, + ken, + kfo, + kg, + kgp, + kha, + kho, + khq, + khw, + ki, + kiu, + kj, + kkj, + kk, + kl, + kln, + kmb, + km, + kn, + koi, + kok, + ko, + kos, + kpe, + krc, + kri, + krj, + kr, + krl, + kru, + ksb, + ksf, + ksh, + ks, + ku, + kum, + kut, + kv, + kw, + ky, + lad, + lag, + lah, + la, + lam, + lb, + lez, + lfn, + lg, + lij, + li, + liv, + lkt, + lmo, + ln, + lo, + lol, + loz, + ltg, + lt, + lua, + lui, + lu, + lun, + luo, + lus, + luy, + lv, + lzh, + lzz, + mad, + maf, + mag, + mai, + mak, + man, + mas, + mde, + mdf, + mdr, + men, + mer, + mfe, + mga, + mgh, + mg, + mgo, + mh, + mic, + mi, + min, + mk, + ml, + mnc, + mni, + mn, + moh, + mos, + mrj, + mr, + ms, + mt, + mua, + mul, + mus, + mwl, + mwr, + mwv, + my, + mye, + myv, + mzn, + na, + nan, + nap, + naq, + nb, + nd, + nds, + ne, + new, + ng, + nia, + niu, + njo, + nl_BE, + nl, + nmg, + nnh, + nn, + nog, + non, + no, + nov, + nqo, + nr, + nso, + nus, + nv, + nwc, + nym, + nyn, + ny, + nyo, + nzi, + oc, + oj, + om, + or, + osa, + os, + ota, + pag, + pal, + pam, + pap, + pa, + pau, + pcd, + pdc, + pdt, + peo, + pfl, + phn, + pi, + pl, + pms, + pnt, + pon, + prg, + pro, + ps, + pt_BR, + pt, + pt_PT, + quc, + qug, + qu, + raj, + rap, + rar, + rgn, + rif, + rm, + rn, + rof, + ro_MD, + rom, + root, + ro, + rtm, + rue, + rug, + rup, + ru, + rwk, + rw, + sad, + sah, + sam, + saq, + sa, + sas, + sat, + saz, + sba, + sbp, + scn, + sco, + sc, + sdc, + sd, + see, + seh, + sei, + sel, + se, + ses, + sga, + sg, + sgs, + shi, + shn, + sh, + shu, + sid, + si, + sk, + sli, + sl, + sly, + sma, + smj, + smn, + sm, + sms, + snk, + sn, + sog, + so, + sq, + srn, + srr, + sr, + ss, + ssy, + stq, + st, + suk, + sus, + su, + sux, + sv, + swb, + swc, + sw, + syc, + syr, + szl, + ta, + tcy, + tem, + teo, + ter, + te, + tet, + tg, + th, + tig, + ti, + tiv, + tkl, + tkr, + tk, + tlh, + tli, + tl, + tly, + tmh, + tn, + tog, + to, + tpi, + tr, + tru, + trv, + tsd, + tsi, + ts, + tt, + ttt, + tum, + tvl, + twq, + tw, + ty, + tyv, + tzm, + udm, + uga, + ug, + uk, + umb, + und, + ur, + uz, + vai, + vec, + vep, + ve, + vi, + vls, + vmf, + vot, + vo, + vro, + vun, + wae, + wal, + war, + was, + wa, + wbp, + wo, + wuu, + xal, + xh, + xmf, + xog, + yao, + yap, + yav, + ybb, + yi, + yo, + yrl, + yue, + zap, + za, + zbl, + zea, + zen, + zgh, + zh_Hans, + zh_Hant, + zh, + zun, + zu, + zxx, + zza, +} + +type Translator = (i18n: InternationalizationAPI) => TranslatedString; + +export function languageNameList( + i18n: InternationalizationAPI, +): SelectUiChoice[] { + return Object.entries(languagesNamesByCode).map(([value, translator]) => ({ + value, + label: translator(i18n), + })); +} + +export const languagesNamesByCode: { [c in LangCode]: Translator } = { + [LangCode.aa]: (i18n) => i18n.str`Afar (aa)`, + [LangCode.ab]: (i18n) => i18n.str`Abkhazian (ab)`, + [LangCode.ace]: (i18n) => i18n.str`Achinese (ace)`, + [LangCode.ach]: (i18n) => i18n.str`Acoli (ach)`, + [LangCode.ada]: (i18n) => i18n.str`Adangme (ada)`, + [LangCode.ady]: (i18n) => i18n.str`Adyghe (ady)`, + [LangCode.ae]: (i18n) => i18n.str`Avestan (ae)`, + [LangCode.aeb]: (i18n) => i18n.str`Tunisian Arabic (aeb)`, + [LangCode.af]: (i18n) => i18n.str`Afrikaans (af)`, + [LangCode.afh]: (i18n) => i18n.str`Afrihili (afh)`, + [LangCode.agq]: (i18n) => i18n.str`Aghem (agq)`, + [LangCode.ain]: (i18n) => i18n.str`Ainu (ain)`, + [LangCode.ak]: (i18n) => i18n.str`Akan (ak)`, + [LangCode.akk]: (i18n) => i18n.str`Akkadian (akk)`, + [LangCode.akz]: (i18n) => i18n.str`Alabama (akz)`, + [LangCode.ale]: (i18n) => i18n.str`Aleut (ale)`, + [LangCode.aln]: (i18n) => i18n.str`Gheg Albanian (aln)`, + [LangCode.alt]: (i18n) => i18n.str`Southern Altai (alt)`, + [LangCode.am]: (i18n) => i18n.str`Amarik (am)`, + [LangCode.an]: (i18n) => i18n.str`Aragonese (an)`, + [LangCode.ang]: (i18n) => i18n.str`Old English (ang)`, + [LangCode.anp]: (i18n) => i18n.str`Angika (anp)`, + [LangCode.ar_001]: (i18n) => i18n.str`Modern Standard Arabic (ar_001)`, + [LangCode.ar]: (i18n) => i18n.str`Arabik (ar)`, + [LangCode.arc]: (i18n) => i18n.str`Aramaic (arc)`, + [LangCode.arn]: (i18n) => i18n.str`Mapuche (arn)`, + [LangCode.aro]: (i18n) => i18n.str`Araona (aro)`, + [LangCode.arp]: (i18n) => i18n.str`Arapaho (arp)`, + [LangCode.arq]: (i18n) => i18n.str`Algerian Arabic (arq)`, + [LangCode.arw]: (i18n) => i18n.str`Arawak (arw)`, + [LangCode.ary]: (i18n) => i18n.str`Moroccan Arabic (ary)`, + [LangCode.arz]: (i18n) => i18n.str`Egyptian Arabic (arz)`, + [LangCode.asa]: (i18n) => i18n.str`Asu (asa)`, + [LangCode.as]: (i18n) => i18n.str`Assamese (as)`, + [LangCode.ase]: (i18n) => i18n.str`American Sign Language (ase)`, + [LangCode.ast]: (i18n) => i18n.str`Asturian (ast)`, + [LangCode.av]: (i18n) => i18n.str`Avaric (av)`, + [LangCode.avk]: (i18n) => i18n.str`Kotava (avk)`, + [LangCode.awa]: (i18n) => i18n.str`Awadhi (awa)`, + [LangCode.ay]: (i18n) => i18n.str`Aymara (ay)`, + [LangCode.az]: (i18n) => i18n.str`Azerbaijani (az)`, + [LangCode.azb]: (i18n) => i18n.str`South Azerbaijani (azb)`, + [LangCode.ba]: (i18n) => i18n.str`Bashkir (ba)`, + [LangCode.bal]: (i18n) => i18n.str`Baluchi (bal)`, + [LangCode.ban]: (i18n) => i18n.str`Balinese (ban)`, + [LangCode.bar]: (i18n) => i18n.str`Bavarian (bar)`, + [LangCode.bas]: (i18n) => i18n.str`Basaa (bas)`, + [LangCode.bax]: (i18n) => i18n.str`Bamun (bax)`, + [LangCode.bbc]: (i18n) => i18n.str`Batak Toba (bbc)`, + [LangCode.bbj]: (i18n) => i18n.str`Ghomala (bbj)`, + [LangCode.be]: (i18n) => i18n.str`Belarus kasa (be)`, + [LangCode.bej]: (i18n) => i18n.str`Beja (bej)`, + [LangCode.bem]: (i18n) => i18n.str`Bemba (bem)`, + [LangCode.bew]: (i18n) => i18n.str`Betawi (bew)`, + [LangCode.bez]: (i18n) => i18n.str`Bena (bez)`, + [LangCode.bfd]: (i18n) => i18n.str`Bafut (bfd)`, + [LangCode.bfq]: (i18n) => i18n.str`Badaga (bfq)`, + [LangCode.bg]: (i18n) => i18n.str`Bɔlgeria kasa (bg)`, + [LangCode.bho]: (i18n) => i18n.str`Bhojpuri (bho)`, + [LangCode.bi]: (i18n) => i18n.str`Bislama (bi)`, + [LangCode.bik]: (i18n) => i18n.str`Bikol (bik)`, + [LangCode.bin]: (i18n) => i18n.str`Bini (bin)`, + [LangCode.bjn]: (i18n) => i18n.str`Banjar (bjn)`, + [LangCode.bkm]: (i18n) => i18n.str`Kom (bkm)`, + [LangCode.bla]: (i18n) => i18n.str`Siksika (bla)`, + [LangCode.bm]: (i18n) => i18n.str`Bambara (bm)`, + [LangCode.bn]: (i18n) => i18n.str`Bengali kasa (bn)`, + [LangCode.bo]: (i18n) => i18n.str`Tibetan (bo)`, + [LangCode.bpy]: (i18n) => i18n.str`Bishnupriya (bpy)`, + [LangCode.bqi]: (i18n) => i18n.str`Bakhtiari (bqi)`, + [LangCode.bra]: (i18n) => i18n.str`Braj (bra)`, + [LangCode.br]: (i18n) => i18n.str`Breton (br)`, + [LangCode.brh]: (i18n) => i18n.str`Brahui (brh)`, + [LangCode.brx]: (i18n) => i18n.str`Bodo (brx)`, + [LangCode.bs]: (i18n) => i18n.str`Bosnian (bs)`, + [LangCode.bss]: (i18n) => i18n.str`Akoose (bss)`, + [LangCode.bua]: (i18n) => i18n.str`Buriat (bua)`, + [LangCode.bug]: (i18n) => i18n.str`Buginese (bug)`, + [LangCode.bum]: (i18n) => i18n.str`Bulu (bum)`, + [LangCode.byn]: (i18n) => i18n.str`Blin (byn)`, + [LangCode.byv]: (i18n) => i18n.str`Medumba (byv)`, + [LangCode.ca]: (i18n) => i18n.str`Catalan (ca)`, + [LangCode.cad]: (i18n) => i18n.str`Caddo (cad)`, + [LangCode.car]: (i18n) => i18n.str`Carib (car)`, + [LangCode.cay]: (i18n) => i18n.str`Cayuga (cay)`, + [LangCode.cch]: (i18n) => i18n.str`Atsam (cch)`, + [LangCode.ceb]: (i18n) => i18n.str`Cebuano (ceb)`, + [LangCode.ce]: (i18n) => i18n.str`Chechen (ce)`, + [LangCode.cgg]: (i18n) => i18n.str`Chiga (cgg)`, + [LangCode.chb]: (i18n) => i18n.str`Chibcha (chb)`, + [LangCode.ch]: (i18n) => i18n.str`Chamorro (ch)`, + [LangCode.chg]: (i18n) => i18n.str`Chagatai (chg)`, + [LangCode.chk]: (i18n) => i18n.str`Chuukese (chk)`, + [LangCode.chm]: (i18n) => i18n.str`Mari (chm)`, + [LangCode.chn]: (i18n) => i18n.str`Chinook Jargon (chn)`, + [LangCode.cho]: (i18n) => i18n.str`Choctaw (cho)`, + [LangCode.chp]: (i18n) => i18n.str`Chipewyan (chp)`, + [LangCode.chr]: (i18n) => i18n.str`Cherokee (chr)`, + [LangCode.chy]: (i18n) => i18n.str`Cheyenne (chy)`, + [LangCode.ckb]: (i18n) => i18n.str`Central Kurdish (ckb)`, + [LangCode.co]: (i18n) => i18n.str`Corsican (co)`, + [LangCode.cop]: (i18n) => i18n.str`Coptic (cop)`, + [LangCode.cps]: (i18n) => i18n.str`Capiznon (cps)`, + [LangCode.cr]: (i18n) => i18n.str`Cree (cr)`, + [LangCode.crh]: (i18n) => i18n.str`Crimean Turkish (crh)`, + [LangCode.csb]: (i18n) => i18n.str`Kashubian (csb)`, + [LangCode.cs]: (i18n) => i18n.str`Kyɛk kasa (cs)`, + [LangCode.cu]: (i18n) => i18n.str`Church Slavic (cu)`, + [LangCode.cv]: (i18n) => i18n.str`Chuvash (cv)`, + [LangCode.cy]: (i18n) => i18n.str`Welsh (cy)`, + [LangCode.da]: (i18n) => i18n.str`Danish (da)`, + [LangCode.dak]: (i18n) => i18n.str`Dakota (dak)`, + [LangCode.dar]: (i18n) => i18n.str`Dargwa (dar)`, + [LangCode.dav]: (i18n) => i18n.str`Taita (dav)`, + [LangCode.de_AT]: (i18n) => i18n.str`Austrian German (de_AT)`, + [LangCode.de_CH]: (i18n) => i18n.str`Swiss High German (de_CH)`, + [LangCode.de]: (i18n) => i18n.str`Gyaaman (de)`, + [LangCode.del]: (i18n) => i18n.str`Delaware (del)`, + [LangCode.den]: (i18n) => i18n.str`Slave (den)`, + [LangCode.dgr]: (i18n) => i18n.str`Dogrib (dgr)`, + [LangCode.din]: (i18n) => i18n.str`Dinka (din)`, + [LangCode.dje]: (i18n) => i18n.str`Zarma (dje)`, + [LangCode.doi]: (i18n) => i18n.str`Dogri (doi)`, + [LangCode.dsb]: (i18n) => i18n.str`Lower Sorbian (dsb)`, + [LangCode.dtp]: (i18n) => i18n.str`Central Dusun (dtp)`, + [LangCode.dua]: (i18n) => i18n.str`Duala (dua)`, + [LangCode.dum]: (i18n) => i18n.str`Middle Dutch (dum)`, + [LangCode.dv]: (i18n) => i18n.str`Divehi (dv)`, + [LangCode.dyo]: (i18n) => i18n.str`Jola-Fonyi (dyo)`, + [LangCode.dyu]: (i18n) => i18n.str`Dyula (dyu)`, + [LangCode.dz]: (i18n) => i18n.str`Dzongkha (dz)`, + [LangCode.dzg]: (i18n) => i18n.str`Dazaga (dzg)`, + [LangCode.ebu]: (i18n) => i18n.str`Embu (ebu)`, + [LangCode.ee]: (i18n) => i18n.str`Ewe (ee)`, + [LangCode.efi]: (i18n) => i18n.str`Efik (efi)`, + [LangCode.egl]: (i18n) => i18n.str`Emilian (egl)`, + [LangCode.egy]: (i18n) => i18n.str`Ancient Egyptian (egy)`, + [LangCode.eka]: (i18n) => i18n.str`Ekajuk (eka)`, + [LangCode.el]: (i18n) => i18n.str`Greek kasa (el)`, + [LangCode.elx]: (i18n) => i18n.str`Elamite (elx)`, + [LangCode.en_AU]: (i18n) => i18n.str`Australian English (en_AU)`, + [LangCode.en]: (i18n) => i18n.str`Borɔfo (en)`, + [LangCode.en_CA]: (i18n) => i18n.str`Canadian English (en_CA)`, + [LangCode.en_GB]: (i18n) => i18n.str`British English (en_GB)`, + [LangCode.enm]: (i18n) => i18n.str`Middle English (enm)`, + [LangCode.en_US]: (i18n) => i18n.str`American English (en_US)`, + [LangCode.eo]: (i18n) => i18n.str`Esperanto (eo)`, + [LangCode.es_419]: (i18n) => i18n.str`Latin American Spanish (es_419)`, + [LangCode.es_ES]: (i18n) => i18n.str`European Spanish (es_ES)`, + [LangCode.es_MX]: (i18n) => i18n.str`Mexican Spanish (es_MX)`, + [LangCode.es]: (i18n) => i18n.str`Spain kasa (es)`, + [LangCode.esu]: (i18n) => i18n.str`Central Yupik (esu)`, + [LangCode.et]: (i18n) => i18n.str`Estonian (et)`, + [LangCode.eu]: (i18n) => i18n.str`Basque (eu)`, + [LangCode.ewo]: (i18n) => i18n.str`Ewondo (ewo)`, + [LangCode.ext]: (i18n) => i18n.str`Extremaduran (ext)`, + [LangCode.fan]: (i18n) => i18n.str`Fang (fan)`, + [LangCode.fa]: (i18n) => i18n.str`Pɛɛhyia kasa (fa)`, + [LangCode.fat]: (i18n) => i18n.str`Fanti (fat)`, + [LangCode.ff]: (i18n) => i18n.str`Fulah (ff)`, + [LangCode.fi]: (i18n) => i18n.str`Finnish (fi)`, + [LangCode.fil]: (i18n) => i18n.str`Filipino (fil)`, + [LangCode.fit]: (i18n) => i18n.str`Tornedalen Finnish (fit)`, + [LangCode.fj]: (i18n) => i18n.str`Fijian (fj)`, + [LangCode.fo]: (i18n) => i18n.str`Faroese (fo)`, + [LangCode.fon]: (i18n) => i18n.str`Fon (fon)`, + [LangCode.fr_CA]: (i18n) => i18n.str`Canadian French (fr_CA)`, + [LangCode.frc]: (i18n) => i18n.str`Cajun French (frc)`, + [LangCode.fr_CH]: (i18n) => i18n.str`Swiss French (fr_CH)`, + [LangCode.fr]: (i18n) => i18n.str`Frɛnkye (fr)`, + [LangCode.frm]: (i18n) => i18n.str`Middle French (frm)`, + [LangCode.fro]: (i18n) => i18n.str`Old French (fro)`, + [LangCode.frp]: (i18n) => i18n.str`Arpitan (frp)`, + [LangCode.frr]: (i18n) => i18n.str`Northern Frisian (frr)`, + [LangCode.frs]: (i18n) => i18n.str`Eastern Frisian (frs)`, + [LangCode.fur]: (i18n) => i18n.str`Friulian (fur)`, + [LangCode.fy]: (i18n) => i18n.str`Western Frisian (fy)`, + [LangCode.gaa]: (i18n) => i18n.str`Ga (gaa)`, + [LangCode.gag]: (i18n) => i18n.str`Gagauz (gag)`, + [LangCode.ga]: (i18n) => i18n.str`Irish (ga)`, + [LangCode.gan]: (i18n) => i18n.str`Gan Chinese (gan)`, + [LangCode.gay]: (i18n) => i18n.str`Gayo (gay)`, + [LangCode.gba]: (i18n) => i18n.str`Gbaya (gba)`, + [LangCode.gbz]: (i18n) => i18n.str`Zoroastrian Dari (gbz)`, + [LangCode.gd]: (i18n) => i18n.str`Scottish Gaelic (gd)`, + [LangCode.gez]: (i18n) => i18n.str`Geez (gez)`, + [LangCode.gil]: (i18n) => i18n.str`Gilbertese (gil)`, + [LangCode.gl]: (i18n) => i18n.str`Galician (gl)`, + [LangCode.glk]: (i18n) => i18n.str`Gilaki (glk)`, + [LangCode.gmh]: (i18n) => i18n.str`Middle High German (gmh)`, + [LangCode.gn]: (i18n) => i18n.str`Guarani (gn)`, + [LangCode.goh]: (i18n) => i18n.str`Old High German (goh)`, + [LangCode.gom]: (i18n) => i18n.str`Goan Konkani (gom)`, + [LangCode.gon]: (i18n) => i18n.str`Gondi (gon)`, + [LangCode.gor]: (i18n) => i18n.str`Gorontalo (gor)`, + [LangCode.got]: (i18n) => i18n.str`Gothic (got)`, + [LangCode.grb]: (i18n) => i18n.str`Grebo (grb)`, + [LangCode.grc]: (i18n) => i18n.str`Ancient Greek (grc)`, + [LangCode.gsw]: (i18n) => i18n.str`Swiss German (gsw)`, + [LangCode.guc]: (i18n) => i18n.str`Wayuu (guc)`, + [LangCode.gu]: (i18n) => i18n.str`Gujarati (gu)`, + [LangCode.gur]: (i18n) => i18n.str`Frafra (gur)`, + [LangCode.guz]: (i18n) => i18n.str`Gusii (guz)`, + [LangCode.gv]: (i18n) => i18n.str`Manx (gv)`, + [LangCode.gwi]: (i18n) => i18n.str`Gwichʼin (gwi)`, + [LangCode.ha]: (i18n) => i18n.str`Hausa (ha)`, + [LangCode.hai]: (i18n) => i18n.str`Haida (hai)`, + [LangCode.hak]: (i18n) => i18n.str`Hakka Chinese (hak)`, + [LangCode.haw]: (i18n) => i18n.str`Hawaiian (haw)`, + [LangCode.he]: (i18n) => i18n.str`Hebrew (he)`, + [LangCode.hif]: (i18n) => i18n.str`Fiji Hindi (hif)`, + [LangCode.hi]: (i18n) => i18n.str`Hindi (hi)`, + [LangCode.hil]: (i18n) => i18n.str`Hiligaynon (hil)`, + [LangCode.hit]: (i18n) => i18n.str`Hittite (hit)`, + [LangCode.hmn]: (i18n) => i18n.str`Hmong (hmn)`, + [LangCode.ho]: (i18n) => i18n.str`Hiri Motu (ho)`, + [LangCode.hr]: (i18n) => i18n.str`Croatian (hr)`, + [LangCode.hsb]: (i18n) => i18n.str`Upper Sorbian (hsb)`, + [LangCode.hsn]: (i18n) => i18n.str`Xiang Chinese (hsn)`, + [LangCode.ht]: (i18n) => i18n.str`Haitian (ht)`, + [LangCode.hu]: (i18n) => i18n.str`Hangri kasa (hu)`, + [LangCode.hup]: (i18n) => i18n.str`Hupa (hup)`, + [LangCode.hy]: (i18n) => i18n.str`Armenian (hy)`, + [LangCode.hz]: (i18n) => i18n.str`Herero (hz)`, + [LangCode.ia]: (i18n) => i18n.str`Interlingua (ia)`, + [LangCode.iba]: (i18n) => i18n.str`Iban (iba)`, + [LangCode.ibb]: (i18n) => i18n.str`Ibibio (ibb)`, + [LangCode.id]: (i18n) => i18n.str`Indonihyia kasa (id)`, + [LangCode.ie]: (i18n) => i18n.str`Interlingue (ie)`, + [LangCode.ig]: (i18n) => i18n.str`Igbo (ig)`, + [LangCode.ii]: (i18n) => i18n.str`Sichuan Yi (ii)`, + [LangCode.ik]: (i18n) => i18n.str`Inupiaq (ik)`, + [LangCode.ilo]: (i18n) => i18n.str`Iloko (ilo)`, + [LangCode.inh]: (i18n) => i18n.str`Ingush (inh)`, + [LangCode.io]: (i18n) => i18n.str`Ido (io)`, + [LangCode.is]: (i18n) => i18n.str`Icelandic (is)`, + [LangCode.it]: (i18n) => i18n.str`Italy kasa (it)`, + [LangCode.iu]: (i18n) => i18n.str`Inuktitut (iu)`, + [LangCode.izh]: (i18n) => i18n.str`Ingrian (izh)`, + [LangCode.ja]: (i18n) => i18n.str`Gyapan kasa (ja)`, + [LangCode.jam]: (i18n) => i18n.str`Jamaican Creole English (jam)`, + [LangCode.jbo]: (i18n) => i18n.str`Lojban (jbo)`, + [LangCode.jgo]: (i18n) => i18n.str`Ngomba (jgo)`, + [LangCode.jmc]: (i18n) => i18n.str`Machame (jmc)`, + [LangCode.jpr]: (i18n) => i18n.str`Judeo-Persian (jpr)`, + [LangCode.jrb]: (i18n) => i18n.str`Judeo-Arabic (jrb)`, + [LangCode.jut]: (i18n) => i18n.str`Jutish (jut)`, + [LangCode.jv]: (i18n) => i18n.str`Gyabanis kasa (jv)`, + [LangCode.kaa]: (i18n) => i18n.str`Kara-Kalpak (kaa)`, + [LangCode.kab]: (i18n) => i18n.str`Kabyle (kab)`, + [LangCode.kac]: (i18n) => i18n.str`Kachin (kac)`, + [LangCode.ka]: (i18n) => i18n.str`Georgian (ka)`, + [LangCode.kaj]: (i18n) => i18n.str`Jju (kaj)`, + [LangCode.kam]: (i18n) => i18n.str`Kamba (kam)`, + [LangCode.kaw]: (i18n) => i18n.str`Kawi (kaw)`, + [LangCode.kbd]: (i18n) => i18n.str`Kabardian (kbd)`, + [LangCode.kbl]: (i18n) => i18n.str`Kanembu (kbl)`, + [LangCode.kcg]: (i18n) => i18n.str`Tyap (kcg)`, + [LangCode.kde]: (i18n) => i18n.str`Makonde (kde)`, + [LangCode.kea]: (i18n) => i18n.str`Kabuverdianu (kea)`, + [LangCode.ken]: (i18n) => i18n.str`Kenyang (ken)`, + [LangCode.kfo]: (i18n) => i18n.str`Koro (kfo)`, + [LangCode.kg]: (i18n) => i18n.str`Kongo (kg)`, + [LangCode.kgp]: (i18n) => i18n.str`Kaingang (kgp)`, + [LangCode.kha]: (i18n) => i18n.str`Khasi (kha)`, + [LangCode.kho]: (i18n) => i18n.str`Khotanese (kho)`, + [LangCode.khq]: (i18n) => i18n.str`Koyra Chiini (khq)`, + [LangCode.khw]: (i18n) => i18n.str`Khowar (khw)`, + [LangCode.ki]: (i18n) => i18n.str`Kikuyu (ki)`, + [LangCode.kiu]: (i18n) => i18n.str`Kirmanjki (kiu)`, + [LangCode.kj]: (i18n) => i18n.str`Kuanyama (kj)`, + [LangCode.kkj]: (i18n) => i18n.str`Kako (kkj)`, + [LangCode.kk]: (i18n) => i18n.str`Kazakh (kk)`, + [LangCode.kl]: (i18n) => i18n.str`Kalaallisut (kl)`, + [LangCode.kln]: (i18n) => i18n.str`Kalenjin (kln)`, + [LangCode.kmb]: (i18n) => i18n.str`Kimbundu (kmb)`, + [LangCode.km]: (i18n) => i18n.str`Kambodia kasa (km)`, + [LangCode.kn]: (i18n) => i18n.str`Kannada (kn)`, + [LangCode.koi]: (i18n) => i18n.str`Komi-Permyak (koi)`, + [LangCode.kok]: (i18n) => i18n.str`Konkani (kok)`, + [LangCode.ko]: (i18n) => i18n.str`Korea kasa (ko)`, + [LangCode.kos]: (i18n) => i18n.str`Kosraean (kos)`, + [LangCode.kpe]: (i18n) => i18n.str`Kpelle (kpe)`, + [LangCode.krc]: (i18n) => i18n.str`Karachay-Balkar (krc)`, + [LangCode.kri]: (i18n) => i18n.str`Krio (kri)`, + [LangCode.krj]: (i18n) => i18n.str`Kinaray-a (krj)`, + [LangCode.kr]: (i18n) => i18n.str`Kanuri (kr)`, + [LangCode.krl]: (i18n) => i18n.str`Karelian (krl)`, + [LangCode.kru]: (i18n) => i18n.str`Kurukh (kru)`, + [LangCode.ksb]: (i18n) => i18n.str`Shambala (ksb)`, + [LangCode.ksf]: (i18n) => i18n.str`Bafia (ksf)`, + [LangCode.ksh]: (i18n) => i18n.str`Colognian (ksh)`, + [LangCode.ks]: (i18n) => i18n.str`Kashmiri (ks)`, + [LangCode.ku]: (i18n) => i18n.str`Kurdish (ku)`, + [LangCode.kum]: (i18n) => i18n.str`Kumyk (kum)`, + [LangCode.kut]: (i18n) => i18n.str`Kutenai (kut)`, + [LangCode.kv]: (i18n) => i18n.str`Komi (kv)`, + [LangCode.kw]: (i18n) => i18n.str`Cornish (kw)`, + [LangCode.ky]: (i18n) => i18n.str`Kyrgyz (ky)`, + [LangCode.lad]: (i18n) => i18n.str`Ladino (lad)`, + [LangCode.lag]: (i18n) => i18n.str`Langi (lag)`, + [LangCode.lah]: (i18n) => i18n.str`Lahnda (lah)`, + [LangCode.la]: (i18n) => i18n.str`Latin (la)`, + [LangCode.lam]: (i18n) => i18n.str`Lamba (lam)`, + [LangCode.lb]: (i18n) => i18n.str`Luxembourgish (lb)`, + [LangCode.lez]: (i18n) => i18n.str`Lezghian (lez)`, + [LangCode.lfn]: (i18n) => i18n.str`Lingua Franca Nova (lfn)`, + [LangCode.lg]: (i18n) => i18n.str`Ganda (lg)`, + [LangCode.lij]: (i18n) => i18n.str`Ligurian (lij)`, + [LangCode.li]: (i18n) => i18n.str`Limburgish (li)`, + [LangCode.liv]: (i18n) => i18n.str`Livonian (liv)`, + [LangCode.lkt]: (i18n) => i18n.str`Lakota (lkt)`, + [LangCode.lmo]: (i18n) => i18n.str`Lombard (lmo)`, + [LangCode.ln]: (i18n) => i18n.str`Lingala (ln)`, + [LangCode.lo]: (i18n) => i18n.str`Lao (lo)`, + [LangCode.lol]: (i18n) => i18n.str`Mongo (lol)`, + [LangCode.loz]: (i18n) => i18n.str`Lozi (loz)`, + [LangCode.ltg]: (i18n) => i18n.str`Latgalian (ltg)`, + [LangCode.lt]: (i18n) => i18n.str`Lithuanian (lt)`, + [LangCode.lua]: (i18n) => i18n.str`Luba-Lulua (lua)`, + [LangCode.lui]: (i18n) => i18n.str`Luiseno (lui)`, + [LangCode.lu]: (i18n) => i18n.str`Luba-Katanga (lu)`, + [LangCode.lun]: (i18n) => i18n.str`Lunda (lun)`, + [LangCode.luo]: (i18n) => i18n.str`Luo (luo)`, + [LangCode.lus]: (i18n) => i18n.str`Mizo (lus)`, + [LangCode.luy]: (i18n) => i18n.str`Luyia (luy)`, + [LangCode.lv]: (i18n) => i18n.str`Latvian (lv)`, + [LangCode.lzh]: (i18n) => i18n.str`Literary Chinese (lzh)`, + [LangCode.lzz]: (i18n) => i18n.str`Laz (lzz)`, + [LangCode.mad]: (i18n) => i18n.str`Madurese (mad)`, + [LangCode.maf]: (i18n) => i18n.str`Mafa (maf)`, + [LangCode.mag]: (i18n) => i18n.str`Magahi (mag)`, + [LangCode.mai]: (i18n) => i18n.str`Maithili (mai)`, + [LangCode.mak]: (i18n) => i18n.str`Makasar (mak)`, + [LangCode.man]: (i18n) => i18n.str`Mandingo (man)`, + [LangCode.mas]: (i18n) => i18n.str`Masai (mas)`, + [LangCode.mde]: (i18n) => i18n.str`Maba (mde)`, + [LangCode.mdf]: (i18n) => i18n.str`Moksha (mdf)`, + [LangCode.mdr]: (i18n) => i18n.str`Mandar (mdr)`, + [LangCode.men]: (i18n) => i18n.str`Mende (men)`, + [LangCode.mer]: (i18n) => i18n.str`Meru (mer)`, + [LangCode.mfe]: (i18n) => i18n.str`Morisyen (mfe)`, + [LangCode.mga]: (i18n) => i18n.str`Middle Irish (mga)`, + [LangCode.mgh]: (i18n) => i18n.str`Makhuwa-Meetto (mgh)`, + [LangCode.mg]: (i18n) => i18n.str`Malagasy (mg)`, + [LangCode.mgo]: (i18n) => i18n.str`Metaʼ (mgo)`, + [LangCode.mh]: (i18n) => i18n.str`Marshallese (mh)`, + [LangCode.mic]: (i18n) => i18n.str`Micmac (mic)`, + [LangCode.mi]: (i18n) => i18n.str`Maori (mi)`, + [LangCode.min]: (i18n) => i18n.str`Minangkabau (min)`, + [LangCode.mk]: (i18n) => i18n.str`Macedonian (mk)`, + [LangCode.ml]: (i18n) => i18n.str`Malayalam (ml)`, + [LangCode.mnc]: (i18n) => i18n.str`Manchu (mnc)`, + [LangCode.mni]: (i18n) => i18n.str`Manipuri (mni)`, + [LangCode.mn]: (i18n) => i18n.str`Mongolian (mn)`, + [LangCode.moh]: (i18n) => i18n.str`Mohawk (moh)`, + [LangCode.mos]: (i18n) => i18n.str`Mossi (mos)`, + [LangCode.mrj]: (i18n) => i18n.str`Western Mari (mrj)`, + [LangCode.mr]: (i18n) => i18n.str`Marathi (mr)`, + [LangCode.ms]: (i18n) => i18n.str`Malay kasa (ms)`, + [LangCode.mt]: (i18n) => i18n.str`Maltese (mt)`, + [LangCode.mua]: (i18n) => i18n.str`Mundang (mua)`, + [LangCode.mul]: (i18n) => i18n.str`Multiple Languages (mul)`, + [LangCode.mus]: (i18n) => i18n.str`Creek (mus)`, + [LangCode.mwl]: (i18n) => i18n.str`Mirandese (mwl)`, + [LangCode.mwr]: (i18n) => i18n.str`Marwari (mwr)`, + [LangCode.mwv]: (i18n) => i18n.str`Mentawai (mwv)`, + [LangCode.my]: (i18n) => i18n.str`Bɛɛmis kasa (my)`, + [LangCode.mye]: (i18n) => i18n.str`Myene (mye)`, + [LangCode.myv]: (i18n) => i18n.str`Erzya (myv)`, + [LangCode.mzn]: (i18n) => i18n.str`Mazanderani (mzn)`, + [LangCode.na]: (i18n) => i18n.str`Nauru (na)`, + [LangCode.nan]: (i18n) => i18n.str`Min Nan Chinese (nan)`, + [LangCode.nap]: (i18n) => i18n.str`Neapolitan (nap)`, + [LangCode.naq]: (i18n) => i18n.str`Nama (naq)`, + [LangCode.nb]: (i18n) => i18n.str`Norwegian Bokmål (nb)`, + [LangCode.nd]: (i18n) => i18n.str`North Ndebele (nd)`, + [LangCode.nds]: (i18n) => i18n.str`Low German (nds)`, + [LangCode.ne]: (i18n) => i18n.str`Nɛpal kasa (ne)`, + [LangCode.new]: (i18n) => i18n.str`Newari (new)`, + [LangCode.ng]: (i18n) => i18n.str`Ndonga (ng)`, + [LangCode.nia]: (i18n) => i18n.str`Nias (nia)`, + [LangCode.niu]: (i18n) => i18n.str`Niuean (niu)`, + [LangCode.njo]: (i18n) => i18n.str`Ao Naga (njo)`, + [LangCode.nl_BE]: (i18n) => i18n.str`Flemish (nl_BE)`, + [LangCode.nl]: (i18n) => i18n.str`Dɛɛkye (nl)`, + [LangCode.nmg]: (i18n) => i18n.str`Kwasio (nmg)`, + [LangCode.nnh]: (i18n) => i18n.str`Ngiemboon (nnh)`, + [LangCode.nn]: (i18n) => i18n.str`Norwegian Nynorsk (nn)`, + [LangCode.nog]: (i18n) => i18n.str`Nogai (nog)`, + [LangCode.non]: (i18n) => i18n.str`Old Norse (non)`, + [LangCode.no]: (i18n) => i18n.str`Norwegian (no)`, + [LangCode.nov]: (i18n) => i18n.str`Novial (nov)`, + [LangCode.nqo]: (i18n) => i18n.str`NʼKo (nqo)`, + [LangCode.nr]: (i18n) => i18n.str`South Ndebele (nr)`, + [LangCode.nso]: (i18n) => i18n.str`Northern Sotho (nso)`, + [LangCode.nus]: (i18n) => i18n.str`Nuer (nus)`, + [LangCode.nv]: (i18n) => i18n.str`Navajo (nv)`, + [LangCode.nwc]: (i18n) => i18n.str`Classical Newari (nwc)`, + [LangCode.nym]: (i18n) => i18n.str`Nyamwezi (nym)`, + [LangCode.nyn]: (i18n) => i18n.str`Nyankole (nyn)`, + [LangCode.ny]: (i18n) => i18n.str`Nyanja (ny)`, + [LangCode.nyo]: (i18n) => i18n.str`Nyoro (nyo)`, + [LangCode.nzi]: (i18n) => i18n.str`Nzima (nzi)`, + [LangCode.oc]: (i18n) => i18n.str`Occitan (oc)`, + [LangCode.oj]: (i18n) => i18n.str`Ojibwa (oj)`, + [LangCode.om]: (i18n) => i18n.str`Oromo (om)`, + [LangCode.or]: (i18n) => i18n.str`Oriya (or)`, + [LangCode.osa]: (i18n) => i18n.str`Osage (osa)`, + [LangCode.os]: (i18n) => i18n.str`Ossetic (os)`, + [LangCode.ota]: (i18n) => i18n.str`Ottoman Turkish (ota)`, + [LangCode.pag]: (i18n) => i18n.str`Pangasinan (pag)`, + [LangCode.pal]: (i18n) => i18n.str`Pahlavi (pal)`, + [LangCode.pam]: (i18n) => i18n.str`Pampanga (pam)`, + [LangCode.pap]: (i18n) => i18n.str`Papiamento (pap)`, + [LangCode.pa]: (i18n) => i18n.str`Pungyabi kasa (pa)`, + [LangCode.pau]: (i18n) => i18n.str`Palauan (pau)`, + [LangCode.pcd]: (i18n) => i18n.str`Picard (pcd)`, + [LangCode.pdc]: (i18n) => i18n.str`Pennsylvania German (pdc)`, + [LangCode.pdt]: (i18n) => i18n.str`Plautdietsch (pdt)`, + [LangCode.peo]: (i18n) => i18n.str`Old Persian (peo)`, + [LangCode.pfl]: (i18n) => i18n.str`Palatine German (pfl)`, + [LangCode.phn]: (i18n) => i18n.str`Phoenician (phn)`, + [LangCode.pi]: (i18n) => i18n.str`Pali (pi)`, + [LangCode.pl]: (i18n) => i18n.str`Pɔland kasa (pl)`, + [LangCode.pms]: (i18n) => i18n.str`Piedmontese (pms)`, + [LangCode.pnt]: (i18n) => i18n.str`Pontic (pnt)`, + [LangCode.pon]: (i18n) => i18n.str`Pohnpeian (pon)`, + [LangCode.prg]: (i18n) => i18n.str`Prussian (prg)`, + [LangCode.pro]: (i18n) => i18n.str`Old Provençal (pro)`, + [LangCode.ps]: (i18n) => i18n.str`Pashto (ps)`, + [LangCode.pt_BR]: (i18n) => i18n.str`Brazilian Portuguese (pt_BR)`, + [LangCode.pt]: (i18n) => i18n.str`Pɔɔtugal kasa (pt)`, + [LangCode.pt_PT]: (i18n) => i18n.str`European Portuguese (pt_PT)`, + [LangCode.quc]: (i18n) => i18n.str`Kʼicheʼ (quc)`, + [LangCode.qug]: (i18n) => i18n.str`Chimborazo Highland Quichua (qug)`, + [LangCode.qu]: (i18n) => i18n.str`Quechua (qu)`, + [LangCode.raj]: (i18n) => i18n.str`Rajasthani (raj)`, + [LangCode.rap]: (i18n) => i18n.str`Rapanui (rap)`, + [LangCode.rar]: (i18n) => i18n.str`Rarotongan (rar)`, + [LangCode.rgn]: (i18n) => i18n.str`Romagnol (rgn)`, + [LangCode.rif]: (i18n) => i18n.str`Riffian (rif)`, + [LangCode.rm]: (i18n) => i18n.str`Romansh (rm)`, + [LangCode.rn]: (i18n) => i18n.str`Rundi (rn)`, + [LangCode.rof]: (i18n) => i18n.str`Rombo (rof)`, + [LangCode.ro_MD]: (i18n) => i18n.str`Moldavian (ro_MD)`, + [LangCode.rom]: (i18n) => i18n.str`Romany (rom)`, + [LangCode.root]: (i18n) => i18n.str`Root (root)`, + [LangCode.ro]: (i18n) => i18n.str`Romenia kasa (ro)`, + [LangCode.rtm]: (i18n) => i18n.str`Rotuman (rtm)`, + [LangCode.rue]: (i18n) => i18n.str`Rusyn (rue)`, + [LangCode.rug]: (i18n) => i18n.str`Roviana (rug)`, + [LangCode.rup]: (i18n) => i18n.str`Aromanian (rup)`, + [LangCode.ru]: (i18n) => i18n.str`Rahyia kasa (ru)`, + [LangCode.rwk]: (i18n) => i18n.str`Rwa (rwk)`, + [LangCode.rw]: (i18n) => i18n.str`Rewanda kasa (rw)`, + [LangCode.sad]: (i18n) => i18n.str`Sandawe (sad)`, + [LangCode.sah]: (i18n) => i18n.str`Sakha (sah)`, + [LangCode.sam]: (i18n) => i18n.str`Samaritan Aramaic (sam)`, + [LangCode.saq]: (i18n) => i18n.str`Samburu (saq)`, + [LangCode.sa]: (i18n) => i18n.str`Sanskrit (sa)`, + [LangCode.sas]: (i18n) => i18n.str`Sasak (sas)`, + [LangCode.sat]: (i18n) => i18n.str`Santali (sat)`, + [LangCode.saz]: (i18n) => i18n.str`Saurashtra (saz)`, + [LangCode.sba]: (i18n) => i18n.str`Ngambay (sba)`, + [LangCode.sbp]: (i18n) => i18n.str`Sangu (sbp)`, + [LangCode.scn]: (i18n) => i18n.str`Sicilian (scn)`, + [LangCode.sco]: (i18n) => i18n.str`Scots (sco)`, + [LangCode.sc]: (i18n) => i18n.str`Sardinian (sc)`, + [LangCode.sdc]: (i18n) => i18n.str`Sassarese Sardinian (sdc)`, + [LangCode.sd]: (i18n) => i18n.str`Sindhi (sd)`, + [LangCode.see]: (i18n) => i18n.str`Seneca (see)`, + [LangCode.seh]: (i18n) => i18n.str`Sena (seh)`, + [LangCode.sei]: (i18n) => i18n.str`Seri (sei)`, + [LangCode.sel]: (i18n) => i18n.str`Selkup (sel)`, + [LangCode.se]: (i18n) => i18n.str`Northern Sami (se)`, + [LangCode.ses]: (i18n) => i18n.str`Koyraboro Senni (ses)`, + [LangCode.sga]: (i18n) => i18n.str`Old Irish (sga)`, + [LangCode.sg]: (i18n) => i18n.str`Sango (sg)`, + [LangCode.sgs]: (i18n) => i18n.str`Samogitian (sgs)`, + [LangCode.shi]: (i18n) => i18n.str`Tachelhit (shi)`, + [LangCode.shn]: (i18n) => i18n.str`Shan (shn)`, + [LangCode.sh]: (i18n) => i18n.str`Serbo-Croatian (sh)`, + [LangCode.shu]: (i18n) => i18n.str`Chadian Arabic (shu)`, + [LangCode.sid]: (i18n) => i18n.str`Sidamo (sid)`, + [LangCode.si]: (i18n) => i18n.str`Sinhala (si)`, + [LangCode.sk]: (i18n) => i18n.str`Slovak (sk)`, + [LangCode.sli]: (i18n) => i18n.str`Lower Silesian (sli)`, + [LangCode.sl]: (i18n) => i18n.str`Slovenian (sl)`, + [LangCode.sly]: (i18n) => i18n.str`Selayar (sly)`, + [LangCode.sma]: (i18n) => i18n.str`Southern Sami (sma)`, + [LangCode.smj]: (i18n) => i18n.str`Lule Sami (smj)`, + [LangCode.smn]: (i18n) => i18n.str`Inari Sami (smn)`, + [LangCode.sm]: (i18n) => i18n.str`Samoan (sm)`, + [LangCode.sms]: (i18n) => i18n.str`Skolt Sami (sms)`, + [LangCode.snk]: (i18n) => i18n.str`Soninke (snk)`, + [LangCode.sn]: (i18n) => i18n.str`Shona (sn)`, + [LangCode.sog]: (i18n) => i18n.str`Sogdien (sog)`, + [LangCode.so]: (i18n) => i18n.str`Somalia kasa (so)`, + [LangCode.sq]: (i18n) => i18n.str`Albanian (sq)`, + [LangCode.srn]: (i18n) => i18n.str`Sranan Tongo (srn)`, + [LangCode.srr]: (i18n) => i18n.str`Serer (srr)`, + [LangCode.sr]: (i18n) => i18n.str`Serbian (sr)`, + [LangCode.ss]: (i18n) => i18n.str`Swati (ss)`, + [LangCode.ssy]: (i18n) => i18n.str`Saho (ssy)`, + [LangCode.stq]: (i18n) => i18n.str`Saterland Frisian (stq)`, + [LangCode.st]: (i18n) => i18n.str`Southern Sotho (st)`, + [LangCode.suk]: (i18n) => i18n.str`Sukuma (suk)`, + [LangCode.sus]: (i18n) => i18n.str`Susu (sus)`, + [LangCode.su]: (i18n) => i18n.str`Sundanese (su)`, + [LangCode.sux]: (i18n) => i18n.str`Sumerian (sux)`, + [LangCode.sv]: (i18n) => i18n.str`Sweden kasa (sv)`, + [LangCode.swb]: (i18n) => i18n.str`Comorian (swb)`, + [LangCode.swc]: (i18n) => i18n.str`Congo Swahili (swc)`, + [LangCode.sw]: (i18n) => i18n.str`Swahili (sw)`, + [LangCode.syc]: (i18n) => i18n.str`Classical Syriac (syc)`, + [LangCode.syr]: (i18n) => i18n.str`Syriac (syr)`, + [LangCode.szl]: (i18n) => i18n.str`Silesian (szl)`, + [LangCode.ta]: (i18n) => i18n.str`Tamil kasa (ta)`, + [LangCode.tcy]: (i18n) => i18n.str`Tulu (tcy)`, + [LangCode.tem]: (i18n) => i18n.str`Timne (tem)`, + [LangCode.teo]: (i18n) => i18n.str`Teso (teo)`, + [LangCode.ter]: (i18n) => i18n.str`Tereno (ter)`, + [LangCode.te]: (i18n) => i18n.str`Telugu (te)`, + [LangCode.tet]: (i18n) => i18n.str`Tetum (tet)`, + [LangCode.tg]: (i18n) => i18n.str`Tajik (tg)`, + [LangCode.th]: (i18n) => i18n.str`Taeland kasa (th)`, + [LangCode.tig]: (i18n) => i18n.str`Tigre (tig)`, + [LangCode.ti]: (i18n) => i18n.str`Tigrinya (ti)`, + [LangCode.tiv]: (i18n) => i18n.str`Tiv (tiv)`, + [LangCode.tkl]: (i18n) => i18n.str`Tokelau (tkl)`, + [LangCode.tkr]: (i18n) => i18n.str`Tsakhur (tkr)`, + [LangCode.tk]: (i18n) => i18n.str`Turkmen (tk)`, + [LangCode.tlh]: (i18n) => i18n.str`Klingon (tlh)`, + [LangCode.tli]: (i18n) => i18n.str`Tlingit (tli)`, + [LangCode.tl]: (i18n) => i18n.str`Tagalog (tl)`, + [LangCode.tly]: (i18n) => i18n.str`Talysh (tly)`, + [LangCode.tmh]: (i18n) => i18n.str`Tamashek (tmh)`, + [LangCode.tn]: (i18n) => i18n.str`Tswana (tn)`, + [LangCode.tog]: (i18n) => i18n.str`Nyasa Tonga (tog)`, + [LangCode.to]: (i18n) => i18n.str`Tongan (to)`, + [LangCode.tpi]: (i18n) => i18n.str`Tok Pisin (tpi)`, + [LangCode.tr]: (i18n) => i18n.str`Tɛɛki kasa (tr)`, + [LangCode.tru]: (i18n) => i18n.str`Turoyo (tru)`, + [LangCode.trv]: (i18n) => i18n.str`Taroko (trv)`, + [LangCode.tsd]: (i18n) => i18n.str`Tsakonian (tsd)`, + [LangCode.tsi]: (i18n) => i18n.str`Tsimshian (tsi)`, + [LangCode.ts]: (i18n) => i18n.str`Tsonga (ts)`, + [LangCode.tt]: (i18n) => i18n.str`Tatar (tt)`, + [LangCode.ttt]: (i18n) => i18n.str`Muslim Tat (ttt)`, + [LangCode.tum]: (i18n) => i18n.str`Tumbuka (tum)`, + [LangCode.tvl]: (i18n) => i18n.str`Tuvalu (tvl)`, + [LangCode.twq]: (i18n) => i18n.str`Tasawaq (twq)`, + [LangCode.tw]: (i18n) => i18n.str`Twi (tw)`, + [LangCode.ty]: (i18n) => i18n.str`Tahitian (ty)`, + [LangCode.tyv]: (i18n) => i18n.str`Tuvinian (tyv)`, + [LangCode.tzm]: (i18n) => i18n.str`Central Atlas Tamazight (tzm)`, + [LangCode.udm]: (i18n) => i18n.str`Udmurt (udm)`, + [LangCode.uga]: (i18n) => i18n.str`Ugaritic (uga)`, + [LangCode.ug]: (i18n) => i18n.str`Uyghur (ug)`, + [LangCode.uk]: (i18n) => i18n.str`Ukren kasa (uk)`, + [LangCode.umb]: (i18n) => i18n.str`Umbundu (umb)`, + [LangCode.und]: (i18n) => i18n.str`Unknown Language (und)`, + [LangCode.ur]: (i18n) => i18n.str`Urdu kasa (ur)`, + [LangCode.uz]: (i18n) => i18n.str`Uzbek (uz)`, + [LangCode.vai]: (i18n) => i18n.str`Vai (vai)`, + [LangCode.vec]: (i18n) => i18n.str`Venetian (vec)`, + [LangCode.vep]: (i18n) => i18n.str`Veps (vep)`, + [LangCode.ve]: (i18n) => i18n.str`Venda (ve)`, + [LangCode.vi]: (i18n) => i18n.str`Viɛtnam kasa (vi)`, + [LangCode.vls]: (i18n) => i18n.str`West Flemish (vls)`, + [LangCode.vmf]: (i18n) => i18n.str`Main-Franconian (vmf)`, + [LangCode.vot]: (i18n) => i18n.str`Votic (vot)`, + [LangCode.vo]: (i18n) => i18n.str`Volapük (vo)`, + [LangCode.vro]: (i18n) => i18n.str`Võro (vro)`, + [LangCode.vun]: (i18n) => i18n.str`Vunjo (vun)`, + [LangCode.wae]: (i18n) => i18n.str`Walser (wae)`, + [LangCode.wal]: (i18n) => i18n.str`Wolaytta (wal)`, + [LangCode.war]: (i18n) => i18n.str`Waray (war)`, + [LangCode.was]: (i18n) => i18n.str`Washo (was)`, + [LangCode.wa]: (i18n) => i18n.str`Walloon (wa)`, + [LangCode.wbp]: (i18n) => i18n.str`Warlpiri (wbp)`, + [LangCode.wo]: (i18n) => i18n.str`Wolof (wo)`, + [LangCode.wuu]: (i18n) => i18n.str`Wu Chinese (wuu)`, + [LangCode.xal]: (i18n) => i18n.str`Kalmyk (xal)`, + [LangCode.xh]: (i18n) => i18n.str`Xhosa (xh)`, + [LangCode.xmf]: (i18n) => i18n.str`Mingrelian (xmf)`, + [LangCode.xog]: (i18n) => i18n.str`Soga (xog)`, + [LangCode.yao]: (i18n) => i18n.str`Yao (yao)`, + [LangCode.yap]: (i18n) => i18n.str`Yapese (yap)`, + [LangCode.yav]: (i18n) => i18n.str`Yangben (yav)`, + [LangCode.ybb]: (i18n) => i18n.str`Yemba (ybb)`, + [LangCode.yi]: (i18n) => i18n.str`Yiddish (yi)`, + [LangCode.yo]: (i18n) => i18n.str`Yoruba (yo)`, + [LangCode.yrl]: (i18n) => i18n.str`Nheengatu (yrl)`, + [LangCode.yue]: (i18n) => i18n.str`Cantonese (yue)`, + [LangCode.zap]: (i18n) => i18n.str`Zapotec (zap)`, + [LangCode.za]: (i18n) => i18n.str`Zhuang (za)`, + [LangCode.zbl]: (i18n) => i18n.str`Blissymbols (zbl)`, + [LangCode.zea]: (i18n) => i18n.str`Zeelandic (zea)`, + [LangCode.zen]: (i18n) => i18n.str`Zenaga (zen)`, + [LangCode.zgh]: (i18n) => i18n.str`Standard Moroccan Tamazight (zgh)`, + [LangCode.zh_Hans]: (i18n) => i18n.str`Simplified Chinese (zh_Hans)`, + [LangCode.zh_Hant]: (i18n) => i18n.str`Traditional Chinese (zh_Hant)`, + [LangCode.zh]: (i18n) => i18n.str`Kyaena kasa (zh)`, + [LangCode.zun]: (i18n) => i18n.str`Zuni (zun)`, + [LangCode.zu]: (i18n) => i18n.str`Zulu (zu)`, + [LangCode.zxx]: (i18n) => i18n.str`No linguistic content (zxx)`, + [LangCode.zza]: (i18n) => i18n.str`Zaza (zza)`, +};