Busflow Docs

Internal documentation portal

Skip to content

Intelligent Dispatch Board (Resource Roster) ​

The central operational interface for dispatchers. Provides a visual timeline for assigning vehicles and crew to service legs, with real-time conflict detection and drag-and-drop resource management.

Visual Paradigm ​

The dispatch board uses a horizontal Gantt timeline as the primary view. Each row represents a resource (vehicle or crew member), and colored blocks represent assigned ServiceLegs across a configurable time range (day, week, month).

Layout ​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Resources  β”‚  Timeline (scrollable, zoomable)                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 🚌 Bus 01   β”‚ β–ˆβ–ˆβ–ˆβ–ˆ Tyrol Tour Leg 1 β–ˆβ–ˆβ–ˆβ–ˆ  β–‘β–‘β–‘β–‘  β–ˆβ–ˆβ–ˆβ–ˆ Leg 2 β–ˆβ–ˆβ–ˆβ–ˆ  β”‚
β”‚ 🚌 Bus 02   β”‚ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ Bavaria Day Trip β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ                 β”‚
β”‚ 🚌 Bus 03   β”‚ (available)                                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ πŸ‘€ Klaus    β”‚ β–ˆβ–ˆβ–ˆβ–ˆ Tyrol Tour Leg 1 β–ˆβ–ˆβ–ˆβ–ˆ  ⚠️ REST β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘  β”‚
β”‚ πŸ‘€ Sarah    β”‚ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ Bavaria Day Trip β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ                 β”‚
β”‚ πŸ‘€ Thomas   β”‚ πŸ–οΈ VACATION                                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Resource Panel (Left) ​

  • Grouped by type: Vehicles first, then crew members.
  • Status indicators: Available (green), assigned (blue), unavailable (red β€” maintenance, leave, rest).
  • Quick filters: By vehicle type, crew qualifications, availability window.
  • Search: Filter resources by name, license plate, or qualification.

Timeline Panel (Right) ​

  • Zoom levels: Day (hourly resolution), Week (daily), Month (weekly).
  • Block colors: Coded by TourOffering or ServiceLeg.leg_type.
  • Capacity badges: Each vehicle block shows booked_pax / capacity (e.g., "47/49").
  • Rest periods: Rendered as hatched/striped blocks between assignments.

Drag-and-Drop Interactions ​

Assigning Resources ​

  1. Drag a vehicle from the resource panel onto a ServiceLeg gap β†’ creates a LegAssignment.
  2. Drag a crew member onto a vehicle's row within a leg block β†’ assigns the driver to that leg.
  3. Drag to reschedule: Move an existing assignment block horizontally to adjust timing.

Conflict Detection on Drop ​

On every drag-and-drop action, the system performs real-time validation before confirming the assignment:

Conflict TypeData SourceVisual Signal
Insufficient rest time (EG 561/2006)Evaluated by Backoffice Observability against CrewDutyLogπŸ”΄ Red border + modal: "Klaus needs 11h rest. Next available: 06:00"
Crew qualification mismatchcrew_qualifications🟑 Yellow warning: "Klaus lacks Module 95 β€” expires 2026-03-01"
Vehicle restrictioncrew_qualifications🟑 Warning: "Klaus restricted to automatic transmission"
Capacity overflowSeatReservation count vs Vehicle.capacityπŸ”΄ Red badge: "52 pax on 49-seater"
Vehicle maintenance duevehicle_inspections🟑 Warning if upcoming. πŸ”΄ Hard block if blocks_dispatch = true (overdue HU/SP).
Crew on leavecrew_absencesπŸ”΄ Block: "Klaus on vacation 04/10 – 04/17"
Visa/border restrictioncrew_qualifications (visa entries)🟑 Warning: "Klaus missing UK visa for this route"

Behavior: Warnings (🟑) allow override with confirmation. Hard blocks (πŸ”΄ β€” rest time, leave) prevent assignment entirely.

Contextual Warnings ("Dispohinweise") ​

Each CrewMember carries structured restrictions. When the dispatcher drags a crew member near a ServiceLeg, the board overlays contextual badges:

  • Transmission restriction: "βš™οΈ Auto only" β†’ blocks assignment to manual-transmission vehicles.
  • License expiry: "πŸ“‹ License expires in 14 days" β†’ warning if trip falls after expiry.
  • Border restrictions: "πŸ›‚ No UK visa" β†’ blocks assignment to UK-bound legs.

The system sources these restrictions from the crew_qualifications table β€” see schema-backoffice.md and PRODUCT_schema-feature-gaps.md Β§3.

