Skip to Content

Ekranlar

Her ekranın ne gösterdiği, hangi etkileşimlerin çalıştığı ve gerçek veriye geçmek için hangi işi beklediği aşağıda. Ekranların hepsi fixture verisiyle çalışır. Client ekranlarda yapılan değişiklikler yalnızca o oturumda görünür, sayfa yenilenince kaybolur.

Aşağıda “yalnızca arayüz” diye işaretlenen düğmeler state’i değiştirmez: ya diyaloğu kapatır ya da hiçbir şey yapmaz. Bu düğmeler tasarımı tamamlamak için yerinde duruyor; gerçek işlem backend’e bağlandığında eklenecek.

Her ekranın altındaki Jira satırı, ekranın arayüz işini ve gerçek veriye geçişi bekleten işleri gösterir. Toplu liste için bkz. Veri ve entegrasyon.


Panel — /panel (Server)

Günün özetini gösterir:

  • KPI satırı: bugünkü ciro (dünün aynı saatiyle birlikte), kişi sayısı ve kişi başı tutar, açık masa ve açık adisyon sayısı, son senkron zamanı ve kuyruktaki kayıt sayısı.
  • Saat bazlı ciro grafiği (içinde bulunulan saat accent renkte), kategori kırılımı, ödeme dağılımı çubuğu.
  • Şu an açık masalar tablosu.
  • Son 4 hata (tümü → /errors) ve son 6 personel hareketi.

Etkileşim yok. Başlıktaki tarih (10 Eylül 2026) sabittir, bugünün tarihi değildir.

Jira: SCRUM-186 (ekran). Rakamların kaynağı olacak raporlama işi henüz tanımlanmadı.

Menü Yönetimi — /menu (Client)

Solda kategori listesi, sağda ürün tablosu (sayfa başına 25 ürün).

  • Kategoriler: filtreleme, yeni kategori ekleme (varsayılan istasyon Mutfak, KDV %10) ve silme. Bir kategoriyi silmek o kategorideki tüm ürünleri de onay istemeden siler.
  • Kategori KDV oranı: bir kategori seçiliyken %1 / %10 / %20 arasından değiştirilir. Kendi oranı olmayan ürünler bu oranı kullanır.
  • Filtreler: ürün adı araması (Türkçe büyük/küçük harf duyarlı karşılaştırma), istasyon (Mutfak, Izgara, Bar, Pastane).
  • “N üründe içerik eksik” uyarısı: açıklaması veya içindekiler listesi boş olan ürünleri sayar.
  • Ürün düzenleyici (diyalog): ad, kategori, istasyon, fiyat, KDV oranı (kategori varsayılanı veya ürüne özel), açıklama, içindekiler, alerjenler (14 AB alerjeni), oto-ateşle, satışta, hazır notlar.
    • Doğrulama: ad boş olamaz, fiyat sıfırdan büyük olmalı.
    • Fiyatlar KDV dahildir. Düzenleyici KDV matrahını fiyat / (1 + oran/100) olarak gösterir.
    • Hazır notlar garson ekranında çip olarak görünür (SCRUM-69/70); sıra, buradaki sıradır. Aynı not iki kez eklenemez.
  • Ürün silme onaysızdır.

Jira: SCRUM-35 (menü CRUD ekranları), SCRUM-135 (menü değişikliklerinin Supabase → yerel Postgres senkron akışı), SCRUM-40 (yapay zekâ ile ürün açıklaması ve alerjen içeriği).

Stok — /stock (Client)

  • KPI satırı: stok değeri (miktar × son alım maliyeti), kritik malzeme sayısı, tükenen malzeme sayısı, bugünkü zayi tutarı, son sayım.
  • Minimum seviyenin altında malzeme varsa accent renkli uyarı şeridi.
  • Filtreler: malzeme adı, depo (Mutfak, Bar, Pastane, Depo), durum.
  • Durum kuralı (stockStatus): miktar ≤ 0 → Tükendi, miktar < minimum → Kritik, aksi halde Yeterli. Seviye çubuğu minimumun iki katını %100 kabul eder.
  • Son hareketler listesi.
  • Hareket / Sayım diyaloğu: Giriş, Çıkış, Zayi, Sayım tiplerinden birini seçtirir. “Kaydet” yalnızca arayüz; stok miktarı değişmez ve hareket eklenmez, çünkü stok verisi bu ekranda state’e alınmadı.

