This is an automated email from the ASF dual-hosted git repository.

adamsaghy pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git


The following commit(s) were added to refs/heads/develop by this push:
     new 87c0a02402 FINERACT-2326: [DOC] Interest rate change documentation
87c0a02402 is described below

commit 87c0a02402217dcffeb2e72c83b0b3543793b883
Author: Soma Sörös <[email protected]>
AuthorDate: Mon Aug 11 14:50:19 2025 +0200

    FINERACT-2326: [DOC] Interest rate change documentation
---
 .../src/docs/en/chapters/features/index.adoc       |   1 +
 .../interest-rate-change-progressive-loans.adoc    | 204 +++++++++++++++++++++
 2 files changed, 205 insertions(+)

diff --git a/fineract-doc/src/docs/en/chapters/features/index.adoc 
b/fineract-doc/src/docs/en/chapters/features/index.adoc
index 79cebf28e2..51f18b1d97 100644
--- a/fineract-doc/src/docs/en/chapters/features/index.adoc
+++ b/fineract-doc/src/docs/en/chapters/features/index.adoc
@@ -6,3 +6,4 @@ include::capitalized-income.adoc[leveloffset=+1]
 include::buydown-fee.adoc[leveloffset=+1]
 include::approved-amount-modification.adoc[leveloffset=+1]
 include::backdated_interest_modification.adoc[leveloffset=+1]
+include::interest-rate-change-progressive-loans.adoc[leveloffset=+1]
\ No newline at end of file
diff --git 
a/fineract-doc/src/docs/en/chapters/features/interest-rate-change-progressive-loans.adoc
 
