Skip to main content

Risks & Mitigation

RiskLikelihoodImpactMitigation
Fake attendance / buddy punchingHighHighGeo-fencing + device binding + MANUAL_PUNCH audits.
Clock drift on client devicesMediumMediumServer-generated punched_at, client clock used only as hint with divergence flag.
Over-zealous blocking causes missed punchesMediumHighDefault policy is allow_flag; blocking only via explicit opt-in per unit.
Geo accuracy is poor indoorsHighMediumAccuracy cap + LOW_ACCURACY flag; fallback to Wi-Fi BSSID (V1.1).
Locked months silently editedLowCriticalUnlock is SuperAdmin only, reasoned, and audited; CI enforces lock checks in policies.
Roster edits cascade unpredictablyMediumMediumAttendanceRecalculator idempotent + driven by queued jobs with retries.
Horizon queue backlog at shift changeHighHighPre-provision workers; dedicated punches queue; load test at 500 rps.
Partner webhook downMediumMediumExponential retry + dead-letter + GET /pull fallback.
Telegram bot token leakedLowMediumScope the bot to a dedicated webhook URL; rotate monthly; signature-verify updates.
Mobile app store rejectionMediumMediumUse vanilla permissions text; avoid background GPS in V1; submit review build by Sprint 7.
PII leakage via exportsMediumHighExports signed + TTL 24h; PII scrubbed when scope doesn't include the column.
Privileged access reviewLowHighQuarterly role-scope audit; Filament report lists all non-Employee accounts.

Residual Risk

Even after mitigations, two risks stay on the radar:

  • Offline abuse — if a device is offline for days, buffered punches may violate rules retroactively. The app auto-converts these into regularization requests so a human approves them.
  • Regulatory shift — labour-law timing rules vary by region. Shifts and grace windows are per-unit config, so changes require data, not code.