English
Command Center
Assets
0 Results

Task Queue

Move IDTrailerMoveStatusSpotterDue

Loads on the Yard

LoadCustomerApptScheduled CarrierAttached To

Trailer Pools & Drop Contracts 0 alerts Matched on USDOT number — carrier master via usdot-import

CarrierContracted Min (SLA)On SiteContractUsable EmptiesLoad DemandCoverage
Usable = on site · empty · not red-tagged · not already carrying a load. Demand = unattached yard-managed loads scheduled for that carrier. Contract minimums are per-site config (edit inline here); in production this is the CarrierPool object, and pool alerts route through the standard alert channels (dashboard, email, SMS).

Daily Status

Drag any occupied bar onto an open location to create a move request — it opens pre-filled, you confirm priority/spotter and go. Blocked and occupied locations refuse the drop. Assets already on a task, red-tagged, or connected chassis can't be dragged. Click any empty slot to block it / take it out of service.
🚚 Driver Waiting Area — No trucks waiting for door assignment
Dwell < 24h 24–72h > 72h Red tag / OOS Blocked location Has active task

MoveTask — the new first-class entity

Today V3 pins one pending move onto the asset record (moveDoor / moveSpot / moveDateTime / spotterUser) and drives lifecycle through ASSET-workflow stages (In Yard → Move Requested → Assigned → Moving → Moved). That works, but it caps the system at one move per trailer, gives tasks no type, no priority, no queue order, no pause, no scheduled release, no completion verification, and makes task history an exercise in reading asset audits. The proposal: keep the stage model for the asset, and introduce a MoveTask entity for the work. Everything in this demo runs on the model below.

SCHEDULED OPEN ASSIGNED ACCEPTED IN PROGRESS COMPLETED plus PAUSED ⇄ DECLINED → back to OPEN CANCELLED COMPLETED w/ EXCEPTION

V3 stage mapping: Move Requested ≈ OPEN · Assigned ≈ ASSIGNED · Moving ≈ IN_PROGRESS · Moved ≈ COMPLETED. New states are ACCEPTED (spotter has seen & committed), PAUSED (with reason), SCHEDULED (releaseAt in the future), DECLINED (reason-coded, returns to pool), and exception-coded completion.

