Logo
🛒

{{ settingsForm.company_name || 'EsnafPOS' }}

Market & Bakkal POS · 2026 PRO

⚠ {{ loginError }}

🔒 Güvenli giriş · Oturumunuz şifrelidir
Logo
🛒
{{ settingsForm.company_name || 'EsnafPOS' }}
v2026 PRO
{{ user.full_name?.charAt(0)?.toUpperCase() }}
{{ user.full_name }}
{{ user.role === 'admin' ? '👑 Yönetici' : '🧑‍💼 Kasiyer' }}
{{ demoMode ? '🔒' : '🛡' }}
{{ demoMode ? 'Demo Mod (Aktif)' : 'Demo Modu Aç' }}
🔒 DEMO MOD AKTİF — Sadece satış ve görüntüleme yapılabilir
{{ menuItems.find(m => m.id === currentPage)?.label || 'EsnafPOS' }}
{{ scannerActive ? '✓ BARKOD OKUNDU' : '🔌 USB Barkod Okuyucu Hazır' }}
🔍 {{ posSearchResults.length }} sonuç bulundu
-%{{ getDiscountPercent(p) }}
{{ prodEmoji(p) }}
{{ p.name }}
{{ fmt(p.sale_price) }}
{{ fmt(getEffectivePrice(p)) }}
🔥 -%{{ getDiscountPercent(p) }}
{{ prodEmoji(p) }}
TÜKENDİ
{{ p.name }}
{{ fmt(p.sale_price) }}
{{ fmt(getEffectivePrice(p)) }}
{{ p.stock > 0 ? p.stock + ' ' + (p.unit || 'ad') : 'YOK' }}
{{ posCategory === 'fav' ? '⭐' : '📦' }}

{{ posCategory === 'fav' ? 'Henüz favori ürün yok. ☆ simgesiyle ekleyin.' : 'Bu kategoride ürün yok' }}

🛒
SEPET
{{ cart.length }} ürün · {{ cartItemCount }} adet
🛒
Sepet boş
Barkod okutun veya
soldan ürüne tıklayın
F3: Aramaya odaklan · F4: Satışı tamamla
{{ prodEmoji(item) }}
{{ item.name }}
× {{ parseFloat(item.unit_price).toFixed(2) }}₺
{{ (item.unit_price * item.quantity).toFixed(2) }}₺
Ara Toplam{{ fmt(cartGross) }}
KDV (fiyata dahil){{ fmt(cartTax) }}
İndirim-{{ fmt(posDiscount) }}
TOPLAM {{ fmt(cartTotal) }}
📒 Müşteri Bilgisi *zorunlu
💰 Para Üstü {{ fmt(cashAmount - cartTotal) }}
⚠ Eksik Tutar {{ fmt(cartTotal - cashAmount) }}
📒 Veresiye Borç {{ fmt(cartTotal) }}
F4 ile hızlı tamamla

📦 Ürün Yönetimi

Toplam {{ productsTotal }} ürün

🔒 Demo modda ürün ekleme/düzenleme yapılamaz
GörselBarkodÜrünKategoriAlışSatışStokİşlem
{{ prodEmoji(p) }}
{{ p.barcode || '-' }}
{{ p.name }} 🔥 -%{{ getDiscountPercent(p) }}
⭐ Favori
{{ p.category_name || '-' }} {{ fmt(p.purchase_price) }}
{{ fmt(p.sale_price) }}
{{ fmt(getEffectivePrice(p)) }}
{{ p.stock }} 🔒
Ürün bulunamadı

📋 Satış Geçmişi

No 📅 Tarih · Saat 👥 Kasiyer 📄 Belge 👤 Müşteri Toplam Ödeme Durum İşlem
Bu kriterlerde satış bulunamadı.
#{{ s.sale_no }} {{ formatDate(s.created_at) }}
{{ s.cashier_name || '—' }}
@{{ s.cashier_username }}
📑 {{ s.invoice_no }} 🧾 Fiş
{{ s.customer_name }}
{{ s.customer_tax_no }}
{{ fmt(s.grand_total) }} {{ s.payment_method==='cash'?'💵 Nakit':s.payment_method==='card'?'💳 Kart':s.payment_method==='credit'?'📒 Veresiye':'🔀 Karışık' }} {{ s.status==='completed'?'✓ Tamamlandı':'✗ İptal' }}

