taler-typescript-core

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

commit 24d3f74fb4ca44e7a229df4d77762ab5d5a37c8a
parent b15f531ee8649cb360e1111aca1c1c8fd722c933
Author: Florian Dold <florian@dold.me>
Date:   Wed, 10 Dec 2025 19:20:55 +0100

formatting, tag tests with exchange tag

Diffstat:
Mpackages/taler-harness/src/integrationtests/test-kyc-decision-attr.ts | 2+-
Mpackages/taler-harness/src/integrationtests/test-kyc-fail-recover-simple.ts | 2+-
Mpackages/taler-harness/src/integrationtests/test-kyc-new-measure.ts | 2+-
Mpackages/taler-harness/src/integrationtests/test-tops-aml-pdf.ts | 243+++++++++++++++++++++++++++++++++++++++++++++++--------------------------------
4 files changed, 149 insertions(+), 100 deletions(-)

diff --git a/packages/taler-harness/src/integrationtests/test-kyc-decision-attr.ts b/packages/taler-harness/src/integrationtests/test-kyc-decision-attr.ts @@ -141,4 +141,4 @@ export async function runKycDecisionAttrTest(t: GlobalTestState) { t.assertDeepEqual(attrs.details[0].attributes?.foo, 42); } -runKycDecisionAttrTest.suites = ["wallet"]; +runKycDecisionAttrTest.suites = ["exchange"]; diff --git a/packages/taler-harness/src/integrationtests/test-kyc-fail-recover-simple.ts b/packages/taler-harness/src/integrationtests/test-kyc-fail-recover-simple.ts @@ -258,4 +258,4 @@ export async function runKycFailRecoverSimpleTest(t: GlobalTestState) { } } -runKycFailRecoverSimpleTest.suites = ["wallet", "merchant", "kyc"]; +runKycFailRecoverSimpleTest.suites = ["wallet", "merchant", "kyc", "exchange"]; diff --git a/packages/taler-harness/src/integrationtests/test-kyc-new-measure.ts b/packages/taler-harness/src/integrationtests/test-kyc-new-measure.ts @@ -283,4 +283,4 @@ export async function runKycNewMeasureTest(t: GlobalTestState) { } } -runKycNewMeasureTest.suites = ["wallet"]; +runKycNewMeasureTest.suites = ["exchange"]; diff --git a/packages/taler-harness/src/integrationtests/test-tops-aml-pdf.ts b/packages/taler-harness/src/integrationtests/test-tops-aml-pdf.ts @@ -29,9 +29,7 @@ export const logger = new Logger("test-tops-aml-measures.ts"); */ function createPdfAttachment(content: string): string { // Escape parentheses for PDF literal strings - const contentEscaped = content - .replace(/\(/g, "\\(") - .replace(/\)/g, "\\)"); + const contentEscaped = content.replace(/\(/g, "\\(").replace(/\)/g, "\\)"); // Minimal PDF const pdf = `%PDF-1.1 @@ -78,8 +76,6 @@ startxref return Buffer.from(pdf, "utf8").toString("base64"); } - - /** * Test that invokes all measures defined for the TOPS deployment. */ @@ -109,38 +105,45 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { CONTACT_PERSON_NAME: "Bob Smith", CONTACT_PHONE: "+41123456789", CONTACT_EMAIL: "bob@acme.com", - LEGAL_ENTITY_IDENTIFICATION_DOCUMENT_COPY: createPdfAttachment("company-id-doc"), + LEGAL_ENTITY_IDENTIFICATION_DOCUMENT_COPY: + createPdfAttachment("company-id-doc"), ESTABLISHER_LIST: [ { FULL_NAME: "Alice Johnson", DOMICILE_ADDRESS: "Main St. 10\n8001 Zurich", DATE_OF_BIRTH: "1980-05-15", NATIONALITY: "CH", - PERSONAL_IDENTIFICATION_DOCUMENT_COPY: createPdfAttachment("alice-id"), + PERSONAL_IDENTIFICATION_DOCUMENT_COPY: + createPdfAttachment("alice-id"), SIGNING_AUTHORITY_TYPE: "SINGLE", SIGNING_AUTHORITY_EVIDENCE_TYPE: "CR", - SIGNING_AUTHORITY_EVIDENCE_DOCUMENT_COPY: createPdfAttachment("alice-cr"), + SIGNING_AUTHORITY_EVIDENCE_DOCUMENT_COPY: + createPdfAttachment("alice-cr"), }, { FULL_NAME: "Charlie Brown", DOMICILE_ADDRESS: "Park Ave. 20\n8002 Zurich", DATE_OF_BIRTH: "1975-08-22", NATIONALITY: "DE", - PERSONAL_IDENTIFICATION_DOCUMENT_COPY: createPdfAttachment("charlie-id"), + PERSONAL_IDENTIFICATION_DOCUMENT_COPY: + createPdfAttachment("charlie-id"), SIGNING_AUTHORITY_TYPE: "COLLECTIVE_TWO", SIGNING_AUTHORITY_EVIDENCE_TYPE: "MANDATE", - SIGNING_AUTHORITY_EVIDENCE_DOCUMENT_COPY: createPdfAttachment("charlie-mandate"), + SIGNING_AUTHORITY_EVIDENCE_DOCUMENT_COPY: + createPdfAttachment("charlie-mandate"), }, { FULL_NAME: "Diana Prince", DOMICILE_ADDRESS: "Lake Road 30\n8003 Zurich", DATE_OF_BIRTH: "1985-12-01", NATIONALITY: "US", - PERSONAL_IDENTIFICATION_DOCUMENT_COPY: createPdfAttachment("diana-id"), + PERSONAL_IDENTIFICATION_DOCUMENT_COPY: + createPdfAttachment("diana-id"), SIGNING_AUTHORITY_TYPE: "OTHER", SIGNING_AUTHORITY_EVIDENCE_TYPE: "OTHER", SIGNING_AUTHORITY_EVIDENCE_OTHER: "Board Resolution", - SIGNING_AUTHORITY_EVIDENCE_DOCUMENT_COPY: createPdfAttachment("diana-resolution"), + SIGNING_AUTHORITY_EVIDENCE_DOCUMENT_COPY: + createPdfAttachment("diana-resolution"), }, ], CORRESPONDENCE_LANGUAGE: "en", @@ -173,7 +176,8 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { CONTACT_EMAIL: "john.doe@example.com", DATE_OF_BIRTH: "1990-03-12", NATIONALITY: "CH", - PERSONAL_IDENTIFICATION_DOCUMENT_COPY: createPdfAttachment("john-passport"), + PERSONAL_IDENTIFICATION_DOCUMENT_COPY: + createPdfAttachment("john-passport"), CUSTOMER_IS_SOLE_PROPRIETOR: false, CORRESPONDENCE_LANGUAGE: "de", CUSTOMER_TYPE_VQF: "NATURAL", @@ -208,7 +212,8 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { CUSTOMER_IS_SOLE_PROPRIETOR: true, COMPANY_NAME: "Smith Consulting GmbH", REGISTERED_OFFICE_ADDRESS: "Business Park 3\n8021 Zurich", - LEGAL_ENTITY_IDENTIFICATION_DOCUMENT_COPY: createPdfAttachment("smith-biz-reg"), + LEGAL_ENTITY_IDENTIFICATION_DOCUMENT_COPY: + createPdfAttachment("smith-biz-reg"), CORRESPONDENCE_LANGUAGE: "fr", CUSTOMER_TYPE_VQF: "OTHER", }); @@ -226,8 +231,8 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test vqf_902_1_officer form - if (false) // FIXME: Dold - { + if (false) { + // FIXME: Dold await decideMeasure("kyx"); await submitForm("vqf_902_1_officer", { FORM_ID: "vqf_902_1_officer", @@ -265,8 +270,8 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test vqf_902_1_officer form with LISTED terrorism check - if (false) // FIXME: dold - { + if (false) { + // FIXME: dold await decideMeasure("kyx"); await submitForm("vqf_902_1_officer", { FORM_ID: "vqf_902_1_officer", @@ -276,7 +281,8 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { ACCEPTANCE_FURTHER_INFO: "Authenticated copy received via postal service", EMBARGO_TERRORISM_CHECK_RESULT: "LISTED", EMBARGO_TERRORISM_CHECK_DATE: "2025-12-02", - EMBARGO_TERRORISM_INFO: "Name match found on sanctions list - requires further investigation", + EMBARGO_TERRORISM_INFO: + "Name match found on sanctions list - requires further investigation", SUPPLEMENTAL_FILES_LIST: [ { FILE: createPdfAttachment("sanctions-report"), @@ -305,8 +311,8 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test vqf_902_4 form - without PEP or high risk - if (false) // FIXME: dold - { + if (false) { + // FIXME: dold await decideMeasure("kyx"); // FIXME: which measure? await submitForm("vqf_902_4", { FORM_ID: "vqf_902_4", @@ -315,7 +321,10 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { PEP_DOMESTIC: false, PEP_INTERNATIONAL_ORGANIZATION: false, HIGH_RISK_COUNTRY: false, - COUNTRY_RISK_NATIONALITY_TYPE: ["NATIONALITY_CUSTOMER", "DOMICILE_CUSTOMER"], + COUNTRY_RISK_NATIONALITY_TYPE: [ + "NATIONALITY_CUSTOMER", + "DOMICILE_CUSTOMER", + ], COUNTRY_RISK_NATIONALITY_LEVEL: "LOW", COUNTRY_RISK_BUSINESS_TYPE: ["CUSTOMER"], COUNTRY_RISK_BUSINESS_LEVEL: "LOW", @@ -323,7 +332,8 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { INDUSTRY_RISK_TYPE: "CUSTOMER", INDUSTRY_RISK_LEVEL: "TRANSPARENT", CONTACT_RISK_LEVEL: "LOW", - RISK_RATIONALE: "Customer is well-known local business with transparent operations", + RISK_RATIONALE: + "Customer is well-known local business with transparent operations", RISK_CLASSIFICATION_LEVEL: "NO_HIGH_RISK", }); @@ -339,8 +349,8 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test vqf_902_4 form - with PEP and high risk - if (false) // FIXME: dold - { + if (false) { + // FIXME: dold await decideMeasure("kyx"); await submitForm("vqf_902_4", { FORM_ID: "vqf_902_4", @@ -364,7 +374,8 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { INDUSTRY_RISK_TYPE: "CUSTOMER", INDUSTRY_RISK_LEVEL: "HIGH_RISK_TRADE", CONTACT_RISK_LEVEL: "HIGH", - RISK_RATIONALE: "Customer is foreign PEP with connections to high-risk jurisdictions. Enhanced due diligence applied.", + RISK_RATIONALE: + "Customer is foreign PEP with connections to high-risk jurisdictions. Enhanced due diligence applied.", RISK_CLASSIFICATION_LEVEL: "HIGH_RISK", }); await expectInvestigate(); @@ -381,26 +392,36 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test vqf_902_5 form - with SAVINGS origin - if (false) // FIXME: dold - { + if (false) { + // FIXME: dold await decideMeasure("kyx"); await expectNoInvestigate(); await submitForm("vqf_902_5", { FORM_ID: "vqf_902_5", FORM_VERSION: 1, - BIZREL_PROFESSION: "Software Engineer at Tech Company\nPreviously worked as IT Consultant\n15 years experience", - BIZREL_FINANCIAL_CIRCUMSTANCES: "Annual income: CHF 120,000\nTotal assets: CHF 500,000\nNo significant liabilities", - BIZREL_ORIGIN_NATURE: "Cash deposits and investment returns\nAmount: CHF 200,000\nCurrency: CHF", + BIZREL_PROFESSION: + "Software Engineer at Tech Company\nPreviously worked as IT Consultant\n15 years experience", + BIZREL_FINANCIAL_CIRCUMSTANCES: + "Annual income: CHF 120,000\nTotal assets: CHF 500,000\nNo significant liabilities", + BIZREL_ORIGIN_NATURE: + "Cash deposits and investment returns\nAmount: CHF 200,000\nCurrency: CHF", BIZREL_ORIGIN_CATEGORY: ["SAVINGS", "OWN_BUSINESS"], - BIZREL_ORIGIN_DETAIL: "Accumulated savings from employment over 10 years. Additional income from freelance software consulting projects.", - BIZREL_PURPOSE: "Investment account for long-term wealth management and retirement planning", - BIZREL_DEVELOPMENT: "Expect regular monthly deposits of CHF 3,000-5,000. Occasional larger deposits from consulting projects.", - BIZREL_FINANCIAL_VOLUME: "Average monthly volume: CHF 4,000. Expected annual growth of 10-15%.", + BIZREL_ORIGIN_DETAIL: + "Accumulated savings from employment over 10 years. Additional income from freelance software consulting projects.", + BIZREL_PURPOSE: + "Investment account for long-term wealth management and retirement planning", + BIZREL_DEVELOPMENT: + "Expect regular monthly deposits of CHF 3,000-5,000. Occasional larger deposits from consulting projects.", + BIZREL_FINANCIAL_VOLUME: + "Average monthly volume: CHF 4,000. Expected annual growth of 10-15%.", BIZREL_FINANCIAL_BENEFICIARIES_FULL_NAME: "Self (account holder)", - BIZREL_THIRDPARTY_RELATIONSHIP: "No third parties involved. Account holder is sole beneficial owner.", + BIZREL_THIRDPARTY_RELATIONSHIP: + "No third parties involved. Account holder is sole beneficial owner.", BIZREL_THIRDPARTY_AMLA_FILES: "None", - BIZREL_THIRDPARTY_REFERENCES: "Introduced by existing client Marcus Weber, Account #CH-12345", - BIZREL_FURTHER_INFO: "Customer has been transparent about income sources. All documentation verified.", + BIZREL_THIRDPARTY_REFERENCES: + "Introduced by existing client Marcus Weber, Account #CH-12345", + BIZREL_FURTHER_INFO: + "Customer has been transparent about income sources. All documentation verified.", }); await expectInvestigate(); @@ -416,27 +437,37 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test vqf_902_5 form - with INHERITANCE and OTHER origin - if (false) // FIXME: dold - { + if (false) { + // FIXME: dold await decideMeasure("kyx"); await expectNoInvestigate(); await submitForm("vqf_902_5", { FORM_ID: "vqf_902_5", FORM_VERSION: 1, - BIZREL_PROFESSION: "Retired business owner\nFormer CEO of manufacturing company\nRetired since 2020", - BIZREL_FINANCIAL_CIRCUMSTANCES: "Pension income: CHF 80,000 per year\nTotal net worth: CHF 2,500,000\nNo debt", - BIZREL_ORIGIN_NATURE: "Inheritance and business sale proceeds\nAmount: CHF 1,500,000\nCurrency: CHF and EUR", + BIZREL_PROFESSION: + "Retired business owner\nFormer CEO of manufacturing company\nRetired since 2020", + BIZREL_FINANCIAL_CIRCUMSTANCES: + "Pension income: CHF 80,000 per year\nTotal net worth: CHF 2,500,000\nNo debt", + BIZREL_ORIGIN_NATURE: + "Inheritance and business sale proceeds\nAmount: CHF 1,500,000\nCurrency: CHF and EUR", BIZREL_ORIGIN_CATEGORY: ["INHERITANCE", "OTHER"], BIZREL_ORIGIN_CATEGORY_OTHER: "Sale of family business in 2020", - BIZREL_ORIGIN_DETAIL: "CHF 800,000 from inheritance after parents' estate settlement in 2019. CHF 700,000 from sale of 60% stake in family manufacturing business to private equity firm.", + BIZREL_ORIGIN_DETAIL: + "CHF 800,000 from inheritance after parents' estate settlement in 2019. CHF 700,000 from sale of 60% stake in family manufacturing business to private equity firm.", BIZREL_PURPOSE: "Wealth preservation and estate planning for children", - BIZREL_DEVELOPMENT: "Minimal transaction activity expected. Quarterly dividend reinvestment.", - BIZREL_FINANCIAL_VOLUME: "Low volume - primarily passive investment portfolio", - BIZREL_FINANCIAL_BENEFICIARIES_FULL_NAME: "Account holder and designated heirs: Maria Schmidt, Thomas Schmidt", - BIZREL_THIRDPARTY_RELATIONSHIP: "Trust arrangement for benefit of children listed above", + BIZREL_DEVELOPMENT: + "Minimal transaction activity expected. Quarterly dividend reinvestment.", + BIZREL_FINANCIAL_VOLUME: + "Low volume - primarily passive investment portfolio", + BIZREL_FINANCIAL_BENEFICIARIES_FULL_NAME: + "Account holder and designated heirs: Maria Schmidt, Thomas Schmidt", + BIZREL_THIRDPARTY_RELATIONSHIP: + "Trust arrangement for benefit of children listed above", BIZREL_THIRDPARTY_AMLA_FILES: "Linked to estate file #EST-2019-445", - BIZREL_THIRDPARTY_REFERENCES: "Legal advisor: Dr. Hans Mueller, Zurich Law Firm", - BIZREL_FURTHER_INFO: "Estate documentation and business sale agreement on file. All sources verified through notarized documents.", + BIZREL_THIRDPARTY_REFERENCES: + "Legal advisor: Dr. Hans Mueller, Zurich Law Firm", + BIZREL_FURTHER_INFO: + "Estate documentation and business sale agreement on file. All sources verified through notarized documents.", }); await expectInvestigate(); @@ -452,14 +483,15 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test vqf_902_9_customer form - if (false) // FIXME: dold - { + if (false) { + // FIXME: dold await decideMeasure("kyx"); await expectNoInvestigate(); await submitForm("vqf_902_9_customer", { FORM_ID: "vqf_902_9_customer", FORM_VERSION: 1, - IDENTITY_CONTRACTING_PARTNER: "Global Trading Ltd.\nCommerce Street 45\n8050 Zurich", + IDENTITY_CONTRACTING_PARTNER: + "Global Trading Ltd.\nCommerce Street 45\n8050 Zurich", IDENTITY_LIST: [ { FULL_NAME: "Michael Anderson", @@ -497,13 +529,14 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test vqf_902_9_officer form - if (false) // FIXME: dold - { + if (false) { + // FIXME: dold await decideMeasure("kyx"); await submitForm("vqf_902_9_officer", { FORM_ID: "vqf_902_9_officer", FORM_VERSION: 1, - IDENTITY_CONTRACTING_PARTNER: "Tech Innovations AG\nInnovation Park 12\n8060 Zurich", + IDENTITY_CONTRACTING_PARTNER: + "Tech Innovations AG\nInnovation Park 12\n8060 Zurich", IDENTITY_LIST: [ { FULL_NAME: "Emma Thompson", @@ -539,13 +572,14 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test vqf_902_11_customer form - HAS_25_MORE_RIGHTS variant, without third party - if (false) // FIXME: dold - { + if (false) { + // FIXME: dold await decideMeasure("kyx"); await submitForm("vqf_902_11_customer", { FORM_ID: "vqf_902_11_customer", FORM_VERSION: 1, - IDENTITY_CONTRACTING_PARTNER: "Manufacturing Solutions Ltd.\nIndustrial Zone 78\n8070 Zurich", + IDENTITY_CONTRACTING_PARTNER: + "Manufacturing Solutions Ltd.\nIndustrial Zone 78\n8070 Zurich", CONTROL_REASON: "HAS_25_MORE_RIGHTS", IDENTITY_LIST: [ { @@ -578,13 +612,14 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test vqf_902_11_customer form - OTHER_WAY variant, with third party - if (false) // FIXME: dold - { + if (false) { + // FIXME: dold await decideMeasure("kyx"); await submitForm("vqf_902_11_customer", { FORM_ID: "vqf_902_11_customer", FORM_VERSION: 1, - IDENTITY_CONTRACTING_PARTNER: "Service Holdings AG\nService Center 90\n8080 Zurich", + IDENTITY_CONTRACTING_PARTNER: + "Service Holdings AG\nService Center 90\n8080 Zurich", CONTROL_REASON: "OTHER_WAY", IDENTITY_LIST: [ { @@ -617,13 +652,14 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test vqf_902_11_customer form - DIRECTOR variant - if (false) // FIXME: dold - { + if (false) { + // FIXME: dold await decideMeasure("kyx"); await submitForm("vqf_902_11_customer", { FORM_ID: "vqf_902_11_customer", FORM_VERSION: 1, - IDENTITY_CONTRACTING_PARTNER: "Consulting Partners GmbH\nConsulting Tower 5\n8090 Zurich", + IDENTITY_CONTRACTING_PARTNER: + "Consulting Partners GmbH\nConsulting Tower 5\n8090 Zurich", CONTROL_REASON: "DIRECTOR", IDENTITY_LIST: [ { @@ -656,13 +692,14 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test vqf_902_11_officer form - HAS_25_MORE_RIGHTS variant - if (false) // FIXME: dold - { + if (false) { + // FIXME: dold await decideMeasure("kyx"); await submitForm("vqf_902_11_officer", { FORM_ID: "vqf_902_11_officer", FORM_VERSION: 1, - IDENTITY_CONTRACTING_PARTNER: "Investment Group SA\nFinance District 101\n8100 Zurich", + IDENTITY_CONTRACTING_PARTNER: + "Investment Group SA\nFinance District 101\n8100 Zurich", CONTROL_REASON: "HAS_25_MORE_RIGHTS", IDENTITY_LIST: [ { @@ -694,16 +731,19 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test vqf_902_14 form - NO_SUSPICION result - if (false) // FIXME: dold - { + if (false) { + // FIXME: dold await decideMeasure("kyx"); await submitForm("vqf_902_14", { FORM_ID: "vqf_902_14", FORM_VERSION: 1, - INCRISK_REASON: "Large cash deposit of CHF 50,000 triggered monitoring alert. Customer explanation requested.", + INCRISK_REASON: + "Large cash deposit of CHF 50,000 triggered monitoring alert. Customer explanation requested.", INCRISK_MEANS: "GATHERING", - INCRISK_SUMMARY: "Customer provided proof of property sale. Documentation includes notarized sales agreement and bank transfer records. All information is consistent and plausible.", - INCRISK_DOCUMENTS: "Property sales agreement (notarized), Bank transfer confirmation, Tax declaration", + INCRISK_SUMMARY: + "Customer provided proof of property sale. Documentation includes notarized sales agreement and bank transfer records. All information is consistent and plausible.", + INCRISK_DOCUMENTS: + "Property sales agreement (notarized), Bank transfer confirmation, Tax declaration", INCRISK_RESULT: "NO_SUSPICION", }); @@ -719,17 +759,20 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test vqf_902_14 form - SUBSTANTIATED_SUSPICION result - if (false) // FIXME: dold - { + if (false) { + // FIXME: dold await decideMeasure("kyx"); await expectNoInvestigate(); await submitForm("vqf_902_14", { FORM_ID: "vqf_902_14", FORM_VERSION: 1, - INCRISK_REASON: "Multiple transactions to high-risk jurisdictions. Inconsistent explanations provided. Transaction patterns suggest possible structuring.", + INCRISK_REASON: + "Multiple transactions to high-risk jurisdictions. Inconsistent explanations provided. Transaction patterns suggest possible structuring.", INCRISK_MEANS: "CONSULTATION", - INCRISK_SUMMARY: "Customer's stated business activity does not align with transaction patterns. Multiple red flags identified including: (1) transactions just below reporting threshold, (2) payments to shell companies in offshore jurisdictions, (3) inconsistent business documentation.", - INCRISK_DOCUMENTS: "Transaction logs, Customer interviews, Public records search, Third-party database checks", + INCRISK_SUMMARY: + "Customer's stated business activity does not align with transaction patterns. Multiple red flags identified including: (1) transactions just below reporting threshold, (2) payments to shell companies in offshore jurisdictions, (3) inconsistent business documentation.", + INCRISK_DOCUMENTS: + "Transaction logs, Customer interviews, Public records search, Third-party database checks", INCRISK_RESULT: "SUBSTANTIATED_SUSPICION", }); @@ -745,19 +788,24 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test vqf_902_14 form - OTHER result with explanation - if (false) // FIXME: dold - { + if (false) { + // FIXME: dold await decideMeasure("kyx"); await submitForm("vqf_902_14", { FORM_ID: "vqf_902_14", FORM_VERSION: 1, - INCRISK_REASON: "Unusual activity pattern detected. Customer requested clarification on enhanced monitoring procedures.", + INCRISK_REASON: + "Unusual activity pattern detected. Customer requested clarification on enhanced monitoring procedures.", INCRISK_MEANS: "OTHER", - INCRISK_MEANS_OTHER: "Video conference with customer and legal counsel, review of corporate governance documents, consultation with external compliance specialist", - INCRISK_SUMMARY: "Customer is undergoing corporate restructuring. Increased transaction volume is temporary and related to merger activity. All parties have been identified and verified.", - INCRISK_DOCUMENTS: "Merger agreement, Board resolutions, Legal opinions, Updated beneficial ownership structure", + INCRISK_MEANS_OTHER: + "Video conference with customer and legal counsel, review of corporate governance documents, consultation with external compliance specialist", + INCRISK_SUMMARY: + "Customer is undergoing corporate restructuring. Increased transaction volume is temporary and related to merger activity. All parties have been identified and verified.", + INCRISK_DOCUMENTS: + "Merger agreement, Board resolutions, Legal opinions, Updated beneficial ownership structure", INCRISK_RESULT: "OTHER", - INCRISK_RESULT_OTHER: "Enhanced monitoring period established - 6-month review cycle with quarterly reporting requirements", + INCRISK_RESULT_OTHER: + "Enhanced monitoring period established - 6-month review cycle with quarterly reporting requirements", }); const res = succeedOrThrow( @@ -772,13 +820,14 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test generic_note form - if (false) // FIXME: dold - { + if (false) { + // FIXME: dold await decideMeasure("kyx"); await submitForm("generic_note", { FORM_ID: "generic_note", FORM_VERSION: 1, - NOTE_TEXT: "Follow-up meeting held with customer regarding recent transaction patterns. Customer provided satisfactory explanations and supporting documentation. No further concerns at this time.", + NOTE_TEXT: + "Follow-up meeting held with customer regarding recent transaction patterns. Customer provided satisfactory explanations and supporting documentation. No further concerns at this time.", SUPPLEMENTAL_FILES_LIST: [ { DESCRIPTION: "Meeting minutes from customer interview", @@ -807,13 +856,14 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test generic_upload form - if (false) // FIXME: dold - { + if (false) { + // FIXME: dold await decideMeasure("kyx"); await submitForm("generic_upload", { FORM_ID: "generic_upload", FORM_VERSION: 1, - NOTE_TEXT: "Customer requested to upload current business license and updated company registry extract as part of periodic review.", + NOTE_TEXT: + "Customer requested to upload current business license and updated company registry extract as part of periodic review.", FILE: createPdfAttachment("business-license-2025"), }); @@ -850,8 +900,8 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test challenger-postal form - if (false) // FIXME: Dold: This is not exactly a 'form'. How to submit? - { + if (false) { + // FIXME: Dold: This is not exactly a 'form'. How to submit? await decideMeasure("postal-registration"); await submitForm("challenger-postal", { FORM_ID: "challenger-postal", @@ -873,8 +923,8 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } // Test challenger-sms form - if (false) // FIXME: Dold: This is not exactly a 'form'. How to submit? - { + if (false) { + // FIXME: Dold: This is not exactly a 'form'. How to submit? await decideMeasure("sms-registration"); await submitForm("challenger-sms", { FORM_ID: "challenger-sms", @@ -928,4 +978,4 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { } } -runTopsAmlPdfTest.suites = ["wallet"]; -\ No newline at end of file +runTopsAmlPdfTest.suites = ["exchange"];