Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Page Properties
Target release
Epic
Document status
Status
titleDRAFT
Document ownerBinny Gopinath Sreevas
Designer
Developers
QA

Overview

...

Many Banks and  Financial Institutions use lending rates that are linked to the Base Lending Rates defined by the Central Bank of the country. Home Loans and other longer term loans are usually given out by banks/financial institutions at floating interest rates - where the interest rate applicable for the loan is linked to the interest rate set by the Central Bank and is periodically revised by the Central Bank. The interest rate applicable for the loan, can change during the tenure of the loan. The loan may start off as a 10% loan and may get revised to 10.5% after a period of time and can even be revised downwards (for example: 9.5%) depending on guidelines issued by the Central Bank from time-to-time.  

Background and strategic fit

This feature will bring Mifos X closer to a true bank and real-life financial institutions and not restrict it's its usage to micro-finance scenarios where interest rates are fixed during the tenure of the loan account.

...

d)      If the Floating Interest Rate change OR the Base Lending Rate change occurs between two instalmentsinstallments, then the interest for the next instalment will be calculated based on the exact date of change. For example:

...

AttributeDescriptionNotes
Interest rate linked to Base Lending Rate?Boolean value that describes if this loan product is linked to the Base Lending Rate of the bank

True / False.

This field is applicable for non-floating interest rate loans too.

Default False.
If True, then rate above (or less) the Base Lending Rate

Interest rate differential –

For example +1.5% would mean 1.5% above the Base Lending Rate

This can be a range, as I it exists in Mifos today (min, default and max)

This field is applicable for non-floating interest rate loans too.
Floating Interest Rate?Boolean value that describes if this loan product has a floating interest rate or not.

True / False

Default False.

If yes, then allow period based interest rates to be captured.

Note: This could be a phase 2 enhancement as I have not encountered any customer specifically asking for this level of flexibility. Needs to be validated if actual banks also want this level of flexibility in the product definition.

Interest rate differential for different periods. For example:

a)      01-Jan-2009 to 10-Apr-2012 Interest differential is +1.5%

b)      11-Apr-2012 to 21-Jun-2014 Interest differential is +1.75%

c)       22-Jun-2014 to <null> Interest differential is +1.25%

Validations:

There should not be any gaps in the periods.

 If “Interest rate linked to Base Lending Rate” is set to true, then an interest rate differential is provided.

Else, actual interest rates may be given by user, instead of an Interest Rate Differential

...

QuestionOutcome

Should Base Lending Rate and Floating Interest Rate be provided for the same period?

For example: if Base Lending Rate is given as yearly rate, can Floating Interest Rate be provided as a monthly rate? Will there be any conflicts during calculations?

 
Is it ok to keep the floating interest linked to the disbursal date (and not link it to the loan application submission date and loan approval date)? Yes, Should be linked to disbursal date (DBH)
Should floating interest rate be application for products that do not support Interest Recalculation? If yes, need to get list of exact scenarios to be supported. 
Once a loan account starts using a floating interest rate and repayments are already made, then it is planned to not allow any modification prior to the repayment date for Base Lending Rate and loan product level Floating Interest Rate. Is this ok?  yes, the only time it would be feasible to make a modification prior to repayment date is in the case of error correction. this would then be done thru journal entries. (DBH)
  

Out of Scope

TBD

 

Detail Design for Implementation

Defining Floating Interest Rates

API

New APIs would be exposed thru which Floating Interest Rate schemes can be created/updated/deleted(inactivate).

METHODURLPurpose
GET/mifosng-provider/api/v1/floatingratesList floating interest rates
POST/mifosng-provider/api/v1/floatingratesCreate new floating interest rate
GET/mifosng-provider/api/v1/floatingrates/{floatingrateid}Get details of specific floating interest rate
PUT/mifosng-provider/api/v1/floatingrates/{floatingrateid}Edit specific floating interest rate

JSON Data exchange format:

{                                
        floatingRates: [
                {
                        floatingRate: {
                                id:        [long],
                                name:        [string],
                                isBaseLendingRate:        [boolean],
                                isActive: [boolean],
                                ratePeriods:[
                                        {
                                                ratePeriod: {
                                                        id: [long],
                                                        fromDate: [date],
                                                        interestRate: [decimal],
                                                        interestRatePeriodEnum: [smallint],
                                                        isDifferentialToBaseLendingRate: [boolean],
                                                        isActive: [boolean]
                                                }
                                        }
                                ]
                        }
                }
        ]
}

Types of Floating Rates

Any number of floating rate schemes can be created. But they would fall under one of the 3 types explained below. An example illustration is given far down below.

Base Lending Rate
  • This is a unique floating rate scheme identified by isBaseLendingRate attribute
  • There can be only one Base Lending Rate for an organisation at any given time
  • Will have its own period and interest definition
  • Loan Products that wants to re-use Base Lending Rate periods with only a differential rate added on top of it should link to this type of scheme
Differential to Base Lending Rate
  • Floating rate scheme dependent on Base Lending Rate
  • Can define its own Floating rate periods (independent of Base Lending Rate)
  • Interest rate specified is differential of Base Lending Rate as of start date of the given period (attribute ratePeriod.isDifferentialToBaseLendingRate will be true)
  • Cannot exist without a Base Lending Rate already defined
  • Loan Products that wants to use a differential rate on top of prevailing Base Lending Rate but with their own time periods should link to this type of scheme
