Restoran Operasyon SaaS

Sıcak para takibinden AI destekli raporlamaya, restoranınızın tüm finansal operasyonlarını tek bir modern platformdan yönetin.

1. Proje Özeti ve Ana Hedefler

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.

Ana Odak: Operasyonel Kontrol

Sıcak para (nakit, kart, online) giriş-çıkış takibi, günlük "Gün Sonu" işlemleri ve temel ön muhasebe operasyonları üzerine kuruludur.

Gelecek Vizyonu: Mobil Entegrasyon

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.

SaaS Mimarisi Ön Muhasebe Odaklı Operasyon Yönetimi API-First Yaklaşımı Güvenli Altyapı

2. Teknoloji Yığını ve Kütüphaneler

Backend (API)

  • Laravel 12 (API-First)
  • Spatie Permission & ActivityLog
  • Gelişmiş Cron (Zamanlanmış Görevler)

Frontend (Arayüz)

  • Tailwind CSS (CDN)
  • Modern JS Bileşenleri (Sürükle-Bırak vb.)
  • Sesli Bildirim & Anlık Veri (Pusher/Soketi)

Ana Entegrasyonlar

  • Iyzico API: Paket satışı ve üyelik ödemeleri için.
  • WhatsApp API / SMS: Gün sonu ve hatırlatma bildirimleri için.
  • Gemini 2.5 Pro: AI Rapor Analizi ve veri yorumlama için.

3. Kullanıcı Hiyerarşisi (Multi-Tenant)

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.

ADMIN

Sistemin genel yöneticisi. Paketleri, kullanıcıları ve genel ayarları yönetir.

USER (Restoran Sahibi)

Ana kullanıcı (tenant). Paketi satın alan, personeli ekleyen ve tüm verilere sahip olan ana karakter.

ALT-USER (Personel)

Restoran sahibinin yetkilendirdiği çalışanlar. Sadece yetkileri dahilindeki menüleri görür ve işlem yapar.

Geliştirme Odağı: Veri İzolasyonu

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.

4. Yeni Kullanıcı Akışı (Wizard Demo)

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.

Restoran Kurulum Sihirbazı (Adım 1/3)

Adım 1: Para Giriş Kaynaklarınızı Seçin

"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.

Geliştirme Odağı: Wizard Veri Yönetimi

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.

5. Ana Modüller (Dashboard & Gün Sonu)

5.1. Anasayfa (Dashboard)

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.

Anasayfa - 07 Kasım 2025 (Sürükle & Bırak Aktif)
Toplam Ciro
24.150?
+12.5% (düne göre)
Toplam Gider
3.200?
Onay bekleyen: 450?
Yemek Sepeti Ciro
8.750?
102 Sipariş
Kasa Durumu
20.950?
(Giriş - Onaylı Gider)

5.2. Gün Sonu Akışı

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.

Girişler (Ciro)

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).

Çıkışlar (Transfer)

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.

Sistem Cirosu / Fark

Girişler (Ciro) ve Çıkışlar (Onaylı Giderler + Transferler) arasındaki farkı gösterir. "Sistem Cirosu" parametresi esnek olacak şekilde tasarlanmalıdır.

Geliştirme Odağı: Gün Sonu İşlemleri

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.

6. Giderler (Onay Mekanizmalı Demo)

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.

Onaylandı

Gelen Fatura: ABC Gıda A.Ş.

Ekleyen: Ahmet Yılmaz (06 Kas 2025) / Onaylayan: Ayşe Demir (07 Kas 2025)

1.250,00 ?
Askıda

Personel Ödemesi: Veli Kaya Avans

Ekleyen: Ahmet Yılmaz (07 Kas 2025)

500,00 ?
Reddedildi

Faturasız Ödeme: Sebze Alımı

Ekleyen: Ahmet Yılmaz (06 Kas 2025) / Reddeden: Ayşe Demir (06 Kas 2025)

320,00 ?

Gider Kalemleri

Giderler modülü bu 3 ana başlık altında veri girişi kabul edecektir:

1. Gelen Fatura

  • Cari adı (modal ile seçilecek)
  • Fatura no, İrsaliye no
  • Fatura tutarı (Net, KDV kalemleri)
  • Ödendi mi? (Evet/Hayır)
  • Ne ile ödendi? (Manuel/Gider Kalemleri)
  • Vade girilsin mi? (Opsiyonel)
  • Görsel yükle (Fatura fotoğrafı)

2. Fatura Ödemesi

  • Cari adı
  • Ödeme tutarı
  • Ne ile ödendi?
  • Görsel yükle (Dekont vb.)

3. Faturasız Ödeme

  • Personel Ödemesi: (Personel seç/manuel, tutar, ödeme yöntemi, görsel)
  • Gelen Ürün Ödemesi: (Cari seçimi, tutar, ödeme durumu, vade, görsel)

