Bakkal Kasa
Mahalle bakkalı için çevrimdışı kasa, stok ve veresiye. Sunucu yok, abonelik yok.
Bu nasıl ölçüldü: Test sayısı vitest çıktısından, tablolar migration dosyalarından, satır sayısı izlenen kaynak dosyalarda wc ile alındı.
- WINDOW
- kasa ekranıReact + Vite
- PIN kilidiscrypt
- MAIN
- Electron main
- fiş şablonu
- LEDGER
- stok defterisatır, sayaç değil
- FILE
- SQLiteWAL · 18 tablo
Problem
Mahalle bakkalı abonelikle çalışmıyor. İnternet kesildiğinde kasa çalışmaya devam etmeli, gün sonunda yazdırılabilir Z raporu çıkmalı. Asıl muhasebe de veresiye defteri: kimin ne kadar borcu var, ne zamandan beri.
Baktığım bulut kasa programlarının hepsi bağlantı ve aylık ücret varsayıyordu. Bu ikisini de varsaymıyor.
Kısıtlar
- Tamamen çevrimdışı: API yok, hesap yok, telemetri yok.
- Tek makine, tek kullanıcı: 4-8 haneli PIN, scrypt ile saklanır; iki dakika hareketsizlikte kasa kilitlenir.
- Veri tek bir SQLite dosyasında, işletim sisteminin kullanıcı dizininde, WAL modunda.
Mimari kararlar
SQLite tek doğru kaynak, önbellek değil
Kasa aynı dosyaya yazıyor, raporlar aynı dosyadan okuyor. Arada senkron katmanı olmadığı için mutabakat hatası da olmuyor. Karşılığında ikinci kasa yok; bu bilinçli bir tercih.
Bedeli: İkinci terminal için yazma yolunun yeniden tasarlanması gerekir.
Stok sayaç değil, defter
Alış, satış ve elle düzeltme birer satır; eldeki miktar bunlardan hesaplanıyor. Sayaç alanı, biri fiş iptal ettiği ilk gün kayıyor.
Bedeli: Her stok sorgusu toplama yapıyor; indeks ve mutabakat kontrolüyle dengelendi.
Fiş ekran görüntüsü değil, şablon
Z raporu ve müşteri fişi kâğıt genişliğini bilen bir şablondan üretiliyor; 58 mm ve 80 mm yazıcı aynı kodla çıkıyor.
Bedeli: Print CSS yerine küçük bir yerleşim motoru yazıldı.
Gerçek Electron penceresine dört duman testi
Birim testleri defteri kapsıyor; CDP ile açılan gerçek pencerede kasa, stok, veresiye ve kasa kapanışı tıklanarak deneniyor.
Bedeli: CI yavaşlıyor; karşılığında asıl korkulan arıza yakalanıyor: bozuk pencere.
Kanıt
- Birim testi233 (31 dosya)
- Şema tablosu18
- Duman testi4 (kasa, stok, veresiye, Z raporu)
- Kaynak dosya150
Bilinen sınırlar
- Windows paketleme ile yedek/geri yükleme bitmedi; uygulama bugün kaynaktan çalışıyor.
- Gerçek bir bakkal bir ay kullanmadı; bu vakada saha verisi yok.
- Tek terminal için tasarlandı; senkronizasyon kapsam dışı, unutulmuş değil.
Ne öğrendim
Çevrimdışı bir özellik anahtarı değil. Sunucuyu kaldırdığınızda kimlik, zaman ve çakışma varsayımları yerel birer probleme dönüşüyor: PIN, saat ve dosya kilidi mimarinin parçası oluyor.