🔁 Leave Lifecycle — Approve, Reject, Cancel, Mark Unnotified
Every leave document in DaaiSuite moves through a strict lifecycle: it is created in Pending, settled in the Leaves grid (Approve or Reject), and — only afterwards — can be terminally undone in just one of two ways. This article spells out every legal transition, who can perform it, and what happens to leave balance and salary at each step.
Understanding the lifecycle matters because the Two-Stage Leave & Attendance Workflow (Stage 1: Leaves; Stage 2: Attendance) and the conflict actions on the Attendance grid all rely on this state machine.
📍 Screen: HRM → Leaves. Approve / Reject / Mark Unnotified actions live in the Action menu on each leave row. Cancel lives both on the row Action menu and inside the leave aside.
📊 The State Machine
Every leave starts as Pending. From Pending, three terminal-bound paths exist:
| Path | Transitions | End State |
|---|---|---|
| 1. Approved → Cancelled | Pending → Approved → Cancelled | Cancelled (leave is treated as if it never existed) |
| 2. Rejected → Mark Unnotified | Pending → Rejected → Marked Unnotified | Rejected + Unnotified (employee was absent without notice; LWP) |
| 3. Pending → Mark Unnotified | Pending → Marked Unnotified (skipping Reject) | Unnotified (also LWP) |
📌 Hard rule: Approved leaves can only be Cancelled. Rejected leaves can only be Marked Unnotified. The system actively prevents the wrong transition (e.g., you cannot Mark an Approved leave as Unnotified, and you cannot Cancel a Rejected leave).
🟡 Pending — The Starting State
- Created when an employee submits the leave form (or HR creates a leave on their behalf and leaves the approval blank).
- Salary engine treats Pending as not deducted — neither paid leave balance nor LWP is consumed yet.
- Visible in the dashboard Pending Leaves count for the relevant approver.
- Visible on the Attendance grid as a Resolve in Leaves chip — it blocks all conflict actions on that day in Attendance until decided.
✅ Approve — Pending → Approved
📍 Action: HRM → Leaves → row Action menu → Approve. Available on Pending rows only. Performed by Reporting Manager, HOD, or any role with Leave Override.
Each leave carries two independent approval slots:
- Manager approval — issued by the Reporting Manager.
- HOD approval — issued by the Department Head.
Either one is sufficient to move the leave to Approved. Whether your company requires both, only Manager, or only HOD is configured in Settings → Leaves.
Effects on save:
- Leave moves to Approved.
- Paid leave balance is consumed (or LWP is applied for unpaid days).
- Salary engine reads the approved leave at the next run.
- Email notification fires (if enabled).
❌ Reject — Pending → Rejected
📍 Action: HRM → Leaves → row Action menu → Reject. Available on Pending rows only. Same approver permissions as Approve.
Effects on save:
- Leave moves to Rejected.
- No leave balance is consumed.
- Salary engine treats the rejected leave as if no leave existed for those days.
- If the employee did not show up on those days, the Attendance kebab on each affected day will offer Mark as Unnotified as the next step.
🚫 Cancel — Approved → Cancelled
📍 Action: HRM → Leaves → row Action menu → Cancel, or open the leave aside and click Cancel. Available on Approved rows only. Permission: Leave Override.
Cancel is the way to undo an Approved leave — for example, when the employee actually showed up, the leave was filed by mistake, or business priorities pulled the employee back to work.
Effects on save:
- Leave moves to Cancelled.
- Paid leave balance is refunded (the days return to the employee’s available balance).
- Salary engine treats the cancelled leave as if it never existed — the day is governed by Attendance alone.
- If the cancelled day later turns out to have no attendance either, the Attendance kebab on that day offers a fresh Add Paid / Add Unpaid / Add Unnotified trio.
⚠️ Cancel is only available on Approved leaves. To undo a Rejected leave, the path is different — see Mark Unnotified below. To undo a Pending leave, ask the employee to delete it from their list (or do it yourself via the row Action menu).
🟠 Mark Unnotified — Pending or Rejected → Marked Unnotified
📍 Action: HRM → Leaves → row Action menu → Mark Unnotified. Available on Pending or Rejected rows only. Permission: Leave Override.
Mark Unnotified records that the employee was absent on those days without following the leave-request process — i.e., they didn’t apply, or they applied but were rejected and still didn’t show up. The leave document stays as a permanent record for audit, but is flagged as Unnotified.
Effects on save:
- Leave is flagged as Unnotified.
- For each day, the salary engine deducts Loss of Pay (LWP).
- The day appears in dashboard Absent counts.
- Email notification fires to the employee + their manager (if enabled).
📌 Approved leaves cannot be Marked Unnotified. If an Approved leave needs to become LWP, the path is: Cancel the leave first (refunding the balance), then re-create it as Unpaid via the Attendance kebab on each affected day.
👥 Who Can Do What
| Action | Employee | Reporting Manager | HOD | Override User |
|---|---|---|---|---|
| Apply Leave (creates Pending) | ✅ Self | ✅ Team | ✅ Department | ✅ Anyone |
| Approve / Reject Pending | ❌ | ✅ Team | ✅ Department | ✅ Anyone |
| Cancel Approved | ❌ | ❌ | ❌ | ✅ Yes |
| Mark Pending / Rejected as Unnotified | ❌ | ❌ | ❌ | ✅ Yes |
| Edit a Leave (post-Pending) | ❌ | ❌ | ❌ | ✅ Yes |
🔒 The Leave Override permission is the gate for every post-Pending change. It is granted from Settings → Roles → Leaves. The same permission unlocks the Attendance-grid kebab actions and the optional Reconciliation view inside the Leaves module.
🔐 Approve / Reject — Behind the Scenes
The approver role is sent to the server in lowercase (hod or manager). The DaaiSuite UI does this for you — manual API calls with mixed-case values are rejected. This is a small thing to know if you ever script approvals against the API.
📋 Compound: “Mark as Unnotified” When Shapes Don’t Match
When the rejected leaf shape doesn’t match the attendance shape (e.g., a Rejected Half leave on an Absent day), Mark as Unnotified chains an automatic Convert step before marking, so the resulting Unnotified leave matches the attendance evidence:
| Rejected Leaf | Attendance | Steps | End State |
|---|---|---|---|
| Full | Absent | Mark | Rejected + Unnotified + Full |
| Half | Absent | Convert to Full → Mark | Rejected + Unnotified + Full |
| Half | Half Day (matching half) | Mark | Rejected + Unnotified + Half |
| Full | Half Day | Convert to Half → Mark | Rejected + Unnotified + Half |
The leave’s Approval state stays Rejected throughout — the Convert step only changes the leave’s shape (full/half), never its approval.
📊 Audit Trail
Every transition is recorded in the leave’s Change Log tab (visible inside the leave aside) with:
- Who performed the action (user + role).
- When it happened (timestamp, displayed in Indian-standard dd-MMM-yyyy HH:mm format).
- What changed (before / after).
- Reason / Notes if provided.
The Change Log is permanent — entries cannot be edited or deleted. This is critical for compliance and for resolving disputes about leave history.
🚫 What the Lifecycle Does NOT Allow
📌 Hard rules — system enforces, no workaround:
- You cannot Cancel a Rejected leave. Use Mark Unnotified instead, or delete the rejected document if it was a clerical mistake.
- You cannot Mark an Approved leave as Unnotified. Cancel first, then re-create as Unnotified via the Attendance kebab.
- You cannot reactivate a Cancelled leave. Create a new leave with the same dates if needed.
- You cannot directly Approve a Rejected leave. Either Mark Unnotified, or delete + re-create + approve.
- You cannot change Approval and Shape (full/half) in the same save when going through Mark Unnotified — the system splits it into two server calls automatically (Convert, then Mark) so the Change Log captures both.
💡 Tips
- Stay in Stage 1. Approve / Reject / Mark Unnotified for Pending leaves all happen in the Leaves grid — don’t try to do them from Attendance.
- Use Cancel sparingly on Approved leaves. If the employee actually worked, prefer Cancel; if they were absent without informing, prefer leaving the leave Approved as paid (or convert to Unpaid by editing it first).
- Mark Unnotified is the LWP path. When an employee no-shows on a day they had a Rejected leave for, the cleanest record is Reject the leaf + Mark Unnotified — it makes the audit trail clear: “applied, rejected, still didn’t come, salary deducted”.
- Always add a Reason on Cancel / Mark Unnotified. The Reason is the first thing auditors and finance look at when reconciling a salary. A blank Reason creates avoidable questions.
- Email notifications matter. Approve / Reject / Mark Unnotified all send emails (when configured). Make sure your tenant has email templates configured under Settings → Email Templates so employees aren’t blindsided.
🔗 Related Articles
- Leaves — module overview, leave types, balance, application form.
- How to Apply for Leave — the employee-side flow.
- Leaves Approval & Permissions — who can approve / reject / override.
- Resolve Attendance Conflicts — Stage 2 workflow that depends on this lifecycle.
- Two-Stage Leave & Attendance Workflow — the bigger picture for monthly payroll.
- Salary — how Approved / Unnotified leaves flow into Paid Days computation.

