# Tracking modes — balance, spell, and unlimited

**For:** Manager | Admin
**You'll need:** Nothing.

Every leave policy in {{ app_name }} runs in one of three tracking modes. The mode is the most important decision on the form — it shapes which fields you'll fill in and what the ledger records when a request is approved.

## What it means

**Balance.** {{ app_name }} keeps a running hours balance per person. Approving a request books hours against it; revoking puts them back. Vacation is the classic case: a yearly entitlement, accruals through the year, a ceiling, and a balance the worker can see.

**Spell.** {{ app_name }} doesn't deduct from a pool — it records each absence as its own bounded "spell" with a start and end. Sick leave under Swiss EFZG §3 works this way: each illness spell consumes its own continued-pay entitlement, and a follow-up illness inside the linking window extends the original spell rather than starting a new one. See {doc}`efzg-spell-linking`.

**Unlimited.** No accrual, no ceiling, no tier ladder. Approval still creates a request and a calendar event, but no balance moves. Use this for leave types you want to log and visualise without limiting — paid bereavement, study leave, jury duty.

## When to use which

| Leave type | Mode | Why |
|---|---|---|
| Vacation / annual leave | Balance | Pooled entitlement that accrues and carries over. |
| Sick leave (CH, EFZG §3) | Spell | Continued-pay entitlement is per illness, not per pool. |
| Unpaid leave | Balance or unlimited | Use balance if you cap it; unlimited if you only need a record. |
| Paid bereavement, jury duty | Unlimited | You log it but don't deduct from anything. |
| Time-comp time off | Balance | Hours come in via Time compensation; this policy spends them. |

If you're not sure, start with **Balance** — you can always cap entitlement to zero and still get the calendar event and audit trail, then switch later as your needs sharpen.

## How it shows in the app

On the policy form, choosing a tracking mode reveals the fields that mode uses and hides the rest. Balance reveals accrual, entitlement, max balance, and carry-over. Spell reveals the linking window. Unlimited collapses most of the form down to identity fields.

When a request is approved, the **'Leave transactions'** ledger records what happened: a `BOOKING` for balance policies, a `SPELL_OPEN` for spell policies, nothing for unlimited.

## Related

- {doc}`aggregation-and-anchors`
- {doc}`carry-over`
- {doc}`efzg-spell-linking`
- {doc}`manage-leave-policies`
