[ 
https://issues.apache.org/jira/browse/FINERACT-2914?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18126036#comment-18126036
 ] 

Abhishek Chaudhary commented on FINERACT-2914:
----------------------------------------------

[~adamsaghy] can you assign this ticket also to me pls, thanks!

> Execute Standing Instruction job fails or skips months when the recurrence 
> day is 29-31
> ---------------------------------------------------------------------------------------
>
>                 Key: FINERACT-2914
>                 URL: https://issues.apache.org/jira/browse/FINERACT-2914
>             Project: Apache Fineract
>          Issue Type: Bug
>          Components: Job Scheduler, Savings
>    Affects Versions: 1.15.0
>            Reporter: Abhishek Chaudhary
>            Priority: Blocker
>             Fix For: 1.16.0
>
>
> {{ExecuteStandingInstructionsTasklet}} works out the first due date of a 
> monthly or yearly standing instruction with 
> {{validFrom.withDayOfMonth(recurrenceOnDay)}}. The API accepts any 
> {{recurrenceOnMonthDay}} (it is only checked for not null), so this goes 
> wrong in two ways.
> # *The job fails for all instructions.* If {{validFrom}} falls in a month 
> shorter than the recurrence day, {{withDayOfMonth}} throws 
> {{DateTimeException}} (for example {{Invalid date 'APRIL 31'}} for day 31 
> starting in April, or {{Invalid date 'FEBRUARY 30'}}). The exception is not 
> caught, so the job fails and the remaining instructions are not processed. 
> {{validFrom}} does not change, so the job fails on every run while the 
> instruction is active.
> # *Shorter months are skipped silently.* The due check compares 
> {{start.plusMonths(MONTHS.between(start, today))}} with today. 
> {{MONTHS.between}} truncates, so a monthly instruction on the 31st never 
> matches on Feb 28/29, Apr 30, Jun 30, Sep 30 or Nov 30. It runs only 7 times 
> a year. A yearly instruction on 29 February runs only in leap years. No error 
> is logged.
> *Expected:* when the month is shorter than the recurrence day, the 
> instruction runs on the last day of that month, the way savings charges do 
> ({{SavingsAccountCharge}} clamps {{feeOnDay}} to the month length). One 
> instruction must not stop the job for the others.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to