commit 92e29d94391631c7957be409a28e799cba53ab8c
parent 24b120e906d66e1dfd7024dc95926ab0d472adb1
Author: Florian Dold <dold@taler.net>
Date: Thu, 3 Sep 2026 21:05:31 +0200
web-util: use fixed translations directly in VQF forms
Diffstat:
13 files changed, 1310 insertions(+), 787 deletions(-)
diff --git a/packages/web-util/package.json b/packages/web-util/package.json
@@ -68,6 +68,7 @@
},
"pogen": {
"domain": "web-util",
- "requiredLanguages": ["de", "de-CH", "fr", "it"]
+ "requiredLanguages": ["de", "de-CH", "fr", "it"],
+ "minimumCoverage": 80
}
}
diff --git a/packages/web-util/src/forms/gana/VQF_902_11_customer.ts b/packages/web-util/src/forms/gana/VQF_902_11_customer.ts
@@ -2,13 +2,19 @@ import { TalerFormAttributes } from "@gnu-taler/taler-util";
import { format } from "date-fns";
import { InternationalizationAPI } from "../../context/translation.js";
import { DoubleColumnFormDesign, FormMetadata } from "../forms-types.js";
-import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js";
+import { vqfLanguagePolicy } from "./vqf.js";
export const form_vqf_902_11_customer = (
i18n: InternationalizationAPI,
): FormMetadata => ({
- label: i18n.str`Establishing of the controlling person of operating legal entities and partnerships both not quoted on the stock exchange (K)`,
- description: i18n.str`for operating legal entities and partnerships that are contracting partner as well as analogously for operating legal entities and partnership that are beneficial owners`,
+ label: i18n.fixed({
+ en: "Establishing of the controlling person of operating legal entities and partnerships both not quoted on the stock exchange (K)",
+ de: "Feststellung des Kontrollinhabers an nicht börsenkotierten, operativ tätigen juristischen Personen und Personengesellschaften (K)",
+ }),
+ description: i18n.fixed({
+ en: "for operating legal entities and partnerships that are contracting partner as well as analogously for operating legal entities and partnership that are beneficial owners",
+ de: "bei operativ tätigen juristischen Personen und Personengesellschaften als Vertragspartner sowie sinngemäss bei operativ tätigen juristischen Personen und Personengesellschaften als wirtschaftlich Berechtigte",
+ }),
id: "vqf_902_11_customer",
version: 1,
config: VQF_902_11_customer(i18n),
@@ -17,58 +23,96 @@ export const form_vqf_902_11_customer = (
export function VQF_902_11_customer(
i18n: InternationalizationAPI,
): DoubleColumnFormDesign {
- i18n = withVqfTranslations(i18n);
const today = format(new Date(), "yyyy-MM-dd");
return {
type: "double-column",
languagePolicy: vqfLanguagePolicy(i18n),
- title: i18n.str`Establishment of the controlling person (submitted by customer)`,
+ title: i18n.fixed({
+ en: "Establishment of the controlling person (submitted by customer)",
+ de: "Feststellung des Kontrollinhabers (durch den Kunden eingereicht)",
+ }),
sections: [
{
- title: i18n.str`Identity of the contracting partner`,
- description: i18n.str`Name and address`,
+ title: i18n.fixed({
+ en: "Identity of the contracting partner",
+ de: "Identität des Vertragspartners",
+ }),
+ description: i18n.fixed({
+ en: "Name and address",
+ de: "Name und Adresse",
+ }),
fields: [
{
id: TalerFormAttributes.IDENTITY_CONTRACTING_PARTNER,
- label: i18n.str`Contracting partner`,
+ label: i18n.fixed({
+ en: "Contracting partner",
+ de: "Vertragspartner",
+ }),
type: "textArea",
required: true,
},
],
},
{
- title: i18n.str`Controlling person(s)`,
+ title: i18n.fixed({
+ en: "Controlling person(s)",
+ de: "Kontrollinhaber",
+ }),
fields: [
{
id: TalerFormAttributes.CONTROL_REASON,
- label: i18n.str`Reason for control`,
+ label: i18n.fixed({
+ en: "Reason for control",
+ de: "Grund der Kontrolle",
+ }),
type: "choiceStacked",
choices: [
{
value: "HAS_25_MORE_RIGHTS",
- label: i18n.str`Holding 25% or more`,
- description: i18n.str`The person(s) listed below is/are holding 25% or more of the contracting partner's shares (capital shares or voting rights)`,
+ label: i18n.fixed({
+ en: "Holding 25% or more",
+ de: "Halten von 25% oder mehr",
+ }),
+ description: i18n.fixed({
+ en: "The person(s) listed below is/are holding 25% or more of the contracting partner's shares (capital shares or voting rights)",
+ de: "Die nachfolgend aufgeführte(n) Person(en) hält/halten am Vertragspartner Anteile (Kapital- oder Stimmrechtsanteile) von 25% oder mehr",
+ }),
},
{
value: "OTHER_WAY",
- label: i18n.str`Other way`,
- description: i18n.str`If the capital shares or voting rights cannot be determined or in case there are no capital shares or voting rights 25% or more, the contracting partner hereby declares that the person(s) listed below is/are controlling the contracting partner in other ways`,
+ label: i18n.fixed({ en: "Other way", de: "Andere Art" }),
+ description: i18n.fixed({
+ en: "If the capital shares or voting rights cannot be determined or in case there are no capital shares or voting rights 25% or more, the contracting partner hereby declares that the person(s) listed below is/are controlling the contracting partner in other ways",
+ de: "Falls die Kapital- oder Stimmrechtsanteile nicht festgestellt werden können oder falls keine Kapital- oder Stimmrechtsanteile von 25% oder mehr bestehen, erklärt der Vertragspartner hiermit, dass die nachfolgend aufgeführte(n) Person(en) auf andere Weise die Kontrolle über den Vertragspartner ausübt/ausüben",
+ }),
},
{
value: "DIRECTOR",
- label: i18n.str`Managing director`,
- description: i18n.str`In case this/these person(s) cannot be determined or this/these person(s) does/do not exist, the contracting partner hereby declares that the person(s) listed below is/are the managing director(s)`,
+ label: i18n.fixed({
+ en: "Managing director",
+ de: "Geschäftsführer",
+ }),
+ description: i18n.fixed({
+ en: "In case this/these person(s) cannot be determined or this/these person(s) does/do not exist, the contracting partner hereby declares that the person(s) listed below is/are the managing director(s)",
+ de: "Falls auch diese Person(en) nicht festgestellt werden kann/können oder diese Person(en) nicht besteht/bestehen, erklärt der Vertragspartner hiermit, dass die nachfolgend aufgeführte(n) Person(en) die Geschäftsführung ausübt/ausüben",
+ }),
},
],
required: true,
},
{
id: TalerFormAttributes.IDENTITY_LIST,
- label: i18n.str`Controlling person(s)`,
+ label: i18n.fixed({
+ en: "Controlling person(s)",
+ de: "Kontrollinhaber",
+ }),
type: "array",
validator(persons) {
if (!persons || persons.length < 1) {
- return i18n.str`Can't be empty`;
+ return i18n.fixed({
+ en: "Can't be empty",
+ de: "Darf nicht leer sein",
+ });
}
return undefined;
},
@@ -76,13 +120,19 @@ export function VQF_902_11_customer(
fields: [
{
id: TalerFormAttributes.FULL_NAME,
- label: i18n.str`Full name`,
+ label: i18n.fixed({
+ en: "Full name",
+ de: "Vollständiger Name",
+ }),
type: "text",
required: true,
},
{
id: TalerFormAttributes.DOMICILE_ADDRESS,
- label: i18n.str`Actual address of domicile`,
+ label: i18n.fixed({
+ en: "Actual address of domicile",
+ de: "Effektive Wohnsitzadresse",
+ }),
type: "textArea",
required: true,
},
@@ -91,20 +141,26 @@ export function VQF_902_11_customer(
],
},
{
- title: i18n.str`Fiduciary holding assets`,
+ title: i18n.fixed({
+ en: "Fiduciary holding assets",
+ de: "Treuhänderisches Halten von Vermögenswerten",
+ }),
fields: [
{
id: TalerFormAttributes.THIRD_PARTY_OWNERSHIP,
- label: i18n.str`Is a third person the beneficial owner of the assets held in the account/securities account?`,
+ label: i18n.fixed({
+ en: "Is a third person the beneficial owner of the assets held in the account/securities account?",
+ de: "Ist eine Drittperson an den auf dem Konto/Depot liegenden Vermögenswerten wirtschaftlich berechtigt?",
+ }),
required: true,
type: "choiceHorizontal",
choices: [
{
- label: i18n.str`Yes`,
+ label: i18n.fixed({ en: "Yes", de: "Ja" }),
value: true,
},
{
- label: i18n.str`No`,
+ label: i18n.fixed({ en: "No", de: "Nein" }),
value: false,
},
],
@@ -112,22 +168,28 @@ export function VQF_902_11_customer(
],
},
{
- title: i18n.str`Signature(s)`,
- description: i18n.str`It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, document forgery)`,
+ title: i18n.fixed({ en: "Signature(s)", de: "Unterschrift(en)" }),
+ description: i18n.fixed({
+ en: "It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, document forgery)",
+ de: "Die vorsätzliche Angabe falscher Informationen in diesem Formular ist eine strafbare Handlung (Urkundenfälschung gemäss Artikel 251 des Schweizerischen Strafgesetzbuchs).",
+ }),
fields: [
{
type: "caption",
- label: i18n.str`The contracting partner hereby undertakes to inform automatically of any changes to the information contained herein.`,
+ label: i18n.fixed({
+ en: "The contracting partner hereby undertakes to inform automatically of any changes to the information contained herein.",
+ de: "Der Vertragspartner verpflichtet sich, Änderungen jeweils unaufgefordert mitzuteilen.",
+ }),
},
{
id: TalerFormAttributes.SIGNATURE,
- label: i18n.str`Signature(s)`,
+ label: i18n.fixed({ en: "Signature(s)", de: "Unterschrift(en)" }),
type: "text",
required: true,
},
{
id: TalerFormAttributes.SIGN_DATE,
- label: i18n.str`Date`,
+ label: i18n.fixed({ en: "Date", de: "Datum" }),
type: "isoDateText",
defaultValue: today,
placeholder: "dd/MM/yyyy",
diff --git a/packages/web-util/src/forms/gana/VQF_902_11_officer.ts b/packages/web-util/src/forms/gana/VQF_902_11_officer.ts
@@ -2,13 +2,19 @@ import { TalerFormAttributes } from "@gnu-taler/taler-util";
import { InternationalizationAPI } from "../../context/translation.js";
import { DoubleColumnFormDesign, FormMetadata } from "../forms-types.js";
import { format } from "date-fns";
-import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js";
+import { vqfLanguagePolicy } from "./vqf.js";
export const form_vqf_902_11_officer = (
i18n: InternationalizationAPI,
): FormMetadata => ({
- label: i18n.str`Establishing of the controlling person of operating legal entities and partnerships both not quoted on the stock exchange (K)`,
- description: i18n.str`for operating legal entities and partnerships that are contracting partner as well as analogously for operating legal entities and partnership that are beneficial owners`,
+ label: i18n.fixed({
+ en: "Establishing of the controlling person of operating legal entities and partnerships both not quoted on the stock exchange (K)",
+ de: "Feststellung des Kontrollinhabers an nicht börsenkotierten, operativ tätigen juristischen Personen und Personengesellschaften (K)",
+ }),
+ description: i18n.fixed({
+ en: "for operating legal entities and partnerships that are contracting partner as well as analogously for operating legal entities and partnership that are beneficial owners",
+ de: "bei operativ tätigen juristischen Personen und Personengesellschaften als Vertragspartner sowie sinngemäss bei operativ tätigen juristischen Personen und Personengesellschaften als wirtschaftlich Berechtigte",
+ }),
id: "vqf_902_11_officer",
version: 1,
config: VQF_902_11_officer(i18n),
@@ -17,59 +23,97 @@ export const form_vqf_902_11_officer = (
export function VQF_902_11_officer(
i18n: InternationalizationAPI,
): DoubleColumnFormDesign {
- i18n = withVqfTranslations(i18n);
const today = format(new Date(), "yyyy-MM-dd");
return {
type: "double-column",
languagePolicy: vqfLanguagePolicy(i18n),
- title: i18n.str`Establishment of the controlling person (submitted by AML officer)`,
+ title: i18n.fixed({
+ en: "Establishment of the controlling person (submitted by AML officer)",
+ de: "Feststellung des Kontrollinhabers (durch den AML-Beauftragten eingereicht)",
+ }),
sections: [
{
- title: i18n.str`Identity of the contracting partner`,
- description: i18n.str`Name and address`,
+ title: i18n.fixed({
+ en: "Identity of the contracting partner",
+ de: "Identität des Vertragspartners",
+ }),
+ description: i18n.fixed({
+ en: "Name and address",
+ de: "Name und Adresse",
+ }),
fields: [
{
id: TalerFormAttributes.IDENTITY_CONTRACTING_PARTNER,
- label: i18n.str`Contracting partner`,
+ label: i18n.fixed({
+ en: "Contracting partner",
+ de: "Vertragspartner",
+ }),
type: "textArea",
required: true,
},
],
},
{
- title: i18n.str`Controlling person(s)`,
+ title: i18n.fixed({
+ en: "Controlling person(s)",
+ de: "Kontrollinhaber",
+ }),
fields: [
{
id: TalerFormAttributes.CONTROL_REASON,
- label: i18n.str`Reason for control`,
+ label: i18n.fixed({
+ en: "Reason for control",
+ de: "Grund der Kontrolle",
+ }),
type: "choiceStacked",
choices: [
{
value: "HAS_25_MORE_RIGHTS",
- label: i18n.str`Holding 25% or more`,
- description: i18n.str`The person(s) listed below is/are holding 25% or more of the contracting partner's shares (capital shares or voting rights)`,
+ label: i18n.fixed({
+ en: "Holding 25% or more",
+ de: "Halten von 25% oder mehr",
+ }),
+ description: i18n.fixed({
+ en: "The person(s) listed below is/are holding 25% or more of the contracting partner's shares (capital shares or voting rights)",
+ de: "Die nachfolgend aufgeführte(n) Person(en) hält/halten am Vertragspartner Anteile (Kapital- oder Stimmrechtsanteile) von 25% oder mehr",
+ }),
},
{
value: "OTHER_WAY",
- label: i18n.str`Other way`,
- description: i18n.str`If the capital shares or voting rights cannot be determined or in case there are no capital shares or voting rights 25% or more, the contracting partner hereby declares that the person(s) listed below is/are controlling the contracting partner in other ways`,
+ label: i18n.fixed({ en: "Other way", de: "Andere Art" }),
+ description: i18n.fixed({
+ en: "If the capital shares or voting rights cannot be determined or in case there are no capital shares or voting rights 25% or more, the contracting partner hereby declares that the person(s) listed below is/are controlling the contracting partner in other ways",
+ de: "Falls die Kapital- oder Stimmrechtsanteile nicht festgestellt werden können oder falls keine Kapital- oder Stimmrechtsanteile von 25% oder mehr bestehen, erklärt der Vertragspartner hiermit, dass die nachfolgend aufgeführte(n) Person(en) auf andere Weise die Kontrolle über den Vertragspartner ausübt/ausüben",
+ }),
},
{
value: "DIRECTOR",
- label: i18n.str`Managing director`,
- description: i18n.str`In case this/these person(s) cannot be determined or this/these person(s) does/do not exist, the contracting partner hereby declares that the person(s) listed below is/are the managing director(s)`,
+ label: i18n.fixed({
+ en: "Managing director",
+ de: "Geschäftsführer",
+ }),
+ description: i18n.fixed({
+ en: "In case this/these person(s) cannot be determined or this/these person(s) does/do not exist, the contracting partner hereby declares that the person(s) listed below is/are the managing director(s)",
+ de: "Falls auch diese Person(en) nicht festgestellt werden kann/können oder diese Person(en) nicht besteht/bestehen, erklärt der Vertragspartner hiermit, dass die nachfolgend aufgeführte(n) Person(en) die Geschäftsführung ausübt/ausüben",
+ }),
},
],
required: true,
},
{
id: TalerFormAttributes.IDENTITY_LIST,
- label: i18n.str`Controlling person(s)`,
+ label: i18n.fixed({
+ en: "Controlling person(s)",
+ de: "Kontrollinhaber",
+ }),
type: "array",
validator(persons) {
if (!persons || persons.length < 1) {
- return i18n.str`Can't be empty`;
+ return i18n.fixed({
+ en: "Can't be empty",
+ de: "Darf nicht leer sein",
+ });
}
return undefined;
},
@@ -77,13 +121,19 @@ export function VQF_902_11_officer(
fields: [
{
id: TalerFormAttributes.FULL_NAME,
- label: i18n.str`Full name`,
+ label: i18n.fixed({
+ en: "Full name",
+ de: "Vollständiger Name",
+ }),
type: "text",
required: true,
},
{
id: TalerFormAttributes.DOMICILE_ADDRESS,
- label: i18n.str`Actual address of domicile`,
+ label: i18n.fixed({
+ en: "Actual address of domicile",
+ de: "Effektive Wohnsitzadresse",
+ }),
type: "textArea",
required: true,
},
@@ -92,20 +142,26 @@ export function VQF_902_11_officer(
],
},
{
- title: i18n.str`Fiduciary holding assets`,
+ title: i18n.fixed({
+ en: "Fiduciary holding assets",
+ de: "Treuhänderisches Halten von Vermögenswerten",
+ }),
fields: [
{
id: TalerFormAttributes.THIRD_PARTY_OWNERSHIP,
- label: i18n.str`Is a third person the beneficial owner of the assets held in the account/securities account?`,
+ label: i18n.fixed({
+ en: "Is a third person the beneficial owner of the assets held in the account/securities account?",
+ de: "Ist eine Drittperson an den auf dem Konto/Depot liegenden Vermögenswerten wirtschaftlich berechtigt?",
+ }),
required: true,
type: "choiceHorizontal",
choices: [
{
- label: i18n.str`Yes`,
+ label: i18n.fixed({ en: "Yes", de: "Ja" }),
value: true,
},
{
- label: i18n.str`No`,
+ label: i18n.fixed({ en: "No", de: "Nein" }),
value: false,
},
],
@@ -113,25 +169,31 @@ export function VQF_902_11_officer(
],
},
{
- title: i18n.str`Signature(s)`,
- description: i18n.str`It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, document forgery)`,
+ title: i18n.fixed({ en: "Signature(s)", de: "Unterschrift(en)" }),
+ description: i18n.fixed({
+ en: "It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, document forgery)",
+ de: "Die vorsätzliche Angabe falscher Informationen in diesem Formular ist eine strafbare Handlung (Urkundenfälschung gemäss Artikel 251 des Schweizerischen Strafgesetzbuchs).",
+ }),
hide(root) {
return root[TalerFormAttributes.SUBMITTED_BY] != "CUSTOMER";
},
fields: [
{
type: "caption",
- label: i18n.str`The contracting partner hereby undertakes to inform automatically of any changes to the information contained herein.`,
+ label: i18n.fixed({
+ en: "The contracting partner hereby undertakes to inform automatically of any changes to the information contained herein.",
+ de: "Der Vertragspartner verpflichtet sich, Änderungen jeweils unaufgefordert mitzuteilen.",
+ }),
},
{
id: TalerFormAttributes.SIGNATURE,
- label: i18n.str`Signature(s)`,
+ label: i18n.fixed({ en: "Signature(s)", de: "Unterschrift(en)" }),
type: "text",
required: true,
},
{
id: TalerFormAttributes.SIGN_DATE,
- label: i18n.str`Date`,
+ label: i18n.fixed({ en: "Date", de: "Datum" }),
type: "isoDateText",
placeholder: "dd/MM/yyyy",
pattern: "dd/MM/yyyy",
@@ -142,19 +204,31 @@ export function VQF_902_11_officer(
],
},
{
- title: i18n.str`Signed Declaration`,
- description: i18n.str`Signed declaration by the customer`,
+ title: i18n.fixed({
+ en: "Signed Declaration",
+ de: "Unterzeichnete Erklärung",
+ }),
+ description: i18n.fixed({
+ en: "Signed declaration by the customer",
+ de: "Vom Kunden unterzeichnete Erklärung",
+ }),
hide(root) {
return root[TalerFormAttributes.SUBMITTED_BY] != "AML_OFFICER";
},
fields: [
{
type: "caption",
- label: i18n.str`The uploaded document must contain the customer's signature on the beneficial owner declaration.`,
+ label: i18n.fixed({
+ en: "The uploaded document must contain the customer's signature on the beneficial owner declaration.",
+ de: "Das hochgeladene Dokument muss die Unterschrift des Kunden auf der Erklärung zum wirtschaftlich Berechtigten enthalten.",
+ }),
},
{
id: TalerFormAttributes.ATTACHMENT_SIGNED_DOCUMENT,
- label: i18n.str`Signed Document`,
+ label: i18n.fixed({
+ en: "Signed Document",
+ de: "Unterzeichnetes Dokument",
+ }),
type: "file",
accept: "application/pdf",
required: true,
diff --git a/packages/web-util/src/forms/gana/VQF_902_12_13.test.ts b/packages/web-util/src/forms/gana/VQF_902_12_13.test.ts
@@ -95,18 +95,63 @@ test("revocation questions only apply to revocable structures", () => {
);
});
-test("prescribed German VQF wording does not depend on gettext catalogs", () => {
+test("prescribed VQF labels do not depend on gettext catalogs", () => {
+ const labels = [
+ [
+ "vqf_902_1_customer",
+ "Identification Form (customer)",
+ "Identifikationsformular (Kunde)",
+ ],
+ [
+ "vqf_902_1_officer",
+ "Identification Form (acceptance)",
+ "Identifikationsformular (Annahme)",
+ ],
+ ["vqf_902_4", "Risk Profile AMLA", "Risikoprofil GwG"],
+ ["vqf_902_5", "Customer Profile", "Kundenprofil"],
+ [
+ "vqf_902_9_customer",
+ "Declaration of identity of the beneficial owner (A) — customer",
+ "Feststellung des wirtschaftlich Berechtigten (A) — Kunde",
+ ],
+ [
+ "vqf_902_9_officer",
+ "Declaration of identity of the beneficial owner (A) — AML officer",
+ "Feststellung des wirtschaftlich Berechtigten (A) — GwG-Beauftragter",
+ ],
+ [
+ "vqf_902_11_customer",
+ "Establishing of the controlling person of operating legal entities and partnerships both not quoted on the stock exchange (K)",
+ "Feststellung des Kontrollinhabers an nicht börsenkotierten, operativ tätigen juristischen Personen und Personengesellschaften (K)",
+ ],
+ [
+ "vqf_902_11_officer",
+ "Establishing of the controlling person of operating legal entities and partnerships both not quoted on the stock exchange (K)",
+ "Feststellung des Kontrollinhabers an nicht börsenkotierten, operativ tätigen juristischen Personen und Personengesellschaften (K)",
+ ],
+ [
+ "vqf_902_12",
+ "Foundations (as well as similar constructs) (S)",
+ "Stiftungen (sowie ähnliche Konstrukte) (S)",
+ ],
+ ["vqf_902_13", "Declaration for trusts (T)", "Erklärung für Trusts (T)"],
+ ["vqf_902_14", "Special Clarifications", "Besondere Abklärungen"],
+ ] as const;
+
+ for (const language of ["en", "de", "de-CH"]) {
+ setupI18n(language, {});
+ const forms = preloadedForms(i18n);
+ for (const [id, english, german] of labels) {
+ assert.equal(
+ forms.find((form) => form.id === id)?.label,
+ language === "en" ? english : german,
+ `${id} in ${language}`,
+ );
+ }
+ }
+
setupI18n("de", {});
const forms = preloadedForms(i18n);
- assert.equal(
- forms.find((form) => form.id === "vqf_902_12")?.label,
- "Stiftungen (sowie ähnliche Konstrukte) (S)",
- );
- assert.equal(
- forms.find((form) => form.id === "vqf_902_13")?.label,
- "Erklärung für Trusts (T)",
- );
-
const existingVqf = forms.find((form) => form.id === "vqf_902_4");
assert.equal(existingVqf?.label, "Risikoprofil GwG");
assert.ok(existingVqf && typeof existingVqf.config !== "function");
@@ -114,12 +159,4 @@ test("prescribed German VQF wording does not depend on gettext catalogs", () =>
existingVqf.config.languagePolicy?.legallyBindingLanguageLabel,
"Deutsch",
);
- assert.equal(
- forms.find((form) => form.id === "vqf_902_9_customer")?.label,
- "Feststellung des wirtschaftlich Berechtigten (A) — Kunde",
- );
- assert.equal(
- forms.find((form) => form.id === "vqf_902_9_officer")?.label,
- "Feststellung des wirtschaftlich Berechtigten (A) — GwG-Beauftragter",
- );
});
diff --git a/packages/web-util/src/forms/gana/VQF_902_14.ts b/packages/web-util/src/forms/gana/VQF_902_14.ts
@@ -2,13 +2,19 @@ import { TalerFormAttributes } from "@gnu-taler/taler-util";
import { InternationalizationAPI } from "../../context/translation.js";
import { DoubleColumnFormDesign, FormMetadata } from "../forms-types.js";
import { Descr } from "./VQF_902_1_customer.js";
-import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js";
+import { vqfLanguagePolicy } from "./vqf.js";
export const form_vqf_902_14 = (
i18n: InternationalizationAPI,
): FormMetadata => ({
- label: i18n.str`Special Clarifications`,
- description: i18n.str`When a business relationship or transaction is associated with increased risk, appears unusual or evidence exists that the assets are the proceeds of a felony or a qualified tax offence, the member has to perform additional clarifications.`,
+ label: i18n.fixed({
+ en: "Special Clarifications",
+ de: "Besondere Abklärungen",
+ }),
+ description: i18n.fixed({
+ en: "When a business relationship or transaction is associated with increased risk, appears unusual or evidence exists that the assets are the proceeds of a felony or a qualified tax offence, the member has to perform additional clarifications.",
+ de: "Wenn eine Geschäftsbeziehung oder Transaktion mit einem erhöhten Risiko verbunden ist, ungewöhnlich erscheint oder Anhaltspunkte dafür bestehen, dass die Vermögenswerte aus einem Verbrechen oder einem qualifizierten Steuervergehen stammen, hat das Mitglied zusätzliche Abklärungen durchzuführen.",
+ }),
id: "vqf_902_14",
version: 1,
config: VQF_902_14(i18n),
@@ -17,63 +23,93 @@ export const form_vqf_902_14 = (
export function VQF_902_14(
i18n: InternationalizationAPI,
): DoubleColumnFormDesign {
- i18n = withVqfTranslations(i18n);
return {
type: "double-column",
languagePolicy: vqfLanguagePolicy(i18n),
- title: i18n.str`Special Clarifications`,
+ title: i18n.fixed({
+ en: "Special Clarifications",
+ de: "Besondere Abklärungen",
+ }),
sections: [
{
- title: i18n.str`Information on customer`,
+ title: i18n.fixed({
+ en: "Information on customer",
+ de: "Angaben zum Kunden",
+ }),
description: Descr.CUSTOMER_INFO_TYPE(i18n),
fields: [
{
id: TalerFormAttributes.CUSTOMER_NAME,
- label: i18n.str`Customer`,
- // help: i18n.str``,
+ label: i18n.fixed({ en: "Customer", de: "Kunde" }),
type: "text",
required: true,
},
],
},
{
- title: i18n.str`Reason for special clarifications`,
+ title: i18n.fixed({
+ en: "Reason for special clarifications",
+ de: "Grund für besondere Abklärungen",
+ }),
fields: [
{
id: TalerFormAttributes.INCRISK_REASON,
- label: i18n.str`Reason`,
- help: i18n.str`Description of the circumstances/transactions, which triggered the special clarifications`,
+ label: i18n.fixed({ en: "Reason", de: "Grund" }),
+ help: i18n.fixed({
+ en: "Description of the circumstances/transactions, which triggered the special clarifications",
+ de: "Beschreibung der Umstände/Transaktionen, welche die besonderen Abklärungen ausgelöst haben",
+ }),
type: "textArea",
required: true,
validator(text, form) {
- return !text ? i18n.str`can't be empty` : undefined;
+ return !text
+ ? i18n.fixed({
+ en: "can't be empty",
+ de: "darf nicht leer sein",
+ })
+ : undefined;
},
},
],
},
{
- title: i18n.str`Used means of clarification`,
+ title: i18n.fixed({
+ en: "Used means of clarification",
+ de: "Verwendete Abklärungsmittel",
+ }),
fields: [
{
id: TalerFormAttributes.INCRISK_MEANS,
- label: i18n.str`Means`,
+ label: i18n.fixed({ en: "Means", de: "Mittel" }),
type: "choiceStacked",
choices: [
{
value: "GATHERING",
- label: i18n.str`Gathering of information from the customer, beneficial owner of the assets, controlling person`,
+ label: i18n.fixed({
+ en: "Gathering of information from the customer, beneficial owner of the assets, controlling person",
+ de: "Einholung von Informationen beim Kunden, wirtschaftlich Berechtigten der Vermögenswerte, dem Kontrollinhaber",
+ }),
},
{
value: "CONSULTATION",
- label: i18n.str`Consultation of generally accessible sources and databases`,
+ label: i18n.fixed({
+ en: "Consultation of generally accessible sources and databases",
+ de: "Konsultation allgemein zugänglicher Quellen und Datenbanken",
+ }),
},
{
value: "ENQUIRIES",
- label: i18n.str`Enquiries with trustworthy persons`,
+ label: i18n.fixed({
+ en: "Enquiries with trustworthy persons",
+ de: "Erkundigungen bei vertrauenswürdigen Personen",
+ }),
},
{
value: "OTHER",
- label: i18n.str`Other, which?`,
+ label: i18n.fixed({
+ en: "Other, which?",
+ de: "Andere, welche?",
+ }),
},
],
required: true,
@@ -81,7 +117,10 @@ export function VQF_902_14(
{
id: TalerFormAttributes.INCRISK_MEANS_OTHER,
type: "text",
- label: i18n.str`Other means of clarification:`,
+ label: i18n.fixed({
+ en: "Other means of clarification:",
+ de: "Andere Abklärungsmittel:",
+ }),
required: true,
hide(value, root) {
return root[TalerFormAttributes.INCRISK_MEANS] !== "OTHER";
@@ -90,25 +129,34 @@ export function VQF_902_14(
],
},
{
- title: i18n.str`Supplemental File Upload`,
- description: i18n.str`Optional supplemental information for the special clarifications.`,
+ title: i18n.fixed({
+ en: "Supplemental File Upload",
+ de: "Hochladen zusätzlicher Dokumente",
+ }),
+ description: i18n.fixed({
+ en: "Optional supplemental information for the special clarifications.",
+ de: "Optionale ergänzende Angaben zu den besonderen Abklärungen.",
+ }),
fields: [
{
id: TalerFormAttributes.SUPPLEMENTAL_FILES_LIST,
- label: i18n.str`Supplemental Files`,
+ label: i18n.fixed({
+ en: "Supplemental Files",
+ de: "Zusätzliche Dokumente",
+ }),
type: "array",
labelFieldId: "FILE.FILENAME",
required: false,
fields: [
{
id: TalerFormAttributes.DESCRIPTION,
- label: i18n.str`Description`,
+ label: i18n.fixed({ en: "Description", de: "Beschreibung" }),
type: "textArea",
required: true,
},
{
id: TalerFormAttributes.FILE,
- label: i18n.str`File (PDF)`,
+ label: i18n.fixed({ en: "File (PDF)", de: "Datei (PDF)" }),
type: "file",
accept: "application/pdf",
required: true,
@@ -118,48 +166,75 @@ export function VQF_902_14(
],
},
{
- title: i18n.str`Summary and plausibility check of the gathered information`,
- description: i18n.str`The results of the clarifications have to be documented and their plausibility has to be checked.`,
+ title: i18n.fixed({
+ en: "Summary and plausibility check of the gathered information",
+ de: "Zusammenfassung und Plausibilitätsprüfung der eingeholten Informationen",
+ }),
+ description: i18n.fixed({
+ en: "The results of the clarifications have to be documented and their plausibility has to be checked.",
+ de: "Die Ergebnisse der Abklärungen sind zu dokumentieren und auf ihre Plausibilität zu prüfen.",
+ }),
fields: [
{
id: TalerFormAttributes.INCRISK_SUMMARY,
- label: i18n.str`Summary`,
+ label: i18n.fixed({ en: "Summary", de: "Zusammenfassung" }),
type: "textArea",
required: true,
},
{
id: TalerFormAttributes.INCRISK_DOCUMENTS,
- label: i18n.str`Gathered/Consulted documents`,
+ label: i18n.fixed({
+ en: "Gathered/Consulted documents",
+ de: "Eingeholte/konsultierte Dokumente",
+ }),
type: "textArea",
required: true,
},
],
},
{
- title: i18n.str`Result of the special clarification`,
+ title: i18n.fixed({
+ en: "Result of the special clarification",
+ de: "Ergebnis der besonderen Abklärung",
+ }),
fields: [
{
id: TalerFormAttributes.INCRISK_RESULT,
- label: i18n.str`Result`,
+ label: i18n.fixed({ en: "Result", de: "Ergebnis" }),
type: "choiceStacked",
choices: [
{
- label: i18n.str`No suspicion`,
+ label: i18n.fixed({ en: "No suspicion", de: "Kein Verdacht" }),
value: "NO_SUSPICION",
- description: i18n.str`The plausibility of the circumstances could be checked, no reasonable suspicion pursuant to Art. 9 AMLA (possibly update of customer profile and/or risk profile)`,
+ description: i18n.fixed({
+ en: "The plausibility of the circumstances could be checked, no reasonable suspicion pursuant to Art. 9 AMLA (possibly update of customer profile and/or risk profile)",
+ de: "Die Plausibilität der Umstände konnte überprüft werden, kein begründeter Verdacht gemäss Art. 9 GwG (gegebenenfalls Aktualisierung des Kundenprofils und/oder Risikoprofils)",
+ }),
},
{
- label: i18n.str`Reasonable suspicion`,
+ label: i18n.fixed({
+ en: "Reasonable suspicion",
+ de: "Begründeter Verdacht",
+ }),
value: "REASONABLE_SUSPICION",
- description: i18n.str`Reasonable suspicion pursuant to Art. 9 AMLA, duty to file a report with MROS`,
+ description: i18n.fixed({
+ en: "Reasonable suspicion pursuant to Art. 9 AMLA, duty to file a report with MROS",
+ de: "Begründeter Verdacht gemäss Art. 9 GwG, Meldepflicht bei der MROS",
+ }),
},
{
- label: i18n.str`Simple suspicion`,
+ label: i18n.fixed({
+ en: "Simple suspicion",
+ de: "Einfacher Verdacht",
+ }),
value: "SIMPLE_SUSPICION",
- description: i18n.str`Simple suspicion pursuant to Art. 305ter Para. 2 StGB, right to notify MROS`,
+ description: i18n.fixed({
+ en: "Simple suspicion pursuant to Art. 305ter Para. 2 StGB, right to notify MROS",
+ de: "Einfacher Verdacht gemäss Art. 305ter Abs. 2 StGB, Melderecht gegenüber der MROS",
+ }),
},
{
- label: i18n.str`Other, what?`,
+ label: i18n.fixed({ en: "Other, what?", de: "Andere, was?" }),
value: "OTHER",
},
],
@@ -168,7 +243,10 @@ export function VQF_902_14(
{
id: TalerFormAttributes.INCRISK_RESULT_OTHER,
type: "text",
- label: i18n.str`Result clarification`,
+ label: i18n.fixed({
+ en: "Result clarification",
+ de: "Erläuterung des Ergebnisses",
+ }),
required: true,
hide(value, root) {
return root[TalerFormAttributes.INCRISK_RESULT] !== "OTHER";
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
@@ -19,18 +19,25 @@ import { format, intervalToDuration, isFuture, isValid, parse } from "date-fns";
import { InternationalizationAPI } from "../../context/translation.js";
import { DoubleColumnFormDesign, UIFormElementConfig } from "../forms-types.js";
import { countryNationalityList } from "../../utils/select-ui-lists.js";
-import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js";
+import { vqfLanguagePolicy } from "./vqf.js";
export const Descr = {
- CUSTOMER_INFO_TYPE: (
- i18n: InternationalizationAPI,
- ) => i18n.str`The customer is the person with whom the member concludes the contract with regard to the financial service provided (civil law). If the
- member acts as the director of a domiciliary company, then that domiciliary company is the customer.`,
+ CUSTOMER_INFO_TYPE: (i18n: InternationalizationAPI) =>
+ i18n.fixed({
+ en: "The customer is the person with whom the member concludes the contract with regard to the financial service provided (civil law). If the\n member acts as the director of a domiciliary company, then that domiciliary company is the customer.",
+ de: "Kunde ist die Person, mit welcher das Mitglied den Vertrag über die erbrachte Finanzdienstleistung abschliesst (Zivilrecht). Handelt das\n Mitglied als Organ einer Sitzgesellschaft, so ist diese Sitzgesellschaft der Kunde.",
+ }),
} as const;
export const form_vqf_902_1_customer = (i18n: InternationalizationAPI) => ({
- label: i18n.str`Identification Form (customer)`,
- description: i18n.str`The customer has to be identified on entering into a permanent business relationship or on concluding a cash transaction, which meets the according threshold.`,
+ label: i18n.fixed({
+ en: "Identification Form (customer)",
+ de: "Identifikationsformular (Kunde)",
+ }),
+ description: i18n.fixed({
+ en: "The customer has to be identified on entering into a permanent business relationship or on concluding a cash transaction, which meets the according threshold.",
+ de: "Die Vertragspartei muss identifiziert werden bei allen dauernden Geschäftsbeziehungen sowie bei Kassageschäften, bei welchen der entsprechende Schwellenwert erreicht wird.",
+ }),
id: "vqf_902_1_customer",
version: 1,
config: design_VQF_902_1_customer(i18n),
@@ -41,24 +48,27 @@ const fieldCorrespondenceLanguage = (
): UIFormElementConfig => ({
id: TalerFormAttributes.CORRESPONDENCE_LANGUAGE,
required: true,
- label: i18n.str`Correspondence language:`,
+ label: i18n.fixed({
+ en: "Correspondence language:",
+ de: "Korrespondenzsprache:",
+ }),
type: "choiceStacked",
choices: [
{
value: "en",
- label: i18n.str`English`,
+ label: i18n.fixed({ en: "English", de: "Englisch" }),
},
{
value: "de",
- label: i18n.str`German`,
+ label: i18n.fixed({ en: "German", de: "Deutsch" }),
},
{
value: "fr",
- label: i18n.str`French`,
+ label: i18n.fixed({ en: "French", de: "Französisch" }),
},
{
value: "it",
- label: i18n.str`Italian`,
+ label: i18n.fixed({ en: "Italian", de: "Italienisch" }),
},
],
});
@@ -69,30 +79,41 @@ const fieldCorrespondenceLanguage = (
export function design_VQF_902_1_customer(
i18n: InternationalizationAPI,
): DoubleColumnFormDesign {
- i18n = withVqfTranslations(i18n);
const today = format(new Date(), "yyyy-MM-dd");
return {
type: "double-column",
languagePolicy: vqfLanguagePolicy(i18n),
- title: i18n.str`Identification form (basic customer information)`,
+ title: i18n.fixed({
+ en: "Identification form (basic customer information)",
+ de: "Identifikationsformular (Basisangaben zum Kunden)",
+ }),
sections: [
{
- title: i18n.str`Information on customer`,
+ title: i18n.fixed({
+ en: "Information on customer",
+ de: "Angaben zum Kunden",
+ }),
description: Descr.CUSTOMER_INFO_TYPE(i18n),
fields: [
{
id: TalerFormAttributes.CUSTOMER_TYPE,
- label: i18n.str`Customer type`,
+ label: i18n.fixed({ en: "Customer type", de: "Kundentyp" }),
type: "choiceStacked",
choices: [
{
value: "NATURAL_PERSON",
- label: i18n.str`Natural person (incl. sole proprietors)`,
+ label: i18n.fixed({
+ en: "Natural person (incl. sole proprietors)",
+ de: "Natürliche Person (inkl. Einzelunternehmen)",
+ }),
},
{
value: "LEGAL_ENTITY",
- label: i18n.str`Legal entity`,
+ label: i18n.fixed({
+ en: "Legal entity",
+ de: "Juristische Person",
+ }),
},
],
required: true,
@@ -100,39 +121,48 @@ export function design_VQF_902_1_customer(
],
},
{
- title: i18n.str`Information on customer`,
- description: i18n.str`Applicable if customer is a natural person`,
+ title: i18n.fixed({
+ en: "Information on customer",
+ de: "Angaben zum Kunden",
+ }),
+ description: i18n.fixed({
+ en: "Applicable if customer is a natural person",
+ de: "Anwendbar, wenn der Kunde eine natürliche Person ist",
+ }),
hide(root) {
return root[TalerFormAttributes.CUSTOMER_TYPE] !== "NATURAL_PERSON";
},
fields: [
{
id: TalerFormAttributes.FULL_NAME,
- label: i18n.str`Full name`,
+ label: i18n.fixed({ en: "Full name", de: "Vollständiger Name" }),
type: "text",
required: true,
},
{
id: TalerFormAttributes.DOMICILE_ADDRESS,
- label: i18n.str`Residential address in Switzerland`,
+ label: i18n.fixed({
+ en: "Residential address in Switzerland",
+ de: "Wohnsitzadresse in der Schweiz",
+ }),
type: "textArea",
required: true,
},
{
id: TalerFormAttributes.CONTACT_PHONE,
- label: i18n.str`Telephone`,
+ label: i18n.fixed({ en: "Telephone", de: "Telefon" }),
type: "text",
required: false,
},
{
id: TalerFormAttributes.CONTACT_EMAIL,
- label: i18n.str`Email`,
+ label: i18n.fixed({ en: "Email", de: "E-Mail" }),
type: "text",
required: false,
},
{
id: TalerFormAttributes.DATE_OF_BIRTH,
- label: i18n.str`Date of birth`,
+ label: i18n.fixed({ en: "Date of birth", de: "Geburtsdatum" }),
type: "isoDateText",
placeholder: "dd/MM/yyyy",
pattern: "dd/MM/yyyy",
@@ -142,24 +172,33 @@ export function design_VQF_902_1_customer(
//FIXME: why returning in this format even if pattern is in another?
const time = parse(text, "yyyy-MM-dd", new Date());
if (!isValid(time)) {
- return i18n.str`invalid format`;
+ return i18n.fixed({
+ en: "invalid format",
+ de: "ungültiges Format",
+ });
}
if (isFuture(time)) {
- return i18n.str`it can't be in the future`;
+ return i18n.fixed({
+ en: "it can't be in the future",
+ de: "darf nicht in der Zukunft liegen",
+ });
}
const { years } = intervalToDuration({
start: time,
end: new Date(),
});
if (years && years > 120) {
- return i18n.str`it can't be greater than 120 years`;
+ return i18n.fixed({
+ en: "it can't be greater than 120 years",
+ de: "darf nicht größer als 120 Jahre sein",
+ });
}
return undefined;
},
},
{
id: TalerFormAttributes.NATIONALITY,
- label: i18n.str`Nationality`,
+ label: i18n.fixed({ en: "Nationality", de: "Staatsangehörigkeit" }),
type: "selectOne",
choices: countryNationalityList(i18n),
preferredChoiceVals: ["CH"],
@@ -167,23 +206,38 @@ export function design_VQF_902_1_customer(
},
{
id: TalerFormAttributes.PERSONAL_IDENTIFICATION_DOCUMENT_COPY,
- label: i18n.str`Copy of identification document`,
+ label: i18n.fixed({
+ en: "Copy of identification document",
+ de: "Kopie des Ausweisdokuments",
+ }),
type: "file",
accept: "application/pdf",
- tooltip: i18n.str`Only official government IDs (incl. passports) are accepted. Please scan both sides if applicable.`,
+ tooltip: i18n.fixed({
+ en: "Only official government IDs (incl. passports) are accepted. Please scan both sides if applicable.",
+ de: "Es werden nur amtliche Ausweise (inkl. Pässe) akzeptiert. Bitte scannen Sie gegebenenfalls beide Seiten.",
+ }),
required: true,
},
{
id: TalerFormAttributes.CUSTOMER_IS_SOLE_PROPRIETOR,
- label: i18n.str`Sole proprietor`,
+ label: i18n.fixed({
+ en: "Sole proprietor",
+ de: "Einzelunternehmen",
+ }),
type: "toggle",
threeState: false,
},
],
},
{
- title: i18n.str`Information on customer (sole proprietor)`,
- description: i18n.str`Applicable only if customer is a sole proprietor`,
+ title: i18n.fixed({
+ en: "Information on customer (sole proprietor)",
+ de: "Angaben zum Kunden (Einzelunternehmen)",
+ }),
+ description: i18n.fixed({
+ en: "Applicable only if customer is a sole proprietor",
+ de: "Nur anwendbar, wenn der Kunde ein Einzelunternehmen ist",
+ }),
hide(root) {
return (
root[TalerFormAttributes.CUSTOMER_TYPE] !== "NATURAL_PERSON" ||
@@ -193,19 +247,22 @@ export function design_VQF_902_1_customer(
fields: [
{
id: TalerFormAttributes.COMPANY_NAME,
- label: i18n.str`Company name`,
+ label: i18n.fixed({ en: "Company name", de: "Firmenname" }),
type: "text",
required: true,
},
{
id: TalerFormAttributes.REGISTERED_OFFICE_ADDRESS,
- label: i18n.str`Registered office`,
+ label: i18n.fixed({ en: "Registered office", de: "Sitz" }),
type: "text",
required: true,
},
{
id: TalerFormAttributes.LEGAL_ENTITY_IDENTIFICATION_DOCUMENT_COPY,
- label: i18n.str`Company identification document`,
+ label: i18n.fixed({
+ en: "Company identification document",
+ de: "Identifikationsdokument des Unternehmens",
+ }),
type: "file",
required: true,
accept: "application/pdf",
@@ -213,45 +270,54 @@ export function design_VQF_902_1_customer(
],
},
{
- title: i18n.str`Information on customer (legal entity)`,
- description: i18n.str`Applicable if customer is a legal entity`,
+ title: i18n.fixed({
+ en: "Information on customer (legal entity)",
+ de: "Angaben zum Kunden (juristische Person)",
+ }),
+ description: i18n.fixed({
+ en: "Applicable if customer is a legal entity",
+ de: "Anwendbar, wenn der Kunde eine juristische Person ist",
+ }),
hide(root) {
return root[TalerFormAttributes.CUSTOMER_TYPE] !== "LEGAL_ENTITY";
},
fields: [
{
id: TalerFormAttributes.COMPANY_NAME,
- label: i18n.str`Company name`,
+ label: i18n.fixed({ en: "Company name", de: "Firmenname" }),
type: "text",
required: true,
},
{
id: TalerFormAttributes.DOMICILE_ADDRESS,
- label: i18n.str`Domicile`,
+ label: i18n.fixed({ en: "Domicile", de: "Sitz" }),
type: "textArea",
required: true,
},
{
id: TalerFormAttributes.CONTACT_PERSON_NAME,
- label: i18n.str`Contact person`,
+ label: i18n.fixed({ en: "Contact person", de: "Kontaktperson" }),
type: "text",
required: false,
},
{
id: TalerFormAttributes.CONTACT_PHONE,
- label: i18n.str`Telephone`,
+ label: i18n.fixed({ en: "Telephone", de: "Telefon" }),
type: "text",
required: false,
},
{
id: TalerFormAttributes.CONTACT_EMAIL,
- label: i18n.str`Email`,
+ label: i18n.fixed({ en: "Email", de: "E-Mail" }),
type: "text",
required: false,
},
{
id: TalerFormAttributes.LEGAL_ENTITY_IDENTIFICATION_DOCUMENT_COPY,
- label: i18n.str`Copy of identification document (not older than 12 months)`,
+ label: i18n.fixed({
+ en: "Copy of identification document (not older than 12 months)",
+ de: "Kopie des Ausweisdokuments (nicht älter als 12 Monate)",
+ }),
type: "file",
accept: "application/pdf",
required: true,
@@ -269,41 +335,59 @@ export function design_VQF_902_1_customer(
],
},
{
- title: i18n.str`Correspondence Preferences`,
+ title: i18n.fixed({
+ en: "Correspondence Preferences",
+ de: "Korrespondenzpräferenzen",
+ }),
hide(root) {
return !root[TalerFormAttributes.CUSTOMER_TYPE];
},
fields: [fieldCorrespondenceLanguage(i18n)],
},
{
- 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.`,
+ title: i18n.fixed({
+ en: "Information on the natural persons who establish the business relationship for legal entities and partnerships",
+ de: "Angaben zu den natürlichen Personen, die für juristische Personen und Personengesellschaften die Geschäftsbeziehung eröffnen (Eröffner)",
+ }),
+ description: i18n.fixed({
+ en: "For legal entities and partnerships the identity of the natural persons who establish the business relationship must be verified.",
+ de: "Bei juristischen Personen und Personengesellschaften ist die Identität der natürlichen Personen, welche die Geschäftsbeziehung eröffnen, zu überprüfen.",
+ }),
hide(root) {
return root[TalerFormAttributes.CUSTOMER_TYPE] !== "LEGAL_ENTITY";
},
fields: [
{
id: TalerFormAttributes.ESTABLISHER_LIST,
- label: i18n.str`Persons establishing the legal relationship`,
+ label: i18n.fixed({
+ en: "Persons establishing the legal relationship",
+ de: "Personen, welche die Geschäftsbeziehung begründen",
+ }),
type: "array",
labelFieldId: TalerFormAttributes.FULL_NAME,
required: true,
fields: [
{
id: TalerFormAttributes.FULL_NAME,
- label: i18n.str`Full name`,
+ label: i18n.fixed({
+ en: "Full name",
+ de: "Vollständiger Name",
+ }),
type: "text",
required: true,
},
{
id: TalerFormAttributes.DOMICILE_ADDRESS,
- label: i18n.str`Residential address`,
+ label: i18n.fixed({
+ en: "Residential address",
+ de: "Wohnsitzadresse",
+ }),
type: "textArea",
required: true,
},
{
id: TalerFormAttributes.DATE_OF_BIRTH,
- label: i18n.str`Date of birth`,
+ label: i18n.fixed({ en: "Date of birth", de: "Geburtsdatum" }),
type: "isoDateText",
placeholder: "dd/MM/yyyy",
pattern: "dd/MM/yyyy",
@@ -313,24 +397,36 @@ export function design_VQF_902_1_customer(
//FIXME: why returning in this format even if pattern is in another?
const time = parse(text, "yyyy-MM-dd", new Date());
if (!isValid(time)) {
- return i18n.str`invalid format`;
+ return i18n.fixed({
+ en: "invalid format",
+ de: "ungültiges Format",
+ });
}
if (isFuture(time)) {
- return i18n.str`it can't be in the future`;
+ return i18n.fixed({
+ en: "it can't be in the future",
+ de: "darf nicht in der Zukunft liegen",
+ });
}
const { years } = intervalToDuration({
start: time,
end: new Date(),
});
if (years && years > 120) {
- return i18n.str`it can't be greater than 120 years`;
+ return i18n.fixed({
+ en: "it can't be greater than 120 years",
+ de: "darf nicht größer als 120 Jahre sein",
+ });
}
return undefined;
},
},
{
id: TalerFormAttributes.NATIONALITY,
- label: i18n.str`Nationality`,
+ label: i18n.fixed({
+ en: "Nationality",
+ de: "Staatsangehörigkeit",
+ }),
type: "selectOne",
choices: countryNationalityList(i18n),
preferredChoiceVals: ["CH"],
@@ -338,29 +434,50 @@ export function design_VQF_902_1_customer(
},
{
id: TalerFormAttributes.PERSONAL_IDENTIFICATION_DOCUMENT_COPY,
- label: i18n.str`Copy of identification document`,
+ label: i18n.fixed({
+ en: "Copy of identification document",
+ de: "Kopie des Ausweisdokuments",
+ }),
type: "file",
accept: "application/pdf",
- tooltip: i18n.str`Only official government IDs (incl. passports) are accepted. Please scan both sides if applicable.`,
+ tooltip: i18n.fixed({
+ en: "Only official government IDs (incl. passports) are accepted. Please scan both sides if applicable.",
+ de: "Es werden nur amtliche Ausweise (inkl. Pässe) akzeptiert. Bitte scannen Sie gegebenenfalls beide Seiten.",
+ }),
required: true,
},
{
id: TalerFormAttributes.SIGNING_AUTHORITY_TYPE,
- tooltip: i18n.str`Signing authority of the person`,
- label: i18n.str`Power of attorney arrangements`,
+ tooltip: i18n.fixed({
+ en: "Signing authority of the person",
+ de: "Zeichnungsberechtigung der Person",
+ }),
+ label: i18n.fixed({
+ en: "Power of attorney arrangements",
+ de: "Vollmachtregelung",
+ }),
type: "choiceStacked",
required: true,
choices: [
{
- label: i18n.str`Sole signature authority`,
+ label: i18n.fixed({
+ en: "Sole signature authority",
+ de: "Einzelzeichnungsberechtigung",
+ }),
value: "SINGLE",
},
{
- label: i18n.str`Collective authority with two signatures`,
+ label: i18n.fixed({
+ en: "Collective authority with two signatures",
+ de: "Kollektivzeichnungsberechtigung zu zweien",
+ }),
value: "COLLECTIVE_TWO",
},
{
- label: i18n.str`Other (please specify)`,
+ label: i18n.fixed({
+ en: "Other (please specify)",
+ de: "Andere (bitte angeben)",
+ }),
value: "OTHER",
},
],
@@ -368,7 +485,10 @@ export function design_VQF_902_1_customer(
{
id: TalerFormAttributes.SIGNING_AUTHORITY_TYPE_OTHER,
required: true,
- label: i18n.str`Other type of signing authority`,
+ label: i18n.fixed({
+ en: "Other type of signing authority",
+ de: "Andere Art der Zeichnungsberechtigung",
+ }),
type: "text",
hide(value, root) {
return (
@@ -379,27 +499,36 @@ export function design_VQF_902_1_customer(
{
id: TalerFormAttributes.SIGNING_AUTHORITY_EVIDENCE,
required: true,
- label: i18n.str`Evidence of signing authority:`,
+ label: i18n.fixed({
+ en: "Evidence of signing authority:",
+ de: "Nachweis der Zeichnungsberechtigung:",
+ }),
type: "choiceStacked",
choices: [
{
value: "CR",
- label: i18n.str`Company register extract`,
+ label: i18n.fixed({
+ en: "Company register extract",
+ de: "Handelsregisterauszug",
+ }),
},
{
value: "MANDATE",
- label: i18n.str`Mandate`,
+ label: i18n.fixed({ en: "Mandate", de: "Mandat" }),
},
{
value: "OTHER",
- label: i18n.str`Other`,
+ label: i18n.fixed({ en: "Other", de: "Andere" }),
},
],
},
{
id: TalerFormAttributes.SIGNING_AUTHORITY_EVIDENCE_OTHER,
required: true,
- label: i18n.str`Specify other way of establishing signing authority:`,
+ label: i18n.fixed({
+ en: "Specify other way of establishing signing authority:",
+ de: "Andere Art des Nachweises der Zeichnungsberechtigung angeben:",
+ }),
type: "text",
hide(value, root) {
return (
@@ -410,7 +539,10 @@ export function design_VQF_902_1_customer(
},
{
id: TalerFormAttributes.SIGNING_AUTHORITY_EVIDENCE_DOCUMENT_COPY,
- label: i18n.str`Copy of document that serves as evidence of signing authority:`,
+ label: i18n.fixed({
+ en: "Copy of document that serves as evidence of signing authority:",
+ de: "Kopie des Dokuments, das als Nachweis der Zeichnungsberechtigung dient:",
+ }),
type: "file",
accept: "application/pdf",
required: true,
@@ -421,8 +553,14 @@ export function design_VQF_902_1_customer(
},
// Version of the question for natural persons
{
- title: i18n.str`Customer classification`,
- description: i18n.str`Classification for the establishment of the beneficial owner of the assets and/or controlling person`,
+ title: i18n.fixed({
+ en: "Customer classification",
+ de: "Kundenklassifizierung",
+ }),
+ description: i18n.fixed({
+ en: "Classification for the establishment of the beneficial owner of the assets and/or controlling person",
+ de: "Klassifizierung zur Feststellung des wirtschaftlich Berechtigten der Vermögenswerte und/oder des Kontrollinhabers",
+ }),
hide(root) {
return root[TalerFormAttributes.CUSTOMER_TYPE] !== "NATURAL_PERSON";
},
@@ -430,16 +568,19 @@ export function design_VQF_902_1_customer(
{
id: TalerFormAttributes.CUSTOMER_TYPE_VQF,
required: true,
- label: i18n.str`The customer is:`,
+ label: i18n.fixed({ en: "The customer is:", de: "Der Kunde ist:" }),
type: "choiceStacked",
choices: [
{
value: "NATURAL_PERSON",
- label: i18n.str`A natural person and there are no doubts that this person is the sole beneficial owner of the assets`,
+ label: i18n.fixed({
+ en: "A natural person and there are no doubts that this person is the sole beneficial owner of the assets",
+ de: "Eine natürliche Person und es bestehen keine Zweifel, dass diese selber an den Vermögenswerten wirtschaftlich berechtigt ist",
+ }),
},
{
value: "OTHER",
- label: i18n.str`Other`,
+ label: i18n.fixed({ en: "Other", de: "Andere" }),
},
],
},
@@ -447,8 +588,14 @@ export function design_VQF_902_1_customer(
},
// Version for Businesses
{
- title: i18n.str`Customer classification`,
- description: i18n.str`Classification for the establishment of the beneficial owner of the assets and/or controlling person`,
+ title: i18n.fixed({
+ en: "Customer classification",
+ de: "Kundenklassifizierung",
+ }),
+ description: i18n.fixed({
+ en: "Classification for the establishment of the beneficial owner of the assets and/or controlling person",
+ de: "Klassifizierung zur Feststellung des wirtschaftlich Berechtigten der Vermögenswerte und/oder des Kontrollinhabers",
+ }),
hide(root) {
return root[TalerFormAttributes.CUSTOMER_TYPE] !== "LEGAL_ENTITY";
},
@@ -456,50 +603,68 @@ export function design_VQF_902_1_customer(
{
id: TalerFormAttributes.CUSTOMER_TYPE_VQF,
required: true,
- label: i18n.str`The customer is:`,
+ label: i18n.fixed({ en: "The customer is:", de: "Der Kunde ist:" }),
type: "choiceStacked",
choices: [
{
value: "OPERATIONAL",
- label: i18n.str`An operational legal entity or partnership`,
+ label: i18n.fixed({
+ en: "An operational legal entity or partnership",
+ de: "Eine operative juristische Person oder Personengesellschaft",
+ }),
},
{
value: "FOUNDATION",
- label: i18n.str`A foundation (or a similar construct; incl. underlying companies)`,
+ label: i18n.fixed({
+ en: "A foundation (or a similar construct; incl. underlying companies)",
+ de: "Eine Stiftung (oder ein ähnliches Konstrukt; inkl. Underlying Companies)",
+ }),
},
{
value: "TRUST",
- label: i18n.str`A trust (incl. underlying companies)`,
+ label: i18n.fixed({
+ en: "A trust (incl. underlying companies)",
+ de: "Ein Trust (inkl. Underlying Companies)",
+ }),
},
{
value: "LIFE_INSURANCE",
- label: i18n.str`A life insurance policy with separately managed accounts / securities accounts (so-called insurance wrappers)`,
+ label: i18n.fixed({
+ en: "A life insurance policy with separately managed accounts / securities accounts (so-called insurance wrappers)",
+ de: "Eine Lebensversicherung mit separater Konto-/Depotführung (sog. Insurance Wrapper)",
+ }),
},
{
value: "OTHER",
- label: i18n.str`Other`,
+ label: i18n.fixed({ en: "Other", de: "Andere" }),
},
],
},
],
},
{
- title: i18n.str`Signature(s)`,
- description: i18n.str`It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, document forgery)`,
+ title: i18n.fixed({ en: "Signature(s)", de: "Unterschrift(en)" }),
+ description: i18n.fixed({
+ en: "It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, document forgery)",
+ de: "Die vorsätzliche Angabe falscher Informationen in diesem Formular ist eine strafbare Handlung (Urkundenfälschung gemäss Artikel 251 des Schweizerischen Strafgesetzbuchs).",
+ }),
fields: [
{
type: "caption",
- label: i18n.str`The contracting partner hereby undertakes to inform automatically of any changes to the information contained herein.`,
+ label: i18n.fixed({
+ en: "The contracting partner hereby undertakes to inform automatically of any changes to the information contained herein.",
+ de: "Der Vertragspartner verpflichtet sich, Änderungen jeweils unaufgefordert mitzuteilen.",
+ }),
},
{
id: TalerFormAttributes.SIGNATURE,
- label: i18n.str`Signature(s)`,
+ label: i18n.fixed({ en: "Signature(s)", de: "Unterschrift(en)" }),
type: "text",
required: true,
},
{
id: TalerFormAttributes.SIGN_DATE,
- label: i18n.str`Date`,
+ label: i18n.fixed({ en: "Date", de: "Datum" }),
type: "isoDateText",
defaultValue: today,
placeholder: "dd/MM/yyyy",
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
@@ -18,13 +18,19 @@ import { TalerFormAttributes } from "@gnu-taler/taler-util";
import { format, intervalToDuration, isFuture, isValid, parse } from "date-fns";
import { InternationalizationAPI } from "../../context/translation.js";
import { DoubleColumnFormDesign, FormMetadata } from "../forms-types.js";
-import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js";
+import { vqfLanguagePolicy } from "./vqf.js";
export const form_vqf_902_1_officer = (
i18n: InternationalizationAPI,
): FormMetadata => ({
- label: i18n.str`Identification Form (acceptance)`,
- description: i18n.str`The customer has to be identified on entering into a permanent business relationship or on concluding a cash transaction, which meets the according threshold.`,
+ label: i18n.fixed({
+ en: "Identification Form (acceptance)",
+ de: "Identifikationsformular (Annahme)",
+ }),
+ description: i18n.fixed({
+ en: "The customer has to be identified on entering into a permanent business relationship or on concluding a cash transaction, which meets the according threshold.",
+ de: "Die Vertragspartei muss identifiziert werden bei allen dauernden Geschäftsbeziehungen sowie bei Kassageschäften, bei welchen der entsprechende Schwellenwert erreicht wird.",
+ }),
id: "vqf_902_1_officer",
version: 1,
config: VQF_902_1_officer(i18n),
@@ -36,7 +42,6 @@ export const form_vqf_902_1_officer = (
export function VQF_902_1_officer(
i18n: InternationalizationAPI,
): DoubleColumnFormDesign {
- i18n = withVqfTranslations(i18n);
const today = format(new Date(), "yyyy-MM-dd");
return {
@@ -44,11 +49,17 @@ export function VQF_902_1_officer(
languagePolicy: vqfLanguagePolicy(i18n),
sections: [
{
- title: i18n.str`Acceptance of business relationship`,
+ title: i18n.fixed({
+ en: "Acceptance of business relationship",
+ de: "Annahme der Geschäftsbeziehung",
+ }),
fields: [
{
id: TalerFormAttributes.ACCEPTANCE_DATE,
- label: i18n.str`Date (conclusion of contract):`,
+ label: i18n.fixed({
+ en: "Date (conclusion of contract):",
+ de: "Datum (Vertragsabschluss):",
+ }),
type: "isoDateText",
placeholder: "dd/MM/yyyy",
pattern: "dd/MM/yyyy",
@@ -58,55 +69,82 @@ export function VQF_902_1_officer(
},
{
id: TalerFormAttributes.ACCEPTANCE_METHOD,
- label: i18n.str`Accepted via:`,
+ label: i18n.fixed({ en: "Accepted via:", de: "Angenommen über:" }),
type: "choiceStacked",
choices: [
{
value: "FACE_TO_FACE",
- label: i18n.str`Face to face`,
+ label: i18n.fixed({ en: "Face to face", de: "Persönlich" }),
},
{
value: "AUTHENTICATED_COPY",
- label: i18n.str`Authenticated copy of identification document`,
+ label: i18n.fixed({
+ en: "Authenticated copy of identification document",
+ de: "Beglaubigte Kopie des Ausweisdokuments",
+ }),
},
{
value: "RESIDENTIAL_ADDRESS_VALIDATED",
- label: i18n.str`Residential address validated`,
+ label: i18n.fixed({
+ en: "Residential address validated",
+ de: "Wohnsitzadresse überprüft",
+ }),
},
],
required: true,
},
{
id: TalerFormAttributes.ACCEPTANCE_FURTHER_INFO,
- label: i18n.str`Further information:`,
+ label: i18n.fixed({
+ en: "Further information:",
+ de: "Weitere Angaben:",
+ }),
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.`,
+ title: i18n.fixed({
+ en: "Evaluation with regard to embargo procedures/terrorism lists on establishing the business relationship",
+ de: "Prüfung im Hinblick auf Embargomassnahmen/Terrorlisten bei Aufnahme der Geschäftsbeziehung",
+ }),
+ description: i18n.fixed({
+ en: "Verification whether the customer, beneficial owners of the assets, controlling persons, authorized representatives or other involved persons are listed on an embargo/terrorism list.",
+ de: "Überprüfung, ob der Kunde, die wirtschaftlich Berechtigten der Vermögenswerte, die Kontrollinhaber, bevollmächtigten Vertreter oder andere beteiligte Personen auf einer Embargo-/Terrorliste aufgeführt sind.",
+ }),
fields: [
{
id: TalerFormAttributes.EMBARGO_TERRORISM_CHECK_RESULT,
- label: i18n.str`Embargo/terrorism status:`,
+ label: i18n.fixed({
+ en: "Embargo/terrorism status:",
+ de: "Embargo-/Terror-Status:",
+ }),
type: "choiceStacked",
required: true,
choices: [
{
- label: i18n.str`Not listed on embargo/terrorism list.`,
+ label: i18n.fixed({
+ en: "Not listed on embargo/terrorism list.",
+ de: "Nicht auf einer Embargo-/Terrorliste aufgeführt.",
+ }),
value: "NOT_LISTED",
},
{
- label: i18n.str`Listed on embargo/terrorism list.`,
+ label: i18n.fixed({
+ en: "Listed on embargo/terrorism list.",
+ de: "Auf einer Embargo-/Terrorliste aufgeführt.",
+ }),
value: "LISTED",
},
],
},
{
id: TalerFormAttributes.EMBARGO_TERRORISM_INFO,
- label: i18n.str`Embargo/terrorism information:`,
+ label: i18n.fixed({
+ en: "Embargo/terrorism information:",
+ de: "Embargo-/Terror-Angaben:",
+ }),
type: "textArea",
hide(value, root): boolean {
return (
@@ -118,7 +156,10 @@ export function VQF_902_1_officer(
},
{
id: TalerFormAttributes.EMBARGO_TERRORISM_CHECK_DATE,
- label: i18n.str`Verification date`,
+ label: i18n.fixed({
+ en: "Verification date",
+ de: "Datum der Überprüfung",
+ }),
type: "isoDateText",
required: true,
defaultValue: today,
@@ -128,17 +169,26 @@ export function VQF_902_1_officer(
//FIXME: why returning in this format even if pattern is in another?
const time = parse(text, "yyyy-MM-dd", new Date());
if (!isValid(time)) {
- return i18n.str`invalid format`;
+ return i18n.fixed({
+ en: "invalid format",
+ de: "ungültiges Format",
+ });
}
if (isFuture(time)) {
- return i18n.str`it can't be in the future`;
+ return i18n.fixed({
+ en: "it can't be in the future",
+ de: "darf nicht in der Zukunft liegen",
+ });
}
const { years } = intervalToDuration({
start: time,
end: new Date(),
});
if (years && years > 120) {
- return i18n.str`it can't be greater than 120 years`;
+ return i18n.fixed({
+ en: "it can't be greater than 120 years",
+ de: "darf nicht größer als 120 Jahre sein",
+ });
}
return undefined;
},
@@ -146,25 +196,34 @@ export function VQF_902_1_officer(
],
},
{
- title: i18n.str`Supplemental File Upload`,
- description: i18n.str`Optional supplemental information for the establishment of the business relationship with the customer.`,
+ title: i18n.fixed({
+ en: "Supplemental File Upload",
+ de: "Hochladen zusätzlicher Dokumente",
+ }),
+ description: i18n.fixed({
+ en: "Optional supplemental information for the establishment of the business relationship with the customer.",
+ de: "Optionale zusätzliche Informationen zur Begründung der Geschäftsbeziehung mit dem Kunden.",
+ }),
fields: [
{
id: TalerFormAttributes.SUPPLEMENTAL_FILES_LIST,
- label: i18n.str`Supplemental files`,
+ label: i18n.fixed({
+ en: "Supplemental files",
+ de: "Ergänzende Dokumente",
+ }),
type: "array",
labelFieldId: "FILE.FILENAME",
required: false,
fields: [
{
id: TalerFormAttributes.DESCRIPTION,
- label: i18n.str`Description`,
+ label: i18n.fixed({ en: "Description", de: "Beschreibung" }),
type: "textArea",
required: true,
},
{
id: TalerFormAttributes.FILE,
- label: i18n.str`File (PDF)`,
+ label: i18n.fixed({ en: "File (PDF)", de: "Datei (PDF)" }),
type: "file",
accept: "application/pdf",
required: true,
diff --git a/packages/web-util/src/forms/gana/VQF_902_4.ts b/packages/web-util/src/forms/gana/VQF_902_4.ts
@@ -3,12 +3,12 @@ import { InternationalizationAPI } from "../../context/translation.js";
import { DoubleColumnFormDesign, FormMetadata } from "../forms-types.js";
import { Descr } from "./VQF_902_1_customer.js";
import { intervalToDuration, parse, isFuture, isValid } from "date-fns";
-import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js";
+import { vqfLanguagePolicy } from "./vqf.js";
export const form_vqf_902_4 = (
i18n: InternationalizationAPI,
): FormMetadata => ({
- label: i18n.str`Risk Profile AMLA`,
+ label: i18n.fixed({ en: "Risk Profile AMLA", de: "Risikoprofil GwG" }),
id: "vqf_902_4",
version: 1,
config: VQF_902_4(i18n),
@@ -17,83 +17,108 @@ export const form_vqf_902_4 = (
export function VQF_902_4(
i18n: InternationalizationAPI,
): DoubleColumnFormDesign {
- i18n = withVqfTranslations(i18n);
return {
type: "double-column",
languagePolicy: vqfLanguagePolicy(i18n),
sections: [
{
- title: i18n.str`Information on customer`,
+ title: i18n.fixed({
+ en: "Information on customer",
+ de: "Angaben zum Kunden",
+ }),
description: Descr.CUSTOMER_INFO_TYPE(i18n),
fields: [
{
id: TalerFormAttributes.CUSTOMER_NAME,
- label: i18n.str`Customer`,
- // help: i18n.str``,
+ label: i18n.fixed({ en: "Customer", de: "Kunde" }),
type: "text",
required: true,
},
],
},
{
- title: i18n.str`Evaluation of politically exposed persons (PEP-Check)`,
- description: i18n.str`This evaluation has to be completed by all members for every business relationship.`,
+ title: i18n.fixed({
+ en: "Evaluation of politically exposed persons (PEP-Check)",
+ de: "Beurteilung politisch exponierter Personen (PEP-Check)",
+ }),
+ description: i18n.fixed({
+ en: "This evaluation has to be completed by all members for every business relationship.",
+ de: "Diese Beurteilung ist von allen Mitgliedern für jede Geschäftsbeziehung durchzuführen.",
+ }),
fields: [
{
id: TalerFormAttributes.PEP_FOREIGN,
- 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?`,
+ label: i18n.fixed({ en: "Foreign PEP", de: "Ausländische PEP" }),
+ help: i18n.fixed({
+ en: "Is the customer, the beneficial owner or the controlling person or authorised representative a foreign PEP or closely related to such a person?",
+ de: "Ist der Kunde, der wirtschaftlich Berechtigte, der Kontrollinhaber oder der bevollmächtigte Vertreter eine ausländische PEP oder steht in einer engen Beziehung zu einer solchen Person?",
+ }),
type: "choiceHorizontal",
required: true,
choices: [
{
value: true,
- label: i18n.str`Yes`,
+ label: i18n.fixed({ en: "Yes", de: "Ja" }),
},
{
value: false,
- label: i18n.str`No`,
+ label: i18n.fixed({ en: "No", de: "Nein" }),
},
],
},
{
id: TalerFormAttributes.PEP_DOMESTIC,
- 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?`,
+ label: i18n.fixed({ en: "Domestic PEP", de: "Inländische PEP" }),
+ help: i18n.fixed({
+ en: "Is the customer, the beneficial owner or the controlling person or authorised representative a domestic PEP or closely related to such a person?",
+ de: "Ist der Kunde, der wirtschaftlich Berechtigte, der Kontrollinhaber oder der bevollmächtigte Vertreter eine inländische PEP oder steht in einer engen Beziehung zu einer solchen Person?",
+ }),
type: "choiceHorizontal",
required: true,
choices: [
{
value: true,
- label: i18n.str`Yes`,
+ label: i18n.fixed({ en: "Yes", de: "Ja" }),
},
{
value: false,
- label: i18n.str`No`,
+ label: i18n.fixed({ en: "No", de: "Nein" }),
},
],
},
{
id: TalerFormAttributes.PEP_INTERNATIONAL_ORGANIZATION,
- label: i18n.str`PEP of International Organisations`,
- help: i18n.str`Is the customer, the beneficial owner or the controlling person or authorised representative a PEP in International Organisations or closely related to such a person?`,
+ label: i18n.fixed({
+ en: "PEP of International Organisations",
+ de: "PEP internationaler Organisationen",
+ }),
+ help: i18n.fixed({
+ en: "Is the customer, the beneficial owner or the controlling person or authorised representative a PEP in International Organisations or closely related to such a person?",
+ de: "Ist der Kunde, der wirtschaftlich Berechtigte, der Kontrollinhaber oder der bevollmächtigte Vertreter eine PEP einer internationalen Organisation oder steht in einer engen Beziehung zu einer solchen Person?",
+ }),
type: "choiceHorizontal",
required: true,
choices: [
{
value: true,
- label: i18n.str`Yes`,
+ label: i18n.fixed({ en: "Yes", de: "Ja" }),
},
{
value: false,
- label: i18n.str`No`,
+ label: i18n.fixed({ en: "No", de: "Nein" }),
},
],
},
{
id: TalerFormAttributes.PEP_ACCEPTANCE_DATE,
- 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 obtained on.`,
+ label: i18n.fixed({
+ en: "Acceptance date",
+ de: "Datum der Annahme",
+ }),
+ help: i18n.fixed({
+ en: "When the decision of the Senior executive body on the acceptance of a business relationship with a PEP was obtained on.",
+ de: "Datum, an dem der Entscheid des obersten Geschäftsführungsorgans über die Annahme einer Geschäftsbeziehung mit einer PEP eingeholt wurde.",
+ }),
type: "isoDateText",
placeholder: "dd/MM/yyyy",
pattern: "dd/MM/yyyy",
@@ -102,17 +127,26 @@ export function VQF_902_4(
//FIXME: why returning in this format even if pattern is in another?
const time = parse(text, "yyyy-MM-dd", new Date());
if (!isValid(time)) {
- return i18n.str`invalid format`;
+ return i18n.fixed({
+ en: "invalid format",
+ de: "ungültiges Format",
+ });
}
if (isFuture(time)) {
- return i18n.str`it can't be in the future`;
+ return i18n.fixed({
+ en: "it can't be in the future",
+ de: "darf nicht in der Zukunft liegen",
+ });
}
const { years } = intervalToDuration({
start: time,
end: new Date(),
});
if (years && years > 120) {
- return i18n.str`it can't be greater than 120 years`;
+ return i18n.fixed({
+ en: "it can't be greater than 120 years",
+ de: "darf nicht größer als 120 Jahre sein",
+ });
}
return undefined;
},
@@ -127,30 +161,48 @@ export function VQF_902_4(
],
},
{
- title: i18n.str`Evaluation "high risk" or non-cooperative country`,
- description: i18n.str`This evaluation has to be completed by all members for every business relationship.`,
+ title: i18n.fixed({
+ en: 'Evaluation "high risk" or non-cooperative country',
+ de: "Beurteilung „Hochrisikoland“ oder nicht kooperatives Land",
+ }),
+ description: i18n.fixed({
+ en: "This evaluation has to be completed by all members for every business relationship.",
+ de: "Diese Beurteilung ist von allen Mitgliedern für jede Geschäftsbeziehung durchzuführen.",
+ }),
fields: [
{
id: TalerFormAttributes.HIGH_RISK_COUNTRY,
- 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?`,
+ label: i18n.fixed({
+ en: "High-risk or non-cooperative country",
+ de: "Hochrisikoland oder nicht kooperatives Land",
+ }),
+ help: i18n.fixed({
+ en: "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?",
+ de: "Befindet sich der Kunde, der wirtschaftlich Berechtigte, der Kontrollinhaber oder der bevollmächtigte Vertreter in einem Land, das von der FATF als Hochrisikoland oder nicht kooperatives Land eingestuft wird und für welches die FATF erhöhte Sorgfaltspflichten verlangt?",
+ }),
type: "choiceHorizontal",
required: true,
choices: [
{
value: true,
- label: i18n.str`Yes`,
+ label: i18n.fixed({ en: "Yes", de: "Ja" }),
},
{
value: false,
- label: i18n.str`No`,
+ label: i18n.fixed({ en: "No", de: "Nein" }),
},
],
},
{
id: TalerFormAttributes.HIGH_RISK_ACCEPTANCE_DATE,
- label: i18n.str`Acceptance date`,
- help: i18n.str`When the decision of the Senior executive body on the acceptance of such a business relationship was obtained on.`,
+ label: i18n.fixed({
+ en: "Acceptance date",
+ de: "Datum der Annahme",
+ }),
+ help: i18n.fixed({
+ en: "When the decision of the Senior executive body on the acceptance of such a business relationship was obtained on.",
+ de: "Datum, an dem der Entscheid des obersten Geschäftsführungsorgans über die Annahme einer solchen Geschäftsbeziehung eingeholt wurde.",
+ }),
type: "isoDateText",
placeholder: "dd/MM/yyyy",
pattern: "dd/MM/yyyy",
@@ -159,17 +211,26 @@ export function VQF_902_4(
//FIXME: why returning in this format even if pattern is in another?
const time = parse(text, "yyyy-MM-dd", new Date());
if (!isValid(time)) {
- return i18n.str`invalid format`;
+ return i18n.fixed({
+ en: "invalid format",
+ de: "ungültiges Format",
+ });
}
if (isFuture(time)) {
- return i18n.str`it can't be in the future`;
+ return i18n.fixed({
+ en: "it can't be in the future",
+ de: "darf nicht in der Zukunft liegen",
+ });
}
const { years } = intervalToDuration({
start: time,
end: new Date(),
});
if (years && years > 120) {
- return i18n.str`it can't be greater than 120 years`;
+ return i18n.fixed({
+ en: "it can't be greater than 120 years",
+ de: "darf nicht größer als 120 Jahre sein",
+ });
}
return undefined;
},
@@ -181,7 +242,10 @@ export function VQF_902_4(
],
},
{
- title: i18n.str`Evaluation of business relationship risk`,
+ title: i18n.fixed({
+ en: "Evaluation of business relationship risk",
+ de: "Beurteilung des Risikos der Geschäftsbeziehung",
+ }),
fields: [
{
type: "caption",
@@ -191,30 +255,48 @@ export function VQF_902_4(
],
},
{
- title: i18n.str`Country risk`,
+ title: i18n.fixed({ en: "Country risk", de: "Länderrisiko" }),
fields: [
{
id: TalerFormAttributes.COUNTRY_RISK_NATIONALITY_TYPE,
- label: i18n.str`Applicable country risk types`,
+ label: i18n.fixed({
+ en: "Applicable country risk types",
+ de: "Anwendbare Arten von Länderrisiken",
+ }),
choices: [
{
- label: i18n.str`Nationality of the customer`,
+ label: i18n.fixed({
+ en: "Nationality of the customer",
+ de: "Staatsangehörigkeit des Kunden",
+ }),
value: "NATIONALITY_CUSTOMER",
},
{
- label: i18n.str`Nationality of the beneficial owner of the assets`,
+ label: i18n.fixed({
+ en: "Nationality of the beneficial owner of the assets",
+ de: "Staatsangehörigkeit des wirtschaftlich Berechtigten der Vermögenswerte",
+ }),
value: "NATIONALITY_OWNER",
},
{
- label: i18n.str`Domicile/residential address of the customer`,
+ label: i18n.fixed({
+ en: "Domicile/residential address of the customer",
+ de: "Sitz/Wohnsitzadresse des Kunden",
+ }),
value: "DOMICILE_CUSTOMER",
},
{
- label: i18n.str`Domicile/residential address of the beneficial owner of the assets`,
+ label: i18n.fixed({
+ en: "Domicile/residential address of the beneficial owner of the assets",
+ de: "Sitz/Wohnsitzadresse des wirtschaftlich Berechtigten der Vermögenswerte",
+ }),
value: "DOMICILE_OWNER",
},
{
- label: i18n.str`Domicile/residential address of the controlling person`,
+ label: i18n.fixed({
+ en: "Domicile/residential address of the controlling person",
+ de: "Sitz/Wohnsitzadresse des Kontrollinhabers",
+ }),
value: "DOMICILE_CONTROLLING",
},
],
@@ -223,23 +305,47 @@ export function VQF_902_4(
},
{
id: TalerFormAttributes.COUNTRY_RISK_NATIONALITY_LEVEL,
- label: i18n.str`Country risk level (nationality)`,
- help: i18n.str`Risk category according to VQF country list (VQF doc. no. 902.4.1)`,
+ label: i18n.fixed({
+ en: "Country risk level (nationality)",
+ de: "Länderrisikostufe (Staatsangehörigkeit)",
+ }),
+ help: i18n.fixed({
+ en: "Risk category according to VQF country list (VQF doc. no. 902.4.1)",
+ de: "Risikokategorie gemäss VQF-Länderliste (VQF-Dok. Nr. 902.4.1)",
+ }),
choices: [
{
- label: i18n.str`Low (Risk 0)`,
+ label: i18n.fixed({
+ en: "Low (Risk 0)",
+ de: "Niedrig (Risiko 0)",
+ }),
value: "LOW",
- description: i18n.str`Risk 0 acc. to VQF country list (VQF doc. no. 902.4.1)`,
+ description: i18n.fixed({
+ en: "Risk 0 acc. to VQF country list (VQF doc. no. 902.4.1)",
+ de: "Risiko 0 gemäss VQF-Länderliste (VQF-Dok. Nr. 902.4.1)",
+ }),
},
{
- label: i18n.str`Medium (Risk 1)`,
+ label: i18n.fixed({
+ en: "Medium (Risk 1)",
+ de: "Mittel (Risiko 1)",
+ }),
value: "MEDIUM",
- description: i18n.str`Risk 1 acc. to VQF country list (VQF doc. no. 902.4.1)`,
+ description: i18n.fixed({
+ en: "Risk 1 acc. to VQF country list (VQF doc. no. 902.4.1)",
+ de: "Risiko 1 gemäss VQF-Länderliste (VQF-Dok. Nr. 902.4.1)",
+ }),
},
{
- label: i18n.str`High (Risk 2)`,
+ label: i18n.fixed({
+ en: "High (Risk 2)",
+ de: "Hoch (Risiko 2)",
+ }),
value: "HIGH",
- description: i18n.str`Risk 2 acc. to VQF country list (VQF doc. no. 902.4.1)`,
+ description: i18n.fixed({
+ en: "Risk 2 acc. to VQF country list (VQF doc. no. 902.4.1)",
+ de: "Risiko 2 gemäss VQF-Länderliste (VQF-Dok. Nr. 902.4.1)",
+ }),
},
],
type: "choiceHorizontal",
@@ -247,14 +353,20 @@ export function VQF_902_4(
},
{
id: TalerFormAttributes.COUNTRY_RISK_BUSINESS_TYPE,
- label: i18n.str`Country risk type (place of business activity)`,
+ label: i18n.fixed({
+ en: "Country risk type (place of business activity)",
+ de: "Art des Länderrisikos (Ort der Geschäftstätigkeit)",
+ }),
choices: [
{
- label: i18n.str`Customer`,
+ label: i18n.fixed({ en: "Customer", de: "Kunde" }),
value: "CUSTOMER",
},
{
- label: i18n.str`Beneficial owner`,
+ label: i18n.fixed({
+ en: "Beneficial owner",
+ de: "Wirtschaftlich Berechtigte(r)",
+ }),
value: "OWNER",
},
],
@@ -263,23 +375,47 @@ export function VQF_902_4(
},
{
id: TalerFormAttributes.COUNTRY_RISK_BUSINESS_LEVEL,
- label: i18n.str`Country risk level (business activity)`,
- help: i18n.str`Risk category according to VQF country list (VQF doc. no. 902.4.1)`,
+ label: i18n.fixed({
+ en: "Country risk level (business activity)",
+ de: "Länderrisikostufe (Geschäftstätigkeit)",
+ }),
+ help: i18n.fixed({
+ en: "Risk category according to VQF country list (VQF doc. no. 902.4.1)",
+ de: "Risikokategorie gemäss VQF-Länderliste (VQF-Dok. Nr. 902.4.1)",
+ }),
choices: [
{
- label: i18n.str`Low (Risk 0)`,
+ label: i18n.fixed({
+ en: "Low (Risk 0)",
+ de: "Niedrig (Risiko 0)",
+ }),
value: "LOW",
- description: i18n.str`Risk 0 acc. to VQF country list (VQF doc. no. 902.4.1)`,
+ description: i18n.fixed({
+ en: "Risk 0 acc. to VQF country list (VQF doc. no. 902.4.1)",
+ de: "Risiko 0 gemäss VQF-Länderliste (VQF-Dok. Nr. 902.4.1)",
+ }),
},
{
- label: i18n.str`Medium (Risk 1)`,
+ label: i18n.fixed({
+ en: "Medium (Risk 1)",
+ de: "Mittel (Risiko 1)",
+ }),
value: "MEDIUM",
- description: i18n.str`Risk 1 acc. to VQF country list (VQF doc. no. 902.4.1)`,
+ description: i18n.fixed({
+ en: "Risk 1 acc. to VQF country list (VQF doc. no. 902.4.1)",
+ de: "Risiko 1 gemäss VQF-Länderliste (VQF-Dok. Nr. 902.4.1)",
+ }),
},
{
- label: i18n.str`High (Risk 2)`,
+ label: i18n.fixed({
+ en: "High (Risk 2)",
+ de: "Hoch (Risiko 2)",
+ }),
value: "HIGH",
- description: i18n.str`Risk 2 acc. to VQF country list (VQF doc. no. 902.4.1)`,
+ description: i18n.fixed({
+ en: "Risk 2 acc. to VQF country list (VQF doc. no. 902.4.1)",
+ de: "Risiko 2 gemäss VQF-Länderliste (VQF-Dok. Nr. 902.4.1)",
+ }),
},
],
type: "choiceHorizontal",
@@ -287,16 +423,25 @@ export function VQF_902_4(
],
},
{
- title: i18n.str`Industry risk`,
+ title: i18n.fixed({ en: "Industry risk", de: "Branchenrisiko" }),
fields: [
{
id: TalerFormAttributes.INDUSTRY_RISK_TYPE,
- label: i18n.str`Industry risk source`,
+ label: i18n.fixed({
+ en: "Industry risk source",
+ de: "Quelle des Branchenrisikos",
+ }),
type: "selectMultiple",
choices: [
- { label: i18n.str`Customer`, value: "CUSTOMER" },
{
- label: i18n.str`Beneficial owner of the assets`,
+ label: i18n.fixed({ en: "Customer", de: "Kunde" }),
+ value: "CUSTOMER",
+ },
+ {
+ label: i18n.fixed({
+ en: "Beneficial owner of the assets",
+ de: "Wirtschaftlich Berechtigter der Vermögenswerte",
+ }),
value: "OWNER",
},
],
@@ -304,32 +449,65 @@ export function VQF_902_4(
},
{
id: TalerFormAttributes.INDUSTRY_RISK_LEVEL,
- label: i18n.str`Industry risk level`,
+ label: i18n.fixed({
+ en: "Industry risk level",
+ de: "Branchenrisikostufe",
+ }),
type: "choiceStacked",
choices: [
{
- label: i18n.str`Transparent (Risk Level 0)`,
- description: i18n.str`Clearly defined, transparent, easily comprehensible business activity well known to the member.`,
+ label: i18n.fixed({
+ en: "Transparent (Risk Level 0)",
+ de: "Transparent (Risikostufe 0)",
+ }),
+ description: i18n.fixed({
+ en: "Clearly defined, transparent, easily comprehensible business activity well known to the member.",
+ de: "Klar definierte, transparente, leicht nachvollziehbare Geschäftstätigkeit, die dem Mitglied gut bekannt ist.",
+ }),
value: "TRANSPARENT",
},
{
- label: i18n.str`High cash transactions (Risk Level 1)`,
- description: i18n.str`Business activity with a high level of cash transactions.`,
+ label: i18n.fixed({
+ en: "High cash transactions (Risk Level 1)",
+ de: "Hoher Anteil an Bargeldtransaktionen (Risikostufe 1)",
+ }),
+ description: i18n.fixed({
+ en: "Business activity with a high level of cash transactions.",
+ de: "Geschäftstätigkeit mit einem hohen Anteil an Bartransaktionen.",
+ }),
value: "HIGH_CASH_TRANSACTION",
},
{
- label: i18n.str`Not well known (Risk Level 1)`,
- description: i18n.str`Business activity not well known to the member.`,
+ label: i18n.fixed({
+ en: "Not well known (Risk Level 1)",
+ de: "Nicht gut bekannt (Risikostufe 1)",
+ }),
+ description: i18n.fixed({
+ en: "Business activity not well known to the member.",
+ de: "Geschäftstätigkeit, die dem Mitglied nicht gut bekannt ist.",
+ }),
value: "NOT_WELL_KNOWN",
},
{
- label: i18n.str`High-risk trade (Risk Level 2)`,
- description: i18n.str`Trade in munitions/arms, raw gem stones/diamonds, jewellery, international trade in exotic animals, casino and lottery business, trade in erotic wares.`,
+ label: i18n.fixed({
+ en: "High-risk trade (Risk Level 2)",
+ de: "Handel mit hohem Risiko (Risikostufe 2)",
+ }),
+ description: i18n.fixed({
+ en: "Trade in munitions/arms, raw gem stones/diamonds, jewellery, international trade in exotic animals, casino and lottery business, trade in erotic wares.",
+ de: "Handel mit Munition/Waffen, Rohedelsteinen/Diamanten, Schmuck, internationaler Handel mit exotischen Tieren, Casino- und Lotteriegeschäft, Handel mit Erotikartikeln.",
+ }),
value: "HIGH_RISK_TRADE",
},
{
- label: i18n.str`Unknown industry (Risk Level 2)`,
- description: i18n.str`Member has no personal knowledge of the customer’s industry.`,
+ label: i18n.fixed({
+ en: "Unknown industry (Risk Level 2)",
+ de: "Unbekannte Branche (Risikostufe 2)",
+ }),
+ description: i18n.fixed({
+ en: "Member has no personal knowledge of the customer’s industry.",
+ de: "Das Mitglied verfügt über keine persönliche Kenntnis der Branche des Kunden.",
+ }),
value: "UNKNOWN_INDUSTRY",
},
],
@@ -338,26 +516,50 @@ export function VQF_902_4(
],
},
{
- title: i18n.str`Contact risk`,
- description: i18n.str`Type of contact to the customer/beneficial owner of the assets.`,
+ title: i18n.fixed({ en: "Contact risk", de: "Kontaktrisiko" }),
+ description: i18n.fixed({
+ en: "Type of contact to the customer/beneficial owner of the assets.",
+ de: "Art des Kontakts zum Kunden/wirtschaftlich Berechtigten der Vermögenswerte.",
+ }),
fields: [
{
id: TalerFormAttributes.CONTACT_RISK_LEVEL,
- label: i18n.str`Contact risk level`,
+ label: i18n.fixed({
+ en: "Contact risk level",
+ de: "Kontaktrisikostufe",
+ }),
choices: [
{
- label: i18n.str`Low contact risk`,
- description: i18n.str`Personal acquaintance between member and customer/beneficial owner of the assets over several years (at least 2) prior to entering into the business relationship`,
+ label: i18n.fixed({
+ en: "Low contact risk",
+ de: "Tiefes Kontaktrisiko",
+ }),
+ description: i18n.fixed({
+ en: "Personal acquaintance between member and customer/beneficial owner of the assets over several years (at least 2) prior to entering into the business relationship",
+ de: "Persönliche Bekanntschaft zwischen Mitglied und Kunde/wirtschaftlich Berechtigtem der Vermögenswerte über mehrere Jahre (mindestens 2) vor Aufnahme der Geschäftsbeziehung",
+ }),
value: "LOW",
},
{
- label: i18n.str`Medium contact risk`,
- description: i18n.str`The customer/beneficial owner was not personally known to the member for several years (at least 2) prior to entering into the business relationship; however (a) no business was entered into in the absence of the customer/beneficial owner, or (b) the customer was at least introduced/brokered by a trusted third party.`,
+ label: i18n.fixed({
+ en: "Medium contact risk",
+ de: "Mittleres Kontaktrisiko",
+ }),
+ description: i18n.fixed({
+ en: "The customer/beneficial owner was not personally known to the member for several years (at least 2) prior to entering into the business relationship; however (a) no business was entered into in the absence of the customer/beneficial owner, or (b) the customer was at least introduced/brokered by a trusted third party.",
+ de: "Der Kunde/wirtschaftlich Berechtigte war dem Mitglied nicht während mehrerer Jahre (mindestens 2) vor Aufnahme der Geschäftsbeziehung persönlich bekannt; jedoch wurde (a) keine Geschäftsbeziehung in Abwesenheit des Kunden/wirtschaftlich Berechtigten eingegangen, oder (b) der Kunde wurde zumindest von einem vertrauenswürdigen Dritten eingeführt/vermittelt.",
+ }),
value: "MEDIUM",
},
{
- label: i18n.str`High contact risk`,
- description: i18n.str`The customer/beneficial owner was not personally known to the member and business was entered into in the absence of the former (relationship by correspondence) and the customer was not introduced/brokered by a trusted third party.`,
+ label: i18n.fixed({
+ en: "High contact risk",
+ de: "Hohes Kontaktrisiko",
+ }),
+ description: i18n.fixed({
+ en: "The customer/beneficial owner was not personally known to the member and business was entered into in the absence of the former (relationship by correspondence) and the customer was not introduced/brokered by a trusted third party.",
+ de: "Der Kunde/wirtschaftlich Berechtigte war dem Mitglied nicht persönlich bekannt, und die Geschäftsbeziehung wurde in dessen Abwesenheit eingegangen (Korrespondenzbeziehung), wobei der Kunde nicht von einem vertrauenswürdigen Dritten eingeführt/vermittelt wurde.",
+ }),
value: "HIGH",
},
],
@@ -367,29 +569,56 @@ export function VQF_902_4(
],
},
{
- title: i18n.str`Summary evaluation`,
+ title: i18n.fixed({
+ en: "Summary evaluation",
+ de: "Zusammenfassende Beurteilung",
+ }),
fields: [
{
id: TalerFormAttributes.RISK_RATIONALE,
- label: i18n.str`Justification for risk assessment`,
+ label: i18n.fixed({
+ en: "Justification for risk assessment",
+ de: "Begründung der Risikobeurteilung",
+ }),
type: "textArea",
required: false,
},
{
id: TalerFormAttributes.RISK_CLASSIFICATION_LEVEL,
- label: i18n.str`Risk classification`,
- help: i18n.str`Conclusion whether the business relationship is with or without increased risk.`,
+ label: i18n.fixed({
+ en: "Risk classification",
+ de: "Risikoklassifizierung",
+ }),
+ help: i18n.fixed({
+ en: "Conclusion whether the business relationship is with or without increased risk.",
+ de: "Schlussfolgerung, ob die Geschäftsbeziehung mit oder ohne erhöhtes Risiko verbunden ist.",
+ }),
choices: [
- { label: i18n.str`No high risk`, value: "NO_HIGH_RISK" },
- { label: i18n.str`High risk`, value: "HIGH_RISK" },
+ {
+ label: i18n.fixed({
+ en: "No high risk",
+ de: "Kein hohes Risiko",
+ }),
+ value: "NO_HIGH_RISK",
+ },
+ {
+ label: i18n.fixed({ en: "High risk", de: "Hohes Risiko" }),
+ value: "HIGH_RISK",
+ },
],
type: "choiceHorizontal",
required: false,
},
{
id: TalerFormAttributes.RISK_ACCEPTANCE_DATE,
- 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 obtained on.`,
+ label: i18n.fixed({
+ en: "Acceptance date",
+ de: "Datum der Annahme",
+ }),
+ help: i18n.fixed({
+ en: "When the decision of the Senior executive body on the acceptance of a business relationship with increased risk was obtained on.",
+ de: "Datum, an dem der Entscheid des obersten Geschäftsführungsorgans über die Annahme einer Geschäftsbeziehung mit erhöhtem Risiko eingeholt wurde.",
+ }),
type: "isoDateText",
placeholder: "dd/MM/yyyy",
pattern: "dd/MM/yyyy",
@@ -398,17 +627,26 @@ export function VQF_902_4(
//FIXME: why returning in this format even if pattern is in another?
const time = parse(text, "yyyy-MM-dd", new Date());
if (!isValid(time)) {
- return i18n.str`invalid format`;
+ return i18n.fixed({
+ en: "invalid format",
+ de: "ungültiges Format",
+ });
}
if (isFuture(time)) {
- return i18n.str`it can't be in the future`;
+ return i18n.fixed({
+ en: "it can't be in the future",
+ de: "darf nicht in der Zukunft liegen",
+ });
}
const { years } = intervalToDuration({
start: time,
end: new Date(),
});
if (years && years > 120) {
- return i18n.str`it can't be greater than 120 years`;
+ return i18n.fixed({
+ en: "it can't be greater than 120 years",
+ de: "darf nicht größer als 120 Jahre sein",
+ });
}
return undefined;
},
diff --git a/packages/web-util/src/forms/gana/VQF_902_5.ts b/packages/web-util/src/forms/gana/VQF_902_5.ts
@@ -2,13 +2,16 @@ import { InternationalizationAPI } from "../../context/translation.js";
import { DoubleColumnFormDesign, FormMetadata } from "../forms-types.js";
import { Descr } from "./VQF_902_1_customer.js";
import { TalerFormAttributes } from "@gnu-taler/taler-util";
-import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js";
+import { vqfLanguagePolicy } from "./vqf.js";
export const form_vqf_902_5 = (
i18n: InternationalizationAPI,
): FormMetadata => ({
- label: i18n.str`Customer Profile`,
- description: i18n.str`The information below has to refer to the persons from whom the assets originate ultimately (e.g. beneficial owner of the assets, founder/creator of a trust or foundation). Is the customer an operational legal entity or partnership the information may refer to the entity itself (not to the controlling person), unless the entity holds the assets in trust for a third party.`,
+ label: i18n.fixed({ en: "Customer Profile", de: "Kundenprofil" }),
+ description: i18n.fixed({
+ en: "The information below has to refer to the persons from whom the assets originate ultimately (e.g. beneficial owner of the assets, founder/creator of a trust or foundation). Is the customer an operational legal entity or partnership the information may refer to the entity itself (not to the controlling person), unless the entity holds the assets in trust for a third party.",
+ de: "Die nachstehenden Angaben müssen sich auf die Personen beziehen, von denen die Vermögenswerte letztlich stammen (z. B. wirtschaftlich Berechtigter der Vermögenswerte, Gründer/Errichter eines Trusts oder einer Stiftung). Ist der Kunde eine operativ tätige juristische Person oder Personengesellschaft, können sich die Angaben auf die Gesellschaft selbst (nicht auf den Kontrollinhaber) beziehen, sofern die Gesellschaft die Vermögenswerte nicht treuhänderisch für einen Dritten hält.",
+ }),
id: "vqf_902_5",
version: 1,
config: VQF_902_5(i18n),
@@ -17,68 +20,90 @@ export const form_vqf_902_5 = (
export function VQF_902_5(
i18n: InternationalizationAPI,
): DoubleColumnFormDesign {
- i18n = withVqfTranslations(i18n);
return {
type: "double-column",
languagePolicy: vqfLanguagePolicy(i18n),
sections: [
{
- title: i18n.str`Information on customer`,
+ title: i18n.fixed({
+ en: "Information on customer",
+ de: "Angaben zum Kunden",
+ }),
description: Descr.CUSTOMER_INFO_TYPE(i18n),
fields: [
{
id: TalerFormAttributes.CUSTOMER_NAME,
- label: i18n.str`Customer`,
- // help: i18n.str``,
+ label: i18n.fixed({ en: "Customer", de: "Kunde" }),
type: "text",
required: true,
},
],
},
{
- title: i18n.str`Business activity`,
+ title: i18n.fixed({
+ en: "Business activity",
+ de: "Geschäftstätigkeit",
+ }),
fields: [
{
id: TalerFormAttributes.BIZREL_PROFESSION,
- label: i18n.str`Profession, business activities, etc. (former, current, potentially planned)`,
+ label: i18n.fixed({
+ en: "Profession, business activities, etc. (former, current, potentially planned)",
+ de: "Beruf, Geschäftstätigkeiten usw. (frühere, aktuelle, allenfalls geplante)",
+ }),
type: "textArea",
required: false,
},
],
},
{
- title: i18n.str`Financial circumstances`,
+ title: i18n.fixed({
+ en: "Financial circumstances",
+ de: "Finanzielle Verhältnisse",
+ }),
fields: [
{
id: TalerFormAttributes.BIZREL_INCOME,
- label: i18n.str`Income and assets, liabilities (estimated)`,
+ label: i18n.fixed({
+ en: "Income and assets, liabilities (estimated)",
+ de: "Einkommen und Vermögen, Verbindlichkeiten (geschätzt)",
+ }),
type: "textArea",
required: false,
},
],
},
{
- title: i18n.str`Origin of the deposited assets involved`,
+ title: i18n.fixed({
+ en: "Origin of the deposited assets involved",
+ de: "Herkunft der betroffenen eingebrachten Vermögenswerte",
+ }),
fields: [
{
id: TalerFormAttributes.BIZREL_HAVE_ASSETS,
- label: i18n.str`Will the customer deposit assets with Taler Operations AG?`,
+ label: i18n.fixed({
+ en: "Will the customer deposit assets with Taler Operations AG?",
+ de: "Wird der Kunde Vermögenswerte bei der Taler Operations AG einbringen?",
+ }),
type: "choiceHorizontal",
required: true,
choices: [
{
- label: i18n.str`Yes`,
+ label: i18n.fixed({ en: "Yes", de: "Ja" }),
value: true,
},
{
- label: i18n.str`No`,
+ label: i18n.fixed({ en: "No", de: "Nein" }),
value: false,
},
],
},
{
id: TalerFormAttributes.BIZREL_ORIGIN_NATURE,
- label: i18n.str`Nature, amount and currency of deposited assets.`,
+ label: i18n.fixed({
+ en: "Nature, amount and currency of deposited assets.",
+ de: "Art, Betrag und Währung der eingebrachten Vermögenswerte.",
+ }),
type: "textArea",
required: true,
hide(value, root) {
@@ -87,16 +112,28 @@ export function VQF_902_5(
},
{
id: TalerFormAttributes.BIZREL_ORIGIN_CATEGORY,
- label: i18n.str`Category`,
+ label: i18n.fixed({ en: "Category", de: "Kategorie" }),
type: "choiceStacked",
choices: [
- { label: i18n.str`Savings`, value: "SAVINGS" },
{
- label: i18n.str`Own business operations`,
+ label: i18n.fixed({ en: "Savings", de: "Ersparnisse" }),
+ value: "SAVINGS",
+ },
+ {
+ label: i18n.fixed({
+ en: "Own business operations",
+ de: "Eigene Geschäftstätigkeit",
+ }),
value: "OWN_BUSINESS",
},
- { label: i18n.str`Inheritance`, value: "INHERITANCE" },
- { label: i18n.str`Other`, value: "OTHER" },
+ {
+ label: i18n.fixed({ en: "Inheritance", de: "Erbschaft" }),
+ value: "INHERITANCE",
+ },
+ {
+ label: i18n.fixed({ en: "Other", de: "Andere" }),
+ value: "OTHER",
+ },
],
required: true,
hide(value, root) {
@@ -106,7 +143,10 @@ export function VQF_902_5(
{
id: TalerFormAttributes.BIZREL_ORIGIN_CATEGORY_OTHER,
type: "text",
- label: i18n.str`Category clarification`,
+ label: i18n.fixed({
+ en: "Category clarification",
+ de: "Erläuterung der Kategorie",
+ }),
required: true,
hide(value, root) {
return (
@@ -116,7 +156,10 @@ export function VQF_902_5(
},
{
id: TalerFormAttributes.BIZREL_ORIGIN_DETAIL,
- label: i18n.str`Detailed description of the origins/economic background of the assets involved in the business relationship`,
+ label: i18n.fixed({
+ en: "Detailed description of the origins/economic background of the assets involved in the business relationship",
+ de: "Detaillierte Beschreibung der Herkunft/des wirtschaftlichen Hintergrunds der in die Geschäftsbeziehung eingebrachten Vermögenswerte",
+ }),
type: "textArea",
required: false,
hide(value, root) {
@@ -128,57 +171,84 @@ export function VQF_902_5(
],
},
{
- title: i18n.str`Nature and purpose of the business relationship`,
+ title: i18n.fixed({
+ en: "Nature and purpose of the business relationship",
+ de: "Art und Zweck der Geschäftsbeziehung",
+ }),
fields: [
{
id: TalerFormAttributes.BIZREL_PURPOSE,
- label: i18n.str`Purpose of the business relationship`,
+ label: i18n.fixed({
+ en: "Purpose of the business relationship",
+ de: "Zweck der Geschäftsbeziehung",
+ }),
type: "textArea",
required: false,
},
{
id: TalerFormAttributes.BIZREL_DEVELOPMENT,
- label: i18n.str`Information on the planned development of the business relationship and the assets`,
+ label: i18n.fixed({
+ en: "Information on the planned development of the business relationship and the assets",
+ de: "Angaben zur geplanten Entwicklung der Geschäftsbeziehung und der Vermögenswerte",
+ }),
type: "textArea",
required: false,
},
{
id: TalerFormAttributes.BIZREL_FINANCIAL_VOLUME,
- label: i18n.str`Details on usual business volume`,
+ label: i18n.fixed({
+ en: "Details on usual business volume",
+ de: "Angaben zum üblichen Geschäftsvolumen",
+ }),
type: "textArea",
required: false,
},
],
},
{
- title: i18n.str`Relationship with third parties`,
+ title: i18n.fixed({
+ en: "Relationship with third parties",
+ de: "Beziehung zu Dritten",
+ }),
fields: [
{
id: TalerFormAttributes.BIZREL_THIRDPARTY_RELATIONSHIP,
- label: i18n.str`Relation of the customer to the beneficial owner, controlling persons, authorised signatories and other persons involved in the business relationship`,
+ label: i18n.fixed({
+ en: "Relation of the customer to the beneficial owner, controlling persons, authorised signatories and other persons involved in the business relationship",
+ de: "Beziehung des Kunden zum wirtschaftlich Berechtigten, den Kontrollinhabern, den Zeichnungsberechtigten und anderen an der Geschäftsbeziehung beteiligten Personen",
+ }),
type: "textArea",
required: false,
},
{
id: TalerFormAttributes.BIZREL_THIRDPARTY_AMLA_FILES,
- label: i18n.str`Relation to other AMLA-Files`,
+ label: i18n.fixed({
+ en: "Relation to other AMLA-Files",
+ de: "Bezug zu anderen GwG-Dossiers",
+ }),
type: "textArea",
required: false,
},
{
id: TalerFormAttributes.BIZREL_THIRDPARTY_REFERENCES,
- label: i18n.str`Introducer / agents / references`,
+ label: i18n.fixed({
+ en: "Introducer / agents / references",
+ de: "Vermittler / Beauftragte / Referenzen",
+ }),
type: "textArea",
required: false,
},
],
},
{
- title: i18n.str`Further information`,
+ title: i18n.fixed({ en: "Further information", de: "Weitere Angaben" }),
fields: [
{
id: TalerFormAttributes.BIZREL_FURTHER_INFO,
- label: i18n.str`Other relevant information`,
+ label: i18n.fixed({
+ en: "Other relevant information",
+ de: "Weitere relevante Angaben",
+ }),
type: "textArea",
required: false,
},
diff --git a/packages/web-util/src/forms/gana/VQF_902_9_customer.ts b/packages/web-util/src/forms/gana/VQF_902_9_customer.ts
@@ -3,13 +3,19 @@ import { InternationalizationAPI } from "../../context/translation.js";
import { DoubleColumnFormDesign, FormMetadata } from "../forms-types.js";
import { countryNationalityList } from "../../utils/select-ui-lists.js";
import { format, intervalToDuration, isFuture, isValid, parse } from "date-fns";
-import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js";
+import { vqfLanguagePolicy } from "./vqf.js";
export const form_vqf_902_9_customer = (
i18n: InternationalizationAPI,
): FormMetadata => ({
- label: i18n.str`Declaration of identity of the beneficial owner (A) — customer`,
- description: i18n.str`The customer completes the declaration directly in the form.`,
+ label: i18n.fixed({
+ en: "Declaration of identity of the beneficial owner (A) — customer",
+ de: "Feststellung des wirtschaftlich Berechtigten (A) — Kunde",
+ }),
+ description: i18n.fixed({
+ en: "The customer completes the declaration directly in the form.",
+ de: "Der Kunde füllt die Erklärung direkt im Formular aus.",
+ }),
id: "vqf_902_9_customer",
version: 1,
config: VQF_902_9_customer(i18n),
@@ -18,36 +24,56 @@ export const form_vqf_902_9_customer = (
export function VQF_902_9_customer(
i18n: InternationalizationAPI,
): DoubleColumnFormDesign {
- i18n = withVqfTranslations(i18n);
const today = format(new Date(), "yyyy-MM-dd");
return {
type: "double-column",
languagePolicy: vqfLanguagePolicy(i18n),
- title: i18n.str`Declaration of identity of the beneficial owner`,
+ title: i18n.fixed({
+ en: "Declaration of identity of the beneficial owner",
+ de: "Feststellung des wirtschaftlich Berechtigten",
+ }),
sections: [
{
- title: i18n.str`Identity of the contracting partner`,
+ title: i18n.fixed({
+ en: "Identity of the contracting partner",
+ de: "Identität des Vertragspartners",
+ }),
fields: [
{
id: TalerFormAttributes.IDENTITY_CONTRACTING_PARTNER,
- label: i18n.str`Contracting partner`,
+ label: i18n.fixed({
+ en: "Contracting partner",
+ de: "Vertragspartner",
+ }),
type: "textArea",
required: true,
},
],
},
{
- title: i18n.str`Beneficial owner details`,
+ title: i18n.fixed({
+ en: "Beneficial owner details",
+ de: "Angaben zum wirtschaftlich Berechtigten",
+ }),
fields: [
{
id: TalerFormAttributes.IDENTITY_LIST,
- label: i18n.str`Beneficial owner(s)`,
- help: i18n.str`The person(s) listed below is/are the beneficial owner(s) of the assets involved in the business relationship. If the contracting partner is also the sole beneficial owner of the assets, the contracting partner's detail must be set out below`,
+ label: i18n.fixed({
+ en: "Beneficial owner(s)",
+ de: "Wirtschaftlich Berechtigte(r)",
+ }),
+ help: i18n.fixed({
+ en: "The person(s) listed below is/are the beneficial owner(s) of the assets involved in the business relationship. If the contracting partner is also the sole beneficial owner of the assets, the contracting partner's detail must be set out below",
+ de: "Die nachfolgend aufgeführte(n) Person(en) ist/sind an den in die Geschäftsbeziehung eingebrachten Vermögenswerten wirtschaftlich berechtigt. Ist der Vertragspartner selber allein an diesen Vermögenswerten wirtschaftlich berechtigt, so sind nachstehend seine Personalien festzuhalten",
+ }),
type: "array",
validator(persons) {
if (!persons || persons.length < 1) {
- return i18n.str`Can't be empty`;
+ return i18n.fixed({
+ en: "Can't be empty",
+ de: "Darf nicht leer sein",
+ });
}
return undefined;
},
@@ -55,19 +81,25 @@ export function VQF_902_9_customer(
fields: [
{
id: TalerFormAttributes.FULL_NAME,
- label: i18n.str`Full name`,
+ label: i18n.fixed({
+ en: "Full name",
+ de: "Vollständiger Name",
+ }),
type: "text",
required: true,
},
{
id: TalerFormAttributes.DOMICILE_ADDRESS,
- label: i18n.str`Domicile address`,
+ label: i18n.fixed({
+ en: "Domicile address",
+ de: "Sitzadresse",
+ }),
type: "textArea",
required: true,
},
{
id: TalerFormAttributes.DATE_OF_BIRTH,
- label: i18n.str`Date of birth`,
+ label: i18n.fixed({ en: "Date of birth", de: "Geburtsdatum" }),
type: "isoDateText",
placeholder: "dd/MM/yyyy",
pattern: "dd/MM/yyyy",
@@ -76,24 +108,36 @@ export function VQF_902_9_customer(
//FIXME: why returning in this format even if pattern is in another?
const time = parse(text, "yyyy-MM-dd", new Date());
if (!isValid(time)) {
- return i18n.str`invalid format`;
+ return i18n.fixed({
+ en: "invalid format",
+ de: "ungültiges Format",
+ });
}
if (isFuture(time)) {
- return i18n.str`it can't be in the future`;
+ return i18n.fixed({
+ en: "it can't be in the future",
+ de: "darf nicht in der Zukunft liegen",
+ });
}
const { years } = intervalToDuration({
start: time,
end: new Date(),
});
if (years && years > 120) {
- return i18n.str`it can't be greater than 120 years`;
+ return i18n.fixed({
+ en: "it can't be greater than 120 years",
+ de: "darf nicht größer als 120 Jahre sein",
+ });
}
return undefined;
},
},
{
id: TalerFormAttributes.NATIONALITY,
- label: i18n.str`Nationality`,
+ label: i18n.fixed({
+ en: "Nationality",
+ de: "Staatsangehörigkeit",
+ }),
type: "selectOne",
choices: countryNationalityList(i18n),
preferredChoiceVals: ["CH"],
@@ -105,22 +149,28 @@ export function VQF_902_9_customer(
],
},
{
- title: i18n.str`Signature(s)`,
- description: i18n.str`It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, document forgery)`,
+ title: i18n.fixed({ en: "Signature(s)", de: "Unterschrift(en)" }),
+ description: i18n.fixed({
+ en: "It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, document forgery)",
+ de: "Die vorsätzliche Angabe falscher Informationen in diesem Formular ist eine strafbare Handlung (Urkundenfälschung gemäss Artikel 251 des Schweizerischen Strafgesetzbuchs).",
+ }),
fields: [
{
type: "caption",
- label: i18n.str`The contracting partner hereby undertakes to inform automatically of any changes to the information contained herein.`,
+ label: i18n.fixed({
+ en: "The contracting partner hereby undertakes to inform automatically of any changes to the information contained herein.",
+ de: "Der Vertragspartner verpflichtet sich, Änderungen jeweils unaufgefordert mitzuteilen.",
+ }),
},
{
id: TalerFormAttributes.SIGNATURE,
- label: i18n.str`Signature(s)`,
+ label: i18n.fixed({ en: "Signature(s)", de: "Unterschrift(en)" }),
type: "text",
required: true,
},
{
id: TalerFormAttributes.SIGN_DATE,
- label: i18n.str`Date`,
+ label: i18n.fixed({ en: "Date", de: "Datum" }),
type: "isoDateText",
placeholder: "dd/MM/yyyy",
pattern: "dd/MM/yyyy",
diff --git a/packages/web-util/src/forms/gana/VQF_902_9_officer.ts b/packages/web-util/src/forms/gana/VQF_902_9_officer.ts
@@ -3,13 +3,19 @@ import { InternationalizationAPI } from "../../context/translation.js";
import { DoubleColumnFormDesign, FormMetadata } from "../forms-types.js";
import { countryNationalityList } from "../../utils/select-ui-lists.js";
import { intervalToDuration, isFuture, isValid, parse } from "date-fns";
-import { vqfLanguagePolicy, withVqfTranslations } from "./vqf.js";
+import { vqfLanguagePolicy } from "./vqf.js";
export const form_vqf_902_9_officer = (
i18n: InternationalizationAPI,
): FormMetadata => ({
- label: i18n.str`Declaration of identity of the beneficial owner (A) — AML officer`,
- description: i18n.str`The AML officer records the declaration and uploads the customer's signed PDF.`,
+ label: i18n.fixed({
+ en: "Declaration of identity of the beneficial owner (A) — AML officer",
+ de: "Feststellung des wirtschaftlich Berechtigten (A) — GwG-Beauftragter",
+ }),
+ description: i18n.fixed({
+ en: "The AML officer records the declaration and uploads the customer's signed PDF.",
+ de: "Der GwG-Beauftragte erfasst die Erklärung und lädt das vom Kunden unterzeichnete PDF hoch.",
+ }),
id: "vqf_902_9_officer",
version: 1,
config: VQF_902_9_officer(i18n),
@@ -18,34 +24,54 @@ export const form_vqf_902_9_officer = (
export function VQF_902_9_officer(
i18n: InternationalizationAPI,
): DoubleColumnFormDesign {
- i18n = withVqfTranslations(i18n);
return {
type: "double-column",
languagePolicy: vqfLanguagePolicy(i18n),
- title: i18n.str`Declaration of identity of the beneficial owner`,
+ title: i18n.fixed({
+ en: "Declaration of identity of the beneficial owner",
+ de: "Feststellung des wirtschaftlich Berechtigten",
+ }),
sections: [
{
- title: i18n.str`Identity of the contracting partner`,
+ title: i18n.fixed({
+ en: "Identity of the contracting partner",
+ de: "Identität des Vertragspartners",
+ }),
fields: [
{
id: TalerFormAttributes.IDENTITY_CONTRACTING_PARTNER,
- label: i18n.str`Contracting partner`,
+ label: i18n.fixed({
+ en: "Contracting partner",
+ de: "Vertragspartner",
+ }),
type: "textArea",
required: true,
},
],
},
{
- title: i18n.str`Beneficial owner details`,
+ title: i18n.fixed({
+ en: "Beneficial owner details",
+ de: "Angaben zum wirtschaftlich Berechtigten",
+ }),
fields: [
{
id: TalerFormAttributes.IDENTITY_LIST,
- label: i18n.str`Beneficial owner(s)`,
- help: i18n.str`The person(s) listed below is/are the beneficial owner(s) of the assets involved in the business relationship. If the contracting partner is also the sole beneficial owner of the assets, the contracting partner's detail must be set out below`,
+ label: i18n.fixed({
+ en: "Beneficial owner(s)",
+ de: "Wirtschaftlich Berechtigte(r)",
+ }),
+ help: i18n.fixed({
+ en: "The person(s) listed below is/are the beneficial owner(s) of the assets involved in the business relationship. If the contracting partner is also the sole beneficial owner of the assets, the contracting partner's detail must be set out below",
+ de: "Die nachfolgend aufgeführte(n) Person(en) ist/sind an den in die Geschäftsbeziehung eingebrachten Vermögenswerten wirtschaftlich berechtigt. Ist der Vertragspartner selber allein an diesen Vermögenswerten wirtschaftlich berechtigt, so sind nachstehend seine Personalien festzuhalten",
+ }),
type: "array",
validator(persons) {
if (!persons || persons.length < 1) {
- return i18n.str`Can't be empty`;
+ return i18n.fixed({
+ en: "Can't be empty",
+ de: "Darf nicht leer sein",
+ });
}
return undefined;
},
@@ -53,19 +79,25 @@ export function VQF_902_9_officer(
fields: [
{
id: TalerFormAttributes.FULL_NAME,
- label: i18n.str`Full name`,
+ label: i18n.fixed({
+ en: "Full name",
+ de: "Vollständiger Name",
+ }),
type: "text",
required: true,
},
{
id: TalerFormAttributes.DOMICILE_ADDRESS,
- label: i18n.str`Domicile address`,
+ label: i18n.fixed({
+ en: "Domicile address",
+ de: "Sitzadresse",
+ }),
type: "textArea",
required: true,
},
{
id: TalerFormAttributes.DATE_OF_BIRTH,
- label: i18n.str`Date of birth`,
+ label: i18n.fixed({ en: "Date of birth", de: "Geburtsdatum" }),
type: "isoDateText",
placeholder: "dd/MM/yyyy",
pattern: "dd/MM/yyyy",
@@ -74,24 +106,36 @@ export function VQF_902_9_officer(
//FIXME: why returning in this format even if pattern is in another?
const time = parse(text, "yyyy-MM-dd", new Date());
if (!isValid(time)) {
- return i18n.str`invalid format`;
+ return i18n.fixed({
+ en: "invalid format",
+ de: "ungültiges Format",
+ });
}
if (isFuture(time)) {
- return i18n.str`it can't be in the future`;
+ return i18n.fixed({
+ en: "it can't be in the future",
+ de: "darf nicht in der Zukunft liegen",
+ });
}
const { years } = intervalToDuration({
start: time,
end: new Date(),
});
if (years && years > 120) {
- return i18n.str`it can't be greater than 120 years`;
+ return i18n.fixed({
+ en: "it can't be greater than 120 years",
+ de: "darf nicht größer als 120 Jahre sein",
+ });
}
return undefined;
},
},
{
id: TalerFormAttributes.NATIONALITY,
- label: i18n.str`Nationality`,
+ label: i18n.fixed({
+ en: "Nationality",
+ de: "Staatsangehörigkeit",
+ }),
type: "selectOne",
choices: countryNationalityList(i18n),
preferredChoiceVals: ["CH"],
@@ -103,16 +147,28 @@ export function VQF_902_9_officer(
],
},
{
- title: i18n.str`Signed Declaration`,
- description: i18n.str`Signed declaration by the customer`,
+ title: i18n.fixed({
+ en: "Signed Declaration",
+ de: "Unterzeichnete Erklärung",
+ }),
+ description: i18n.fixed({
+ en: "Signed declaration by the customer",
+ de: "Vom Kunden unterzeichnete Erklärung",
+ }),
fields: [
{
type: "caption",
- label: i18n.str`The uploaded document must contain the customer's signature on the beneficial owner declaration.`,
+ label: i18n.fixed({
+ en: "The uploaded document must contain the customer's signature on the beneficial owner declaration.",
+ de: "Das hochgeladene Dokument muss die Unterschrift des Kunden auf der Erklärung zum wirtschaftlich Berechtigten enthalten.",
+ }),
},
{
id: TalerFormAttributes.ATTACHMENT_SIGNED_DOCUMENT,
- label: i18n.str`Signed Document`,
+ label: i18n.fixed({
+ en: "Signed Document",
+ de: "Unterzeichnetes Dokument",
+ }),
type: "file",
accept: "application/pdf",
required: true,
diff --git a/packages/web-util/src/forms/gana/vqf.ts b/packages/web-util/src/forms/gana/vqf.ts
@@ -10,371 +10,6 @@
import { InternationalizationAPI } from "../../context/translation.js";
import { FormLanguagePolicy } from "../forms-types.js";
-const fixedGermanByEnglish: Readonly<Record<string, string>> = {
- "Can't be empty": "Darf nicht leer sein",
- "Collective authority with two signatures":
- "Kollektivzeichnungsberechtigung zu zweien",
- "High contact risk": "Hohes Kontaktrisiko",
- "High cash transactions (Risk Level 1)":
- "Hoher Anteil an Bargeldtransaktionen (Risikostufe 1)",
- "High-risk trade (Risk Level 2)": "Handel mit hohem Risiko (Risikostufe 2)",
- "Identity of the contracting partner": "Identität des Vertragspartners",
- "Low contact risk": "Tiefes Kontaktrisiko",
- "Medium contact risk": "Mittleres Kontaktrisiko",
- "Name and address": "Name und Adresse",
- "Not well known (Risk Level 1)": "Nicht gut bekannt (Risikostufe 1)",
- "Other (please specify)": "Andere (bitte angeben)",
- "Sole signature authority": "Einzelzeichnungsberechtigung",
- "Transparent (Risk Level 0)": "Transparent (Risikostufe 0)",
- "Unknown industry (Risk Level 2)": "Unbekannte Branche (Risikostufe 2)",
- "A foundation (or a similar construct; incl. underlying companies)":
- "Eine Stiftung (oder ein ähnliches Konstrukt; inkl. Underlying Companies)",
- "A life insurance policy with separately managed accounts / securities accounts (so-called insurance wrappers)":
- "Eine Lebensversicherung mit separater Konto-/Depotführung (sog. Insurance Wrapper)",
- "A natural person and there are no doubts that this person is the sole beneficial owner of the assets":
- "Eine natürliche Person und es bestehen keine Zweifel, dass diese selber an den Vermögenswerten wirtschaftlich berechtigt ist",
- "A trust (incl. underlying companies)":
- "Ein Trust (inkl. Underlying Companies)",
- "Acceptance date": "Datum der Annahme",
- "Acceptance of business relationship": "Annahme der Geschäftsbeziehung",
- "Accepted via:": "Angenommen über:",
- "Actual address of domicile": "Effektive Wohnsitzadresse",
- "An operational legal entity or partnership":
- "Eine operative juristische Person oder Personengesellschaft",
- "Applicable country risk types": "Anwendbare Arten von Länderrisiken",
- "Applicable if customer is a legal entity":
- "Anwendbar, wenn der Kunde eine juristische Person ist",
- "Applicable if customer is a natural person":
- "Anwendbar, wenn der Kunde eine natürliche Person ist",
- "Applicable only if customer is a sole proprietor":
- "Nur anwendbar, wenn der Kunde ein Einzelunternehmen ist",
- "Authenticated copy of identification document":
- "Beglaubigte Kopie des Ausweisdokuments",
- "Beneficial owner": "Wirtschaftlich Berechtigte(r)",
- "Beneficial owner details": "Angaben zum wirtschaftlich Berechtigten",
- "Beneficial owner of the assets":
- "Wirtschaftlich Berechtigter der Vermögenswerte",
- "Beneficial owner(s)": "Wirtschaftlich Berechtigte(r)",
- "Business activity": "Geschäftstätigkeit",
- "Business activity not well known to the member.":
- "Geschäftstätigkeit, die dem Mitglied nicht gut bekannt ist.",
- "Business activity with a high level of cash transactions.":
- "Geschäftstätigkeit mit einem hohen Anteil an Bartransaktionen.",
- Category: "Kategorie",
- "Category clarification": "Erläuterung der Kategorie",
- "Classification for the establishment of the beneficial owner of the assets and/or controlling person":
- "Klassifizierung zur Feststellung des wirtschaftlich Berechtigten der Vermögenswerte und/oder des Kontrollinhabers",
- "Clearly defined, transparent, easily comprehensible business activity well known to the member.":
- "Klar definierte, transparente, leicht nachvollziehbare Geschäftstätigkeit, die dem Mitglied gut bekannt ist.",
- "Company identification document": "Identifikationsdokument des Unternehmens",
- "Company name": "Firmenname",
- "Company register extract": "Handelsregisterauszug",
- "Conclusion whether the business relationship is with or without increased risk.":
- "Schlussfolgerung, ob die Geschäftsbeziehung mit oder ohne erhöhtes Risiko verbunden ist.",
- "Consultation of generally accessible sources and databases":
- "Konsultation allgemein zugänglicher Quellen und Datenbanken",
- "Contact person": "Kontaktperson",
- "Contact risk": "Kontaktrisiko",
- "Contact risk level": "Kontaktrisikostufe",
- "Contracting partner": "Vertragspartner",
- "Controlling person(s)": "Kontrollinhaber",
- "Copy of document that serves as evidence of signing authority:":
- "Kopie des Dokuments, das als Nachweis der Zeichnungsberechtigung dient:",
- "Copy of identification document": "Kopie des Ausweisdokuments",
- "Copy of identification document (not older than 12 months)":
- "Kopie des Ausweisdokuments (nicht älter als 12 Monate)",
- "Correspondence Preferences": "Korrespondenzpräferenzen",
- "Correspondence language:": "Korrespondenzsprache:",
- "Country risk": "Länderrisiko",
- "Country risk level (business activity)":
- "Länderrisikostufe (Geschäftstätigkeit)",
- "Country risk level (nationality)": "Länderrisikostufe (Staatsangehörigkeit)",
- "Country risk type (place of business activity)":
- "Art des Länderrisikos (Ort der Geschäftstätigkeit)",
- Customer: "Kunde",
- "Customer Profile": "Kundenprofil",
- "Customer classification": "Kundenklassifizierung",
- "Customer type": "Kundentyp",
- Date: "Datum",
- "Date (conclusion of contract):": "Datum (Vertragsabschluss):",
- "Date of birth": "Geburtsdatum",
- "Declaration of identity of the beneficial owner":
- "Feststellung des wirtschaftlich Berechtigten",
- "Declaration of identity of the beneficial owner (A) — AML officer":
- "Feststellung des wirtschaftlich Berechtigten (A) — GwG-Beauftragter",
- "Declaration of identity of the beneficial owner (A) — customer":
- "Feststellung des wirtschaftlich Berechtigten (A) — Kunde",
- Description: "Beschreibung",
- "Description of the circumstances/transactions, which triggered the special clarifications":
- "Beschreibung der Umstände/Transaktionen, welche die besonderen Abklärungen ausgelöst haben",
- "Detailed description of the origins/economic background of the assets involved in the business relationship":
- "Detaillierte Beschreibung der Herkunft/des wirtschaftlichen Hintergrunds der in die Geschäftsbeziehung eingebrachten Vermögenswerte",
- "Details on usual business volume": "Angaben zum üblichen Geschäftsvolumen",
- "Domestic PEP": "Inländische PEP",
- Domicile: "Sitz",
- "Domicile address": "Sitzadresse",
- "Domicile/residential address of the beneficial owner of the assets":
- "Sitz/Wohnsitzadresse des wirtschaftlich Berechtigten der Vermögenswerte",
- "Domicile/residential address of the controlling person":
- "Sitz/Wohnsitzadresse des Kontrollinhabers",
- "Domicile/residential address of the customer":
- "Sitz/Wohnsitzadresse des Kunden",
- Email: "E-Mail",
- "Embargo/terrorism information:": "Embargo-/Terror-Angaben:",
- "Embargo/terrorism status:": "Embargo-/Terror-Status:",
- English: "Englisch",
- "Enquiries with trustworthy persons":
- "Erkundigungen bei vertrauenswürdigen Personen",
- "Establishing of the controlling person of operating legal entities and partnerships both not quoted on the stock exchange (K)":
- "Feststellung des Kontrollinhabers an nicht börsenkotierten, operativ tätigen juristischen Personen und Personengesellschaften (K)",
- "Establishment of the controlling person (submitted by AML officer)":
- "Feststellung des Kontrollinhabers (durch den AML-Beauftragten eingereicht)",
- "Establishment of the controlling person (submitted by customer)":
- "Feststellung des Kontrollinhabers (durch den Kunden eingereicht)",
- 'Evaluation "high risk" or non-cooperative country':
- "Beurteilung „Hochrisikoland“ oder nicht kooperatives Land",
- "Evaluation of business relationship risk":
- "Beurteilung des Risikos der Geschäftsbeziehung",
- "Evaluation of politically exposed persons (PEP-Check)":
- "Beurteilung politisch exponierter Personen (PEP-Check)",
- "Evaluation with regard to embargo procedures/terrorism lists on establishing the business relationship":
- "Prüfung im Hinblick auf Embargomassnahmen/Terrorlisten bei Aufnahme der Geschäftsbeziehung",
- "Evidence of signing authority:": "Nachweis der Zeichnungsberechtigung:",
- "Face to face": "Persönlich",
- "Fiduciary holding assets": "Treuhänderisches Halten von Vermögenswerten",
- "File (PDF)": "Datei (PDF)",
- "Financial circumstances": "Finanzielle Verhältnisse",
- "For legal entities and partnerships the identity of the natural persons who establish the business relationship must be verified.":
- "Bei juristischen Personen und Personengesellschaften ist die Identität der natürlichen Personen, welche die Geschäftsbeziehung eröffnen, zu überprüfen.",
- "Foreign PEP": "Ausländische PEP",
- French: "Französisch",
- "Full name": "Vollständiger Name",
- "Further information": "Weitere Angaben",
- "Further information:": "Weitere Angaben:",
- "Gathered/Consulted documents": "Eingeholte/konsultierte Dokumente",
- "Gathering of information from the customer, beneficial owner of the assets, controlling person":
- "Einholung von Informationen beim Kunden, wirtschaftlich Berechtigten der Vermögenswerte, dem Kontrollinhaber",
- German: "Deutsch",
- "High (Risk 2)": "Hoch (Risiko 2)",
- "High risk": "Hohes Risiko",
- "High-risk or non-cooperative country":
- "Hochrisikoland oder nicht kooperatives Land",
- "Holding 25% or more": "Halten von 25% oder mehr",
- "Identification Form (acceptance)": "Identifikationsformular (Annahme)",
- "Identification Form (customer)": "Identifikationsformular (Kunde)",
- "Identification form (basic customer information)":
- "Identifikationsformular (Basisangaben zum Kunden)",
- "If the capital shares or voting rights cannot be determined or in case there are no capital shares or voting rights 25% or more, the contracting partner hereby declares that the person(s) listed below is/are controlling the contracting partner in other ways":
- "Falls die Kapital- oder Stimmrechtsanteile nicht festgestellt werden können oder falls keine Kapital- oder Stimmrechtsanteile von 25% oder mehr bestehen, erklärt der Vertragspartner hiermit, dass die nachfolgend aufgeführte(n) Person(en) auf andere Weise die Kontrolle über den Vertragspartner ausübt/ausüben",
- "In case this/these person(s) cannot be determined or this/these person(s) does/do not exist, the contracting partner hereby declares that the person(s) listed below is/are the managing director(s)":
- "Falls auch diese Person(en) nicht festgestellt werden kann/können oder diese Person(en) nicht besteht/bestehen, erklärt der Vertragspartner hiermit, dass die nachfolgend aufgeführte(n) Person(en) die Geschäftsführung ausübt/ausüben",
- "Income and assets, liabilities (estimated)":
- "Einkommen und Vermögen, Verbindlichkeiten (geschätzt)",
- "Industry risk": "Branchenrisiko",
- "Industry risk level": "Branchenrisikostufe",
- "Industry risk source": "Quelle des Branchenrisikos",
- "Information on customer": "Angaben zum Kunden",
- "Information on customer (legal entity)":
- "Angaben zum Kunden (juristische Person)",
- "Information on customer (sole proprietor)":
- "Angaben zum Kunden (Einzelunternehmen)",
- "Information on the natural persons who establish the business relationship for legal entities and partnerships":
- "Angaben zu den natürlichen Personen, die für juristische Personen und Personengesellschaften die Geschäftsbeziehung eröffnen (Eröffner)",
- "Information on the planned development of the business relationship and the assets":
- "Angaben zur geplanten Entwicklung der Geschäftsbeziehung und der Vermögenswerte",
- Inheritance: "Erbschaft",
- "Introducer / agents / references": "Vermittler / Beauftragte / Referenzen",
- "Is a third person the beneficial owner of the assets held in the account/securities account?":
- "Ist eine Drittperson an den auf dem Konto/Depot liegenden Vermögenswerten wirtschaftlich berechtigt?",
- "Is the customer, the beneficial owner or the controlling person or authorised representative a PEP in International Organisations or closely related to such a person?":
- "Ist der Kunde, der wirtschaftlich Berechtigte, der Kontrollinhaber oder der bevollmächtigte Vertreter eine PEP einer internationalen Organisation oder steht in einer engen Beziehung zu einer solchen Person?",
- "Is the customer, the beneficial owner or the controlling person or authorised representative a domestic PEP or closely related to such a person?":
- "Ist der Kunde, der wirtschaftlich Berechtigte, der Kontrollinhaber oder der bevollmächtigte Vertreter eine inländische PEP oder steht in einer engen Beziehung zu einer solchen Person?",
- "Is the customer, the beneficial owner or the controlling person or authorised representative a foreign PEP or closely related to such a person?":
- "Ist der Kunde, der wirtschaftlich Berechtigte, der Kontrollinhaber oder der bevollmächtigte Vertreter eine ausländische PEP oder steht in einer engen Beziehung zu einer solchen Person?",
- "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?":
- "Befindet sich der Kunde, der wirtschaftlich Berechtigte, der Kontrollinhaber oder der bevollmächtigte Vertreter in einem Land, das von der FATF als Hochrisikoland oder nicht kooperatives Land eingestuft wird und für welches die FATF erhöhte Sorgfaltspflichten verlangt?",
- "It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, document forgery)":
- "Die vorsätzliche Angabe falscher Informationen in diesem Formular ist eine strafbare Handlung (Urkundenfälschung gemäss Artikel 251 des Schweizerischen Strafgesetzbuchs).",
- Italian: "Italienisch",
- "Justification for risk assessment": "Begründung der Risikobeurteilung",
- "Legal entity": "Juristische Person",
- "Listed on embargo/terrorism list.":
- "Auf einer Embargo-/Terrorliste aufgeführt.",
- "Low (Risk 0)": "Niedrig (Risiko 0)",
- "Managing director": "Geschäftsführer",
- Mandate: "Mandat",
- Means: "Mittel",
- "Medium (Risk 1)": "Mittel (Risiko 1)",
- "Member has no personal knowledge of the customer’s industry.":
- "Das Mitglied verfügt über keine persönliche Kenntnis der Branche des Kunden.",
- Nationality: "Staatsangehörigkeit",
- "Nationality of the beneficial owner of the assets":
- "Staatsangehörigkeit des wirtschaftlich Berechtigten der Vermögenswerte",
- "Nationality of the customer": "Staatsangehörigkeit des Kunden",
- "Natural person (incl. sole proprietors)":
- "Natürliche Person (inkl. Einzelunternehmen)",
- "Nature and purpose of the business relationship":
- "Art und Zweck der Geschäftsbeziehung",
- "Nature, amount and currency of deposited assets.":
- "Art, Betrag und Währung der eingebrachten Vermögenswerte.",
- No: "Nein",
- "No high risk": "Kein hohes Risiko",
- "No suspicion": "Kein Verdacht",
- "Not listed on embargo/terrorism list.":
- "Nicht auf einer Embargo-/Terrorliste aufgeführt.",
- "Only official government IDs (incl. passports) are accepted. Please scan both sides if applicable.":
- "Es werden nur amtliche Ausweise (inkl. Pässe) akzeptiert. Bitte scannen Sie gegebenenfalls beide Seiten.",
- "Optional supplemental information for the establishment of the business relationship with the customer.":
- "Optionale zusätzliche Informationen zur Begründung der Geschäftsbeziehung mit dem Kunden.",
- "Optional supplemental information for the special clarifications.":
- "Optionale ergänzende Angaben zu den besonderen Abklärungen.",
- "Origin of the deposited assets involved":
- "Herkunft der betroffenen eingebrachten Vermögenswerte",
- Other: "Andere",
- "Other means of clarification:": "Andere Abklärungsmittel:",
- "Other relevant information": "Weitere relevante Angaben",
- "Other type of signing authority": "Andere Art der Zeichnungsberechtigung",
- "Other way": "Andere Art",
- "Other, what?": "Andere, was?",
- "Other, which?": "Andere, welche?",
- "Own business operations": "Eigene Geschäftstätigkeit",
- "PEP of International Organisations": "PEP internationaler Organisationen",
- "Personal acquaintance between member and customer/beneficial owner of the assets over several years (at least 2) prior to entering into the business relationship":
- "Persönliche Bekanntschaft zwischen Mitglied und Kunde/wirtschaftlich Berechtigtem der Vermögenswerte über mehrere Jahre (mindestens 2) vor Aufnahme der Geschäftsbeziehung",
- "Persons establishing the legal relationship":
- "Personen, welche die Geschäftsbeziehung begründen",
- "Power of attorney arrangements": "Vollmachtregelung",
- "Profession, business activities, etc. (former, current, potentially planned)":
- "Beruf, Geschäftstätigkeiten usw. (frühere, aktuelle, allenfalls geplante)",
- "Purpose of the business relationship": "Zweck der Geschäftsbeziehung",
- Reason: "Grund",
- "Reason for control": "Grund der Kontrolle",
- "Reason for special clarifications": "Grund für besondere Abklärungen",
- "Reasonable suspicion": "Begründeter Verdacht",
- "Reasonable suspicion pursuant to Art. 9 AMLA, duty to file a report with MROS":
- "Begründeter Verdacht gemäss Art. 9 GwG, Meldepflicht bei der MROS",
- "Registered office": "Sitz",
- "Relation of the customer to the beneficial owner, controlling persons, authorised signatories and other persons involved in the business relationship":
- "Beziehung des Kunden zum wirtschaftlich Berechtigten, den Kontrollinhabern, den Zeichnungsberechtigten und anderen an der Geschäftsbeziehung beteiligten Personen",
- "Relation to other AMLA-Files": "Bezug zu anderen GwG-Dossiers",
- "Relationship with third parties": "Beziehung zu Dritten",
- "Residential address": "Wohnsitzadresse",
- "Residential address in Switzerland": "Wohnsitzadresse in der Schweiz",
- "Residential address validated": "Wohnsitzadresse überprüft",
- Result: "Ergebnis",
- "Result clarification": "Erläuterung des Ergebnisses",
- "Result of the special clarification": "Ergebnis der besonderen Abklärung",
- "Risk 0 acc. to VQF country list (VQF doc. no. 902.4.1)":
- "Risiko 0 gemäss VQF-Länderliste (VQF-Dok. Nr. 902.4.1)",
- "Risk 1 acc. to VQF country list (VQF doc. no. 902.4.1)":
- "Risiko 1 gemäss VQF-Länderliste (VQF-Dok. Nr. 902.4.1)",
- "Risk 2 acc. to VQF country list (VQF doc. no. 902.4.1)":
- "Risiko 2 gemäss VQF-Länderliste (VQF-Dok. Nr. 902.4.1)",
- "Risk Profile AMLA": "Risikoprofil GwG",
- "Risk category according to VQF country list (VQF doc. no. 902.4.1)":
- "Risikokategorie gemäss VQF-Länderliste (VQF-Dok. Nr. 902.4.1)",
- "Risk classification": "Risikoklassifizierung",
- Savings: "Ersparnisse",
- "Signature(s)": "Unterschrift(en)",
- "Signed Declaration": "Unterzeichnete Erklärung",
- "Signed Document": "Unterzeichnetes Dokument",
- "Signed declaration by the customer": "Vom Kunden unterzeichnete Erklärung",
- "Signing authority of the person": "Zeichnungsberechtigung der Person",
- "Simple suspicion": "Einfacher Verdacht",
- "Simple suspicion pursuant to Art. 305ter Para. 2 StGB, right to notify MROS":
- "Einfacher Verdacht gemäss Art. 305ter Abs. 2 StGB, Melderecht gegenüber der MROS",
- "Sole proprietor": "Einzelunternehmen",
- "Special Clarifications": "Besondere Abklärungen",
- "Specify other way of establishing signing authority:":
- "Andere Art des Nachweises der Zeichnungsberechtigung angeben:",
- Summary: "Zusammenfassung",
- "Summary and plausibility check of the gathered information":
- "Zusammenfassung und Plausibilitätsprüfung der eingeholten Informationen",
- "Summary evaluation": "Zusammenfassende Beurteilung",
- "Supplemental File Upload": "Hochladen zusätzlicher Dokumente",
- "Supplemental Files": "Zusätzliche Dokumente",
- "Supplemental files": "Ergänzende Dokumente",
- Telephone: "Telefon",
- "The contracting partner hereby undertakes to inform automatically of any changes to the information contained herein.":
- "Der Vertragspartner verpflichtet sich, Änderungen jeweils unaufgefordert mitzuteilen.",
- "The customer has to be identified on entering into a permanent business relationship or on concluding a cash transaction, which meets the according threshold.":
- "Die Vertragspartei muss identifiziert werden bei allen dauernden Geschäftsbeziehungen sowie bei Kassageschäften, bei welchen der entsprechende Schwellenwert erreicht wird.",
- "The customer completes the declaration directly in the form.":
- "Der Kunde füllt die Erklärung direkt im Formular aus.",
- "The customer is the person with whom the member concludes the contract with regard to the financial service provided (civil law). If the\n member acts as the director of a domiciliary company, then that domiciliary company is the customer.":
- "Kunde ist die Person, mit welcher das Mitglied den Vertrag über die erbrachte Finanzdienstleistung abschliesst (Zivilrecht). Handelt das\n Mitglied als Organ einer Sitzgesellschaft, so ist diese Sitzgesellschaft der Kunde.",
- "The customer is:": "Der Kunde ist:",
- "The customer/beneficial owner was not personally known to the member and business was entered into in the absence of the former (relationship by correspondence) and the customer was not introduced/brokered by a trusted third party.":
- "Der Kunde/wirtschaftlich Berechtigte war dem Mitglied nicht persönlich bekannt, und die Geschäftsbeziehung wurde in dessen Abwesenheit eingegangen (Korrespondenzbeziehung), wobei der Kunde nicht von einem vertrauenswürdigen Dritten eingeführt/vermittelt wurde.",
- "The customer/beneficial owner was not personally known to the member for several years (at least 2) prior to entering into the business relationship; however (a) no business was entered into in the absence of the customer/beneficial owner, or (b) the customer was at least introduced/brokered by a trusted third party.":
- "Der Kunde/wirtschaftlich Berechtigte war dem Mitglied nicht während mehrerer Jahre (mindestens 2) vor Aufnahme der Geschäftsbeziehung persönlich bekannt; jedoch wurde (a) keine Geschäftsbeziehung in Abwesenheit des Kunden/wirtschaftlich Berechtigten eingegangen, oder (b) der Kunde wurde zumindest von einem vertrauenswürdigen Dritten eingeführt/vermittelt.",
- "The information below has to refer to the persons from whom the assets originate ultimately (e.g. beneficial owner of the assets, founder/creator of a trust or foundation). Is the customer an operational legal entity or partnership the information may refer to the entity itself (not to the controlling person), unless the entity holds the assets in trust for a third party.":
- "Die nachstehenden Angaben müssen sich auf die Personen beziehen, von denen die Vermögenswerte letztlich stammen (z. B. wirtschaftlich Berechtigter der Vermögenswerte, Gründer/Errichter eines Trusts oder einer Stiftung). Ist der Kunde eine operativ tätige juristische Person oder Personengesellschaft, können sich die Angaben auf die Gesellschaft selbst (nicht auf den Kontrollinhaber) beziehen, sofern die Gesellschaft die Vermögenswerte nicht treuhänderisch für einen Dritten hält.",
- "The AML officer records the declaration and uploads the customer's signed PDF.":
- "Der GwG-Beauftragte erfasst die Erklärung und lädt das vom Kunden unterzeichnete PDF hoch.",
- "The person(s) listed below is/are holding 25% or more of the contracting partner's shares (capital shares or voting rights)":
- "Die nachfolgend aufgeführte(n) Person(en) hält/halten am Vertragspartner Anteile (Kapital- oder Stimmrechtsanteile) von 25% oder mehr",
- "The person(s) listed below is/are the beneficial owner(s) of the assets involved in the business relationship. If the contracting partner is also the sole beneficial owner of the assets, the contracting partner's detail must be set out below":
- "Die nachfolgend aufgeführte(n) Person(en) ist/sind an den in die Geschäftsbeziehung eingebrachten Vermögenswerten wirtschaftlich berechtigt. Ist der Vertragspartner selber allein an diesen Vermögenswerten wirtschaftlich berechtigt, so sind nachstehend seine Personalien festzuhalten",
- "The plausibility of the circumstances could be checked, no reasonable suspicion pursuant to Art. 9 AMLA (possibly update of customer profile and/or risk profile)":
- "Die Plausibilität der Umstände konnte überprüft werden, kein begründeter Verdacht gemäss Art. 9 GwG (gegebenenfalls Aktualisierung des Kundenprofils und/oder Risikoprofils)",
- "The results of the clarifications have to be documented and their plausibility has to be checked.":
- "Die Ergebnisse der Abklärungen sind zu dokumentieren und auf ihre Plausibilität zu prüfen.",
- "The uploaded document must contain the customer's signature on the beneficial owner declaration.":
- "Das hochgeladene Dokument muss die Unterschrift des Kunden auf der Erklärung zum wirtschaftlich Berechtigten enthalten.",
- "This evaluation has to be completed by all members for every business relationship.":
- "Diese Beurteilung ist von allen Mitgliedern für jede Geschäftsbeziehung durchzuführen.",
- "Trade in munitions/arms, raw gem stones/diamonds, jewellery, international trade in exotic animals, casino and lottery business, trade in erotic wares.":
- "Handel mit Munition/Waffen, Rohedelsteinen/Diamanten, Schmuck, internationaler Handel mit exotischen Tieren, Casino- und Lotteriegeschäft, Handel mit Erotikartikeln.",
- "Type of contact to the customer/beneficial owner of the assets.":
- "Art des Kontakts zum Kunden/wirtschaftlich Berechtigten der Vermögenswerte.",
- "Used means of clarification": "Verwendete Abklärungsmittel",
- "Verification date": "Datum der Überprüfung",
- "Verification whether the customer, beneficial owners of the assets, controlling persons, authorized representatives or other involved persons are listed on an embargo/terrorism list.":
- "Überprüfung, ob der Kunde, die wirtschaftlich Berechtigten der Vermögenswerte, die Kontrollinhaber, bevollmächtigten Vertreter oder andere beteiligte Personen auf einer Embargo-/Terrorliste aufgeführt sind.",
- "When a business relationship or transaction is associated with increased risk, appears unusual or evidence exists that the assets are the proceeds of a felony or a qualified tax offence, the member has to perform additional clarifications.":
- "Wenn eine Geschäftsbeziehung oder Transaktion mit einem erhöhten Risiko verbunden ist, ungewöhnlich erscheint oder Anhaltspunkte dafür bestehen, dass die Vermögenswerte aus einem Verbrechen oder einem qualifizierten Steuervergehen stammen, hat das Mitglied zusätzliche Abklärungen durchzuführen.",
- "When the decision of the Senior executive body on the acceptance of a business relationship with a PEP was obtained on.":
- "Datum, an dem der Entscheid des obersten Geschäftsführungsorgans über die Annahme einer Geschäftsbeziehung mit einer PEP eingeholt wurde.",
- "When the decision of the Senior executive body on the acceptance of a business relationship with increased risk was obtained on.":
- "Datum, an dem der Entscheid des obersten Geschäftsführungsorgans über die Annahme einer Geschäftsbeziehung mit erhöhtem Risiko eingeholt wurde.",
- "When the decision of the Senior executive body on the acceptance of such a business relationship was obtained on.":
- "Datum, an dem der Entscheid des obersten Geschäftsführungsorgans über die Annahme einer solchen Geschäftsbeziehung eingeholt wurde.",
- "Will the customer deposit assets with Taler Operations AG?":
- "Wird der Kunde Vermögenswerte bei der Taler Operations AG einbringen?",
- Yes: "Ja",
- "can't be empty": "darf nicht leer sein",
- "for operating legal entities and partnerships that are contracting partner as well as analogously for operating legal entities and partnership that are beneficial owners":
- "bei operativ tätigen juristischen Personen und Personengesellschaften als Vertragspartner sowie sinngemäss bei operativ tätigen juristischen Personen und Personengesellschaften als wirtschaftlich Berechtigte",
- "invalid format": "ungültiges Format",
- "it can't be greater than 120 years": "darf nicht größer als 120 Jahre sein",
- "it can't be in the future": "darf nicht in der Zukunft liegen",
-};
-
-function templateMessageId(parts: readonly string[]): string {
- let result = "";
- for (let index = 0; index < parts.length; index++) {
- result += parts[index];
- if (index < parts.length - 1) result += `%${index + 1}$s`;
- }
- return result;
-}
-
-export function withVqfTranslations(
- base: InternationalizationAPI,
-): InternationalizationAPI {
- return {
- ...base,
- str(parts: TemplateStringsArray, ...values: any[]) {
- const english = templateMessageId(parts);
- const german = fixedGermanByEnglish[english];
- if (german === undefined) return base.str(parts, ...values);
- return base.fixed({ en: english, de: german }, ...values);
- },
- };
-}
-
export function vqfLanguagePolicy(
i18n: InternationalizationAPI,
): FormLanguagePolicy {
diff --git a/packages/web-util/src/forms/index.ts b/packages/web-util/src/forms/index.ts
@@ -36,7 +36,6 @@ import { form_vqf_902_4 } from "./gana/VQF_902_4.js";
import { form_vqf_902_5 } from "./gana/VQF_902_5.js";
import { form_vqf_902_9_customer } from "./gana/VQF_902_9_customer.js";
import { form_vqf_902_9_officer } from "./gana/VQF_902_9_officer.js";
-import { withVqfTranslations } from "./gana/vqf.js";
export * from "./Calendar.js";
export * from "./AcceptTosForm.js";
@@ -86,7 +85,6 @@ export * from "./HtmlIframe.js";
export const preloadedForms: (
i18n: InternationalizationAPI,
) => Array<FormMetadata> = (i18n) => {
- const vqfI18n = withVqfTranslations(i18n);
return [
{
label: i18n.str`Simple comment`,
@@ -138,17 +136,17 @@ export const preloadedForms: (
form_challenger_sms(i18n),
form_challenger_postal(i18n),
form_multi_upload(i18n),
- form_vqf_902_1_customer(vqfI18n),
- form_vqf_902_1_officer(vqfI18n),
- form_vqf_902_4(vqfI18n),
- form_vqf_902_5(vqfI18n),
- form_vqf_902_9_customer(vqfI18n),
- form_vqf_902_9_officer(vqfI18n),
- form_vqf_902_11_customer(vqfI18n),
- form_vqf_902_11_officer(vqfI18n),
- form_vqf_902_12(vqfI18n),
- form_vqf_902_13(vqfI18n),
- form_vqf_902_14(vqfI18n),
+ form_vqf_902_1_customer(i18n),
+ form_vqf_902_1_officer(i18n),
+ form_vqf_902_4(i18n),
+ form_vqf_902_5(i18n),
+ form_vqf_902_9_customer(i18n),
+ form_vqf_902_9_officer(i18n),
+ form_vqf_902_11_customer(i18n),
+ form_vqf_902_11_officer(i18n),
+ form_vqf_902_12(i18n),
+ form_vqf_902_13(i18n),
+ form_vqf_902_14(i18n),
form_generic_note(i18n),
];
};