Loan rescheduling



Target release
Document statusDRAFT
Document ownerSander van der Heyden


We have identified are 4 basic scenarios when rescheduling a loan: 

  • Extension of the loan term by adding extra instalments to the loan 
  • Change of the due date of each of the future instalments by X days (to allow shifting of days)
  • Give the client an extra grace period of X instalments to catch up on repayments
  • Adjust the interest rate for the remainder of the loan.

In certain situations one or more of the above could apply at the same time, such as extending the loan term, and giving a grace period at the same time. The different scenarios might or might not affect the interest calculation on the loan. So in cases whereby the loan term is extended it might be still using the same original Principal and interest amount , but there should also be a possibility of the interest increasing.


  • We can already do a very simplistic form of rescheduling, by waiving outstanding interest on a loan. Although this is not rescheduling perse it will still be available to cover (or extend) scenarios described for this topic
  • The undo disbursement feature can still be used to correct basic mistakes on loans that have just been disbursed. For instance loan term of 4 weeks was selected instead of 4 months etc. This obviously has the trade-off for the user that they need to re-enter payments. But the expectation is that this is normally identified very early on in the loan schedule. 

Background and strategic fit

Managing the portfolio in arrears is a very difficult tasks for MFI's in which they require a lot of tools that increase chances of recovery on non performing loans. Being able to reschedule loans by allowing clients to repay at a slower pace, or granting an extra grace period greatly increases chances of recovery. Many MFI's have already requested this feature, and other systems actively offer it as well.


Requirements/User Stories

#TitleUser StoryImportanceNotes
1Extend loan repayment periodAs a Branch Manager, I want to extend the loan term for a client who has difficulty to repay by a number of instalmentsMust Have 
2Change repayment dateAs a loan officer, I want to change the day on which payments are due for a client when they change meeting daysMust HaveTBD whether the actor is the Loan officer or the BM as well.
3Add a mid-loanterm grace periodAs a Branch Manager, I want to add a grace period to an existing loan schedule to allow clients to catch up on repaymentsMust HaveGrace period can be either on P, or P+I
4Adjust interest rate for remainder of loanAs a Branch Manager, I want to adjust the interest rate for the remainder of the loan to allow clients to catch up on repaymentsNice to HaveRight now only for future instalments to avoid reprocessing of payments and issues arising around accounting (close periods etc)
5Revert to original scheduleAs a Branch Manager, I want to be able to revert a loan to the original schedule, to fix any mistakes made by clientsMust HaveAnother solution: Undo reschedule feature, that would remove it again.
6View rescheduled loansAs a Branch Manager, I want to be able to see loans that have been rescheduled and who performed the rescheduleMust Have 
7View previous schedulesAs a loanofficer, I want to be able to view previous loan schedules for a loan that has been rescheduledMust Have 


Business Rules



Rescheduledon_userIDUserID who approved the reschedule 


For Loan rescheduling request

LoanIDLoan ID 
StatusStatus of the reschedule request (Similar Enum to loans etc)
from installmentReschedule starting at this instalment # 

Grace on Principal

Integer describing how many instalments will be added with 0 principalInstalments will be added straight after the from instalment.
Grace on InterestInteger describing how many instalments will be added with 0 interestGrace on P and I will be combined into 1 if applicable.
Change instalment dateNew Date for the selected instalmentUsed to reschedule rest of the loan from this instalment forward
Extra TermsInteger for # of extra terms to add at end of schedule 
Interest RateNew Interest rate for the loanApplied to the remainder of the loan.
Recalculate interest?Boolean , always true if Interest is entered.If true then the new schedule will recalculate the interest using the P outstanding at starting instalment, and the new end-date of loan.
Reschedule_ReasonCodeValueLink to Code listing reasons for rescheduling
Reschedule_CommentsFree textFree text description to be used in addition to the CV.
Submitted OnDate 
Submitted ByUserID 
Approved On DateDate 
Approved ByUserID 
Declined OnDate 
Declined ByUserID



Loan Schedule History

Loan Reschedule IDID Of the reschedule request 
From Date  
Due Date  
Instalment #  
....This item just follows same attributes as current loan schedule table. 

Security and Permissions

The feature should follow regular security rules, so permissions required for:

  • Ability to do maker/checker on the reschedule feature.
  • Creating a request (Maker)
  • Approving (Checker)
  • Both can be done in 1 step if maker-checker is off for the feature.

Mifos Functionality Enhancements

  • TBD


New Screens


Changes to Existing Screens

  • TBD


Changes/Enhancements to Batch Jobs


Changes/Enhancements to Accounting Entries

No changes

User interaction and design


Exception Handling

Exceptions should be raised in cases whereby:

  • Instalments that have been completed before are adjusted
  • Instalments that fall in closed accounting periods are adjusted
  • Account transfers have been done after date of (proposed) adjustment


No new reports or changes to existing reports needed.


  • /Loans/{loanId} needs to be adjusted to reflect that the loan was rescheduled and at what time
  • /rescheduleloans - New API to cover creation, approving etc. 
  • /rescheduleloans/{id} view current and historical schedule for loan incl params
  • /rescheduleloans/{id}?command=approve/decline 
  • /rescheduleloans/{id}?command=undo




Below is a list of questions to be addressed as a result of this requirements document:

What do we do with product level limits, such as max loan term, min/max interest etc. Proposal is to ignore them, as this is already a feature for exception cases.
Do we want to store historical schedules in the same loan schedule table? This might have negative effects on performance of that table. It also avoids the need to go in and change all areas of code (reports/jobs/loans package) that use this code. 
Right now the reschedule is a simple maker/checker workflow, do we want to extend it to the more extensive, create / pending approval / approved / declined workflow? 
We have the ability to classify loans as NPA, do we need to automatically do this for restructured loans? (some regulations do require this) 
When storing the old schedule for comparison, do we also copy the derived fields (paid etc) ? 
Do we allow loan repayments backdated before date of reschedule? 
In some banking regulations only one reschedule per loan is allowed (to avoid it being used to cover long debts, and force those into write-offs), do we also want to incorporate that restriction? 


Out of Scope

  • Flexible loan schedules. Even though the feature might re-use a lot of code from this feature we do not want to implement it straight away to reduce complexity. At the same time this process should take place before creating loan, rescheduling is after the disbursement.
  • Rescheduling of interest on past instalments 
  • Rescheduling of instalments that have already been fully or partially paid.