vqf_902_9.typ (5201B)
1 // VQF 902.9 Declaration of identity of the beneficial owner (A) 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.9#linebreak() 18 Version of 1 December 2015 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 for checkbox 36 let checkbox(checked) = { 37 box( 38 width: 3mm, 39 height: 3mm, 40 stroke: 0.5pt + black, 41 inset: 0.3mm, 42 if checked == true or checked == "true" { 43 place(center + horizon, text(size: 8pt, sym.checkmark)) 44 } 45 ) 46 } 47 48 // Header 49 align(center, text(size: 11pt, weight: "bold")[CONFIDENTIAL]) 50 51 v(0.5em) 52 53 grid( 54 columns: (50%, 50%), 55 gutter: 1em, 56 image("vss_vqf_verein.png", width: 80%), 57 align(right)[ 58 #table( 59 columns: (1fr, 1fr), 60 stroke: 0.5pt + black, 61 inset: 5pt, 62 align: (left, left), 63 [VQF member no.], [AMLA File No.], 64 [#get("VQF_MEMBER_NUMBER")], [#get("FILE_NUMBER")] 65 ) 66 ] 67 ) 68 69 v(1em) 70 71 align(left, text(size: 14pt, weight: "bold")[Declaration of identity of the beneficial owner (A)]) 72 73 v(-1em) 74 line(length:100%) 75 76 v(1em) 77 78 // Section 1: Contracting Partner 79 text(size: 11pt, weight: "bold")[Contracting partner:] 80 81 v(0.5em) 82 83 table( 84 columns: (1fr), 85 stroke: 0.5pt + black, 86 inset: 5pt, 87 [#get("IDENTITY_CONTRACTING_PARTNER")] 88 ) 89 90 v(1em) 91 92 text()[The contracting partner hereby declares that the person(s) listed below is/are the beneficial owner(s) of the assets involved in the business relationship. If the contracting partner is also the sole beneficial owner of the assets, the contracting partner's detail must be set out below] 93 94 v(1em) 95 96 // Section 2: Beneficial Owners 97 let owners = get("IDENTITY_LIST", default: ()) 98 let has_owners = type(owners) == array and owners.len() > 0 99 100 if has_owners { 101 for owner in owners { 102 let get_owner(key) = { 103 owner.at(key, default: "") 104 } 105 106 block(breakable: false)[ 107 #v(0.5em) 108 #table( 109 columns: (35%, 65%), 110 stroke: 0.5pt + black, 111 inset: 5pt, 112 [Fullname:], [#get_owner("FULL_NAME")], 113 [Date of birth:], [#get_owner("DATE_OF_BIRTH")], 114 [Nationality:], [#get_owner("NATIONALITY")], 115 [Actual address of domicile:], [#get_owner("DOMICILE_ADDRESS")] 116 ) 117 #v(0.5em) 118 ] 119 } 120 } else { 121 block(breakable: false)[ 122 #v(0.5em) 123 #table( 124 columns: (35%, 65%), 125 stroke: 0.5pt + black, 126 inset: 5pt, 127 [Surname(s):], [], 128 [First name(s):], [], 129 [Date(s) of birth:], [], 130 [Nationality:], [], 131 [Actual address of domicile:], [] 132 ) 133 #v(0.5em) 134 ] 135 } 136 137 v(1em) 138 139 text()[The contracting partner hereby undertakes to inform automatically of any changes to the information contained herein.] 140 141 v(1.5em) 142 143 // Signature Section 144 let submitted_by_officer = get("BY_AML_OFFICER") 145 146 if submitted_by_officer == false { 147 table( 148 columns: (40%, 10%, 50%), 149 stroke: 0.5pt + black, 150 inset: 5pt, 151 [Date:], 152 [], 153 [Signature(s):], 154 [#get("SIGN_DATE")], 155 [], 156 [#get("SIGNATURE")] 157 ) 158 159 v(1em) 160 161 text(size: 9pt, style: "italic")[ 162 It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, document forgery) 163 ] 164 } else if submitted_by_officer == true { 165 text(weight: "bold")[Signed declaration by the customer] 166 167 v(0.5em) 168 169 text(size: 9pt)[This form was submitted by #get("AML_STAFF_NAME").] 170 171 v(0.5em) 172 173 text(size: 9pt)[The attachment contains the customer's signature on the beneficial owner declaration.] 174 175 v(0.5em) 176 177 table( 178 columns: (1fr), 179 stroke: 0.5pt + black, 180 inset: 5pt, 181 [Signed Document:], 182 [#if (get("ATTACHMENT_SIGNED_DOCUMENT") != ""){ 183 [Document attached] 184 } else { 185 [No document] 186 } 187 ] 188 ) 189 } else { 190 text(weight: "bold")[Invalid submitter (#submitted_by_officer)] 191 } 192 } 193 194 // Example usage: 195 #form(( 196 "VQF_MEMBER_NUMBER": "12345", 197 "FILE_NUMBER": "42", 198 "IDENTITY_CONTRACTING_PARTNER": "Example Company AG\nBahnhofstrasse 1\n8001 Zurich\nSwitzerland", 199 "IDENTITY_LIST": ( 200 ( 201 "FULL_NAME": "John Doe", 202 "DATE_OF_BIRTH": "01.01.1980", 203 "NATIONALITY": "CH", 204 "DOMICILE_ADDRESS": "Teststrasse 123\n8001 Zurich" 205 ), 206 ), 207 "BY_AML_OFFICER": false, 208 "SIGNATURE": "John Doe", 209 "SIGN_DATE": "10.11.2025", 210 ))