From 6a537899a88c5496757f71b4f48feb33d062edbb Mon Sep 17 00:00:00 2001 From: Will Ruddick Date: Tue, 30 Jun 2020 05:55:23 +0000 Subject: [PATCH] Update 007_eMoney_integration.md --- spec/007_eMoney_integration.md | 40 +++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/spec/007_eMoney_integration.md b/spec/007_eMoney_integration.md index 469eec1..86f4d8a 100644 --- a/spec/007_eMoney_integration.md +++ b/spec/007_eMoney_integration.md @@ -1,5 +1,5 @@ ## Incoming Sarafu ## -When chama (group accounts) exchange Sarafu each month for National Currency we have to manually send them Mpesa. +When users exchange CICfor National Currency we have to manually send them Mpesa. We would like to automate this. ## Outgoing Sarafu ## @@ -12,18 +12,42 @@ Configure - using our own system AfricasTalking API to automatically send Sarafu - *white list* The chama (group accounts only) must only be able to cash out - using the exchange option to an Agent account - *amount* The max cash out is the minimum of (30,000 Sarafu, half their balance, their total amount of outward trade volume to other users (standard transactions) - *time* They can only cash out once per month - - *rate* The Sarafu to Mpesa rate should be a config variable set to 1.0 -> a 0% cash out fee. i.e. For 100 Sarafu you get 100 Mpesa. This rate will vary manual based on promotion periods and available Mpesa + - *rate* The Sarafu (and their community) to Mpesa rate should be calculated as follows: + - CIC_supply_b: Get the total CIC supply off **blockchain** - the amount of **CIC_burn** + - total_reserve_b: Get the total reserve off **blockchain** - the amount of **cash_out** we've gotten (in USD) + - CIC_burn_amount = whatever they have sent to exhange + + +The Reserve (xDAI) pulled out +> const reserveOut_xDAI = total_reserve_b * (Math.pow(1 + (-1 * CIC_burn) / CIC_supply_b, 1 / trr) - 1); + + - Mpesa_out = reserveOut_xDAI **USD => KSH** rate + - reserve_given = reserve_out - CIC_created*fee (0.02) + - Simulate as if done on blockchain .... new_cic_supply_b = cic_supply_b - CIC_burn + - Simulate as if done on blockchain .... new_total_reserve_b = total_reserve_b - reserveOut_xDAI ### Outgoing Sarafu Rules ### - - *white list* Only users sending via paybill receive Sarafu. Non users receive a invitation to join Sarafu sms - - *amount* The max sarafu out is 20,000 Sarafu per user + - *white list* Only users sending via paybill receive Sarafu. Non users receive a invitation to join Sarafu sms (alert to admins there was a donation). + - *amount* The max sarafu out is 20,000 Sarafu per user, KYC_limit max, supply_max - *time* No limit - - *rate* The Mpesa to Sarafu rate should be a config variable set to 1.2 -> a 20% cash in bonus. i.e. For 100 Mpesa you get 120 Sarafu. This rate will vary manual based on promotion periods and available Sarafu + - *rate* The Mpesa to Sarafu (and their community) rate should be calculated as follows: + - CIC_supply_b: Get the total CIC supply off **blockchain** + the amount of **CIC_given** + - total_reserve_b: Get the total reserve off **blockchain** + the amount of **cash_in** we've gotten (in USD) + - cash_in_amount = Mpesa_in **KSH -> USD** rate (what is the current USD <> KSH rate) + +The amount cashed in = cash_in_amount +> const CIC_Created = cic_supply_b * (Math.pow(1 + cash_in_amount / total_reserve_b, trr) - 1); + + - **CIC_given = CIC_Created - CIC_created*fee (0.02)** + - Simulate as if done on blockchain .... new_cic_supply_b = cic_supply_b + CIC_given + - Simulate as if done on blockchain .... new_total_reserve_b = total_reserve_b + cash_in_amount + + ### Security ### - - Balance alerts: The paybill from which Sarafu is sent needs to send a sms and email alert when low + - Balance alerts: On both Mpesa and CIC balances: The paybill from which Sarafu is sent needs to send a sms and email alert when low - Failure alerts: If the API session fails an sms and email alert should be sent - Reject on not enough Mpesa balance: If there is not enough Mpesa (on incoming Sarafu) the transaction should be rejected and an email sent to admin along with a SMS to admin and user (Sarafu should not be taken from user). (message should be visible also on mgmt platform txn view and user view and admin view). - Reject on not enough Sarafu balance: If there is not enough Sarafu (on incoming Mpesa) the transaction should be rejected and an email sent to admin along with a SMS to admin and user (Mpesa should not be taken from user). (message should be visible also on mgmt platform txn view and user view and admin view). @@ -32,5 +56,5 @@ Configure - using our own system AfricasTalking API to automatically send Sarafu - The account from which Sarafu is sent should be a Agent account - The cash-out rules for a chama (minimum and time limit) - Alert balance levels - - Rate: Mpesa to Sarafu - - Rate: Sarafu to Mpesa \ No newline at end of file + - Fees: Mpesa to Sarafu + - Fees: Sarafu to Mpesa \ No newline at end of file