Skip to content

FINERACT-2615: Support undoing of Account transfer from Loan account to Savings account#6144

Open
AshharAhmadKhan wants to merge 1 commit into
apache:developfrom
AshharAhmadKhan:FINERACT-2615-undo-loan-to-savings-transfer
Open

FINERACT-2615: Support undoing of Account transfer from Loan account to Savings account#6144
AshharAhmadKhan wants to merge 1 commit into
apache:developfrom
AshharAhmadKhan:FINERACT-2615-undo-loan-to-savings-transfer

Conversation

@AshharAhmadKhan

Copy link
Copy Markdown
Contributor

JIRA

https://issues.apache.org/jira/browse/FINERACT-2615

Problem

AccountTransfersWritePlatformServiceImpl.undoTransfer(...) did not support Loan-to-Savings transfers and immediately threw an UnsupportedOperationException.

As a result, users could successfully perform transfers such as loan refunds from a loan account to a savings account, but attempting to undo the transfer failed. Both the loan and savings accounts remained affected because the transfer could not be reversed.

Fix

Added undo support for Loan-to-Savings transfers.

The implementation now reverses both sides of the transfer:

  • Undoes the savings-side deposit through SavingsAccountWritePlatformService.undoTransaction(...).
  • Reverses the loan-side refund through LoanAccountDomainService.reverseTransfer(...).
  • Marks the corresponding AccountTransferTransaction as reversed, ensuring repeated undo attempts are correctly rejected with error.msg.account.transfer.already.reversed.

Why reverseTransfer(...) instead of adjustLoanTransaction(...)?

An earlier implementation (#5877) attempted to mirror the existing Savings-to-Loan undo path by calling LoanAdjustmentService.adjustLoanTransaction(...).

That approach cannot handle Loan-to-Savings transfers because adjustLoanTransaction(...) only permits repayment-like transaction types (REPAYMENT, DOWN_PAYMENT, MERCHANT_ISSUED_REFUND, etc.). The loan-side transaction created by a Loan-to-Savings transfer is a plain REFUND, so calling adjustLoanTransaction(...) results in an InvalidLoanTransactionTypeException.

LoanAccountDomainService.reverseTransfer(...) is already used elsewhere in AccountTransfersWritePlatformServiceImpl (undoTransactions(), invoked by reverseAllTransactions(...) and reverseTransfersWithFromAccountType(...)) to reverse this exact type of transaction, making it the correct and consistent implementation here.

Tests

  • Verified Loan-to-Savings transfers can now be successfully undone.
  • Verified both the loan and savings sides are correctly reversed.
  • Verified the AccountTransferTransaction is marked as reversed after undo.
  • Added a regression test confirming a second undo attempt is rejected with error.msg.account.transfer.already.reversed.

…to Savings account

Implements undo for Loan-to-Savings account transfers, which previously
threw UnsupportedOperationException. Reverses the savings deposit via
SavingsAccountWritePlatformService.undoTransaction and reverses the loan
refund transaction via LoanAccountDomainService.reverseTransfer, then
marks the AccountTransferTransaction as reversed so repeated undo
attempts are correctly rejected.

Adds unit test coverage for the new undo branch and an e2e scenario
(TestRailId C80938) mirroring the existing Savings-to-Loan undo test.
@AshharAhmadKhan
AshharAhmadKhan force-pushed the FINERACT-2615-undo-loan-to-savings-transfer branch from c20fbd3 to bf761a3 Compare July 17, 2026 17:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant