FEATURE · Employee Attendance

Apply, approve, deduct — every leave, one queue. Half-day, WFH, on-duty included.

From the Hindi PGT's same-day Casual Leave to the Maths PGT's twenty-day Maternity, every staff leave application flows through one queue — with multi-level approvers per department, half-day support, work-from-home and on-duty modes, attachment uploads for medical certificates and an audit trail every CBSE inspector recognises. Approved leaves deduct the right balance, mark the daily attendance and feed the salary register — the same second, no spreadsheet.

BG PICCOZONE

How most Indian schools handle leave applications today

The Hindi PGT walks into the office at 7:42 a.m. on a Tuesday with a handwritten leave application: 'Two days CL, please, my mother-in-law is admitted.' The head clerk takes the slip, hands it to the principal at 9:15. The principal signs, the slip goes back to the head clerk, the head clerk writes 'L' in the register against the teacher's name for Wednesday and Thursday — and that is it. No leave balance is updated; no record of the reason exists beyond the slip; the salary calculation in two weeks will or will not deduct the right amount depending on whether the head clerk remembers.

The Mathematics PGT applies for ten days of Earned Leave by email on a Sunday. The principal opens the email Monday morning, forwards it to the trust office, the trust office takes four days to respond, the teacher in the meantime cancels her train tickets because she has no answer. When approval finally comes, the head clerk has to compute her remaining EL balance manually — 21 allocated, three previously used, a half-day in October, ten now — and the answer is wrong by a half-day because nobody remembers October's half-day.

Most school ERPs offer a 'leave application' module that is essentially a digital version of the paper slip — you fill, you submit, somebody approves, the data sits there. They do not handle multi-level approvers per department, they do not handle half-day, they do not handle Work-From-Home as a leave mode, they do not deduct from balance the same second, and they certainly do not auto-mark the daily attendance on approval. The result is a queue of approvals that nobody trusts, balances that go out of sync, and a F&F that takes three weeks because the leave history has to be reconstructed from emails.

Inkwelly employee leaves dashboard showing PENDING, APPROVED, REJECTED and CANCELLED applications with leave type, dates, balance and approver for an Indian CBSE school
One queue — every staff leave application, every state, with the live balance the teacher actually sees.

How Inkwelly Leaves works — apply, approve, deduct, in one flow

Open Employee Attendance → Leaves and you land on the leave-application queue with state-segmented tabs: PENDING, APPROVED, REJECTED, CANCELLED. Filter by department, by leave type, by date range, by short-leave-only, by work mode (ON_SITE, WFH, HYBRID, ON_DUTY). The principal usually keeps the page open on PENDING all day; the head clerk filters by REJECTED to follow up; the accountant on the 1st filters by APPROVED with date-range = previous month for payroll computation.

Applying for leave is a one-page form. The teacher picks a leave type from the dropdown that her department and gender qualify her for — the catalogue from Leave Types drives this list. She picks startDate and endDate, types a reason, and the form computes duration (full or partial day count). She can mark halfDayType — FIRST_HALF (morning) or SECOND_HALF (afternoon) — if she only needs half a day. She can mark isShortLeave with shortLeaveFrom and shortLeaveTo (e.g., 11:00 to 13:00 for a passport-office visit) — the system records the time-bound short leave without consuming a half-day from her balance.

For planned absences, she sets workMode: ON_SITE (default — actual leave), WFH (working from home, gets approved differently and counts as a working day for payroll), HYBRID (some hours in school, some at home), ON_DUTY (CBSE workshop / sports trip / external examination duty — still 'present' on payroll). She can name an alternateEmployeeId — the colleague who will cover her classes — and contactDuringLeave for a phone number. She can attach a medical certificate or Form 21 to attachmentMediaId if Leave Types requiresDocument = true for this leave.

On submit, the application status is PENDING. Inkwelly's EmployeeLeaveBalance.totalPending ticks up the same second — the balance she sees drops to reflect the application even before approval. The application is routed to the right approver based on the LeaveApprovalAuthority table for her department: a department with approvalLevel = 1 set to the Coordinator means her application sits in the Coordinator's PENDING queue first. If the Coordinator approves, the status flips to APPROVED (or to the next level if the department has multi-level approvers configured). If the Coordinator rejects, the status flips to REJECTED with rejectionReason recorded.

