ansible-taler-exchange

Ansible playbook to deploy a production Taler Exchange
Log | Files | Refs | Submodules | README | LICENSE

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