HRM & attendance
Tenant HRM lives under /v1/businesses/{business_id}/hrm-* and the portal HRM navigation group. Platform admin does not ship an HRM console in this release.
ZKTeco devices
Devices are polled by the Tadbeer worker over TCP (default port 4370). The device must be reachable from the worker network (public IP, VPN, or reverse tunnel).
| Action | Purpose |
|---|---|
| Test connection | Dial + protocol handshake |
| Sync now | Enqueue an immediate poll |
| Scheduled poll | Every few minutes for poll_enabled devices |
Map each employee’s device user ID (zk_user_id) to the PIN/badge id on the terminal. Unknown IDs are skipped and recorded on the device last_error. Device passwords are encrypted at rest and masked in API responses.
Payroll, rewards, advances
Status workflows (v1 does not post payroll into the GL automatically):
| Resource | Actions |
|---|---|
| Payroll runs | generate, approve, mark-paid, cancel |
| Rewards | approve, mark-paid, cancel |
| Advances | approve, mark-paid, repay, cancel |
generate builds lines from active employees: base salary + approved rewards in the period − open advance balances. Marking a run paid applies advance deductions to remaining balances.
Related
- Deep dive in the repo:
docs/hrm.md - Changelog