Fix subscription penalty escalation to use correct per-year overdue model
The old calculator applied a flat percentage by position (oldest=10%, next=50%,
next=100%). The correct model: each year's penalty escalates based on how long
THAT SPECIFIC year has been overdue:
- Same year past grace (3 months): 10%
- 1 year overdue: 50%
- 2 years overdue: 100%
- 3 years overdue: 200%
- 4 years overdue: 300%
- 5+ years: membership dropped
Also adds:
- Grace period rule (SUB_GRACE_MONTHS = 3, extended = 4 with trustees approval)
- YEAR_4 (200%) and YEAR_5 (300%) rules in DB
- canReinstate() method for 12-month reinstatement window
- expireReinstatements() for permanent drop after window expires
Co-Authored-By:
Claude Opus 4.6 <noreply@anthropic.com>
Showing
Please register or sign in to comment