Rounding rules for loan payment schedules
When a loan is created, the schedule of repayments is computed to 13 decimal places of precision, then rounded to the precision specified by the settings described below. Finally, the last payment is adjusted to account for roundoff errors. This page describes the precise manner in which MifOS rounds and adjusts these loan payments.
Rounding configuration options
Three types of application-wide settings affect how a loan repayment schedule is rounded and adjusted: currency precision, rounding precision, and rounding mode. (See "Currency and Rounding Rules" for a general discussion of currency and rounding.)
- Currency precision
- Specifies the number of digits after the decimal place that are carried by the application's currency. Set by
the configuration option
AccountingRules.DigitsAfterDecimal - Rounding precision
- Specifies the degree of rounding, to the closest decimal place. Example: 1 (closest Rupee),
0.5 (closest half-dollar, for example), 0.1 (closest US dime), 0.01 (closest US penny) 0.001, etc. Precision
is limited by the currency being used by the application. For example, US dollars limit the precision to two
decimal places (closest penny).
Rounding precision is set by two configuration options:
- Initial rounding precision
- The total of all repayments, as well as the total of each scheduled repayment but the last, is
rounded using this precision. Set by configuration option
AccountingRules.InitialRoundOffMultiple. Allowable values are 1, 0.5, 0.1, 0.01, and 0.001. - Final rounding precision
- The total of the last scheduled repayment is rounded using this precision. Set by
configuration option
AccountingRules.FinalRoundOffMultiple. Allowable values are the same as those for initial rounding.
- Rounding mode
-
Specifies the method of rounding. MifOS supports three rounding modes: HALF_UP, FLOOR, and CEILING. The mode is set by three configuration options, one for each rounding context:
AccountingRules.CurrencyRoundingModeAccountingRules.InitialRoundingModeAccountingRules.FinalRoundingMode-
How to Choose Rounding Settings
-
(*Section Under Development*)
-
The Currency Rounding mode is set for all of Mifos; as mentioned above the settings determines the number of decimal places after the decimal point will be displayed throughout the application. Mifos administrators usually set this to be the actual level of precision of the currency. The settings MFIs use are very dependent on what makes sense for collecting payments in the country and area in which they are working.
- The following scenarios walk through how two MFIs chose their rounding settings.
- Example 1
An Indian MFI wants their interest and other amounts within Mifos to display as precisely as possible. In Rupees the smallest amount of currency is a paise, which is 1/100 of a rupee. So this MFI set AccountingRules.DigitsAfterDecimal= 2- For group meetings this MFI doesn't want to collect small coins, only whole Rupees. Requiring clients to bring paises makes it harder to collect money at meetings and it is simpler to have clients bring money in whole rupees. Since the loan calculations won't always lead to amounts in whole rupees, they want to round up the initial payments so the client's final payment can be smaller. So this MFI set
AccountingRules.InitialRoundOffMultiple=1AccountingRules.InitialRoundingMode=CEILING
For the final payment the MFI also does not want the client to bring small coins. The
MFI wants any rounding to benefit the client, so the final amount is rounded down.AccountingRules.FinalRoundOffMultiple=1AccountingRules.FinalRoundingMode=FLOOR- Example 2
A Tunisian MFI also wants their interest and other amounts within Mifos to display as precisely as possible. For Dinar (the Tunisian currency) the smallest amount of currency is a milim, which is 1/1000 of a dinar. So this MFI set AccountingRules.DigitsAfterDecimal= 3- For group meetings this MFI only wants to collect amounts to the nearest 1/2 dinar. Requiring clients to bring precise change is not worth it, but the 1/2 dinar is commonly used. Since the loan calculations won't always lead to amounts to the nearest 1/2 dinar and they want to collect money as close as possible to the exact amount according to the loan schedule, the MFI uses HALF_UP rounding. So this MFI set
AccountingRules.InitialRoundOffMultiple= .5AccountingRules.InitialRoundingMode=HALF_UP- For the final payment the MFI wants the money collected as precisely as possible.
AccountingRules.FinalRoundOffMultiple=.001AccountingRules.FinalRoundingMode=CEILING- If you would like any help deciding on your MFI's settings please email the functional list and the community can help with suggestions.
Rounding and adjusting the loan repayment schedule
Overview
A loan's repayment schedule is computed, or re-computed, when
- the loan is first created,
- a fee or penalty is added or removed, or
- the loan is redone.
The computation is exact, normally keeping up to 13 decimal places of precision. In most scenarios, the payment amounts need to be rounded off before becoming final. Rounding is done automatically by MifOS before the repayment schedule is displayed or printed.
Note: for release 1.1, the ability to add or remove a charge after one or more payments are applied is disabled unless the amount of the charge is already rounded (and thus MifOS will not re-round the installments). The feature will be enabled once business rules are established for how rounding should be applied in the case that past or future payments have already been applied.
MifOS rounds each part (principal, interest, fees, penalties, interest) of an installment separately, and rounds the total payment as well. This often results not only in small overpayment or underpayment of parts of the installment, but also in a difference between the rounded total installment payment and the sum of its parts. MifOS corrects for this by adjusting parts to add up to the whole installment, according to the rules described below.
Finally, after installments are rounded and adjusted, it is possible that neither the total paid across all installments nor the total principal actually paid will add up to the amounts originally computed. MifOS corrects for this by adjusting the amounts in the final installment.
The details of how MifOS carries out this rounding and adjusting is described in the steps below.
Let's illustrate the steps with a sample loan. Assume these application settings:
Currency precision: 3 decimal places Currency rounding mode: HALF_UP Initial rounding mode: HALF_UP Initial rounding precision: 1 (round to whole currency unit) Final rounding mode: HALF_UP Final rounding precision: 1 (round to whole currency unit) Days in fiscal year: 365 The terms of the loan are:
Loan amount: 120 Interest rate: 25% Number of installments: 6 Payment frequency: weekly Loan Type: Equal payments, declining interest In addition, the loan includes a periodic fee of 4% applied to principal + interest, and the first installment includes a miscellaneous fee of 5.
Step 1: Calculate exact payment schedule and totals
MifOS creates the repayment schedule based on accounting rules and the terms of the loan.
Installment Num. Total Principal Interest Loan Fee Misc. Fee 1 30.2178231440342 19.7616116826613 0.5753424657534 4.8808689956195 5.0000000000000 2 25.2178231440342 19.8563591359343 0.4805950124804 4.8808689956195 0.0000000000000 3 25.2178231440342 19.9515608578189 0.3853932905958 4.8808689956195 0.0000000000000 4 25.2178231440342 20.0472190263153 0.2897351220994 4.8808689956195 0.0000000000000 5 25.2178231440342 20.1433358298661 0.1936183185486 4.8808689956195 0.0000000000000 6 25.2178231440342 20.2399134674066 0.0970406810081 4.8808689956195 0.0000000000000 Totals 156.3069388642050 120.0000000000000 2.0217248904856 29.2852139737172 5.0000000000000
Step 2: Round and adjust total payments
MifOS first computes the rounded and adjusted totals for the loan. It
- rounds the loan's exact total payments (sum of exact principal, exact interest, exact fees and penalties) using final rounding.
- rounds total fees using currency rounding. Note that the principal, as well as miscellaneous fees and penalties need not be rounded, since they are entered using precision of the prevailing currency.
- rounds total interest due using currency rounding.
- adjusts the total interest so that rounded fees, principal, and adjusted interest sum to the rounded total payments.
These are the amounts that the customer will actually pay during the life of the loan.
Because total interest is adjusted, the amount of interest that the borrower pays may differ from the total (currency-rounded) interest due. In order to balance accounts, that difference goes into the 999 account .
Initial-rounded total payments: 156.000 Principal (already rounded): 120.000 Currency-rounded loan fee: 29.285 Currency-rounded misc. fee: 5.000 Currency-rounded interest: 2.022 Adjusted interest: 1.715 (total payments - principal - fees) The customer will pay 0.307 less interest than actually due, which is accounted for in the 999 account.
Step 3: Round and adjust each installment's payments.
What happens depends on whether or not the installment is the last one, and whether any grace period applies.
3a. Non-grace-period installments except the last:
- Round the installment's exact total payment using initial rounding. This is what the customer will pay over the life of the loan.
- Round the installment's exact interest using currency rounding.
- Round each of the installment's fees using currency rounding.
- Adjust the installment's principal to make up the difference between the installment's rounded total payment and its rounded interest and fee payments.
- After rounding and adjusting, the installment's (rounded) total payment is exactly the sum of (rounded) principal, interest and fees.
The first 5 payments are rounded and adjusted as shown below.
Installment Num. Total Principal Interest Loan Fee Misc. Fee 1 30.000 19.544 0.575 4.881 5.000 2 25.000 19.638 0.481 4.881 0.000 3 25.000 19.734 0.385 4.881 0.000 4 25.000 19.829 0.290 4.881 0.000 5 25.000 19.925 0.194 4.881 0.000
3b. The last installment:
Compare the loan totals computed in step 2 with running totals of all but the last installment, and adjust the last installment's parts so that the running totals of all installments sum to loan totals.The last installment is adjusted as follows:
Total payment = 156 - (25 + 25 + 25 + 25 + 25) = 26 Principal = 120 - (19.544 + 19.638 + 19.734 + 19.829 + 19.925) = 21.330 Loan Fee = 29.285 - (4.881 + 4.881 + 4.881 + 4.881) = 4.880 Interest = 26 - (0.575 + 0.481 + 0.385 + 0.290 + 0.194) = -0.210
3c. Principal-only grace-period installments
The principal is always zero, and only interest and fees are paid. As above, the installment's interest amount absorbs any rounding discrepancies:
- Round the installment's total payments as above.
- Round the installment's fee payment as above.
- Adjust the interest to force interest and fee payments to add up to the installment's total payment.
3d. Principal + interest grace-period installments
Calculations are the same as if there were no grace, since the zero-payment installments are not included in the installment list at all.