Jira: SCRUM-187 (ekran). Stok verisinin backend / veritabanı tarafı henüz tanımlanmadı.

Cihazlar — /devices (Client)

  • Kayıt istekleri: ağda açılıp backend’e kendini bildiren ama henüz onaylanmamış cihazlar.
    • Eşleştir diyaloğu cihaz adını, uygulama rolünü ve role özgü temel ayarları sorar. Onaylanınca cihaz listeye “online” olarak eklenir ve istek kaldırılır.
    • Reddet isteği listeden kaldırır.
  • Kayıtlı cihazlar: uygulama rolüne göre filtrelenir; her satırda rolün yapılandırma özeti (_lib/device-summary.ts) görünür.
    • Yapılandır diyaloğu rolü ve tüm ayarları düzenler. Rol değiştirmek ayarları o rolün varsayılanlarına döndürür.
    • Kaydı sil onaysızdır.

Role göre ayarlar:

RolAyarlar
POSKasa adı, fiş yazıcısı (kayıtlı yazıcılardan), gün sonu yetkisi
GarsonMasa bölgesi (Salon, Bahçe, Teras, Tümü), istasyona ateşleme yetkisi
KDSİstasyon, yeni sipariş sesi, hazır işaretleme (Satır / Adisyon bazlı)
Yazıcıİstasyon (Kasa = fiş yazıcısı), kağıt (58 / 80 mm), kopya sayısı

“Test fişi yazdır” yalnızca arayüz.

Jira: SCRUM-188 (ekran). Cihazların kendini tanıttığı X-Device-Id / X-App-Role başlıkları istemci tarafında SCRUM-114 kapsamında.

Uygulama Yönetimi — /apps (Server)

Her uygulama rolü (POS, Garson, KDS, Yazıcı) için bir kart: sürüm, rolün kısa açıklaması, cihaz sayısı ve çevrimiçi cihaz sayısı, o rolü çalıştıran cihazlar ve yapılandırma özetleri. Gruplama DEVICES’tan türetilir; ayrı saklanmaz, bu yüzden cihazlar ekranıyla çelişemez. “Cihazları yönet” yalnızca arayüz.

Jira: SCRUM-189 (ekran).

Restoran Ayarları — /settings (Client)

Elle SQL UPDATE çalıştırmanın yerine geçmesi planlanan form:

  • Sipariş modu: Masa bazlı / Hızlı satış
  • Servis bedeli (%), KDV (%), masa sayısı
  • Gün sonu saati
  • Adisyon kapanışında fişi otomatik yazdır; mutfak ekranında yeni sipariş sesi

Form, fixture değerlerinden farklılaşınca “Kaydedilmemiş değişiklik var” yazar. “Değişiklikleri geri al” formu sıfırlar. “Ayarları Kaydet” yalnızca arayüz.

Jira: SCRUM-36 (ekran), SCRUM-136 (restaurant_settings okuma/yazma server action’ı, Supabase), SCRUM-37 (bu tür tekil tabloların tenant bazında ayrılması). Kaydedilen değişiklik bir sonraki senkronizasyonda restorandaki yerel Postgres’e inecek.

Personel & Roller — /staff (Client)

  • Personel tablosu: ad, rol, PIN, son giriş, durum.
  • Pasifleştir / Aktifleştir ve Sil (onaysız).
  • Personel Ekle diyaloğu: ad soyad, rol (Garson, Kasa, Mutfak, Yönetici), PIN. Doğrulama: ad boş olamaz, PIN tam 4 rakam olmalı ve başka bir personelde kullanılmıyor olmalı.