Passenger Reassignment ("Umbesetzung") ​

A dedicated sub-view accessible from any ServiceLeg block, for moving passengers between vehicles when capacity conflicts arise or breakdowns occur.

Interaction Flow ​

  1. Dispatcher clicks a capacity-conflicted leg block β†’ opens Split View.
  2. Left panel: Current vehicle's passenger manifest + seat map.
  3. Right panel: Target vehicle's manifest + seat map.
  4. Dispatcher drags individual passengers, groups (by Booking), or entire boarding points from left to right.
  5. On drop, the system:
    • Remaps SeatReservation to equivalent positions on the target vehicle's seat_map_layout.
    • Preserves all linked Booking, Payment, and PassengerProfile references.
    • Queues an automated notification to affected passengers (via Communications schema).
    • Logs the reassignment in change_events audit trail.

Bulk Actions ​

  • "Move Boarding Point": Reassign all passengers from a specific BoardingPoint to the target vehicle.
  • "Swap Vehicles": Exchange the full manifest between two vehicles (useful for breakdown scenarios).

Algorithmic Feeder/Shuttle Suggestions ​

When a TourOffering has multiple BoardingPoints with geographically dispersed passengers, the board can suggest feeder vehicle clustering:

  1. System groups passengers by BoardingPoint.geo_coordinates proximity.
  2. Calculates optimal pickup route using the routing service.
  3. Suggests the minimum required vehicle size per cluster (minivan vs. coach).
  4. Dispatcher approves β†’ system creates ServiceLeg entries with leg_type: TRANSFER for feeder routes.

This is conceptual and depends on the routing service maturity. Tag as V2 feature.

Real-Time Updates ​

The dispatch board is a live view powered by Hasura GraphQL Subscriptions:

  • New bookings: Capacity badges update in real-time as passengers book.
  • Incident alerts: Flashing overlay on affected ServiceLeg blocks when a driver creates an Incident via the Driver App.
  • ETA changes: Updated arrival times propagate from TelemetryPoint data.
  • Duty log updates: Rest period blocks adjust when CrewDutyLog entries arrive from the Driver App (manual input). [Phase 2] Operators who enable the TACHOGRAPH integration receive real-time updates from tachograph IoT hardware β€” see EU-561 research Β§3.3.

Charter Quote Pipeline ​

The dispatch board includes a Kanban sidebar for tracking CharterQuote lifecycle:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  DRAFT   β”‚β†’ β”‚   SENT   β”‚β†’ β”‚ ACCEPTED β”‚β†’ β”‚SCHEDULED β”‚
β”‚          β”‚  β”‚          β”‚  β”‚          β”‚  β”‚          β”‚
β”‚ Corp X   β”‚  β”‚ Agency Y β”‚  β”‚ Club Z   β”‚  β”‚ (on      β”‚
β”‚ 3-day    β”‚  β”‚ Airport  β”‚  β”‚ Weekend  β”‚  β”‚  board)  β”‚
β”‚ charter  β”‚  β”‚ shuttle  β”‚  β”‚ trip     β”‚  β”‚          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  • DRAFT β†’ SENT: Generates PDF quote, sends to reseller.
  • SENT β†’ ACCEPTED: Reseller confirms β†’ system auto-generates a TourOffering from the CharterQuote.
  • ACCEPTED β†’ SCHEDULED: Dispatcher assigns vehicle + crew on the Gantt board, making it operational.

Data Dependencies ​

EntitySchemaRole
ServiceLegOperationsThe blocks on the timeline
LegAssignmentOperationsCreated/modified by drag-and-drop
VehicleBackofficeResource rows (top section)
CrewMemberBackofficeResource rows (bottom section)
CrewDutyLogOperationsRest time validation
crew_qualificationsBackofficeQualification conflict checks
vehicle_inspectionsBackofficeMaintenance warnings and dispatch blocking
crew_absencesBackofficeLeave blocking
SeatReservationCommerceCapacity badges
IncidentOperationsReal-time alert overlays
CharterQuoteBackofficeKanban pipeline sidebar
BoardingPointBackofficePassenger reassignment grouping

NOTE

Subcontracted legs: When a LegAssignment has supplier_id set (and no internal vehicle/crew), the dispatch board renders it as a distinct "Outsourced" row below internal resources. Styling: dashed border, supplier name label, muted palette. Subcontracted legs cannot be drag-drop edited β€” they require explicit reassignment via the LegAssignment API.

Internal documentation β€” Busflow