Skip to main content
A leave request (also called a leave application) is when someone asks for specific dates off. It is the heart of the leave module: the request moves through a short workflow, and when it is approved the days are taken from the employee’s balance. Requests can be raised by an employee through self-service, or by HR on an employee’s behalf. This page covers the HR-side experience — the leave requests list, raising a request for someone, reviewing the queue, approving or rejecting, and what happens to the balance at each step. You’ll find this at: /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
Each row shows the Employee, Leave Type (the policy name), the Duration (date range), the number of Days, and the Status. You can search by employee, and filter by Leave Type and a Start Date range. Click any row to open the request’s detail page. On a phone the list becomes a set of cards.

Raising a request on behalf of an employee

If you hold hr: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 needs hr-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.
In bulk — tick rows in the list to reveal an action bar with Approve and Reject (and Cancel). Only Pending Approval rows are eligible for approve/reject; the bulk reject prompts once for a shared reason. Each row is processed independently, so you’re told how many succeeded and how many couldn’t. The recorded approver is resolved from you (the signed-in person), so the audit trail always reflects who actually decided.

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 needs hr: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