Oksa Satya.
Deep dive · HRIS

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.
Payroll Runs page in the Dexova dashboard: runs are generated from locked periods
dex-fe — Payroll Runs: generated only from locked periods (demo data)
Digital payslip in the dex-attendance PWA
dex-attendance — employee digital payslip (demo data)

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.
Dexova attendance PWA check-in page with office distance detection
dex-attendance — geofenced check-in with mandatory selfie (demo data)
Attendance page in the Dexova admin dashboard with present, absent, late, and leave summaries
dex-fe — admin-side attendance monitoring (demo data)

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.
Employee management in the Dexova dashboard: employee list with departments and positions
dex-fe — employee management, the bulk-import target (demo data)

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

  1. 01

    Labor rules change — a payroll engine that separates rules from code is an investment, not over-engineering.

  2. 02

    Attendance data validity must be protected at the source (geofence, selfie, approval-gated corrections); cleaning it later is far more expensive.

  3. 03

    SLA-based auto-escalation turns approvals from an organizational bottleneck into a process that finishes itself.

Need a system like this?

I take on business-system projects — from architecture planning to an application running in production.