Skip to content

Managing balances

Leave admins manage an individual’s leave from People → the employee → Leave, and everyone’s at once from Leave → Batch operations.

The employee’s Leave tab has three sections plus an action button. It’s visible only to leave admins.

A table per leave type: Entitled, Accrued, Carried, Used, Pending, Adjustment, Available. Monthly-accrual types are labelled (monthly accrual). A year picker at the top of the card goes back to the join year.

The card carries a lock badge — Sensitive — restricted access — because balances are sensitive employee data.

Adjust on any row opens a dialog: Use a negative number to debit. Action is recorded in the audit log.

  1. Enter Days (signed) — positive to credit, negative to debit. Steps of 0.5 are allowed. Maximum 365 either way.

  2. Enter a Reason. This is mandatory, up to 500 characters.

  3. Select Save adjustment.

Adjustments are the right tool for one-off corrections: a goodwill day, a carry-forward exception, docking days taken outside the system, or giving one person a different entitlement to their policy scope.

They survive every recompute — that’s the point of them. The Adjustment cell becomes a clickable signed number (green for credits, red for debits); selecting it opens Adjustment history with When, By, Days and Reason.

Recompute reseeds entitled and carried-forward from the current policies. The helper text is exact about what it doesn’t touch: Used, pending, and adjustments are untouched. It’s only enabled for the current year.

Run it after changing a policy, a leave type’s calculation settings, or an employee’s tenure date or department.

The Off-in-lieu (OIL) grants section lists Type, Granted, Used, Expires, Status and Granted on. It’s hidden if the organization has no manual-grant leave types.

Grant OIL takes a leave type, Days (minimum 0.5, steps of 0.5), an Expires on date — pre-filled from the type’s default with a note like Pre-filled from leave type default (3 months). — and an optional reason.

Void on an active grant confirms with The unspent portion stops being available. Already-taken leave is not refunded. That’s precisely the behaviour: voiding stops future use, it does not undo leave already approved against the grant.

Apply leave on behalf opens the normal request form with two differences: the description says This request will be auto-approved on submit., and the button reads Apply & approve.

Leave filed this way is approved through every workflow step immediately, and the “waiting on you” notifications for those steps are cleaned up so no approver gets pinged for something already decided.

Minimum notice is skipped for on-behalf filing — HR is the escalation path the notice rule points at. Every other rule still applies: balance, overlap, blackouts, department caps, backdating limits, probation, eligibility.

Leave → Batch operations does the same three things for many people at once. Select employees in the grid — search by name, number or department, filter by department, or use the header checkbox to select everything matching your current filters — then use the sticky action bar.

For company shutdowns and shared closures. The dialog notes: Working days are calculated per employee from their own shift calendar and public holidays. Requests are approved immediately.

Types that require a document, off-in-lieu types and disabled types are excluded from the picker.

Each employee is processed independently, so one person’s blackout clash or insufficient balance fails only their row — everyone else still goes through. The results screen lists failures first with the reason, then successes.

A positive number credits days, a negative number deducts them. Applies to the current leave year and survives balance recomputes. Requires a reason. Employees with no matching policy are reported as skipped while the rest commit.

The same fields as the single-employee grant, applied to everyone selected.

For migrating from another system. Reach it from Leave → Settings → Year-end → Import balances.

The upload help is precise about the constraints:

For migrating prior-year balances from another system. Employee numbers and leave type codes must already exist in this organization. Anniversary-basis leave types are not supported here — close their windows via the year-end tools once tenure is set. Re-uploading the same rows is safe: it overwrites the matching balance.

CSV or Excel. Download the Template for the exact headers, with an example row of EMP-0001, AL, 2024, 14, 2, 10, 0.

Column Required Notes
Employee number Yes Must match an existing employee in this organization
Leave type code Yes The short code — AL, MC
Year Yes The calendar year the window starts in. For financial-year types, the year the fiscal window opens
Entitled days No Defaults to 0
Carried-forward days No Defaults to 0
Used days No Defaults to 0
Adjustment days No May be negative. Defaults to 0
  1. Upload the file.

  2. Map columns — headers are auto-matched by name and common aliases. Fix anything unmatched.

  3. Validate & preview. Either you get {n} row(s) ready to import with a preview table, or Found {n} error(s) listing Row, Field and Problem, with a Download error report button.

  4. Select Import {n} balance(s).

