exchange

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

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 ))