Clock in, clock out, undo if you misclick.
The punch system every other HRMS got wrong. Always-visible pill. 10-minute undo window. Late-flag calendar. HR oversight with retroactive-add.
An always-visible pill in the top bar.
No separate clock-in app. No hidden menu. The Employment Pill (Phase 33A) lives on every workspace page.
Clock In / Out
One click. Session timeline appears under the pill. Total hours tick up live. Break Start / Break End for split sessions.
10-min undo window
After clock-out, an Undo button appears in the pill with a live countdown. Click → reverts the clock-out (writes CLOCK_OUT_UNDO correction event). Default 10 min, configurable via HR policy.
Personal calendar
Month grid at /me/attendance. Daily totals + late/early flag badges + holiday badges (Public/Restricted/Optional) + leave overlays + weekend dimming.
Workspace-wide oversight.
/hr/attendance
Workspace-wide table. Every employee × today's status (Working / Late / Absent / On leave / Holiday). Filter chips. Role-gated to HrMember.
Per-employee drill
Click a row → /hr/attendance/[userId]. Session timeline + weekly summary + late/early/auto-closed counts. Side panel with leave + OT for context.
Retroactive-add
Employee forgot to clock in? HR opens the per-user drill → Add event → modal with date + time + type → session rebuilds with the missing punch + audit trail of who added it.
The accidental clock-out problem.
Most HRMS tools force a 6-step HR ticket to fix an accidental clock-out. We learned this the hard way during Phase 34 QA — Ranjan clocked out by mistake and had to manually rebuild the session via the database.
Phase 35 fix: after Clock Out, an Undo button stays visible in the pill for 10 minutes with a live countdown timer. Click → the system writes a CLOCK_OUT_UNDO correction event linked to the original clock-out via correctsEventId. The session re-opens. No HR ticket. After the window expires, fall back to HR retroactive-add.
Auto-close cron.
People forget to clock out. /api/cron/attendance-auto-close fires at shift end + grace period and closes any still-open sessions. Marks them AUTO_CLOSED so the audit trail distinguishes a real clock-out from a system one.