Problem
Çok şubeli perakende ve restoran işletmelerinde tekrar eden bir tablo var: her şube kendi başına çalışır.
Fiyat değişikliği merkezden telefonla duyurulur, bir şube uygular biri unutur. Kampanya farklı şubelerde farklı yorumlanır. Gün sonu raporları akşam kapanışta ayrı ayrı alınır, merkeze ertesi gün ulaşır. Ay sonunda ciro rakamı üç farklı yerde üç farklı çıkar ve hangisinin doğru olduğu tartışılır.
Bu bir yazılım eksikliği gibi görünür ama aslında tek doğru kaynak eksikliğidir. Hangi verinin sahibi hangi sistem, bu tanım yapılmadan kurulan hiçbir kasa yazılımı sorunu çözmez.
Yaklaşım
Önce sahiplik tanımı
Kod yazmadan önce her veri için sahip belirledik: ürün ve fiyatın sahibi merkez, satış hareketinin sahibi şube, stok düşümünün sahibi satış işlemi. Bu tanım netleşince mimari kendiliğinden ortaya çıktı, fiyat merkezden şubeye, satış şubeden merkeze akar; ters yön yok.
Bu adım atlandığında iki sistemin birbirinin verisini ezmesiyle sonuçlanan klasik hataya düşülür.
Kasa çevrimdışı da satmalı
Kasa, internetin kesildiği anda satışı durduramaz. Şube tarafı yerel olarak çalışır ve merkeze eşitlenir. Bağlantı yokken satış devam eder, geldiğinde hareketler merkeze aktarılır. Perakende için bu bir özellik değil, asgari şarttır.
Kasiyerin ekranı sade kalmalı
Kasada geçen her fazladan saniye, sıradaki müşteriye yansır. Kasiyer ekranı yalnızca satış akışını içerir; ürün tanımı, kampanya kurgusu ve raporlar arka ofis tarafındadır. Yetkilendirme de buradan gelir: kasiyerin göremeyeceği ekran, kasiyerin bozamayacağı veri demektir.
Merkezi raporlama
Şube bazında ciro, ürün bazında hareket, saatlik yoğunluk ve gün sonu konsolidasyonu merkezde tek ekranda toplanır. Muhasebe tarafına aktarım entegrasyon katmanı üzerinden yürür; başarısız aktarım kuyruğa alınır ve tekrar denenir.
Teknik kurgu
- Arka ofis paneli: Vue.js + TypeScript
- Sunucu: Node.js servisleri, Docker ile dağıtım
- Veri: MySQL, finansal hareket kaydında ilişkisel tutarlılık
- Önbellek ve kuyruk: Redis, fiyat dağıtımı ve eşitleme kuyruğu
- Dağıtım: şube başına yerel çalışma, merkeze eşitleme
Öğrenilenler
Fiyat yönetimi asıl işin kendisi. Kasa yazılımı denince akla satış ekranı gelir; işletmeyi asıl yoran taraf fiyat, kampanya ve şubeye dağıtım kurallarıdır.
Gün sonu raporu güven meselesidir. Merkez ve şube rakamı bir kere tutmazsa, sisteme olan güven uzun süre geri gelmez. Mutabakat mantığı en baştan doğru kurulmalı.
Kademeli geçiş şart. Tüm şubeleri aynı gün geçirmek yerine tek şubede başlayıp, rakamlar tuttuktan sonra yaymak; hem riski hem eğitim yükünü belirgin şekilde azalttı.
Bu vaka analizi, sistemin kurgusunu ve alınan teknik kararları anlatır. Proje bazlı ölçülmüş sonuçlar ve müşteri referansları için doğrudan iletişime geçebilirsiniz.
Kullanılan teknolojiler
- Vue.js
- Node.js
- MySQL
- Redis
- Docker