PIN’ler tabloda açık metin olarak görünür. Bu, tasarımı yansıtıyor; PIN’ler gerçek veriye bağlanırken gösterilip gösterilmeyeceği ayrıca karara bağlanmalı.

Jira: SCRUM-190 (ekran). Veri tarafı SCRUM-44 altında tamamlandı: SCRUM-176 (employees tablosu) ve SCRUM-183 (backend’de PIN ile giriş ve oturum doğrulama). Ekranın bunlara bağlanması henüz yapılmadı.

Senkronizasyon — /sync (Client)

  • Buluta son gönderim (yerel → Supabase), yerele son iniş (Supabase → yerel Postgres) ve kuyruktaki değişiklik sayısı.
  • Değişiklikleri Şimdi Gönder: 900 ms sonra kuyruğu sıfırlayıp zamanları “az önce” yapar. Bu bir simülasyondur; hiçbir şey gönderilmez.
  • Senkron çalıştırma geçmişi: yön, kapsam, kayıt sayısı, süre, sonuç.

Normal akışta yerel Postgres değişiklikleri polling ile çeker; elle tetikleme acil durumlar içindir.

Jira: SCRUM-191 (ekran), SCRUM-135 (menü senkron akışı), SCRUM-142 (senkron katmanında tenant_id taşınması).

Hata Kayıtları — /errors (Client)

Backend’in error_logs tablosunun salt okunur görünümü.

  • Arama: yol, mesaj veya request id içinde.
  • SQLSTATE koduna göre filtre.
  • Satıra tıklayınca detay diyaloğu: zaman, SQLSTATE, request id, mesaj, stack.

Request id öne çıkarılmıştır; kullanıcının bildirdiği bir hata id ile bulunabilir. Stack alanı fixture’da yoldan uydurulur, gerçek bir stack değildir. Ekrandaki “saklama süresi 45 gün” ifadesi sabit metindir.

Jira: SCRUM-192 (ekran), SCRUM-177 (error_logs’a doğru kayıt yazılması ve hataların kullanıcıya yansıtılması).

Denetim Kaydı — /audit (Client)

Kim neyi, hangi kaynaktan (Garson uygulaması, Kasa, Mutfak ekranı, Yönetim paneli, Zamanlanmış görev) değiştirdi. Kullanıcıya göre filtrelenir.

Jira: SCRUM-193 (ekran), SCRUM-46 (sipariş işlemlerinin denetim kaydı: kim neyi ateşledi, neyi değiştirdi). Panelde yapılan değişikliklerin denetim kaydına nasıl yazılacağı henüz tanımlanmadı.

e-Belge · GİB — /fiscal (Client)

  • Mükellef, entegratör, ÖKC ve günlük e-Arşiv raporu durum kartları. “Raporu GİB’e gönder” yalnızca etiketi “iletildi” yapar.
  • Reddedilen veya kuyrukta bekleyen belge varsa uyarı şeridi (reddedilenler 8 gün içinde düzeltilip yeniden gönderilmelidir).
  • Belge tablosu: tip (e-Arşiv Fatura, e-Fatura, ÖKC Fiş, e-Arşiv İade) ve durum (Gönderildi, Kuyrukta, Hata, İptal) filtreleri.
  • Detay diyaloğu: belge bilgileri ve GİB / entegratör yanıtı. “Yeniden Gönder” (Hata durumunda) ve “Belgeyi İptal Et” (Gönderildi durumunda) yalnızca arayüz.
  • Adisyondan Fatura Kes diyaloğu: açık bir adisyon, belge tipi, bireysel / kurumsal müşteri bilgileri. Oluşturma yalnızca arayüz.

Mali belgeler hukuki sonuç doğurduğu için bu ekran bilerek hiçbir şey iletmez.

Jira: SCRUM-194 (ekran). GİB / entegratör entegrasyonu bu issue’nun bilerek dışında bırakıldı ve henüz planlanmadı.

