vqf_902_11.typ (5931B)
1 // VQF 902.11 Establishing of the controlling person (K) 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 #import "@taler-exchange/common:0.0.0": vqflogo, checkbox 8 9 #let form(data) = { 10 set page( 11 paper: "a4", 12 margin: (left: 2cm, right: 2cm, top: 2cm, bottom: 2.5cm), 13 footer: context [ 14 #grid( 15 columns: (1fr, 1fr), 16 align: (left, right), 17 text(size: 8pt)[ 18 VQF doc. Nr. 902.11#linebreak() 19 Version of 1 December 2015 20 ], 21 text(size: 8pt)[ 22 Page #here().page() of #counter(page).final().first() 23 ] 24 ) 25 ] 26 ) 27 28 set text(font: "Liberation Sans", size: 10pt) 29 set par(justify: false, leading: 0.65em) 30 31 // Helper function to get value or empty string 32 let get(key, default: "") = { 33 data.at(key, default: default) 34 } 35 36 // Header 37 align(center, text(size: 11pt, weight: "bold")[CONFIDENTIAL]) 38 39 v(0.5em) 40 41 grid( 42 columns: (50%, 50%), 43 gutter: 1em, 44 vqflogo(), 45 align(right)[ 46 #table( 47 columns: (1fr, 1fr), 48 stroke: 0.5pt + black, 49 inset: 5pt, 50 align: (left, left), 51 [VQF member no.], [AMLA File No.], 52 [#get("VQF_MEMBER_NUMBER")], [#get("FILE_NUMBER")] 53 ) 54 ] 55 ) 56 57 v(1em) 58 59 align(left, text(size: 14pt, weight: "bold")[Establishing of the controlling person of operating legal entities and partnerships both not quoted on the stock exchange (K)]) 60 61 v(0.3em) 62 63 text(size: 9pt, style: "italic")[ 64 (for operating legal entities and partnership that are contracting partner as well as analogously for operating legal entities and partnership that are beneficial owners) 65 ] 66 67 v(-1em) 68 line(length:100%) 69 70 v(1em) 71 72 // Section 1: Contracting Partner 73 text(size: 11pt, weight: "bold")[Contracting partner:] 74 75 v(0.5em) 76 77 table( 78 columns: (1fr), 79 stroke: 0.5pt + black, 80 inset: 5pt, 81 [#get("IDENTITY_CONTRACTING_PARTNER")] 82 ) 83 84 v(1em) 85 86 // Section 2: Declaration 87 let control_reason = get("CONTROL_REASON") 88 89 text()[The contracting partner hereby declares that (tick the appropriate box):] 90 91 block(breakable: false)[ 92 #grid( 93 columns: (auto, 1fr), 94 gutter: 0.5em, 95 row-gutter: 0.8em, 96 checkbox(control_reason == "HAS_25_MORE_RIGHTS"), 97 [the person(s) listed below is/are *holding 25% or more of the contracting partner's shares (capital shares or voting rights)*; or], 98 99 checkbox(control_reason == "OTHER_WAY"), 100 [if the capital shares or voting rights cannot be determined or in case there are no capital shares or voting rights 25% or more, the contracting partner hereby declares that the person(s) listed below *is/are controlling the contracting partner in other ways*; or], 101 102 checkbox(control_reason == "DIRECTOR"), 103 [in case this/these person(s) cannot be determined or this/these person(s) does/do not exist, the contracting partner hereby declares that the person(s) listed below is/are the *managing director(s)*] 104 ) 105 ] 106 107 v(1em) 108 109 // Section 3: Controlling Persons 110 let persons = get("IDENTITY_LIST", default: ()) 111 let has_persons = type(persons) == array and persons.len() > 0 112 113 if has_persons { 114 for person in persons { 115 let get_person(key) = { 116 person.at(key, default: "") 117 } 118 119 block(breakable: false)[ 120 #v(0.5em) 121 #table( 122 columns: (35%, 65%), 123 stroke: 0.5pt + black, 124 inset: 5pt, 125 [Full name:], [#get_person("FULL_NAME")], 126 [Actual address of domicile:], [#get_person("DOMICILE_ADDRESS")] 127 ) 128 #v(0.5em) 129 ] 130 } 131 } else { 132 block(breakable: false)[ 133 #v(0.5em) 134 #table( 135 columns: (35%, 65%), 136 stroke: 0.5pt + black, 137 inset: 5pt, 138 [Last name(s):], [], 139 [First name(s):], [], 140 [Actual address of domicile:], [] 141 ) 142 #v(0.5em) 143 ] 144 } 145 146 v(1.5em) 147 148 // Section 4: Fiduciary Holding 149 text(size: 11pt, weight: "bold")[Fiduciary holding assets] 150 151 v(0.5em) 152 153 let third_party = get("THIRD_PARTY_OWNERSHIP") 154 155 block(breakable: false)[ 156 #text()[Is a third person the beneficial owner of the assets held in the account/securities account?] 157 158 #grid( 159 columns: (auto, 1fr), 160 gutter: 0.5em, 161 row-gutter: 0.5em, 162 checkbox(not third_party), [No.], 163 checkbox(third_party), [Yes. $=>$ The relevant information regarding the beneficial owner has to be obtained by filling in a separate VQF doc. No. 902.9.] 164 ) 165 ] 166 167 v(0.5em) 168 169 text()[The contracting partner hereby undertakes to automatically inform of any changes to the information contained herein.] 170 171 v(0.5em) 172 173 // Signature Section 174 let submitted_by_officer = get("BY_AML_OFFICER") 175 176 if submitted_by_officer == false { 177 table( 178 columns: (40%, 10%, 50%), 179 stroke: 0.5pt + black, 180 inset: 5pt, 181 [Date:], 182 [], 183 [Signature(s):], 184 [#get("SIGN_DATE")], 185 [], 186 [#get("SIGNATURE")] 187 ) 188 189 v(1em) 190 191 text(size: 9pt, style: "italic")[ 192 It is a criminal offence to deliberately provide false information on this form (article 251 of the Swiss Criminal Code, documents forgery). 193 ] 194 } else if submitted_by_officer == true { 195 text(weight: "bold")[Signed declaration by the customer] 196 197 v(0.5em) 198 199 text(size: 9pt)[This form was submitted by #get("AML_STAFF_NAME").] 200 201 v(0.5em) 202 203 text(size: 9pt)[The attachment contains the customer's signature on the beneficial owner declaration.] 204 205 v(0.5em) 206 207 table( 208 columns: (1fr), 209 stroke: 0.5pt + black, 210 inset: 5pt, 211 [Signed Document:], 212 [#if get("ATTACHMENT_SIGNED_DOCUMENT") != "" [Document attached] else [No document]] 213 ) 214 } else { 215 text(weight: "bold")[Invalid submitter (#submitted_by_officer)] 216 } 217 }