Dexova HRIS — Payroll & Attendance
A regulation-aware payroll engine and geofenced attendance — Dexova's HR machine up close.
- Role
- Architect & Full-Stack Developer
- Period
- 2025 – present
- Category
- Deep dive · HRIS
- Source
- Private repo
- Stack
- GoPostgreSQL + sqlcRedis (jobs)Next.js (dex-fe)PWA (dex-attendance)
Context
HRIS is Dexova's largest module — and the reason many businesses look at an ERP in the first place. It serves two personas through two different apps: HR admins work in the dashboard (dex-fe); employees use the attendance PWA (dex-attendance).
This page dissects the three most engineering-heavy parts: the payroll engine, geofenced attendance, and the approval machine.
Payroll engine
Indonesian payroll rules are implemented as configurable business rules — not hardcoded numbers:
- Tiered overtime per PP 35/2021 — different rates for the first hour, subsequent hours, and holidays; overtime is created automatically when a schedule is exceeded, then goes through approval.
- Flexible salary components per company + per-employee rates (pro-rata for new joiners, company-covered components).
- Cutoff and payday configured separately; payday shifts automatically when it lands on a bank holiday.
- Payroll periods are locked before a run — runs are generated only from finalized attendance data, with progress monitoring.
- One-off adjustments: bonuses, THR (religious-holiday allowance), severance — applied to a run without touching permanent components.
- Employee loans with automatic salary deduction per period.
- Daily-rate divisors, rounding strategies, work-week types (including half-day Saturdays) — all configuration, not if-branches.
- Forgot to lock a period? An auto-lock scheduler closes it on schedule.


Geofenced attendance
Attendance is payroll's raw data — if attendance is wrong, salaries are wrong. The design focuses on data validity at the source:
- Check-in/out from the PWA with geofencing (Geolocation API with retry/backoff): the app detects the nearest office and rejects check-ins outside the radius.
- Mandatory selfie at check-in — camera via getUserMedia with a name + timestamp overlay, preventing buddy punching.
- A dual-address model for WFH — employees can request their home location as a second geofence, through approval.
- Approval-gated attendance corrections (no free edits), plus early-checkout management.
- Violation rules and tardiness thresholds per location/department; attendance analytics and compliance reports for HR.
- The monthly recap locks attendance data as payroll input — one source of truth.


The approval machine
- Multi-level approval rules with a mandatory final HR approval — consistent across leave, attendance corrections, overtime, and shift swaps.
- Approval delegation for absent approvers.
- Automatic SLA-based escalation (an in-process scheduler): unanswered requests climb to the next approver — nothing hangs forever.
Shifts & scheduling
- Monthly shift grids with automatic rotating-assignment generation.
- Employee shift swaps with approval.
- Tardiness tolerance per work schedule.
Data operations
Onboarding a company means hundreds of employees arriving at once — the data path has to be strong:
- Bulk Excel import (Combined Bulk Import) as an async job: progress tracking, commit modes, duplicate strategies, and account auto-provisioning.
- CSV/Excel export with sync mode for small data and async for large datasets.
- Self-service password reset with email OTP, expiry, a 5-attempt lockout, and admin escalation.

Outcome
- Payroll runs from locked attendance data — not from spreadsheets edited at the last minute.
- Regulatory rules (tiered overtime, payday shifts) live as tested configuration, ready for policy changes.
- HR stopped being a manual data operator: approvals, corrections, and recaps run through auditable flows.
Lessons learned
- 01
Labor rules change — a payroll engine that separates rules from code is an investment, not over-engineering.
- 02
Attendance data validity must be protected at the source (geofence, selfie, approval-gated corrections); cleaning it later is far more expensive.
- 03
SLA-based auto-escalation turns approvals from an organizational bottleneck into a process that finishes itself.
Read next
Need a system like this?
I take on business-system projects — from architecture planning to an application running in production.