Attendance and Leave
This is the daily half of Human Resources: who turned up, when, and who is away. Four screens, and they form a chain — understanding the chain is most of understanding the module.
Clock log → daily attendance → attendance sheet → payroll
| Stage | What it is |
|---|---|
| Clock log | A single raw punch. "Someone touched the button at 08:57" |
| Daily attendance | One row per person per day, worked out from that day's punches against their shift |
| Attendance sheet | A whole period, frozen and approved — the version you trust |
| Payroll | The days and hours from the sheet, turned into money |
Nothing further down the chain is right if something above it is wrong, which is why Recalculate and the sheet editor exist.
WARNING
All of this needs the HR module switched on, a shift assigned to the person, and the relevant Attendance permissions. See HR Setup.
Where to Find It
Click an address to open that screen on your own clinic. The first click asks which clinic you are, then remembers it. Addresses holding a {id} need a specific record, so they are shown but not linked.
| Screen | Address |
|---|---|
| Attendance | /all-attendance |
| New attendance record | /new-attendance |
| Attendance details | /view-attendance/{id} |
| Clock logs | /all-attendance-log |
| Attendance sheets | /all-attendance-sheet |
| Build a sheet | /attendance-sheet |
| Sheet details | /view-attendance-sheet/{id} |
| Leave requests | /all-leave-request |
| New leave request | /new-leave-request |
Clock Logs
Human Resources → Clock Logs is the raw record — every punch, untouched. It is the screen you open when someone disputes their attendance.
Take my attendance is the button staff press to clock themselves in and out. It needs the clock in/out permission, and it always writes the punch first and asks questions after: the log is saved as a draft, then the system re-reads the whole day and decides what that punch actually was.
| Status | Meaning |
|---|---|
| Sign in | The day's first accepted arrival |
| Sign out | The accepted departure |
| Repeated | An extra punch that duplicates one already counted |
| Invalid | Not usable, with a reason attached |
Two invalid reasons, and both are worth recognising on sight:
| Reason | What actually happened |
|---|---|
| No shift | The person has no shift, or the day is not a work day in it |
| Out of shift boundaries | They punched outside the sign-in / sign-out windows on their shift |
TIP
An invalid log is not deleted and is not a fault — it is evidence. Fix the shift, then use Recalculate on the day, and the same punches are re-read against the corrected rules.
Each row shows the employee, the exact time, the status, the invalidity reason, the session it belongs to, and where it came from (self for a staff punch). Filter by employee, date range and status.
Attendance
Human Resources → Attendance is one row per person per day, built from the logs.
| Column | What it shows |
|---|---|
| Employee | Who |
| Date | The day |
| Sign in / Sign out | First accepted arrival, last accepted departure |
| Status | See below |
Opening a row shows the rest: the shift used that day, the on-duty and off-duty times it was judged against, actual working hours, lateness (minutes past on duty, after grace) and early leave (minutes before off duty). Neither can go negative — arriving early is not negative lateness, it is simply zero.
The six statuses
| Status | Meaning |
|---|---|
| Present | Signed in and signed out |
| Absent | A work day with nothing usable on it |
| Sign in only | Arrived, never clocked out |
| Sign out only | Clocked out with no arrival on record |
| Leave | Covered by an approved leave request |
| Day off | Not a work day on their shift |
Sign in only is the everyday one — someone forgets to clock out. Fix it by editing the day, or add the missing punch and Recalculate.
Recalculate
Recalculate re-reads the day's punches against the current shift and rewrites the row. Use it after correcting a shift, adding a missed punch, or approving leave that lands on a past day. It is safe to run as often as you like: it derives, it does not accumulate.
Adding a day by hand
New attendance writes a day directly — for a clinic that does not use clock-in at all, or to record a day nobody could punch for. Bulk delete is available on the list for clearing a bad import.
Seeing only your own
Someone whose role only grants view own attendance sees their own rows and nothing else, and the page titles itself My Attendance. That is the right permission for ordinary staff: they can check themselves without seeing colleagues.
Attendance Sheets
Human Resources → Attendance Sheets turns a stretch of daily rows into one reviewed document — the version payroll is based on.
Building one, on the sheet builder:
- Pick the employees and the date range.
- Generate — the grid fills from the attendance already recorded.
- Edit the grid by hand where reality differs: change a status, fix a sign-in time, correct a shift.
- Name it and save.
Two rules the system enforces, both of which surprise people the first time:
| Rule | What you see |
|---|---|
| 60 days maximum per sheet | The range is refused if it is longer |
| No overlapping sheets for the same employee | The refusal names the employees already covered |
The second is the important one: it guarantees no day is ever counted twice in two different sheets, so a month cannot be paid twice.
A sheet is pending until someone approves it, and approving is what marks it settled. From the sheet you can jump to the attendance rows it covers.
Leave Requests
Human Resources → Leave Requests — one request per absence.
| Field | Notes |
|---|---|
| Employee * | Who is away |
| Leave type * | From the types you defined |
| Start date / End date * | The period |
| Days count | How many days it consumes |
| Reason | Free text |
The states are simple:
Pending → Approved or Rejected, with Undo putting a decided request back to pending.
Approving or rejecting needs the approve leave requests permission, and the system records who decided and when — visible on the request. Ordinary staff can submit but not approve, which is the whole point of separating the two permissions.
TIP
Approved leave is what makes a day count as Leave rather than Absent. If a past day is still showing Absent after you approved the leave, open that day and Recalculate.
Answering Real Questions
| Question | Where to look |
|---|---|
| Why is this person marked absent? | Clock logs for that day — look for invalid, then check their shift |
| Someone forgot to clock out | Edit the day, or add the punch and Recalculate |
| How many days did we actually work this month? | The approved attendance sheet for the period |
| Can staff see their own attendance? | Yes, with view own attendance — the page becomes My Attendance |
| Where do these numbers turn into money? | Contracts and Payroll |