Backoffice User Journeys
This document outlines the high-level workflows and journeys that operator staff (Admins, Dispatchers) follow within the backoffice application.
1. Creating a Tour Product
Actor: Admin / Product Manager
- Admin logs into the Backoffice app.
- Navigates to Catalog -> Tour Templates.
- Creates a new Draft template, defining routes, pricing rules, and capacity rules.
- System Action: Saves the
TourTemplateand associated value objects. - Edge Case: If the template references a deleted/inactive
BoardingPoint, the system blocks the state change toACTIVE.
2. Dispatching a Departure
Actor: Dispatcher
- Dispatcher opens the Dispatch Board (Gantt chart view).
- Selects an upcoming
TourDeparture. - Assigns an available
VehicleandCrewMember(Driver) to the departure legs. - System Action: The system validates compliance (e.g., driver rest hours, vehicle capacity).
- Edge Case / Error Path: If the assignment violates EU driving regulations or double-books a driver, the system shows a hard warning block, preventing the save unless an Admin provides an override.
3. Managing Bookings & Refunds
Actor: Dispatcher / Support
- A passenger requests a cancellation.
- Dispatcher finds the booking in the CRM / Bookings view.
- Clicks Cancel & Refund.
- System Action: Processes the cancellation in the Backoffice DB, then acts as a Saga coordinator to trigger the refund API call against the Mollie payment gateway (Commerce context).
- Edge Case: If the Mollie API call fails or times out, the system marks the refund as
PENDING_RETRYand alerts the Dispatcher to verify the gateway manually.
4. End-of-Trip Reconciliation
Actor: Admin / Accountant
- A trip concludes. Driver submits cash-box receipts.
- Admin goes to Accounting -> Ledger.
- Compares the submitted receipts against expected POS sales from the
CostingSheet. - System Action: Approves the transaction and locks the
CostingSheet. - Edge Case: If there is a cash discrepancy, the Admin can log an
Expense/Adjustmentrecord against the trip margin before final locking.