📊 Raporlar & Analizler

💰 Bugün Ciro
{{ fmt(dashboard.today_sales?.total || 0) }}
{{ dashboard.today_sales?.count || 0 }} satış
💵 Nakit
{{ fmt(dashboard.payment_breakdown?.cash || 0) }}
💳 Kart
{{ fmt(dashboard.payment_breakdown?.card || 0) }}
📈 Tahmini Kar
{{ fmt(dashboard.today_profit || 0) }}
⚠ Düşük Stok
{{ dashboard.low_stock_count || 0 }}
Satış Adedi
{{ reportData.summary.sale_count }}
Toplam Ciro
{{ fmt(reportData.summary.total) }}
KDV
{{ fmt(reportData.summary.tax) }}
Nakit
{{ fmt(reportData.summary.cash) }}
Kart
{{ fmt(reportData.summary.card) }}
Ort. Sepet
{{ fmt(reportData.summary.sale_count > 0 ? reportData.summary.total / reportData.summary.sale_count : 0) }}
{{ reportFilter.group_by==='hour'?'Saat':reportFilter.group_by==='product'?'Ürün':reportFilter.group_by==='category'?'Kategori':reportFilter.group_by==='cashier'?'Kasiyer':'Tarih' }} Miktar Satış Toplam
{{ row.label }} {{ row.qty }} {{ row.sale_count }} {{ fmt(row.total) }}
Bu aralıkta veri yok

🏆 Bugün En Çok Satanlar

ÜrünAdetTutar
{{ tp.product_name }} {{ tp.total_qty }} {{ fmt(tp.total_amount) }}
# Ürün Adet Ciro
{{ i<3 ? ['🥇','🥈','🥉'][i] : '#'+(i+1) }} {{ p.product_name }} {{ parseFloat(p.total_qty).toFixed(0) }} {{ fmt(p.total_revenue) }}
Bu aralıkta satış verisi yok
# Ürün Ciro Kar Marj %
{{ i<3 ? ['🥇','🥈','🥉'][i] : '#'+(i+1) }} {{ p.product_name }} {{ fmt(p.revenue) }} {{ fmt(p.profit) }} {{ parseFloat(p.margin_percent || 0).toFixed(1) }}%
Bu aralıkta veri yok
Son 30 gündür satılmamış ürünler — stoğunda para bağlı duranlar.
Barkod Ürün Stok Birim Fiyat Bağlı Tutar
{{ p.barcode || '-' }} {{ p.name }} {{ parseFloat(p.stock).toFixed(0) }} {{ fmt(p.sale_price) }} {{ fmt(p.stock_value) }}
Tüm ürünler son 30 günde satıldı 🎉
{{ cashierReport.totals?.grand_sales || 0 }} satış · {{ fmt(cashierReport.totals?.grand_total || 0) }} toplam ciro
👥
Bu tarih aralığında satış yapan kasiyer yok
{{ c.cashier_name?.charAt(0)?.toUpperCase() }}
{{ c.cashier_name }}
@{{ c.cashier_username }} · {{ c.total_sales }} işlem
{{ fmt(c.total_amount) }}
Toplam Ciro
💵 Nakit
{{ fmt(c.cash_amount) }}
💳 Kart
{{ fmt(c.card_amount) }}
📒 Veresiye
{{ fmt(c.credit_amount) }}
✗ İptal ({{ c.cancelled_count }})
{{ fmt(c.cancelled_amount) }}
🟢 İlk: {{ formatDate(c.first_sale_at) }} 🔴 Son: {{ formatDate(c.last_sale_at) }}

📥 Stok Yönetimi

Stok girişi, çıkışı ve hareket takibi

🔒 Demo
📦 Toplam Ürün
{{ allProducts.length }}
⚠ Düşük Stok
{{ stockAlerts.length }}
💎 Stok Değeri
{{ fmt(totalStockValue) }}
❌ Tükenmiş
{{ allProducts.filter(p => parseFloat(p.stock) <= 0).length }}
Tüm stoklar yeterli
Düşük stok uyarısı yok
{{ prodEmoji(a) }}
{{ a.name }}
{{ a.barcode || '-' }}
Stok / Min {{ a.stock }} / {{ a.min_stock }}
Görsel Ürün Stok Toplam ₺ İşlem
{{ prodEmoji(p) }}
{{ p.name }}
{{ p.barcode || '-' }}
{{ parseFloat(p.stock).toFixed(0) }} {{ fmt(parseFloat(p.stock) * parseFloat(p.sale_price)) }} 🔒
Eşleşen ürün yok
TarihÜrünİşlemMiktar
{{ formatDate(m.created_at) }} {{ m.product_name }} {{ {sale:'Satış',purchase:'Giriş',adjustment:'Düzeltme',return:'İade'}[m.type] }} {{ m.type === 'sale' ? '-' : '+' }}{{ Math.abs(m.quantity) }}
Hareket yok

