Some installs and big projects span more than one day. Run a Call models them as a single job with multiple appointments — one appointment per day on the schedule.
How it works
A job has an is_multi_day flag and a total_days count. The job's appointments array holds one entry per scheduled day, each with its own scheduled_date, scheduled_start, scheduled_end, and assignments (the tech or crew working that day).
The dispatch board shows each appointment as its own block, but click any of them and you open the same parent job.
Scheduling a multi-day job
- Create the job the normal way (customer, property, scope, line items).
- Set the estimated duration to span more than one day (e.g. 3 days).
- Schedule the first day on the dispatch board.
- Run a Call prompts: "This job spans multiple days — schedule the others?"
- Pick dates and crew for each day.
The job's appointments array is built; each appointment gets a sequence (0, 1, 2, …) so you can tell which day is which.
Crew composition per day
Each appointment has its own assignments list. You can:
| Pattern | When it fits |
|---|---|
| Same crew across all days | Most common. |
| Vary crews per day | E.g. a helper joins only on installation day 2. |
| Change roles per day | Lead on day 1 might be Helper on day 2. |
Reassigning a day
Open the appointment in the dispatch board → reassign just that day. The other days stay intact.
Cancelling mid-project
| Option | What happens |
|---|---|
| Cancel the whole job | All appointments cancel. |
| Cancel one day | Open the appointment and mark it cancelled. The rest of the project continues. The job's total billable hours decrease but the parent stays alive. |
Reporting
Multi-day jobs roll up to the parent for revenue and margin reporting — you see the total cost across the project, not per day. For labor reporting, each day's appointment counts separately so techs get credit for the hours they actually worked.