| staff | No | Optional staff rules to check against (roles, max hours, unavailable days), same format as generate_shift_schedule, e.g. [{"name":"Sam","unavailable":["Mon"]}]. | |
| time_zone | No | The business's time zone, IANA or US name, e.g. "America/Chicago", "Pacific". Default America/New_York. Used for daylight-saving weeks and calendar files. | |
| week_start | No | First day of the week to schedule, e.g. "2026-10-05". Default: next Monday. Dates pin calendar files and daylight-saving weeks to real hours. | |
| assignments | No | The schedule to check, one item per shift with its people, e.g. [{"day":"Fri","start":"16:00","end":"23:00","staff":["Sam"]},{"day":"Sat","start":"07:00","end":"15:00","staff":["Sam"]}]. | |
| business_name | No | Optional name printed on the PDF, e.g. "Blue Door Cafe". | |
| schedule_file | No | Optional existing schedule the user attached (CSV or .xlsx): a grid with a Name column and day columns (Mon..Sun) holding "07:00-15:00 cook" or "off", or a list with Employee, Day, Start, End, Role columns, e.g. week41.xlsx. | |
| allow_overtime | No | false (default): nobody is scheduled past overtime_after_hours. true: overtime is allowed when needed for coverage, kept as low as possible, and flagged. | |
| min_rest_hours | No | Minimum hours off between two shifts of the same person (the "clopening" rule), default 10, e.g. 8 or 11. 0 only blocks overlaps. | |
| max_shifts_per_day | No | Default shifts per person per day, default 1. Use 2 to allow split shifts (same-day shifts need no rest gap, only no overlap). | |
| max_consecutive_days | No | Most days in a row anyone may work in this week, default 6, e.g. 5. | |
| overtime_after_hours | No | Weekly hours after which time counts as overtime, default 40 (US federal FLSA workweek), e.g. 40. 0 turns overtime tracking off. | |