Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Current Owners:

Kay Chau

Status (Draft, In Review, Stable, Approved)

In Review

Table of Contents
minLevel1
maxLevel2
outlinetrue
stylenone

...

  • 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:

...

Administrator sets up order in which a transaction can applied

Actors

  • Administrator

Preconditions

Basic Flow

  1. 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

...

  1. Accountant logs onto Mifos and navigates to the Admin section. Accountant selects Import transactions.
  2. Mifos displays new screen for Import Transactions.
  3. Accountant selects M-PESA for Import format, and selects file from their computer for import. Accountant clicks on Continue.
  4. 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."
  5. 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.

...

  • No data has been imported.

Import has errors and Accountant chooses to continue

...

  1. At step 4, Mifos determines there are errors from Validations above.  Mifos displays Review & Submit screen with error messages depending on types of error.
  2. Accountant chooses to continue with import of the valid rows and clicks on Submit.   Mifos displays confirmation screen that import was successful.

...

Import File Details and Validations (M-PESA)

Check if the same file name has been imported.  If so, then throw an error message and reject the whole import.
Same file name has been imported.  Please import a different file.
After clicking on Continue, Mifos will display the Review & Submit screen with the following:
Review the information below.  Click Submit if you want to continue with import or click Edit to make changes. Click Cancel to return to Admin page without submitting information.
Import information
Import file name: <name of file>
Import Status:
<# read> rows were read
       <# imported> rows contained no errors and will be imported
       <# ignored> rows will be ignored  (see FR 1.4 for calculation)
       <# error> rows contained errors and were not imported
Total amount of transactions imported: <total # imported>
Total amount of transactions with error: <total # error>
List all rows with error messages in red
If there are no rows found with import data, the following error message should be thrown:
No rows found with import data.

FR#

Pri

Description

Comments / Mockups

1.1

P1

M-PESA is an Excel format (97) Check if CSV (XML) will work

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.

If Status is not Completed, and Transaction Type is not Pay Utility, then IGNORE the row.  This row will contribute to # of rows ignored.

Else, accept the row, and continue doing error checks.

 

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.

Row <#> error - <Receipt ID> - missing required data.
where the row # is the original row # of the import file.

 

1.6

P1

When importing, must check to see if Receipt ID already exists in any transaction in Mifos - if YES, then ignore the row has error and
Mifos throws an error message

Row <#> error - <Receipt ID> - Transactions with same Receipt ID have already been imported.

where the row # is the original row # of the import file and <receipt ID> is the receipt ID that was found.

 

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.

Row <#> error - <Receipt ID> - Date does not begin with expected format (YYYY-MM-DD).

where the row # is the original row # of the import file.

 

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

Row <#> error - <Receipt ID> - Client with mobile number <mobile number> was not found.

where the row # is the original row # of the import file and <mobile number> is the phone number.

If there are too many matches, then Mifos throws this error message.

Row <#> error - <Receipt ID> - More than 1 client with mobile number <mobile number> was found.

If there is a match, use this as identifier for transaction.

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.11

P1
Check that Status column says "Completed".  If it has any other status, Mifos throws the following message:
Row <#> ignored - <Receipt ID> - Status of <status> instead of Completed.
where <#> is the row # of import file, and <status> is the status found in the Status column.
According to 1.5, you will IGNORE, NOT ERROR if status is not COMPLETE, which is the right way. ERROR needs to be resolved by the user. IGNORE will just be ignored.  Marie, does that mean you don't want to even see this message that the row has been ignored?

This req is removed

1.12

P1

 

1.13

P1

See below FR#7 for additional changes

1.14

P1

User can then either

  1. Click on Edit import information to go back to previous screen and upload new file.
  2. Continue with import and Submit.
  3. Cancel out of the workflow (returning to Admin screen).

 

1.15

P1

If User clicks on Submit, Mifos imports the file and displays confirmation screen
Will the information screen the same as 1.13, which will allow the user to save the save the information on file to process errors later?  No it does not

 

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

 

...

M-PESA Import Columns and Description

Column Name

Required

Description

Comments

Validations

Range

Example

Maps to Mifos

