kyc-rules.conf (15356B)
1 [exchange] 2 3 # Extra data to inject into PDF forms 4 GLOBAL_PDF_FORM_DATA = {"VQF_MEMBER_NUMBER":"101148"} 5 6 # Better enable KYC. 7 ENABLE_KYC = YES 8 9 # Hard limits 10 [kyc-rule-withdraw-limit-monthly] 11 OPERATION_TYPE = WITHDRAW 12 NEXT_MEASURES = verboten 13 EXPOSED = YES 14 ENABLED = YES 15 THRESHOLD = CHF:2500 16 TIMEFRAME = "30 days" 17 18 [kyc-rule-withdraw-limit-annually] 19 OPERATION_TYPE = WITHDRAW 20 NEXT_MEASURES = verboten 21 EXPOSED = YES 22 ENABLED = YES 23 THRESHOLD = CHF:15000 24 TIMEFRAME = "365 days" 25 26 # Limit on merchant transactions 27 [kyc-rule-transaction-limit] 28 OPERATION_TYPE = TRANSACTION 29 NEXT_MEASURES = verboten 30 EXPOSED = YES 31 ENABLED = YES 32 THRESHOLD = CHF:1000 33 TIMEFRAME = "1 days" 34 35 [kyc-rule-balance-limit] 36 OPERATION_TYPE = BALANCE 37 NEXT_MEASURES = verboten 38 EXPOSED = YES 39 # Note: Disabled, kept in case we ever want to impose a limit on wallet balances. 40 ENABLED = NO 41 THRESHOLD = CHF:1000 42 TIMEFRAME = "1 days" 43 44 # SMS identification limit on withdraw (voluntary rule) 45 [kyc-rule-withdraw-limit-low] 46 OPERATION_TYPE = WITHDRAW 47 NEXT_MEASURES = sms-registration 48 EXPOSED = YES 49 ENABLED = YES 50 THRESHOLD = CHF:200 51 TIMEFRAME = "30 days" 52 53 # Deposit requires ToS acceptance, this way we ensure bank account is confirmed! 54 [kyc-rule-deposit-limit-zero] 55 OPERATION_TYPE = DEPOSIT 56 NEXT_MEASURES = accept-tos 57 EXPOSED = YES 58 ENABLED = YES 59 THRESHOLD = CHF:0 60 TIMEFRAME = "1 days" 61 62 # Aggregation limits 63 [kyc-rule-deposit-limit-monthly] 64 OPERATION_TYPE = AGGREGATE 65 NEXT_MEASURES = kyx 66 EXPOSED = YES 67 ENABLED = YES 68 THRESHOLD = CHF:2500 69 TIMEFRAME = "30 days" 70 71 [kyc-rule-deposit-limit-annually] 72 OPERATION_TYPE = AGGREGATE 73 NEXT_MEASURES = kyx 74 EXPOSED = YES 75 ENABLED = YES 76 THRESHOLD = CHF:15000 77 TIMEFRAME = "365 days" 78 79 # P2P limits 80 [kyc-rule-p2p-limit-monthly] 81 OPERATION_TYPE = MERGE 82 NEXT_MEASURES = verboten 83 EXPOSED = YES 84 ENABLED = YES 85 THRESHOLD = CHF:2500 86 TIMEFRAME = "30 days" 87 88 [kyc-rule-p2p-limit-annually] 89 OPERATION_TYPE = MERGE 90 NEXT_MEASURES = verboten 91 EXPOSED = YES 92 ENABLED = YES 93 THRESHOLD = CHF:15000 94 TIMEFRAME = "365 days" 95 96 [kyc-rule-p2p-domestic-identification-requirement] 97 OPERATION_TYPE = MERGE 98 NEXT_MEASURES = sms-registration postal-registration 99 IS_AND_COMBINATOR = NO 100 EXPOSED = YES 101 ENABLED = YES 102 THRESHOLD = CHF:0 103 TIMEFRAME = "30 days" 104 105 # #################### KYC measures ####################### 106 107 # Fallback measure on errors. 108 [kyc-measure-freeze-investigate] 109 CHECK_NAME = skip 110 PROGRAM = freeze-investigate 111 VOLUNTARY = NO 112 CONTEXT = {} 113 114 [kyc-measure-inform-investigate] 115 CHECK_NAME = form-info-investigation 116 # It's an INFO, so the program will never run, but we still 117 # must specify one. Maybe make PROGRAM not required for 118 # INFO-checks? #9874 was implemented 119 # => remove the next line once we are deploying an exchange with this fix! 120 PROGRAM = preserve-investigate 121 VOLUNTARY = YES 122 CONTEXT = {} 123 124 [kyc-measure-inform-internal-error] 125 CHECK_NAME = form-info-internal-error 126 # It's an INFO, so the program will never run, but we still 127 # must specify one. Maybe make PROGRAM not required for 128 # INFO-checks? #9874 was implemented 129 # => remove the next line once we are deploying an exchange with this fix! 130 PROGRAM = preserve-investigate 131 VOLUNTARY = YES 132 CONTEXT = {} 133 134 [kyc-measure-sms-registration] 135 CHECK_NAME = sms-registration 136 PROGRAM = tops-sms-check 137 VOLUNTARY = YES 138 CONTEXT = {} 139 140 [kyc-measure-postal-registration] 141 CHECK_NAME = postal-registration 142 PROGRAM = tops-postal-check 143 VOLUNTARY = YES 144 CONTEXT = {} 145 146 [kyc-measure-accept-tos] 147 CHECK_NAME = form-accept-tos 148 PROGRAM = check-tos 149 CONTEXT = {"tos_url":"{{ EXCHANGE_BASE_URL }}terms","provider_name":"Taler Operations AG", "successor_measure":"accept-tos", "validity_years":10} 150 VOLUNTARY = NO 151 152 [kyc-measure-kyx] 153 CHECK_NAME = form-vqf-902.1 154 PROGRAM = tops-kyx-check 155 VOLUNTARY = NO 156 CONTEXT = {} 157 158 # Form triggered via tops-check-controlling-entity after vqf-902.11 159 [kyc-measure-form-vqf-902.9] 160 CHECK_NAME = form-vqf-902.9 161 PROGRAM = preserve-investigate 162 VOLUNTARY = NO 163 CONTEXT = {} 164 165 [kyc-measure-form-vqf-902.11] 166 CHECK_NAME = form-vqf-902.11 167 PROGRAM = tops-check-controlling-entity 168 VOLUNTARY = NO 169 CONTEXT = {} 170 171 # FIXME: #9825 172 #[kyc-measure-form-vqf-902.12] 173 #CHECK_NAME = form-vqf-902.12 174 #PROGRAM = preserve-investigate 175 #VOLUNTARY = NO 176 #CONTEXT = {} 177 178 # FIXME: #9827 179 #[kyc-measure-form-vqf-902.13] 180 #CHECK_NAME = form-vqf-902.13 181 #PROGRAM = preserve-investigate 182 #VOLUNTARY = NO 183 #CONTEXT = {} 184 185 # FIXME: #9826 186 #[kyc-measure-form-vqf-902.15] 187 #CHECK_NAME = form-vqf-902.15 188 #PROGRAM = preserve-investigate 189 #VOLUNTARY = NO 190 #CONTEXT = {} 191 192 # ##################### KYC checks ########################### 193 194 [kyc-check-form-info-internal-error] 195 TYPE = INFO 196 DESCRIPTION = "We encountered an internal error. Staff has been notified. Please be patient." 197 DESCRIPTION_I18N = {"de":"Interner Fehler. Mitarbeiter wurden informiert. Bitte warten."} 198 FALLBACK = default-investigate 199 200 [kyc-check-form-info-investigation] 201 TYPE = INFO 202 DESCRIPTION = "Staff is checking your case. Please be patient." 203 DESCRIPTION_I18N = {"de":"Mitarbeiter prüfen ihren Fall. Bitte warten."} 204 FALLBACK = default-investigate 205 206 [kyc-check-sms-registration] 207 TYPE = LINK 208 PROVIDER_ID = sms-challenger 209 DESCRIPTION = "Confirm Swiss mobile phone number via SMS TAN" 210 DESCRIPTION_I18N = {"de":"Schweizer Mobiltelefonnummer via SMS TAN bestätigen"} 211 OUTPUTS = "CONTACT_PHONE" 212 FALLBACK = default-investigate 213 214 [kyc-check-email-registration] 215 TYPE = LINK 216 PROVIDER_ID = email-challenger 217 DESCRIPTION = "Confirm email address via TAN" 218 DESCRIPTION_I18N = {"de":"Email addresse via TAN bestätigen"} 219 OUTPUTS = "CONTACT_EMAIL" 220 FALLBACK = default-investigate 221 222 [kyc-check-postal-registration] 223 TYPE = LINK 224 PROVIDER_ID = postal-challenger 225 DESCRIPTION = "Register Swiss postal address via TAN letter" 226 DESCRIPTION_I18N = {"de":"Schweizer Addresse via TAN Brief bestätigen"} 227 OUTPUTS = "CONTACT_NAME ADDRESS_LINES ADDRESS_COUNTRY" 228 FALLBACK = default-investigate 229 230 # This check can be triggered by AML programs and/or AML officers, 231 # it do not appear directly in this configuration as it is triggered 232 # only indirectly. 233 [kyc-check-kycaid-individual] 234 TYPE = LINK 235 PROVIDER_ID = kycaid-individual 236 DESCRIPTION = "Provider personal identification data via KYCAID provider" 237 DESCRIPTION_I18N = {"de":"Persönliche Identifikation via KYCAID Service druchführen"} 238 OUTPUTS = "PERSON_FULL_NAME PERSON_DATE_OF_BIRTH PERSON_NATIONALITY_CC ADDRESS_STREET ADDRESS_TOWN_LOCATION ADDRESS_ZIPCODE ADDRESS_COUNTRY_CC PERSON_NATIONAL_ID_SCAN TAX_ID" 239 FALLBACK = default-investigate 240 241 # This check can be triggered by AML programs and/or AML officers, 242 # it do not appear directly in this configuration as it is triggered 243 # only indirectly. 244 [kyc-check-kycaid-business] 245 TYPE = LINK 246 PROVIDER_ID = kycaid-business 247 DESCRIPTION = "Provide business identification via KYCAID provider" 248 DESCRIPTION_I18N = {"de":"Geschäftsidentifikation via KYCAID durchführen"} 249 # FIXME: correct output labels? FIXME: questionable we can get those from KYCAID... 250 # FIXME: lower case names are missing in GANA 251 OUTPUTS = "BUSINESS_NAME ADDRESS_STREET ADDRESS_TOWN_LOCATION ADDRESS_ZIPCODE ADDRESS_COUNTRY_CC company_identification_document power_of_atorney_document BUSINESS_REGISTRATION_ID business_registration_document registration_authority_name tops_controlling_owner_identifications" 252 FALLBACK = default-investigate 253 254 # FIXME: consider moving these into the exchange default config! 255 [kyc-check-form-accept-tos] 256 TYPE = FORM 257 FORM_NAME = accept-tos 258 DESCRIPTION = "Accept Taler Operations terms of service" 259 DESCRIPTION_I18N = {"de":"Geschäftsbedingungen akzeptieren"} 260 # This form field must be set to the etag (!) of the accepted /terms! 261 OUTPUTS = ACCEPTED_TERMS_OF_SERVICE 262 FALLBACK = preserve-investigate 263 264 [kyc-check-form-vqf-902.1] 265 TYPE = FORM 266 FORM_NAME = vqf_902_1_customer 267 DESCRIPTION = "Supply VQF form 902.1" 268 DESCRIPTION_I18N = {"de":"Formular VQF 902.1 hochladen"} 269 OUTPUTS = CUSTOMER_TYPE CUSTOMER_TYPE_VQF 270 # OPTIONAL: NAME, ADDRESS, ID DOCS, ETC. DEPENDING ON LEGAL ENTITY TYPE 271 # => aml program will decide on legal entity type between no more forms 272 # or vqf_902_9, 11, 12, 13, 15. => after that, AML officer 273 FALLBACK = preserve-investigate 274 275 [kyc-check-form-vqf-902.9] 276 TYPE = FORM 277 FORM_NAME = vqf_902_9_customer 278 DESCRIPTION = "Supply VQF form 902.9" 279 DESCRIPTION_I18N = {"de":"Formular VQF 902.9 hochladen"} 280 OUTPUTS = IDENTITY_CONTRACTING_PARTNER IDENTITY_LIST 281 FALLBACK = preserve-investigate 282 283 [kyc-check-form-vqf-902.11] 284 TYPE = FORM 285 FORM_NAME = vqf_902_11_customer 286 DESCRIPTION = "Supply VQF form 902.11" 287 DESCRIPTION_I18N = {"de":"Formular VQF 902.11 hochladen"} 288 OUTPUTS = IDENTITY_CONTRACTING_PARTNER CONTROL_REASON IDENTITY_LIST THIRD_PARTY_OWNERSHIP 289 FALLBACK = preserve-investigate 290 291 #[kyc-check-form-vqf-902.12] 292 #TYPE = FORM 293 # FIXME #9025: This form will not be supported for the TOPS MVP 294 #FORM_NAME = vqf_902_12 295 #DESCRIPTION = "Supply VQF form 902.12" 296 #DESCRIPTION_I18N = {"de":"Formular VQF 902.12 hochladen"} 297 # FIXME: list correct outputs for each form here (and update GANA) 298 #OUTPUTS = LEGAL_ENTITY_TYPE 299 #FALLBACK = preserve-investigate 300 301 #[kyc-check-form-vqf-902.13] 302 #TYPE = FORM 303 # FIXME: #9827 : This form will not be supported for the TOPS MVP 304 #FORM_NAME = vqf_902_13 305 #DESCRIPTION = "Supply VQF form 902.13" 306 #DESCRIPTION_I18N = {"de":"Formular VQF 902.13 hochladen"} 307 # FIXME: list correct outputs for each form here (and update GANA) 308 #OUTPUTS = LEGAL_ENTITY_TYPE 309 #FALLBACK = preserve-investigate 310 311 #[kyc-check-form-vqf-902.15] 312 #TYPE = FORM 313 # FIXME: #9826: This form will not be supported for the TOPS MVP 314 #FORM_NAME = vqf_902_15 315 #DESCRIPTION = "Supply VQF form 902.15" 316 #DESCRIPTION_I18N = {"de":"Formular VQF 902.15 hochladen"} 317 # FIXME: list correct outputs for each form here (and update GANA) 318 #OUTPUTS = LEGAL_ENTITY_TYPE 319 #FALLBACK = preserve-investigate 320 321 [kyc-measure-preserve-investigate] 322 TYPE = SKIP 323 CONTEXT = {} 324 PROGRAM = preserve-investigate 325 326 [kyc-measure-default-investigate] 327 TYPE = SKIP 328 CONTEXT = {} 329 PROGRAM = default-investigate 330 331 332 # ##################### AML programs ######################### 333 334 [aml-program-freeze-investigate] 335 DESCRIPTION = "Fallback measure on errors that freezes the account and asks AML staff to investigate the system failure." 336 COMMAND = taler-exchange-helper-measure-freeze 337 ENABLED = YES 338 FALLBACK = freeze-investigate 339 340 [aml-program-default-investigate] 341 DESCRIPTION = "Fallback measure on errors that keeps default rules on the account but asks AML staff to investigate the system failure." 342 COMMAND = taler-exchange-helper-measure-defaults-but-investigate 343 ENABLED = YES 344 FALLBACK = freeze-investigate 345 346 [aml-program-preserve-investigate] 347 DESCRIPTION = "Fallback measure on errors that preserves current rules on the account but asks AML staff to investigate the system failure." 348 COMMAND = taler-exchange-helper-measure-preserve-but-investigate 349 ENABLED = YES 350 FALLBACK = freeze-investigate 351 352 [aml-program-inform-investigate] 353 DESCRIPTION = "Measure that asks AML staff to investigate an account and informs the account owner about it." 354 COMMAND = taler-exchange-helper-measure-inform-investigate 355 ENABLED = YES 356 FALLBACK = freeze-investigate 357 358 [aml-program-challenger-postal-from-context] 359 DESCRIPTION = "Measure to validate a postal address given in the context. Optionally, a 'prog_name' given in the context can be used to automatically follow up with another AML program. By default, the AML program run after address validation is 'inform-investigate'" 360 COMMAND = taler-exchange-helper-measure-challenger-postal-context-check 361 ENABLED = YES 362 FALLBACK = freeze-investigate 363 364 [aml-program-challenger-sms-from-context] 365 DESCRIPTION = "Measure to validate an SMS phone number given in the context. Optionally, a 'prog_name' given in the context can be used to automatically follow up with another AML program. By default, the AML program run after address validation is 'inform-investigate'" 366 COMMAND = taler-exchange-helper-measure-challenger-sms-context-check 367 ENABLED = YES 368 FALLBACK = freeze-investigate 369 370 [aml-program-challenger-email-from-context] 371 DESCRIPTION = "Measure to validate an email address given in the context. Optionally, a 'prog_name' given in the context can be used to automatically follow up with another AML program. By default, the AML program run after address validation is 'inform-investigate'" 372 COMMAND = taler-exchange-helper-measure-challenger-email-context-check 373 ENABLED = YES 374 FALLBACK = freeze-investigate 375 376 377 # this program should require context 'tos_url' and 'provider_name' 378 # and require attribute "ACCEPTED_TERMS_OF_SERVICE" 379 [aml-program-check-tos] 380 DESCRIPTION = "AML program that enables functions after the ToS have been accepted." 381 COMMAND = taler-exchange-helper-measure-validate-accepted-tos 382 ENABLED = YES 383 FALLBACK = freeze-investigate 384 385 [aml-program-clear-measure-and-continue] 386 DESCRIPTION = "AML program that clears a measure 'clear_measure' and continues with another AML binary 'exec_name' with context 'next_context', all of which must be given in the context." 387 COMMAND = taler-exchange-helper-measure-clear-continue 388 ENABLED = YES 389 FALLBACK = freeze-investigate 390 391 392 [aml-program-preserve-set-expire-from-context] 393 DESCRIPTION = "Measure that preserves the current rules but sets them to expire based on the context. The successor measure to activate on expiration can also be specified in the context. Useful when AML staff merely wants to set an expiration date." 394 COMMAND = taler-exchange-helper-measure-preserve-set-expiration 395 ENABLED = YES 396 FALLBACK = freeze-investigate 397 398 [aml-program-preserve-set-expire-from-context] 399 DESCRIPTION = "Measure that modifies the current rules by combining them with those from the context. The expiration time and successor measure to activate on expiration can also be specified in the context. Useful when AML staff merely wants to update rules." 400 COMMAND = taler-exchange-helper-measure-update-from-context 401 ENABLED = YES 402 FALLBACK = freeze-investigate 403 404 [aml-program-tops-sms-check] 405 DESCRIPTION = "Program that checks that the user was able to receive an SMS at a Swiss mobile phone number. Enables receiving P2P payments by lifiting kyc-rule-p2p-domestic-identification-requirement and also lifts the kyc-rule-withdraw-limit-low. The new rules expire after 2 years." 406 COMMAND = taler-exchange-helper-measure-tops-sms-check 407 ENABLED = YES 408 FALLBACK = freeze-investigate 409 410 [aml-program-tops-postal-check] 411 DESCRIPTION = "Program that checks that the user was able to postal mail at a Swiss postal address. Enables receiving P2P payments by lifiting kyc-rule-p2p-domestic-identification-requirement and also lifts the kyc-rule-withdraw-limit-low. The new rules expire after 5 years." 412 COMMAND = taler-exchange-helper-measure-tops-postal-check 413 ENABLED = YES 414 FALLBACK = freeze-investigate 415 416 [aml-program-tops-kyx-check] 417 DESCRIPTION = "Program that determines what kind of KYC/KYB process should be run based on a first form supplied by the user. Determines the next checks to run. Always concludes by passing all results to an AML officer. Rules are preserved." 418 COMMAND = taler-exchange-helper-measure-tops-kyx-check 419 ENABLED = YES 420 FALLBACK = freeze-investigate 421 422 [aml-program-tops-check-controlling-entity] 423 DESCRIPTION = "Program that checks if the 'Controlling entity 3rd persion' checkbox was set, and if so triggers the optional form VQF 902.9. Then in either case ensures we run the address validation logic. Always concludes by passing all results to an AML officer. Rules are preserved." 424 COMMAND = taler-exchange-helper-measure-tops-3rdparty-check 425 ENABLED = YES 426 FALLBACK = freeze-investigate