Sıcak para takibinden AI destekli raporlamaya, restoranınızın tüm finansal operasyonlarını tek bir modern platformdan yönetin.
Bu proje, restoranlar için özel olarak tasarlanmış, modern ve güvenli bir SaaS (Hizmet Olarak Yazılım) platformudur. Temel amacı, restoranların karmaşık ve hızlı günlük finansal operasyonlarını basitleştirmek, otomatize etmek ve yönetilebilir hale getirmektir.
Sıcak para (nakit, kart, online) giriş-çıkış takibi, günlük "Gün Sonu" işlemleri ve temel ön muhasebe operasyonları üzerine kuruludur.
Tüm altyapı, en başından itibaren güçlü bir API üzerine inşa edilecek, bu da ileride iOS ve Android mobil uygulamaların kolayca entegre edilmesine olanak tanıyacaktır.
Sistem, "Multi-Tenant" (Çok Kiracılı) bir mimari üzerine kuruludur. Her restoran (User) kendi izole veritabanı veya şeması içinde çalışır. Ana kullanıcı (User) kendi personelini (Alt-User) ekler ve yetkilendirir.
Sistemin genel yöneticisi. Paketleri, kullanıcıları ve genel ayarları yönetir.
Ana kullanıcı (tenant). Paketi satın alan, personeli ekleyen ve tüm verilere sahip olan ana karakter.
Restoran sahibinin yetkilendirdiği çalışanlar. Sadece yetkileri dahilindeki menüleri görür ve işlem yapar.
Tüm veritabanı sorguları (query) mutlaka `user_id` (tenant ID) bazlı olmalıdır. Bir `Alt-User` giriş yaptığında, onun `user_id`'si (bağlı olduğu restoran sahibi) üzerinden veri çekilmelidir. `spatie/laravel-permission` paketi, `Alt-User`'ların sadece belirli işlemleri (`view`, `edit`) yapmasını sağlarken, bizim mimarimiz onların sadece kendi restoranlarının verisini görmesini garanti etmelidir.
Kullanıcı (Restoran Sahibi) sisteme üye olur, Iyzico üzerinden ödemesini yapar ve ardından bu 3 adımlı kurulum sihirbazı ile temel ayarlarını tamamlar. Bu adımlar, sistemin o restorana özel nasıl çalışacağını belirler.
"Gün Sonu" ve "Anasayfa" ekranlarınızda görmek istediğiniz ciro kalemlerini seçin. (Daha sonra ayarlardan değiştirebilirsiniz.)
Diğer kaynaklar (Edenred, Metropol, Paye, Multinet vb.) ayarlar sayfasından eklenebilir.
Bu sihirbazda seçilen tüm veriler (Giriş kalemleri, Ortaklar, Çıkış kalemleri) `users` veya ilgili `settings` tablosunda (tercihen JSON olarak) saklanmalıdır.
Adım 2 (Ortaklar): "Ortak Adı" ve "Hisse Payı (%)" alanlarını alıp bir JSON dizisi olarak kaydetmeli (`[{"name": "Ahmet", "share": 50}, {"name": "Mehmet", "share": 50}]`).
Adım 3 (Çıkış Kalemleri): Seçilen kalemler (Personel, Kasa, Banka, Ortaklar vb.) `users` tablosundaki `default_expense_categories` gibi bir alanda saklanmalıdır. Bu ayarlar, "Ayarlar" sayfasından daha sonra detaylıca yönetilebilir.
Gelişmiş ve kişiselleştirilebilir widget'lar ile o günün anlık (POS ekranı gibi) verilerini gösterir. Kurulum sihirbazında seçilen kalemler (Nakit, Yemek Sepeti vb.) burada varsayılan olarak görünür. Kullanıcı bu widget'ları sürükle-bırak ile yeniden dizebilmelidir.
Sistemin kalbi. 3 ana bölüm (Girişler, Çıkışlar, Fark) ve "Kapatma" işleminden oluşur. Gün sonu ekranı, o günün tüm finansal hareketinin özetlendiği ve kapatıldığı yerdir.
Sihirbazda seçilen (veya sonradan eklenen) ciro kalemleri (Nakit, KK, Yemek Sepeti vb.) listelenir. Yanlarındaki +/- butonları ile anlık (modal) veri girişi/düşüşü yapılır. Veri anlık güncellenir (sayfa yenilemesiz).
Adım 3'te seçilen kalemler (Ortaklar, Kasa, Banka vb.) listelenir. Ayrıca, "Giderler" menüsünden girilen ve o gün "Onaylanan" tüm nakit harcamalar buraya otomatik olarak düşer.
Girişler (Ciro) ve Çıkışlar (Onaylı Giderler + Transferler) arasındaki farkı gösterir. "Sistem Cirosu" parametresi esnek olacak şekilde tasarlanmalıdır.
1. Kapatma İşlemi: Butona tıklandığında modern bir modal açılır, günün özetini (Giriş, Çıkış, Fark) gösterir. Onaylanırsa, o günün kasası "Kilitli" duruma getirilir.
2. Bildirim: Kapatma onayı ile birlikte, ana 'User' kullanıcısının ayarlarda seçtiği kanallara (SMS, Mail, WhatsApp) bildirim göndermek için bir "Queued Job" (Sıralı İş) tetiklenir.
3. Geçmişe Dönük İşlem: Yetkisi olan (bkz. Yetkilendirme) kullanıcı, geçmiş bir tarihi seçip "Kasayı Aç" butonuna basar. İşlemini yapar ve kasayı tekrar "Kapatır". Her "açma" ve "kapatma" işlemi detaylıca loglanır.
Tüm gider işlemleri bir onay mekanizmasına tabidir. Yetkili kullanıcı ("Onaylama" yetkisi olan) onaylayana kadar gider "Askıda" kalır. Askıdaki ve reddedilen giderler "Gün Sonu" hesaplamalarına yansımaz. Sadece "Onaylanan" giderler yansır.
Ekleyen: Ahmet Yılmaz (06 Kas 2025) / Onaylayan: Ayşe Demir (07 Kas 2025)
Ekleyen: Ahmet Yılmaz (07 Kas 2025)
Ekleyen: Ahmet Yılmaz (06 Kas 2025) / Reddeden: Ayşe Demir (06 Kas 2025)
Giderler modülü bu 3 ana başlık altında veri girişi kabul edecektir:
Tedarikçilerin ve müşterilerin (carilerin) eklendiği alan. Türkiye şartlarına uygun tüm finansal bilgiler alınır.
"Giderler" gibi modüllerde bir cari seçildiğinde, o carinin anlık finansal durumunu (bakiye, son işlemler) gösteren modern bir modal açılmalıdır.
VD: Maslak / VKN: 111222333
VD: Şişli / VKN: 444555666
TCKN: 999888777
Gelişmiş Cron (zamanlanmış görev) sistemi ile günlük, saatlik veya dakikalık olarak platformlardan otomatik veri çekme (API sipariş okuma) ve gün sonu verilerini otomatik aktarma altyapısı.
Tarih aralığı seçin, gelen banka hareketlerini (çoklu seçerek) ilgili masraf kalemlerine sürükle-bırak ile atayın.
Hatırlatıcılı kanvas takvim. Tekrarlayan (Günlük, Haftalık, Aylık vb.) olay girişi. Belirlenen gün önceden sabah 07:00'de otomatik SMS/Mail/WP bildirimi.
Paket satışı ve üyelik sistemi için Iyzico entegrasyonu.
Hatırlatıcılı kanvas takvim sistemi. Cari vade tarihleri, tekrarlayan ödemeler (kira vb.) ve özel hatırlatmalar tek bir ekranda yönetilir.
1. Veri Kaynağı: Bu takvim, birden fazla veri kaynağını okumalıdır: 'Giderler' tablosundaki 'vade' tarihi olan faturalar (Cari Vade), 'Takvim Olayları' tablosundaki manuel girişler (Hatırlatmalar, Tekrarlayan Ödemeler).
2. Bildirim: Laravel Cron (Task Scheduler) kullanılarak her sabah 07:00'de çalışacak bir komut yazılmalıdır. Bu komut, o gün vadesi gelen veya hatırlatması olan tüm olayları bulup ilgili kullanıcılara (ayarlarda seçtikleri kanaldan) bildirim (SMS/Mail/WP Job) göndermelidir.
Uçtan uca veri okuma ve gelişmiş tarih bazlı filtreleme ile tüm finansal verilerin dökümü.
Gelişmiş veri kazıma ve okuma yöntemleri ile toplanan verilerin Gemini 2.5 Pro'ya gönderilerek analiz edilmesi. Kullanıcıya "Bu hafta Nakit cironuz %20 düştü, ancak Yemek Sepeti %15 arttı. Personel giderlerinizde %10 artış var." gibi proaktif içgörüler sunulur.
Gemini 2.5 ProKullanıcının "Ayarlar" üzerinden istediği verileri (örn: Paket sayısı, Platform, Tutar, Kurye kırılımı, Personel saatleri) seçerek kendi özel rapor menüsünü oluşturabilmesi.
Sistemin tüm işleyişi ve yönergeleri bu bölümden yönetilir. Burası iki ana kısımdan oluşur: Genel sistem ayarları ve detaylı yetkilendirme.
Kullanıcının sihirbazda seçtiği veya sonradan eklemek/çıkarmak istediği tüm dinamik listeler buradan yönetilir.
Eklenen personellere sistem erişimi buradan verilir. "Hazır Şablon" (örn: Muhasebeci) veya "Özel Yetki" (aşağıdaki gibi manuel) atanabilir. Yetkisi olmayan menü gizlenir ve URL'den erişim engellenir.
| Modül Adı | Görüntüleme | Ekleme/Düzenleme | Silme | Onaylama | Gün Sınırı |
|---|---|---|---|---|---|
| Gün Sonu | |||||
| Giderler | - | ||||
| Raporlar | - | ||||
| Ayarlar | - |
Bu bölümün bel kemiği `spatie/laravel-permission` paketidir. "Hazır Şablonlar" (İşletmeci, Muhasebeci) birer `Role` (Rol) olacaktır. Yukarıdaki tablodaki her bir `checkbox` ise bir `Permission` (İzin) olacaktır (örn: `view_reports`, `edit_expenses`, `approve_expenses`, `delete_expenses`).
Gün Sınırı: Bu, paketin bir parçası değildir. `users` tablosuna `day_limit` gibi özel bir sütun eklenmeli ve "Gün Sonu" gibi modüllerin sorgularında bu sınır kontrol edilmelidir. (örn: `where('date', '>=', today()->subDays(auth()->user()->day_limit))` )
Sistemdeki her bir işlem, A'dan Z'ye, "Türkçe, bu işlemi yaptı" formatında kayıt altına alınacaktır. Bu log sayfası, sadece firma sahibine (User) ve yetki verdiği kişilere özel olacaktır.
> Güvenli bağlantı kuruldu... Aktivite logları yükleniyor...
> [2025-11-07 14:30:01] Kullanıcı 'Ayşe Demir' (IP: 192.168.1.1)
> 'Giderler' modülünde ID 102 (ABC Gıda) olan kaydı 'ONAYLADI'.
> [2025-11-07 14:32:05] Kullanıcı 'Ahmet Yılmaz' (IP: 192.168.1.2)
> 'Gün Sonu' modülünde '06-11-2025' tarihli kasayı 'GEÇMİŞE DÖNÜK DÜZENLEME' için açtı.
> [2025-11-07 14:33:10] Kullanıcı 'Ahmet Yılmaz' (IP: 192.168.1.2)
> 'Gün Sonu (06-11-2025)' ciro kaleminde 'Nakit' değerini 8.500? -> 8.200? olarak güncelledi.
> [2025-11-07 14:34:00] Kullanıcı 'Ahmet Yılmaz' (IP: 192.168.1.2)
> 'Gün Sonu (06-11-2025)' kasasını yeniden 'KAPATTI'.
Bu bölüm için `spatie/laravel-activitylog` paketi kullanılacaktır. Loglar sadece "ne yapıldı" (örn: 'updated') değil, aynı zamanda "ne değişti" (örn: `{'old': 8500, 'new': 8200}`) bilgisini de (`properties` alanında) tutmalıdır.
Loglama yapılırken `description` alanı, "Kullanıcı [Kullanıcı Adı] [Model Adı] modelini [İşlem Tipi] yaptı" gibi dinamik ve Türkçe olarak oluşturulmalıdır. IP adresi ve User Agent gibi context bilgileri de loga eklenmelidir.