Approval has fine-grained permission flags. The Coordinator might have canApproveLeave = true, canApproveShortLeave = true, canApproveWFH = false, canApproveOnDuty = false — meaning short leaves and regular leaves she can sign off on, but WFH and On-Duty applications route past her to the Principal. The system reads the flags on every approval call; mismatches return an explicit permission error rather than silently approving the wrong type.

On APPROVED status, three things happen the same second. First, EmployeeLeaveBalance.totalUsed ticks up by the duration; totalPending ticks down. Second, an EmployeeDailyAttendance row is created (or updated) for each day in the leave window with status = LEAVE (or HALF_DAY_LEAVE for half-days) and leaveApplicationId linking back. Third, the audit log records the approver, the timestamp, the IP. The teacher receives a push notification + WhatsApp message; the head clerk's PENDING queue drops by one; the salary register for the month adjusts in real time.

Cancel is the cleanup path. If the teacher's plans change before her approval, she opens the application and hits Cancel — status flips to CANCELLED, totalPending drops, balance restored. If she cancels after approval (e.g., a Sick Leave that turned out unnecessary), totalUsed reverses, totalPending reverses if she had any, the daily attendance row is rolled back to her usual present status. Both cancellation paths are audit-logged.

Every leave-flow capability Inkwelly Leaves ships with on day one

  • Four states tracked first-class — PENDING, APPROVED, REJECTED, CANCELLED — every transition audit-logged
  • startDate and endDate with computed duration — system handles weekends and holidays per academic sessions calendar
  • halfDayType — FIRST_HALF (morning) or SECOND_HALF (afternoon) — deducts 0.5 from balance, marks the day half-LEAVE on attendance
  • isShortLeave with shortLeaveFrom / shortLeaveTo — the two-hour passport-office visit doesn't consume a half-day
  • workMode — ON_SITE / WFH / HYBRID / ON_DUTY — each treated correctly on payroll and attendance
  • Multi-level approver chain via LeaveApprovalAuthority — Level 1 Coordinator, Level 2 Principal, etc. — per department
  • Approver permission flags — canApproveLeave, canApproveShortLeave, canApproveWFH, canApproveOnDuty — fine-grained per role
  • alternateEmployeeId — the colleague who will cover her classes — visible in approver review
  • contactDuringLeave — phone number for emergencies during the leave
  • attachmentMediaId — upload medical certificate, Form 21 (Maternity), or any required supporting document
  • reason field — required, recorded, searchable across approvals and rejections
  • Auto-approve for leave types with requiresApproval = false — typically On-Duty (already principal-sanctioned)
  • Approval feeds daily attendance the same second — leave days mark as LEAVE, half-days as HALF_DAY_LEAVE
  • Approval feeds Leave Allocation balance — totalUsed ticks up, available ticks down, instantly
  • Cancellation reverses everything cleanly — audit-logged, balance restored, daily attendance rolled back

Walkthrough — the four screens of an Indian-school leave application

BG PICCOZONE
Apply for leave — leave type, dates, half-day option, work mode, reason, alternate employee, attachment.
BG PICCOZONE
Approver queue — every PENDING application with employee, leave type, duration, balance and supporting attachment.
BG PICCOZONE
Approval detail — review the application, see live balance, approve / reject with reason.
BG PICCOZONE
Approved — leave reflected on daily attendance, balance debited, audit trail captured.

Half-day support — the absence type that paper registers always got wrong

The Hindi PGT needs the morning off for a parent-teacher meeting at her son's school but plans to be in school after lunch. On paper, this becomes 'half day' written ambiguously — was it morning, or afternoon? Was she present for the second half? Inkwelly captures this through halfDayType = FIRST_HALF (or SECOND_HALF). The system deducts 0.5 days from her CL balance, marks her daily attendance row as HALF_DAY_LEAVE with the half-day type, and her afternoon punches still register as a present second half. The salary register reflects 0.5 days deducted from leave balance and a full day of attendance — because she did show up for the second half.

Inkwelly leave application form showing FIRST_HALF half-day option for an Indian school PGT teacher's morning absence with afternoon attendance preserved
Inkwelly Work-From-Home work mode application for a Coordinator's two-day WFH approved by the Principal at an Indian school

