Key Concepts
Learn these eight ideas and every screen in the module makes sense.
1. The leave year
Leave is measured inside a leave year: an accounting period with a start date, an end date, and four settings that shape everything else.
| Setting | What it does | Default when the module is first set up |
|---|---|---|
| Carry-over cap | Days an employee may push into the next year. Anything above it is forfeited at the close. | 5 days |
| Forfeit date | The day those days are lost. Usually the year end. | 31 December |
| Forfeit warning | How far ahead the dashboard starts warning people. | 60 days |
| Approval SLA | Working days an approver has before a request counts as late. | 2 days |
| Liability ceiling | The board's tolerance for accrued untaken days, in days. Drives the liability verdict. | not set |
A leave year is created in exactly two ways: by Write the defaults on the setup page (the current year), or by the year-end close of the previous year. Looking at a screen never creates one. A year that does not exist shows the "not set up" banner instead of inventing figures.
A closed year is read-only. Its figures are final, and nothing further can be granted or credited against it.
2. Leave types and categories
A leave type is what the employee picks when requesting: Annual, Sick, Maternity, Study, Unpaid and so on. Each type has a category that tells the system how it behaves, plus five flags the category fills in and HR can override:
| Flag | Meaning | Annual | Sick | Maternity / Paternity / Compassionate / Study | Unpaid |
|---|---|---|---|---|---|
| Accrues | Earned month by month rather than available in full from day one | yes | no | no | no |
| Carries over | Unused days are brought into the next year, up to the cap | yes | no | no | no |
| Counts as liability | Unused days sit on the balance sheet | yes | no | no | no |
| Paid | Unpaid leave is deducted from pay and pauses accrual while taken | yes | yes | yes | no |
| Certificate after (days) | A spell longer than this needs a supporting document | never | 3 | never | never |
Three things follow from this table:
- Exactly one type accrues. It is the one that carries over, forfeits and forms the liability. The system refuses a second accruing type.
- A flat allowance is not pro-rated. A joiner in August gets the full twelve sick days, not five. You are either employed or you are not.
- Retro-dating is fine for sick and compassionate leave. You fall ill, you call in. The "approval before start" control check only applies to annual and study leave.
Each leave type also declares which approvals it needs: Supervisor, Department head, HR, in any combination. That is what builds the approval route in section 5.
3. Entitlement: where a balance comes from
Every employee has one entitlement row per leave year. Its figures are reached in a fixed order.
Base entitlement is the first figure found in this chain:
- an individual arrangement typed on the employee's row on the Entitlements page,
- otherwise the rank allocation for the employee's current rank,
- otherwise the leave type's default days.
An individual figure is never overwritten by a rank change. That is the point of typing it.
Pro-rata. The base is scaled by the months of the leave year the employee is in service. A month counts if the employee served at least half of it. The same rule applies to joiners, leavers and months mostly spent on unpaid leave.
Accrual is monthly, in arrears. A month is credited only once it has ended, so the accrued figure sits flat inside a month and steps up at month end. Finance can quote it mid-month without it moving. Accrued days are rounded to the nearest half day.
Worked example. Annual entitlement 30 days, leave year January to December, employee joined 12 April. Eligible months are April to December, nine of twelve, so entitled = 30 × 9 ÷ 12 = 22.5 days. On 31 August five months have completed (April to August), so accrued = 22.5 × 5 ÷ 9 = 12.5 days. On 15 September the figure is still 12.5; on 30 September it becomes 15.
Carried in is written once, at the previous year's close: the smaller of what was left and the carry-over cap. It is never recomputed, so leave booked late in the old year cannot quietly change the new year's opening balance.
Adjustments are dated, reasoned credits outside the ordinary entitlement: time off in lieu for a public holiday worked, a goodwill award, a balance transferred in, or a correction. A negative adjustment claws days back. The total on the row is the sum of these records and is never typed directly.
Taken, booked and pending come from the requests themselves, and only the decision axis matters:
| Bucket | Rule |
|---|---|
| Taken | Approved, and the last day is on or before today |
| Booked | Approved, and the last day is after today |
| Pending | Awaiting a decision. Shown, but not deducted |
| ignored | Rejected, withdrawn, expired, cancelled |
Remaining = available − taken − booked − encashed − forfeited. Unbooked = remaining − pending: the days nobody has even asked for, which is next December's bottleneck visible now.
Liability = accrued-but-untaken days × the employee's own day rate (latest basic pay ÷ 21.67). Untaken leave concentrates in senior staff, so a company-average rate would understate it. The dashboard prints both rates so the gap is visible.
4. A request has two statuses
This is the single most important idea on every leave screen.
The decision axis (approvalStatus) says whether the request was agreed: Awaiting decision, Approved or Rejected. It is written once, when the last mandatory approver decides, and never changes afterwards. Everything that consumes entitlement or counts against cover keys off this one test: is it Approved?
The lifecycle axis (leaveStatus) says where the request is now: Submitted, Undergoing approval, Scheduled, In progress, Ended, or one of the three voided states Withdrawn, Expired, Cancelled. The nightly job moves it along the dates; people move it only by withdrawing or cancelling.
Why two? An earlier design had one status. When the nightly job moved an approved request past "Approved" to "In progress", it silently stopped counting against the balance. With two axes, "does this consume entitlement?" and "where is it?" have separate, stable answers.
Two consequences worth remembering:
- A rejection has no lifecycle state. The lifecycle simply stops at Undergoing approval and the decision chip says Rejected.
- A withdrawn request stays "Awaiting decision" on the decision axis forever, because that axis is only written when the workflow concludes. The screens read both axes and show Withdrawn, and the edit and withdraw buttons disappear.
The full list of labels, with the exact condition behind each, is in the Status Reference.
5. Approval routing
When a request is raised, the leave type's approval flags are turned into a list of reviewers, in this order and without duplicates:
- Supervisor — the employee's supervisor, if the type requires supervisor approval
- Department head — the head of the employee's department, if the type requires it
- HR — whoever holds the HR Leave Approval Manager management role, if the type requires it
plus any reviewers configured on the company's workflow for leave requests. The request is then Undergoing approval and appears in each reviewer's My Approvals inbox and on the Leave Dashboard queue.
- The request is Approved when every mandatory reviewer has approved. It is Rejected the moment any mandatory reviewer rejects.
- Unless the workflow is configured as sequential, reviewers may decide in any order.
- Only the reviewer a request is waiting on can decide it. An HR manager who can see the whole queue still cannot approve a stage that belongs to a supervisor. The refusal reads "This request is not waiting on you".
- An approver who has no portal login cannot be registered as a reviewer. The system reports this rather than dropping them silently, but the request will still show no approver resolved for that stage.
- Approvers who are themselves on leave are reported, not routed around. The dashboard's Approvers away tile names who is blocking the queue and who their cover is. The cover cannot act on their behalf.
Approval timing is measured per stage: a request that cleared two stages in an hour is not reported as six days late at the third. Age is compared against the leave year's SLA to colour the queue.
6. Coverage: floors and critical roles
A staffing floor is the minimum number of people a department (or a named sub-unit such as "Line 2") must keep available. Approved leave is counted against it per day on the calendar and per week on the dashboard:
| Verdict | Meaning |
|---|---|
| covered | available staff is above the floor |
| tight (● "at floor") | available staff equals the floor exactly |
| breach (▲ "below floor") | available staff is below the floor |
Undecided leave never counts against cover, whether or not it is drawn. Rejected leave is not drawn at all.
A critical role is a job title so thin that two holders away together is itself a risk, even when the department is comfortably above its floor. Declare the role name (it must match the job title exactly) and how many people hold it; the calendar flags the clash.
7. Compliance and patterns
A statutory rule is a check the records are tested against, carrying the clause it rests on. The Ghana defaults written by setup are: at least 15 working days of annual leave (Labour Act 651, s.20), at least 12 weeks of maternity leave (s.57), a medical certificate after the sick leave type's threshold, leave taken within the leave year, approval recorded before the start date, and leave taken matching the payroll deduction. All of them are ordinary editable configuration.
The Bradford factor is spells² × days over the year. Five one-day absences score 125; ten spells over ten days score 1,000. Frequent short absence disrupts a roster far more than one long spell, and the squaring is what surfaces it. Scores of 200 and above are flagged.
8. What runs on its own
Three things happen without anyone pressing a button. Every night at 01:30 the lifecycle is advanced, the accrual is recomputed for every active employee, and returns are reconciled against attendance. On the first of every month at 02:30 the liability is frozen into a snapshot. The year-end close is the one thing that is never automatic. Details in Year End and Jobs.
