Skip to content
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-1981: fix progressive accruals on early repayment #4282

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from

Conversation

magyari-adam
Copy link
Contributor

Description

Fix for progressive loan accrual handling in case of early repayments.

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.

@@ -427,9 +427,9 @@ private void addInterestAccrual(@NotNull Loan loan, @NotNull LocalDate tillDate,
AccrualPeriodData period = accrualPeriods.getPeriodByInstallmentNumber(installment.getInstallmentNumber());
MonetaryCurrency currency = accrualPeriods.getCurrency();
Money interest = null;
boolean isFullPeriod = isFullPeriod(tillDate, installment);
boolean isClosedPeriod = isAfterPeriod(tillDate, installment);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Something like "pastDue" or "pastPeriod" field name might be better...

@@ -499,7 +499,7 @@ private BigDecimal calcInterestAccruedAmount(@NotNull LoanRepaymentScheduleInsta
.map(p -> MathUtil.toBigDecimal(p.getTransactionAccrued())).reduce(BigDecimal.ZERO, MathUtil::add);
BigDecimal accrued = MathUtil.subtractToZero(totalAccrued, prevAccrued);
// if this is the current-last period, all the remaining accrued amount is added
return isInPeriod(tillDate, installment, false) ? accrued : MathUtil.min(installment.getInterestCharged(), accrued, false);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you sure we need this change this?

executeInlineCOB(loanId);

GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails(loanId);
Assertions.assertTrue(loanDetails.getTransactions().stream().noneMatch(t -> (t.getType().getAccrual() && t.getAmount() > 0.31)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a little bit weird way to check whether there was any "unwanted" accrual / accrual adjustment. Would you mind rather check specifically the original issue does not happens on the due date and due date + 1 at least?

However the best would be to check each transaction!

Something like this:

  verifyTransactions(loanId, //
                    transaction(430.d, "Disbursement", "20 December 2024", 430.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, false), //
                    transaction(200.0d, "Repayment", "30 December 2024", 0, 197.0, 0, 0, 0, 0, 3.0, false)),//
                    transaction(0.3d, "Accrual", "21 December 2024", 0, 0, 0, 0, 0, 0, 0.3, false)),//
                    ....
                    transaction(0.3d, "Accrual", "29 December 2024", 0, 0, 0, 0, 0, 0, 0.3, false)),//

Copy link
Contributor

@adamsaghy adamsaghy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kindly see my review!

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.

2 participants