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_customer.typ (6483B)


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