commit b16e687faf720c8996262352964d7f562388682a
parent 3810ab3f6f8bec9f390bc1d2c9b16566d7397003
Author: Florian Dold <dold@taler.net>
Date: Mon, 31 Aug 2026 22:13:43 +0200
taler-harness: exercise foundation and trust PDF exports
Diffstat:
2 files changed, 145 insertions(+), 30 deletions(-)
diff --git a/packages/taler-harness/src/harness/tops.ts b/packages/taler-harness/src/harness/tops.ts
@@ -250,19 +250,17 @@ PROGRAM = tops-check-controlling-entity
VOLUNTARY = NO
CONTEXT = {}
-# FIXME: #9825
-#[kyc-measure-form-vqf-902.12]
-#CHECK_NAME = form-vqf-902.12
-#PROGRAM = preserve-investigate
-#VOLUNTARY = NO
-#CONTEXT = {}
+[kyc-measure-form-vqf-902.12]
+CHECK_NAME = form-vqf-902.12
+PROGRAM = preserve-investigate
+VOLUNTARY = NO
+CONTEXT = {}
-# FIXME: #9827
-#[kyc-measure-form-vqf-902.13]
-#CHECK_NAME = form-vqf-902.13
-#PROGRAM = preserve-investigate
-#VOLUNTARY = NO
-#CONTEXT = {}
+[kyc-measure-form-vqf-902.13]
+CHECK_NAME = form-vqf-902.13
+PROGRAM = preserve-investigate
+VOLUNTARY = NO
+CONTEXT = {}
# FIXME: #9826
#[kyc-measure-form-vqf-902.15]
@@ -370,25 +368,21 @@ DESCRIPTION_I18N = {"de":"Formular VQF 902.11 hochladen"}
OUTPUTS = IDENTITY_CONTRACTING_PARTNER CONTROL_REASON IDENTITY_LIST THIRD_PARTY_OWNERSHIP
FALLBACK = preserve-investigate
-#[kyc-check-form-vqf-902.12]
-#TYPE = FORM
-# FIXME #9025: This form will not be supported for the TOPS MVP
-#FORM_NAME = vqf_902_12
-#DESCRIPTION = "Supply VQF form 902.12"
-#DESCRIPTION_I18N = {"de":"Formular VQF 902.12 hochladen"}
-# FIXME: list correct outputs for each form here (and update GANA)
-#OUTPUTS = LEGAL_ENTITY_TYPE
-#FALLBACK = preserve-investigate
+[kyc-check-form-vqf-902.12]
+TYPE = FORM
+FORM_NAME = vqf_902_12
+DESCRIPTION = "Supply VQF form 902.12"
+DESCRIPTION_I18N = {"de":"Formular VQF 902.12 hochladen"}
+OUTPUTS = IDENTITY_CONTRACTING_PARTNER LEGAL_STRUCTURE_NAME LEGAL_STRUCTURE_TYPE LEGAL_STRUCTURE_REVOCABILITY ORIGINATOR_LIST ORIGINATOR_HAS_REVOCATION_RIGHT PREDECESSOR_ORIGINATOR_LIST BENEFICIARY_LIST BENEFICIARIES_HAVE_DISTRIBUTION_CLAIM BENEFICIARY_GROUPS FURTHER_PERSON_LIST FURTHER_PERSON_HAS_REVOCATION_RIGHT SIGNATURE SIGN_DATE
+FALLBACK = preserve-investigate
-#[kyc-check-form-vqf-902.13]
-#TYPE = FORM
-# FIXME: #9827 : This form will not be supported for the TOPS MVP
-#FORM_NAME = vqf_902_13
-#DESCRIPTION = "Supply VQF form 902.13"
-#DESCRIPTION_I18N = {"de":"Formular VQF 902.13 hochladen"}
-# FIXME: list correct outputs for each form here (and update GANA)
-#OUTPUTS = LEGAL_ENTITY_TYPE
-#FALLBACK = preserve-investigate
+[kyc-check-form-vqf-902.13]
+TYPE = FORM
+FORM_NAME = vqf_902_13
+DESCRIPTION = "Supply VQF form 902.13"
+DESCRIPTION_I18N = {"de":"Formular VQF 902.13 hochladen"}
+OUTPUTS = IDENTITY_CONTRACTING_PARTNER LEGAL_STRUCTURE_NAME LEGAL_STRUCTURE_TYPE LEGAL_STRUCTURE_REVOCABILITY ORIGINATOR_LIST ORIGINATOR_HAS_REVOCATION_RIGHT PREDECESSOR_ORIGINATOR_LIST BENEFICIARY_LIST BENEFICIARIES_HAVE_DISTRIBUTION_CLAIM BENEFICIARY_GROUPS PROTECTOR_LIST PROTECTOR_HAS_REVOCATION_RIGHT FURTHER_PERSON_LIST FURTHER_PERSON_HAS_REVOCATION_RIGHT SIGNATURE SIGN_DATE
+FALLBACK = preserve-investigate
#[kyc-check-form-vqf-902.15]
#TYPE = FORM
diff --git a/packages/taler-harness/src/integrationtests/test-tops-aml-pdf.ts b/packages/taler-harness/src/integrationtests/test-tops-aml-pdf.ts
@@ -591,6 +591,127 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) {
});
}
+ // Test vqf_902_12 foundation declaration
+ {
+ await decideMeasure("form-vqf-902.12");
+ await submitForm("vqf_902_12", {
+ FORM_ID: "vqf_902_12",
+ FORM_VERSION: 1,
+ IDENTITY_CONTRACTING_PARTNER:
+ "Foundation Board AG\nExample Street 1\n8001 Zurich",
+ LEGAL_STRUCTURE_NAME: "Example Foundation",
+ LEGAL_STRUCTURE_TYPE: "DISCRETIONARY",
+ LEGAL_STRUCTURE_REVOCABILITY: "REVOCABLE",
+ ORIGINATOR_LIST: [
+ {
+ NAME_OR_ENTITY: "John Doe",
+ DOMICILE_OR_REGISTERED_OFFICE: "Main St 123\n8001 Zurich",
+ DOMICILE_OR_REGISTERED_OFFICE_COUNTRY: "CH",
+ DATE_OF_BIRTH: "1950-01-01",
+ NATIONALITY: "CH",
+ },
+ ],
+ ORIGINATOR_HAS_REVOCATION_RIGHT: true,
+ PREDECESSOR_ORIGINATOR_LIST: [
+ {
+ NAME_OR_ENTITY: "Predecessor Founder Ltd.",
+ DOMICILE_OR_REGISTERED_OFFICE: "Old Road 4\n9490 Vaduz",
+ DOMICILE_OR_REGISTERED_OFFICE_COUNTRY: "LI",
+ },
+ ],
+ BENEFICIARY_LIST: [
+ {
+ NAME_OR_ENTITY: "Jane Beneficiary",
+ DOMICILE_OR_REGISTERED_OFFICE: "Lake Road 5\n6000 Lucerne",
+ DOMICILE_OR_REGISTERED_OFFICE_COUNTRY: "CH",
+ DATE_OF_BIRTH: "1985-06-15",
+ NATIONALITY: "CH",
+ },
+ ],
+ BENEFICIARIES_HAVE_DISTRIBUTION_CLAIM: false,
+ BENEFICIARY_GROUPS: "Descendants of John Doe",
+ FURTHER_PERSON_LIST: [
+ {
+ NAME_OR_ENTITY: "Alex Nominator",
+ DOMICILE_OR_REGISTERED_OFFICE: "Board Street 7\n8002 Zurich",
+ DOMICILE_OR_REGISTERED_OFFICE_COUNTRY: "CH",
+ DATE_OF_BIRTH: "1975-02-20",
+ NATIONALITY: "CH",
+ },
+ ],
+ FURTHER_PERSON_HAS_REVOCATION_RIGHT: true,
+ SIGNATURE: "Board Member",
+ SIGN_DATE: "2026-08-31",
+ });
+ }
+
+ // Test vqf_902_13 trust declaration
+ {
+ await decideMeasure("form-vqf-902.13");
+ await submitForm("vqf_902_13", {
+ FORM_ID: "vqf_902_13",
+ FORM_VERSION: 1,
+ IDENTITY_CONTRACTING_PARTNER:
+ "Trustee Company AG\nExample Street 1\n8001 Zurich",
+ LEGAL_STRUCTURE_NAME: "Example Trust",
+ LEGAL_STRUCTURE_TYPE: "DISCRETIONARY",
+ LEGAL_STRUCTURE_REVOCABILITY: "REVOCABLE",
+ ORIGINATOR_LIST: [
+ {
+ NAME_OR_ENTITY: "Jane Smith",
+ DOMICILE_OR_REGISTERED_OFFICE: "Main St 123\n8001 Zurich",
+ DOMICILE_OR_REGISTERED_OFFICE_COUNTRY: "CH",
+ DATE_OF_BIRTH: "1955-01-01",
+ NATIONALITY: "CH",
+ },
+ ],
+ ORIGINATOR_HAS_REVOCATION_RIGHT: false,
+ PREDECESSOR_ORIGINATOR_LIST: [
+ {
+ NAME_OR_ENTITY: "Original Settlor",
+ DOMICILE_OR_REGISTERED_OFFICE: "Old Lane 2\n1000 Lausanne",
+ DOMICILE_OR_REGISTERED_OFFICE_COUNTRY: "CH",
+ DATE_OF_BIRTH: "1935-03-12",
+ NATIONALITY: "CH",
+ DATE_OF_DEATH: "2015-04-01",
+ },
+ ],
+ BENEFICIARY_LIST: [
+ {
+ NAME_OR_ENTITY: "Taylor Beneficiary",
+ DOMICILE_OR_REGISTERED_OFFICE: "River Road 3\n3000 Bern",
+ DOMICILE_OR_REGISTERED_OFFICE_COUNTRY: "CH",
+ DATE_OF_BIRTH: "1990-07-10",
+ NATIONALITY: "CH",
+ },
+ ],
+ BENEFICIARIES_HAVE_DISTRIBUTION_CLAIM: true,
+ BENEFICIARY_GROUPS: "Descendants of Jane Smith",
+ PROTECTOR_LIST: [
+ {
+ NAME_OR_ENTITY: "Pat Protector",
+ DOMICILE_OR_REGISTERED_OFFICE: "Hill Street 4\n4051 Basel",
+ DOMICILE_OR_REGISTERED_OFFICE_COUNTRY: "CH",
+ DATE_OF_BIRTH: "1970-09-08",
+ NATIONALITY: "CH",
+ },
+ ],
+ PROTECTOR_HAS_REVOCATION_RIGHT: true,
+ FURTHER_PERSON_LIST: [
+ {
+ NAME_OR_ENTITY: "Robin Appointer",
+ DOMICILE_OR_REGISTERED_OFFICE: "Trust Avenue 8\n8004 Zurich",
+ DOMICILE_OR_REGISTERED_OFFICE_COUNTRY: "CH",
+ DATE_OF_BIRTH: "1968-11-30",
+ NATIONALITY: "CH",
+ },
+ ],
+ FURTHER_PERSON_HAS_REVOCATION_RIGHT: false,
+ SIGNATURE: "Trustee",
+ SIGN_DATE: "2026-08-31",
+ });
+ }
+
// Test vqf_902_14 form - NO_SUSPICION result
{
await submitOfficerForm("vqf_902_14", {