Package Holiday Distribution Architecture

Paket tatil ürünlerinde hotel, flight, transfer, bundle identity, pricing, cancellation ve booking lifecycle'ını teknik olarak modelleyin.

Editoryal bilgi
Advertisement

Paket tatil ürünü, yalnızca hotel + flight toplamı değildir. Türkiye mevzuatındaki paket tur tanımları ulaşım, konaklama ve diğer turizm hizmetlerinden en az ikisinin birlikte sunulabildiği birleşik bir ürünü tarif eder. Teknik tarafta bunun sonucu şudur: package offer, component offer'lardan türetilir ama kendi identity, price, cancellation ve booking state'ine sahip olmalıdır.

Problem ve neden önemli?

Hotel inventory doğru, flight inventory doğru ve transfer mevcut olabilir; buna rağmen package bookable olmayabilir. Component availability ile package availability aynı şey değildir. Tour operator contract, allotment, departure rule, minimum participant, insurance, margin ve package-specific cancellation condition ayrı state üretir.

Canonical data model

Bir package offer için minimum entity seti:

text
PackageOffer
 ├─ packageId
 ├─ departureDate / returnDate
 ├─ travelers
 ├─ destination
 ├─ components[]
 │   ├─ HotelComponent
 │   ├─ FlightComponent
 │   ├─ TransferComponent
 │   └─ OtherServiceComponent
 ├─ totalPrice
 ├─ currency
 ├─ priceComponents[]
 ├─ cancellationPolicy
 ├─ source / tourOperator
 ├─ observedAt
 └─ bookingReference / sourceOfferRef

Component'lerin kendi supplier ID'leri korunmalıdır. Package-level identity, hotel ID veya flight itinerary ID ile eşitlenmemelidir.

Bundle identity

Aynı hotel + aynı flight, farklı meal plan, transfer, baggage, room type veya cancellation kuralıyla farklı package olabilir. Fingerprint üretirken yalnız supplier name ve total price kullanmak duplicate/merge hatası yaratır.

Pricing

Package total price; hotel, flight ve transfer fiyatlarının basit toplamı olmak zorunda değildir. Contracted net rate, markup, discount, child pricing, occupancy, transfer inclusion ve campaign package-level sonucu değiştirebilir.

Bu nedenle component gross/net values, package total, mandatory taxes/fees, discount ve commission/margin ayrı tutulmalıdır.

Availability ve freshness

Her component farklı hızda değişebilir. Hotel allotment dolabilir, flight fare family kapanabilir veya transfer cutoff geçebilir. Package freshness tek timestamp ile yönetilmemeli; package observedAt yanında component freshness de tutulmalıdır.

Booking lifecycle

text
SEARCH
 → PACKAGE_SELECTED
 → REPRICE
 → COMPONENT_HOLD / VALIDATION
 → PAYMENT_AUTHORIZED
 → COMPONENT_CONFIRMATIONS
 → PACKAGE_CONFIRMED

Bir component confirm olurken diğeri fail ederse PARTIAL_CONFIRMATION veya UNKNOWN gibi explicit state gerekir. Blind retry duplicate flight/hotel reservation yaratabilir.

Cancellation / amendment

Package cancellation, component cancellation kurallarının toplamı değildir. Tour operator package-level policy uygulayabilir. Bir flight non-refundable iken hotel partially refundable olabilir; traveler'a package-level consequence gösterilmelidir.

Failure mode'lar

  • traveler count mismatch,
  • room occupancy ile flight passenger type mismatch,
  • component currency normalization hatası,
  • stale package price,
  • transfer cutoff,
  • partial booking,
  • duplicate component reservation,
  • cancellation propagation hatası,
  • supplier booking reference kaybı.

Observability

Package search → reprice success, component validation failure, stale-price delta, partial-confirmation rate, duplicate-booking rate, cancellation reconciliation drift, component vs package margin ve abandonment izlenmelidir.

Trade-off'lar

Dynamic packaging daha fazla combination ve personalization sağlar fakat search-space, pricing ve booking orchestration maliyetini büyütür. Pre-built packages daha kontrollü inventory sunar ama flexibility ve real-time supply coverage daha düşüktür.

Production checklist

  • Package ve component identity ayrılmış mı?
  • Her component source/provider reference taşıyor mu?
  • Package total ile component prices ayrı mı?
  • Reprice booking öncesi çalışıyor mu?
  • Partial-confirmation state var mı?
  • Idempotency component bazında korunuyor mu?
  • Cancellation package + component seviyesinde reconcile ediliyor mu?
  • Freshness component bazında gözleniyor mu?
Teknik danışmanlık

Mimarinizi birlikte review edelim.

Travel distribution ve metasearch mimarinizi ölçeklenebilirlik, hata senaryoları ve operasyon açısından değerlendirebiliriz.

Projenizi konuşalım →

Kaynaklar

İlgili içerikler

travel-ecosystem

TatilBudur: Dijital Tur Operatörü ve OTA Profili

tatilbudur.com

Otel, tur, uçuş ve diğer seyahat ürünleriyle TatilBudur'un Türkiye OTA, dijital tur operatörü ve package distribution rolü.

tatilbudurotatour-operator
İncele →
travel-ecosystem

TatilSepeti: OTA, Tur ve Paket Seyahat Profili

tatilsepeti.com

Otel, tur, uçak ve araç kiralama ürünleriyle TatilSepeti'nin Türkiye OTA ve package-travel ekosistemindeki teknik rolü.

tatilsepetiotatour-operator
İncele →
distribution

Package Holiday vs Hotel Metasearch: Mimari Farklar

Paket tatil dağıtımı ile hotel metasearch modelini offer identity, pricing, supplier topology, booking ownership ve cancellation açısından karşılaştırın.

package-holidayhotel-metasearchtour-operator
İncele →
comparison

Skyscanner vs KAYAK: Travel Metasearch Karşılaştırması

Skyscanner ve KAYAK'ı flight, hotel, car rental kapsamı, discovery özellikleri, provider handoff ve developer ekosistemi açısından karşılaştırın.

skyscannerkayakflight
İncele →
integration

Wego Affiliate API Entegrasyonu: Developer Rehberi

developers.wego.com

Wego Affiliate API entegrasyonunu OAuth client credentials, search creation, polling, offset merge, trip/fare/provider modeli, rate limit, handoff ve commercial reconciliation ile developer gözüyle uygulayın.

wegoaffiliateapi
İncele →
fundamentals

Metasearch Nedir? Travel Metasearch Nasıl Çalışır?

Travel metasearch sistemini ürün, veri modeli, supplier entegrasyonu, ranking, handoff, attribution ve quality katmanlarıyla; gerçek bir hotel search senaryosu üzerinden anlayın.

metasearchtravelhotel
İncele →