Skip to main content
Two related tools sit alongside the daily attendance record. Employee check-in is the clock — the self-service in/out punches employees make from a phone or browser, optionally stamped with their location, which roll up into attendance automatically. Attendance requests are the correction path — a formal ask to record or fix attendance over a range of dates (for example, “I was on a field visit Mon–Wed, please mark me Present” or “mark Thursday as Work From Home”), which an approver reviews before it touches the record. This page covers both: how check-in works, how it becomes attendance, and how to raise and approve an attendance correction. You’ll find this at: check-in lives behind hr/employee-checkins; attendance requests behind hr/attendance-requests. The live check-in feed is shown on the Attendance page. See Current state for the UI gaps.
Check-ins and attendance requests are per business and tied to the employee’s employment contract. A multi-business employee clocks in against whichever business they have selected.
📷 Screenshot: the clock-in / clock-out control with optional location capture — to be added.

Employee check-in (the clock)

A check-in is a single punch. Each one is either a Clock in or a Clock out, stamped with the time and optionally:
  • Location — latitude, longitude, accuracy, and a human-readable place name.
  • Device — which device made the punch.
  • SourceMobile, Web, or Manual.
  • Notes — free text.

Clocking in and out

  • Clock in records a Clock in. You can’t clock in twice — if you’re already clocked in, Hitaji asks you to clock out first.
  • Clock out records a Clock out. You can’t clock out if you were never clocked in.
The Attendance page shows the day’s punches live: who’s Currently in, each person’s first in and last out, and worked duration. A status lookup tells an individual whether they’re currently clocked in and when they last punched.

Manual and admin punches

An administrator can record a punch on behalf of an employee — choosing the user, the clock type, and even a past or future time — which is how missed punches and backfills are handled. Admin punches can be flagged to be ignored by auto-attendance when they’re corrections that shouldn’t re-derive a day. Admins can also delete individual or batches of check-ins.

How check-ins become attendance

Punches don’t become attendance on their own — they’re rolled up by the shift engine:
  • If the employee’s shift type has auto-attendance turned on, an hourly job groups the day’s punches against the shift, works out how long was worked, and writes a Present or Half Day attendance record (using the shift’s hour thresholds). It stamps each processed punch with the shift it was attributed to.
  • A daily job then backfills Absent for any working day that has punches expected but none recorded — unless a holiday or approved leave covers it.
Grace windows on the shift (how early a punch before the start still counts, how late after the end) and the business time zone all feed this calculation — see Shifts.

Attendance requests (corrections)

An attendance request asks for attendance to be recorded or corrected over a date range. It’s how you fix a day the clock missed, record an off-site day, or mark work-from-home.

What’s on a request

The request lifecycle

What approval does

When a request is approved, Hitaji walks every day in the range and writes (or updates and locks) an attendance record for it — applying the requested status, and the half-day status to the nominated day. If a day already had an auto-generated Absent or Holiday record blocking the correction, that record is cancelled first so the approved status wins. The IDs of the records it creates are kept on the request as an audit trail. If a request that was already approved is later rejected, Hitaji reverses itself — it cancels the attendance records it had written, so an erroneous approval can’t quietly inflate someone’s paid days. Cancelling is only allowed before approval; doing so also closes any open approval task.

Separation of duties

Submitting a request and approving it are deliberately separate jobs. Raising or submitting a request needs hr:write; approving or rejecting needs the dedicated hr-attendance:approve permission. This stops someone from creating and clearing their own attendance corrections — important because attendance drives pay. Approval can run through the standard approval workflow, or an authorised approver can approve/reject a pending request directly.

Permissions


⚠️ Current state. The check-in and attendance-request engines are fully built on the backend — self clock-in/out, geolocation, auto-attendance roll-up, the correction workflow, and the separation-of-duties approval gate all work. The web UI is partial: the Attendance page displays the live clock-in feed, but there is currently no dedicated screen to raise or approve attendance correction requests, nor a built-in clock-in/clock-out button on these HR pages — those actions are driven through the API (or a mobile/self-service surface). (Flagged for the team.)

  • Attendance — the daily record and the live clock-in feed
  • Shifts — the shift settings that turn punches into attendance
  • Overtime — extra hours derived from the same punches
  • Compensatory leave — uses attendance as proof of holiday work
  • Running payroll — where attendance becomes payment days