FINERACT-2311: Buy Down fee adjustment - Template API

This commit is contained in:
Jose Alberto Hernandez
2025-07-08 12:20:01 +02:00
committed by Adam Saghy
parent 095e0818e4
commit 8a5300ef23
8 changed files with 86 additions and 27 deletions
@@ -43,6 +43,8 @@ public class LoanTransactionTest extends BaseLoanIntegrationTest {
private final String capitalizedIncomeCommand = "capitalizedIncome";
private final String capitalizedIncomeAdjustmentCommand = "capitalizedIncomeAdjustment";
private final String buyDownFeeCommand = "buyDownFee";
private final String buyDownFeeAdjustmentCommand = "buyDownFeeAdjustment";
@Test
public void testGetLoanTransactionsFiltering() {
@@ -166,4 +168,44 @@ public class LoanTransactionTest extends BaseLoanIntegrationTest {
});
}
@Test
public void testGetLoanTransactionTemplateForBuyDownFeeAdjustment() {
final PostClientsResponse client = clientHelper.createClient(ClientHelper.defaultClientCreationRequest());
final PostLoanProductsResponse loanProductsResponse = loanProductHelper.createLoanProduct(create4IProgressive()
.enableBuyDownFee(true).buyDownFeeStrategy(PostLoanProductsRequest.BuyDownFeeStrategyEnum.EQUAL_AMORTIZATION)//
.buyDownFeeCalculationType(PostLoanProductsRequest.BuyDownFeeCalculationTypeEnum.FLAT)//
.buyDownFeeIncomeType(PostLoanProductsRequest.BuyDownFeeIncomeTypeEnum.INTEREST)//
.deferredIncomeLiabilityAccountId(deferredIncomeLiabilityAccount.getAccountID().longValue()) //
.incomeFromCapitalizationAccountId(feeIncomeAccount.getAccountID().longValue()) //
.capitalizedIncomeType(PostLoanProductsRequest.CapitalizedIncomeTypeEnum.FEE) //
.buyDownExpenseAccountId(buyDownExpenseAccount.getAccountID().longValue())//
.incomeFromBuyDownAccountId(feeIncomeAccount.getAccountID().longValue()));
final String loanExternalIdStr = UUID.randomUUID().toString();
runAt("20 December 2024", () -> {
final Long loanId = applyAndApproveProgressiveLoan(client.getClientId(), loanProductsResponse.getResourceId(),
"20 December 2024", 430.0, 7.0, 6, (request) -> request.externalId(loanExternalIdStr));
disburseLoan(loanId, BigDecimal.valueOf(230), "20 December 2024");
PostLoansLoanIdTransactionsResponse loanTransactionResponse = loanTransactionHelper.executeLoanTransaction(loanId,
new PostLoansLoanIdTransactionsRequest().dateFormat(DATETIME_PATTERN).transactionDate("20 December 2024").locale("en")
.transactionAmount(150.0),
buyDownFeeCommand);
assertNotNull(loanTransactionResponse);
final Long transactionId = loanTransactionResponse.getResourceId();
assertNotNull(transactionId);
log.info("Loan Id {} with transaction id {}", loanId, transactionId);
final GetLoansLoanIdTransactionsTemplateResponse transactionTemplate = loanTransactionHelper.retrieveTransactionTemplate(loanId,
buyDownFeeAdjustmentCommand, null, null, null, transactionId);
assertNotNull(transactionTemplate);
assertEquals("loanTransactionType." + buyDownFeeAdjustmentCommand, transactionTemplate.getType().getCode());
assertEquals(transactionTemplate.getAmount(), 150);
});
}
}