commit d99a8383e47351dd5961a4d3b123b2701262d481
parent 43de7f93f31dbcb5d778b679902ce3d5011b84d4
Author: Florian Dold <florian@dold.me>
Date: Tue, 18 Mar 2025 12:36:12 +0100
TOPS WIP
Diffstat:
| M | deployments/tops.rst | | | 461 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------- |
1 file changed, 420 insertions(+), 41 deletions(-)
diff --git a/deployments/tops.rst b/deployments/tops.rst
@@ -277,8 +277,8 @@ document is taken from the context.
**Context:**
-** ``REQUESTED_FILE_TITLE``
-** ``REQUESTED_FILE_DESCRIPTION``
+* ``REQUESTED_FILE_TITLE``
+* ``REQUESTED_FILE_DESCRIPTION``
**Attributes**:
@@ -307,13 +307,13 @@ Initial collection of basic attributes about customer during onboarding.
when CUSTOMER_INFO_TYPE = 'NATURAL_PERSON' {
CUSTOMER_NATURAL_FULL_NAME :: Text
// Residential address
- CUSTOMER_NATURAL_RESIDENTIAL :: Text
+ CUSTOMER_NATURAL_DOMICILE :: Text
CUSTOMER_NATURAL_PHONE :: Optional[Text]
CUSTOMER_NATURAL_EMAIL :: Optional[Text]
CUSTOMER_NATURAL_BIRTHDATE :: Date
CUSTOMER_NATURAL_NATIONALITY :: Text
// PDF Document
- CUSTOMER_NATURAL_NATIONAL_ID :: File
+ CUSTOMER_NATURAL_IDENTITY_DOCUMENT :: File
// Optional fields for sole proprietor
CUSTOMER_NATURAL_COMPANY_NAME :: Optional[Text]
CUSTOMER_NATURAL_REGISTERED_OFFICE :: Optional[Text]
@@ -326,23 +326,192 @@ Initial collection of basic attributes about customer during onboarding.
CUSTOMER_ENTITY_CONTACT_PERSON_NAME :: Optional[Text]
CUSTOMER_ENTITY_PHONE :: Optional[Text]
CUSTOMER_ENTITY_EMAIL :: Optional[Text]
- // PDF File
- CUSTOMER_ENTITY_ID_COPY :: File
- // FIXME: This is not founder, but establisher of business
- // relationship with TOPS
- FOUNDER_LIST[].FOUNDER_FULL_NAME :: Text
- FOUNDER_LIST[].FOUNDER_RESIDENTIAL_ADDRESS :: Text
- FOUNDER_LIST[].FOUNDER_BIRTHDATE :: Text
- FOUNDER_LIST[].FOUNDER_NATIONALITY :: Text
- FOUNDER_LIST[].FOUNDER_AUTHORIZATION_TYPE :: Text
- // FIXME: Name is weird.
- FOUNDER_LIST[].FOUNDER_NATIONAL_COPY :: File
- // values are "CR", "MANDATE", but do we model "other"?
- FOUNDER_LIST[].FOUNDER_POWER_OF_ATTORNEY :: Text
-
- require len(FOUNDER_LIST) > 0
+ CUSTOMER_ENTITY_ID_DOC :: File
+ ESTABLISHER_LIST[].FULL_NAME :: Text
+ ESTABLISHER_LIST[].DOMICILE :: Text
+ ESTABLISHER_LIST[].BIRTHDATE :: Text
+ ESTABLISHER_LIST[].NATIONALITY :: Text
+ ESTABLISHER_LIST[].AUTHORIZATION_TYPE :: Text
+ ESTABLISHER_LIST[].ID_DOC :: File
+ ESTABLISHER_LIST[].POWER_OF_ATTORNEY :: 'CR' | 'MANDATE' | 'OTHER'
+ when (ESTABLISHER_LIST[].POWER_OF_ATTORNEY = 'OTHER') {
+ ESTABLISHER_LIST[].POWER_OF_ATTORNEY_OTHER :: Text
+ }
+
+ require len(ESTABLISHER_LIST) > 0
}
+* ``CUSTOMER_INFO_TYPE``
+
+ * **Type:** Single choice
+ * **Choices:**
+
+ * ``NATURAL_PERSON``
+
+ * **Label DE:** Die Vertragspartei ist eine natürliche Person
+
+ * ``LEGAL_ENTITY``
+
+ * **Label DE:** Die Vertragspartei ist eine juristische Person
+
+* ``CUSTOMER_TYPE``
+
+ * **Type:** Single Choice
+ * **Choices:**:
+
+ * ``NATURAL``
+
+ * **Label DE**: Die Vertragspartei ist eine natürliche Person und es bestehen keine Zweifel, dass
+ diese selber an den Vermögenswerten wirtschaftlich
+ berechtigt ist
+
+ * ``OPERATIONAL``
+
+ * **Label DE**: ... eine operative juristische Person oder Personengesellschaft
+
+ * ``FOUNDATION``
+
+ * **Label DE**: ... eine Stiftung (oder ein ähnliches Konstrukt; inkl. Underlying
+ Companies).
+
+ * ``TRUST``
+
+ * **Label DE**: ... ein Trust (inkl. Underlying Companies)
+
+ * ``LIFE_INSURANCE``
+
+ * **Label DE**: ... eine Lebensversicherung mit separater Konto-/Depotführung
+ (sog. Insurance Wrapper)
+
+ * ``OTHER``
+
+ * **Label DE**: alle übrigen Fälle
+
+* ``CUSTOMER_NATURAL_FULL_NAME``
+
+ * **Type**: Single-line text
+ * **Label EN**: Name / First Name
+ * **Label DE**: Name/Vorname
+
+* ``CUSTOMER_NATURAL_DOMICILE``
+
+ * **Type**: Multi-line text
+ * **Label DE**: Wohnsitzadresse
+
+* ``CUSTOMER_NATURAL_PHONE``
+
+ * **Type**: Phone number (**optional**)
+ * **Label DE:** Telefon
+
+* ``CUSTOMER_NATURAL_EMAIL``
+
+ * **Type**: E-Mail address (**optional**)
+ * **Label DE:** E-Mail
+
+* ``CUSTOMER_NATURAL_BIRTHDATE``
+
+ * **Type**: Date
+ * **Label DE:** Geburtstsdatum
+
+* ``CUSTOMER_NATURAL_NATIONALITY``
+
+ * **Type**: Country code
+ * **Label DE:** Staatsangehörigkeit
+
+* ``CUSTOMER_NATURAL_IDENTITY_DOCUMENT``
+
+ * **Type**: File upload (PDF)
+ * **Label DE:** Staatsangehörigkeit
+
+* ``CUSTOMER_NATURAL_COMPANY_NAME``
+
+ * **Type**: Single-line text
+ * **Label DE:** [Bei Inhabern von Einzelunternehmen (in Ergänzung zu oben):] Firma
+
+* ``CUSTOMER_NATURAL_REGISTERED_OFFICE``
+
+ * **Type**: Multi-line text
+ * **Label DE:** [Bei Inhabern von Einzelunternehmen (in Ergänzung zu oben):] Geschäftsadresse
+
+* ``CUSTOMER_NATURAL_COMPANY_ID_DOC``
+
+ * **Type**: Multi-line text
+ * **Label DE:** [Bei Inhabern von Einzelunternehmen (in Ergänzung zu oben):] Identifizierungsdokument
+ für Unternehmen
+
+* ``CUSTOMER_ENTITY_COMPANY_NAME``
+
+ * **Type:** Single-line text
+ * **Label DE:** Firma
+
+* ``CUSTOMER_ENTITY_COMPANY_ADDRESS``
+
+ * **Type:** Multi-line text
+ * **Label DE:** Domiziladresse
+
+* ``CUSTOMER_ENTITY_CONTACT_PERSON_NAME``
+
+ * **Type:** Single-line text (**optional**)
+ * **Label DE:** Kontaktperson
+
+* ``CUSTOMER_ENTITY_PHONE``
+
+ * **Type:** Phone number (**optional**)
+ * **Label DE:** Telefon
+
+* ``CUSTOMER_ENTITY_EMAIL``
+
+ * **Type:** E-Mail address (**optional**)
+ * **Label DE:** E-Mail
+
+* ``CUSTOMER_ENTITY_ID_DOC``
+
+ * **Type:** File upload (PDF)
+ * **Label DE:** Identifizierungsdokument (nicht älter als 12 Monate)
+
+* ``ESTABLISHER_LIST[].FULL_NAME``
+
+ * **Type:** Single-line string
+ * **Label DE:** Name/Vorname
+
+* ``ESTABLISHER_LIST[].DOMICILE``
+
+ * **Type:** Multi-line string
+ * **Label DE:** Wohnsitzadresse
+
+* ``ESTABLISHER_LIST[].NATIONALITY``
+
+ * **Type:** Country code
+ * **Label DE:** Staatsangehörigkeit
+
+* ``ESTABLISHER_LIST[].ID_DOC``
+
+ * **Type:** File upload (PDF)
+ * **Label DE:** Identifikationsdokument
+
+* ``ESTABLISHER_LIST[].POWER_OF_ATTORNEY``
+
+ * **Type:** Single Choice
+ * **Label DE:** Kenntnisnahme der Bevollmächtigten-
+ bestimmungen durch
+ * **Choices**:
+
+ * ``CR``
+
+ * **Label DE:** HR-Auszug
+
+ * ``MANDATE``
+
+ * **Label DE:** Vollmacht
+
+ * ``OTHER``
+
+ * **Label DE:** Anderes:
+
+* ``ESTABLISHER_LIST[].POWER_OF_ATTORNEY_OTHER``
+
+ * **Type**: Single-line text
+
**Measure after submission by customer:**
Depending on ``CUSTOMER_INFO_TYPE``, the customer is asked to fill out another
form:
@@ -360,8 +529,8 @@ vqf_902_1_officer
**Filled out by:** Only AML Officer
-**Prerequisites:** ``vqf_902_1`` (with follow-up form if required),
-``vqf_902_5`` and ``vqf_902_4`` must have been filled out for the customer.
+**Prerequisites:** ``vqf_902_1_customer`` (with follow-up form if required),
+``vqf_902_5`` and ``vqf_902_4`` must have been submitted and checked.
**Differences from VQF form 902.1:**
@@ -377,6 +546,9 @@ vqf_902_1_officer
**Attributes:**
+FIXME: Why is all of this optional? What does this mean if the
+acceptance date is missing?
+
.. code:: none
ACCEPTANCE_DATE :: Optional[Date]
@@ -389,6 +561,7 @@ vqf_902_1_officer
EMBARGO_TERRORISM_INFO :: Optional[Text]
+
vqf_902_4
^^^^^^^^^
@@ -397,16 +570,24 @@ vqf_902_4
**Purpose:** The AML officer uses this form
to document the risk profile of a customer.
+**Differences from VQF form**
+
+* "LÄNDERRISIKO (Zahlungsverkehr)" does not apply, since we
+ only accept Swiss customers
+* "PRODUKTRISIKO (Art der vom Kunden verlangten Dienstleistungen und Produkte)
+ does not apply, since we do not offer customized products/services.
+
**Attributes:**
.. code:: none
PEP_FOREIGN :: Boolean
- // FIXME: The next two don't really match
- // the VFQ form, check and justify
PEP_DOMESTIC :: Boolean
PEP_INTERNATIONAL_ORGANIZATION :: Boolean
- when PEP_INTERNATIONAL_ORGANIZATION or PEP_DOMESTIC {
+ when (PEP_DOMESTIC or PEP_INTERNATIONAL_ORGANIZATION) {
+ PEP_HIGH_RISK :: Boolean
+ }
+ when PEP_FOREIGN or PEP_HIGH_RISK {
PEP_ACCEPTANCE_DATE :: Date
}
HIGH_RISK_COUNTRY :: Boolean
@@ -414,14 +595,13 @@ to document the risk profile of a customer.
HIGH_RISK_ACCEPTANCE_DATE :: Date
}
// FIXME: Unclear if this is single-choice or multiple-choice
- COUNTRY_RISK_NATIONALITY_TYPE :: (
- 'NONE' |
+ COUNTRY_RISK_NATIONALITY_TYPE :: List[
'NATIONALITY_CUSTOMER' | 'NATIONALITY_OWNER' |
'DOMICILE_CUSTOMER' | 'DOMICILE_OWNER' |
- 'DOMICILE_CONTROLLING')
+ 'DOMICILE_CONTROLLING']
COUNTRY_RISK_NATIONALITY_LEVEL :: 'LOW' | 'MEDIUM' | 'HIGH'
// FIXME: Unclear if this is single-choice or multiple-choice
- COUNTRY_RISK_BUSINESS_TYPE :: 'NONE' | 'CUSTOMER' | 'OWNER'
+ COUNTRY_RISK_BUSINESS_TYPE :: List['CUSTOMER' | 'OWNER']
COUNTRY_RISK_BUSINESS_LEVEL :: 'LOW' | 'MEDIUM' | 'HIGH'
COUNTRY_RISK_PAYMENTS_LEVEL :: 'LOW' | 'MEDIUM' | 'HIGH'
INDUSTRY_RISK_TYPE :: 'CUSTOMER' | 'OWNER'
@@ -429,19 +609,218 @@ to document the risk profile of a customer.
'TRANSPARENT' | 'HIGH_CASH_TRANSACTION' |
'NOT_WELL_KNOWN' | 'HIGH_RISK_TRADE' | 'UNKNOWN_INDUSTRY')
CONTACT_RISK_LEVEL :: 'LOW' | 'MEDIUM' | 'HIGH'
- PRODUCT_RISK_LEVEL :: (
- 'EASY' | 'SOPHISTICATED' | 'OFFSHORE' |
- 'COMPLEX_STRUCTURE' | 'LARGE_NUMBER_OF_ACCOUNTS' |
- 'COMPLEX_SERVICE' | 'FREQ_TRANS_WITH_HIGH_RISK')
- // FIXME: Enum values here are weird!
- RISK_CLASIFICATION_LEVEL :: 'WITH' | 'WITHOUT'
- RISK_CLASIFICATION_ACCEPTANCE_DATE :: Date
- // FIXME: We need to define our own risk criteria here
- // => Refine existing one
- // ...
- // FIXME: We need to define our own criteria for
- // monitoring of high-risk transactions.
- // => Fixed, not per customer
+ RISK_RATIONALE :: Text
+ HIGH_RISK :: Boolean
+ when HIGH_RISK {
+ HIGH_RISK_ACCEPTANCE_DATE :: Date
+ }
+
+* ``PEP_FOREIGN``
+
+ * **Type**: Checkbox
+ * **Label DE:** Ist die Vertragspartei, der wirtschaftlich
+ Berechtige resp. Kontrollinhaber oder der
+ Bevollmächtigte ein ausländischer PEP
+ oder steht er einem solchen nahe?
+
+* ``PEP_DOMESTIC``
+
+ * **Type**: Checkbox
+ * **Label DE:** Ist die Vertragspartei, der wirtschaftlich
+ Berechtigte resp. Kontrollinhaber oder
+ der Bevollmächtigte ein inländischer PEP
+
+* ``PEP_INTERNATIONAL_ORGANIZATION``
+
+ * **Type**: Checkbox
+ * **Label DE:** Ist die Vertragspartei, der wirtschaftlich
+ Berechtigte resp. Kontrollinhaber oder der Bevollmächtigte ein PEP bei
+ internationalen Organisationen oder steht er einem solchen nahe?
+
+* ``PEP_HIGH_RISK``
+
+ * **Type**: Checkbox
+ * **Label DE:** Ist ein Risikokriterium aus diesem Formular erfüllt?
+ * **VQF form original label:** Ist ein Risikokriterium gemäss Ziff. 3 nachfolgend erhöht?
+
+
+* ``PEP_ACCEPTANCE_DATE``
+
+ * **Type:** Date
+ * **Label DE:** Die Zustimmung des obersten Geschäftsführungsorgans zur Aufnahme einer
+ Geschäftsbeziehung mit einem PEP wurde eingeholt am:
+
+* ``COUNTRY_RISK_NATIONALITY_TYPE``
+
+ * **Type:** Multi-choice
+ * **Label DE:** LÄNDERRISIKO (Nationalität)
+ * **Choices:**
+
+ * ``NATIONALITY_CUSTOMER``
+
+ * **Label DE:** [Staatsangehörigkeit] Vertragspartei
+
+ * ``NATIONALITY_OWNER``
+
+ * **Label DE:** [Staatsangehörigkeit] An Vermögenswerten wirtschaftlich berechtigte Person
+
+ * ``DOMICILE_CUSTOMER``
+
+ * **Label DE:** [Sitz/Wohnsitz] Vertragspartei
+
+ * ``DOMICILE_CONTROLLING``
+
+ * **Label DE:** [Sitz/Wohnsitz] Kontrollinhaber
+
+ * ``DOMICILE_OWNER``
+
+ * **Label DE:** [Sitz/Wohnsitz] an Vermögenswerten wirtschaftlich berechtigte Personen
+
+* ``COUNTRY_RISK_NATIONALITY_LEVEL``
+
+ * **Type:** Single choice
+ * **Choices:**
+
+ * ``LOW``
+
+ * **Label DE:** Risiko 0 gemäss VQF-Länderliste (VQF Dok. Nr. 902.4.1)
+
+ * ``MEDIUM``
+
+ * **Label DE:** Risiko 1 gemäss VQF-Länderliste (VQF Dok. Nr. 902.4.1)
+
+ * ``HIGH``
+
+ * **Label DE:** Risiko 2 gemäss VQF-Länderliste (VQF Dok. Nr. 902.4.1)
+
+* ``COUNTRY_RISK_BUSINESS_TYPE``
+
+ * **Type:** Multi-choice
+ * **Label DE:** LÄNDERRISIKO (Geschäftstätigkeit)
+ * **Choices:**
+
+ * ``CUSTOMER``
+
+ * **Label DE:** [Ort der Geschäftstätigkeit] Vertragspartei
+
+ * ``OWNER``
+
+ * **Label DE:** [Ort der Geschäftstätigkeit] an Vermögenswerten wirtschaftlich berechtigte Person
+
+* ``COUNTRY_RISK_BUSINESS_LEVEL``
+
+ * **Type:** Single choice
+ * **Choices:**
+
+ * ``LOW``
+
+ * **Label DE:** Risiko 0 gemäss VQF-Länderliste (VQF Dok. Nr. 902.4.1)
+
+ * ``MEDIUM``
+
+ * **Label DE:** Risiko 1 gemäss VQF-Länderliste (VQF Dok. Nr. 902.4.1)
+
+ * ``HIGH``
+
+ * **Label DE:** Risiko 2 gemäss VQF-Länderliste (VQF Dok. Nr. 902.4.1)
+
+
+* ``INDUSTRY_RISK_TYPE``
+
+ * **Type:** Multi-choice
+ * **Label DE:** BRANCHENRISIKO
+ * **Choices:**
+
+ * ``CUSTOMER``
+
+ * **Label DE:** [Art der Geschäftstätigkeit] Vertragspartei
+
+ * ``OWNER``
+
+ * **Label DE:** [Art der Geschäftstätigkeit] an Vermögenswerten wirtschaftlich berechtigte Person
+
+* ``INDUSTRY_RISK_LEVEL``
+
+ * **Type:** Single choice
+ * **Choices:**
+
+ * ``TRANSPARENT``
+
+ * **Label DE:**
+ Dem Mitglied gut bekannte, klar um rissene, transparente
+ und einfach verständliche Geschäftstätigkeit
+
+ * ``HIGH_CASH_TRANSACTION``
+
+ * **Label DE:** Geschäftstätigkeit mit hohen Bargeldtransaktionen
+
+ * ``NOT_WELL_KNOWN``
+
+ * **Label DE:** Dem Mitglied eher unbekannte Tätigkeit
+
+ * ``HIGH_RISK_TRADE``
+
+ * **Label DE:**
+ Waffen-/Rüstungshandel, Rohedelsteine- und Diamantenhandel,
+ Schmuckhandel, internationaler Handel mit exotischen Tieren, Casino-
+ und Lotteriegewerbe, Erotikgewerbe
+
+ * ``UNKNOWN_INDUSTRY``
+
+ * **Label DE:**
+ Keinerlei persönliche Kenntnisse des Mitglieds zur Branche der
+ Vertragspartei
+
+* ``CONTACT_RISK_LEVEL``
+
+ * **Type:** Multi-choice
+ * **Label DE:**
+ KONTAKTRISIKO: Kontaktformen zur Vertragspartei/an Vermögenswerten
+ wirtschaftlich berechtigten Person
+
+ * **Choices:**
+
+ * ``LOW``
+
+ * **Label DE**:
+ Persönliche Bekanntschaft zwischen Mitglied und Vertragspartei/an
+ Vermögenswerten wirtschaftlich berechtigter Person vor
+ Geschäftsaufnahme seit mehreren Jahren (min. 2 Jahre)
+
+ * ``MEDIUM``
+
+ * **Label DE**:
+ Vertragspartei/an Vermögenswerten wirtschaftlich berechtigte Person war dem Mitglied vor Geschäftsaufnahme
+ nicht seit mehreren Jahren (min. 2 Jahre) persönlich bekannt, aber
+ (a) keine Geschäftsaufnahme unter Abwesenden oder
+ (b) zumindest Einführung/Vermittlung des Kunden durch eine Vertrauensperson
+
+ * ``HIGH``
+
+ * **Label DE**:
+ Vertragspartei/an Vermögenswerten wirtschaftlich berechtigte Person
+ persönlich unbekannt und Geschäftsaufnahme unter Abwesenden
+ (Korrespondenzbeziehung) sowie keine Einführung/Vermittlung des Kunden
+ durch eine Vertrauensperson
+
+* ``RISK_RATIONALE``
+
+ * **Type:** Multi-line text
+ * **Label DE:** Begründung für abweichende Risikobewertung
+
+* ``HIGH_RISK``
+
+ * **Type:** Checkbox (yes/no)
+ * **Label DE:** [Risikoklassifizierung] Geschäftsbeziehung mit erhöhtem Risiko
+
+* ``HIGH_RISK_ACCEPTANCE_DATE``
+
+ * **Type:** Checkbox (yes/no)
+ * **Label DE:**
+ Die Zustimmung einer vorgesetzten Person / Stelle oder der Geschäftsführung
+ zur Aufnahme einer Geschäftsbeziehung mit erhöhtem Risiko wurde eingeholt
+ am:
+
vqf_902_5
^^^^^^^^^