TL, Döviz Kuru ve Rounding: Travel Pricing Tasarımı
Türkiye travel pricing sistemlerinde FX source, TRY conversion, rounding, quote timestamp ve stale-rate riskini production seviyesinde modelleyin.
Türkiye travel pricing sisteminde “USD fiyatı TL'ye çevir” yeterli bir kural değildir. Hangi kur kaynağının kullanıldığı, quote timestamp, buy/sell/mid semantics, rounding, supplier currency ve booking-time reprice aynı ürün için farklı TRY toplamları üretebilir.
TCMB gösterge kuru ne anlama gelir?
TCMB gösterge niteliğindeki kurları iş günlerinde belirler ve yayımlar. TCMB ayrıca bu kurların gerçek/tüzel kişiler arasındaki işlemlerde zorunlu uygulanacak transaction rate olmadığını açıkça belirtir. Bu nedenle “TCMB kuru = booking conversion kuru” varsayımı yapılmamalıdır.
Currency model
Money
├─ amount
├─ currency
└─ precision
FxQuote
├─ baseCurrency
├─ quoteCurrency
├─ rate
├─ source
├─ quoteType
├─ observedAt
└─ validUntilConvertedPrice ayrıca originalAmount ve appliedFxQuoteId taşımalıdır.
Source-of-truth
Supplier EUR fiyat gönderiyor ve OTA TRY satıyorsa üç ayrı değer vardır:
- supplier source amount,
- conversion quote,
- displayed/charged TRY amount.
Bu değerleri overwrite ederek tek amount alanında tutmak reconciliation'ı bozar.
Rounding
Rounding mümkün olduğunca final display/settlement boundary'sinde yapılmalıdır. Her component'i ayrı round edip sonra toplamak ile toplamı convert edip bir kez round etmek farklı sonuç üretebilir.
Örnek:
Hotel net EUR
+ tax EUR
+ fee EUR
→ total EUR
→ FX conversion
→ TRY roundingBu order explicit olmalıdır.
Freshness
FX TTL ile hotel/flight price TTL aynı değildir. Supplier offer 10 dakika valid olabilirken FX quote daha kısa veya daha uzun policy taşıyabilir. Booking/reprice aşamasında hangi ikisinin yeniden doğrulanacağı ayrı karar olmalıdır.
Parity ve comparison
İki provider farklı FX policy kullanıyorsa converted TRY price farkı gerçek rate parity ihlali olmayabilir. Mümkünse comparison önce source currency'de veya ortak timestamp'teki controlled FX ile yapılmalıdır.
Failure mode'lar
- stale FX,
- wrong currency pair direction,
- buy/sell rate confusion,
- decimal precision kaybı,
- component-level cumulative rounding,
- weekend/holiday quote reuse,
- booking reprice sırasında new FX'in old offer ile birleşmesi,
- display currency ile settlement currency'nin karıştırılması.
Observability
Track:
- FX age,
- conversion delta,
- source-vs-display currency,
- booking-time FX delta,
- rounding delta,
- provider-specific currency mismatch,
- failed/unsupported currency pair.
Production checklist
- Original currency ve amount korunuyor mu?
- FX quote source/timestamp saklanıyor mu?
- Pair direction explicit mi?
- Rounding policy versioned mı?
- Display ve settlement currency ayrı mı?
- Weekend/holiday behavior belli mi?
- Reprice FX policy tanımlı mı?
- Parity controlled FX ile tekrar üretilebiliyor mu?
Bu problemi production’da mı yaşıyorsunuz?
Semptomu, veri akışını ve entegrasyon davranışını birlikte teknik olarak inceleyebiliriz.