Hello Fineract developers,

During further review of savings arithmetic I reproduced a separate
calendar correctness issue in PostingPeriod on develop
e4474a0f4a4c65a75e7758e47db1fd277e5fcfef. This is distinct from
FINERACT-2809 and the previously reported grace-period fraction issue.

Annual compounding with a March fiscal-year start chooses February 28, 2024
instead of February 29, 2024 when the period starts in March 2023. A native
example with principal 1000, annual rate 36.5%, a fixed 365-day
denominator, DAILY_BALANCE, and the inclusive period 2023-03-01 through
2024-02-29 returns 366.37 interest instead of 366.00. Interest compounds
one day early.

The quarterly and biannual paths also take February's length from the
business-date year and then build a date in the target year. For example, a
valid one-day period on 2025-02-28 with business date 2024-06-15 and fiscal
start month 3 throws DateTimeException for a fabricated February 29, 2025.

The public report, proposed patch, regression tests and deterministic input
vectors are available here:
https://gist.github.com/kadyrbekovhamit-cyber/e6a609ea22ed1934015e957867fd1a28

The patch uses the target YearMonth and reapplies month-end adjustment
after annual year rollover. Before correction, 9 of 13 focused native cases
fail. After correction, those 13 cases, a further 144-case fiscal calendar
corpus, and 9 existing adjacent tests pass (166 total); Spotless and
Checkstyle pass on JDK 25. The additional 144-case corpus was run on the
corrected version only. The tests use the real public PostingPeriod
methods, Money, and dates without mocked calculations. The same
PostingPeriod source is present in 1.15.0. No HTTP/account-level customer
impact is claimed.

The closest historic report I found is FINERACT-491 / PR #423, which
introduced fiscal-month support; it does not describe this leap-year
mismatch. Could you point me to an existing issue, or create a separate
Jira ticket so I can submit the prepared patch and tests?

Regards,
Xamit Kadirbekov
GERO Research

Reply via email to