👤 Müşteriler · Veresiye

Toplam {{ customerList.length }} müşteri · {{ customerDebtCount }} kişide borç var

📒 Toplam Açık Borç
{{ fmt(customerTotalDebt) }}
👥 Borçlu Müşteri
{{ customerDebtCount }}
📊 Müşteri Sayısı
{{ customerList.length }}
İsim Toplam Borç İşlem
{{ (c.name || '?').charAt(0).toUpperCase() }}
{{ c.name }}
{{ c.note }}
{{ fmt(c.total_credit) }}
👥
{{ customerFilter.only_debt ? 'Borçlu müşteri yok' : 'Henüz müşteri yok' }}

💸 Giderler

İşletme giderlerini takip edin (kira, fatura, vb.)

🔒 Demo
💸 Toplam Gider
{{ fmt(expenseTotal) }}
{{ t.category }}
{{ fmt(t.total) }}
Tarih Kategori Tutar İşlem
{{ formatDate(e.created_at) }} {{ e.category }} {{ fmt(e.amount) }} 🔒
Bu aralıkta gider kaydı yok

🌙 Gün Sonu Raporu

Günlük detaylı kapanış raporu

💰 Ciro
{{ fmt(dayendData.summary?.total) }}
{{ dayendData.summary?.sale_count || 0 }} satış
📈 Brüt Kar
{{ fmt(dayendData.profit) }}
💸 Giderler
{{ fmt(dayendData.expense_total) }}
✨ Net Kar
{{ fmt(dayendData.net_profit) }}

💳 Ödeme Dağılımı

💵 Nakit {{ fmt((dayendData.summary?.cash_total||0) + (dayendData.summary?.mixed_cash||0)) }}
💳 Kart {{ fmt((dayendData.summary?.card_total||0) + (dayendData.summary?.mixed_card||0)) }}
📒 Veresiye {{ fmt(dayendData.summary?.credit_total) }}
💰 Para Üstü Verilen {{ fmt(dayendData.summary?.change_total) }}
🏷 İndirim {{ fmt(dayendData.summary?.discount) }}
❌ İptal Edilen {{ dayendData.cancelled }} satış

🧑‍💼 Kasiyer Dağılımı

{{ c.full_name }}
{{ c.cnt }} satış
{{ fmt(c.total) }}
Veri yok

🏆 Günün En Çok Satan Ürünleri

{{ i<3 ? ['🥇','🥈','🥉'][i] : '#'+(i+1) }}
{{ p.product_name }}
{{ parseFloat(p.qty).toFixed(0) }} adet · {{ fmt(p.total) }}

📒 Bugünkü Veresiye Satışları

{{ cs.customer_name }}
{{ cs.customer_phone || '-' }} · Fiş #{{ cs.sale_no }} · {{ formatDate(cs.created_at) }}
{{ fmt(cs.grand_total) }}

💸 Gider Dağılımı

{{ e.category }} {{ fmt(e.total) }}
🌙
Gün sonu raporu yükleniyor...

🤝 Kasa Teslimi

Kasiyerin yaptığı tüm satışlar, iadeler ve ödeme detayları — kasa teslimi tutanağı

