vqf_902_1_customer.typ (13530B)
1 // VQF 902.1 Identification Form 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.1-customer#linebreak() 14 Version of 1 September 2021 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 to get value or false 32 let getb(key, default: false) = { 33 data.at(key, default: default) 34 } 35 36 // Helper function for checkbox 37 let checkbox(checked) = { 38 box( 39 width: 3mm, 40 height: 3mm, 41 stroke: 0.5pt + black, 42 inset: 0.3mm, 43 if checked == true or checked == "true" { 44 place(center + horizon, text(size: 8pt, sym.checkmark)) 45 } 46 ) 47 } 48 49 // Header 50 align(center, text(size: 11pt, weight: "bold")[CONFIDENTIAL]) 51 52 v(0.5em) 53 54 55 grid( 56 columns: (50%, 50%), 57 gutter: 1em, 58 image("vss_vqf_verein.png", width: 80%), 59 60 align(right)[ 61 #table( 62 columns: (1fr, 1fr), 63 stroke: 0.5pt + black, 64 inset: 5pt, 65 align: (left, left), 66 [VQF member no.], [AMLA File No.], 67 [#get("VQF_MEMBER_NUMBER")], [#get("FILE_NUMBER")] 68 ) 69 ] 70 ) 71 72 v(1em) 73 74 align(left, text(size: 14pt, weight: "bold")[Identification Form]) 75 76 v(-1em) 77 line(length:100%) 78 79 grid( 80 columns: (auto, 1fr), 81 gutter: 0.5em, 82 align: (left, left), 83 image("pointing_finger.svg", height: 2em), 84 text(size: 9pt)[ 85 The customer has to be identified on entering into a permanent business relationship or on concluding a cash transaction, which meets the according threshold. 86 ] 87 ) 88 89 v(1em) 90 91 text(weight: "bold")[This form was completed by:] 92 93 v(0.3em) 94 95 table( 96 columns: (1fr, 1fr), 97 stroke: 0.5pt + black, 98 inset: 5pt, 99 align: (left, left), 100 [Full name], [#get("SIGNATURE")], 101 [Date], [#get("FILING_DATE")], 102 ) 103 104 v(1.5em) 105 106 // Section 1: Information on customer 107 text(size: 11pt, weight: "bold")[1. Information on customer#footnote[The customer is the person with whom the member concludes the contract with regard to the financial service provided (civil law). Does the member act as director of a domiciliary company, this domiciliary company is the customer.]] 108 109 v(0.5em) 110 111 let is_natural = get("CUSTOMER_TYPE") == "NATURAL_PERSON" 112 let is_legal = get("CUSTOMER_TYPE") == "LEGAL_ENTITY" 113 114 // Section 1a: Natural Person 115 grid( 116 columns: (auto, 1fr), 117 gutter: 0.5em, 118 checkbox(is_natural), 119 [a) The customer is a #underline([natural]) person:] 120 ) 121 122 block(breakable: false)[ 123 #table( 124 columns: (35%, 65%), 125 stroke: 0.5pt + black, 126 inset: 5pt, 127 [Full name\*], if is_natural { get("FULL_NAME") } else { "" }, 128 [Residential address\*], if is_natural { get("DOMICILE_ADDRESS") } else { "" }, 129 [Telephone], if is_natural { get("CONTACT_PHONE") } else { "" }, 130 [E-mail], if is_natural { get("CONTACT_EMAIL") } else { "" }, 131 [Date of birth\*], if is_natural { get("DATE_OF_BIRTH") } else { "" }, 132 [Nationality\*], if is_natural { get("NATIONALITY") } else { "" }, 133 [Identification document\*], [#checkbox(is_natural) *Copy enclosed in appendix*], 134 ) 135 #v(-1em) 136 #text(size: 8pt)[*\* mandatory*] 137 ] 138 v(1em) 139 140 // Sole proprietorship section 141 text(weight: "bold")[For sole proprietorship (supplement to above):] 142 143 let is_sole = is_natural and (get("CUSTOMER_IS_SOLE_PROPRIETOR") == true or get("CUSTOMER_IS_SOLE_PROPRIETOR") == "true") 144 145 table( 146 columns: (35%, 65%), 147 stroke: 0.5pt + black, 148 inset: 5pt, 149 [Company name], if is_sole { get("COMPANY_NAME") } else { "" }, 150 [Registered office], if is_sole { get("REGISTERED_OFFICE_ADDRESS") } else { "" }, 151 [Company identification document], [#checkbox(is_sole) *Copy enclosed in appendix*], 152 ) 153 154 v(1em) 155 156 // Section 1b: Legal Entity 157 grid( 158 columns: (auto, 1fr), 159 gutter: 0.5em, 160 checkbox(is_legal), 161 [*b) The customer is a legal entity:*] 162 ) 163 164 block(breakable: false)[ 165 #table( 166 columns: (35%, 65%), 167 stroke: 0.5pt + black, 168 inset: 5pt, 169 [Company name\*], if is_legal { get("COMPANY_NAME") } else { "" }, 170 [Domicile\*], if is_legal { get("DOMICILE_ADDRESS") } else { "" }, 171 [Contact person], if is_legal { get("CONTACT_PERSON_NAME") } else { "" }, 172 [Telephone], if is_legal { get("CONTACT_PHONE") } else { "" }, 173 [E-mail], if is_legal { get("CONTACT_EMAIL") } else { "" }, 174 [Identification document\*\ (not older than 12 months)], [#checkbox(is_legal) *Copy enclosed in appendix*], 175 ) 176 177 #v(-1em) 178 #text(size: 8pt)[*\* mandatory*] 179 ] 180 v(0.5em) 181 182 // Section 2: Natural persons establishing business relationship 183 text(size: 11pt, weight: "bold")[2. Information on the natural persons who establish the business relationship for legal entities and partnerships] 184 185 v(0.5em) 186 187 grid( 188 columns: (auto, 1fr), 189 gutter: 0.5em, 190 align: (left, left), 191 image("pointing_finger.svg", height: 2em), 192 text(size: 9pt)[ 193 For legal entities and partnerships the identity of the natural persons who establish the business relationship must be verified. 194 ] 195 ) 196 197 v(1em) 198 199 let establishers = get("ESTABLISHER_LIST", default: ()) 200 let has_establishers = is_legal and type(establishers) == array and establishers.len() > 0 201 202 // Show at least 1 table for establishers to match VQF form 203 let num_cols = if has_establishers { calc.max(1, establishers.len()) } else { 1 } 204 205 for col_idx in range(num_cols) { 206 if col_idx > 0 { 207 h(2em) 208 } 209 } 210 211 // Create a table for each establisher 212 range(num_cols).map(col_idx => { 213 let establisher = if has_establishers and col_idx < establishers.len() { 214 establishers.at(col_idx) 215 } else { 216 (:) 217 } 218 219 let get_est(key) = { 220 if establisher != (:) { 221 establisher.at(key, default: "") 222 } else { 223 "" 224 } 225 } 226 227 block(breakable: false)[ 228 #table( 229 columns: (35%, 65%), 230 stroke: 0.5pt + black, 231 inset: 5pt, 232 [Full name\*], 233 [#get_est("FULL_NAME")], 234 [Residential address\*], 235 [#get_est("DOMICILE_ADDRESS")], 236 [Date of birth\*], 237 [#get_est("DATE_OF_BIRTH")], 238 [Nationality\*], 239 [#get_est("NATIONALITY")], 240 [Type of authorisation\ (signatory of representation)\*], 241 [#get_est("SIGNING_AUTHORITY_TYPE")], 242 [Identification document\*], 243 [#checkbox(establisher != (:)) *Copy enclosed in appendix*], 244 [*Power of attorney arrangements\**], 245 [#let evidence = get_est("SIGNING_AUTHORITY_EVIDENCE") 246 #grid( 247 columns: (auto, 1fr), 248 gutter: 0.5em, 249 row-gutter: 0.3em, 250 checkbox(evidence == "CR"), 251 [CR extract], 252 checkbox(evidence == "MANDATE"), 253 [Mandate], 254 checkbox(evidence == "OTHER"), 255 [Other: #get_est("SIGNING_AUTHORITY_EVIDENCE_OTHER")], 256 ) 257 ] 258 ) 259 #v(-1em) 260 #text(size: 8pt)[*\* mandatory*] 261 ] 262 }).join() 263 264 265 // Section 3: Acceptance of business relationship 266 text(size: 11pt, weight: "bold")[3. Acceptance of business relationship] 267 268 v(0.5em) 269 270 let lang = get("CORRESPONDENCE_LANGUAGE") 271 table( 272 columns: (35%, 65%), 273 stroke: 0.5pt + black, 274 inset: 5pt, 275 [Type of correspondence service], 276 [#grid( 277 columns: (auto), 278 gutter: 0.2em, 279 [#checkbox(true) to the customer], 280 [#checkbox(false) hold at bank], 281 [#checkbox(false) to the member], 282 [#checkbox(false) 283 to a third party (full name and address):], 284 )], 285 [Language], 286 [#grid( 287 columns: (auto), 288 gutter: 0.2em, 289 [#checkbox(lang == "de") German], 290 [#checkbox(lang == "en") English], 291 [#checkbox(lang == "fr") French], 292 [#checkbox(lang != "fr" and lang != "de" and lang != "en") 293 Other: #lang], 294 )], 295 ) 296 297 298 // Section 4: Beneficial owner 299 text(size: 11pt, weight: "bold")[4. Information on the beneficial owner of the assets and/or controlling person] 300 301 v(0.5em) 302 303 let customer_type_vqf = get("CUSTOMER_TYPE_VQF") 304 grid( 305 columns: (35%,65%), 306 stroke: 0.5pt + black, 307 inset: 5pt, 308 [Establishment of the beneficial owner of the assets and/or controlling person.], 309 [The customer is: 310 #grid( 311 columns: (1.1em, auto), 312 inset: 5pt, 313 [#checkbox(customer_type_vqf == "NATURAL_PERSON")], 314 [a natural person and there are no doubts that this person is the sole beneficial owner of the assets], 315 [#checkbox(customer_type_vqf == "OPERATIONAL")], 316 [an operational legal entity or partnership #h(1fr) 317 \ $=>$ VQF doc. No. 902.11 (K)], 318 [#checkbox(customer_type_vqf == "FOUNDATION")], 319 [a foundation (or a similar construct; incl. underlying companies) 320 \ $=>$ VQF doc. No. 902.12 (S)], 321 [#checkbox(customer_type_vqf == "TRUST")], 322 [a trust (incl. underlying companies) 323 \ $=>$ VQF doc. No. 902.13 (T)], 324 [#checkbox(customer_type_vqf == "LIFE_INSURANCE")], 325 [a life insurance policy with separately managed accounts/ securities accounts (so-called insurance wrappers) 326 \ $=>$ VQF doc. No. 902.15 (I)], 327 [#checkbox(customer_type_vqf == "OTHER")], 328 [all other cases 329 $=>$ VQF doc. No. 902.9 (A)], 330 )] 331 ) 332 333 v(2em) 334 335 // Section 5: Embargo/terrorism evaluation 336 text(size: 11pt, weight: "bold")[5. Evaluation with regard to embargo procedures/terrorism lists on establishing the business relationship] 337 338 v(0.5em) 339 340 table( 341 columns: (35%, 65%), 342 stroke: 0.5pt + black, 343 inset: 5pt, 344 [Verification whether the customer, beneficial owners of the assets, controlling persons, authorised representatives or other involved persons are listed on an embargo-/terrorism list (date of verification/result)#footnote[The evaluation must be made at the beginning of the business relationship and has to be repeated in the case of permanent business relationship every time the according lists are updated.]], 345 [Date: #get("EMBARGO_TERRORISM_CHECK_DATE") 346 \ Result: #get("EMBARGO_TERRORISM_CHECK_RESULT")], 347 ) 348 349 v(2em) 350 351 // Section 6: Cash transactions 352 text(size: 11pt, weight: "bold")[6. In the case of cash transactions/occasional customers: Information on type and purpose of business relationship] 353 354 v(0.5em) 355 356 grid( 357 columns: (auto, 1fr), 358 gutter: 0.5em, 359 align: (left, left), 360 image("pointing_finger.svg", height: 2em), 361 text(size: 9pt)[ 362 These details are only necessary for occasional customers, i.e. money exchange, money and asset transfer or other cash transactions provided that #underline([no]) customer profile (VQF doc. No. 902.5) is created 363 ] 364 ) 365 366 v(1em) 367 368 table( 369 columns: (35%, 65%), 370 stroke: 0.5pt + black, 371 inset: 5pt, 372 [Type of business relationship], 373 [#grid( 374 columns: (auto), 375 gutter: 0.2em, 376 [#checkbox(false) Money exchange], 377 [#checkbox(false) Money and asset transfer], 378 [#checkbox(false) Other cash transaction, specify?], 379 )], 380 [Purpose of the business relationship\ (purpose of service requested)], [], 381 ) 382 383 // Section 7: Enclosures 384 text(size: 11pt, weight: "bold")[7. Enclosures] 385 386 v(0.5em) 387 388 grid( 389 columns: (auto, 1fr), 390 stroke: 0.5pt + black, 391 inset: 5pt, 392 checkbox("" != get("CUSTOMER_ID_AMLA_FILE_REFERENCE_NO")), [Customer identification documents (or: reference#footnote[If the identification document is lists kept in another AMLA-File (in the case of Art. 15 para. 3 SRO Regulations) a reference to the according AMLA-File is sufficient.] to AMLA File No.: #underline([#get("CUSTOMER_ID_AMLA_FILE_REFERENCE_NO")]))], 393 checkbox("" != get("ESTABLISHER_ID_AMLA_FILE_REFERENCE_NO")), [Identification document of persons establishing the business relationship (or: reference to AMLA File No.: #underline([#get("ESTABLISHER_ID_AMLA_FILE_REFERENCE_NO")]))], 394 checkbox(getb("HAVE_vqf_902_9") or getb("HAVE_vqf_902_11_customer") or getb("HAVE_vqf_902_11_officer") or getb("HAVE_vqf_902_12") or getb("HAVE_vqf_902_13") or getb("HAVE_vqf_902_15")), [Establishing of the beneficial owner of the assets/controlling person (VQF Doc No. 902.15, 902.9, 902.11, 902.12 or 902.13)], 395 checkbox(getb("HAVE_vqf_902_5")), [Customer profile (VQF doc. No. 902.5; only in the case of permanent business relationship and regular customers)], 396 checkbox(getb("HAVE_vqf_902_4")), [Risk profile (VQF doc. No. 902.4)], 397 ) 398 399 v(1em) 400 401 text(size: 9pt, style: "italic")[⚠ *This form has to be updated when changes occur.*] 402 403 } 404 405 // Example usage: 406 #form(( 407 "VQF_MEMBER_NUMBER": "12345", 408 "FILE_NUMBER": "42", 409 "FILED_BY_NAME": "Manuela", 410 "FILING_DATE": "2000-4-1", 411 "CUSTOMER_TYPE": "NATURAL_PERSON", 412 "FULL_NAME": "John Doe", 413 "DOMICILE_ADDRESS": "123 Main St, 8001 Zurich", 414 "HAVE_vqf_902_9": false, 415 "HAVE_vqf_902_11": false, 416 "HAVE_vqf_902_12": false, 417 "HAVE_vqf_902_13": false, 418 "HAVE_vqf_902_15": true, 419 "HAVE_vqf_902_4": true, 420 "HAVE_vqf_902_5": true, 421 // ... other fields 422 ))