-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FINERACT-2081: Accrual not created for closed or overpaid loans #4299
base: develop
Are you sure you want to change the base?
FINERACT-2081: Accrual not created for closed or overpaid loans #4299
Conversation
4fdd72e
to
fb0bb6d
Compare
@@ -246,7 +246,13 @@ public void processIncomePostingAndAccruals(@NotNull Loan loan) { | |||
@Override | |||
public void processAccrualsOnLoanClosure(@NotNull Loan loan) { | |||
// check and process accruals for loan WITHOUT interest recalculation details and compounding posted as income | |||
addAccruals(loan, loan.getLastLoanRepaymentScheduleInstallment().getDueDate(), false, true, false); | |||
LocalDate accrualDate = getFinalAccrualTransactionDate(loan); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
processIncomeAndAccrualTransactionOnLoanClosure
should calculate and add the accrual, no?
@@ -1196,10 +1202,13 @@ private void reverseAccrual(LoanTransaction transaction, boolean addEvent) { | |||
} | |||
|
|||
private LocalDate getFinalAccrualTransactionDate(Loan loan) { | |||
if (configurationDomainService.getAccrualDateConfigForCharge().equals(ACCRUAL_ON_CHARGE_SUBMITTED_ON_DATE)) { | |||
return loan.getLastLoanRepaymentScheduleInstallment().getDueDate(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i wonder whether the charge submitted on date should be the accrual transaction date here, no?
return switch (loan.getStatus()) { | ||
case CLOSED_OBLIGATIONS_MET -> loan.getClosedOnDate(); | ||
case OVERPAID -> loan.getOverpaidOnDate(); | ||
default -> throw new IllegalStateException("Unexpected value: " + loan.getStatus()); | ||
default -> loan.getLastLoanRepaymentScheduleInstallment().getDueDate(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you please elaborate on this? I am not fully understand the idea here...
|
||
@Test | ||
public void testAccrualCreatedOnLoanClosure() { | ||
runAt(chargeDate, () -> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You might wanna include all the steps that to be executed on the wanted business date. This way some actions are executed on a particular business date and some are executed as with current, calendar date.
Example:
runAt(repaymentDate, () ->
loanTransactionHelper.makeLoanRepayment(loanId, new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy")
.transactionDate(repaymentDate).locale("en").transactionAmount(repaymentAmount)));
This is executed on the provided "repaymentDate", but GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails(loanId);
is not....
Example:
runAt(repaymentDate, () -> {
loanTransactionHelper.makeLoanRepayment(loanId, new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy")
.transactionDate(repaymentDate).locale("en").transactionAmount(repaymentAmount));
logLoanTransactions(loanId);
GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails(loanId);
logInstallmentsOfLoanDetails(loanDetails);
List<GetLoansLoanIdTransactions> accrualTransactions = loanDetails.getTransactions().stream()
.filter(transaction -> transaction.getType().getCode().equals("loanTransactionType.accrual")).toList();
assertFalse(accrualTransactions.isEmpty(), "Expected accrual transaction on loan closure");
assertEquals(expectedNumberOfAccruals, accrualTransactions.size(), "Incorrect number of accruals");
});
Above all the steps are executed on the same provided current date
fb0bb6d
to
d2a64a4
Compare
d2a64a4
to
2f01e13
Compare
2f01e13
to
05a885b
Compare
Description
Accrual not created for closed or overpaid loans
Ignore if these details are present on the associated Apache Fineract JIRA ticket.
Checklist
Please make sure these boxes are checked before submitting your pull request - thanks!
Write the commit message as per https://github.com/apache/fineract/#pull-requests
Acknowledge that we will not review PRs that are not passing the build ("green") - it is your responsibility to get a proposed PR to pass the build, not primarily the project's maintainers.
Create/update unit or integration tests for verifying the changes made.
Follow coding conventions at https://cwiki.apache.org/confluence/display/FINERACT/Coding+Conventions.
Add required Swagger annotation and update API documentation at fineract-provider/src/main/resources/static/legacy-docs/apiLive.htm with details of any API changes
Submission is not a "code dump". (Large changes can be made "in repository" via a branch. Ask on the developer mailing list for guidance, if required.)
FYI our guidelines for code reviews are at https://cwiki.apache.org/confluence/display/FINERACT/Code+Review+Guide.