Carry-over rules#
For: Manager | Admin You’ll need: A balance-tracking policy.
When a leave year ends, leftover balance either rolls into the next year, expires, or some mix of both. Carry-over rules on the policy decide which.
What it means#
Two knobs control what happens at the leave-year boundary:
‘Carry-over max’ — the maximum hours that may roll forward. Anything above it is dropped.
0means nothing carries over; leave it blank for “unlimited” (the full leftover balance carries). A negative balance (someone took more than they’d earned) always carries forward in full as debt — the new year’s grant pays it down first.‘Expiry months’ — how long carried-over hours stay valid in the new period. Leave it blank for “no expiry”.
There is no ordering to configure: the balance is one summed pool, not separate buckets. When the expiry deadline passes, the app wipes whichever is smaller — the original carry-over amount or the remaining balance — so hours already spent are never expired twice.
Note
Policies whose balance source is External carry the full balance forward regardless of ‘Carry-over max’, and their carry-over never expires — the external system owns the number.
When to use which#
Pattern |
Max |
Expiry |
Why |
|---|---|---|---|
No carry-over |
|
— |
Use-it-or-lose-it. Common for sick leave caps. |
Limited carry-over with deadline |
|
|
Most common vacation pattern in CH/DE. |
Unlimited carry-over |
blank |
blank |
Generous; balance grows over years. Pair with a sensible ‘Max balance’. |
Carry-over with expiry, no limit |
blank |
|
Don’t cap, but force usage by mid-year. |
How it shows in the app#
At the leave-year boundary, a daily background task reads each policy’s carry-over rule and writes a signed Carry-over row into the How to view the leave ledger for every active person. The new leave year opens with that balance already in place, alongside its fresh Grant row. You don’t trigger this by hand — there’s no period to close.
Nothing is scheduled in advance for the expiry either: the daily task re-scans existing carry-over rows, and on its first run past the deadline it posts a negative Expiry row for whatever part of the carry-over is still unused.
Worked example#
Carry-over max 40 h, expiry 3 months, leave year January – December. Ana ends 2025 with a balance of +58 h.
On 1 January the rollover writes Carry-over +40.00 — the 18 h above the max are dropped silently — plus her new Grant +173.00.
On 1 April the task checks what’s left. If she has booked 200 h by then, her balance is 40 + 173 − 200 = 13, so it posts Expiry −13.00 (only 13 h of the carry-over survived to expire). If she booked nothing, it posts Expiry −40.00.
Tip
The carry-over is written once, when the leave year rolls over. If you change a policy’s carry-over rule afterward, existing carry-overs aren’t recomputed — only future rollovers pick up the new rule.
Verify it worked#
After the leave year rolls over, open How to view the leave ledger and filter ‘Person’ to someone on the policy. They have a Carry-over row dated the first day of the new year, capped at your ‘Carry-over max’, sitting beside their fresh Grant row.