Validation is all-or-nothing — a single bad row means nothing is written. Common errors:

  • Duplicate of row 3 (same employee, leave type, year)
  • Employee number “EMP-9999” not found
  • Leave type code “XX” not found
  • Leave type “AL” is anniversary-basis - historical import isn’t supported for it
  • Leave type “OIL” uses OIL grants - import its balance via the grants ledger instead

Re-importing the same rows overwrites rather than duplicating, and it clears any carry-forfeiture stamp so imported carry becomes live again. Re-importing is also how you deliberately change an imported year — since recompute won’t touch it, the file is the only way in.

Some employee edits interact with leave, and the system stops you rather than silently corrupting balances.

Changing the join date or the service date recomputes entitlement across every affected leave year, so saving asks you to confirm first:

Change tenure dates for {Name}? Leave entitlement will be recomputed for every affected leave year. Manual adjustments, used and pending days are preserved. If any leave request would fall before the new join date, or the change would leave a negative balance, the save is refused and nothing is altered.

That last sentence matters: the attempt is safe. Two guards refuse the whole change rather than half-applying it —

  • Cannot move join date: there are leave requests that would start before the new join date. Withdraw or reject them first.
  • Cannot change tenure: it would reduce entitlement below entitlement already taken, leaving a negative balance. Settle or adjust the affected leave first.

Editing anything else on the Employment card saves without the prompt.

Transferring an employee between organizations or employments is blocked while they have active or pending leave: Cannot transfer while there are active or pending leave requests on the source employment.

Promotions and department or designation moves always reseed the employee’s open windows, because those fields decide which policy scope applies. The deliberate policy is reseed, never block — if the new scope grants fewer days than they’ve already taken, the balance is left negative for you to settle rather than blocking the promotion.

Offboarding reassigns the leaver’s role as leave approver to their replacement, hands off any approval steps delegated to them, and reconciles their final leave position — see below.

Offboarding recalculates the leaver’s entitlement down to the slice they actually worked, then tells you what that leaves owed in either direction.

Offboarding is refused while the leaver still has leave in pending, returned or cancellation pending — all three still hold balance, so any final figure computed around them would be wrong:

{n} leave request(s) must be approved, rejected, or withdrawn before offboarding — they still hold balance.

Nothing is changed when this happens. Settle the requests from Leave → Approvals and offboard again. On a scheduled deactivation the same check applies, but the blocked employee is simply skipped and retried on the next run, so one person can’t hold up everyone else leaving that day.

Only the leave year containing the last working day. Earlier years are closed history and are never touched.

Entitlement is re-prorated to the days actually served — someone on 12 days a year who leaves on 30 June earns 181/365 × 12 = 5.95 days. This is written to their balance, so their record shows what they earned rather than a full year they didn’t complete.

Two things are deliberately left alone: leave types that run on off-in-lieu grants (there’s no entitlement to prorate), and any year whose balance came from the historical import.

Comparing what they earned against what they took gives one of:

Result Meaning
Days unused They earned more than they took. Encashable — but only if your organization pays leave out on termination.
Days over-applied They took more than they earned. Recoverable on the final payslip.

Unlike other balances, a leaver’s remaining days are allowed to go negative — that negative is the finding, and hiding it would defeat the purpose.

Both figures flow into the termination helpers on a supplementary payroll run and are pre-filled for you, so you’re not retyping numbers the system already knows:

  • Unused days default the leave encashment amount. Gated by your organization’s encashment policy — with it off, nothing is paid out.
  • Over-applied days default a leave-without-pay deduction. Not gated by the encashment policy: that setting governs whether you pay out unused days, not whether you recover days already paid for.

Both are valued at the Employment Act ordinary-rate divisor (monthly wage ÷ 26), the same rate notice pay uses — paying out and clawing back the same entitlement at different rates wouldn’t be defensible.

You can override either number before saving.