Abonelik — /billing (Client)

  • Mevcut plan, durum, sonraki tahsilat tarihi ve tutarı.
  • Aylık / Yıllık geçişi. Yıllık fiyat 10 aylık tutardır (cyclePrice, “2 ay bedava”).
  • Otomatik yenileme aç/kapa.
  • Kullanım çubukları: cihaz (DEVICES sayısı), personel hesabı (STAFF sayısı) ve şube (sabit 1), planın limitlerine (PLAN_LIMITS) göre. Limit dolunca çubuk accent renge döner.
  • Plan kartları (Başlangıç, Profesyonel, Zincir). Seçilince plan değişir; mevcut plan düğmesi devre dışıdır.
  • Faturalar tablosu. Kart “Değiştir” ve fatura satırındaki “PDF” düğmeleri yalnızca arayüz.

Kullanım çubukları fixture’ların kendisinden sayar; cihazlar veya personel ekranında eklenen kayıtlar buraya yansımaz, çünkü o ekranların state’i kendi içindedir.

Jira: SCRUM-195 (ekran). Ödeme sağlayıcısı entegrasyonu henüz tanımlanmadı.

Lisans — /license (Client)

Bir restoran için lisans hazırlama, dönen lisansı doğrulama ve doğrulananları listeleme ekranı. Üç bölümden oluşur.

  • Lisans Talebi. Restoran adı, makine kodu ve son gün girilir; ekran çalıştırılacak adisyon-license issue komutunu birebir yazar ve kopyalatır. Makine kodu kişinin kasadan kopyaladığı gibi (küçük harf, boşluk, tire) kabul edilip kanonik hale getirilir. Komut bizim seçmediğimiz bir terminale yapıştırıldığı için ", `, $, \ ya da satır sonu taşıyan bir restoran adı kaçırılmaz, reddedilir; anahtar yolu ise ters bölüyü korur (C:\keys\private.key). Son gün gerçek bir takvim günü olmalıdır — 2026-02-30 biçim olarak geçerlidir ama 2 Mart’a kaydığı için reddedilir.
  • Lisansı Doğrula. Lisans metni yapıştırılır; ekran POST /api/license/verify ile sunucuya sorar ve dönen cümleleri gösterir: lisans sahibi, makine kodu, son geçerli gün ve kalan gün. Bkz. Lisans doğrulama endpoint’i.
  • Doğrulanan Lisanslar. Doğrulanmış lisanslar listelenir; satırdan lisans metni kopyalanabilir veya kayıt silinebilir.

Ekranın üstündeki şerit hangi anahtarla çalışıldığını söyler: geliştirme anahtarı kullanılıyorsa uyarır, sunucudaki anahtar bozuksa doğrulamanın kapalı olduğunu bildirir. Geliştirme lisansı üretim sanılmasın diye.

Panel lisans üretmez. İmzalayan tek şey, private key’in durduğu makinedeki adisyon-license aracıdır; panelde açık anahtar vardır ve açık anahtar imza üretemez.

Doğrulanan lisans listesi tarayıcıda tutulur (localStorage, adisyon.licenses.v1), en çok 200 kayıt, lisans id’siyle tekil — aynı lisansı iki kez doğrulamak tek satır bırakır. Bu bir izin değildir: kayıt lisansı geçerli yapmaz, kaydı silmek lisansı iptal etmez. Depodan okunan her kayıt yeniden denetlenir, tanınmayan atılır. Kalıcı kayıt panelin veritabanı geldiğinde.

Jira: SCRUM-234 (ekran), SCRUM-228 / SCRUM-229 (lisans biçimi ve üretici araç), SCRUM-232 (kasadaki Lisans ekranı).

Oturum aç — /login (Server sayfa, Client form)

Kabuk dışında, iki sütunlu giriş ekranı. “Oturum Aç” e-posta + şifre ile, “Sihirli bağlantı gönder” e-postaya bağlantı ile Supabase Auth oturumu açar. Başarılı girişte proxy’nin getirdiği next adresine (yoksa /panel) gider. Bkz. Rotalar ve kabuk.

Last updated on