Files
TREK/wiki/Transport-Flights-Trains-Cars.md
jubnl 6ef3c7ae6b feat(reservations): native booking-confirmation import via KDE KItinerary (#1102)
* feat(reservations): native booking-confirmation import via KDE KItinerary

Adds a two-step preview → confirm flow for importing booking emails,
PDFs, PKPass and HTML confirmations. The server invokes the KDE
kitinerary-extractor binary, maps JSON-LD schema.org output to TREK
reservation shapes, and persists via the existing createReservation
pipeline (accommodations, budget, places, WebSocket broadcasts).

- NestJS BookingImportModule: preview + confirm endpoints under
  /api/trips/:tripId/reservations/import/booking{,/confirm}
- KitineraryExtractorService: spawns the binary, filters stderr noise,
  handles QDateTime (@value) timezone-aware datetimes
- kitinerary-mapper: FlightReservation, TrainReservation, BusReservation,
  BoatReservation, LodgingReservation, FoodEstablishmentReservation,
  RentalCarReservation, EventReservation → typed preview items
- BookingImportService: auto-creates place rows; geocodes venues without
  coordinates via Nominatim (name+address → address → name fallback);
  resolves day IDs for accommodation linking
- BookingImportModal: drag-and-drop multi-file upload, preview cards
  with type icons, per-item exclude toggle, confirm step
- Shared Zod contracts: BookingImportPreviewItem, PreviewResponse,
  ConfirmRequest, ConfirmResponse — consumed by controller, service,
  API client and modal
- Dockerfile: node:24-trixie-slim runtime; amd64 downloads KDE static
  binary + locales; arm64 installs libkitinerary-bin + symlinks to
  fixed path; ENV KITINERARY_EXTRACTOR_PATH set for both arches
- /api/health/features exposes { bookingImport: boolean } so the UI
  hides the Import button when the binary is absent
- i18n keys (English), wiki docs, API.md, README one-liner

* i18n: add booking import translations for all 19 non-English locales

Adds 17 reservations.import.* keys and undo.importBooking to ar, br, cs,
de, es, fr, gr, hu, id, it, ja, ko, nl, pl, ru, tr, uk, zh, zh-TW.

* chore: enforce i18n parity

* docs(wiki): add KItinerary local setup instructions to dev environment guide
2026-06-04 20:40:57 +02:00

3.6 KiB

Transport: Flights, Trains & Cars

Log flights, trains, car rentals, and cruises with departure and arrival endpoints, times, and transit-specific details.

Where to create

Open the Transports tab in the trip planner and click Add, or open the planner from a day view and use the transport shortcut. Transport records appear in the Reservations panel alongside other bookings.

Transport types

Four types are available: Flight, Train, Car, Cruise.

Common fields

All transport types share these fields:

Field Notes
Title Required
Departure day Linked to a trip day
Departure time Optional
Arrival day Linked to a trip day (can differ from departure day)
Arrival time Optional
Booking / confirmation code Optional
Status Pending or Confirmed
Notes Optional free text

Endpoints

Flights

The departure and arrival fields use the Airport picker — type a city name or IATA code (minimum two characters) to search. Results show the IATA code, airport name, city, and country.

Once you select an airport, the timezone for that airport appears next to the time field. This lets you enter local departure and arrival times without confusion across time zones.

Trains, cars, and cruises

Departure and arrival fields use the generic location picker — search by place name or enter a free-text location. Results come from the maps search service.

For car rentals, the departure field is labelled Pickup date/time and the arrival field is labelled Return date/time.

Flight-specific fields

When the type is set to Flight, two additional fields appear:

  • Airline — carrier name (e.g. Lufthansa)
  • Flight number — (e.g. LH 123)

Train-specific fields

When the type is set to Train, three additional fields appear:

  • Train number — (e.g. ICE 123)
  • Platform — platform or track number
  • Seat — seat or coach assignment

On the map

Transport records with both endpoints set appear as lines on the trip map:

  • Flights and cruises render as geodesic great-circle curves that follow the curvature of the Earth.
  • Trains and cars render as straight polylines between the two endpoints.

Confirmed bookings are drawn as solid lines; pending bookings use a dashed line. Endpoint markers are shown at each location. For flights, a midpoint label appears along the arc showing the route codes (e.g. ZRH → JFK) and flight duration and distance when enough screen space is available.

See Map-Features for details on how these overlays work.

In the day plan

When a transport is assigned to a day, it appears inline in the day timeline between places. Multi-day transports show phase labels depending on the type:

Type Start day Middle days End day
Flight Departure In transit Arrival
Car rental Pickup Active Return
Train / Cruise Start Ongoing End

See Day-Plans-and-Notes for details.


Faster: import the confirmation — If you have a booking confirmation email or PDF, you can skip the form entirely. See Import from booking confirmation in the Reservations guide.


See also: Reservations-and-Bookings · Accommodations · Map-Features · Day-Plans-and-Notes