blob: 71104585e9e64312369664411f0bb4c7d6641cec [file] [log] [blame]
= Approved amount modification on loans
== Overview
In Apache Fineract, after a loan is disbursed, it is possible to alter the principal amount that the loan was approved with. This means that the amount to be disbursed can be fine-tuned throughout the loan lifecycle. The approved loan amount can either be modified directly or indirectly through different endpoints.
== Supported Loan Type
Approved amount modifications are supported on all loan types.
== Business Events
* Triggers a new business event: Loan Approved Amount Changed
== API Endpoints
=== Modifying approved amount on loans
Fineract supports the direct modification of the approved amount on loans
* *Endpoint*: `/loans/<loan_id>/approved-amount`
* *Alternative Endpoint*: `/loans/external-id/<loan_external_id>/approved-amount`
* *Method*: `PUT`
[source,json]
----
{
"amount": 1000.0,
"locale": "en"
}
----
==== Response Body
[source,json]
----
{
"changes": {
"locale": "en",
"newApprovedAmount": 1000.0,
"oldApprovedAmount": 1500.0
},
"clientId": 6,
"groupId": 10,
"officeId": 2,
"resourceExternalId": "95174ff9-1a75-4d72-a413-6f9b1cb988b7",
"resourceId": 3
}
----
==== Validations
* The approved amount of the loan cannot be lower than the `total principal disbursed + total expected principal + total principal from capitalized income transactions`.
* The approved amount of the loan cannot be set higher, than the proposed amount of the loan or if `allow approved/disbursed over applied amount` configuration is enabled then the calculated threshold.
=== Modifying available disbursement amount on loans
Fineract supports the indirect modification of the approved amount on loans. This is called modifying the available disbursement amount.
[IMPORTANT]
====
Available disbursement amount is only a calculated value used by this endpoint to indirectly update the approved amount of the loan. It is not stored anywhere.
====
The approved amount is calculated as: `total principal disbursed + total expected principal + total principal from capitalized income + "amount" from the request`.
* *Endpoint*: `/loans/<loan_id>/available-disbursement-amount`
* *Alternative Endpoint*: `/loans/external-id/<loan_external_id>/available-disbursement-amount`
* *Method*: `PUT`
[source,json]
----
{
"amount": 100.0,
"locale": "en"
}
----
==== Response Body
[source,json]
----
{
"changes": {
"locale": "en",
"newApprovedAmount": 100.0,
"oldApprovedAmount": 1000.0,
"newAvailableDisbursementAmount": 100.0,
"oldAvailableDisbursementAmount": 1000.0
},
"clientId": 6,
"groupId": 10,
"officeId": 2,
"resourceExternalId": "95174ff9-1a75-4d72-a413-6f9b1cb988b7",
"resourceId": 3
}
----
==== Validations
* The available disbursement amount cannot be lower than 0.
* The approved amount of the loan cannot be set higher, than the proposed amount of the loan or if `allow approved/disbursed over applied amount` configuration is enabled then the calculated threshold. This means that the new available disbursement amount cannot be higher than `maximumLoanPrincipalThreshold - total principal disbursed - total expected principal - total principal from capitalized income`
=== Approved amount history
Modifying the approved amount of the loan through either endpoint also creates a history entry that can be used to observe the changes overtime.
* *Endpoint*: `/loans/<loan_id>/approved-amount`
* *Alternative Endpoint*: `/loans/external-id/<loan_external_id>/approved-amount`
* *Method*: `GET`
==== Response Body
[source,json]
----
[
{
"loanId": 152,
"externalLoanId": "9e058913-3de8-4f6e-9e09-4b2067c4bb91",
"newApprovedAmount": 800.000000,
"oldApprovedAmount": 1000.000000,
"dateOfChange": "2025-08-05T16:35:43.427229+02:00"
},
{
"loanId": 152,
"externalLoanId": "9e058913-3de8-4f6e-9e09-4b2067c4bb91",
"newApprovedAmount": 600.000000,
"oldApprovedAmount": 800.000000,
"dateOfChange": "2025-08-05T16:35:43.543779+02:00"
},
{
"loanId": 152,
"externalLoanId": "9e058913-3de8-4f6e-9e09-4b2067c4bb91",
"newApprovedAmount": 400.000000,
"oldApprovedAmount": 600.000000,
"dateOfChange": "2025-08-05T16:35:43.603855+02:00"
}
]
----