Work-From-Home and On-Duty — the modes paper registers don't have

The Coordinator finishes a CBSE submission deadline that requires deep focus; she requests two days of workMode = WFH. The Maths PGT accompanies the school cricket team to a state-level tournament; the Principal marks his three-day absence as workMode = ON_DUTY. The Hindi teacher attends a CBSE workshop in Lucknow; same. WFH and On-Duty are treated as 'present' on payroll — no salary deduction, no leave balance consumed — but they appear distinctly on attendance reports so the auditor can see what kind of presence each day represents. Different from regular leave, different from absent, captured as first-class fields.

Multi-level approvers, configured per department

The Mathematics department in your school has a Coordinator who handles teacher leave; the Coordinator's own leaves go to the Principal. The Bus Crew department has only the Transport In-Charge; his leaves go directly to the Principal. The Administration department has the Head Clerk approving casual leaves and the Principal approving anything above three days. Inkwelly's LeaveApprovalAuthority table captures all three patterns. Each row is (departmentId, approvalLevel, approverId, canApproveLeave, canApproveShortLeave, canApproveWFH, canApproveOnDuty). An application moves through approval levels in sequence; if any level rejects, the chain stops. The exact configuration matches your school's actual reporting structure — not a textbook generic 'employee → manager' assumption.

Inkwelly LeaveApprovalAuthority configuration showing multi-level approvers per department — Coordinator at level 1, Principal at level 2 — with permission flags for an Indian school
Inkwelly leave application audit trail showing every state transition — PENDING, APPROVED — with approver, timestamp, IP and rejection reason for an Indian CBSE school

A complete audit trail, not a Gmail thread

Every state transition on every leave application is logged: who submitted on which date and IP, who approved or rejected at which level, what the rejection reason said, when the cancellation happened. The audit log is the Identity & Access Management audit — a single 'who approved this leave' query during a CBSE inspection or a trust review returns one continuous record. There is no scenario where a leave was approved without an approver row; no scenario where a balance was deducted without a state transition; no scenario where a teacher's exit shows leave history different from the daily attendance record.

Mere school mein leaf-letter waala system tha. Ab teacher phone se apply karti hai, mujhe approve karne mein 30 second lagte hain, balance turant update ho jata hai. F&F bhi 10 minute mein nikal jata hai — pehle 3 hafte lagte the.
Anil Kumar Pandey · Principal · AVM Bazar Atariya, Bahraich, UP

Real-world leave-application scenarios Inkwelly handles every term

1. Same-day Casual Leave. The Hindi PGT walks in at 7:30 a.m. with the news that her mother-in-law is admitted to a hospital in Lucknow. She opens the Inkwelly mobile app at 7:35, picks Casual Leave, sets dates 5 and 6 March, picks halfDayType = null (full days), types 'Mother-in-law admitted', sets alternateEmployeeId = the assistant Hindi teacher. Submit. The Coordinator's phone pings; she approves at 7:39. Status APPROVED, balance debited, daily attendance marked LEAVE. The Hindi PGT leaves for Lucknow at 8 a.m. without setting foot in the office. Total elapsed time: nine minutes.

2. Maternity Leave with Form 21 attachment. The Mathematics PGT applies for 26 weeks of Maternity Leave starting 12 May. She picks Maternity (only visible to her because applicableGender = FEMALE), sets startDate = 2026-05-12, endDate = 2026-11-09, attaches Form 21 to attachmentMediaId, types her doctor's name in reason. Submit. The Principal reviews the attachment, the dates against the academic calendar, and approves. Status APPROVED, all 182 days marked MATERNITY_LEAVE on daily attendance, salary continues at full rate per the Maternity Benefit Act 1961, payroll treats her as on paid leave. Her teaching responsibilities are reassigned via substitution automatically.

3. Half-day for a parent-teacher meeting. The English PGT's son has a parent-teacher meeting at his school at 11 a.m. on a Wednesday. She applies for halfDayType = FIRST_HALF for that day, picks Casual Leave. The Coordinator approves. Daily attendance marks the day as HALF_DAY_LEAVE with halfDayType = FIRST_HALF. She arrives at school at 1:30 p.m., punches in via biometric — the afternoon attendance is preserved. The salary register reflects 0.5 CL deducted from balance and a full day of attendance.

