Reward Sunday work
without spreadsheet math.
Auto-trigger on Sunday work or post-shift hours. HR approval queue. Approval credits comp-off balance — applied later as leave. Pending OT expires after 90 days so it doesn't pile up forever.
From session to leave balance.
Auto-trigger
Employee works on Sunday (SUNDAY_WORK trigger) or stays past shift end + threshold (POST_SHIFT_HOURS trigger). The session-builder hook creates an OvertimeEntry with status PENDING. No employee action needed.
HR approval queue
OT entries land at /hr/overtime. Filter chips: Pending / Approved / Rejected / Expired. Per-row Approve / Reject. Reject requires reason (validation). Concurrent-approval race protection blocks double-credit.
Approval credits comp-off
On approve, the OT minutes convert to comp-off balance via transaction. Employee's comp-off balance increases. Email notification. Audit trail in OvertimeEntry.statusChanges.
Apply as leave
Comp-off is just another leave type. Employee uses /me/leave → Apply leave → pick Comp-off → balance check happens like any leave. Standard approval workflow.
Expiration
/api/cron/overtime-expire runs daily. PENDING entries older than 90 days flip to EXPIRED. Keeps the queue clean — old OT requests don't haunt forever.
Two ways OT auto-detects.
Any session on Sunday (or your workspace's weekly off day). Entire session counts as OT. Threshold doesn't apply — even a 30-min session on Sunday triggers.
Clock-out time past shift end + threshold (default 60 min). Only the excess minutes count. So a 9-6 shift with 60-min threshold means a 19:30 clock-out triggers OT = 30 min (19:30 minus 19:00).
It's leave, not cash.
Most SEO agencies in India + APAC compensate weekend work with time off, not overtime pay. ItzSEO models that pattern: approved OT credits comp-off balance. Apply as leave later.
Credit ratio
Default 1:1 — 4 hours OT = 4 hours comp-off. Configurable per workspace if your policy is 1.5x or 2x.
Comp-off expires
Configurable. Default: comp-off must be used within 90 days of being earned. Prevents accumulation.
Same workflow
Comp-off is just another LeaveType. Same /me/leave modal. Same approval workflow. Balance shown alongside SL/CL/EL.
Safeguards baked in.
Concurrent-approval race protection
If two managers approve the same OT request at the same time, only one transaction commits. The other gets a 409 with ‘already decided’. No double credit.
Auto-expiration cron
Pending OT >90 days = automatically EXPIRED. Idempotent — running the cron twice doesn't double-flip. /api/cron/overtime-expire (bearer-auth).