b/fineract-doc/src/docs/en/chapters/features/interest-rate-change-progressive-loans.adoc
new file mode 100644
index 0000000000..0d8df6bd6c
--- /dev/null
+++ 
b/fineract-doc/src/docs/en/chapters/features/interest-rate-change-progressive-loans.adoc
@@ -0,0 +1,204 @@
+
+= Interest Rate Modification For Progressive Loan
+:description: Developer documentation for the interest rate modification 
feature in Apache Fineract
+:keywords: fineract, loans, interest rate, progressive loans, EMI, API, 
developer
+
+== Overview
+
+The Original Interest Rate Modification feature allows updating the interest 
rate for **active loans**. The updated interest rate can be applied only for 
active loans and effective date should be in the future.
+
+This capability is introduced to support flexible interest rate management in 
loan lifecycles, reflecting changes due to inflation, risk reassessment, or 
customer-specific conditions.
+
+New Progressive Loan Interest Change Modification feature can be applied for 
overpaid, charged off or even backdated cases, which makes it much more usable.
+
+== Scope and Limitations
+
+* Only supported for **progressive** loan types.
+* Loans must be **disbursed**
+* Interest rate modifications apply from a specified **applied date**, which 
can be backdated from the **original disbursement date** onward.
+* **Paid EMIs (Equal Monthly Installments) and interest amounts may be 
affected** by backdated interest rate changes.
+* The modified interest rate affects **EMI amounts**
+* Installment counts are not affected
+* **Reversals/backdated repayments** are allowed after modification.
+
+== Feature Behavior
+
+* When a new interest rate is applied, the system recalculates EMI values 
starting from the **applied date**.
+* If the applied date is in the past, previously paid installments will be 
reprocessed under the new interest rate.
+* The updated interest rate is effective **from the applied date itself**.
+* Repayment schedule is updated using the current recalculation strategy.
+
+== Configuration
+
+Interest calculation and interest recalculation strategies are **inherited 
from the loan product** configuration at the time of loan application.
+
+This means:
+
+* The interest calculation method (e.g., declining balance, flat) and
+* The interest recalculation strategy
+
+are **fixed per loan account** once the loan is created.
+
+As a result, **no further changes** to these configurations are possible after 
loan creation. Any interest rate modifications must operate within the 
originally defined calculation and recalculation strategies.
+
+== API Specification
+
+=== Endpoint
+
+`POST https://DomainName/api/v1/rescheduleloans`
+
+==== related API-s
+Retrieve a Loan Reschedule Request
+
+`GET https://DomainName/api/v1/rescheduleloans/{requestId}`
+
+Retrieve a Preview of The New Loan Repayment Schedule
+
+`GET 
https://DomainName/api/v1/rescheduleloans/{requestId}?command=previewLoanReschedule`
+
+Reject a Loan Reschedule Request
+
+`POST https://DomainName/api/v1/rescheduleloans/{requestId}?command=reject`
+
+Approve a Loan Reschedule Request
+
+`POST https://DomainName/api/v1/rescheduleloans/{requestId}?command=approve`
+
+=== Request Payload
+
+The following fields are accepted in the request body for interest rate 
modification. All date fields must follow the format specified by the 
`dateFormat` field, and parsing is performed using the specified `locale`.
+
+[cols="2,3,5", options="header"]
+|===
+| Field | Type | Description
+
+| `loanId`
+| Long
+| Identifier of the loan to be modified. Must refer to a disbursed progressive 
loan.
+
+| `newInterestRate`
+| BigDecimal
+| Required. The new interest rate to be applied. Must be zero or positive, and 
comply with the loan product’s min/max rate constraints.
+
+| `dateFormat`
+| String
+| Required when any date fields are provided. Defines the expected format of 
date values (e.g., `yyyy-MM-dd`, `dd-MM-yyyy`, etc.).
+
+| `locale`
+| String
+| Required. Specifies the locale (e.g., `en`, `fr`, `in`) used for parsing 
numbers and dates.
+
+| `submittedOnDate`
+| String
+| Optional. The date the request is submitted. If provided, must match the 
specified `dateFormat`.
+
+| `rescheduleFromDate`
+| String
+| Required. The date from which the new interest rate becomes effective. Must 
be on or after the loan disbursement date. Format must match `dateFormat`.
+
+| `rescheduleReasonComment`
+| String
+| Optional. A free-text comment describing the reason for the interest rate 
change.
+
+| `rescheduleReasonId`
+| Long
+| Optional. ID referencing a predefined rescheduling reason (e.g., from a 
dropdown or lookup table).
+
+|===
+
+[NOTE]
+====
+The following fields are **not applicable** in the context of an interest rate 
change request:
+
+* `adjustedDueDate`
+* `extraTerms`
+* `graceOnPrincipal`
+* `graceOnInterest`
+
+These parameters are reserved for other loan rescheduling operations.
+====
+
+==== newInterestRate
+
+When processing an interest rate modification request, the system validates 
the `newInterestRate` parameter as follows:
+
+* The value must be a valid `BigDecimal` parsed with the appropriate locale.
+* The interest rate must be **zero or positive**.
+* If defined on the loan product, the new interest rate must satisfy the 
following boundaries:
+** It must be **greater than or equal to** the product-level 
`minNominalInterestRatePerPeriod`.
+** It must be **less than or equal to** the product-level 
`maxNominalInterestRatePerPeriod`.
+
+These boundaries are enforced using the product's configured range at the time 
the loan was applied. If no minimum or maximum is set on the product, only the 
zero-or-positive constraint is enforced.
+
+=== Example
+
+==== Example Create Request
+`POST https://DomainName/api/v1/rescheduleloans`
+
+```
+POST rescheduleloans
+Content-Type: application/json
+```
+```JSON
+{
+"loanId": 1,
+"graceOnPrincipal": null,
+"graceOnInterest": null,
+"extraTerms": null,
+"rescheduleFromDate": "04 December 2014",
+"dateFormat": "dd MMMM yyyy",
+"locale": "en",
+"recalculateInterest": null,
+"submittedOnDate": "04 September 2014",
+"newInterestRate" : 28,
+"rescheduleReasonId": 1
+}
+```
+
+Response
+
+```JSON
+{
+    "loanId": 1,
+    "resourceId": 2
+}
+```
+
+==== Example Approval
+
+`POST https://DomainName/api/v1/rescheduleloans/{requestId}?command=approve`
+
+```
+POST rescheduleloans/2?command=approve
+Content-Type: application/json
+```
+```JSON
+{
+"locale": "en",
+"dateFormat": "dd MMMM yyyy",
+"approvedOnDate": "11 September 2014"
+}
+```
+
+```JSON
+
+
+{
+"loanId": 1,
+"resourceId": 2,
+"changes": {
+"locale": "en",
+"dateFormat": "dd MMMM yyyy",
+"approvedOnDate": "11 September 2014",
+"approvedByUserId": 3
+}
+}
+```
+
+== Developer Notes
+
+The core concept is that the `AdvancedPaymentScheduleTransactionProcessor` 
processes transactions in order of their effective date, allowing it to handle 
backdated transaction cases.
+
+The transaction processor uses the `EMICalculator` to manage interest rate 
changes over time, ensuring that changes only affect future transactions 
relative to the actual processing transaction. The 
`ProgressiveLoanInterestScheduleModel` is responsible for holding and 
calculating interest for future installments.
+
+The underlying principle is to split repayment periods into smaller interest 
periods, enabling the calculation of interest for partial repayment periods. 
This approach makes it easier to adjust interest rates for specific interest 
periods as needed.

Reply via email to