🕒 Attendance
The Attendance module is DaaiSuite’s daily record of when each employee clocked in, clocked out, how long they worked, and whether the day counted as Present, Half Day, Absent, on Leave, a Holiday, or a Week Off. It is the foundation for payroll calculation, late-mark deductions, OT credit, and Comp-Off accrual.
Attendance is designed to be imported in bulk from a biometric or face-recognition device export (CSV / Excel). The import dialog walks you through file pick, preview, mapping, validation, and commit — once the source-of-truth file is uploaded, DaaiSuite automatically derives Late, Worked, and OT minutes for every row.
💡 Why Attendance Matters
- Salary calculation — Paid Days = Total Days − Absent − LWP. The salary engine reads directly from Attendance.
- Late deductions — Repeated late-mark policies (3 lates = ½-day, etc.) work off Late Minutes captured here.
- OT credit — Overtime payouts and Comp-Off earnings are computed from OT Minutes.
- Compliance — Required for PF, ESIC, and Professional Tax filings to know who was on the rolls each day.
- Audit trail — Every manual correction is logged in the Correction Log of the day record.
📥 Bulk Import — Five-Step Flow
📍 Screen: HRM → Attendance → Actions ⚙️ → Import
Almost every customer feeds attendance from a ZKTeco / eSSL / biometric / face-recognition export. The Import dialog is a five-step wizard.
Step 1 — Pick File
Drop in a CSV / XLSX / XLS exported from the device. Optionally enter a Vendor name (e.g., ZKTeco, eSSL) — this scopes biometric-ID lookup so the same biometric ID belonging to two different vendors doesn’t clash. A Download Sample File link is right next to the picker if you need a template.
Step 2 — Preview
The first few rows of the parsed file are shown in a preview table. Confirm visually that columns and data look right, then click Map Columns.
Step 3 — Map Columns
Match each canonical attendance field (Employee ID, Date, First In, Last Out, Worked, Late, OT, etc.) to a column from your file. For numeric duration fields, a Unit dropdown lets you pick whether the source is in Minutes or Hours (HH:MM or decimal). Required fields are marked.
📌 Status is not part of the import. Even if the device file has a Status column, DaaiSuite ignores it for record creation — Status is derived from worked minutes, leave records, and the holiday/week-off calendar. The vendor’s status text is at most stored as informational metadata.
Step 4 — Validation
DaaiSuite checks every row for unknown employees, malformed dates, impossible durations, and so on. The result screen shows:
- Total records checked
- Valid count (green)
- Failed count (red) with the first 10 errors inline
- A Download Error Report button if any rows failed
⚠️ Partial commits are not supported. If even one row has an error, fix it (or remove it) and re-import. This keeps the daily ledger consistent and prevents half-imported batches from skewing payroll.
Step 5 — Commit
Once every row is valid, click Commit N row(s). The dialog confirms how many rows were imported and how many were skipped because they were locked as manual corrections.
💡 The Override manual corrections checkbox lets you forcefully overwrite even rows that an HR user had hand-corrected — only tick it when you have explicit authorisation. By default, manual corrections are preserved.
📅 Daily Tracking — The Grid
📍 Screen: HRM → Attendance (Records view)
The default grid lists one row per employee per day. Columns:
| Column | Description |
|---|---|
| Date | The calendar date for the row. |
| Employee | The employee whose attendance this is. |
| In | First punch-in time of the day. |
| Out | Last punch-out time of the day. |
| Worked (min) | Total worked minutes — auto-derived from In, Out, and any breaks. |
| Status | Present / Half Day / Absent / Leave Paid / Leave Unpaid / Leave Half / Holiday / Week Off. |
| Late (min) | Minutes the employee arrived after their shift start. |
| OT (min) | Minutes the employee worked beyond their shift end. |
Click any row to open the day-record aside, where you can hand-correct any field, leave a note, and view the Correction Log.
⏱️ Late and OT — Auto-derived
You don’t enter Late or OT minutes by hand. DaaiSuite derives them from the shift policy attached to the employee (start time, end time, grace period, overtime threshold) versus the In/Out captured from the device.
- Late (min) = max(0, In − shift start − grace period)
- OT (min) = max(0, Out − shift end − OT threshold)
- Worked (min) = Out − In − scheduled breaks
If you correct an In/Out time manually, Worked / Late / OT are recomputed automatically.
📦 Import Batches View
Top-right of the Attendance grid is a small toggle: Records ⇆ Import Batches. Switching to Import Batches shows one row per import — file name, date, count of rows committed, count skipped, who imported it, and a link back to the underlying rows. Use this view to:
- Audit who uploaded the device export this month
- Roll back an entire import if the wrong file was committed
- Re-download the original file for compliance
🎁 Comp-Off Ledger
When an employee works on a Holiday or a Week Off, the OT Minutes for that day flow into a Comp-Off ledger attached to that employee. The ledger has three entry types:
| Type | Meaning |
|---|---|
| Earn | Comp-off minutes credited from working on a non-working day. |
| Burn | Comp-off minutes consumed when the employee takes a Comp-Off leave. |
| Adjust | Manual ± adjustment by HR with a reason note. |
Open any day’s attendance record to see the recent ledger entries and the running balance for that employee. HR users can also add a manual adjustment from the same panel.
🔄 Attendance × Leave Reconciliation
Attendance and Leave are two separate sources of truth:
- Leave — created and approved through the Leave module. Carries the leave type, paid/unpaid status, and approver chain.
- Attendance — derived from biometric punches.
DaaiSuite reconciles the two on a daily basis — if an employee has an approved leave for a day, the Attendance status for that day is shown as Leave Paid / Leave Unpaid / Leave Half based on the leave record. If a punch exists for a day where leave was approved, the row is flagged as a conflict and an HR user can resolve it from the day record.
⚠️ Important rule: The Attendance module never auto-creates or auto-cancels Leave records. If a punch shows up on an approved-leave day, that’s surfaced as a conflict — but the leave is left untouched until an HR user manually cancels or shortens it from the Leave module. The Leave module remains the single owner of leave decisions.
For full leave-management behaviour (request, approve, balance, allocation), see the Leaves article. For how Attendance flows into payroll, see the Salary article.
🔑 Key Points
- Attendance is meant to be imported in bulk from a device export — manual day-by-day entry is the exception, not the rule.
- The 5-step import wizard guarantees clean data: file → preview → mapping → validation → commit.
- Status is derived, never imported. Vendor status columns in the device file are ignored.
- Late, Worked, and OT are auto-derived from In/Out + shift policy.
- Working on a Holiday / Week Off auto-credits Comp-Off minutes.
- Manual corrections are preserved across re-imports unless you tick Override manual corrections.
- Attendance does not cancel or create Leave records — Leave is owned by the Leave module.
💡 Tips
💡 Always import the full month at once instead of day-by-day. The import wizard handles thousands of rows in one go and gives you a single error report to fix.
💡 Set the Vendor field correctly when you import — if you switch biometric devices mid-year, the vendor scope prevents biometric-ID collisions between old and new hardware.
💡 Use the Import Batches view at month-end as your audit trail: one click confirms which file produced this month’s payroll inputs.
💡 If an employee’s Late Minutes look wrong, check their shift policy first. The wrong shift template is the root cause 9 times out of 10 — not the device export.
💡 For Comp-Off discrepancies, open the Comp-Off ledger on the day record. The ±/balance trail shows exactly where the balance went up or down.

