FINERACT-2326: Backdated loan charge-off accrual fix

This commit is contained in:
adam.magyari
2025-08-21 12:26:07 +02:00
committed by Adam Saghy
parent 4f27d5a225
commit f1c28792f3
2 changed files with 38 additions and 12 deletions
@@ -2727,6 +2727,18 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
} else {
loan.markAsChargedOff(transactionDate, currentUser, null);
}
loan.getLoanTransactions().stream().filter(lt -> lt.isAccrual() || lt.isAccrualAdjustment())
.filter(transaction -> loan.getLoanProductRelatedDetail().isInterestRecognitionOnDisbursementDate()
? !DateUtils.isBefore(transaction.getTransactionDate(), transactionDate)
: DateUtils.isAfter(transaction.getTransactionDate(), transactionDate))
.forEach(transaction -> {
transaction.reverse();
journalEntryPoster.postJournalEntriesForLoanTransaction(transaction, false, false);
final LoanAdjustTransactionBusinessEvent.Data data = new LoanAdjustTransactionBusinessEvent.Data(transaction);
businessEventNotifierService.notifyPostBusinessEvent(new LoanAdjustTransactionBusinessEvent(data));
});
final LoanTransaction chargeOffTransaction = LoanTransaction.chargeOff(loan, transactionDate, txnExternalId);
if (loan.isInterestBearingAndInterestRecalculationEnabled()) {
@@ -2754,17 +2766,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
this.noteRepository.save(note);
}
loan.getLoanTransactions().stream().filter(LoanTransaction::isAccrual)
.filter(transaction -> loan.getLoanProductRelatedDetail().isInterestRecognitionOnDisbursementDate()
? !DateUtils.isBefore(transaction.getTransactionDate(), transactionDate)
: DateUtils.isAfter(transaction.getTransactionDate(), transactionDate))
.forEach(transaction -> {
transaction.reverse();
journalEntryPoster.postJournalEntriesForLoanTransaction(transaction, false, false);
final LoanAdjustTransactionBusinessEvent.Data data = new LoanAdjustTransactionBusinessEvent.Data(transaction);
businessEventNotifierService.notifyPostBusinessEvent(new LoanAdjustTransactionBusinessEvent(data));
});
businessEventNotifierService.notifyPostBusinessEvent(new LoanChargeOffPostBusinessEvent(chargeOffTransaction));
return new CommandProcessingResultBuilder() //
.withCommandId(command.commandId()) //