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