FINERACT-2232: added e2e test for validation of capitalized income balance handling during reverse replay situations

This commit is contained in:
Rustam Zeinalov
2025-06-10 10:06:48 +02:00
committed by Adam Saghy
parent ad8fe13064
commit 3ce44f836d
2 changed files with 192 additions and 1 deletions
@@ -3958,3 +3958,195 @@ Feature: Capitalized Income
| 16 February 2024 | Capitalized Income | 50.0 | 50.0 | 0.0 | 0.0 | 0.0 | 100.0 | false | false |
Then LoanCapitalizedIncomeAmortizationAdjustmentTransactionCreatedBusinessEvent is raised on "15 February 2024"
Then Customer is forbidden to undo "1"th "Capitalized Income" transaction made on "01 January 2024" due to transaction type is non-reversal
@TestRailId:C3737
Scenario: Verify overpayment amount when capitalized income transactions are reversed and replayed - basic flow
When Admin sets the business date to "1 January 2024"
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 2024 | 1200 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 3 | MONTHS | 1 | MONTHS | 3 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "1 January 2024" with "1200" amount and expected disbursement date on "1 January 2024"
And Admin successfully disburse the loan on "1 January 2024" with "1000" EUR transaction amount
Then Loan status will be "ACTIVE"
When Admin sets the business date to "5 January 2024"
And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "5 January 2024" with "200" EUR transaction amount
Then Loan has 1213.88 outstanding amount
# Make overpayment
When Customer makes "REPAYMENT" transaction with "AUTOPAY" payment type on "5 January 2024" with 1300 EUR transaction amount and system-generated Idempotency key
Then Loan status will be "OVERPAID"
And Loan has 0 outstanding amount
And Loan Transactions tab has the following data:
| Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
| 01 January 2024 | Disbursement | 1000.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1000.0 | false |
| 05 January 2024 | Capitalized Income | 200.0 | 200.0 | 0.0 | 0.0 | 0.0 | 1200.0 | false |
| 05 January 2024 | Repayment | 1300.0 | 1200.0 | 0.75 | 0.0 | 0.0 | 0.0 | false |
| 05 January 2024 | Accrual | 0.75 | 0.0 | 0.75 | 0.0 | 0.0 | 0.0 | false |
| 05 January 2024 | Capitalized Income Amortization | 200.0 | 0.0 | 200.0 | 0.0 | 0.0 | 0.0 | false |
# Undo capitalized income - should trigger reverse-replay
When Customer undo "1"th "Capitalized Income" transaction made on "05 January 2024"
Then Loan has 0 outstanding amount
And Loan Transactions tab has the following data:
| Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
| 01 January 2024 | Disbursement | 1000.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1000.0 | false | false |
| 05 January 2024 | Capitalized Income | 200.0 | 200.0 | 0.0 | 0.0 | 0.0 | 1200.0 | true | false |
| 05 January 2024 | Accrual | 0.75 | 0.0 | 0.75 | 0.0 | 0.0 | 0.0 | false | false |
| 05 January 2024 | Capitalized Income Amortization | 200.0 | 0.0 | 200.0 | 0.0 | 0.0 | 0.0 | false | false |
| 05 January 2024 | Repayment | 1300.0 | 1000.0 | 0.75 | 0.0 | 0.0 | 0.0 | false | true |
| 05 January 2024 | Capitalized Income Amortization Adjustment | 200.0 | 0.0 | 200.0 | 0.0 | 0.0 | 0.0 | false | false |
Then Loan status will be "OVERPAID"
Then Loan has 299.25 overpaid amount
@TestRailId:C3739
Scenario: Verify multiple capitalized income transactions reversal with overpayment - selective middle transaction reversal
When Admin sets the business date to "1 January 2024"
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 2024 | 1600 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 3 | MONTHS | 1 | MONTHS | 3 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "1 January 2024" with "1600" amount and expected disbursement date on "1 January 2024"
And Admin successfully disburse the loan on "1 January 2024" with "1000" EUR transaction amount
Then Loan status will be "ACTIVE"
When Admin sets the business date to "5 January 2024"
And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "5 January 2024" with "100" EUR transaction amount
When Admin sets the business date to "10 January 2024"
And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "10 January 2024" with "150" EUR transaction amount
When Admin sets the business date to "15 January 2024"
And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "15 January 2024" with "200" EUR transaction amount
Then Loan has 1466.08 outstanding amount
# Overpay the loan
When Customer makes "REPAYMENT" transaction with "AUTOPAY" payment type on "15 January 2024" with 1500 EUR transaction amount and system-generated Idempotency key
Then Loan status will be "OVERPAID"
And Loan Transactions tab has the following data:
| Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
| 01 January 2024 | Disbursement | 1000.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1000.0 | false |
| 05 January 2024 | Capitalized Income | 100.0 | 100.0 | 0.0 | 0.0 | 0.0 | 1100.0 | false |
| 10 January 2024 | Capitalized Income | 150.0 | 150.0 | 0.0 | 0.0 | 0.0 | 1250.0 | false |
| 15 January 2024 | Capitalized Income | 200.0 | 200.0 | 0.0 | 0.0 | 0.0 | 1450.0 | false |
| 15 January 2024 | Repayment | 1500.0 | 1450.0 | 2.96 | 0.0 | 0.0 | 0.0 | false |
| 15 January 2024 | Accrual | 2.96 | 0.0 | 2.96 | 0.0 | 0.0 | 0.0 | false |
| 15 January 2024 | Capitalized Income Amortization | 450.0 | 0.0 | 450.0 | 0.0 | 0.0 | 0.0 | false |
# Undo middle capitalized income transaction
When Customer undo "1"th "Capitalized Income" transaction made on "10 January 2024"
Then Loan Transactions tab has the following data:
| Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
| 01 January 2024 | Disbursement | 1000.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1000.0 | false | false |
| 05 January 2024 | Capitalized Income | 100.0 | 100.0 | 0.0 | 0.0 | 0.0 | 1100.0 | false | false |
| 10 January 2024 | Capitalized Income | 150.0 | 150.0 | 0.0 | 0.0 | 0.0 | 1250.0 | true | false |
| 15 January 2024 | Capitalized Income | 200.0 | 200.0 | 0.0 | 0.0 | 0.0 | 1300.0 | false | false |
| 15 January 2024 | Accrual | 2.96 | 0.0 | 2.96 | 0.0 | 0.0 | 0.0 | false | false |
| 15 January 2024 | Capitalized Income Amortization | 450.0 | 0.0 | 450.0 | 0.0 | 0.0 | 0.0 | false | false |
| 15 January 2024 | Repayment | 1500.0 | 1300.0 | 2.82 | 0.0 | 0.0 | 0.0 | false | true |
| 15 January 2024 | Capitalized Income Amortization Adjustment | 150.0 | 0.0 | 150.0 | 0.0 | 0.0 | 0.0 | false | false |
| 15 January 2024 | Accrual Adjustment | 0.14 | 0.0 | 0.14 | 0.0 | 0.0 | 0.0 | false | false |
Then Loan status will be "OVERPAID"
Then Loan has 197.18 overpaid amount
@TestRailId:C3740
Scenario: Verify capitalized income reversal with partial repayment when loan transitions from active to overpaid state
When Admin sets the business date to "1 January 2024"
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 2024 | 1800 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 3 | MONTHS | 1 | MONTHS | 3 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "1 January 2024" with "1800" amount and expected disbursement date on "1 January 2024"
And Admin successfully disburse the loan on "1 January 2024" with "1000" EUR transaction amount
Then Loan status will be "ACTIVE"
When Admin sets the business date to "5 January 2024"
And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "5 January 2024" with "500" EUR transaction amount
Then Loan has 1517.15 outstanding amount
# Partial payment
When Customer makes "REPAYMENT" transaction with "AUTOPAY" payment type on "5 January 2024" with 1200 EUR transaction amount and system-generated Idempotency key
Then Loan status will be "ACTIVE"
And Loan has 305.78 outstanding amount
# Undo capitalized income - this should cause overpayment
When Customer undo "1"th "Capitalized Income" transaction made on "05 January 2024"
Then Loan status will be "OVERPAID"
And Loan Transactions tab has the following data:
| Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
| 01 January 2024 | Disbursement | 1000.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1000.0 | false | false |
| 05 January 2024 | Capitalized Income | 500.0 | 500.0 | 0.0 | 0.0 | 0.0 | 1500.0 | true | false |
| 05 January 2024 | Repayment | 1200.0 | 1000.0 | 0.75 | 0.0 | 0.0 | 0.0 | false | true |
| 05 January 2024 | Accrual | 0.75 | 0.0 | 0.75 | 0.0 | 0.0 | 0.0 | false | false |
And Loan has 0.0 outstanding amount
And Loan has 199.25 overpaid amount
@TestRailId:C3741
Scenario: Verify backdated disbursement with capitalized income and overpayment reverse-replay
When Admin sets the business date to "1 January 2024"
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_MULTIDISBURSAL_CAPITALIZED_INCOME | 01 January 2024 | 1200 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 3 | MONTHS | 1 | MONTHS | 3 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "1 January 2024" with "1200" amount and expected disbursement date on "1 January 2024"
And Admin successfully disburse the loan on "1 January 2024" with "500" EUR transaction amount
Then Loan status will be "ACTIVE"
When Admin sets the business date to "10 January 2024"
And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "10 January 2024" with "200" EUR transaction amount
# Overpay current balance
When Customer makes "REPAYMENT" transaction with "AUTOPAY" payment type on "10 January 2024" with 750 EUR transaction amount and system-generated Idempotency key
Then Loan status will be "OVERPAID"
And Loan Transactions tab has the following data:
| Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
| 01 January 2024 | Disbursement | 500.0 | 0.0 | 0.0 | 0.0 | 0.0 | 500.0 | false |
| 10 January 2024 | Capitalized Income | 200.0 | 200.0 | 0.0 | 0.0 | 0.0 | 700.0 | false |
| 10 January 2024 | Repayment | 750.0 | 700.0 | 0.85 | 0.0 | 0.0 | 0.0 | false |
| 10 January 2024 | Accrual | 0.85 | 0.0 | 0.85 | 0.0 | 0.0 | 0.0 | false |
| 10 January 2024 | Capitalized Income Amortization | 200.0 | 0.0 | 200.0 | 0.0 | 0.0 | 0.0 | false |
# Backdated disbursement should trigger reverse-replay
When Admin successfully disburse the loan on "5 January 2024" with "300" EUR transaction amount
Then Loan status will be "ACTIVE"
And Loan Transactions tab has the following data:
| Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
| 01 January 2024 | Disbursement | 500.0 | 0.0 | 0.0 | 0.0 | 0.0 | 500.0 | false | false |
| 05 January 2024 | Disbursement | 300.0 | 0.0 | 0.0 | 0.0 | 0.0 | 800.0 | false | true |
| 10 January 2024 | Capitalized Income | 200.0 | 200.0 | 0.0 | 0.0 | 0.0 | 1000.0 | false | false |
| 10 January 2024 | Accrual | 0.85 | 0.0 | 0.85 | 0.0 | 0.0 | 0.0 | false | false |
| 10 January 2024 | Capitalized Income Amortization | 200.0 | 0.0 | 200.0 | 0.0 | 0.0 | 0.0 | false | false |
| 10 January 2024 | Repayment | 750.0 | 748.87 | 1.13 | 0.0 | 0.0 | 251.13 | false | true |
And Loan has 255.09 outstanding amount
@TestRailId:C3742
Scenario: Verify capitalized income amortization reversal when multiple payments create complex overpayment scenario
When Admin sets the business date to "1 January 2024"
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 2024 | 2000 | 7 | DECLINING_BALANCE | DAILY | EQUAL_INSTALLMENTS | 3 | MONTHS | 1 | MONTHS | 3 | 0 | 0 | 0 | ADVANCED_PAYMENT_ALLOCATION |
And Admin successfully approves the loan on "1 January 2024" with "2000" amount and expected disbursement date on "1 January 2024"
And Admin successfully disburse the loan on "1 January 2024" with "1500" EUR transaction amount
Then Loan status will be "ACTIVE"
When Admin sets the business date to "5 January 2024"
And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "5 January 2024" with "300" EUR transaction amount
# First partial payment
When Customer makes "REPAYMENT" transaction with "AUTOPAY" payment type on "5 January 2024" with 900 EUR transaction amount and system-generated Idempotency key
Then Loan status will be "ACTIVE"
When Admin sets the business date to "8 January 2024"
And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "8 January 2024" with "200" EUR transaction amount
# Second payment that causes overpayment
When Customer makes "REPAYMENT" transaction with "AUTOPAY" payment type on "8 January 2024" with 1200 EUR transaction amount and system-generated Idempotency key
Then Loan status will be "OVERPAID"
And Loan Transactions tab has the following data:
| Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
| 01 January 2024 | Disbursement | 1500.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1500.0 | false |
| 05 January 2024 | Capitalized Income | 300.0 | 300.0 | 0.0 | 0.0 | 0.0 | 1800.0 | false |
| 05 January 2024 | Repayment | 900.0 | 898.87 | 1.13 | 0.0 | 0.0 | 901.13 | false |
| 08 January 2024 | Capitalized Income | 200.0 | 200.0 | 0.0 | 0.0 | 0.0 | 1101.13 | false |
| 08 January 2024 | Repayment | 1200.0 | 1101.13 | 0.51 | 0.0 | 0.0 | 0.0 | false |
| 08 January 2024 | Accrual | 1.64 | 0.0 | 1.64 | 0.0 | 0.0 | 0.0 | false |
| 08 January 2024 | Capitalized Income Amortization | 500.0 | 0.0 | 500.0 | 0.0 | 0.0 | 0.0 | false |
# Undo first capitalized income
When Customer undo "1"th "Capitalized Income" transaction made on "05 January 2024"
Then Loan Transactions tab has the following data:
| Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
| 01 January 2024 | Disbursement | 1500.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1500.0 | false | false |
| 05 January 2024 | Capitalized Income | 300.0 | 300.0 | 0.0 | 0.0 | 0.0 | 1800.0 | true | false |
| 05 January 2024 | Repayment | 900.0 | 898.87 | 1.13 | 0.0 | 0.0 | 601.13 | false | false |
| 08 January 2024 | Capitalized Income | 200.0 | 200.0 | 0.0 | 0.0 | 0.0 | 801.13 | false | false |
| 08 January 2024 | Accrual | 1.64 | 0.0 | 1.64 | 0.0 | 0.0 | 0.0 | false | false |
| 08 January 2024 | Capitalized Income Amortization | 500.0 | 0.0 | 500.0 | 0.0 | 0.0 | 0.0 | false | false |
| 08 January 2024 | Repayment | 1200.0 | 801.13 | 0.34 | 0.0 | 0.0 | 0.0 | false | true |
| 08 January 2024 | Capitalized Income Amortization Adjustment | 300.0 | 0.0 | 300.0 | 0.0 | 0.0 | 0.0 | false | false |
| 08 January 2024 | Accrual Adjustment | 0.17 | 0.0 | 0.17 | 0.0 | 0.0 | 0.0 | false | false |
And Loan has 0.0 outstanding amount
And Loan has 398.53 overpaid amount
@@ -685,7 +685,6 @@ public class LoanCapitalizedIncomeTest extends BaseLoanIntegrationTest {
});
}
@Test
public void testOverpaymentAmountWhenCapitalizedIncomeTransactionsAreReversed() {
final AtomicReference<Long> loanIdRef = new AtomicReference<>();