Leave Requests

One Queue. Three Outcomes. No Email Threads.

Leave requests turn time-off conversations into a queue with an audit trail. Workers submit from the app — picking dates, seeing their current balance, optionally adding a note. Managers review from a single queue that surfaces balance impact, conflicting shifts, who else is already off, and the worker's recent leave history. Three decisions are available: approve (books the leave and adjusts the balance), decline (soft for 'try different dates' or hard for 'no'), revoke (undoes a previous approval when circumstances change). Every change writes to the transaction ledger with timestamp, author, and reason — visible to auditors, useful when a paycheck question comes up months later.

Three Outcomes, Three Tones

What Each Decision Means.

Same queue, different consequences for the worker.

Approve

Books the leave.

Balance updates and the worker is marked on-leave on the schedule, so the booked days surface as conflicts on any shifts still assigned to them. Worker gets a notification with the dates and remaining balance.

Decline

Soft or hard.

'Needs adjustment' (soft) lets the worker re-request with different dates. 'Declined' (hard) closes it — used when the answer is no, not 'try again.' Both write a reason field for the audit trail.

Revoke

Undoes a previous approval.

For when circumstances change after approval — coverage gap appears, business need shifts. Returns the days to the worker's balance, notifies them with a reason.

Same Request, Two Views

What the Worker Sees vs What You See.

Worker Side

In the app.

Date picker, leave type, optional note. Sees their current balance before submitting. After submission: status updates as the request moves through approval. Calendar shows pending and approved leave alongside scheduled shifts.

Manager Side

In the queue.

Every pending request, sortable by date, person, or type. Each row shows: balance after this request, conflicting shifts, who else is off on those days, the worker's recent leave history. Decision is one click. Reason field — visible to the worker on decline, internal-only on revoke.