4. WFH for a CBSE board paper-correction week. The Senior English PGT is appointed a CBSE Board paper checker. She needs to be at the central evaluation centre for five days. She applies with workMode = WFH, picks the date range, types 'CBSE Board evaluation duty'. The Principal (who is the only one with canApproveWFH = true) approves. The five days mark WFH on attendance — no balance deduction, no salary deduction, but the attendance record shows where she was. Auditor satisfied.

5. Short leave for a passport-office visit. The Junior PRT needs two hours off for a passport-office appointment. She applies with isShortLeave = true, shortLeaveFrom = 11:00, shortLeaveTo = 13:00. The Coordinator approves. The day stays marked PRESENT on her daily attendance — short leave does not consume a half-day. Two hours show as 'short leave' on her working hours report; the salary register treats the day as a full present day.

Common leave operations Inkwelly Leaves covers

  • Apply for full-day leave from the mobile app in under thirty seconds — with reason, attachment and alternate cover
  • Apply for half-day leave with FIRST_HALF or SECOND_HALF — deducts 0.5 days, preserves the other half's attendance
  • Apply for short leave with start and end times — doesn't consume balance, day stays PRESENT
  • Mark a leave as Work-From-Home — attendance reflects WFH, payroll counts as full present day
  • Mark a leave as On-Duty for CBSE workshop / sports trip / external examination duty
  • Attach a medical certificate or Form 21 — mandatory for leaves with requiresDocument = true
  • Name an alternate teacher to cover classes — visible to the approver and to substitution flow
  • Approve / reject from the principal's mobile app while in transit — status flips, balance updates, no laptop required
  • Auto-approve On-Duty applications — no extra approval cycle for leaves the principal already initiated
  • Cancel a pending application before approval — balance restored, audit-logged
  • Cancel an approved application before the leave starts — balance reversed, attendance row rolled back
  • Filter the queue by department, leave type, status, date range, work mode — manage 64 staff in one screen
  • Export the approved-leave list for a calendar month — ready for the salary register CSV import

See Leaves live with one of your teacher's actual leave history

Bring last month's leave register — names, dates, leave types — to a 25-minute demo. We will recreate three of those applications in front of you (full-day, half-day, WFH), approve them, and show the balance updates and daily attendance changes flowing in real time.

Configure Leave Types firstSee Employee Attendance module

Limits, safety and the small print

Approval is sequential, not parallel. A multi-level approval chain runs Level 1 → Level 2 → Level 3 in order. Approvals at higher levels do not bypass lower levels; each approver sees the application only after all preceding levels have approved. Rejection at any level stops the chain immediately and notifies the applicant. There is no approval-quorum mechanism (e.g., 'two of three approvers') in v1; the chain is strictly hierarchical.

