MPESA Loan Repayments and Savings Deposits Functional Spec v2
M-PESA - Import Loan Repayments plus Savings Deposits v2
Release |
Leila E |
Current Owners: |
Kay Chau |
Status (Draft, In Review, Approved) |
Approved (Marie Valdez) |
Introduction
KEEF is planning to have mobile integration with M-PESA. They are using Mifos for their MIS platform. KEEF needs the ability to import a file of transaction information from M-PESA into Mifos. They also have the need for importing single amounts that span several different transactions.
User Stories (Epics)
Priority |
User Story |
Section in FR |
---|---|---|
1 |
As a user (accountant) at the HO, I want to be able to import a file of loan repayment transactions plus savings deposits from M-PESA into Mifos so that all details for our clients' payments are accurately recorded in Mifos |
|
1 |
As a loan officer at a BO, I want to be able to see the clients at branch have paid their loans in Mifos |
|
1 |
As a loan officer at a BO, I want to be able to see savings accounts of the clients updated with the correct deposit information |
|
Goals
- Ability to import file of loan repayment transactions plus savings deposits into Mifos
- Transaction History in Mifos accurately shows loan payments and savings deposits
- Update plugin similar to what has been done for Al Majmoua for the Audi Bank import.
- Properly account for all transactions read, ignored, errored, and imported.
Non-Goals
The following items will not be addressed in this version of the plugin:
- Additional logging of import than what we do already in Mifos for logging
- Ability to review what is imported at import time
Definitions and Terminology
Term |
Definitions |
---|---|
|
|
- Mandatory fields will be preceded by *
- Links are italicized
- Buttons are
Button
Related Documents
MPESA Loan Repayments and Savings Deposits Functional Spec v1
Import Transactions
This feature is in the Admin section and will allow the User to import transactions
Use Cases
Administrator sets up order in which a transaction can applied
Actors
- Administrator
Preconditions
Basic Flow
- Administrator edits a properties file with new setting for order of products a transaction import is applied to. The products are listed with commas by short name.
Post-conditions
- All transactions imported as repayments/deposits are imported in this order unless product names are found in the import row.
Validations
- When import happens, validation will be done to try to import in this logic. If the accounts are not found, an error is thrown.
- If this property is not set, then all transaction rows with no other information on loan or savings accounts will thrown an error.
Accountant imports transactions (M-PESA) - file with no errors
Actors
- Accountant
Preconditions
- Accountant has permissions to import transactions
- Accountant has file in xls (Excel 97 format) to import
Basic Flow
- Accountant logs onto Mifos and navigates to the Admin section. Accountant selects Import transactions.
- Mifos displays new screen for Import Transactions.
- Accountant selects M-PESA for Import format, and selects file from their computer for import. Accountant clicks on
Continue
. - Mifos imports file and checks for any errors (see Validations below). If there are no errors, Mifos displays Review & Submit screen with "There are no errors found. Click Submit to continue with import."
- Accountant clicks on
Submit
. Mifos displays confirmation screen that import was successful.
Post-conditions
- All data available in the file has been imported and all the correct tables and loan account data correctly populated.
Validations
- If a row has a cell that's empty in a required column is empty, that row is rejected and appropriate error message displayed.
- No bad data - ie, no numbers in columns that require text and vice versa. See FR's below.
Alternative Flows
Accountant cancels Import
- At step 4, Accountant clicks on
Cancel
instead. Mifos returns User to the Admin screen.
Post-conditions
- No data has been imported.
Import has errors and Accountant chooses to continue
- At step 4, Mifos determines there are errors from Validations above. Mifos displays Review & Submit screen with error messages depending on types of error.
- Accountant chooses to continue with import of the valid rows and clicks on
Submit
. Mifos displays confirmation screen that import was successful.
Post-conditions
- Valid rows are imported and invalid rows are rejected.
Import has errors and Accountant chooses to Cancel
- At step 4, Mifos determines there are errors from Validations above. Mifos displays Review & Submit screen with error messages depending on types of error.
- Accountant chooses to cancel and clicks on
Cancel
instead. Mifos returns User to the Admin screen.
Post-conditions
- No data has been imported.
Import has errors and Accountant chooses to import a different file
- At step 4, Mifos determines there are errors from Validations above. Mifos displays Review & Submit screen with error messages depending on types of error.
- Accountant chooses to import a different file and clicks on
Edit Import Information
instead. Mifos returns User to the previous screen. Return to Step 2 of Basic Flow.
Post-conditions
- No data has been imported.
Loan Officer checks data has been updated in clients' loan and savings accounts
Actors
- Loan Officer
Preconditions
- Loan Officer has permissions to view clients loan data
- Administrator has already imported data for that date.
Basic Flow
- Loan Officer logs onto Mifos and navigates to client A's advance loan account.
- Mifos displays Transaction History. Loan Officer confirms that a repayment has been updated correctly.
- LO then navigates to client A's regular loan account. LO confirms that repayment there has been updated correctly.
- LO then navigates to client A's savings account. LO confirms that savings deposit has been updated correctly.
Post-conditions
- None
Alternative Flows
Loan Officer doesn't see the data updated
- Loan Officer selects a client who did not pay for the date of transaction the Administrator had imported.
- Loan Officer goes to view that client's transaction history and sees that no transaction has been made.
Import Transactions (M-PESA) Functional Requirements
Import File Details and Validations (M-PESA)
FR# |
Pri |
Description |
Comments / Mockups |
---|---|---|---|
1.1 |
P1 |
M-PESA is an Excel format (97) |
The file as is from Safaricom will not work, workaround is to open the file in Excel and save. User must save with .xls extension. |
1.2 |
P1 |
M-PESA import file's first few lines contain description of file. These are to be ignored. Only data after row of column headings will be imported in the Transactions section. |
|
1.3 |
P1 |
Import file will have columns in below table |
|
1.4 |
P1 |
First check if row should be ignored or accepted. |
|
1.5 |
P1 |
If a row contains a cell that's missing a required field, Mifos displays an error message for each row this occurs. Only check the rows that are not ignored. |
|
1.6 |
P1 |
When importing, must check to see if Receipt ID already exists in any transaction in Mifos - if YES, then row has error and Mifos throws an error message |
|
1.7 |
P1 |
Dates are in the format YYYY-MM-DD HH:MM:ss. If any value under Date column does not start in format of YYYY-MM-DD, then Mifos displays an error message for each row this occurs. |
|
1.8 |
P1 |
Compare Other Party Info - Take first 10 digits as phone number, and compare with Client's Phone Number fields in Mifos. If there is not a match, then Mifos throws an error message |
Updated 10/4 |
1.9 |
P1 |
Changes to Transaction Party Details - no more taking of National ID - remove this functionality. Compare first code listed (before first space) with any loan or savings product in Mifos. If the code exists, import that whole transaction amount to the account associated with that code. Otherwise, ignore what's in the field. |
|
1.10 |
P1 |
See FR 4.9 for additional errors to check for. |
|
1.12 |
P1 |
Check if the same file name has been imported. If so, then throw an error message and reject the whole import. |
|
1.13 |
P1 |
After clicking on Continue, Mifos will display the Review & Submit screen with the following: |
See below FR#7 for additional changes |
1.14 |
P1 |
User can then either
|
|
1.15 |
P1 |
If User clicks on Submit, Mifos imports the file and displays confirmation screen that import was successful. If it's not successful, it will list what error there was, this is different than FR 1.13. |
|
1.16 |
P1 |
There is no option to revert a file upload once it has been submitted. |
|
1.17 |
P1 |
Currency of values imported is directly inherited from the loan product that the loan account is mapped to. |
|
1.18 |
P1 |
If there are no rows found with import data, the following error message should be thrown: |
|
M-PESA Import Columns and Description
Column Name |
Required |
Description |
Comments |
Validations |
Range |
Example |
Maps to Mifos |
---|---|---|---|---|---|---|---|
Receipt |
Yes |
Receipt ID is proof of payment and a unique MPESA identifier that can be cross-reference with clients phone receipt. Need to be imported into Mifos since needed in the KEEF Collection Sheet. |
Receipt ID is exclusive to MPESA |
Check that there is not an existing RECEIPT ID |
Alphanumeric |
Y29DW127 |
Transaction Details - Receipt ID |
Date |
Yes |
Payment date |
|
Validate date is in range (see above) |
YYYY-MM-DD time |
2009-08-26 12:39:42 |
Transaction Date |
Details |
No |
Contains information payment received from phone number, telephone number, MFI account number |
Ignore |
|
|
|
|
Status |
Yes |
Completed |
Check that Status says Completed. |
Must be Completed, anything else IGNORE |
Completed, Attempted, Cancelled, Declined |
Completed |
|
Withdrawn |
No |
Amount paid from MFI |
Only use for Disbursals, Phase 2 |
|
|
00 |
|
Paid In |
Yes |
Transaction amount paid to MFI |
|
Validate it's an amount and check same validations in Mifos against digits after decimal |
Should be digits after decimal = 0 |
200 |
Transaction amount |
Balance |
No |
Balance of MFI |
Ignore |
|
|
520,499 |
|
Balance Confirmed |
No |
automatic check in system |
Ignore |
|
|
true |
|
Transaction Type |
Yes |
Determines if this is a payment or disbursal |
Check that this is Pay Utility, else ignore row |
Must be Pay Utility, anything else IGNORE. |
Pay Utility |
Pay Utility |
N/A |
Other Party Info |
Yes |
Safaricom generated phone number and name associated with phone number |
Compare first 10 digits to phone number. If none exists, throw error. This will be used to identify where the transaction goes. |
First 10 digits must correspond to a Phone Number |
Numeric |
0722926212 - CYNTHIA OMONDI |
Phone Number |
Transaction Party Details |
Optional |
Will include Mifos Product Code if there is one, and other information such as Client's Group ID, etc |
We will use this to include short names) of product(s) applied to the client's accounts if it is different than the default order set in ke.co.safaricom.MPesaXlsImporter.ImportTransactionOrder |
Validate 3-4 letter codes (everything before first space) corresponds to a loan or savings product in Mifos |
Mifos product codes |
SP1 |
Savings Product 1 |
Loan Repayment and Savings Deposit Details
FR# |
Pri |
Description |
Comments / Mockups |
---|---|---|---|
4.2 |
P1 |
Date is actual repayment date recorded |
|
4.3 |
P1 |
For Loan Accounts: Amount that is being paid - pre-payments, partial payments, and over-payments if there are future installments are allowed. If there is no specific loan/savings product. The amount is allocated as configured and only the first upcoming loan amount will be paid... See example worksheet on Requirements document. Amount is applied in the following order to each loan account - Loan Penalties, Loan Fees, Interest, Principal. |
|
4.4 |
P1 |
Date cannot be before today in Mifos |
If they have backdated transactions on, then date can be before today up til last meeting date |
4.5 |
P1 |
Mode of Payment must be configured in Mifos to have MPESA. All transactions accepted will be tagged with Payment Mode MPESA. |
|
4.6 |
P1 |
If there is an overpayment of the entire loan, Mifos should throw an error. This situation can occur if the savings product is not found for the client. |
|
4.7 |
P1 |
Default order of transactions is set in new setting in a properties file called ke.co.safaricom.MPesaXlsImporter.ImportTransactionOrder. |
Will the properties file reside with the plugin as a separate file or in the global properties file |
4.8 |
P1 |
If there is any product short name specified, then the whole transaction amount should just be applied to that account. The product can be a loan or savings product. |
|
4.9 |
P1 |
Related to 4.7, it is not always necessary for the client to have accounts with all products set in the ke.co.safaricom.MPesaXlsImporter.ImportTransactionOrder field. If the first account is not found, the plugin should continue to parse and skip to the next account. If NO accounts are found bearing any of the products listed in the ke.co.safaricom.MPesaXlsImporter.ImportTransactionOrder, THEN an error should be thrown indicating accounts were not found. |
|
Other Assumptions
- Name payment mode = MPESA
QA Considerations
- Performance History - PAR, other values calculated correctly
- View Loan Account Details - correct dates and values imported
- View Savings Account Details - correct dates and values imported
- Transaction History - each transaction should still be logged, with the user who did the import
Standard Considerations
Security (Permissions, Roles, and Data Scope)
Does the user need to be in a particular user hierarchy to use this feature? |
No |
Does the office hierarchy affect use of this feature? |
No |
Are you using any existing permissions to control this feature? |
No |
Are you adding any new permissions or changing existing permission to control this feature? |
No - permission already added |
Are you using any existing activities to control this feature? |
No |
Are you adding any new activities or changing existing activities to control this feature? |
No |
Are there any special considerations for upgrade scenarios? What will be the default value for new permissions? |
No special considerations. Default value is checked in ADMIN role and unchecked for all other roles. |
What will be the default values for default roles in a new installation? |
|
Impacts to System
Does this feature affect Bulk Loan Creation? How? |
No |
Does this feature affect Collection Sheet Entry? How? |
No |
Does this feature affect Redo Loans? |
No |
Does this feature affect Undo Loans? |
No |
|
|
Globalization/Localization
Will this feature support users localizing data that they enter? |
|
Does this feature involve any date/time related data, and if so how should conversions be handled? |
|
Is there currency or other numeric data ? If so does it require any special handling or validation? |
|
Logging
Change Log
Do changes to the data that is collected or stored by the new feature have to be fully logged by the system? |
Yes |
Does the administrator configuring the system need the ability to turn on or off logging for this feature? |
No |
Is the feature currently logged but the structure of the logged records changing? |
No |
Reporting
Provide any relevant information about reporting requirements for the new features and answer the questions below, providing detail to explain any particular area when necessary.
Does the feature affect any existing reports? |
No |
Does the feature require adding any new reports? |
No |
Performance
Will the feature be a high use-case scenario? |
No |
Will the feature have potential for high concurrency? |
No |
Does the feature include complex UI or data gathering logic that will be used by a significant portion of the user base? |
No |
Does the feature contain risks of database connection timeout or ASP page timeout? |
|
Will the feature contain any bulk insert/update/delete transactions? |
|
Will the feature contain any caching mechanisms or cache refreshing mechanisms? |
Unclear |
Could the feature result in a large amount of data being sent to the client or between the database and web server? |
Yes |
Would users on a low bandwidth connection likely face issues with a part of this feature? |
Depends on size of file |
Does the feature affect existing batch jobs or require adding any new batch jobs? |
Unclear |
Setup and Installation
New Installations
Will the feature include demo data? |
No |
Does the feature require any data to be gathered at setup runtime? |
No |
Backward Compatibility and Upgrades
Is there any data conversion that needs to be done as part of an upgrade? |
|
Will customers lose data or will the way existing data is stored change significantly? |
No |
Will another feature, workflow or portion of the data model be deprecated as a result of this new feature? |
No |
Will existing role permissions be changed or impacted by this feature? If so provide details in the security section. |
ADMIN role should be updated to have this permission checked. |
Will existing customers need to learn a new UI process or change the way they use the system as a result of this new feature? |
No |
Hosting Support
If different user groups are using the same database, are there concerns over the sharing of data related to the feature? |
|
Are there expected to be performance related issues with having many customers sharing the same hardware in support of this feature? |
|
Configuration
Does this feature require changes to configuration files? |
No |
If so, is this feature enabled or disabled by default? |
N/A |
Open Questions and Notes
Unanswered
Review and Approvals
Date |
Name |
Role |
Status |
|
|
PM |
|
|
|
Dev |
|
|
|
QA |
|
Additions
Updates to Client Phone Number Field
FR# |
Pri |
Description |
Comments / Mockups |
---|---|---|---|
5.1 |
P1 |
Phone number is now compared with Phone Number field for a Client. |
|
5.2 |
P1 |
Phone Number does not have to be unique. |
|
Improvements to Search
FR# |
Pri |
Description |
Comments / Mockups |
---|---|---|---|
6.1 |
P1 |
Improve Search to take in whole name when searching for Client, Group, or Center Name |
|
6.2 |
P1 |
Add ability to search by Phone Number field in Mifos - search can have non-numeric characters. Search will strip out non-numeric characters and compare with non-numeric form of Phone Numbers stored in Mifos. |
|
Error Log
FR# |
Pri |
Description |
Comments / Mockups |
---|---|---|---|
7.1 |
P1 |
In addition to displaying status of import and error messages on the page, add a link "Save Error Log" where all messages on that page are written to a text file that can be saved by the user. |
|
Additions after FS approval
- If 2 accounts of the same product exist, an error is returned with the following error message - More than one account matches product code <CODE>