A cron route finds every entry clocked in more than twelve hours ago with no clock-out and no prior alert, resolves names through the shared roster, and fires a routed notification. It stamps stale_notified_at so the alert fires once per shift.
Also called: forgot to clock out · 19 hour day · open shift alert · stale shift
- 1GET /api/cron/crew-open-shifts runs behind cron auth and scans open entries older than the 12-hour cutoff.
- 2Names come from one roster pass per org, keyed by org AND id so a project name can never reach another tenant's alert.
- 3notifyEvent fires the 'shift_never_closed' event through the org's own routing matrix, so who hears about it is a setting.
- 4stale_notified_at is stamped whether or not anyone was reachable, because the flag means 'we have handled this shift'.
A man drives home still on the clock. It happens in week one and most weeks after, and left alone it becomes a 19-hour day on a payroll report and an argument nobody can settle, because by the time anyone looks nobody remembers what time he actually left. After twelve hours the crew leader is notified, and an owner after him. It never guesses a knock-off time and closes the shift itself, since putting a number nobody chose onto someone's pay is worse than the gap, and it fires once per shift, because an alert that repeats every hour is an alert people mute.
- Runaway shifts discovered at payroll instead of the same evening.
- Alerts that name nobody and therefore cannot be acted on.
- Automatic guesses writing invented hours onto someone's pay.
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →