commit 5941e1343baf6d3935327f0c6ab79fe27d61872b
parent 5ae77c795699ddbb4d21dc568678560aecc643f0
Author: Florian Dold <florian@dold.me>
Date: Thu, 27 Mar 2025 16:05:10 +0100
tops: document more VQF stats, clarify prop derivation
Diffstat:
| M | deployments/tops.rst | | | 148 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------- |
1 file changed, 117 insertions(+), 31 deletions(-)
diff --git a/deployments/tops.rst b/deployments/tops.rst
@@ -237,10 +237,14 @@ Properties
* Is the customer a international org PEP?
-* ``AML_HIGH_RISK :: Boolean``
+* ``AML_HIGH_RISK_CUSTOMER :: Boolean``
* Is the customer classified as high-risk?
+* ``AML_HIGH_RISK_COUNTRY :: Boolean``
+
+ * Is the customer associated with high-risk (VQF Dok. Nr. 902.4.1) country?
+
* ``AML_ACCOUNT_IDLE :: Boolean``
* The account has been marked as idle (typically by a batch process that checks
@@ -269,7 +273,8 @@ Account opening/closing:
PEP/Risk classification:
-* ``INCR_HIGH_RISK`` / ``DECR_HIGH_RISK``
+* ``INCR_HIGH_RISK_CUSTOMER`` / ``DECR_HIGH_RISK_CUSTOMER``
+* ``INCR_HIGH_RISK_COUNTRY`` / ``INCR_HIGH_RISK_COUNTRY``
* ``INCR_PEP`` / ``DECR_PEP``
* ``INCR_FOREIGN_PEP`` / ``DECR_FOREIGN_PEP``
* ``INCR_DOMESTIC_PEP`` / ``DECR_DOMESTIC_PEP``
@@ -1499,6 +1504,13 @@ When the AML officer submits a form, the AML SPA will derive some pre-defined
properties and events from the filled-in form attributes. The AML Officer can change
(override) these derived properties and events.
+* Assumptions:
+
+ * Properties are always calculated only based on new attributes and the previous properties. They are never calculated
+ from older attribute collections or the current rules.
+ * The AML officer can always override derived properties or events.
+ * In the future, we might derive *rules* from properties, but we don't do that right now.
+
The derivation is defined in pseudo-code. The following special
variables/functions are available:
@@ -1549,8 +1561,12 @@ Events:
emit(INCR_INTERNATIONAL_ORG_PEP);
}
- if (newProps.AML_HIGH_RISK) {
- emit(INCR_HIGH_RISK);
+ if (newProps.AML_HIGH_RISK_CUSTOMER) {
+ emit(INCR_HIGH_RISK_CUSTOMER);
+ }
+
+ if (newProps.AML_HIGH_RISK_COUNTRY) {
+ emit(INCR_HIGH_RISK_COUNTRY);
}
}
@@ -1565,7 +1581,8 @@ properties:
newProps.AML_FOREIGN_PEP = form.PEP_FOREIGN;
newProps.AML_DOMESTIC_PEP = form.PEP_DOMESTIC;
newProps.AML_INTERNATIONAL_ORG_PEP = form.PEP_INTERNATIONAL_ORGANIZATION;
- newProps.AML_HIGH_RISK = form.RISK_CLASSIFICATION_LEVEL == "HIGH_RISK";
+ newProps.AML_HIGH_RISK_CUSTOMER = form.RISK_CLASSIFICATION_LEVEL == "HIGH_RISK";
+ newProps.AML_HIGH_RISK_COUNTRY = form.COUNTRY_RISK_NATIONALITY_LEVEL == "HIGH";
Events:
@@ -1693,41 +1710,110 @@ Event Reporting (VQF)
The VQF self-declaration contains the following questions that we need
to answer with statistics derived via events:
- **Original German Text**
+.. code:: none
+
+ Original German Text:
+
+ 3. Anzahl der betreuten GwG-Files
+
+ 3.1. GwG-Files für dauernde Geschäftsbeziehungen (gemäss Art. 7 lit. b SRO-Reglement)
+
+ 3.1.1. Anzahl der am 01.01.20XX betreuten GwG-Files
+
+ 3.1.2. Zwischen 01.01.20XX und 31.12.20XX hinzugekommene GwG-Files
+
+ 3.1.3. Anzahl der während des Jahres 20XX betreuten GwG-Files
+ (Relevante Zahl für die jährliche GwG-File Gebühr / Jahresrechnung)
+
+ 3.1.4. Zwischen 01.01.20XX und 31.12.20XX beendigte GwG-Files
+
+ 3.1.5. Anzahl der am 31.12.20XX betreuten GwG-Files (gerechnet ab dem 01.01.20XX)
+
+ 4. Angaben zu Kundenstruktur, Produkten, Betriebsstruktur
+
+ 4.1. Führten Sie im Jahre 2024 Geschäftsbeziehungen mit erhöhtem Risiko (Art. 58 SRO-Reglement)?
+
+ 4.2. Falls bei Ziff. 4.1 mit "Ja" geantwortet, bei wie vielen davon handelt es
+ sich um politisch exponierte Personen (PEP)? (nummerische Anzahl)
+
+ 4.3. Wie viele von den genannten PEP sind ausländische PEP?
+ (nummerische Anzahl)
+
+ 4.4. Falls bei Ziff. 4.1 mit "Ja" geantwortet, wie viele weitere
+ (zusätzlich zu den in Ziff. 4.2 / PEP genannten)
+ Geschäftsbeziehungen mit erhöhten Risiken führten Sie?
+ (nummerische Anzahl)
+
+ 4.5. Total der Geschäftsbeziehungen mit erhöhtem Risiko
+
+ 4.6. Führten Sie im Jahre 2024 Geschäftsbeziehungen mit
+ Vertragspartnern oder wirtschaftlich berechtigten Personen mit
+ Nationalität oder Domizil/Sitz in einem Land mit Risikostufe
+ "High" gemäss VQF-Länderliste (VQF Dok. Nr. 902.4.1)?
+
+ 5. Meldungen an die Meldestelle (MROS)
+
+ 5.1. Meldepflicht (Art. 9 Abs. 1 GwG) (nummerische Anzahl)
+ 5.2. Melderecht (Art. 305ter Abs. 2 StGB) (nummerische Anzahl)
+ 5.3. Total der an die Meldestelle (MROS) und den VQF erfolgten MROS-Meldungen
+
+
+ English Translation
+
+ TBD.
+
+
+Based on this, we have the following statistics:
+
+* Number of open accounts on January 1st (self-declaration 3.1.1)
+
+ * Implemementation: ``evtcount(INCR_ACCOUNT_OPEN, start=0, end=jan_first_20xx) - evtcount(DECR_ACCOUNT_OPEN, start=0, end=jan_first_20xx)``
+
+* Number of newly opened accounts between 01.01.20XX and 31.12.20XX (self-declaration 3.1.2.)
+
+ * Implemementation: ``evtcount(INCR_ACCOUNT_OPEN, start=jan_first_20xx, end=dec_last_20xx)``
+
+* Number of AML files managed during the year 20XX (self-declaration 3.1.3.)
+
+ * All accounts ever opened except the ones that were closed *before* 20xx
+ * Implemementation: ``evtcount(INCR_ACCOUNT_OPEN, start=0, end=dec_last_20xx) - evtcount(DECR_ACCOUNT_OPEN, start=0, end=jan_first_20xx)``
+
+* Number of AML files closed between 01.01.20XX and 31.12.20XX (self-declaration 3.1.4)
+
+ * Implemementation: ``evtcount(DECR_ACCOUNT_OPEN, start=jan_first_20xx, end=dec_last_20xx)``
+
+* Were there business relationships in the year 20XX with high risk? (self-declaration 4.1)
+
+ * Implementation: ``evtcount(INCR_HIGH_RISK_CUSTOMER, start=0, end=dec_last_20xx) - evtcount(DECR_HIGH_RISK_CUSTOMER, start=0, end=dec_last_20xx) > 0``
+
+* Of those, how many were with PEPs? (self-declaration 4.2.)
+
+ * Implementation: ``evtcount(INCR_PEP, start=0, end=dec_last_20xx) - evtcount(DECR_PEP, start=0, end=dec_last_20xx)``
+
+* Of those PEPs, how many were with *foreign* PEPs? (self-declaration 4.3.)
+
+ * Implementation: ``evtcount(INCR_FOREIGN_PEP, start=0, end=dec_last_20xx) - evtcount(DECR_FOREIGN_PEP, start=0, end=dec_last_20xx)``
+
+* Number of other additional (other than PEPs and foreign PEPs) high-risk business relationships in 20XX (self-declaration 4.4.)
- Meldungen an die Meldestelle (MROS)
+ * Implementation: Difference between 4.5. and 4.2
- * Meldepflicht (Art. 9 Abs. 1 GwG) (nummerische Anzahl)
- * Melderecht (Art. 305ter Abs. 2 StGB) (nummerische Anzahl)
- * Total der an die Meldestelle (MROS) und den VQF erfolgten MROS-Meldungen
+* Number of high-risk business relationship n total in 20xx (self-declaration 4.5.)
- GwG-Files für dauernde Geschäftsbeziehungen (gemäss Art. 7 lit. b SRO-Reglement)
+ * Implementation: ``evtcount(INCR_HIGH_RISK_CUSTOMER, start=0, end=dec_last_20xx) - evtcount(DECR_HIGH_RISK_CUSTOMER, start=0, end=dec_last_20xx)``
- * Anzahl der am 01.01.20XX betreuten GwG-Files
- * Zwischen 01.01.20XX und 31.12.20XX hinzugekommene GwG-Files
- * Anzahl der während des Jahres 20XX betreuten GwG-Files
- * Relevante Zahl für die jährliche GwG-File Gebühr / Jahresrechnung
- * Zwischen 01.01.20XX und 31.12.20XX beendigte GwG-Files
- * Anzahl der am 31.12.20XX betreuten GwG-Files (gerechnet ab dem 01.01.20XX)
+* Number of reports (substantiated suspicion) to MROS during 20xx (self-declaration 5.1)
- **English Translation**
+ * Implementation: ``evtcount(REPORTED_SUSPICION_SUBSTANTIATED, range=year_20xx)``
- Reports to the Money Laundering Reporting Office Switzerland (MROS)
+* Number of reports (simple suspicion) to MROS during 20xx (self-declaration 5.2)
- * Obligation to report (Art. 9 para. 1 AMLA) (numerical count)
- * Right to report (Art. 305ter para. 2 Swiss Criminal Code) (numerical count)
- * Total reports made to the Money Laundering Reporting Office Switzerland (MROS) and the VQF
+ * Implementation: ``evtcount(REPORTED_SUSPICION_SIMPLE, range=year_20xx)``
- AMLA Files for ongoing business relationships (according to Art. 7 lit. b SRO regulations)
+* Total number of reports to MROS during 20xx (self-declaration 5.3)
- * Number of AMLA files managed as of 01.01.20XX
- * AMLA files added between 01.01.20XX and 31.12.20XX
- * Number of AMLA files managed during the year 20XX
- * Relevant number for the annual AMLA file fee / annual invoice
- * AMLA files terminated between 01.01.20XX and 31.12.20XX
- * Number of AMLA files managed as of 31.12.20XX (calculated from 01.01.20XX)
+ * Implementation: ``evtcount(REPORTED_SUSPICION_SIMPLE, range=year_20xx) + evtcount(REPORTED_SUSPICION_SUBSTANTIATED, range=year_20xx)``
-FIXME: Define how we implement each of these!
Event Reporting (TOPS)
^^^^^^^^^^^^^^^^^^^^^^
@@ -1736,7 +1822,7 @@ The following event-based statistics are custom-defined by us and shown in the A
* Number of accounts that are opened:
- * Implementation: ``evtcount(INCR_ACCOUNT_OPEN) - evtcount(DECR_ACCOUNT_OPENED)``
+ * Implementation: ``evtcount(INCR_ACCOUNT_OPEN) - evtcount(DECR_ACCOUNT_OPEN)``
* Number of new GwG files in the last year.