Chapter 1 — What Transport OS Gives You
Transport OS turns Trenvar into a TMS — a transport management system. Dispatch jobs to drivers, plan routes, capture POD, and price transport work.
What it adds
| Module | What it does |
|---|---|
| M19 | Fleet (drivers, vehicles). |
| M20 | Route planning + optimization. |
| M21 | Driver execution + tracking. |
| M22 | Proof of Delivery (full version with corrections). |
| M23 | Transport pricing (rate cards, accessorials, fuel, contracts). |
| M27 (transport-flavour) | Transport billing. |
Default landing path
/console/business/dispatch/jobs for company_admin focused on transport.
Chapter 2 — Roles That Light Up with Transport OS
| Role | What they do in Transport OS |
|---|---|
| company_admin | Owns transport config — fleet, rate cards, customer contracts, fuel rules. |
| operations_manager | Runs dispatch — creates jobs, assigns drivers, builds and optimizes routes, monitors live tracking, finalizes/corrects POD. |
| driver | Executes — accepts jobs, marks status, captures POD. This role is meaningless without Transport OS. |
| customer_service | Reads jobs and tracking for customer questions. |
| accounting | Reads transport pricing audit, runs transport billing, dispute review. |
Chapter 3 — Setting Up Your Fleet
Before you can dispatch anything, Trenvar needs to know your drivers and your vehicles. This chapter walks through both.
Walkthrough A — invite a driver
Prerequisites
- company_admin or operations_manager.
- Driver's email + name + license info.
Step-by-step
- Go to
/console/business/settings/users. Header: "Users". - Click Add User. Modal opens.
- Fill:
- Email → driver's email.
- Display Name → "Mike Johnson".
- Role → tick driver.
- Click Save & Send Invite. Trenvar sends Mike an email.
- Mike accepts, sets a password, signs in. Lands at
/console/driver/jobs(empty for now). - Now go to
/console/ops-manager/drivers. Mike appears in the list. - Click on Mike. Detail panel opens. Click Edit Driver Profile.
- Add driver-specific fields:
- Driver License Number → text.
- License Class → dropdown (CDL-A, CDL-B, regular, etc.).
- License Expiry → date picker.
- Hours-of-Service Config → optional. Sets daily/weekly drive-time limits visible to dispatch.
- Default Vehicle → typeahead (must add vehicles first — Walkthrough B).
- Phone → for dispatch comms.
- Emergency Contact → name + phone.
- Save.
Walkthrough B — add a vehicle
Step-by-step
- Go to
/console/ops-manager/fleet. Header: "Fleet". Top-right: Add Vehicle. - Click Add Vehicle. Modal opens.
- Fill:
- Registration Plate → "ABC-1234". Unique within tenant.
- Vehicle Type → dropdown: van / box truck / semi / cargo van / sprinter / cube.
- Make / Model / Year → optional.
- VIN → optional.
- Max Payload Weight (kg) → e.g., 4500 for a box truck.
- Max Payload Volume (m³) → e.g., 22.
- Insurance Provider → text.
- Insurance Expiry → date.
- Inspection Expiry → date.
- Status → active / out-of-service.
- Click Add Vehicle. Toast: "Vehicle ABC-1234 added."
dispatch.fleet.configure).Chapter 4 — Dispatch Jobs
A dispatch job is the execution unit for delivering one shipment. Status flow: open → assigned → in_progress → completed, with cancelled at any point.
Walkthrough — create a dispatch job
Prerequisites
- company_admin or operations_manager with
dispatch.jobs.create. - The shipment exists in
/console/business/wms/shipments(Warehouse OS) or as a standalone delivery (Transport-only mode).
What the screen looks like
Go to /console/business/dispatch/jobs. Header: "Dispatch Jobs". Filter pills: All / Open / Assigned / In Progress / Completed / Cancelled. Top-right: Create Job.
Step-by-step
- Click Create Job. Modal opens.
- Fill:
- Job Code → leave blank for auto (e.g., DJ-20260503-001) or type your own.
- Shipment → typeahead. Pick the outbound shipment to deliver.
- Customer → auto-fills from shipment. Read-only.
- Transport Mode → dropdown: trucking / rail / ocean / air / parcel. Optional but useful for filtering.
- Priority → dropdown: normal / high / urgent.
- Service Window → optional. Date+time-from / date+time-to. The carrier or driver must deliver within this window.
- Special Instructions → free text. ("Lift gate required. Call from front entrance.")
- Click Create Job. Job appears in the queue with status open.
Walkthrough — cancel a job
- Open the job detail.
- Three-dot menu → Cancel Job.
- Modal: enter cancellation reason (mandatory dropdown + optional notes).
- Click Confirm Cancel.
- Status flips to cancelled. Audit log records actor + reason.
Chapter 5 — Route Planning
A route plan groups several jobs into one ordered sequence assigned to a driver + vehicle. Useful when one driver does multiple stops in a day.
Walkthrough A — build a route plan
Step-by-step
- Go to
/console/business/dispatch/tracking. Two tabs: Route Plans (default) and Live Tracking. - Click Create Route Plan (top-right).
- Modal opens with three sections: Header, Stops, Capacity.
- Header:
- Plan Name → "Mike's North Route — May 3".
- Driver → typeahead. Pick "Mike Johnson".
- Vehicle → typeahead. Pick "ABC-1234".
- Date → today.
- Departure Time → time picker.
- Stops:
- Click Add Stop. Search by job code or shipment ref. Pick.
- Stop is added at the bottom of the list with auto-numbered sequence.
- Add more stops; drag to reorder, or click the up/down arrows.
- Capacity (optional):
- Max Weight (kg) → e.g., 4500. Defaults to vehicle's max payload weight.
- Max Volume (m³) → defaults to vehicle's max payload volume.
- Trenvar shows running total: "Current load: 2,840 kg / 4,500 kg (63%), 11.2 m³ / 22 m³ (51%)."
- Click Create Route Plan. Plan saved with
optimization_version = 1.
Walkthrough B — optimize the route
- Open the route plan detail.
- Click Optimize (top-right).
- Modal: pick optimization criterion — shortest distance / shortest time / tightest service windows.
- Click Run Optimization. Spinner.
- Result: re-sequenced stops shown side-by-side with the old order. Estimated savings shown ("Saved 32 km, 47 minutes").
- Click Apply to commit. Plan now has
optimization_version = 2; old version preserved in history. - Click Discard to keep the original sequence.
Chapter 6 — Driver Assignment & Live Tracking
Walkthrough A — assign a driver to a single job (without a route plan)
- Open the job from
/console/business/dispatch/jobs. - The detail panel shows the job in open status with no assigned driver.
- Click Assign Driver.
- Modal: typeahead from active drivers. Pick "Mike Johnson".
- Optionally pick a vehicle.
- Click Assign. Job status flips to assigned.
- Mike sees the job in
/console/driver/jobswithin seconds.
Walkthrough B — monitor live tracking
- Go to
/console/business/dispatch/tracking→ Live Tracking tab. - Map view loads. Each active driver shows as a pin with their initials and a colored badge: green (active, recent ping), yellow (stale, 1–3 min), red (offline, >3 min).
- Click a pin → side panel shows: driver name, current job, route plan, last ping time, speed, estimated time-to-next-stop.
- Filter the map by route plan, driver, or status.
How tracking works under the hood
Drivers publish GPS via POST /api/dispatch/driver-location. The server enforces "you can only publish your own location" — so a driver can't spoof another's. Operations managers read all locations via GET /api/dispatch/driver-location/active. Drivers go stale after 3 minutes of no ping.
Chapter 7 — Walkthrough: A Driver's Day
End-to-end walkthrough from a driver's perspective. Mike Johnson clocks in at 8 AM, runs his route, finishes at 5 PM.
Step-by-step
- Mike opens his phone's browser. Goes to
www.trenvar.com/acme-warehouse/login. - Signs in. Lands at
/console/driver/jobs. Sees today's 8 jobs as cards, ordered by route sequence. - Each card: stop number, customer, address, time window, special instructions. Status pill says assigned.
- Mike clicks the first card. Detail screen.
- He clicks Accept & Start. Status moves to in_progress. GPS prompt appears: "Allow location sharing?" → Allow. GPS pings start.
- Drives to the customer.
- On arrival, clicks Mark Arrived. The system records the arrival timestamp.
- Captures POD (Chapter 8).
- Clicks Complete. Status flips to completed. Card disappears from active list (visible in History).
- Mike taps the next card in his sequence and repeats.
- End of day: all jobs completed. Mike clicks his initials → Sign out. GPS pings stop.
What dispatch sees while Mike is working
- Live map at
/console/business/dispatch/trackingshows Mike's pin moving in real-time. - Each completed POD shows up immediately in the dispatch console.
- If Mike falls behind schedule, dispatch can intervene: call him, reassign a stop to another driver, or ping the customer.
Chapter 8 — Proof of Delivery (POD)
A POD is the legal record of delivery. Driver captures it in the field; once finalized it's immutable. This chapter walks through capture from the driver's side and what dispatch sees in real-time.
Walkthrough — driver captures a POD on a phone
Prerequisites
- driver role with
dispatch.pod.create. - Job in in_progress status.
- Phone has camera + touch screen for signature.
- Browser permissions: location + camera.
Step-by-step
- Driver Mike has marked Arrived at the customer. He taps the job's Capture POD button.
- POD form opens with these fields:
- Delivery Outcome → radio: Delivered / Partial / Failed.
- Recipient Name → text. ("John Doe").
- Recipient Title → optional. ("Receiving Manager").
- Notes → optional. ("Left with reception, called recipient on cell.")
- Mike fills outcome = Delivered, recipient name = John Doe.
- Tap Capture Signature. Full-screen signature pad opens. Recipient signs with their finger or stylus. Tap Done. Signature saved as PNG.
- Tap Take Photo. Camera opens. Mike snaps:
- The package at the door / on the dock.
- The signed paperwork.
- Any visible damage (if applicable).
- Each photo appears as a thumbnail. Tap a thumbnail to delete or retake.
- Once outcome + recipient name + signature OR photo is captured, the Finalize POD button activates.
- Tap Finalize POD. Confirmation: "Finalize POD for J-2026-001? This cannot be edited later."
- Confirm. Trenvar uploads the photos + signature, writes the POD record, marks the job as ready to complete.
- Mike returns to the job and clicks Complete. Job → completed.
Worked example — partial delivery
Mike delivers 8 of 10 boxes (2 are damaged at warehouse and held back).
- Outcome = Partial.
- Recipient name = John Doe.
- Notes = "8 of 10 boxes delivered. Boxes 9 + 10 held at warehouse for repackaging — see ticket #1042."
- Signature captured on the partial-delivery acceptance form.
- Photos: 8 boxes at the door, the partial-delivery form.
- Finalize.
What dispatch sees
The moment Mike finalizes, the POD shows in real-time on:
/console/ops-manager/pod— POD list with status, customer, outcome, photos.- The original job's detail page — POD link with photo thumbnails.
- Customer service can pull it up if the customer disputes.
- The customer's portal (if Transport-aware) — they see "Delivered" with photo thumbnail and signature.
Chapter 9 — POD Corrections
PODs are immutable once finalized. To fix mistakes, ops managers create a correction record — never an edit.
Walkthrough — correct a finalized POD
Prerequisites
- operations_manager (or company_admin) with
dispatch.pod.correct. - The POD is finalized.
- You have a clear reason for the correction.
Step-by-step
- Go to
/console/ops-manager/pod. - Find the POD you need to correct (filter by job code, customer, date).
- Click the row. Detail panel opens with the original POD: outcome, recipient name, photos, signature, notes.
- Click Correct POD (top-right).
- Modal:
- Correction Reason → mandatory dropdown: Recipient name misspelled / Wrong outcome / Photo replaced / Signature retaken / Other.
- Correction Notes → optional free text.
- Patch Fields → tick which fields to override:
- Recipient Name → new value.
- Delivery Outcome → new value.
- Photo Refs → upload replacements.
- Signature → re-capture.
- Click Submit Correction.
- Trenvar writes a new
podCorrectionrecord linked to the original POD. The original is unchanged. - The "effective POD" displayed everywhere is the original merged with the latest correction patch.
- Audit trail shows: original POD by Mike at 14:32, correction by Sarah at 16:05 with reason and patch.
Worked example
POD captured with recipient = "Jonh Doe" (typo). Customer service notices when reviewing. Sarah (operations_manager):
- Opens the POD, clicks Correct POD.
- Reason = Recipient name misspelled. Patch = Recipient Name → "John Doe".
- Submits. The POD now displays "John Doe" everywhere; the audit shows the original misspelling + the correction.
Chapter 10 — Transport Pricing
Transport pricing is its own family of rules — distinct from warehouse fulfillment pricing. Set up base rates, accessorials, fuel, and customer-specific contracts.
Source types under Transport OS
| Source Type | Used for |
|---|---|
| transport_rate | Base haul rates: flat per shipment, per-distance, or lane-specific. |
| transport_accessorial | Liftgate, extra stops, detention, wait time, redelivery. |
| transport_fuel | Fuel surcharge: flat percentage of base rate, or distance bracket table. |
| transport_contract | Customer-specific overrides of the above. |
Walkthrough A — create a base distance rate
Step-by-step
- Go to
/console/business/billing/pricing-rules. - Click Create Rule.
- Source Type → "Transport: Rate".
- Rule Name → "Standard Distance Rate".
- Customer → leave blank for tenant-wide default.
- Base Rate Style → distance.
- Distance Unit → km or mi.
- Distance Rate → 0.75 ($0.75 per km).
- Minimum Charge → 30 ($30 floor regardless of how short the trip).
- Vehicle Types → optional. Tag input for which vehicle types this rule applies to.
- Save.
Walkthrough B — create a flat lane rate
- Same screen. Click Create Rule.
- Source Type = "Transport: Rate". Style = lane.
- Origin Zone → "VAN" (define zones in shipping settings).
- Destination Zone → "CAL".
- Lane Key → optional shorthand "VAN-CAL".
- Flat Amount → 325.
- Save. Trenvar will use this rule for every job from VAN zone to CAL zone.
Walkthrough C — create an accessorial rule
- Click Create Rule.
- Source Type = "Transport: Accessorial".
- Rule Name = "Liftgate Service".
- Charge Type → per_use / per_hour / flat.
- Amount → 35 (per use).
- Default Quantity → 1 (auto-applied if applicable).
- Save. When a dispatch job is flagged "Liftgate required", this charge is added.
Walkthrough D — create a fuel surcharge
- Source Type = "Transport: Fuel".
- Fuel Mode → flat_percent (single % of base) or distance_brackets (varies by trip length).
- If flat: Percent Flat → 12 (12%).
- If brackets: add rows like "0–100km = 8%", "100–500km = 12%", "500+km = 15%".
- Save. Applied automatically on every transport invoice line.
Walkthrough E — customer contract (override rates for one customer)
- Source Type = "Transport: Contract".
- Customer → "Acme Corp".
- Pick which base rules to override:
- Rate Card Code → reference your default. Or override entirely.
- Discount Percent → 8 (8% off everything).
- Base Rate Multiplier → 0.92 (alternative way to say "92% of base").
- Lane Overrides → table of specific lane prices that override the default.
- Accessorial Overrides → e.g., "Liftgate free for Acme".
- Save. For Acme's jobs, this contract supersedes the default rules.
Worked example — calculating a transport invoice line
Acme job: 340 km from Vancouver to Calgary, 2 stops, liftgate required.
- Base rate (lane): VAN-CAL flat = $325.
- Acme contract discount: -8% = $325 × 0.92 = $299.
- Stop charge: 2 stops included free, 0 extras = $0.
- Liftgate: free under Acme contract = $0.
- Fuel surcharge: 12% of $299 = $35.88.
- Total transport line: $334.88.
transport.pricing.audit.read). When a customer disputes, open the audit entry to show exactly how the price was built.
Chapter 11 — Daily Flow per Role
Operations manager's day
- Open dispatch board.
- Triage open jobs; assign drivers based on availability.
- Build and optimize route plans.
- Watch live tracking; intervene on stalled drivers.
- Finalize POD corrections submitted by customer service.
Driver's day
- Log in to /console/driver/jobs.
- Accept jobs in order.
- Drive, mark arrived, capture POD, complete.
- End of day: review tomorrow's preview.
Customer service's day
- Read tracking for customer questions ("where's my shipment?").
- Open POD history for delivery confirmations.
- Open cases for delivery disputes.
Appendix A — Transport OS Console Paths
| Path | Screen |
|---|---|
| /console/business/dispatch/jobs | Dispatch jobs |
| /console/business/dispatch/tracking | Route plans + live tracking |
| /console/ops-manager/pod | POD admin view (ops-manager surface — there's no business/dispatch/pod) |
| /console/business/dispatch/pricing | Dispatch pricing (requires Warehouse + Transport) |
| /console/business/shipping/labels | Shipping labels |
| /console/ops-manager/dispatch | Dispatch ops view |
| /console/ops-manager/fleet | Fleet |
| /console/ops-manager/drivers | Drivers |
| /console/ops-manager/pod | POD review + corrections |
| /console/driver/jobs | Driver job list |
| /console/driver/tracking | Driver tracking view |
| /console/driver/pod | Driver POD capture |
| /console/driver/history | Driver history |
Appendix B — Transport OS Permissions
| Permission | Held by |
|---|---|
| dispatch.jobs.list / read | operations_manager, operator, driver, customer_service, accounting |
| dispatch.jobs.create / update / assign / cancel | operations_manager (and company_admin) |
| dispatch.routes.create / update / optimize | operations_manager |
| dispatch.fleet.read / configure | operations_manager |
| dispatch.tracking.read | operations_manager, operator, driver, customer_service, accounting |
| dispatch.tracking.update | driver, operations_manager |
| dispatch.pod.create | driver |
| dispatch.pod.finalize | driver, operations_manager |
| dispatch.pod.correct | operations_manager (only) |
| transport.pricing.read | operations_manager, accounting |
| transport.rate_cards.read | operations_manager, accounting |
| transport.accessorials.read | operations_manager, accounting |
| transport.fuel_rules.read | operations_manager, accounting |
| transport.customer_contracts.read | operations_manager, accounting |
| transport.quotes.read / create | operations_manager (read+create); accounting (read) |
| transport.pricing.audit.read | accounting |
Appendix C — Glossary
Every Transport-OS-specific term, in plain English.
Accessorial — An add-on transport charge: liftgate, extra stops, detention, wait time, redelivery.
Capacity envelope — A vehicle's maximum payload weight + volume. Trenvar enforces it on route plans.
Carrier — The company actually moving the freight (FedEx, UPS, DHL, USPS, your own fleet).
Customer contract — A transport pricing rule scoped to one customer that overrides default rate, accessorial, or fuel rules.
Dispatch board — The screen showing all active dispatch jobs and route plans; central console for ops managers.
Dispatch job — The unit of work for delivering one shipment. Lifecycle: open → assigned → in_progress → completed (or cancelled).
Driver — A tenant user with the driver role. Sees only their own assigned jobs.
Fleet — Your collection of vehicles + drivers.
Fuel surcharge — A pricing rule that adds a percentage (or distance-bracketed) charge on top of the base rate.
Lane — A specific origin → destination pair (e.g., VAN → CAL). Lane rates set a fixed price for that route regardless of distance.
Live Tracking — Real-time map view of active drivers' GPS locations. Drivers go stale after ~3 minutes of no ping.
POD (Proof of Delivery) — The legal record of delivery: photo, signature, recipient name, outcome. Captured by the driver; immutable once finalized.
POD Correction — How an ops manager fixes a mistake on a finalized POD. Original POD is immutable; the correction is a separate audit-logged record that overrides specific fields.
Rate card — Your set of base transport rates (flat, distance, lane).
Route plan — An ordered sequence of stops assigned to a driver + vehicle. Has an optimization version that bumps when re-sequenced.
Stop — One delivery point on a route plan. Most plans have multiple stops.
Stop charge — Per-stop pricing rule. Typically N stops included free, plus extra-per-stop after.
Transport mode — How freight moves: trucking, rail, ocean, air, parcel.
Vehicle — A truck, van, or other unit in your fleet. Has plate, type, max payload, expiry dates.
Write-mode impersonation — Platform-admin capability to make changes inside a tenant while signed in as a tenant user. Audit-loud and dangerous.
End of Transport OS Guide · v1.0 · May 2026