EasyPlan

Generate a driver schedule grid. Optional guaranteed-pay columns on export (days worked from the grid; no time clock).

Schedule Generator

4 groups (A–D), 4 days on / 3 days off

A: Mon–Thu. B: Mon, Fri–Sun. C: Thu–Sun. D: Tue–Fri. Shifts are staggered so no one works more than 4 days in a row when the group advances A→B→C→D→A every four weeks. Drivers cycle A–D in list order. Order: pattern → drivers → routes → rescue.

Days worked counts each day that is not OFF (routes and RESCUE count). Guaranteed pay = days worked × daily guarantee. Leave hours per workday empty unless you want estimated hours pay and Owe columns.

Recommended minimum: 70 (sum of routes ÷ 4; 4/7 of workforce working each day). Add 5–10% for rescue. You have 0 names. Schedule always generates; if below minimum you’ll see a warning. Routes fill first; extra drivers → RESCUE.

ADP hours (preview)

Server route uses ADP_CLIENT_ID / ADP_CLIENT_SECRET from .env.local (see frontend/.env.example). Live hours use team time cards when ADP_MANAGER_ASSOCIATE_OID is set, or per-worker mode when ADP_FETCH_TIME_PER_WORKER=true. Set ADP_HOURS_SOURCE=email for CSV ingest (IMAP or ADP_EMAIL_TRANSPORT=file). Placeholder creds keep mock data.