📥 Import Attendance from a Time-Punching Machine
Almost every DaaiSuite customer feeds the Attendance module from a biometric, face-recognition, or RFID time-punching machine — typically a ZKTeco, eSSL, Realtime, Matrix, or similar device. Instead of typing daily punches one by one, you export a CSV / XLSX from the device once a month (or once a fortnight) and walk it through DaaiSuite’s five-step Import wizard. The wizard handles thousands of rows in one pass, validates every row, and never silently overwrites a row that HR has already corrected.
📍 Screen: HRM → Attendance → Actions ⚙️ → Import
💡 When to Use This Flow
- Monthly punches — at the end of every month before salary generation.
- Mid-month sanity check — to spot devices that stopped logging or employees with missing punches.
- Switching biometric vendors — once you’ve exported the legacy machine’s last month, run one final import scoped to that vendor before flipping to the new one.
- Re-import after a fix — if you discover a misconfigured device or a dropped-row file, you can re-import the same month; manually corrected rows are protected by default.
🧰 What You Need First
- A device export in CSV, XLSX, or XLS with at least: Employee identifier (biometric ID, employee code, or name), Date, and First In. Last Out, Worked, Late, OT are optional — DaaiSuite derives them when missing.
- The biometric ID ↔ employee mapping in DaaiSuite up to date (Settings → Attendance Settings → Mappings). New joiners must have a mapping row before the first import that contains their punches.
- A default Shift policy configured (Settings → Attendance Settings → Policy & Default Shift) — DaaiSuite uses its grace, half-day, and full-day thresholds to derive Status, Late, and OT minutes.
💡 If you’re not sure what columns your file has, click Download Sample File right next to the file picker — DaaiSuite generates a sample sheet with every supported column, including dropdown values for any FK fields.
🪜 The Five-Step Wizard
Step 1 — Pick File & Vendor
- Drop the device export into the file picker, or click Browse.
- Optionally enter a Vendor name (e.g., ZKTeco, eSSL, Matrix). The vendor name scopes biometric-ID lookup so the same biometric ID belonging to two different machines never clashes.
- If you switched vendors mid-year, set Vendor to the new one for new exports. The legacy mappings are kept untouched.
📌 The Vendor is metadata only — it does not change how Status / Late / OT are derived. Its only job is to make biometric-ID lookups unambiguous when multiple devices are in play.
Step 2 — Preview
The first 10–20 rows of the parsed file appear in a preview table. Confirm visually that:
- Column headers were detected correctly (no shifted columns, no glued-together fields).
- Dates parse the way you expect (DD-MM-YYYY vs MM-DD-YYYY).
- Time fields look right (HH:MM, not Excel serial numbers).
If anything looks off, close the wizard, fix the source file, and re-open Import — do not proceed to mapping with malformed columns.
Step 3 — Map Columns
For every canonical attendance field on the left, pick the column in your file on the right:
| Canonical Field | Required | Notes |
|---|---|---|
| Employee Identifier | Yes | Biometric ID, employee code, or full name — pick whichever your file uses. |
| Date | Yes | Calendar date for the row. |
| First In | Yes | Earliest punch-in time of the day. |
| Last Out | Optional | Latest punch-out of the day. If missing, the row is treated as incomplete attendance. |
| Worked Duration | Optional | Pre-computed worked minutes/hours. If missing, derived from First In / Last Out. |
| Late / OT | Optional | Auto-derived from Shift policy when not provided. Always ignored when present in the file — see below. |
📌 Status is not part of the Import. Even if your device file has a Status column (P / A / HD / etc.), DaaiSuite ignores it for record creation. The Status you see on each row is derived from worked minutes plus the Shift policy plus the Holiday / Week-Off calendar — that’s the only way Status, Leave, and Salary stay in sync.
Step 4 — Validation
DaaiSuite validates every row against the master data and flags errors. The result screen shows:
- Total records checked
- Valid count — these will be committed in the next step.
- Failed count — these will not be committed; the first 10 errors are listed inline.
- Download Error Report — full row-by-row error list as a CSV.
Common errors and how to resolve them:
| Error | Resolution |
|---|---|
| Unknown employee | Add the missing employee in HRM → Employee, set their biometric ID in Attendance Settings → Mappings, then re-import. |
| Malformed date | Open the file in Excel, force the Date column to DD-MM-YYYY text format, save as XLSX, re-import. |
| Impossible duration | Last Out earlier than First In — usually a midnight-crossing shift the device didn’t merge. Edit the offending row(s) and re-import. |
| Biometric ID conflict | Two employees share the same ID under the same Vendor. Update Mappings or set the Vendor field to disambiguate. |
⚠️ Partial commits are not supported. Even if 999 rows are valid and 1 has an error, none get committed. This is intentional — half-imported batches skew payroll and become very hard to clean up. Fix the error (or remove the bad row), then re-run.
Step 5 — Commit
Once every row is valid, the wizard offers a Commit N row(s) button. Below it:
- Override manual corrections checkbox — see warning below.
- Cancel — discards the import; nothing is written.
Click Commit. The wizard confirms how many rows were imported, how many were skipped because they were locked manual corrections, and how many conflicts (Attendance × Leave) were detected on the new rows.
⚠️ Override manual corrections forcefully overwrites rows that HR previously hand-corrected through the Attendance aside. Tick this only when you have explicit authorisation from HR — once overwritten, the original correction is preserved in the Change Log but is no longer the active value.
🛡️ How Re-imports Are Protected
Re-importing the same month is normal — for example, after fixing a misconfigured device or replacing a dropped-row export. By default, DaaiSuite:
- Preserves manual corrections. Any row that HR opened and edited from the Attendance aside is locked against re-import overwrites.
- Updates non-corrected rows in place. If the new file has different First In / Last Out for a non-corrected row, the new values win.
- Never touches Leave. Imports never create, edit, or cancel Leave records. Leave is always owned by the Leaves module — see Two-Stage Leave & Attendance Workflow.
- Re-derives Status / Late / OT. If a Shift policy changed since the last import, re-importing recomputes the derived fields with the latest policy.
📦 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 + vendor
- Date imported + who imported
- Rows committed / rows skipped / rows failed
- Link back to the underlying records
Use this view to:
- Audit who uploaded the device export this month (great for compliance).
- Roll back an entire import if the wrong file was committed.
- Re-download the original file the import was made from.
🔁 What Happens After Commit
- Status, Late, OT are derived for each row using the active Shift policy at commit time.
- Comp-Off minutes are credited automatically when an employee worked on a Holiday or Week-Off day — see Comp-Off Ledger.
- Conflicts against approved / pending / rejected leaves are flagged on each row’s Status cell — see Resolve Attendance Conflicts.
- Salary engine automatically picks up the latest Attendance state at the next salary-generation run for that month.
🚫 What Import Does NOT Do
📌 Important rule: the Import wizard never writes anything outside the Attendance module. It does not create LWPs, cancel approved leaves, mark employees Unnotified, or change leave balance. Those decisions stay with HR via the Two-Stage Workflow.
- No auto-LWP — an absent-but-no-leave row is flagged as a conflict, not silently converted.
- No auto-Cancel — a present-on-approved-leave row is flagged, not cancelled.
- No status from file — the Status column in the device file is ignored.
- No partial commit — a single row failure aborts the whole batch.
- No silent overwrite of corrections — manual HR edits stay unless Override manual corrections is explicitly ticked.
💡 Tips
💡 Always import the full month at once instead of day-by-day. The wizard handles thousands of rows in one pass and gives you a single error report to fix.
💡 If Late minutes look wrong after import, the Shift policy is the cause 9 times out of 10 — not the file. Check Settings → Attendance Settings → Policy & Default Shift and re-import to recompute.
💡 Run the import a day or two before generating salary so you have time to clear conflicts in the Two-Stage workflow without delaying payroll.
💡 Use the Import Batches view at month-end as your audit trail: one click confirms which file produced this month’s payroll inputs.
💡 Set the Vendor field correctly when you switch hardware — it prevents biometric-ID collisions between old and new machines and keeps the audit trail clean.
🔗 Related Articles
- Attendance — module overview and the daily grid.
- Resolve Attendance Conflicts — how to clear flagged rows after import.
- Two-Stage Leave & Attendance Workflow — when to act in Leaves vs Attendance.
- Comp-Off Ledger — how holiday/week-off OT becomes comp-off balance.
- Attendance Settings — vendor mapping, default shift, grace, half/full-day thresholds.

