FTN19.2: FutoIn Interface - Transaction Engine - Limits Version: 1.0DV Date: 2017-12-24 Copyright: 2017 FutoIn Project (http://futoin.org) Authors: Andrey Galkin
This is sub-specification of main FTN19: Transaction Engine.
Limits are important to minimize consequences of potential design & software issues, to comply with AML/CTF requirements and to protect against risks of unreliable personnel and partners.
Any action in system must have reasonable limits. Some limits may be used to trigger additional checks and/or blocking risk analysis.
Periods are accounted per calendar with operator configured timezone. Per account holder limits are accounted in base currency.
Note: risk assessment must be done for all activity even if limits are not hit, but that should be done asynchronously.
It's not feasible to configure most limits individually as it may eventually lead to configuration errors. It would also make limits practically unmanageable. Therefore, only a small number of limit groups (sets) should be present.
Each account holder must be associated with one of the global limit groups.
Transaction engine assumes different domains of operations. Each domain has quite specific limit requirements.
General naming convention:
_amt postfix means amount limit_cnt postfix means count limit_daily_, _weekly_, _monthly_ suffixes mean daily/weekly/monthly periodsContinuous accounting must be present based on the following criteria per account holder.
Retail - purchase of goods and servicesretail_daily_amtretail_daily_cntretail_weekly_amtretail_weekly_cntretail_monthly_amtretail_monthly_cntDeposits - in/out transfers of own moneydeposit_daily_amtdeposit_daily_cntdeposit_weekly_amtdeposit_weekly_cntdeposit_monthly_amtdeposit_monthly_cntwithdrawal_daily_amtwithdrawal_daily_cntwithdrawal_weekly_amtwithdrawal_weekly_cntwithdrawal_monthly_amtwithdrawal_monthly_cntPayments - transfers to other usersoutbound_daily_amtoutbound_daily_cntoutbound_weekly_amtoutbound_weekly_cntoutbound_monthly_amtoutbound_monthly_cntinbound_daily_amtinbound_daily_cntinbound_weekly_amtinbound_weekly_cntinbound_monthly_amtinbound_monthly_cntGaming - in-game activitybet_daily_amtbet_daily_cntbet_weekly_amtbet_weekly_cntbet_monthly_amtbet_monthly_cntwin_daily_amtwin_daily_cntwin_weekly_amtwin_weekly_cntwin_monthly_amtwin_monthly_cntprofit_daily_amtprofit_weekly_amtprofit_monthly_amtMisc - not fitting other domainsmessage_daily_cntmessage_weekly_cntmessage_monthly_cntfailure_daily_cntfailure_weekly_cntfailure_monthly_cntlimithit_daily_cntlimithit_weekly_cntlimithit_monthly_cntPersonnel - limits of operations done by specific employeemessage_daily_cntmessage_weekly_cntmessage_monthly_cntmanual_daily_amtmanual_daily_cntmanual_weekly_amtmanual_weekly_cntmanual_monthly_amtmanual_monthly_cntSuch limit is set per single account in currency of the account.
These are personal user limits which user configures based on own will. Such limits are bound by system limits and act as threshold value.
retail_daily_amtretail_daily_amtwithdrawal_daily_amtbet_daily_amtoutbound_daily_amtRetailretail_min_amt - minimal transaction amountDepositsdeposit_min_amt - minimal deposit amountwithdrawal_min_amt - minimal withdrawal amountPayments outbound_min_amt - minimal outbound payment amountGamingbet_min_amt - minimal bet amountRetailDepositsPaymentsRetail - only for purchasesDeposits - only for withdrwalsPayments - only for outbound paymentsLIM_NEW - on new limits groupLIM_SET - update of account holder limitsInternal API for limits configuration & processing.
{
"iface" : "futoin.xfer.limits",
"version" : "{ver}",
"ftn3rev" : "1.7",
"imports" : [
"futoin.ping:1.0",
"futoin.xfer.types:{ver}"
],
"types" : {
"OptionalLimitValues" : [ "LimitValues", "boolean" ],
"LimitGroups" : {
"type" : "array",
"elemtype" : "LimitGroup"
},
"RetailLimitValues" : {
"type" : "LimitValues",
"fields" : {
"retail_daily_amt" : "LimitAmount",
"retail_daily_cnt" : "LimitCount",
"retail_weekly_amt" : "LimitAmount",
"retail_weekly_cnt" : "LimitCount",
"retail_monthly_amt" : "LimitAmount",
"retail_monthly_cnt" : "LimitCount",
"retail_min_amt" : "LimitAmount",
"preauth_daily_amt" : "LimitAmount",
"preauth_daily_cnt" : "LimitCount",
"preauth_weekly_amt" : "LimitAmount",
"preauth_weekly_cnt" : "LimitCount",
"preauth_monthly_amt" : "LimitAmount",
"preauth_monthly_cnt" : "LimitCount",
"preauth_min_amt" : "LimitAmount"
}
},
"DepositsLimitValues" : {
"type" : "LimitValues",
"fields" : {
"deposit_daily_amt" : "LimitAmount",
"deposit_daily_cnt" : "LimitCount",
"withdrawal_daily_amt" : "LimitAmount",
"withdrawal_daily_cnt" : "LimitCount",
"deposit_weekly_amt" : "LimitAmount",
"deposit_weekly_cnt" : "LimitCount",
"withdrawal_weekly_amt" : "LimitAmount",
"withdrawal_weekly_cnt" : "LimitCount",
"deposit_monthly_amt" : "LimitAmount",
"deposit_monthly_cnt" : "LimitCount",
"withdrawal_monthly_amt" : "LimitAmount",
"withdrawal_monthly_cnt" : "LimitCount",
"deposit_min_amt" : "LimitAmount",
"withdrawal_min_amt" : "LimitAmount"
}
},
"PaymentsLimitValues" : {
"type" : "LimitValues",
"fields" : {
"outbound_daily_amt" : "LimitAmount",
"outbound_daily_cnt" : "LimitCount",
"inbound_daily_amt" : "LimitAmount",
"inbound_daily_cnt" : "LimitCount",
"outbound_weekly_amt" : "LimitAmount",
"outbound_weekly_cnt" : "LimitCount",
"inbound_weekly_amt" : "LimitAmount",
"inbound_weekly_cnt" : "LimitCount",
"outbound_monthly_amt" : "LimitAmount",
"outbound_monthly_cnt" : "LimitCount",
"inbound_monthly_amt" : "LimitAmount",
"inbound_monthly_cnt" : "LimitCount",
"outbound_min_amt" : "LimitAmount"
}
},
"GamingLimitValues" : {
"type" : "LimitValues",
"fields" : {
"bet_daily_amt" : "LimitAmount",
"bet_daily_cnt" : "LimitCount",
"win_daily_amt" : "LimitAmount",
"win_daily_cnt" : "LimitCount",
"profit_daily_amt" : "LimitAmount",
"bet_weekly_amt" : "LimitAmount",
"bet_weekly_cnt" : "LimitCount",
"win_weekly_amt" : "LimitAmount",
"win_weekly_cnt" : "LimitCount",
"profit_weekly_amt" : "LimitAmount",
"bet_monthly_amt" : "LimitAmount",
"bet_monthly_cnt" : "LimitCount",
"win_monthly_amt" : "LimitAmount",
"win_monthly_cnt" : "LimitCount",
"profit_monthly_amt" : "LimitAmount",
"bet_min_amt" : "LimitAmount"
}
},
"MiscLimitValues" : {
"type" : "LimitValues",
"fields" : {
"message_daily_cnt" : "LimitCount",
"failure_daily_cnt" : "LimitCount",
"limithit_daily_cnt" : "LimitCount",
"message_weekly_cnt" : "LimitCount",
"failure_weekly_cnt" : "LimitCount",
"limithit_weekly_cnt" : "LimitCount",
"message_monthly_cnt" : "LimitCount",
"failure_monthly_cnt" : "LimitCount",
"limithit_monthly_cnt" : "LimitCount"
}
},
"PersonnelLimitValues" : {
"type" : "LimitValues",
"fields" : {
"message_daily_cnt" : "LimitCount",
"manual_daily_amt" : "LimitAmount",
"manual_daily_cnt" : "LimitCount",
"message_weekly_cnt" : "LimitCount",
"manual_weekly_amt" : "LimitAmount",
"manual_weekly_cnt" : "LimitCount",
"message_monthly_cnt" : "LimitCount",
"manual_monthly_amt" : "LimitAmount",
"manual_monthly_cnt" : "LimitCount"
}
}
},
"funcs" : {
"setLimits" : {
"params" : {
"group" : "LimitGroup",
"domain" : "LimitDomain",
"currency" : "CurrencyCode",
"hard" : "LimitValues",
"check" : "OptionalLimitValues",
"risk" : "OptionalLimitValues"
},
"result" : "boolean",
"throws" : [
"UnknownGroup",
"UnknownCurrency"
]
},
"getLimits" : {
"params" : {
"group" : "LimitGroup",
"domain" : "LimitDomain"
},
"result" : {
"currency" : "CurrencyCode",
"hard" : "LimitValues",
"check" : "OptionalLimitValues",
"risk" : "OptionalLimitValues"
},
"throws" : [
"UnknownGroup",
"UnknownCurrency",
"LimitsNotSet"
]
},
"addLimitGroup" : {
"params" : {
"group" : "LimitGroup"
},
"result" : "boolean",
"throws" : [
"AlreadyExists"
]
},
"getLimitGroups" : {
"result" : "LimitGroups"
}
},
"requires" : [ "SecureChannel" ]
}
=END OF SPEC=