Skip to main content

Session lifecycle & status sync

Every Route Planning wizard run is stored as a route_planning_session. The status column drives session history, export/assign toolbar gates, and API guards.

Backend enforcement: RoutePlanningSessionTransitionValidator (Java). Frontend mirrors the same rules in routePlanningSessionStatusSync.js and routePlanningSessionActionGates.js.


Status diagram​

stateDiagram-v2
[*] --> DRAFT: session created
DRAFT --> INGESTED: upload / webhook
INGESTED --> READY_TO_OPTIMIZE: locations + fleet ready
GEOCODED --> READY_TO_OPTIMIZE
READY_TO_OPTIMIZE --> OPTIMIZING: server POST optimize or wizard sync
INGESTED --> OPTIMIZING: wizard sync before browser HERE
OPTIMIZING --> OPTIMIZED: HERE success
OPTIMIZING --> OPTIMIZATION_FAILED: HERE error
OPTIMIZATION_FAILED --> OPTIMIZING: retry / re-optimize
OPTIMIZED --> OPTIMIZING: re-optimize allowed
OPTIMIZED --> COMMITTED: assign to planner
COMMITTED --> [*]

Status reference​

StatusMeaningOperator milestone
DRAFTEmpty session shell—
INGESTEDStops loaded from upload/webhookFile uploaded
GEOCODEDGeocoding pass completeLocations confirmed
READY_TO_OPTIMIZEDepot, fleet, stops readyFleet configured
OPTIMIZINGHERE job in progressOptimizing routes…
OPTIMIZEDRoutes available for export/assign/dispatchRoutes on map
OPTIMIZATION_FAILEDLast optimize failedError banner / retry
COMMITTEDPlanner trips createdPlanned in TCMS — view-only

Invalid transitions via PUT /sessions/{id} return RP_SESSION_001 (409).


Who updates status when​

Wizard eventMechanism
Upload / webhook ingestBackend → INGESTED
Server POST …/optimize startsBackend → OPTIMIZING
Server optimize succeedsBackend → OPTIMIZED
Server optimize failsBackend → OPTIMIZATION_FAILED
Browser HERE optimize startsWizard PUT → OPTIMIZING (if needed)
Browser HERE optimize succeedsWizard PUT → OPTIMIZED
Browser HERE optimize failsWizard PUT → OPTIMIZATION_FAILED
Assign to planner (server routes)POST …/commit-to-planner → COMMITTED + commit log
Assign to planner (browser routes)Legacy planner save succeeds → wizard PUT → COMMITTED

Wizard status sync implementation​

File: TCMSBookingWebApp/src/modules/routePlanning/utils/routePlanningSessionStatusSync.js

  • Reads current status via GET /sessions/{id} (or caller-provided status).
  • Computes shortest allowed path (e.g. INGESTED → OPTIMIZING → OPTIMIZED → COMMITTED).
  • Applies each step with PUT /sessions/{id} and { "status": "…" }.

This keeps Session history accurate when operators use browser HERE (common in dev with VITE_HERE_API_KEY) or assign from browser-optimized routes without a prior server optimize.


Assign to planner prerequisites​

PathRequires
POST …/commit-to-plannerSession OPTIMIZED; routes persisted on server (GET …/optimization-result non-empty); valid truck/driver per route
Legacy planner save (wizard)Browser assignment snapshot with routes; session id optional but required for COMMITTED sync

After COMMITTED:

  • UI disables Assign to planner on optimization and assignment review.
  • Reopening the session loads routes from server optimization result or browser snapshot cache (addresses visible).
  • Forced second server commit → RP_COMMIT_008.

PUT session status (integrators)​

Optional body field on PUT /rest/route-planning/sessions/{sessionId}:

{
"status": "OPTIMIZED"
}

Only allowed transitions from the current status succeed. Example chain from ingest to committed:

  1. { "status": "OPTIMIZING" } (from INGESTED)
  2. { "status": "OPTIMIZED" }
  3. { "status": "COMMITTED" } (after planner trips exist)

Direct API callers must chain steps; the wizard does this automatically.


Toolbar gates (frontend)​

From routePlanningSessionActionGates.js:

GateEnabled when
Export route/load planOPTIMIZED or COMMITTED + routes exist
Assign to plannerOPTIMIZED + routes exist; disabled when COMMITTED
Send to third partyOPTIMIZED or COMMITTED + routes exist
Retry optimizationOPTIMIZATION_FAILED

Live route tracking visibility​

Sessions with status OPTIMIZED, COMMITTED, or EXPORTED appear on Live Route Tracking for their planning date (GET /live-routes). COMMITTED sessions typically have planner trips and mobile GPS; OPTIMIZED sessions show planned geometry but may show no signal until assign completes.

See Live route tracking API and Live route tracking (operators).