KMI HRM · PART 1 · AUGUST 2026
KMI Group is a company based in Faisalabad, Pakistan, with people spread across sites and plants, and attendance starts at a fingerprint machine on a local network. The first version of this HR system, built in August 2026, had one job: get each punch from that machine to a screen, reliably. Payroll means nothing if the punches cannot be trusted.
How attendance, HR and payroll for a Pakistani company of several sites and plants came together, from fingerprint machines to the phone in an HR manager’s hand.
The system began in August 2026 with one job: move attendance from fingerprint machines on a factory network to a live screen, even when the internet is down. Those first weeks were mostly spent on what real networks and browsers do.
A biometric machine sits on the site’s local network, and a web server on the internet cannot simply reach it. So a small agent runs on a PC on the same network. It reads punches from the machine and saves them to a local database straight away, then sends them to the server whenever it can. If the internet drops for a day, nothing is lost.
When the attendance sheet was first connected to real data, every punch showed five hours early. A worker arriving at 9:00 appeared at 4:00. The cause is a classic one: times stored in UTC were displayed without converting to Pakistan time. It took minutes to fix, but it would have been very expensive to discover in a salary sheet.
The live display kept announcing it was offline when it was not. Two checks could overlap and race each other, and one slow reply flipped the screen. An expired login session looked like a lost connection too. The fix was to stop overlapping checks and require two failures in a row before changing state. A display that cries wolf soon gets ignored.
The display page is served securely, but the local agent is not, and Chrome blocks that mix without much explanation. I tried polling every 300 milliseconds, then returned to true live push by having the installer set a documented Chrome and Edge policy for that one server address. Polling stayed as the fallback. The installer also had to learn to store its data somewhere it is allowed to write, since Program Files is not.
Save the data locally first, then worry about moving it. Everything else in an attendance system can be retried; a lost punch cannot.