Independent Floating Lending Rate
  • Floating interest rate scheme with own rate and period
  • Not dependent on Base Lending Rate
  • floatingRate.isBaseLendingRate and ratePeriod.isDifferentialToBaseLendingRate attributes will be false
  • Loan Products that wants to define an independent floating rate and time periods should link to this type of scheme

UI Screens

  • New Button under "Admin > Products" by name "Floating Interest Rates"
  • New screen that lists all the "Floating Interest Rates" schemes along with "Create" button.
  • New screen to Create Floating Interest Rate
  • New Screen to View Interest Rate and Applicable Periods along with "Edit" button
  • New Screen to Edit Floating Interest Rate

Restrictions

  • Interest Rate periods can be added/updated/modified only with a future start date
  • Only one Base Lending Rate type of scheme at any given time
  • Differential to Base Lending Rate type cannot be created without Base Lending Rate already defined
  • interestRatePeriodEnum attribute for Differential to Base Lending Rate type will be same as Base Lending Rate
  • Base Lending Rate cannot be inactivated when there is any Differential to Base Lending Rate type active

DB changes

Following new tables would be added

m_floating_rates  
field_namefield_typeContraints
idlongnot null auto increment
namevarchar[200]not null
is_base_lending_ratebitnot null default false
is_activebitnot null default true
created bybigintnot null
created datedatetimenot null
modified bybigintnot null
modified datedatetimenot null
m_floating_rates_periods  
idlongnot null auto increment
floating_rates_idlongnot null
from_datedatetimenot null
interest_ratedecimalnot null
interest_rate_period_enumsmallintnot null
is_differential_to_base_lending_ratebitnot null default false
is_activebitnot null default true
created bybigintnot null
created datedatetimenot null
modified bybigintnot null
modified datedatetimenot null

 

Defining a Loan Product

API

Following additional attributes will be added to /mifosng-provider/api/v1/loanproducts list/add/update APIs

SlAttributeTypeDefinition
1isLinkedToFloatingInterestRatesbooleanIdentifies a loan product is linked to floating rates
2floatingRateIdlong

Floating rates scheme to be followed

3interestRateDifferentialdecimal

Differential on top of rate as derived by Floating rate scheme

Basically "Loan Product Base Rate" is derived based on this differential

4minDifferentialLendingRatedecimalMin differential w.r.t "Loan Product Base Rate" while providing loans
5defaultDifferentialLendingRatedecimalDefault differential w.r.t "Loan Product Base Rate" while providing loans
6maxDifferentialLendingRatedecimalDefault differential w.r.t "Loan Product Base Rate" while providing loans
7isFloatingInterestRateCalculationAllowedboolean

If true, loan can be given with floating interest calculations

If false, interest rate for the loan is fixed as per the rate derived as on loan application date

 

UI

Loan product create/edit screens will have following additional fields

  • A checkbox "Is Linked To Floating Interest Rates" under section "Terms"
    • If unchecked, existing "Nominal interest rate" attributes would be visible and captured
    • If checked, attributes 2-6 defined above will become visible and be captured
  • A checkbox "Is Floating Interest Rate Calculation Allowed" under section "Interest Recalculation"
    • Only allowed to check if Interest Method is Declining Balance

DB Changes

New table will be added

m_product_loan_floating_rates  
idlongnot null auto increment
loan_product_idlongnot null
is_linked_to_floating_interest_ratesbitnot null default false
base_lending_rates_idlongnot null
interest_rate_differentialdecimalnot null default 0
is_floating_interest_rate_calculation_allowedbitnot null default false
min_differential_lending_ratedecimalnot null default 0
default_differential_lending_ratedecimalnot null default 0
max_differential_lending_ratedecimalnot null default 0

 

Defining Loan

API

Following additional attributes will be added to /mifosng-provider/api/v1/loans view/create/edit APIs

AttributeTypeDescriptionRestrictions
interestRateDifferentialdecimalInterest Rate differential applicable to loan application w.r.t "Loan Product Base Rate"Should be within min/max rage as defined in loan product
isFloatingInterestRateboolean

Is floating interest rate calculation applied for the loan?

If false, flat interest rate as applicable on loan application date

If true, interest rate as applicable from period to period

Only allowed if isFloatingInterestRateCalculationAllowed is true at loan product definition

 

UI

Loan create/edit screens will have following attributes

  • "Nominal interest rate" field will be replace with "Interest Rate Differential" field in case loan product is linked to Floating Interest Rates
  • A checkbox "Is Floating Interest Rate Loan" will be added in case loan product is linked to Floating Interest Rates and isFloatingInterestRateCalculationAllowed is allowed for the loan product

DB Changes

Following fields added to m_loan

m_loan  
is_floating_interest_ratebitnot null default false
interest_rate_differentialdecimalnullable

 

Example Illustration

Below table illustrates what will be the applicable interest rates for any given date period.

 

Loan Product 

Differential Rate

 

(A)

Loan Application

Differential Rate

 

(B)

Date

 

 

(C)

Base Lending Rate in %

(Rates defined as part of

"Base Lending Rate type")

(D)

Floating Interest Rate

(Loan product Linked to

"Base Lending Rate")

(E)=(A)+(B)+(D as of date)

Differential to Base Lending Rate %

(Rates defined as part of

"Differential to Base Lending Rate type")

(F)

Floating Interest Rate

(Loan product Linked to

"Differential to Base Lending Rate type")

(G)=(F)+(E as of the period start date)

2101-10-2010811213
10-10-2010
16-10-2010912
31-10-2010710111
10-11-2010212
15-11-201069
30-11-2010811