/hr/leave (the list) and /hr/leave-requests/:id (a single request)
Requests, approvals, and balances are all per business. The list and calendar show only the active business’s requests, and an approver cannot action a request whose contract belongs to another business. Confirm the business switcher before you work the queue.
📷 Screenshot: the Leave Management list with the row checkboxes and the bulk Approve / Reject / Cancel action bar — to be added.
The list
The leave requests page is titled Leave Management. Four tabs sit across the top:- All — every request.
- Pending — submitted requests awaiting a decision (the queue badge shows the count).
- Approved
- Rejected
Raising a request on behalf of an employee
If you holdhr:write, a New Request button appears. (There is no separate “create leave” permission — the create and cancel actions are governed by the coarse hr:write.)
📷 Screenshot: the New Leave Request modal — employee picker, leave type, From/To dates, reason, and the “Submit for approval now” checkbox — to be added.In the New Leave Request form:
The form shows the inclusive Duration in days as you pick the dates. On save you get either “submitted for approval” or “saved as draft”, and you’re taken to the new request.
The statuses
What approval does to the balance
This is the single most important thing to understand:Leave is deducted on approval — never on submission. A request sitting in Pending Approval has taken nothing from the balance. The deduction (a negative LeaveApplication ledger entry plus an increment to the balance’s Used days) is written only when the request becomes Approved.A direct consequence: there is no provisional hold to release. If a pending request is rejected or cancelled, there is no deduction to refund — because none was ever made. (The only refund case is cancelling a request that had already been approved; see below.) When a policy does not require approval, submitting auto-approves the request immediately — so the deduction happens right then, on submit.
Approving and rejecting
Reviewing the queue needshr-leave:approve. A dedicated approver role typically holds hr-leave:approve and hr-leave:read (so it can see and action the queue) without the wider HR permissions.
One at a time — open a Pending Approval request and use the Approve or Reject buttons in the header.
- Approve asks you to confirm, then advances the request and deducts the balance.
- Reject opens a box for a reason (required) — the submitter is notified — and turns the request down. Rejecting also closes any open approval task so nothing is left dangling.
Half-day leave
A request can mark one day inside its range as a half-day, deducting 0.5 instead of a full day. On the self-service apply form, ticking Half day (and, for multi-day ranges, picking which day is half) reduces the computed duration by half a day. A half-day cannot land on a holiday.The HR-side New Leave Request form does not currently expose the half-day option — raise half-day requests from the self-service portal, or set the dates to a single day there. (Flagged below.)
Validations you may hit
When a request is created or submitted, Hitaji checks it against the leave type and policy rules. Common refusals:- Insufficient balance — the request exceeds available days (unless the type has Allow Negative Balance on). The message states what’s available versus requested.
- Max leaves allowed / max continuous days / min days between applications — limits set on the leave type.
- Probation gate — the type’s Applicable After days have not yet elapsed since the contract start.
- Backdated — a past start date is refused unless the policy permits it (or your role is allowed to bypass).
- Attendance already marked — if the type has Validate Attendance on, a request overlapping a Present / Work-From-Home day is refused.
- Block list / overlap — the dates fall in a block-listed window, or overlap an existing leave.
Cancelling or withdrawing
Cancelling needshr:write. From a request’s detail page (or the bulk action bar) use Cancel Request.
- Cancelling a Draft or Pending Approval request simply withdraws it — nothing was deducted, so nothing changes on the balance.
- Cancelling an already-Approved request refunds the deducted days: Hitaji writes a positive reversal to the ledger and restores the balance.
⚠️ Current state: The server will cancel an already-approved request (and refund it), but the HR web screens only show the Cancel button for Draft and Pending-Approval requests — the button is hidden once a request is Approved. So today there is no UI path to cancel an approved leave from the HR pages even though the backend supports it. (Flagged for the team.) Note the guard that does exist: cancelling an approved leave is blocked if a submitted payslip already covers the same period — you must cancel and amend the payslip first, so payroll never silently desyncs from the leave ledger.
The request detail page
Opening a request shows three tabs:- Overview — employee, leave type, start/end dates, duration, status, reason, approver, and approval time; a rejected request shows its rejection reason in a red callout. The header carries the Approve / Reject / Cancel actions when they apply.
- Activity — the timeline of changes plus a comment thread.
- Workflow — the approval workflow history.
Permissions
Related
- Leave overview — the end-to-end model
- My leave (self-service) — how employees apply for themselves
- Leave calendar — see approved leave on a calendar
- Leave allocations (control panel) — where the balances come from
- Leave reports (balance & ledger) — audit deductions and refunds
- Holiday lists — how holidays affect day counts