Receipt

 

 

1.12

P1

Check if the same file name has been imported.  If so, then throw an error message and reject the whole import.

Same file name has been imported.  Please import a different file.

 

1.13

P1

After clicking on Continue, Mifos will display the Review & Submit screen with the following:

Review the information below.  Click Submit if you want to continue with import or click Edit to make changes. Click Cancel to return to Admin page without submitting information.

Import information

Import file name: <name of file>
Import Status:

<# read> rows were read
       <# imported> rows contained no errors and will be imported
       <# ignored> rows will be ignored  (see FR 1.4 for calculation)
       <# error> rows contained errors and were not imported

Total amount of transactions imported: <total # imported>
Total amount of transactions with error: <total # error>

List all rows with error messages in red

See below FR#7 for additional changes

1.14

P1

User can then either

  1. Click on Edit import information to go back to previous screen and upload new file.
  2. Continue with import and Submit.
  3. Cancel out of the workflow (returning to Admin screen).

 

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 an error message - this is different than 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:

No rows found with import data.

 


Anchor
importcolumns
importcolumns

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

No

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
Business Payment

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 ImportTransactionOrder

CHANGE from previous: no more client national ID's and this field is now optional - only use if transactions to be applied are different than default order

Validate 3-4 letter codes (everything before first space) corresponds to a loan or savings product in Mifos

If not, ignore this field

Mifos product codes

SP1

Savings Product 1

Loan Repayment and Savings Deposit Details

FR#

Pri

Description

Comments / Mockups

4.1

P1

Assumption: All transaction detail is for loan repayments (loan fees, interest, principal) and/or savings deposits. There is no data in file for loan disbursals, savings withdrawals, client, group or center fees, or client attendance. There will be data in file. We dont want users to manually clean up the Safaricom file to delete the disbursals and withdrawals, that will be dangerous.


SP1

Savings Product 1

Loan Repayment and Savings Deposit Details

FR#

Pri

Description

Comments / Mockups

4.1

P1

 


4.2

P1

Date is actual repayment date recorded . Will need to verify with Chris because if this is declining balance. the interest will change because the payments are done before the due date.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.  Need to clarify this. 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 in file 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 have 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 ImportTransactionOrder.
Accounts to which repayments and deposits are made should be applied to in the order specified here when importing a row.
Example: ImportTransactionOrder = AL1, NL1, SP1
In this case, all rows that do not specify a product name after the client ID should have its transaction amount applied to in this order.  Only the next payment due will be applied.  In this example, if the client owes $10 on AL1 next installment and $20 on NL1, and the client pays $100 then those respective amounts would be applied, and then $70 deposited in SP1.
There should always be only 1 savings account and at the end

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.
There's existing logic in there to take also a few loan or savings accounts if it's specified.  We'll leave that in there for now but we can choose to remove it later.

 

4.9

P1

Related to 4.7, it is not always necessary for the client to have accounts with all products set in the 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 theImportTransactionOrder , THEN an error should be thrown indicating accounts were not found.

Row <#> error - <Receipt ID> - No valid accounts found with this transaction

 

...

Updates to Client Phone Number Field

Update all existing phone numbers that are saved to strip out all non-numeric characters. 

FR#

Pri

Description

Comments / Mockups

5.1

P1

Phone number is now compared with Phone Number field for a Client.

 

5.2

P1

When client now saves phone number in field, we will strip out all non-numeric characters and save.

 

5.3

P1

Comments / Mockups

5.1

P1

Phone number is now compared with Phone Number field for a Client.

 

5.4 2

P1 This field must now be unique.  It continues to be editable.  

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

Example:

If a Group Name is saved as 150. Pasay Group.

User should be able to search for "150", "Pasay" and/or "Group" and this should come up as a Search result

 

6.2

P1

Add ability to search by Phone Number field in Mifos - search can have non-numeric characters.  During search, non-numeric characters will be stripped and compared with existing numbers in Mifos Phone Number field.

Multiple search results can appear.

 

...

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.

 

7.2

P1

 

 

Reports

Mobile Money Collection Sheet, Reconciliation Report - need mockups!!