Müşterinden gelen o mesajı biliyorsun: "Ürün sayfasında 189 TL yazıyordu, sepete ekledim 204 TL oldu." İlk tepkin muhtemelen panik olur, ardından "script bozuk" diye düşünürsün. Çoğu işletme sahibi bu noktada geliştiriciye "fiyat hatası var" diye yazar. Oysa neredeyse hiçbir zaman ortada bir hata yoktur. Sistem iki farklı fiyat gösteriyorsa, iki farklı fiyatı iki farklı zamanda ve iki farklı kuralla hesaplamıştır. Yani teknik olarak ikisi de doğrudur; yanlış olan tek şey, müşterinin ikisini aynı anda görmesidir.
Bu ayrım kritik, çünkü çözüm yolunu tamamen değiştirir. "Hata" arayan biri kodun içinde saatlerce dolaşır ve bir şey bulamaz. Fiyatın nerede dondurulduğunu arayan biri ise yarım saatte kaynağı bulur. Bir dijital ürün satış scriptinde fiyat, ürün kaydından müşterinin ekranına gelene kadar en az yedi noktada kopyalanır, önbelleğe alınır, çevrilir ve yuvarlanır. Bu yazıda o yedi noktayı sırayla açıp, hangi belirtinin hangi katmanı işaret ettiğini ve fiyatı tek kaynaktan okutan mimarinin nasıl kurulduğunu anlatacağım.
İki Fiyat Aynı Anda Nasıl Doğru Olabilir?
Fiyat tek bir sayı değil, bir hesaplama sonucudur. Girdileri şunlar: temel fiyat, bayi/üyelik seviyesi, aktif kampanya, kupon, kur, vergi ve yuvarlama kuralı. Bu girdilerden biri ürün sayfasında bilinmiyorsa (mesela müşteri henüz giriş yapmamışsa) sistem elindeki bilgiyle bir sonuç üretir. Sepette ise girdi seti tamamlanmıştır ve sonuç değişir.
İşin özü şu: ürün sayfası vitrin fiyatıdır, sepet ise bağlayıcı fiyattır. İkisi arasında bilgi farkı olduğu sürece sayı farkı da olur. Dolayısıyla hedefin "iki fiyatı eşitlemek" değil, vitrin fiyatının hangi varsayımla hesaplandığını müşteriye açıkça söylemek ya da vitrinde de tam girdi setini kullanmak olmalı.
Bunu kavradığın an teşhis basitleşir. Müşteri giriş yapmadan farklı, yaptıktan sonra farklı görüyorsa sorun üyelik seviyesindedir. Herkes aynı ürün sayfasında farklı görüyorsa sorun önbellektedir. Sadece belirli ürünlerde oluyorsa sorun kur veya vergi tanımındadır. Belirtiyi doğru okumak, aranacak katmanı yarıya indirir.
Önbellek Katmanları: Fiyatın Dondurulduğu Yedi Nokta
Fiyat, veritabanından tarayıcıya giderken şu duraklardan geçer ve her durakta donabilir: veritabanı sorgu önbelleği, uygulama içi nesne önbelleği, oluşturulmuş HTML parçası önbelleği, tam sayfa önbelleği, içerik dağıtım ağı önbelleği, tarayıcı önbelleği ve son olarak arama motorunun sakladığı eski kopya.
En sık yaşanan senaryo şu: fiyatı panelden güncellersin, kendi tarayıcında doğru görürsün ama müşteri eski fiyatı görmeye devam eder. Sen doğru gördüğün için sorunu inkâr edersin. Gerçekte senin isteğin yönetici oturumu taşıdığı için önbelleği atlıyordur; müşterinin isteği ise önbellekten dönüyordur. Bu tek gerçek, sayısız "bende çalışıyor" tartışmasının arkasındadır.
Çözüm katman katman düşünmektir. Sağlam bir e-pin satış scripti fiyat güncellemesini yalnızca veritabanına yazmakla bitirmez; ilgili ürünün nesne önbelleğini, sayfa önbelleğini ve dağıtım ağı kopyasını aynı işlemde temizler. Fiyat etiketini önbelleğe hiç girmeyecek küçük bir parçaya ayırmak ise daha da temiz bir yaklaşımdır: sayfanın tamamı önbellekte kalır, sadece fiyat canlı okunur.
| Belirti | Muhtemel Katman | Doğrulama Yöntemi | Kalıcı Çözüm |
|---|---|---|---|
| Yöneticide doğru, müşteride eski | Tam sayfa veya dağıtım ağı önbelleği | Gizli sekmede aç, farklı ağdan bak | Fiyat yazımında hedefli önbellek temizliği |
| Girişten sonra fiyat düşüyor | Üyelik / bayi seviyesi kuralı | Aynı ürünü iki hesapla karşılaştır | Vitrinde seviye bilgisini not olarak göster |
| Sepette tutar artıyor | Vergi veya hizmet bedeli sonradan ekleniyor | Sepet dökümünü satır satır incele | Vitrinde vergi dahil/hariç etiketi |
| Sadece bazı ürünlerde fark | Kur çevrimi ve yuvarlama | Ürünün para birimi alanını kontrol et | Tek yuvarlama noktası ve sabit basamak |
| Gün içinde fiyat oynuyor | Otomatik kur güncellemesi | Kur kayıt geçmişine bak | Günde tek sabit kur ve kur marjı |
| Arama sonucunda eski fiyat | Dış kaynak veya ürün akışı kopyası | Akış dosyasının tarihine bak | Akışı fiyat değişiminde yeniden üret |
| Ödeme ekranında üçüncü bir tutar | Kupon ve kampanya öncelik sırası | Kuponu kaldırıp tekrar dene | Tanımlı, tek yönlü indirim sırası |
Sepete Eklerken Fiyat Neden Değişiyor?
Sepet, fiyatı yeniden hesaplamak zorundadır; bu bir kusur değil zorunluluktur. Çünkü sepette artık adet, üyelik seviyesi, kupon ve teslim yöntemi bilinir. Ama burada bir tuzak var: bazı kurulumlar fiyatı sepete kopyalar ve orada saklar. Müşteri sepeti üç gün bekletirse, sen fiyatı güncellersen, sepette hâlâ eski tutar durur.
Bu davranışın iki yönü de savunulabilir. Kopyalamak müşteriye "gördüğüm fiyattan alırım" güveni verir; her seferinde yeniden hesaplamak seni kur ve maliyet dalgalanmasına karşı korur. Doğru yaklaşım ikisini birleştirmektir: sepetteki fiyata bir geçerlilik süresi tanımla. On beş dakika ya da bir saat boyunca fiyat sabit kalsın, süre dolduğunda sepet kendini yenilesin ve müşteriye "fiyat güncellendi" bilgisi verilsin.
Bu mekanizma dijital ürün satışında özellikle önemli, çünkü e-pin yazılımı kullanan işletmelerin alış maliyeti gün içinde kurla birlikte oynar. Süresiz sabit fiyat, sana zarar ettiren siparişler üretir. Süreli sabit fiyat ise hem müşteriye güven verir hem marjını korur.
Fiyat Tutarsızlığı Şikâyetlerinin Kaynak Dağılımı
- Önbellek katmanları 38%
- Vergi ve yuvarlama 28%
- Kur çevrimi 20%
- Kampanya öncelik sırası 14%
KDV, Kur ve Yuvarlama: Üç Küsuratın Kavgası
Bu üçlü, fiyat tutarsızlıklarının en inatçı kaynağıdır çünkü hata hiç görünmez, sadece kuruş olarak sızar. Klasik senaryo: temel fiyat dövizle tutulur, kurla çevrilir, üzerine vergi eklenir ve sonuç yuvarlanır. Aynı işlemi farklı sırayla yapan iki ekran, birbirinden bir iki kuruş farklı sonuç üretir. Müşteri 204,00 ile 204,02 farkını görür ve güveni sarsılır.
Kural nettir: yuvarlama zincirin yalnızca bir noktasında yapılmalı, tercihen en sonda, gösterime hemen önce. Ara hesaplar tam hassasiyetle taşınmalı. İkinci kural: vergi dahil mi hariç mi çalışıldığı tek bir yerde tanımlanmalı ve tüm ekranlar o tanımı okumalı. Üçüncü kural: kur, istek başına değil oturum ya da gün başına sabitlenmeli; yoksa müşteri sayfayı yenilediğinde fiyat oynar.
Bir de kur marjını konuşalım. Ham piyasa kurunu doğrudan uygulamak, kur hareketli olduğunda seni her siparişte zarara sokar. Profesyonel kurulumlar kurun üzerine küçük bir tampon ekler ve bu tamponu ürün grubuna göre ayarlar. Böylece fiyat hem tutarlı hem sürdürülebilir olur.
Sitendeki her ekran fiyatı aynı tek hesaplama fonksiyonundan istemeli. Ürün kartı, ürün sayfası, sepet, ödeme, fatura ve ürün akışı; altısı da aynı yeri çağırıyorsa iki farklı fiyat matematiksel olarak imkânsız hale gelir.
Bayi, Kupon ve Kampanya Öncelik Sırası Kimde?
Üç indirim mekanizması aynı sepette çakıştığında ne olacağı çoğu kurulumda hiç tanımlanmamıştır. Bayi seviyesi %10 indirim veriyor, kampanya %15 veriyor, kuponun %20. Bunlar toplanır mı, en yükseği mi geçerli olur, üst üste mi uygulanır? Cevabı sistem rastgele belirliyorsa, fiyat gerçekten de ekrandan ekrana değişir.
Sağlam bir yaklaşım şudur: indirimleri bir sıraya diz, her birinin hangi tutar üzerinden hesaplandığını sabitle ve toplam indirim için bir üst sınır koy. Örneğin bayi indirimi liste fiyatı üzerinden, kampanya bayi sonrası tutar üzerinden, kupon en son ve toplam indirim asla %35'i geçmeyecek. Bu tanım yazılı olduğu an tutarsızlık biter.
Bir dijital ürün satış yazılımı seçerken bu sırayı panelden görebilip görebilmediğine bak. Sıra kodun içine gömülüyse her kampanyada geliştiriciye muhtaç olursun. Panelden tanımlanabiliyorsa, kampanya kurmak pazarlama işine döner ve yanlış hesaplanan sepet riski ortadan kalkar.
Fiyatı Tek Kaynaktan Okutan Mimari
Bütün bu anlattıklarımın tek bir mimari sonucu var: fiyat, sistemde bir tek yerde hesaplanmalı ve her ekran o yeri çağırmalı. Buna tek doğruluk kaynağı diyoruz. Uygulanması zor değil, sadece disiplin ister. Fiyat fonksiyonu girdi olarak ürün, müşteri ve bağlamı alır; çıktı olarak liste fiyatı, indirim dökümü, vergi ve nihai tutarı ayrı ayrı döner.
Bu yapının yan faydası şeffaflıktır. Müşteriye "189 TL" değil, "liste 229 TL, bayi indirimi -23 TL, kampanya -17 TL, vergi dahil 189 TL" gösterebilirsin. Şeffaf döküm, fiyat şikâyetlerini neredeyse tamamen bitirir çünkü müşteri farkı kendi gözüyle görür ve sorgulayacak bir şey kalmaz.
Aşağıdaki listeyi kendi kurulumunda yürüt. Her satır için "evet" diyemiyorsan, o satır bugün ya da yarın sana bir destek bileti olarak geri dönecek.
| Kontrol Maddesi | Amaç | Öncelik |
|---|---|---|
| Tüm ekranlar tek fiyat fonksiyonunu çağırıyor | Tutarsızlığı yapısal olarak imkânsız kılar | Kritik |
| Yuvarlama yalnızca son adımda yapılıyor | Kuruş sapmalarını sıfırlar | Kritik |
| Fiyat yazımında hedefli önbellek temizliği var | Eski fiyat gösterimini bitirir | Kritik |
| Sepet fiyatının geçerlilik süresi tanımlı | Kur dalgalanmasında marjı korur | Yüksek |
| İndirim öncelik sırası panelden yönetiliyor | Kampanyayı geliştiriciden bağımsızlaştırır | Yüksek |
| Vergi dahil/hariç tanımı tek noktada | Ekranlar arası fark yaratmaz | Yüksek |
| Kur günde bir sabitleniyor ve marjı var | Fiyat oynamasını ve zararı keser | Yüksek |
| Sepette şeffaf indirim dökümü gösteriliyor | Şikâyeti kaynağında bitirir | Orta |
| Ürün akışları fiyat değişiminde yenileniyor | Dış kaynaklarda eski fiyat kalmaz | Orta |
Fiyatın tek kaynaktan akan bir altyapıya geç
Tek hesaplama noktası, hedefli önbellek temizliği, süreli sepet fiyatı ve panelden yönetilen indirim sırası; kurulumdan itibaren hazır.
Müşteri düşük fiyatı gördüğünü söylerse o fiyattan satmak zorunda mıyım?
Bağlayıcı olan sepet ve ödeme ekranındaki tutardır, ama ticari olarak kısa vadede farkı kapatıp müşteriyi kazanmak genellikle daha kârlıdır. Kalıcı çözüm, vitrin fiyatının yanına hangi varsayımla hesaplandığını yazmaktır.
Önbelleği tamamen kapatmak sorunu çözer mi?
Çözer ama sana çok pahalıya gelir; sayfa hızın düşer ve sunucu maliyetin artar. Doğru yol önbelleği açık tutup fiyat etiketini önbellek dışına almak veya fiyat değişiminde yalnızca ilgili kopyaları temizlemektir.
Kuru otomatik mi çekmeliyim, elle mi girmeliyim?
Otomatik çek ama günde bir kez sabitle ve üzerine kur marjı ekle. Her istekte anlık kur kullanmak fiyatı oynatır, müşteri güvenini bozar ve kur düşüşünde seni zarara sokar.
Fiyat dökümünü müşteriye göstermek indirimleri açık etmez mi?
Etmez, aksine dönüşümü artırır. Müşteri ne kadar kazandığını rakamla görür ve karar süresi kısalır. Alış maliyetini değil indirim kalemlerini gösterdiğin için ticari bir risk de doğmaz.
Özetle: iki farklı fiyat bir hata değil, mimari bir eksikliğin belirtisidir. Fiyatı tek yerden hesaplayan, yuvarlamayı tek noktada yapan, önbelleği hedefli temizleyen ve indirim sırasını panelden yöneten bir kurulumda bu şikâyet hiç doğmaz. Bu akışın gerçek bir vitrinde nasıl davrandığını, sepet dökümünün nasıl şeffaflaştığını ve kur marjının nereden ayarlandığını görmek için canlı demo üzerinden bir sipariş denemesi yap; ardından özelliklere ve paket seçeneklerine bakıp kendi ürün yapına uyan kurguyu seç.