7. Cariler ve Cari Takibi (Demo)

Cari Ekleme

Tedarikçilerin ve müşterilerin (carilerin) eklendiği alan. Türkiye şartlarına uygun tüm finansal bilgiler alınır.

  • Zorunlu Alanlar: Firma Adı, Vergi Dairesi, Vergi Numarası / TCKN.
  • Opsiyonel Alanlar: Mail, Telefon, Açık Adres, IBAN Bilgisi, Firma Tipi (Şahıs, Ltd vb.).

Cari Modal

"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.

Cari Takibi / Rapor

ABC Gıda A.Ş.

VD: Maslak / VKN: 111222333

-12.500,00 ?

XYZ İçecek Dağıtım

VD: Şişli / VKN: 444555666

-4.200,00 ?

Demo Müşteri (Vadeli)

TCKN: 999888777

+8.000,00 ?

8. Entegrasyonlar ve Gelişmiş Özellikler

API Entegrasyonları (Sipariş Okuma)

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ı.

Yemek Sepeti Getir Yemek Trendyol GO Migros Yemek

Banka Entegrasyonu (MockProvider Demo)

Tarih aralığı seçin, gelen banka hareketlerini (çoklu seçerek) ilgili masraf kalemlerine sürükle-bırak ile atayın.

Gelen Banka Hareketleri (Mock)
YEMEK SEPETI ODEMESI
Platform Ödemesi - 07 Kas 2025
+8.750?
HAVALE (XYZ MÜŞTERİ)
Akbank - 07 Kas 2025
+5.000?
ABC GIDA ODEMESI
Garanti Bankası - 07 Kas 2025
-1.250?
XYZ ICECEK LTD
İş Bankası - 07 Kas 2025
-450?
INTERNET FATURASI
Garanti Bankası - 06 Kas 2025
-220?
SEBZE ALIMI
İş Bankası - 06 Kas 2025
-800?
İlgili Kaleme Sürükleyin
Gelir Kalemi / Ciro
Gelen Fatura / Faturasız Alım
Personel Ödemesi
Diğer Giderler / Genel Gider

Gelişmiş Takvim

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.

Ödeme Altyapısı

Paket satışı ve üyelik sistemi için Iyzico entegrasyonu.

9. Gelişmiş Takvim (Demo)

Hatırlatıcılı kanvas takvim sistemi. Cari vade tarihleri, tekrarlayan ödemeler (kira vb.) ve özel hatırlatmalar tek bir ekranda yönetilir.

Takvim - Kasım 2025
Pzt
Sal
Çar
Per
Cum
Cmt
Paz
27
28
29
30
31
1
Tekrarlayan: Kira Ödemesi
2
3
4
5
6
Personel Maaş Günü
7 (Bugün)
8
9
10
11
12
13
Vade: ABC Gıda
14
15
16
17
18
19
20
Vade: XYZ İçecek
22
23
24
25
26
27
28
29
30

Geliştirme Odağı: Takvim İşlevselliği

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.

10. Raporlama ve AI Analiz

Gelişmiş Raporlama

Uçtan uca veri okuma ve gelişmiş tarih bazlı filtreleme ile tüm finansal verilerin dökümü.

  • Vadeli Alacaklar: Vadesi gelen ve geçmiş faturalar.
  • Gün Sonu Raporları: Tarih bazlı detaylı dökümler.
  • Anlık Durum & Ortak Durumu: Kasa, banka, ortakların anlık bakiye durumu.
  • Açıklar Raporu: Tüm finansman verilerinin özeti.

Yapay Zeka (AI) Rapor Analizi

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 Pro

Özel Rapor (Esnek)

Kullanı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.

11. Ayarlar ve Yetkilendirme

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.

11.1. Genel Ayar Menüleri

Kullanıcının sihirbazda seçtiği veya sonradan eklemek/çıkarmak istediği tüm dinamik listeler buradan yönetilir.

Ödeme Yapılacak Kalemler Listesi Gün Sonu Transfer Edilecek Kalemler Ciro Kalemleri (Eklenebilir) Personel Listesi (IBAN, Pozisyon vb.) Şirket Ortakları / Firma Sahibi Takvim Ayarları (Cari Vade Gösterimi) Bildirim Ayarları (SMS/Mail/WP)

11.2. Kullanıcılar ve Yetkiler (Demo)

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.

Kullanıcı Yetkileri: Ahmet Yılmaz (Vardiya Müdürü)
Modül Adı Görüntüleme Ekleme/Düzenleme Silme Onaylama Gün Sınırı
Gün Sonu
Giderler -
Raporlar -
Ayarlar -

Geliştirme Odağı: spatie/laravel-permission

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))` )

12. Gelişmiş Loglama (Demo)

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'.

Geliştirme Odağı: spatie/laravel-activitylog

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.