@voyant-travel/operations, a headless module with Drizzle schema, services, and Hono routes. New code imports the owner subpaths rather than the package root:
@voyant-travel/operations/availabilityfor slots, allocation resources, pickups, and rooming.@voyant-travel/operations/resourcesfor resources and resource pools.@voyant-travel/operations/groundfor dispatches, vehicles, and drivers.@voyant-travel/operations/placesfor shared physical places.
Key concepts
These terms come straight from the glossary. Operations is the module that holds the execution truth behind them.- Dispatch. An operational order in ground to move passengers from A to B at a time, assigned to a Driver and a Vehicle.
- Vehicle. A transport asset (car, van, bus, coach) with capacity, class, and accessibility flags.
- Driver. A crew member assigned to Vehicles and Dispatches.
- Resource. A finite assignable asset (guide, equipment, room, driver, vehicle) with a type and availability.
- Resource Pool. A named collection of interchangeable Resources, such as “French-speaking guides, Cairo”.
- Resource Holds. Operations-owned execution holds against accommodation capacity (Room Resource Hold) or a function space (Space Resource Hold). These carry the execution truth behind a MICE Program’s room and space blocks.
- Rooming List. Traveler-to-room grouping or assignment data for a Booking.
- Place. A shared physical place (meeting point, pickup or dropoff place, airport, station, port, attraction, venue, accommodation location) used across OTA, tour-operator, DMC, and MICE workflows.
Capacity is always a number, never a status. A Slot has a capacity and a status; do not conflate them. Operations enforces capacity at two gates: the slot-level pax check and the per-resource check (see fulfillment and ground ops).
What it owns
Operations is split into four owner areas, each with its own schema, service, and routes.Availability and allocation resources
Availability owns the concrete dated inventory units a product can sell against, and the resources that break a slot’s gross capacity into typed, individually bookable units.- Availability Rules generate concrete Slots from an RFC 5545 recurrence. A scheduled slot is what the catalog and profitability surfaces call a “departure”, exposed as the
departureLinkable(idPrefix: "avsl"). - Closeouts block a date or range (holiday, maintenance, sold-out override).
- Allocation resources are the per-slot inventory primitive for products where an operator buys a fixed block per departure (a hotel allotment, a coach seat map, a guide roster). A slot’s pax bucket is the gross capacity; resources break it into typed units such as
room_dblorvehicle_seat. - Pickup Points and Pickup Groups model where travelers are collected, dropped off, or meet.
- Rooming and allocation exports turn traveler-to-resource assignments into passenger and rooming CSVs.
productOptionResourceTemplates. When generateAvailabilitySlots() publishes a new slot, materializeSlotResourcesFromTemplateDefaults() seeds resources from those template defaults. The helper is idempotent, so re-running generation never blows away custom inventory. A default_count of null disables auto-materialisation, and vehicle-seat layouts stay out of the default path because they need a pax-aware vehicle-parent and seat-children hierarchy.
Resources and resource pools
The resources area owns finite assignable assets that are not slot inventory: guides, equipment, and other typed resources, grouped into interchangeable Resource Pools. It tracks resource requirements, slot assignments, allocations, and closeouts so you can answer “which guide is free on the 28th” without overbooking a person.Ground
Ground owns the day-of logistics layer: Dispatches, Vehicles, Drivers, ground operators, transfer preferences, dispatch legs, passengers, checkpoints, and execution events. A dispatch is the operational order; vehicles and drivers are the assets it consumes; execution events record what actually happened on the ground.Places
Places owns shared physical locations used by every workflow. In the v1 vocabulary these are Places; the underlying tables and routes keep the compatibility namefacilities. The module exports both names from the same definitions (places is aliased to facilities, placesService to facilitiesService), so you can use the canonical term in new code without a migration.
Working with it
Register the module and use its services against your database handle.Fulfillment and ground ops
Operations is the execution end of the commitment chain. A confirmed booking holds allocations against slots, pickups, or resources, and operations enforces both gates that must pass for a booking to confirm: the slot-level pax check (adjustSlotCapacity) and the per-resource capacity check used both on the read side (the slot resource manifest) and the write side (createTravelerWithTravelDetails). Because both sides use the same distinct-traveler count, the storefront’s “available” number and the booking guard never disagree.
Links to other modules
Operations stays decoupled and connects to the rest of the platform through links and shared references.- Bookings hold the Allocations against operations slots, pickups, and resources. Operations enforces the capacity, bookings owns the commitment.
- Catalog owns Products and Product Options; operations reads
productOptionResourceTemplatesto know what resource mix a published slot should have. - Finance references a departure (an availability slot,
idPrefix: "avsl") through thedepartureLinkablewhen allocating supplier cost for per-departure profitability. See Finance. - MICE programs carry program-level room and space blocks; the execution truth lives in operations as Room and Space Resource Holds.
React package
@voyant-travel/operations-react provides hooks, clients, query keys, and admin UI, split along the same owner areas as the headless module:
@voyant-travel/operations-react/availability(plus/availability/hooks,/availability/allocation,/availability/admin) for slots, the allocation editor, and rooming.@voyant-travel/operations-react/resourcesfor resources and pools.@voyant-travel/operations-react/groundfor dispatches, vehicles, and drivers.@voyant-travel/operations-react/placesfor the places directory.
Next steps
Finance
Allocate supplier cost to departures and report per-departure profitability.
Modules
The full catalog of domain modules and how they link.
Data model
How module-owned schemas and cross-module links are authored.
Glossary
The shared vocabulary behind dispatches, resources, and places.