🤝
Kasiyer Seçin ve Raporu Getirin
Kasiyerin gün içinde yaptığı tüm satış, iade ve ödeme detayları görüntülenecek
👤 Kasiyer
{{ handoverData.cashier.full_name }}
@{{ handoverData.cashier.username }} · {{ handoverData.cashier.role === 'admin' ? 'Yönetici' : 'Kasiyer' }}
📅 Dönem
{{ handoverData.period.date_from }} {{ handoverData.period.time_from }}
→ {{ handoverData.period.date_to }} {{ handoverData.period.time_to }}
🕐 Mesai
İlk: {{ fmtDateTime(handoverData.summary.first_sale_at) }}
Son: {{ fmtDateTime(handoverData.summary.last_sale_at) }}
🛒 Satış Sayısı
{{ handoverData.summary.sale_count }}
{{ handoverData.summary.invoice_count }} fatura · {{ handoverData.summary.receipt_count }} fiş
💰 Toplam Ciro
{{ fmt(handoverData.summary.total_revenue) }}
KDV dahil
💵 Nakit Ciro
{{ fmt(handoverData.summary.pm_cash) }}
Net: {{ fmt(handoverData.summary.net_cash_expected) }}
💳 Kart Ciro
{{ fmt(handoverData.summary.card_total) }}
{{ fmt(handoverData.summary.pm_card) }} sadece kart
📒 Veresiye
{{ fmt(handoverData.summary.credit_total) }}
Açık hesap
↩ İade
{{ fmt(handoverData.summary.refund_total) }}
{{ handoverData.summary.refund_count }} adet · {{ handoverData.summary.cancelled_count }} iptal

💼 Ödeme Kırılımı

💵 Sadece Nakit Satışlar {{ fmt(handoverData.summary.pm_cash) }}
💳 Sadece Kart Satışlar {{ fmt(handoverData.summary.pm_card) }}
🔀 Karışık Ödeme {{ fmt(handoverData.summary.pm_mixed) }}
📒 Veresiye {{ fmt(handoverData.summary.credit_total) }}
Ara Toplam (KDV hariç){{ fmt(handoverData.summary.total_subtotal) }}
KDV Toplam{{ fmt(handoverData.summary.total_tax) }}
İndirim-{{ fmt(handoverData.summary.total_discount) }}
Para Üstü{{ fmt(handoverData.summary.change_total) }}

💰 Kasa Sayımı

Sistem'e Göre Olması Gereken Nakit {{ fmt(handoverData.summary.net_cash_expected) }}
{{ handoverCashDifference === 0 ? '✅ Tam' : handoverCashDifference > 0 ? '➕ Fazla' : '➖ Eksik' }} {{ fmt(Math.abs(handoverCashDifference)) }}

📋 Tüm Satışlar (Detaylı) — {{ handoverData.sales.length }} adet

Bu dönemde satış yok
⏰ Saat Fiş No Tip Müşteri Ödeme Nakit Kart Toplam Durum

↩ İade Edilen Ürünler — {{ handoverData.refunds.length }} adet ({{ fmt(handoverData.summary.refund_total) }})

⏰ Saat Fiş No Ürün Miktar Birim Fiyat İade Tutarı Ödeme Not
{{ fmtTime(r.created_at) }} {{ r.sale_no || '-' }} {{ r.product_name }} ({{ r.barcode }}) {{ r.quantity }} {{ fmt(r.unit_price) }} {{ fmt(r.amount) }} {{ r.payment_method === 'cash' ? '💵' : r.payment_method === 'card' ? '💳' : r.payment_method === 'credit' ? '📒' : '🔀' }} {{ r.payment_method }} {{ r.note || '-' }}

📒 Veresiye Açılan Hesaplar — {{ handoverData.credits.length }} adet

⏰ Saat Fiş No Müşteri Telefon Borç
{{ fmtTime(c.created_at) }} {{ c.sale_no }} {{ c.customer_name }} {{ c.customer_phone || '-' }} {{ fmt(c.grand_total) }}

🏆 En Çok Satılan Ürünler (Top 10)

# Ürün Miktar Tutar
{{ i + 1 }} {{ p.name }} {{ parseFloat(p.qty).toFixed(2) }} {{ fmt(p.total) }}

🕐 Saatlik Satış Dağılımı

{{ String(h.hour).padStart(2, '0') }}:00
{{ h.cnt }} adet · {{ fmt(h.total) }}

👥 Kullanıcı Yönetimi

🔒 Demo modda kullanıcı ekleme/düzenleme yapılamaz
Ad SoyadKullanıcı AdıRolDurumİşlem
{{ u.full_name }} {{ u.username }} {{ u.role==='admin'?'Yönetici':'Kasiyer' }} {{ u.is_active==1?'Aktif':'Pasif' }} 🔒

⚙ Ayarlar

🖼 İşletme Logosu

Sidebar, giriş ekranı ve fişlerde görünür. PNG/JPG/WEBP/SVG · Max 2MB

