Scheduling & forecasting
Build schedules that match expected demand, respect everyone's availability and your labor rules, and stay on budget.
What works today
The API covers demand drivers, forecasts and adjustments, staffing rules and needs, shifts with conflict checks, publishing, open-shift claims, swaps and availability. The automatic schedule builder, schedule-aware punching, notifications and the schedule editor are planned. Screens described on this page arrive with the web app; until then, use the API.
How it fits together
Demand drivers
A demand driver is a number that decides how many people you need. Common examples:
| Business | Drivers |
|---|---|
| Retail | Sales, transactions, foot traffic |
| Restaurant / café | Sales, transactions, covers, delivery orders |
| Clinic / salon | Booked appointments |
| Warehouse | Orders to pick, units shipped, trucks to unload |
| Call center / service desk | Tickets, calls |
Drivers come from the Sales feature (sales and transactions from your POS or online store), or from any system through POST /api/v1/demand-drivers (e.g. appointments from a booking system, foot traffic from a door counter).
Forecasting
scheduling.forecasting predicts each driver per location, day and 15-minute interval using:
- your history (at least 8 weeks recommended), with weekly and yearly patterns
- holidays and special days from the location profile
- recent trend
Managers can adjust a forecast (forecasts.manage), for example "+20% Saturday for the street fair", and the change is kept with a note. Reports compare forecast with actual so you can see how accurate it is.
Staffing rules
Staffing rules turn the forecast into needed staff for each work area:
- Ratio: "1 cashier per 40 transactions per hour", "1 picker per 60 order lines per hour"
- Fixed minimum: "At least 2 people on the floor while open", "1 key holder at open and close"
- Tasks: "1 person for 1 hour before opening for setup"
Rules can be set per location or inherited from a district or region.
Building a schedule
- Open Scheduling, pick a location and week.
- Choose Generate to have
scheduling.auto_buildercreate shifts that cover needed staff, then assign people based on:- availability and approved time off
- required skills and certifications
- target and maximum hours, and overtime cost
- labor rules (breaks, rest between shifts, minor restrictions)
- fairness (sharing weekends and closing shifts)
- Adjust by drag and drop. The coverage graph shows scheduled vs needed staff for each hour, with gaps in orange and overstaffing in blue. Choose a gap to see who could fill it.
- Watch the cost panel: projected labor cost, labor as a percentage of forecast sales, and overtime.
- Publish (
schedules.publish). Employees are notified, and changes after publishing are highlighted and notified too.
Schedules can also be copied from a previous week or built from templates.
Availability, swaps and open shifts
- Employees set availability and preferences in their Employee Area. Managers can require approval of availability changes.
- Shift swaps (
scheduling.shift_swaps): an employee offers a shift, a qualified co-worker accepts, and a manager approves (shift_swaps.approve), unless auto-approval is on for swaps that break no rules. - Open shifts (
scheduling.open_shifts): unfilled shifts are posted to qualified employees, who can request them.
Labor rules while scheduling
The scheduler warns about, or blocks, anything that breaks the location's labor rule set, such as missing breaks, too few hours between shifts, a minor scheduled too late, or overtime. For predictive-scheduling rules, changes made inside the notice period are flagged along with any premium pay they cause.
Reports
Scheduled vs actual hours, labor % of sales, sales per labor hour, overtime, forecast accuracy, schedule changes after publishing, and skill gaps (which additional skills would let more people cover hard-to-fill shifts).
API & events
| Endpoint | Scope |
|---|---|
POST /api/v1/demand-drivers (batch) | scheduling:write |
GET /api/v1/forecasts?locationId=…&from=…&to=… | scheduling:read |
GET /api/v1/schedules, GET /api/v1/shifts | scheduling:read |
POST /api/v1/shifts, PATCH /api/v1/shifts/{id} | scheduling:write |
GET /api/v1/availability | scheduling:read |
Events: forecast.updated, schedule.published, shift.changed, shift.swap_requested, shift.swap_approved, open_shift.posted.
Time & attendance
Record hours accurately, apply your labor rules, get timesheets approved, and hand clean hours to payroll.
Employee Area
The Employee Area is every employee's own space in PurrOS. It shows everything the company holds about them and lets them handle everyday requests themselves. It's written for employees, so you can share this page with your staff.