exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

vqf_902_14.typ (5810B)


      1 // VQF 902.14 Special Clarifications Template
      2 // Pass JSON data as content dictionary
      3 
      4 #let form(data) = {
      5   set page(
      6     paper: "a4",
      7     margin: (left: 2cm, right: 2cm, top: 2cm, bottom: 2.5cm),
      8     footer: context [
      9       #grid(
     10         columns: (1fr, 1fr),
     11         align: (left, right),
     12         text(size: 8pt)[
     13           VQF doc. Nr. 902.14#linebreak()
     14           Version of 1 December 2015
     15         ],
     16         text(size: 8pt)[
     17           Page #here().page() of #counter(page).final().first()
     18         ]
     19       )
     20     ]
     21   )
     22 
     23   set text(font: "Liberation Sans", size: 10pt)
     24   set par(justify: false, leading: 0.65em)
     25 
     26   // Helper function to get value or empty string
     27   let get(key, default: "") = {
     28     data.at(key, default: default)
     29   }
     30 
     31   // Helper function for checkbox
     32   let checkbox(checked) = {
     33     box(
     34       width: 3mm,
     35       height: 3mm,
     36       stroke: 0.5pt + black,
     37       inset: 0.3mm,
     38       if checked == true or checked == "true" {
     39         place(center + horizon, text(size: 8pt, sym.checkmark))
     40       }
     41     )
     42   }
     43 
     44   // Header
     45   align(center, text(size: 11pt, weight: "bold")[CONFIDENTIAL])
     46 
     47   v(0.5em)
     48 
     49   grid(
     50     columns: (50%, 50%),
     51     gutter: 1em,
     52     image("vss_vqf_verein.png", width: 80%),
     53     align(right)[
     54       #table(
     55         columns: (1fr, 1fr),
     56         stroke: 0.5pt + black,
     57         inset: 5pt,
     58         align: (left, left),
     59         [VQF member no.], [AMLA File No.],
     60         [#get("VQF_MEMBER_NUMBER")], [#get("FILE_NUMBER")]
     61       )
     62     ]
     63   )
     64 
     65   v(1em)
     66 
     67   align(left, text(size: 14pt, weight: "bold")[Special Clarifications])
     68 
     69   v(-1em)
     70   line(length:100%)
     71 
     72   grid(
     73     columns: (auto, 1fr),
     74     gutter: 0.5em,
     75     align: (left, left),
     76     image("pointing_finger.svg", height: 2em),
     77     text(size: 9pt)[
     78       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.
     79     ]
     80   )
     81 
     82   v(1em)
     83 
     84   text(weight: "bold")[Customer:#footnote[Pursuant Identification form (VQF doc. No. 902.1) numeral 1.]]
     85 
     86   v(0.3em)
     87 
     88   table(
     89     columns: (1fr),
     90     stroke: 0.5pt + black,
     91     inset: 5pt,
     92     [#get("CUSTOMER_NAME")]
     93   )
     94 
     95   v(0.5em)
     96 
     97   text(weight: "bold")[This form was completed by:]
     98 
     99   v(0.3em)
    100 
    101   table(
    102     columns: (1fr, 1fr),
    103     stroke: 0.5pt + black,
    104     inset: 5pt,
    105     align: (left, left),
    106     [Full name], [#get("AML_STAFF_NAME")],
    107     [Date], [#get("FILING_DATE")],
    108   )
    109 
    110   v(1.5em)
    111 
    112   // Section 1: Reason for Special Clarifications
    113   text(size: 11pt, weight: "bold")[1. Reason for special clarifications]
    114 
    115   v(0.5em)
    116 
    117   table(
    118     columns: (45%,55%),
    119     stroke: 0.5pt + black,
    120     inset: 5pt,
    121     [Description of the circumstances/transactions, which triggered the special clarifications],
    122     [#get("INCRISK_REASON")]
    123   )
    124 
    125   v(1.5em)
    126 
    127   // Section 2: Used Means of Clarification
    128   text(size: 11pt, weight: "bold")[2. Used means of clarification]
    129 
    130   v(0.5em)
    131 
    132   let means = get("INCRISK_MEANS")
    133 
    134   grid(
    135       columns: (auto),
    136       inset: 5pt,
    137       stroke: 0.5pt + black,
    138     [#block(breakable: false)[
    139     #grid(
    140       columns: (auto, 1fr),
    141       gutter: 0.5em,
    142       row-gutter: 0.5em,
    143       checkbox(means == "GATHERING"),
    144       [Gathering of information from the customer, beneficial owner of the assets, controlling person],
    145 
    146       checkbox(means == "CONSULTATION"),
    147       [Consultation of generally accessible sources and databases],
    148 
    149       checkbox(means == "ENQUIRIES"),
    150       [Enquiries with trustworthy persons (e.g. custodian bank)],
    151 
    152       checkbox(means == "OTHER"),
    153       [Other, which? #if means == "OTHER" [#get("INCRISK_MEANS_OTHER")]]
    154     )
    155   ]])
    156 
    157   v(1.5em)
    158 
    159   // Section 3: Supplemental Files
    160   text(size: 11pt, weight: "bold")[3. Summary and plausibility check of the gathered information]
    161 
    162   v(0.3em)
    163 
    164   grid(
    165     columns: (auto, 1fr),
    166     gutter: 0.5em,
    167     align: (left, left),
    168     image("pointing_finger.svg", height: 2em),
    169     text(size: 9pt)[
    170       The results of the clarifications have to be documented and their plausibility has to be checked.
    171     ]
    172   )
    173 
    174   v(1.5em)
    175 
    176   table(
    177     columns: (100%),
    178     stroke: 0.5pt + black,
    179     inset: 5pt,
    180     [#get("INCRISK_SUMMARY")]
    181   )
    182 
    183   v(1em)
    184 
    185   table(
    186     columns: (auto, 1fr),
    187     stroke: 0.5pt + black,
    188     inset: 5pt,
    189     [Gathered/Consulted documents],
    190     [#get("INCRISK_DOCUMENTS")]
    191   )
    192 
    193 
    194 
    195 
    196   // Section 4: Result
    197   text(size: 11pt, weight: "bold")[4. Result of the special clarification]
    198 
    199   v(0.5em)
    200 
    201   let result = get("INCRISK_RESULT")
    202 
    203   grid(
    204       columns: (auto),
    205       inset: 5pt,
    206       stroke: 0.5pt + black,
    207   block(breakable: false)[
    208     #grid(
    209       columns: (auto, 1fr),
    210       gutter: 0.5em,
    211       row-gutter: 0.8em,
    212 
    213       checkbox(result == "NO_SUSPICION"),
    214       [The plausibility of the circumstances could be checked, no reasonable suspicion pursuant to Art. 9 AMLA (possibly update of customer profile (VQF doc. No. 902.5) and/or risk profile (VQF doc. No. 902.4))],
    215 
    216       checkbox(result == "REASONABLE_SUSPICION"),
    217       [Reasonable suspicion pursuant to Art. 9 AMLA, duty to file a report with MROS],
    218 
    219       checkbox(result == "SIMPLE_SUSPICION"),
    220       [Simple suspicion pursuant to Art. 305#super[ter] Para. 2 StGB, right to notify MROS],
    221 
    222       checkbox(result == "OTHER"),
    223       [Other, what? #if result == "OTHER" [#get("INCRISK_RESULT_OTHER")]]
    224     )
    225   ])
    226 
    227 }
    228 
    229 // Example usage:
    230 #form((
    231   "VQF_MEMBER_NUMBER": "12345",
    232   "FILE_NUMBER": "42",
    233   "CUSTOMER_NAME": "John Doe",
    234   "FILED_BY_NAME": "Jane Smith",
    235   "FILING_DATE": "10.11.2025",
    236   "INCRISK_REASON": "Unusual transaction pattern detected",
    237   "INCRISK_MEANS": "GATHERING",
    238   "INCRISK_SUMMARY": "Customer provided satisfactory explanation",
    239   "INCRISK_DOCUMENTS": "Bank statements, invoices",
    240   "INCRISK_RESULT": "NO_SUSPICION",
    241 ))