MoveTask
id · siteIdidentity
typeSPOT · PULL · MOVE · PUSHBACK (auto-derived from route)
assetId + expected number/typewhat to move (verified at hook)
from → toLocationRef; to nullable for destination-less PULL
statuslifecycle above
hot + priority (1–5)queue order = hot → priority → dueBy → age
dueBy · releaseAtdue drives Overdue; release gates visibility
assignedTo · createdBy · sourceDISPATCHER · SPOTTER · SYSTEM · WMS
timestampscreated/assigned/accepted/started/paused[]/completed → labor & indirect-time analytics for free
completionconfirmedLocation · exceptionCode? · photos[] · note
reasonCodeon decline / cancel / pause / destination change
Location extensions (prereqs for High items)
Multi-site taskingHAVE — every V3 endpoint is tenant/{t}/site/{s}-scoped; site selector switches yard/doors/assets/queue/loads/pools per site. NEW: none server-side — pure UI scoping (+ SiteViewDTO site-groups later)
Hierarchy fidelityHAVE — every LocationRef resolves the full V3 chain: Spot › Row › Zone › Yard and Door › Dock › Warehouse (matches site-config tabs Yards/Zones/Rows/Spots)
Spot.status / Door.statusOPEN · BLOCKED · OUT_OF_SERVICE (+reason, until) — “block locations”
Spot.size / equipment fit53' in a 48' spot warning
Door.directionINBOUND / OUTBOUND / BOTH
AssetHold (red tag / OOS)reason · photos · until · excluded from tasking
Load ↔ Trailer attachment (this round)
Load.assetHAVE — LoadDTO.asset already links load → trailer/container in V3
Load scheduled carrierHAVE — LoadDTO.scheduledCarrier + scheduledUsDotNumber (booked carrier; actual carrier captured at check-in). Team confirmed 7/27: no new Required Carrier field needed — attach validation matches the SCHEDULED carrier
Reefer: fuel + max tempHAVE — reeferFuel enum (Full…<¼) on asset & load; maxTemp / reqMaxTemp; TRAILER/CONTAINER_MAX_TEMPERATURE + REEFER_FUEL capture types; cold-chain alerts product-level
Reefer: MIN temp (range)NEW — no min temp anywhere in V3. Add Load.reqMinTemp (+ Asset minTemp if capability matters) + TRAILER_MIN_TEMPERATURE capture type; attach validation enforces reefer + set-temp within range; continuous set/actual via AT&T cargo sensors
Owner vs CarrierHAVE — Owner = AssetDTO.owner + usDotNumber (who owns the box: Maersk, JB Hunt). Delivering carrier = LoadDTO.carrier + carrierName + usDotNumber, with scheduledCarrier/scheduledUsDotNumber for what was booked vs who showed up; captured at driver check-in (VisitorLoadDTO.usDotNumber → load check-in). Both nullable; both resolve to the USDOT carrier master (CarrierDTO.dot). Pools + Required-Carrier match on OWNER. NEW (P0): Asset.carrier — stored on the asset, SYNCED with the load: attach/check-in writes it, it persists after detach, asset-side edits write back to the attached load
Load status = LoadDTO.stageHAVE — WorkflowStageMinDTO {id, name, color} on every load; stages configured per workflow. Verified live in QA 7/27: Outbound Preload (34) = Not Staged 35 → Loading 509 → Staged 510 → Shipped 508; Inbound Drop (2) = Booked 9 → Arrived 10 → Received 13. Also HAVE: arrivalStatus (EARLY/ON_TIME/LATE) + driverStatus (CHECKED_IN/OUT/PENDING). Reads: GET tenant/{t}/load · site/{s}/load-stat; writes: PUT load/{id}
Load.progressPct + holdNEW — % loaded/unloaded entered by loader/spotter/office (WMS-computable later via pallet counts — HAVE totalPalletCount); reason-coded LOAD_HOLD/RESUME at X% (extends existing DRIVER_HOLD/RESUME audit pattern); asset shows Partially Loaded state
Workflow.showLoadsInYardNEW workflow setting (sibling of assetTracking / "Track Asset Inventory") — ✓ drop & preload workflows, ✗ live workflows; drives the yard-side Loads view
CarrierPool (new object)carrier keyed by USDOT (CarrierDTO.dot — HAVE, incl. usdot-import) · site · contractMinTrailers (drop-contract SLA) — config per site, own tab
Pool alertsPOOL_UNDER_CONTRACT (on-site < contracted min) · POOL_SHORT_FOR_LOADS (scheduled-carrier demand > usable empties) — routed via standard alert channels
Attach validationattach blocked unless trailer owner USDOT = LoadDTO.scheduledUsDotNumber; also blocked on red-tag or trailer already carrying a load
Connection displayload chip on yard board, spotter task cards, and load panel — visible everywhere the trailer is
Chassis ↔ Container connection (this round)
Asset.connectedAsset*HAVE — AssetDTO.connectedAssetId/Number/Type; gate workflows capture chassis at check-in
Yard-side connect / separateNEW UX — mount container on chassis, separate in the yard (workflow does it at the gate; this covers everything after)
Locations travel togetherNEW semantics — every move of either asset updates both; enforced at task completion
Connected chassis not taskableNEW rule — it moves with its container; standalone chassis remains a movable asset
Grounded-container warningNEW — dispatching a chassis-less container warns (needs chassis or lift equipment); bare chassis can't take loads
CapabilityV3 todayWire-up plan
Create / edit taskHAVE (shape) PUT asset move fieldsNEW POST /task · PUT /task/{id} — or keep writing asset fields for v1 and sync
Lifecycle statesHAVE (4 of 9) stages 487→544NEW accept / pause / decline verbs; map 4 core states onto existing stages for backward compat
Claim from poolHAVE Start on open taskKeep; add accept-vs-start distinction
Priority + queue orderGAP due-by onlyNEW hot/priority fields + server-side ordering
Scheduled releaseGAPNEW releaseAt + scheduler tick
Completion verificationGAP one-tap completeNEW confirm destination · exception codes · photo hooks
Task history / reportingGAP asset audit onlyMoveTask table IS the history; findQO-style query + aggs
Photos (damage / reefer)HAVE (files) untypedAdd DAMAGE / REEFER_DISPLAY file types on asset files
Independent moveHAVE Start on parked assetKeep — auto-creates a MoveTask with source=SPOTTER
Reefer range + fuelHAVE reeferFuel + maxTemp/reqMaxTemp + capture typesNEW reqMinTemp field + MIN_TEMPERATURE capture; attach validation (reefer required, range fit, low-fuel warn); telemetry via Connected IoT
Load progress & holdsGAP "visibility while loading" (only SAP claimed it)NEW progressPct + LOAD_HOLD/RESUME verbs; manual entry now, WMS pallet-event computation later; Partially-Loaded asset state derived
Trailer pools & drop contractsHAVE (view) trailer-pool visibility (empties by carrier)NEW CarrierPool config (contractMinTrailers per site, carrier keyed by USDOT) + two alert rules; Scheduled Carrier + pool matching on CarrierDTO.dot (master via usdot-import — HAVE)
Yard-managed loads filterHAVE workflow types + settings step (assetTracking et al.)NEW showLoadsInYard boolean on WorkflowDTO; default ✓ INBOUND_DROP_LOAD / OUTBOUND_PRE_LOAD, ✗ live types
Load ↔ trailer attachmentHAVE LoadDTO.asset + trailerNumberKeep; HAVE scheduledCarrier + scheduledUsDotNumber — attach-time validation is app-side logic on existing fields (no new field; confirmed 7/27)
Live Yard map + drag-and-drop movesHAVE (view) graphical yard map exists in productNEW drag-to-dispatch: drop creates a pre-filled MoveTask; needs spot geometry/coords in API for custom layouts
Chassis ↔ container connectionHAVE AssetDTO.connectedAsset* + gate captureKeep; NEW yard-side connect/separate actions + location-propagation semantics + connected-chassis tasking rule
NotificationsHAVE stage enter/exit EMAIL·SMS·HTTPReuse stage actions; add task-event webhooks later

