Every customer has a Rate Card that declares what's at each site and how often it's serviced. Save a rate card row with a service frequency and PortaPro creates the service jobs automatically: immediately for anything coming due soon, and again every night for the rest. Auto-created jobs land in the Unassigned column of the Jobs & Dispatch board with an "Auto-scheduled" badge. A dispatcher assigns each one to a driver. Then on the Route Plan page, you pick the date and click Plan day (or build manually), publish, and push each driver's stops to their phone. That's the whole recurring-service loop; nothing else needs to be built by hand.
This article walks through each stage, every setting that affects it, and how to troubleshoot the flow end to end.
Stage 1: Rate Card (the contract)
The Rate Card lives on the customer profile's Rate Card tab. The same editor also opens from the Sites tab (per-site card → "Service Plan"); both surfaces write to the same row. For the full editor walkthrough, see Rate Card & Service Plan Management and Rate Card Overview.
What a row declares, all edited in the Service Plan modal:
| Field | Meaning |
|---|---|
| Unit Count | How many units are at the site (e.g. 4) |
| Unit Type | Product from your catalog (Standard PT, ADA, front-load 2-yard, etc.) |
| Service Rate | Price per unit per billing period |
| Rate Period | Per month, per 28-day, per week, flat, or per-trip |
| Service Frequency | How often a driver visits: this is what generates jobs |
| Service Day of Week | Anchor weekday for weekly, bi-weekly, or EOW cadences |
| Bills From / Bills Until | Optional pause or end dates |
| Taxable | Non-taxable toggle |
| Additional Charges | Fuel surcharges, damage waivers, hand-wash stations, and similar add-ons |
Supported frequencies:
Header actions on the Rate Card tab:
A dismissible "How service works" strip at the top of the Rate Card and Rentals & Service tabs shows the whole pipeline with clickable jumps to Dispatch and Route Plan.
Stage 2: Automatic service-job generation
Job generation has two triggers, and they both run the same underlying process:
Lead window. Jobs are only created for visits that fall within the configured lead window (default 3 days). Configurable in Settings → Finance → Invoices → Scheduled service generation.
Idempotency, or why re-running is always safe. A database-level uniqueness guarantee makes duplicate jobs for the same row and date impossible. You can click Sync service schedule as many times as you want; a second run just reports zero new.
What each frequency produces:
| Frequency example | What the generator does |
|---|---|
| Weekly | 1 job per 7-day interval, anchored to the service day of week (or the last-serviced date) |
| Bi-Weekly / EOW | 1 job per 14 days |
| Monthly | 1 job per ~30 days |
| "Tuesday" | The next Tuesday inside the lead window |
| "3x a week" / "M,W,F" | Each matching weekday inside the lead window |
| On Call | Skipped on purpose. No auto-generation |
| Unrecognized text | Skipped |
Anchor dates. The generator uses the last-serviced date (updated automatically when a maintenance report completes) or a configured service interval, so cadence stays accurate as work actually happens.
Skip cycle vs. cancel. Auto-generated jobs offer Skip cycle instead of cancel, so the anchor date stays correct for the next visit.
Stage 3: Assign drivers on the Dispatch board
Auto-scheduled jobs appear on the Jobs & Dispatch board (a full-screen version is available, and a denser drag view lives in Dispatch Cockpit) with:
To assign a driver, drag the card from the Unassigned column onto a driver's lane, or use the Dispatch Cockpit's assign flow. There is no auto-assignment; a human always decides who runs what.
Vehicles are assigned separately in Fleet → Daily Assignments, which feeds the Route Plan optimizer.
Stage 4: Build the day on Route Plan
Routing happens on the standalone Route Plan page. This is the canonical routing surface; there is no separate slide-out panel.
Two ways to build a day:
What the optimizer respects:
Publish and push:
Route Plan will warn you if any prerequisites are missing: a Start Facility (Settings → Routing), driver-vehicle assignments (Fleet), and an address or GPS pin on every job.
All the settings that affect this pipeline
Settings → Finance → Invoices, under "Scheduled service generation":
Settings → Routing: Facilities (start/end), driver location tracking, capacity planning, storage yards.
Fleet → Daily Assignments: which driver drives which vehicle each day. Feeds the Route Plan optimizer.
Customer profile → Rate Card: where all per-customer service configuration lives.
What each surface actually shows
| Surface | Purpose |
|---|---|
| Rate Card tab | Contract view: every site, unit count, rate, frequency, cycle value |
| Sites tab | Per-site cards with the same Service Plan editor |
| Rentals & Service tab | Operational view: what's deployed on the ground, plus Upcoming service visits per row |
| Jobs & Dispatch | The day's unassigned and per-driver lanes; drag to assign |
| Route Plan | Day-based route builder, optimizer, and publish/push |
Common demo flow
If a Monthly rate card doesn't produce a job right away, that's expected: jobs are only created within the 3-day lead window. Weekly and day-pattern rows always demo instantly.
Troubleshooting
"I saved a rate card and no jobs appeared." Check these, in order:
Use the Preview run button in Settings → Finance → Invoices; it shows exactly which bucket a row fell into (on-call skip, no-frequency skip, inactive-site skip, not-yet-due skip).
"Duplicate jobs after editing a rate card." Not possible today. A database uniqueness guarantee blocks it.
"A cron ran but I don't know if it worked." Every run is logged. The Settings → Finance → Invoices "Last run" panel shows the most recent operator-triggered run, including counts and errors.
"The dispatch board shows too many auto-scheduled jobs." Reduce the lead-days setting. A lower lead means jobs appear closer to their due date.
