Skip to Content
MAFA Group · Odoo 17

Biometric attendance data the payroll engine can trust

Three punches from one person became one event — and HR notifications stopped firing for months-old data.

Led by Umar
Python PyZK WhatsApp

The problem a client brought us

“Our biometric attendance devices record the same person arriving three times if they linger near the reader for a few seconds. Multiply that by a few hundred employees and the data is unusable.”

Before and after

One person lingering at the reader

  • Punch
  • Punch, 20 seconds later
  • Punch, 20 seconds after that

What payroll reads

One check-in

What we found and built

A sync layer that decides what actually counts as one event: punches under 60 seconds apart collapse into a single record, with per-employee timezone resolution so a punch near midnight lands on the correct day.

We also moved HR notifications — check-ins, absences, expiring documents — onto WhatsApp instead of email, with a circuit breaker that skips stale events (learned after a historical resync once fired hundreds of messages for attendance months old).

Result

Attendance data the payroll engine could actually trust.

The pattern behind it

Design for the failure you've already seen

Every failure we meet becomes a rule: stale events are skipped, drifted fields are detected and repaired, and a failed upgrade rolls itself back.

How we think about problems

Recognise any of this?

Most of our work starts with a message that sounds a lot like this one did.