Schedule and assign a job
Getting a job onto the calendar and getting the right person on it are really one motion — most of the time you're doing both in a single drag. This guide covers putting a job on the schedule, working with suggested assignments, running auto-assign across the whole backlog, and what happens when a placement needs a second look before it's allowed to stick.
Put a job on the schedule
Jobs waiting for a technician sit in the Unassigned lane on Schedule — day and week — and in the Unassigned column on Board. On the day schedule that lane splits them into No technician, Technician not in this view, and Backlog. The count beside the heading counts the day's dated visits and the backlog, as in 3 dated · 1 backlog. A card with no time on it still shows Unscheduled as its time. That word is the time, not the lane.
To place a job:
- Day view: drag the card onto a technician's row at the time you want. That sets the time and assigns that technician in one move.
- Week view: drag the card onto a day. That moves the time and keeps the technician already on the visit. A visit with nobody on it stays unassigned until you pick someone on the day schedule.
A dropped job keeps a sensible window: moving an already-scheduled visit preserves its existing length, and a brand-new placement gets the company's default job duration for that job type. There's no separate save step — the move takes effect as soon as you drop it.
Suggested assignments
An unassigned job on the board can carry a suggested technician — a name, a match percentage, and a short reason. Thermal builds this in two steps: first it narrows to technicians who hold every certification the job requires, then it scores that qualified pool on current workload (40%), drive-time proximity (30%), skill proficiency among those already-held certs (15%), and — for a job tied to a service agreement — how high-value that agreement is (15%). Skill grades never block a match; they only rank qualified techs. An ungraded certification scores neutral, so a company that has never graded anyone ranks exactly as it did before grades existed. The reason line reflects whichever of those actually mattered: "Qualified · lightest load today", "Qualified · closest available · priority agreement", and so on. A skill phrase appears only when the winner has a recorded grade on a required cert — never when everyone is still at the neutral default.
Owners and office grade 0–5 proficiency per held certification on the technician's Staff record.
- Apply assigns the suggested technician and puts the job on the schedule. On the timeline, a dashed proposed slot also has Apply (locks that window) and Change… (opens the preview so you can pick a different placement).
- Dismiss clears the suggestion so you can pick someone else from the dropdown.
- A job with no start time cannot take a technician from the card dropdown. Place it on the timeline first (or Apply a reviewed proposed slot). Thermal tells you Pick a start time to assign a technician. A job tied to a service agreement can use the agreement's next-due date as that start time.
- If nobody available holds the required certification, the board shows an amber "No qualified tech" note instead of a suggestion — assign it manually once you've sorted out coverage.
A suggestion is a proposal, not a done deal — nothing is assigned until you Apply.
Apply a batch of suggestions
A Suggested card on the Unassigned lane (and on the board) offers Apply for every open, unassigned job Thermal has already matched, so you don't have to apply one card at a time on a busy morning. The line above Apply says what that click will do to the schedule — it puts the assignments on the board, sometimes at the times shown, sometimes into each technician's next open time today. Dismiss hides the batch card for this set. Apply is atomic — if something goes wrong partway through, nothing is half-assigned — and it deliberately excludes technicians currently on leave from the pool entirely (a manual assignment to someone on leave still goes through, with a warning; the batch just skips them). After a successful Apply the card reads Applied and offers Undo.
An owner or office manager sees Suggestions for dispatch on that card. Switching it off turns suggested assignments off for the company. The card goes away with them. Turning them back on is Dispatch auto-assign under Automations. A dispatcher sees the card without the switch. A direct attempt without Automations access is refused: Only someone with Automations access can turn off dispatch suggestions.
Route optimization
Optimize a day
Not every company has route optimization turned on yet. If yours doesn't, the sheet tells you plainly: Route optimization isn't set up for this company yet. It still shows Thermal's built-in preview order — a starting order for the day, not a finished route.
To open it, go to Schedule view on a single day (Day view) and click the dated button — for example, Optimize Thu 24. It always names the exact day it's about to act on, and opens the Route optimization sheet.
Nothing on the board changes yet. Instead you get a Suggested plan to review before you commit to it:
- Apply reorders that day's visits on your live schedule to match the plan. You can undo it afterward.
- Dismiss throws the plan away and leaves the schedule exactly as it was.
Once you've applied a plan, the same card offers Undo — it puts the visits back where they were. If a technician has already started one of those visits by the time you undo, that one is left alone; everything else goes back.
Two things can leave you without a plan to review, and Thermal tells you which:
- No start location is set — optimization never ran. A technician on this branch has no home base and the branch itself has no address on the map. Add or correct the branch's address under Settings → Branches, then optimize again.
- Today's visits couldn't be fitted — optimization ran, but found no plan to propose, so the sheet shows Thermal's built-in preview order, with the reason underneath: today's visits couldn't be fitted from this branch within the technicians' shift hours, the visits' arrival windows, and the travel involved. Check the branch address, shift hours, visit durations, or arrival windows.
Set how many jobs an arrival window can take
Company windows are on Settings → This company → Company profile, in Arrival windows. Each row has Window N starts, Window N ends, Jobs it can take, and Held for emergencies. Slots held back are only available to jobs with Emergency priority; the held-back count must not exceed the number of jobs the window can take. Add window adds a row. Remove drops one. Save with the rest of the company profile.
A branch can keep its own list under Settings → This company → Branches. Open the branch, expand Defaults, and edit Arrival windows. An empty list follows the company windows. Use company windows clears a branch list.
Saving the rows stores them. The new-job form shows the room left for the selected priority. Routine jobs cannot use room held for emergencies, even with an overbooking reason. An emergency in a completely full window needs a Reason for overbooking, which is recorded on the created job. The customer portal only offers windows that still have room, and refuses one that fills before the request is sent ("That window just filled. Pick another time."). That request still waits for the office to book the visit.
The public booking link asks for an Arrival window when the company or branch has windows with room for a routine job. It lists the next 14 days and only the open windows. The form says "Pick a time that suits you. The office confirms the booking." Sending the request does not reserve the time. If the window fills first, the form says "That window just filled. Pick another time." A company with no arrival windows does not show the field.
When a placement needs a second look
Every time a job lands on the schedule — a fresh placement, a reschedule, a reassignment, or an added visit — Thermal checks it against a few rules before letting it stick. Some are hard stops; others are warnings you can choose to override:
| Stops the placement (can't override) | Reason |
|---|---|
| Closed job | The job is already completed, invoiced, or canceled. |
| Invalid technician | The selected user isn't a technician in this company. |
| Invalid times | The visit's end time is before its start time. |
| Visit already done | That specific visit is already completed or canceled. |
| Warns, lets you confirm | Reason |
|---|---|
| Backdated | The visit is being scheduled in the past. |
| Double-booked | The technician already has an overlapping appointment. |
| Outside hours | The placement falls outside that technician's working hours. |
| Missing certification | The technician doesn't hold a certification this job requires. |
| SLA breach | This placement lands past the job's guaranteed response window. |
| Confirmed visit moved | The customer was already confirmed for the original time — they'll need to be re-notified. |
A warning shows you the reason and asks you to confirm — Schedule anyway applies the change and, if the customer had already been confirmed for the old time, offers Notify customer of the new time (on unless you turn it off). A same-day move of 30 minutes or less sends no change notice. A move to another day, or of more than 30 minutes, requests a change notice when that box stays on. Delivery still follows notification settings, channel readiness and customer stops. A hard stop just tells you why and changes nothing; there's no "confirm anyway" for those.
Self-dispatch claims
If your company lets technicians claim open jobs from their own app, a claim shows up on the board as a pending request, not a done assignment — the tech tapping Claim only asks. Confirm is what actually assigns the visit; Reject sends it back to the pool. Nothing is assigned until you act on it, same as a suggested assignment.
Reference
- Job and priority values — job statuses and priorities, generated straight from the product, are in Status & domain values.
- Who can reach Dispatch — Owners, Dispatchers, and Office users; not Technicians. See Roles & permissions.