exchange

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

vqf_902_11.typ (6665B)


      1 // VQF 902.11 Establishing of the controlling person (K)
      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.11#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")[Establishing of the controlling person of operating legal entities and partnerships both not quoted on the stock exchange (K)])
     72 
     73   v(0.3em)
     74 
     75   text(size: 9pt, style: "italic")[
     76     (for operating legal entities and partnership that are contracting partner as well as analogously for operating legal entities and partnership that are beneficial owners)
     77   ]
     78 
     79   v(-1em)
     80   line(length:100%)
     81 
     82   v(1em)
     83 
     84   // Section 1: Contracting Partner
     85   text(size: 11pt, weight: "bold")[Contracting partner:]
     86 
     87   v(0.5em)
     88 
     89   table(
     90     columns: (1fr),
     91     stroke: 0.5pt + black,
     92     inset: 5pt,
     93     [#get("IDENTITY_CONTRACTING_PARTNER")]
     94   )
     95 
     96   v(1em)
     97 
     98   // Section 2: Declaration
     99   let control_reason = get("CONTROL_REASON")
    100 
    101   text()[The contracting partner hereby declares that (tick the appropriate box):]
    102 
    103   block(breakable: false)[
    104     #grid(
    105       columns: (auto, 1fr),
    106       gutter: 0.5em,
    107       row-gutter: 0.8em,
    108       checkbox(control_reason == "HAS_25_MORE_RIGHTS"),
    109       [the person(s) listed below is/are *holding 25% or more of the contracting partner's shares (capital shares or voting rights)*; or],
    110 
    111       checkbox(control_reason == "OTHER_WAY"),
    112       [if the capital shares or voting rights cannot be determined or in case there are no capital shares or voting rights 25% or more, the contracting partner hereby declares that the person(s) listed below *is/are controlling the contracting partner in other ways*; or],
    113 
    114       checkbox(control_reason == "DIRECTOR"),
    115       [in case this/these person(s) cannot be determined or this/these person(s) does/do not exist, the contracting partner hereby declares that the person(s) listed below is/are the *managing director(s)*]
    116     )
    117   ]
    118 
    119   v(1em)
    120 
    121   // Section 3: Controlling Persons
    122   let persons = get("IDENTITY_LIST", default: ())
    123   let has_persons = type(persons) == array and persons.len() > 0
    124 
    125   if has_persons {
    126     for person in persons {
    127       let get_person(key) = {
    128         person.at(key, default: "")
    129       }
    130 
    131       block(breakable: false)[
    132         #v(0.5em)
    133         #table(
    134           columns: (35%, 65%),
    135           stroke: 0.5pt + black,
    136           inset: 5pt,
    137           [Full name:], [#get_person("FULL_NAME")],
    138           [Actual address of domicile:], [#get_person("DOMICILE_ADDRESS")]
    139         )
    140         #v(0.5em)
    141       ]
    142     }
    143   } else {
    144     block(breakable: false)[
    145       #v(0.5em)
    146       #table(
    147         columns: (35%, 65%),
    148         stroke: 0.5pt + black,
    149         inset: 5pt,
    150         [Last name(s):], [],
    151         [First name(s):], [],
    152         [Actual address of domicile:], []
    153       )
    154       #v(0.5em)
    155     ]
    156   }
    157 
    158   v(1.5em)
    159 
    160   // Section 4: Fiduciary Holding
    161   text(size: 11pt, weight: "bold")[Fiduciary holding assets]
    162 
    163   v(0.5em)
    164 
    165   let third_party = get("THIRD_PARTY_OWNERSHIP")
    166 
    167   block(breakable: false)[
    168     #text()[Is a third person the beneficial owner of the assets held in the account/securities account?]
    169 
    170     #grid(
    171       columns: (auto, 1fr),
    172       gutter: 0.5em,
    173       row-gutter: 0.5em,
    174       checkbox(not third_party), [No.],
    175       checkbox(third_party), [Yes. $=>$ The relevant information regarding the beneficial owner has to be obtained by filling in a separate VQF doc. No. 902.9.]
    176     )
    177   ]
    178 
    179   v(0.5em)
    180 
    181   text()[The contracting partner hereby undertakes to automatically inform of any changes to the information contained herein.]
    182 
    183   v(0.5em)
    184 
    185   // Signature Section
    186   let submitted_by_officer = get("BY_AML_OFFICER")
    187 
    188   if submitted_by_officer == false {
    189     table(
    190       columns: (40%, 10%, 50%),
    191       stroke: 0.5pt + black,
    192       inset: 5pt,
    193       [Date:],
    194       [],
    195       [Signature(s):],
    196       [#get("SIGN_DATE")],
    197       [],
    198       [#get("SIGNATURE")]
    199     )
    200 
    201     v(1em)
    202 
    203     text(size: 9pt, style: "italic")[
    204       It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, documents forgery).
    205     ]
    206   } else if submitted_by_officer == true {
    207     text(weight: "bold")[Signed declaration by the customer]
    208 
    209     v(0.5em)
    210 
    211     text(size: 9pt)[This form was submitted by #get("AML_STAFF_NAME").]
    212 
    213     v(0.5em)
    214 
    215     text(size: 9pt)[The attachment contains the customer's signature on the beneficial owner declaration.]
    216 
    217     v(0.5em)
    218 
    219     table(
    220       columns: (1fr),
    221       stroke: 0.5pt + black,
    222       inset: 5pt,
    223       [Signed Document:],
    224       [#if get("ATTACHMENT_SIGNED_DOCUMENT") != "" [Document attached] else [No document]]
    225     )
    226   } else {
    227     text(weight: "bold")[Invalid submitter (#submitted_by_officer)]
    228   }
    229 }
    230 
    231 // Example usage:
    232 #form((
    233   "VQF_MEMBER_NUMBER": "12345",
    234   "FILE_NUMBER": "42",
    235   "IDENTITY_CONTRACTING_PARTNER": "Example Company AG\nBahnhofstrasse 1\n8001 Zurich\nSwitzerland",
    236   "CONTROL_REASON": "HAS_25_MORE_RIGHTS",
    237   "IDENTITY_LIST": (
    238     (
    239       "FULL_NAME": "Jane Smith",
    240       "DOMICILE_ADDRESS": "Teststrasse 456\n8001 Zurich"
    241     ),
    242   ),
    243   "THIRD_PARTY_OWNERSHIP": false,
    244   "BY_AML_OFFICER": false,
    245   "SIGNATURE": "Jane Smith",
    246   "SIGN_DATE": "10.11.2025",
    247 ))