Logo
🖼

🔒 Demo modda logo değiştirilemez

🎨 Hazır Temalar

Seçtiğiniz tema anında tüm sisteme uygulanır.

🎨 Özel Tema (Karışık Renk)

Kendi renklerinizi seçin — anında uygulanır, otomatik kaydedilir.

📋 Canlı Önizleme

🔒 Demo modda tema kaydedilmez

📑 Fatura Numaralandırma

Fatura kestiğinizde otomatik üretilen numaralandırma. Format: [Önek][Seri][6 hane] · Örn: FTR2026000001

Max 5 hane · Boşluksuz

Yıl başında değiştirin

Bir sonraki fatura no

📋 Sıradaki Fatura No Önizleme:
{{ (settingsForm.invoice_prefix || 'FTR') + (settingsForm.invoice_series || '2026') + String(settingsForm.next_invoice_no || 1).padStart(6, '0') }}

🤖 Otomatik Fatura Akışı

Her satışta fatura sorulsun mu? Belirli müşterilere otomatik fatura kesimi ayarı.

🏛 GIB e-Fatura / e-Arşiv API

Faturayı otomatik GIB'e gönderen entegrator. Test mod açıkken sadece simülasyon çalışır.

{{ gibTestResult.success ? '✅ Test başarılı' : '❌ Test başarısız' }}
{{ gibTestResult.message }}
UUID: {{ gibTestResult.uuid }}
💡 Sağlayıcı Önerileri
Nilvera: 0-100 fatura/ay ÜCRETSİZ, üstü ucuz. Yeni başlayanlara ideal.
Foriba: Büyük şirketler için. Logo/Mikro ile kolay entegre.
İzibiz: Aylık 50 TL, küçük işletmeye uygun.
GIB Portal: Direkt portal kullanımı 3000 belge/ay ücretsiz, manuel.

🏛 Maliye / VKN Bilgileri

Bu bilgiler her fatura ve fişte yer alır. Vergi mükellefi iseniz mutlaka doldurun.

💳 POS Cihaz Entegrasyonu

Açık olduğunda kart/karışık ödemede tutar otomatik olarak POS cihazına gönderilir.

Bankanızın POS SDK / Web Service URL'si

Bearer token ya da `user:pass` (Basic Auth otomatik dönüşür)

{{ posTestResult.success ? '✅ Ödeme onaylandı' : '❌ Ödeme reddedildi' }}
{{ posTestResult.error || posTestResult.message || 'OK' }}
REF: {{ posTestResult.ref }}
📋 Çalışma Akışı
  • Test mod açık: Mock simülasyon (geliştirme/eğitim)
  • Test mod kapalı + API URL girilmiş: Gerçek POS REST API çağrısı
  • POS başarılı → satış kaydedilir + REF saklanır
  • POS reddetti → satış iptal, kullanıcı uyarılır

🏷 Barkod Etiket Yazdırma

📐 Etiket Şablonu {{ Object.keys(labelTemplates).length }} stil

🔥 Görsel İndirim Etiketi: Ürün fiyatı değişmez. Üstte zamlı fiyat üstü çizili, altta gerçek satış fiyatı indirimli gibi gösterilir. Gerçek indirim (ürün formunda) tanımlıysa o kullanılır.
%10%30%50%70%80

⚙ Etiket İçeriği

🔍 Ürün Ekle

📋 Etiket Listesi {{ labelCart.length }} ürün · {{ expandedLabels.length }} adet

📭
Henüz ürün eklenmedi
Sol panelden ürün arayın veya toplu ekleyin
{{ i.product.name }}
{{ i.product.barcode || '—' }} · {{ fmt(i.product.sale_price) }}

👁 Önizleme {{ labelTemplates[selectedLabelTemplate].width }}×{{ labelTemplates[selectedLabelTemplate].height }}mm

👁
Önizleme için ürün ekleyin
… ve {{ expandedLabels.length - 12 }} adet daha
{{ infoToast.msg }}
{{ saleToast.payment_method==='credit' ? '📒' : '✓' }}
{{ saleToast.payment_method==='credit' ? '✓ Veresiye Kaydedildi' : '✓ Satış Tamamlandı' }}
Fiş No: #{{ saleToast.sale_no }}
{{ fmt(saleToast.grand_total) }}
💰 Para Üstü: {{ fmt(saleToast.change_amount) }}