Cycle anchoring
Cycles are anchored to a date, not to the individual employee’s start date. The anchor is determined by:- Store rollout anchor: if the store has a
rolloutAnchorDate, all employees in that store share cycle boundaries aligned to it - Employment start date: the fallback when no store anchor exists
Phase boundaries
computeEntitlementPhase() returns:
INITIAL phase
- Employee has not yet reached the first replacement boundary
- Receives the initial allocation quantities from rule items with phase
INITIALorBOTH
REPLACEMENT phase
- Employee has passed the first boundary
- Receives quantities from rule items with phase
REPLACEMENTorBOTH - New boundaries occur every
replacementCycleMonthsafter the anchor
Calculation example
Given:- Store rollout anchor: 2024-01-01
- Cycle length: 24 months
- Current date: 2025-06-15
Reporting integration
The replacement system feeds the Replacement Due report, which identifies:- Employees approaching their replacement boundary
- Employees past their boundary (overdue)
- Store-level summary of replacement status
computeEntitlementPhase() function as the order-time engine, so both always agree on cycle timing. See Reporting.