Skip to content

Fix FEB_29_PERIOD_ONLY strategy for cross-year repayment periods#5728

Closed
pratikpatel-aurochs wants to merge 1 commit intoapache:developfrom
aurochs-dev:develop
Closed

Fix FEB_29_PERIOD_ONLY strategy for cross-year repayment periods#5728
pratikpatel-aurochs wants to merge 1 commit intoapache:developfrom
aurochs-dev:develop

Conversation

@pratikpatel-aurochs
Copy link
Copy Markdown
Contributor

@pratikpatel-aurochs pratikpatel-aurochs commented Apr 1, 2026

Description

  • Fix isPeriodContainsFeb29 in ProgressiveEMICalculator to correctly detect Feb 29 when a repayment period spans from a non-leap year into a leap year (e.g., Dec 1, 2023 → Mar 1, 2024)

    • The previous implementation only checked the repaymentPeriodFromDate's year for leap year, causing it to return false when the from-date was in a non-leap year — even if Feb 29 of the next (leap) year
      fell within the period
    • This caused two downstream issues for FEB_29_PERIOD_ONLY strategy:
      • numberOfDaysFeb29PeriodOnly returned 365 instead of 366
      • partialPeriodCalculationNeeded was false, skipping the year-splitting interest calculation
    • Add unit test for quarterly repayment cross-year scenario validating the fix

    Summary

    • Fix isPeriodContainsFeb29 in ProgressiveEMICalculator to correctly detect Feb 29 when a repayment period spans from a non-leap year into a leap year (e.g., Dec 1, 2023 → Mar 1, 2024)
    • The previous implementation only checked the repaymentPeriodFromDate's year for leap year, causing it to return false when the from-date was in a non-leap year — even if Feb 29 of the next (leap) year
      fell within the period
    • This caused two downstream issues for FEB_29_PERIOD_ONLY strategy:
      • numberOfDaysFeb29PeriodOnly returned 365 instead of 366
      • partialPeriodCalculationNeeded was false, skipping the year-splitting interest calculation
    • Add unit test for quarterly repayment cross-year scenario validating the fix

    Impact

    Affects progressive loan interest calculations using:

    • DaysInYearType.ACTUAL + DaysInYearCustomStrategyType.FEB_29_PERIOD_ONLY
    • Non-monthly repayment frequencies (bi-monthly, quarterly, etc.) where a single repayment period crosses from a non-leap year into a leap year past February 29

    Monthly repayments are not affected since a single month cannot span from one year past Feb 29 of the next year.

    Changes

    File Change
    ProgressiveEMICalculator.java Iterate all years the period spans to check for Feb 29 in each leap year, instead of only checking the from-date's year
    ProgressiveEMICalculatorTest.java Add test_feb29_period_only_cross_year_quarterly_period_containing_feb29 verifying cross-year FEB_29_PERIOD_ONLY matches FULL_LEAP_YEAR when Feb 29 is in the period

Checklist

Please make sure these boxes are checked before submitting your pull request - thanks!

  • Write the commit message as per our guidelines
  • 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 our 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
  • This PR must not be a "code dump". Large changes can be made in a branch, with assistance. Ask for help on the developer mailing list.

Your assigned reviewer(s) will follow our guidelines for code reviews.

@DeathGun44
Copy link
Copy Markdown
Contributor

@pratikpatel-aurochs Before contributing go through https://github.com/apache/fineract/blob/develop/CONTRIBUTING.md#pull-requests thoroughly please

@pratikpatel-aurochs
Copy link
Copy Markdown
Contributor Author

pratikpatel-aurochs commented Apr 1, 2026

@pratikpatel-aurochs Before contributing go through https://github.com/apache/fineract/blob/develop/CONTRIBUTING.md#pull-requests thoroughly please

Don't have Jira access so closing it

@pratikpatel-aurochs
Copy link
Copy Markdown
Contributor Author

@pratikpatel-aurochs Before contributing go through https://github.com/apache/fineract/blob/develop/CONTRIBUTING.md#pull-requests thoroughly please

#5729 Created a new PR

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