FINERACT-2317: Fix updating the available disbursed amount to zero after loan approval

This commit is contained in:
Oleksii Novikov
2025-08-21 11:35:23 +02:00
committed by Adam Saghy
parent 8fe9dbc614
commit 641dbe26d7
6 changed files with 339 additions and 280 deletions
@@ -1033,6 +1033,10 @@ public final class ErrorMessageHelper {
return "The parameter `amount` must be greater than or equal to 0.";
}
public static String updateAvailableDisbursementLoanCannotBeZeroAsNothingWasDisbursed() {
return "Failed data validation due to: cannot.be.zero.as.nothing.was.disbursed.yet.";
}
public static String wrongValueInLineInBuyDownFeeTab(String resourceId, int line, List<List<String>> actualList,
List<String> expected) {
String actual = actualList.stream().map(Object::toString).collect(Collectors.joining(System.lineSeparator()));
@@ -5400,6 +5400,32 @@ public class LoanStepDef extends AbstractStepDef {
assertThat(developerMessage).isEqualTo(ErrorMessageHelper.updateAvailableDisbursementLoanLessMinAllowedAmountFailure());
}
@Then("Updating the loan's available disbursement amount to {string} is forbidden because cannot be zero as nothing was disbursed")
public void updateLoanAvailableDisbursementAmountForbiddenCannotBeZeroAsNothingWasDisbursed(final String amount) throws IOException {
final Response<PostLoansResponse> loanResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
final long loanId = loanResponse.body().getLoanId();
final Response<GetLoansLoanIdResponse> loanDetailsResponse = loansApi.retrieveLoan(loanId, false, "transactions", "", "").execute();
ErrorHelper.checkSuccessfulApiCall(loanDetailsResponse);
final PutLoansAvailableDisbursementAmountRequest modifyLoanAvailableDisbursementAmountRequest = new PutLoansAvailableDisbursementAmountRequest()
.locale(LOCALE_EN).amount(new BigDecimal(amount));
final Response<PutLoansAvailableDisbursementAmountResponse> modifyLoanAvailableDisbursementAmountResponse = loansApi
.modifyLoanAvailableDisbursementAmount(loanId, modifyLoanAvailableDisbursementAmountRequest).execute();
ErrorResponse errorDetails = ErrorResponse.from(modifyLoanAvailableDisbursementAmountResponse);
assertThat(errorDetails.getHttpStatusCode()).isEqualTo(403);
Object errorArgs = errorDetails.getErrors().getFirst().getArgs().getFirst().getValue();
String developerMessage;
if (errorArgs instanceof Map errorArgsMap) {
developerMessage = (String) errorArgsMap.get("developerMessage");
} else {
developerMessage = errorDetails.getDeveloperMessage();
}
assertThat(developerMessage).isEqualTo(ErrorMessageHelper.updateAvailableDisbursementLoanCannotBeZeroAsNothingWasDisbursed());
}
private Response<PostLoansLoanIdTransactionsResponse> addInterestRefundTransaction(final double amount, final Long transactionId)
throws IOException {
final Response<PostLoansResponse> loanResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
@@ -7533,280 +7533,6 @@ Feature: Loan
When Loan Pay-off is made on "3 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3869
Scenario: Verify update available disbursement amount for progressive loan - UC1
When Admin sets the business date to "01 January 2025"
When Admin creates a client with random data
When Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALCULATION_DAILY_TILL_PRECLOSE_PMT_ALLOC_1 | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025"
And Update loan available disbursement amount is forbidden with amount "1001" due to exceed applied amount
Then Update loan available disbursement amount is forbidden with amount "-100" due to min allowed amount
Then Update loan available disbursement amount by external-id with new amount "600" value
When Admin successfully disburse the loan on "01 January 2025" with "600" EUR transaction amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3919
Scenario: Verify update available disbursement amount after undo disbursement for single disb progressive loan - UC3
When Admin sets the business date to "1 January 2025"
And Admin creates a client with random data
When Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALCULATION_DAILY_TILL_PRECLOSE | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025"
And Admin successfully disburse the loan on "1 January 2025" with "100" EUR transaction amount
Then Update loan available disbursement amount by external-id with new amount "600" value
When Admin successfully undo disbursal
Then Admin fails to disburse the loan on "1 January 2025" with "750" EUR transaction amount due to exceed approved amount
When Admin successfully disburse the loan on "01 January 2025" with "700" EUR transaction amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3920
Scenario: Verify update available disbursement amount with approved over applied amount for progressive multidisbursal loan with percentage overAppliedCalculationType - UC4
When Admin sets the business date to "1 January 2025"
And Admin creates a client with random data
And Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_RECALC_EMI_360_30_MULTIDISB_APPROVED_OVER_APPLIED_CAPITALIZED_INCOME | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025"
And Admin successfully disburse the loan on "1 January 2025" with "900" EUR transaction amount
Then Update loan available disbursement amount is forbidden with amount "601" due to exceed applied amount
Then Update loan available disbursement amount with new amount "500" value
And Admin successfully disburse the loan on "1 January 2025" with "600" EUR transaction amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3921
Scenario: Verify update available disbursement amount with approved over applied amount and capitalized income for progressive loan with percentage overAppliedCalculationType - UC8_1
When Admin sets the business date to "1 January 2025"
And Admin creates a client with random data
And Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_RECALC_EMI_360_30_APPROVED_OVER_APPLIED_PERCENTAGE_CAPITALIZED_INCOME | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025"
And Admin successfully disburse the loan on "1 January 2025" with "900" EUR transaction amount
Then Update loan available disbursement amount is forbidden with amount "700" due to exceed applied amount
Then Update loan available disbursement amount with new amount "500" value
And Capitalized income with payment type "AUTOPAY" on "1 January 2025" is forbidden with amount "601" while exceed approved amount
And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "1 January 2025" with "600" EUR transaction amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3922
Scenario: Verify update available disbursement amount with capitalized income for progressive loan - UC8_2
When Admin sets the business date to "1 January 2025"
And Admin creates a client with random data
And Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025"
And Admin successfully disburse the loan on "1 January 2025" with "600" EUR transaction amount
Then Update loan available disbursement amount is forbidden with amount "500" due to exceed applied amount
And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "1 January 2025" with "200" EUR transaction amount
Then Update loan available disbursement amount with new amount "150" value
And Capitalized income with payment type "AUTOPAY" on "1 January 2025" is forbidden with amount "151" while exceed approved amount
And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "1 January 2025" with "150" EUR transaction amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3923
Scenario: Verify update available disbursement amount with capitalized income for progressive multidisbursal loan - UC8_3
When Admin sets the business date to "1 January 2025"
And Admin creates a client with random data
And Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_RECALC_EMI_360_30_MULTIDISB_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "1 January 2025" with "900" amount and expected disbursement date on "1 January 2025"
And Admin successfully disburse the loan on "1 January 2025" with "600" EUR transaction amount
Then Update loan available disbursement amount is forbidden with amount "500" due to exceed applied amount
And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "1 January 2025" with "200" EUR transaction amount
Then Update loan available disbursement amount by external-id with new amount "200" value
Then Admin fails to disburse the loan on "1 January 2025" with "201" EUR transaction amount due to exceed approved amount
And Admin successfully disburse the loan on "1 January 2025" with "200" EUR transaction amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3924
Scenario: Verify update available disbursement amount before disbursement for single disb cumulative loan - UC5_1
When Admin sets the business date to "1 January 2025"
And Admin creates a client with random data
When Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP1_INTEREST_FLAT | 1 January 2025 | 1000 | 0 | DECLINING_BALANCE | SAME_AS_REPAYMENT_PERIOD | EQUAL_INSTALLMENTS | 3 | MONTHS | 1 | MONTHS | 3 | 0 | 0 | 0 | PENALTIES_FEES_INTEREST_PRINCIPAL_ORDER |
And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025"
Then Update loan available disbursement amount with new amount "900" value
Then Admin fails to disburse the loan on "1 January 2025" with "901" EUR transaction amount due to exceed approved amount
And Admin successfully disburse the loan on "1 January 2025" with "900" EUR transaction amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3925
Scenario: Verify update available disbursement amount before disbursement for single disb progressive loan - UC5_2
When Admin sets the business date to "1 January 2025"
And Admin creates a client with random data
When Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALCULATION_DAILY_TILL_PRECLOSE | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025"
Then Update loan available disbursement amount by external-id with new amount "900" value
Then Admin fails to disburse the loan on "1 January 2025" with "901" EUR transaction amount due to exceed approved amount
And Admin successfully disburse the loan on "1 January 2025" with "900" EUR transaction amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3926
Scenario: Verify available disbursement amount change for progressive multidisbursal loan that doesn't expect tranches - UC6
When Admin sets the business date to "01 January 2025"
When Admin creates a client with random data
When Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_MULTIDISBURSE | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025"
When Admin successfully disburse the loan on "01 January 2025" with "200" EUR transaction amount
Then Loan Repayment schedule has 6 periods, with the following data for periods:
| Nr | Days | Date | Paid date | Balance of loan | Principal due | Interest | Fees | Penalties | Due | Paid | In advance | Late | Outstanding |
| | | 01 January 2025 | | 200.0 | | | 0.0 | | 0.0 | 0.0 | | | |
| 1 | 31 | 01 February 2025 | | 167.15 | 32.85 | 1.17 | 0.0 | 0.0 | 34.02 | 0.0 | 0.0 | 0.0 | 34.02 |
| 2 | 28 | 01 March 2025 | | 134.11 | 33.04 | 0.98 | 0.0 | 0.0 | 34.02 | 0.0 | 0.0 | 0.0 | 34.02 |
| 3 | 31 | 01 April 2025 | | 100.87 | 33.24 | 0.78 | 0.0 | 0.0 | 34.02 | 0.0 | 0.0 | 0.0 | 34.02 |
| 4 | 30 | 01 May 2025 | | 67.44 | 33.43 | 0.59 | 0.0 | 0.0 | 34.02 | 0.0 | 0.0 | 0.0 | 34.02 |
| 5 | 31 | 01 June 2025 | | 33.81 | 33.63 | 0.39 | 0.0 | 0.0 | 34.02 | 0.0 | 0.0 | 0.0 | 34.02 |
| 6 | 30 | 01 July 2025 | | 0.0 | 33.81 | 0.2 | 0.0 | 0.0 | 34.01 | 0.0 | 0.0 | 0.0 | 34.01 |
Then Loan Repayment schedule has the following data in Total row:
| Principal due | Interest | Fees | Penalties | Due | Paid | In advance | Late | Outstanding |
| 200.0 | 4.11 | 0.0 | 0.0 | 204.11 | 0.0 | 0.0 | 0.0 | 204.11 |
Then Update loan available disbursement amount with new amount "400" value
Then Admin fails to disburse the loan on "1 January 2025" with "420" EUR transaction amount due to exceed approved amount
When Admin successfully disburse the loan on "01 January 2025" with "399" EUR transaction amount
Then Update loan available disbursement amount is forbidden with amount "500" due to exceed applied amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3927
Scenario: Verify available disbursement amount change is forbidden with lower value for progressive multidisbursal loan that expects tranches - UC7_1
When Admin sets the business date to "01 January 2025"
When Admin creates a client with random data
When Admin creates a fully customized loan with three expected disbursements details and following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | 1st_tranche_disb_expected_date | 1st_tranche_disb_principal | 2nd_tranche_disb_expected_date | 2nd_tranche_disb_principal | 3rd_tranche_disb_expected_date | 3rd_tranche_disb_principal |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_MULTIDISBURSE_EXPECT_TRANCHE | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | 01 January 2025 | 300.0 | 02 January 2025 | 200.0 | 03 January 2025 | 500.0 |
And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025"
Then Loan Tranche Details tab has the following data:
| Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount |
| 01 January 2025 | | 300.0 | |
| 02 January 2025 | | 200.0 | |
| 03 January 2025 | | 500.0 | |
# --- disbursement - 1 January, 2025 ---
When Admin successfully disburse the loan on "01 January 2025" with "300" EUR transaction amount
And Loan Transactions tab has the following data:
| Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
| 01 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 300.0 | false | false |
When Admin sets the business date to "02 January 2025"
Then Update loan available disbursement amount is forbidden with amount "100" due to exceed applied amount
When Admin sets the business date to "03 January 2025"
Then Update loan available disbursement amount is forbidden with amount "100" due to exceed applied amount
When Admin sets the business date to "04 January 2025"
Then Update loan available disbursement amount is forbidden with amount "100" due to exceed applied amount
When Admin successfully disburse the loan on "02 January 2025" with "200" EUR transaction amount
When Admin successfully disburse the loan on "03 January 2025" with "500" EUR transaction amount
Then Loan Tranche Details tab has the following data:
| Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount |
| 01 January 2025 | 01 January 2025 | 300.0 | |
| 02 January 2025 | 02 January 2025 | 200.0 | |
| 03 January 2025 | 03 January 2025 | 500.0 | |
And Loan Transactions tab has the following data:
| Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
| 01 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 300.0 | false | false |
| 02 January 2025 | Disbursement | 200.0 | 0.0 | 0.0 | 0.0 | 0.0 | 500.0 | false | false |
| 03 January 2025 | Disbursement | 500.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1000.0 | false | false |
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3928
Scenario: Verify available disbursement amount change with greater value above approved amount for progressive multidisbursal loan that expects tranches - UC7_2
When Admin sets the business date to "01 January 2025"
When Admin creates a client with random data
When Admin creates a fully customized loan with three expected disbursements details and following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | 1st_tranche_disb_expected_date | 1st_tranche_disb_principal | 2nd_tranche_disb_expected_date | 2nd_tranche_disb_principal | 3rd_tranche_disb_expected_date | 3rd_tranche_disb_principal |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_MULTIDISBURSE_EXPECT_TRANCHE | 01 January 2025 | 1200 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | 01 January 2025 | 300.0 | 02 January 2025 | 200.0 | 03 January 2025 | 500.0 |
And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025"
Then Loan Tranche Details tab has the following data:
| Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount |
| 01 January 2025 | | 300.0 | |
| 02 January 2025 | | 200.0 | |
| 03 January 2025 | | 500.0 | |
# --- disbursement - 1 January, 2025 ---
When Admin successfully disburse the loan on "01 January 2025" with "300" EUR transaction amount
When Admin sets the business date to "02 January 2025"
Then Update loan available disbursement amount with new amount "200" value
When Admin successfully disburse the loan on "02 January 2025" with "200" EUR transaction amount
When Admin sets the business date to "03 January 2025"
Then Admin fails to disburse the loan on "03 January 2025" with "800" EUR transaction amount due to exceed approved amount
When Admin successfully disburse the loan on "03 January 2025" with "700" EUR transaction amount
Then Loan Tranche Details tab has the following data:
| Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount |
| 01 January 2025 | 01 January 2025 | 300.0 | |
| 02 January 2025 | 02 January 2025 | 200.0 | |
| 03 January 2025 | 03 January 2025 | 700.0 | |
And Loan Transactions tab has the following data:
| Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
| 01 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 300.0 | false | false |
| 02 January 2025 | Disbursement | 200.0 | 0.0 | 0.0 | 0.0 | 0.0 | 500.0 | false | false |
| 03 January 2025 | Disbursement | 700.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1200.0 | false | false |
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3929
Scenario: Verify available disbursement amount change with greater value under approved amount for progressive multidisbursal loan that expects tranches - UC7_3
When Admin sets the business date to "01 January 2025"
When Admin creates a client with random data
When Admin creates a fully customized loan with three expected disbursements details and following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | 1st_tranche_disb_expected_date | 1st_tranche_disb_principal | 2nd_tranche_disb_expected_date | 2nd_tranche_disb_principal | 3rd_tranche_disb_expected_date | 3rd_tranche_disb_principal |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_MULTIDISBURSE_EXPECT_TRANCHE | 01 January 2025 | 1200 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | 01 January 2025 | 300.0 | 02 January 2025 | 200.0 | 03 January 2025 | 300.0 |
And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025"
Then Loan Tranche Details tab has the following data:
| Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount |
| 01 January 2025 | | 300.0 | |
| 02 January 2025 | | 200.0 | |
| 03 January 2025 | | 300.0 | |
# --- disbursement - 1 January, 2025 ---
When Admin successfully disburse the loan on "01 January 2025" with "300" EUR transaction amount
When Admin sets the business date to "02 January 2025"
Then Update loan available disbursement amount by external-id with new amount "150" value
When Admin successfully disburse the loan on "02 January 2025" with "300" EUR transaction amount
When Admin sets the business date to "03 January 2025"
Then Admin fails to disburse the loan on "03 January 2025" with "400" EUR transaction amount due to exceed approved amount
When Admin successfully disburse the loan on "03 January 2025" with "350" EUR transaction amount
Then Loan Tranche Details tab has the following data:
| Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount |
| 01 January 2025 | 01 January 2025 | 300.0 | |
| 02 January 2025 | 02 January 2025 | 300.0 | |
| 03 January 2025 | 03 January 2025 | 350.0 | |
And Loan Transactions tab has the following data:
| Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
| 01 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 300.0 | false | false |
| 02 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 600.0 | false | false |
| 03 January 2025 | Disbursement | 350.0 | 0.0 | 0.0 | 0.0 | 0.0 | 950.0 | false | false |
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3963
Scenario: Verify Progressive Loan reschedule by extending repayment period: Basic scenario without downpayment, flat interest type
When Admin sets the business date to "01 June 2024"
@@ -0,0 +1,297 @@
@LoanUpdateAvailableDisbursementAmount
Feature: LoanUpdateAvailableDisbursementAmount
@TestRailId:C3869
Scenario: Verify update available disbursement amount for progressive loan - UC1
When Admin sets the business date to "01 January 2025"
When Admin creates a client with random data
When Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALCULATION_DAILY_TILL_PRECLOSE_PMT_ALLOC_1 | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025"
And Update loan available disbursement amount is forbidden with amount "1001" due to exceed applied amount
Then Update loan available disbursement amount is forbidden with amount "-100" due to min allowed amount
Then Update loan available disbursement amount by external-id with new amount "600" value
When Admin successfully disburse the loan on "01 January 2025" with "600" EUR transaction amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3919
Scenario: Verify update available disbursement amount after undo disbursement for single disb progressive loan - UC3
When Admin sets the business date to "1 January 2025"
And Admin creates a client with random data
When Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALCULATION_DAILY_TILL_PRECLOSE | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025"
And Admin successfully disburse the loan on "1 January 2025" with "100" EUR transaction amount
Then Update loan available disbursement amount by external-id with new amount "600" value
When Admin successfully undo disbursal
Then Admin fails to disburse the loan on "1 January 2025" with "750" EUR transaction amount due to exceed approved amount
When Admin successfully disburse the loan on "01 January 2025" with "700" EUR transaction amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3920
Scenario: Verify update available disbursement amount with approved over applied amount for progressive multidisbursal loan with percentage overAppliedCalculationType - UC4
When Admin sets the business date to "1 January 2025"
And Admin creates a client with random data
And Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_RECALC_EMI_360_30_MULTIDISB_APPROVED_OVER_APPLIED_CAPITALIZED_INCOME | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025"
And Admin successfully disburse the loan on "1 January 2025" with "900" EUR transaction amount
Then Update loan available disbursement amount is forbidden with amount "601" due to exceed applied amount
Then Update loan available disbursement amount with new amount "500" value
And Admin successfully disburse the loan on "1 January 2025" with "600" EUR transaction amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3921
Scenario: Verify update available disbursement amount with approved over applied amount and capitalized income for progressive loan with percentage overAppliedCalculationType - UC8_1
When Admin sets the business date to "1 January 2025"
And Admin creates a client with random data
And Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_RECALC_EMI_360_30_APPROVED_OVER_APPLIED_PERCENTAGE_CAPITALIZED_INCOME | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025"
And Admin successfully disburse the loan on "1 January 2025" with "900" EUR transaction amount
Then Update loan available disbursement amount is forbidden with amount "700" due to exceed applied amount
Then Update loan available disbursement amount with new amount "500" value
And Capitalized income with payment type "AUTOPAY" on "1 January 2025" is forbidden with amount "601" while exceed approved amount
And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "1 January 2025" with "600" EUR transaction amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3922
Scenario: Verify update available disbursement amount with capitalized income for progressive loan - UC8_2
When Admin sets the business date to "1 January 2025"
And Admin creates a client with random data
And Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025"
And Admin successfully disburse the loan on "1 January 2025" with "600" EUR transaction amount
Then Update loan available disbursement amount is forbidden with amount "500" due to exceed applied amount
And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "1 January 2025" with "200" EUR transaction amount
Then Update loan available disbursement amount with new amount "150" value
And Capitalized income with payment type "AUTOPAY" on "1 January 2025" is forbidden with amount "151" while exceed approved amount
And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "1 January 2025" with "150" EUR transaction amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3923
Scenario: Verify update available disbursement amount with capitalized income for progressive multidisbursal loan - UC8_3
When Admin sets the business date to "1 January 2025"
And Admin creates a client with random data
And Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_RECALC_EMI_360_30_MULTIDISB_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "1 January 2025" with "900" amount and expected disbursement date on "1 January 2025"
And Admin successfully disburse the loan on "1 January 2025" with "600" EUR transaction amount
Then Update loan available disbursement amount is forbidden with amount "500" due to exceed applied amount
And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "1 January 2025" with "200" EUR transaction amount
Then Update loan available disbursement amount by external-id with new amount "200" value
Then Admin fails to disburse the loan on "1 January 2025" with "201" EUR transaction amount due to exceed approved amount
And Admin successfully disburse the loan on "1 January 2025" with "200" EUR transaction amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3924
Scenario: Verify update available disbursement amount before disbursement for single disb cumulative loan - UC5_1
When Admin sets the business date to "1 January 2025"
And Admin creates a client with random data
When Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP1_INTEREST_FLAT | 1 January 2025 | 1000 | 0 | DECLINING_BALANCE | SAME_AS_REPAYMENT_PERIOD | EQUAL_INSTALLMENTS | 3 | MONTHS | 1 | MONTHS | 3 | 0 | 0 | 0 | PENALTIES_FEES_INTEREST_PRINCIPAL_ORDER |
And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025"
Then Update loan available disbursement amount with new amount "900" value
Then Admin fails to disburse the loan on "1 January 2025" with "901" EUR transaction amount due to exceed approved amount
And Admin successfully disburse the loan on "1 January 2025" with "900" EUR transaction amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3925
Scenario: Verify update available disbursement amount before disbursement for single disb progressive loan - UC5_2
When Admin sets the business date to "1 January 2025"
And Admin creates a client with random data
When Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALCULATION_DAILY_TILL_PRECLOSE | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "1 January 2025" with "1000" amount and expected disbursement date on "1 January 2025"
Then Update loan available disbursement amount by external-id with new amount "900" value
Then Admin fails to disburse the loan on "1 January 2025" with "901" EUR transaction amount due to exceed approved amount
And Admin successfully disburse the loan on "1 January 2025" with "900" EUR transaction amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3926
Scenario: Verify available disbursement amount change for progressive multidisbursal loan that doesn't expect tranches - UC6
When Admin sets the business date to "01 January 2025"
When Admin creates a client with random data
When Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_MULTIDISBURSE | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025"
When Admin successfully disburse the loan on "01 January 2025" with "200" EUR transaction amount
Then Loan Repayment schedule has 6 periods, with the following data for periods:
| Nr | Days | Date | Paid date | Balance of loan | Principal due | Interest | Fees | Penalties | Due | Paid | In advance | Late | Outstanding |
| | | 01 January 2025 | | 200.0 | | | 0.0 | | 0.0 | 0.0 | | | |
| 1 | 31 | 01 February 2025 | | 167.15 | 32.85 | 1.17 | 0.0 | 0.0 | 34.02 | 0.0 | 0.0 | 0.0 | 34.02 |
| 2 | 28 | 01 March 2025 | | 134.11 | 33.04 | 0.98 | 0.0 | 0.0 | 34.02 | 0.0 | 0.0 | 0.0 | 34.02 |
| 3 | 31 | 01 April 2025 | | 100.87 | 33.24 | 0.78 | 0.0 | 0.0 | 34.02 | 0.0 | 0.0 | 0.0 | 34.02 |
| 4 | 30 | 01 May 2025 | | 67.44 | 33.43 | 0.59 | 0.0 | 0.0 | 34.02 | 0.0 | 0.0 | 0.0 | 34.02 |
| 5 | 31 | 01 June 2025 | | 33.81 | 33.63 | 0.39 | 0.0 | 0.0 | 34.02 | 0.0 | 0.0 | 0.0 | 34.02 |
| 6 | 30 | 01 July 2025 | | 0.0 | 33.81 | 0.2 | 0.0 | 0.0 | 34.01 | 0.0 | 0.0 | 0.0 | 34.01 |
Then Loan Repayment schedule has the following data in Total row:
| Principal due | Interest | Fees | Penalties | Due | Paid | In advance | Late | Outstanding |
| 200.0 | 4.11 | 0.0 | 0.0 | 204.11 | 0.0 | 0.0 | 0.0 | 204.11 |
Then Update loan available disbursement amount with new amount "400" value
Then Admin fails to disburse the loan on "1 January 2025" with "420" EUR transaction amount due to exceed approved amount
When Admin successfully disburse the loan on "01 January 2025" with "399" EUR transaction amount
Then Update loan available disbursement amount is forbidden with amount "500" due to exceed applied amount
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3927
Scenario: Verify available disbursement amount change is forbidden with lower value for progressive multidisbursal loan that expects tranches - UC7_1
When Admin sets the business date to "01 January 2025"
When Admin creates a client with random data
When Admin creates a fully customized loan with three expected disbursements details and following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | 1st_tranche_disb_expected_date | 1st_tranche_disb_principal | 2nd_tranche_disb_expected_date | 2nd_tranche_disb_principal | 3rd_tranche_disb_expected_date | 3rd_tranche_disb_principal |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_MULTIDISBURSE_EXPECT_TRANCHE | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | 01 January 2025 | 300.0 | 02 January 2025 | 200.0 | 03 January 2025 | 500.0 |
And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025"
Then Loan Tranche Details tab has the following data:
| Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount |
| 01 January 2025 | | 300.0 | |
| 02 January 2025 | | 200.0 | |
| 03 January 2025 | | 500.0 | |
# --- disbursement - 1 January, 2025 ---
When Admin successfully disburse the loan on "01 January 2025" with "300" EUR transaction amount
And Loan Transactions tab has the following data:
| Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
| 01 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 300.0 | false | false |
When Admin sets the business date to "02 January 2025"
Then Update loan available disbursement amount is forbidden with amount "100" due to exceed applied amount
When Admin sets the business date to "03 January 2025"
Then Update loan available disbursement amount is forbidden with amount "100" due to exceed applied amount
When Admin sets the business date to "04 January 2025"
Then Update loan available disbursement amount is forbidden with amount "100" due to exceed applied amount
When Admin successfully disburse the loan on "02 January 2025" with "200" EUR transaction amount
When Admin successfully disburse the loan on "03 January 2025" with "500" EUR transaction amount
Then Loan Tranche Details tab has the following data:
| Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount |
| 01 January 2025 | 01 January 2025 | 300.0 | |
| 02 January 2025 | 02 January 2025 | 200.0 | |
| 03 January 2025 | 03 January 2025 | 500.0 | |
And Loan Transactions tab has the following data:
| Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
| 01 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 300.0 | false | false |
| 02 January 2025 | Disbursement | 200.0 | 0.0 | 0.0 | 0.0 | 0.0 | 500.0 | false | false |
| 03 January 2025 | Disbursement | 500.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1000.0 | false | false |
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3928
Scenario: Verify available disbursement amount change with greater value above approved amount for progressive multidisbursal loan that expects tranches - UC7_2
When Admin sets the business date to "01 January 2025"
When Admin creates a client with random data
When Admin creates a fully customized loan with three expected disbursements details and following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | 1st_tranche_disb_expected_date | 1st_tranche_disb_principal | 2nd_tranche_disb_expected_date | 2nd_tranche_disb_principal | 3rd_tranche_disb_expected_date | 3rd_tranche_disb_principal |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_MULTIDISBURSE_EXPECT_TRANCHE | 01 January 2025 | 1200 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | 01 January 2025 | 300.0 | 02 January 2025 | 200.0 | 03 January 2025 | 500.0 |
And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025"
Then Loan Tranche Details tab has the following data:
| Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount |
| 01 January 2025 | | 300.0 | |
| 02 January 2025 | | 200.0 | |
| 03 January 2025 | | 500.0 | |
# --- disbursement - 1 January, 2025 ---
When Admin successfully disburse the loan on "01 January 2025" with "300" EUR transaction amount
When Admin sets the business date to "02 January 2025"
Then Update loan available disbursement amount with new amount "200" value
When Admin successfully disburse the loan on "02 January 2025" with "200" EUR transaction amount
When Admin sets the business date to "03 January 2025"
Then Admin fails to disburse the loan on "03 January 2025" with "800" EUR transaction amount due to exceed approved amount
When Admin successfully disburse the loan on "03 January 2025" with "700" EUR transaction amount
Then Loan Tranche Details tab has the following data:
| Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount |
| 01 January 2025 | 01 January 2025 | 300.0 | |
| 02 January 2025 | 02 January 2025 | 200.0 | |
| 03 January 2025 | 03 January 2025 | 700.0 | |
And Loan Transactions tab has the following data:
| Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
| 01 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 300.0 | false | false |
| 02 January 2025 | Disbursement | 200.0 | 0.0 | 0.0 | 0.0 | 0.0 | 500.0 | false | false |
| 03 January 2025 | Disbursement | 700.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1200.0 | false | false |
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@TestRailId:C3929
Scenario: Verify available disbursement amount change with greater value under approved amount for progressive multidisbursal loan that expects tranches - UC7_3
When Admin sets the business date to "01 January 2025"
When Admin creates a client with random data
When Admin creates a fully customized loan with three expected disbursements details and following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy | 1st_tranche_disb_expected_date | 1st_tranche_disb_principal | 2nd_tranche_disb_expected_date | 2nd_tranche_disb_principal | 3rd_tranche_disb_expected_date | 3rd_tranche_disb_principal |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_MULTIDISBURSE_EXPECT_TRANCHE | 01 January 2025 | 1200 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION | 01 January 2025 | 300.0 | 02 January 2025 | 200.0 | 03 January 2025 | 300.0 |
And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025"
Then Loan Tranche Details tab has the following data:
| Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount |
| 01 January 2025 | | 300.0 | |
| 02 January 2025 | | 200.0 | |
| 03 January 2025 | | 300.0 | |
# --- disbursement - 1 January, 2025 ---
When Admin successfully disburse the loan on "01 January 2025" with "300" EUR transaction amount
When Admin sets the business date to "02 January 2025"
Then Update loan available disbursement amount by external-id with new amount "150" value
When Admin successfully disburse the loan on "02 January 2025" with "300" EUR transaction amount
When Admin sets the business date to "03 January 2025"
Then Admin fails to disburse the loan on "03 January 2025" with "400" EUR transaction amount due to exceed approved amount
When Admin successfully disburse the loan on "03 January 2025" with "350" EUR transaction amount
Then Loan Tranche Details tab has the following data:
| Expected Disbursement On | Disbursed On | Principal | Net Disbursal Amount |
| 01 January 2025 | 01 January 2025 | 300.0 | |
| 02 January 2025 | 02 January 2025 | 300.0 | |
| 03 January 2025 | 03 January 2025 | 350.0 | |
And Loan Transactions tab has the following data:
| Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
| 01 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 300.0 | false | false |
| 02 January 2025 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 600.0 | false | false |
| 03 January 2025 | Disbursement | 350.0 | 0.0 | 0.0 | 0.0 | 0.0 | 950.0 | false | false |
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
Scenario: Verify update available disbursement amount to zero is forbidden for approved loan
When Admin sets the business date to "01 January 2025"
And Admin creates a client with random data
When Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALCULATION_DAILY_TILL_PRECLOSE | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025"
Then Updating the loan's available disbursement amount to "0" is forbidden because cannot be zero as nothing was disbursed
Scenario: Verify update available disbursement amount to zero is allowed for active loan after partial disbursement
When Admin sets the business date to "01 January 2025"
And Admin creates a client with random data
When Admin creates a fully customized loan with the following data:
| LoanProduct | submitted on date | with Principal | ANNUAL interest rate % | interest type | interest calculation period | amortization type | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy |
| LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALCULATION_DAILY_TILL_PRECLOSE | 01 January 2025 | 1000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 6 | MONTHS | 1 | MONTHS | 6 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "01 January 2025" with "1000" amount and expected disbursement date on "01 January 2025"
And Admin successfully disburse the loan on "01 January 2025" with "500" EUR transaction amount
Then Update loan available disbursement amount with new amount "0" value
When Loan Pay-off is made on "01 January 2025"
Then Loan's all installments have obligations met
@@ -106,7 +106,7 @@ public final class LoanApprovedAmountValidatorImpl implements LoanApprovedAmount
}
@Override
public void validateLoanAvailableDisbursementAmountModification(JsonCommand command) {
public void validateLoanAvailableDisbursementAmountModification(final JsonCommand command) {
String json = command.json();
if (StringUtils.isBlank(json)) {
throw new InvalidJsonException();
@@ -133,9 +133,8 @@ public final class LoanApprovedAmountValidatorImpl implements LoanApprovedAmount
final Long loanId = command.getLoanId();
Loan loan = this.loanRepository.findById(loanId).orElseThrow(() -> new LoanNotFoundException(loanId));
if (INVALID_LOAN_STATUSES_FOR_APPROVED_AMOUNT_MODIFICATION.contains(loan.getStatus())) {
baseDataValidator.reset()
.failWithCodeNoParameterAddedToErrorCode("loan.status.not.valid.for.available.disbursement.amount.modification");
if (!loan.getStatus().isApproved() && !loan.getStatus().isActive()) {
baseDataValidator.reset().failWithCodeNoParameterAddedToErrorCode("loan.must.be.approved.or.active");
}
BigDecimal maximumThresholdForApprovedAmount;
@@ -154,6 +153,11 @@ public final class LoanApprovedAmountValidatorImpl implements LoanApprovedAmount
baseDataValidator.reset().parameter(LoanApiConstants.amountParameterName)
.failWithCode("can't.be.greater.than.maximum.available.disbursement.amount.calculation");
}
if (MathUtil.isZero(newAvailableDisbursementAmount) && loan.getStatus().isApproved()) {
baseDataValidator.reset().parameter(LoanApiConstants.amountParameterName)
.failWithCode("cannot.be.zero.as.nothing.was.disbursed.yet");
}
});
}
}
@@ -566,8 +566,8 @@ public class LoanModifyApprovedAmountTest extends BaseLoanIntegrationTest {
() -> modifyLoanAvailableDisbursementAmount(postLoansResponse.getResourceId(), sixHundred));
assertEquals(403, exception.getResponse().code());
assertTrue(exception.getMessage().contains(
"validation.msg.loan.available.disbursement.amount.loan.status.not.valid.for.available.disbursement.amount.modification"));
assertTrue(
exception.getMessage().contains("validation.msg.loan.available.disbursement.amount.loan.must.be.approved.or.active"));
});
}
@@ -650,6 +650,8 @@ public class LoanModifyApprovedAmountTest extends BaseLoanIntegrationTest {
1000.0, 7.0, 6, (request) -> request.disbursementData(List.of(new PostLoansDisbursementData()
.expectedDisbursementDate("1 January 2024").principal(BigDecimal.valueOf(800.0)))));
disburseLoan(loanId, BigDecimal.valueOf(800), "1 January 2024");
PutLoansAvailableDisbursementAmountResponse putLoansAvailableDisbursementAmountResponse = modifyLoanAvailableDisbursementAmount(
loanId, BigDecimal.ZERO);