exchange

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

vqf_902_9.typ (5201B)


      1 // VQF 902.9 Declaration of identity of the beneficial owner (A)
      2 // Pass JSON data as content dictionary
      3 // NOTE: This is the original form. We don't use
      4 // it as this form was split in customer + officer parts.
      5 // Preserved here in case some auditor insists on us
      6 // combining the two!
      7 
      8 #let form(data) = {
      9   set page(
     10     paper: "a4",
     11     margin: (left: 2cm, right: 2cm, top: 2cm, bottom: 2.5cm),
     12     footer: context [
     13       #grid(
     14         columns: (1fr, 1fr),
     15         align: (left, right),
     16         text(size: 8pt)[
     17           VQF doc. Nr. 902.9#linebreak()
     18           Version of 1 December 2015
     19         ],
     20         text(size: 8pt)[
     21           Page #here().page() of #counter(page).final().first()
     22         ]
     23       )
     24     ]
     25   )
     26 
     27   set text(font: "Liberation Sans", size: 10pt)
     28   set par(justify: false, leading: 0.65em)
     29 
     30   // Helper function to get value or empty string
     31   let get(key, default: "") = {
     32     data.at(key, default: default)
     33   }
     34 
     35   // Helper function for checkbox
     36   let checkbox(checked) = {
     37     box(
     38       width: 3mm,
     39       height: 3mm,
     40       stroke: 0.5pt + black,
     41       inset: 0.3mm,
     42       if checked == true or checked == "true" {
     43         place(center + horizon, text(size: 8pt, sym.checkmark))
     44       }
     45     )
     46   }
     47 
     48   // Header
     49   align(center, text(size: 11pt, weight: "bold")[CONFIDENTIAL])
     50 
     51   v(0.5em)
     52 
     53   grid(
     54     columns: (50%, 50%),
     55     gutter: 1em,
     56     image("vss_vqf_verein.png", width: 80%),
     57     align(right)[
     58       #table(
     59         columns: (1fr, 1fr),
     60         stroke: 0.5pt + black,
     61         inset: 5pt,
     62         align: (left, left),
     63         [VQF member no.], [AMLA File No.],
     64         [#get("VQF_MEMBER_NUMBER")], [#get("FILE_NUMBER")]
     65       )
     66     ]
     67   )
     68 
     69   v(1em)
     70 
     71   align(left, text(size: 14pt, weight: "bold")[Declaration of identity of the beneficial owner (A)])
     72 
     73   v(-1em)
     74   line(length:100%)
     75 
     76   v(1em)
     77 
     78   // Section 1: Contracting Partner
     79   text(size: 11pt, weight: "bold")[Contracting partner:]
     80 
     81   v(0.5em)
     82 
     83   table(
     84     columns: (1fr),
     85     stroke: 0.5pt + black,
     86     inset: 5pt,
     87     [#get("IDENTITY_CONTRACTING_PARTNER")]
     88   )
     89 
     90   v(1em)
     91 
     92   text()[The contracting partner hereby declares that the person(s) listed below is/are the beneficial owner(s) of the assets involved in the business relationship. If the contracting partner is also the sole beneficial owner of the assets, the contracting partner's detail must be set out below]
     93 
     94   v(1em)
     95 
     96   // Section 2: Beneficial Owners
     97   let owners = get("IDENTITY_LIST", default: ())
     98   let has_owners = type(owners) == array and owners.len() > 0
     99 
    100   if has_owners {
    101     for owner in owners {
    102       let get_owner(key) = {
    103         owner.at(key, default: "")
    104       }
    105 
    106       block(breakable: false)[
    107         #v(0.5em)
    108         #table(
    109           columns: (35%, 65%),
    110           stroke: 0.5pt + black,
    111           inset: 5pt,
    112           [Fullname:], [#get_owner("FULL_NAME")],
    113           [Date of birth:], [#get_owner("DATE_OF_BIRTH")],
    114           [Nationality:], [#get_owner("NATIONALITY")],
    115           [Actual address of domicile:], [#get_owner("DOMICILE_ADDRESS")]
    116         )
    117         #v(0.5em)
    118       ]
    119     }
    120   } else {
    121     block(breakable: false)[
    122       #v(0.5em)
    123       #table(
    124         columns: (35%, 65%),
    125         stroke: 0.5pt + black,
    126         inset: 5pt,
    127         [Surname(s):], [],
    128         [First name(s):], [],
    129         [Date(s) of birth:], [],
    130         [Nationality:], [],
    131         [Actual address of domicile:], []
    132       )
    133       #v(0.5em)
    134     ]
    135   }
    136 
    137   v(1em)
    138 
    139   text()[The contracting partner hereby undertakes to inform automatically of any changes to the information contained herein.]
    140 
    141   v(1.5em)
    142 
    143   // Signature Section
    144   let submitted_by_officer = get("BY_AML_OFFICER")
    145 
    146   if submitted_by_officer == false {
    147     table(
    148       columns: (40%, 10%, 50%),
    149       stroke: 0.5pt + black,
    150       inset: 5pt,
    151       [Date:],
    152       [],
    153       [Signature(s):],
    154       [#get("SIGN_DATE")],
    155       [],
    156       [#get("SIGNATURE")]
    157     )
    158 
    159     v(1em)
    160 
    161     text(size: 9pt, style: "italic")[
    162       It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, document forgery)
    163     ]
    164   } else if submitted_by_officer == true {
    165     text(weight: "bold")[Signed declaration by the customer]
    166 
    167     v(0.5em)
    168 
    169     text(size: 9pt)[This form was submitted by #get("AML_STAFF_NAME").]
    170 
    171     v(0.5em)
    172 
    173     text(size: 9pt)[The attachment contains the customer's signature on the beneficial owner declaration.]
    174 
    175     v(0.5em)
    176 
    177     table(
    178       columns: (1fr),
    179       stroke: 0.5pt + black,
    180       inset: 5pt,
    181       [Signed Document:],
    182       [#if (get("ATTACHMENT_SIGNED_DOCUMENT") != ""){
    183         [Document attached]
    184        } else {
    185         [No document]
    186        }
    187       ]
    188     )
    189   } else {
    190     text(weight: "bold")[Invalid submitter (#submitted_by_officer)]
    191   }
    192 }
    193 
    194 // Example usage:
    195 #form((
    196   "VQF_MEMBER_NUMBER": "12345",
    197   "FILE_NUMBER": "42",
    198   "IDENTITY_CONTRACTING_PARTNER": "Example Company AG\nBahnhofstrasse 1\n8001 Zurich\nSwitzerland",
    199   "IDENTITY_LIST": (
    200     (
    201       "FULL_NAME": "John Doe",
    202       "DATE_OF_BIRTH": "01.01.1980",
    203       "NATIONALITY": "CH",
    204       "DOMICILE_ADDRESS": "Teststrasse 123\n8001 Zurich"
    205     ),
    206   ),
    207   "BY_AML_OFFICER": false,
    208   "SIGNATURE": "John Doe",
    209   "SIGN_DATE": "10.11.2025",
    210 ))