exchange

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

vqf_902_1.typ (13730B)


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