Leave management software collects employees’ annual leave, personal leave and unpaid leave requests, routes them through manager approval and shows each employee’s remaining balance in real time. In short, it replaces the "days left" column in a spreadsheet with a leave ledger in which every movement is recorded and nobody can overwrite the total by hand. Set up correctly, the endless "how many days do I have left?" emails to HR stop, and approved leave flows to time tracking and payroll on its own.
What does leave management software do?
A leave process run on email and spreadsheets breaks in three places: nobody knows whose desk a request is waiting on, three people from the same team book the same week without anyone noticing, and balances do not add up at year end. The software solves all three on one screen.
- The employee submits a request from a phone or browser and sees the remaining balance while doing it.
- The request goes straight to the direct manager, or to a deputy when the manager is away.
- A team calendar shows who is already off on those dates before anyone approves.
- Approved leave is deducted from the balance and passed to timesheets and payroll.
- At year end HR sees carry-over and unused balances in a single report.
Why should the leave balance not be a single field?
The most common mistake is storing "remaining leave: 12" as one number on the employee record. That number silently drifts when someone edits it, when a request is cancelled or when an accrual is miscalculated, and nobody can tell why. The right model calculates the balance as the sum of a ledger: accruals are positive, approved leave is negative, and corrections are separate lines with a reason. No line is ever deleted; a mistake is fixed with a reversing entry.
A leave balance is calculated, not stored: accruals, usage and corrections are separate lines and none of them is deleted. The answer to "why is this number what it is?" is always in the ledger.
In the example below the balance comes from the ledger and pending requests reserve days, so the same employee cannot spend the same remaining days on two separate requests.
type LeaveEntry = {
employeeId: string;
days: number; // + accrual or correction, - approved leave
reason: 'accrual' | 'leave' | 'correction' | 'carry_over';
requestId: string | null;
createdAt: Date;
};
// The balance is never stored as a single field; it is the sum of the ledger.
function balance(entries: LeaveEntry[], employeeId: string): number {
return entries
.filter((e) => e.employeeId === employeeId)
.reduce((sum, e) => sum + e.days, 0);
}
// Pending requests reserve days so two requests cannot spend the same balance.
function canRequest(
entries: LeaveEntry[],
pendingDays: number,
employeeId: string,
requestedDays: number,
): boolean {
return balance(entries, employeeId) - pendingDays >= requestedDays;
}How do you set up the request and approval flow?
An approval flow looks simple on paper, but if it is coded before its rules are written down it fills up with exceptions. Before building, get written answers to these questions: how many approval steps does a request go through, who receives it when the manager is absent, can leave be entered for past dates and by whom, and how is the balance restored when approved leave is cancelled?
Permissions should be separated from the start as well. Employees see only their own requests, managers only their team, HR everyone, and only HR can post corrections. This separation is built with user roles and authorization (RBAC). Reminders for pending requests and writing yearly accrual lines run as scheduled tasks (cron jobs), and the same period must never accrue twice.
How is annual leave entitlement calculated?
Statutory annual leave depends on the country: in Turkey, for example, it varies with seniority and age under the Labour Law, and collective agreements or company policy may grant more. That is why durations should not be hard coded but kept in a dated rule table approved by HR and legal counsel. If a rule changes, past periods keep the old calculation and the new rule applies from its effective date.
Counting leave days is a separate decision: are weekends and public holidays excluded, and for shift workers does a leave day mean a calendar day or a planned working day? In shift based teams that answer should rely on the same data as your shift scheduling software. This article is not legal advice; confirm entitlement and counting rules with your own adviser.
Connecting to time tracking, payroll and other systems
Leave software does not live alone. Approved leave must appear as "on leave" rather than "absent" in your attendance system, otherwise employee time tracking (PDKS) counts the day as missing. Payroll receives only approved leave in a closed period, and the transfer goes through accounting and payroll integration after the period is locked.
Documents such as medical certificates may count as sensitive personal data. Only HR should open the document, managers should see only the "sick leave" status, and files should be deleted at the end of the defined retention period. Our article on KVKK compliance covers the general principles.
Off-the-shelf leave software or custom development?
For a single site company with standard hours, the leave module of an off-the-shelf HR product is usually enough. Custom development makes sense when you have several employee groups under different collective agreements, shift and project based work, tight integration with your own attendance or ERP system, or multi step approvals that do not fit a packaged workflow. The criteria in custom software or a ready-made solution help with the decision; whichever you choose, make sure you can export all of your data.
Conclusion
Good leave management software calculates balances from a ledger, ties the approval flow and permissions to written rules, keeps entitlements in a dated table and passes approved leave to attendance and payroll automatically. If you would like to design your leave and HR processes together, see our corporate solutions page or request a quote.