vqf_902_13.typ (13598B)
1 // VQF 902.13 Declaration for trusts (T) 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.13#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 let get(key, default: "") = { 27 data.at(key, default: default) 28 } 29 30 let checkbox(checked) = { 31 box( 32 width: 3mm, 33 height: 3mm, 34 stroke: 0.5pt + black, 35 inset: 0.3mm, 36 if checked == true or checked == "true" { 37 place(center + horizon, text(size: 8pt, sym.checkmark)) 38 } 39 ) 40 } 41 42 // Header 43 align(center, text(size: 11pt, weight: "bold")[CONFIDENTIAL]) 44 45 v(0.5em) 46 47 grid( 48 columns: (50%, 50%), 49 gutter: 1em, 50 image("vss_vqf_verein.png", width: 80%), 51 align(right)[ 52 #table( 53 columns: (1fr, 1fr), 54 stroke: 0.5pt + black, 55 inset: 5pt, 56 align: (left, left), 57 [VQF member no.], [AMLA File No.], 58 [#get("VQF_MEMBER_NUMBER")], [#get("FILE_NUMBER")] 59 ) 60 ] 61 ) 62 63 v(1em) 64 65 align(left, text(size: 14pt, weight: "bold")[Declaration for trusts (T)]) 66 67 v(-1em) 68 line(length:100%) 69 70 v(1em) 71 72 text(weight: "bold")[Contracting partner:] 73 74 v(0.5em) 75 76 table( 77 columns: (1fr), 78 stroke: 0.5pt + black, 79 inset: 5pt, 80 [#get("IDENTITY_CONTRACTING_PARTNER")] 81 ) 82 83 v(1em) 84 85 text()[The undersigned hereby declare(s) that as trustee or a member of highest supervisory body of an underlying company of a trust known as:] 86 87 v(0.5em) 88 89 table( 90 columns: (1fr), 91 stroke: 0.5pt + black, 92 inset: 5pt, 93 [#get("ENTITY_NAME")] 94 ) 95 96 v(1em) 97 98 text()[and, such capacity, provide(s) to best of his/her/their knowledge the following information:] 99 100 v(1.5em) 101 102 // Section 1: Trust Information 103 [= 1. Name and information pertaining to the trust (tick the two boxes applicable):] 104 105 v(0.5em) 106 107 let entity_type = get("ENTITY_TYPE") 108 let entity_revoc = get("ENTITY_REVOCABILITY") 109 110 block(breakable: false)[ 111 #grid( 112 columns: (auto, 1fr, auto, 1fr), 113 gutter: 1em, 114 row-gutter: 0.8em, 115 [Type of trust:], 116 [#checkbox(entity_type == "DISCRETIONARY") Discretionary trust], 117 [or], 118 [#checkbox(entity_type == "NON_DISCRETIONARY") Non-discretionary trust], 119 [and], [], [], [], 120 [Revocability:], 121 [#checkbox(entity_revoc == "REVOCABLE") Revocable trust], 122 [or], 123 [#checkbox(entity_revoc == "IRREVOCABLE") Irrevocable trust], 124 ) 125 ] 126 127 v(1.5em) 128 129 // Section 2: Settlor Information 130 [= 2. Information pertaining to the (ultimate economic, not fiduciary) settlor of the trust (individual(s) or entity/-ies):] 131 132 v(0.5em) 133 134 let settlors = get("FOUNDER_LIST", default: ()) 135 let has_settlors = type(settlors) == array and settlors.len() > 0 136 137 for settlor in (if has_settlors {settlors} else {((:),)}) { 138 let get_settlor(key) = { 139 if settlor != (:) { 140 settlor.at(key, default: "") 141 } else { 142 "" 143 } 144 } 145 146 block(breakable: false)[ 147 #table( 148 columns: (35%, 65%), 149 stroke: 0.5pt + black, 150 inset: 5pt, 151 [Full name/entity:], [#get_settlor("PERSON_ENTITY_NAME")], 152 [Actual address of domicile/registered office:], [#get_settlor("PERSON_DOMICILE_REGISTERED_OFFICE")], 153 [Country:], [#get_settlor("PERSON_COUNTRY")], 154 [Date of birth:], [#get_settlor("PERSON_DATE_OF_BIRTH")], 155 [Nationality:], [#get_settlor("PERSON_NATIONALITY")], 156 [Date of death (if deceased):], [#get_settlor("PERSON_DATE_OF_DEATH")] 157 ) 158 ] 159 let settlor_revoc = get_settlor("FOUNDER_HAS_REVOCATION_RIGHT") 160 table( 161 columns: (80%, 20%), 162 stroke: 0.5pt + black, 163 inset: 5pt, 164 [In case of a revocable trust: 165 \ Does the settlor have the right to revoke the trust?], 166 [#grid( 167 columns: (auto, auto), 168 stroke: 0.5pt + black, 169 inset: 5pt, 170 [#checkbox((entity_revoc == "REVOCABLE") and settlor_revoc) Yes], 171 [#checkbox((entity_revoc == "REVOCABLE") and not settlor_revoc) No], 172 )] 173 ) 174 v(0.5em) 175 176 } 177 178 179 v(1.5em) 180 181 // Section 3: Pre-existing Trust 182 [= 3. If the trust results from a restructuring of a pre-existing trust (re-settlement) or a merger of pre-existing trusts, the following information pertaining to the (actual) settlor of the pre-existing trust(s) has to be given:] 183 184 v(0.5em) 185 186 let has_pred = get("HAS_PREDECESSOR_ENTITY") 187 let pred_settlors = get("PREDECESSOR_FOUNDER_LIST", default: ()) 188 let has_pred_settlors = has_pred and type(pred_settlors) == array and pred_settlors.len() > 0 189 190 if has_pred_settlors { 191 for pred in pred_settlors { 192 let get_pred(key) = { 193 pred.at(key, default: "") 194 } 195 196 block(breakable: false)[ 197 #table( 198 columns: (35%, 65%), 199 stroke: 0.5pt + black, 200 inset: 5pt, 201 [Full name/entity:], [#get_pred("PERSON_ENTITY_NAME")], 202 [Actual address of domicile/registered office:], [#get_pred("PERSON_DOMICILE_REGISTERED_OFFICE")], 203 [Country:], [#get_pred("PERSON_COUNTRY")], 204 [Date of birth:], [#get_pred("PERSON_DATE_OF_BIRTH")], 205 [Nationality:], [#get_pred("PERSON_NATIONALITY")], 206 [Date of death (if deceased):], [#get_pred("PERSON_DATE_OF_DEATH")] 207 ) 208 ] 209 v(0.5em) 210 } 211 } else { 212 table( 213 columns: (35%, 65%), 214 stroke: 0.5pt + black, 215 inset: 5pt, 216 [Full name/entity:], [], 217 [Actual address of domicile/registered office:], [], 218 [Country:], [], 219 [Date of birth:], [], 220 [Nationality:], [], 221 [Date of death (if deceased):], [] 222 ) 223 } 224 225 // Section 4: Beneficiary Information 226 [= 4. Information] 227 228 v(0.5em) 229 230 [== a) pertaining to the beneficiary/-ies at the time of the signing of this form:] 231 232 v(0.5em) 233 234 let beneficiaries = get("BENEFICIARY_LIST", default: ()) 235 let has_benef = type(beneficiaries) == array and beneficiaries.len() > 0 236 237 if has_benef { 238 for benef in beneficiaries { 239 let get_benef(key) = { 240 benef.at(key, default: "") 241 } 242 let has_claim = get_benef("BENEFICIARY_HAS_CLAIM_RIGHT") 243 244 block(breakable: false)[ 245 #table( 246 columns: (35%, 65%), 247 stroke: 0.5pt + black, 248 inset: 5pt, 249 [Full name/entity:], [#get_benef("PERSON_ENTITY_NAME")], 250 [Actual address of domicile/registered office:], [#get_benef("PERSON_DOMICILE_REGISTERED_OFFICE")], 251 [Country:], [#get_benef("PERSON_COUNTRY")], 252 [Date of birth:], [#get_benef("PERSON_DATE_OF_BIRTH")], 253 [Nationality:], [#get_benef("PERSON_NATIONALITY")] 254 ) 255 #table( 256 columns: (80%, 20%), 257 stroke: 0.5pt + black, 258 inset: 5pt, 259 [Has the beneficiary an actual right to claim a distribution?], 260 [#grid( 261 columns: (auto, auto), 262 stroke: 0.5pt + black, 263 inset: 5pt, 264 [#checkbox(has_claim) Yes], 265 [#checkbox(not has_claim) No], 266 )] 267 ) 268 ] 269 v(0.5em) 270 } 271 } else { 272 table( 273 columns: (35%, 65%), 274 stroke: 0.5pt + black, 275 inset: 5pt, 276 [Full name/entity:], [], 277 [Actual address of domicile/registered office:], [], 278 [Country:], [], 279 [Date of birth:], [], 280 [Nationality:], [] 281 ) 282 table( 283 columns: (80%, 20%), 284 stroke: 0.5pt + black, 285 inset: 5pt, 286 [Has the beneficiary an actual right to claim a distribution?], 287 [#grid( 288 columns: (auto, auto), 289 stroke: 0.5pt + black, 290 inset: 5pt, 291 [#checkbox(false) Yes], 292 [#checkbox(false) No], 293 )] 294 ) 295 } 296 297 v(1em) 298 299 [== b) and in addition to certain beneficiaries or if no beneficiary/-ies has/have been determined, pertaining to (a) group(s) of beneficiaries (e.g. descendants of the settlor) known at the time of the signing of this form:] 300 301 v(0.5em) 302 303 table( 304 columns: (1fr), 305 stroke: 0.5pt + black, 306 inset: 5pt, 307 [#get("BENEFICIARY_GROUP_DESCRIPTION")] 308 ) 309 310 v(1.5em) 311 312 // Section 5: Protectors and Other Persons 313 [= 5. Information pertaining to the protector(s) as well as (a) further person(s) having the right to revoke the trust (in case of revocable trusts) or to appoint the trustee of a trust:] 314 315 v(0.5em) 316 317 [== a) Information pertaining to the protector(s)] 318 319 v(0.5em) 320 321 let protectors = get("PROTECTOR_LIST", default: ()) 322 let has_prot = type(protectors) == array and protectors.len() > 0 323 324 if has_prot { 325 for prot in protectors { 326 let get_prot(key) = { 327 prot.at(key, default: "") 328 } 329 330 let prot_revoc = get_prot("PROTECTOR_HAS_REVOCATION_RIGHT") 331 block(breakable: false)[ 332 #table( 333 columns: (35%, 65%), 334 stroke: 0.5pt + black, 335 inset: 5pt, 336 [Full name)/entity:], [#get_prot("PERSON_ENTITY_NAME")], 337 [Actual address of domicile/registered office:], [#get_prot("PERSON_DOMICILE_REGISTERED_OFFICE")], 338 [Country:], [#get_prot("PERSON_COUNTRY")], 339 [Date of birth:], [#get_prot("PERSON_DATE_OF_BIRTH")], 340 [Nationality:], [#get_prot("PERSON_NATIONALITY")] 341 ) 342 #table( 343 columns: (80%, 20%), 344 stroke: 0.5pt + black, 345 inset: 5pt, 346 [In case of a revocable trust: 347 \ Does the protector have the right to revoke the trust?], 348 [#grid( 349 columns: (auto, auto), 350 stroke: 0.5pt + black, 351 inset: 5pt, 352 [#checkbox(prot_revoc) Yes], 353 [#checkbox(not prot_revoc) No], 354 )] 355 ) 356 ] 357 v(0.5em) 358 } 359 } else { 360 block(breakable: false)[ 361 #table( 362 columns: (35%, 65%), 363 stroke: 0.5pt + black, 364 inset: 5pt, 365 [Full name/entity:], [], 366 [Actual address of domicile/registered office:], [], 367 [Country:], [], 368 [Date of birth:], [], 369 [Nationality:], [] 370 ) 371 #table( 372 columns: (80%, 20%), 373 stroke: 0.5pt + black, 374 inset: 5pt, 375 [In case of a revocable trust: 376 \ Does the protector have the right to revoke the trust?], 377 [#grid( 378 columns: (auto, auto), 379 stroke: 0.5pt + black, 380 inset: 5pt, 381 [#checkbox(false) Yes], 382 [#checkbox(false) No], 383 )] 384 )] 385 } 386 387 v(0.5em) 388 389 v(1em) 390 391 [== b) Information pertaining to (a) further person(s)] 392 393 v(0.5em) 394 395 let others = get("OTHER_PERSON_LIST", default: ()) 396 let has_others = type(others) == array and others.len() > 0 397 398 if has_others { 399 for other in others { 400 let get_other(key) = { 401 other.at(key, default: "") 402 } 403 404 block(breakable: false)[ 405 #table( 406 columns: (35%, 65%), 407 stroke: 0.5pt + black, 408 inset: 5pt, 409 [Last name(s), first name(s)/entity:], [#get_other("PERSON_ENTITY_NAME")], 410 [Actual address of domicile/registered office:], [#get_other("PERSON_DOMICILE_REGISTERED_OFFICE")], 411 [Country:], [#get_other("PERSON_COUNTRY")], 412 [Date(s) of birth:], [#get_other("PERSON_DATE_OF_BIRTH")], 413 [Nationality:], [#get_other("PERSON_NATIONALITY")] 414 ) 415 ] 416 v(0.5em) 417 } 418 } else { 419 table( 420 columns: (35%, 65%), 421 stroke: 0.5pt + black, 422 inset: 5pt, 423 [Last name(s), first name(s)/entity:], [], 424 [Actual address of domicile/registered office:], [], 425 [Country:], [], 426 [Date(s) of birth:], [], 427 [Nationality:], [] 428 ) 429 } 430 431 v(0.5em) 432 433 let other_revoc = get("OTHER_PERSON_HAS_REVOCATION_RIGHT") 434 if entity_revoc == "REVOCABLE" [ 435 #table( 436 columns: (80%, 20%), 437 stroke: 0.5pt + black, 438 inset: 5pt, 439 [In case of a revocable trust: Has/have this/these further person(s) the right to revoke the trust?], 440 [#grid( 441 columns: (auto, 1fr), 442 gutter: 0.5em, 443 checkbox(other_revoc), [Yes], 444 checkbox(not other_revoc), [No], 445 )] 446 ) 447 ] 448 449 v(1.5em) 450 451 text()[The contracting partner(s) hereby declare(s) to be entitled to open a business relationship for the trust above or its underlying company.] 452 453 v(0.5em) 454 455 text()[The contracting partner(s) hereby undertake(s) to automatically inform of any changes to the information contained herein.] 456 457 v(1.5em) 458 459 // Signature 460 table( 461 columns: (1fr, 1fr), 462 stroke: 0.5pt + black, 463 inset: 5pt, 464 [Date:], [Signature(s):], 465 [#get("SIGN_DATE")], [#get("SIGNATURE")] 466 ) 467 468 v(1em) 469 470 text(size: 9pt, style: "italic")[ 471 It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, document forgery). 472 ] 473 } 474 475 // Example usage: 476 #form(( 477 "VQF_MEMBER_NUMBER": "12345", 478 "FILE_NUMBER": "42", 479 "IDENTITY_CONTRACTING_PARTNER": "Trustee Company AG\nExample Street 1\n8001 Zurich", 480 "ENTITY_NAME": "Example Trust", 481 "ENTITY_TYPE": "DISCRETIONARY", 482 "ENTITY_REVOCABILITY": "IRREVOCABLE", 483 "FOUNDER_LIST": ( 484 ( 485 "PERSON_ENTITY_NAME": "Jane Smith", 486 "PERSON_DOMICILE_REGISTERED_OFFICE": "Main St 123\n8001 Zurich", 487 "PERSON_COUNTRY": "CH", 488 "PERSON_DATE_OF_BIRTH": "01.01.1955", 489 "PERSON_NATIONALITY": "CH", 490 ), 491 ), 492 "HAS_PREDECESSOR_ENTITY": false, 493 "SIGNATURE": "Trustee", 494 "SIGN_DATE": "10.11.2025", 495 ))