Compass criteria this demo answers

Created tasks ✓ · Verify trailer during task ✓ · Select new trailer ✓ · Verify/select new destination ✓ · Pause or hold task ✓ · Unassign (decline w/ reason) ✓ · Independent moves ✓ · Update load status ✓ · Update trailer attributes ✓ · Damage / reefer photo hooks ✓ · Out-of-service ✓ (red-tag excluded from tasking) · Search ✓ · Spot / pull / move / push-back task types ✓ · Task as high priority ✓ · Schedule release of future tasks ✓ · Red tag ✓ · Block locations ✓ (blocked spot in picker) · Task history incl. cancelled ✓ · Indirect time tracking (timestamps) ✓ · Add load/shipment to trailer ✓ · Required-carrier lane enforcement ✓ (new attribute) · Trailer-pool contract & coverage alerts ✓ (new config) · Loading/unloading progress % + hold at X% ✓ (answers "visibility while loading") · Multi-site tasking across the tenant ✓ (site selector) · Reefer temp range + fuel enforcement ✓ (min temp = new field) · Create Asset wizard from List View ✓ (matches product 2-step flow; move fields queue a task) · Pencil = Edit Asset, truck-clock icon = move task ✓ (v17: move fields removed from edit — moves live only in Tasking; edit shows a read-only move-request reference) · v18: column picker w/ Load, Load Status, % Complete ✓ · Open Requests on edit ✓ · destination Site dropdown + cross-site transfer ✓ · available-only locations w/ search + collapsible rows ✓ · Hazleton-scale site (250 locations) seeded ✓ · Load Status = LoadDTO.stage w/ real QA stage ids ✓ · Owner vs delivering Carrier split (check-in linked) ✓ · Asset.carrier stored + load-synced (P0) ✓ · Load numbers deep-link to the platform load record ✓ · Chassis↔container connect/separate ✓ (locations travel together) · Real-time yard map w/ drag-and-drop move requests ✓ (Live Yard) · DVIR — yard-check build · Yard check — next build

Spotter
· Spotter
Event Log — full audit trail