Cancellation after approval reverses balance and attendance — once. If a teacher cancels an approved leave (e.g., a Sick Leave she didn't end up taking), the system reverses totalUsed once and rolls back the daily attendance row. A second cancellation attempt is rejected because the application has already been cancelled. Audit log captures both the original approval and the cancellation.

Half-day cannot span multiple days. A halfDayType can only be set when startDate = endDate. If a teacher needs the morning of one day and the afternoon of another, she submits two separate applications. This is intentional — the daily attendance row stores one halfDayType per day, so spanning would require breaking model invariants.

requiresDocument = true is enforced at the application form, not at approval. The form blocks submission if the leave type requires a document and attachmentMediaId is missing. The approver does not need to verify the document was uploaded — the form already did. The approver is free to read the document and reject if the document is invalid (e.g., a doctor's certificate that doesn't match the dates), with the rejection reason recorded.

Permission gating. Submitting a leave application requires iam:school:create-leave-applications (granted to all staff by default). Approving requires iam:school:approve-leave-applications AND a LeaveApprovalAuthority row at the right level for the applicant's department. Viewing all applications requires iam:school:view-all-leave-applications — typically Principal, Head Clerk, Accountant. Audit log captures every action.

Multi-language ready. The leave application form, the dropdown labels, the status badges — all wired through next-intl. Hindi-medium teachers see the form in Hindi; the head clerk sees the queue in English. The same record displays correctly to both audiences without duplicate storage.

Belongs to

1 module

Frequently asked

8 questions
How long does a teacher actually take to apply for a leave on the Inkwelly mobile app?

Around thirty seconds for a full-day Casual Leave with no attachment — pick the leave type from the dropdown, pick the date(s), type a one-line reason, hit submit. A bit longer (one to two minutes) for a Sick Leave with a medical certificate attachment, or a Maternity Leave with Form 21. The form is one scrolling page; balance is shown live above the date picker so the teacher knows whether she has the days before she even completes the form.

What if the principal is travelling and can't approve from the office?

The principal opens the same Inkwelly app on her phone. The PENDING queue is identical to what she would see on the laptop — every application, every leave type, every attachment. She approves with one tap; the status flips to APPROVED, the teacher's balance updates, the daily attendance gets marked, the audit log records the approval timestamp and the IP. If the principal will be out for an extended period, you can configure a delegate approver via the LeaveApprovalAuthority table — typically the Vice Principal — who picks up the queue in her absence.

Can the same teacher apply for half-day in the morning and short leave in the afternoon on the same day?

No — half-day already accounts for one half of the day, so the other half is by definition full attendance. If she needs both (an unusual scenario, e.g., a court visit in the morning and a passport visit at 3 p.m.), she has two options: submit a full-day Casual Leave and skip the afternoon punching, or just submit the morning half-day and use her natural break / lunch hour for the afternoon visit without claiming a short leave. The model is intentional — each day's attendance row carries exactly one leave-state at most.

What happens if a teacher applies for a leave with insufficient balance?

The application form rejects the submission before it reaches the approver — it shows 'Insufficient balance: you have 4 CL available, this application is for 6 days.' The teacher cannot submit until she reduces the duration, picks a different leave type with sufficient balance, or asks the head clerk to grant a Loss-of-Pay (LOP) leave manually. The system never lets a leave application sit in the approver's queue if it would result in a negative balance — a critical guardrail for clean payroll.

How are Work-From-Home and On-Duty days different from regular leaves on the salary register?

WFH and On-Duty are treated as 'present' on the salary register — no day deducted from leave balance, no day deducted from salary. They are stored on daily attendance with distinct status values (`WFH`, `ON_DUTY`) so the [monthly attendance report](/modules/employees-attendance) shows them separately from regular present days. Useful when the trust audits 'how many days was Teacher X actually in school' versus 'how many days was she paid for'. Both numbers are correct, both are queryable, neither requires manual reconstruction.

Can the school override the leave approval chain for emergencies?

Yes — the Principal (or any role with `iam:school:approve-leave-applications`) can override the multi-level chain by approving directly, regardless of which level she sits at. The override is captured as 'approved at Level X by override' in the audit log, with the reason field recording the principal's override note. Useful when the Coordinator who would normally approve is herself on leave; the Principal steps in without re-configuring the LeaveApprovalAuthority table mid-emergency.

How does the daily attendance show a leave once it's approved?

The same minute the leave is approved, an `EmployeeDailyAttendance` row is created (or updated if the day already had a punch record) for each day in the leave window. Status is `LEAVE` (full-day), `HALF_DAY_LEAVE` (half-day), `WFH` or `ON_DUTY` per the application's work mode. The row carries `leaveApplicationId` linking back to the original application, so any audit query 'why is this teacher marked LEAVE on 12 March' returns the full application detail with one click. The daily attendance and the leave history are always in sync — not by reconciliation, but by design.

What about emergency leaves where the teacher has not pre-applied?

Two patterns. First, the teacher applies the same morning of the absence (Sick Leave with `minDaysNotice = 0` allows this) and the Coordinator approves it within thirty minutes. Second, the head clerk applies on her behalf (with role `iam:school:create-leave-applications-for-others`) when the teacher is unreachable; the application is then approved by the principal and back-dated to the actual date of absence. Both flows are audit-logged with 'applied by' versus 'applied for' to preserve the distinction.

You might also like

3 reads

See Inkwelly on your school

30-minute demo. We open your current ERP with you and load your data into Inkwelly on the call. Dated go-live plan by the end of it.

Apply & Approve Staff Leaves · Inkwelly