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' : (scannerReady ? '🔌 USB Barkod Okuyucu Hazır' : '⏸ Barkod Okuyucu Bekliyor') }}
🔍 {{ 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) }}
🚫 Fatura zorunlu modda — GIB e-Fatura ayarlı değil. Ayarlar > Fatura sekmesinden GIB sağlayıcıyı yapılandırın.
Kart ödemesi devre dışı — POS entegrasyonu kapalı. Sadece nakit / veresiye satış yapılabilir.
📒 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

🖼

Görsel Yükleme Sınırı

Ürün ve logo görsel dosyaları için maksimum boyut. "Sınırsız" seçerseniz sadece sunucunuzun PHP upload_max_filesize ayarı geçerli olur.

⚠ Eğer 10 MB'tan büyük görsel yüklemek istiyorsanız hosting/sunucu yöneticinizden veya .htaccess üzerinden upload_max_filesize ve post_max_size'ı yükseltmesini isteyin.

🖼 İşletme Logosu

Sidebar, giriş ekranı ve fişlerde görünür. PNG/JPG/WEBP/SVG · {{ String(settingsForm.image_upload_limit_mb || '10') === '0' ? 'Sınırsız (sunucu PHP limiti geçerli)' : 'Maks. ' + (settingsForm.image_upload_limit_mb || 10) + ' MB' }}

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') }}

🚨 Fatura Zorunluluk Modu (Mevzuat)

Açıkken her satış e-Fatura/e-Arşiv olarak kesilir; GIB yapılandırması zorunludur. Kapalıyken hızlı fiş satışı yapılabilir.

Dikkat: GIB sağlayıcınız geçici olarak erişilemezse satışlar durdurulur.

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

  1. 1. Yukarıdaki Portal Aç butonuna tıkla → kullanıcı adı/parola ile giriş yap (yoksa hemen ücretsiz kayıt ol)
  2. 2. Sol menü → API TanımlarıYeni API Anahtarı butonu
  3. 3. Açıklama: EsnafPOS Entegrasyonu · Süre: Sınırsız bırak
  4. 4. Üretilen 64 karakterlik anahtarı kopyala ve aşağıdaki "🔑 Nilvera API Key" kutusuna yapıştır → Kaydet → Bağlantıyı Test Et
🧪 Test Modu
Portal: portaltest.nilvera.com
API: apitest.nilvera.com
Mali mühür gerekmez, deneme amaçlı.
✅ Canlı Mod
Portal: portal.nilvera.com
API: api.nilvera.com
NES/Mali Mühür şart (mevzuat).
💡 İpucu: Test ve Canlı portalları ayrı hesaplardır. Test ortamı için API Key'i Test portalından, Canlı için Canlı portalından almalısın. Sistem aşağıdaki "Test Modu" kutusuna göre doğru API endpoint'ini otomatik seçer.
Önemli: Nilvera Kullanıcı Adı + Parola ile API erişimi kabul etmiyor. Sadece API Key (Bearer Token) çalışır. Eski sürümdeki "HTTP 405" hatası bu yüzdendi — şimdi düzeltildi.
🧪 ŞU AN GIB TEST MODU AKTİF
Faturalar SİMÜLE UUID ile "kabul edildi" görünür ama GERÇEKTEN GIB'e gönderilmez. Mevzuat geçerli değil. Gerçek mağaza kullanımı için bu kutuyu kapatın.
🚫 GERÇEK MOD AÇIK FAKAT KONFİGÜRASYON EKSİK
Test modu kapalı ama Nilvera API Key girilmemiş. Yukarıdaki kutuya app.nilvera.com'dan aldığınız anahtarı yapıştırın.
Test modu kapalı ama API URL veya kullanıcı/şifre girilmemiş. Aşağıyı doldurun ya da Test modunu açın.
✅ GERÇEK GIB MODU — CANLI FATURA AKTİF
Faturalar gerçek GIB entegratoruna gönderilir. Bağlantı testini bir kez çalıştırıp yeşil onay aldıktan sonra mağaza kullanımına hazırsınız.
{{ gibTestResult.message }}
UUID: {{ gibTestResult.uuid }}
⚠ Gerçek faturalama için Test Modu'nu kapatın ve sağlayıcı bilgilerini girin.
🔓 Son başarılı bağlantı: {{ settingsForm.gib_verified_at }}
💡 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.

📟 Profilo İnpos M530 — Cihaz Ayarları

Statik IP önerilir

Yaygın: 4242 / 8080

Sözleşmede mevcut

📚 Inpos M530 Kurulum Adımları
  1. Cihazı elektriğe takın, açın. Banka ile sözleşmeniz olduğundan emin olun (ECR ID + Terminal ID alın).
  2. Cihazı ağa bağlayın: Menü → Ayarlar → Ağ → LAN/Wi-Fi. Statik IP atayın (örn 192.168.1.50).
  3. Cihaz menüsünde "ECR Modu" aktif edin. (Genelde "Yönetici Menü → Bağlantı → ECR Aç")
  4. Bilgisayardan cihaza ping atın: ping 192.168.1.50. Cevap gelmeli.
  5. İki entegrasyon modu var:
    • HTTP Agent (önerilen): Banka size yerel agent yazılımı verir. Kurun (örn http://localhost:4242) ve aşağıdaki API URL'ye yazın.
    • TCP Direkt: Agent yokken cihazın IP+Port'una direkt bağlanır. Cihaz IP ve TCP Port'u girin, API URL'yi boş bırakın.
  6. ECR ID ve Terminal ID'yi girin (banka POS sözleşmenizde yazıyor).
  7. Aşağıdan "🔌 Bağlantı Testi"ne basın. Yeşil ✅ görünmeli.
  8. İşlem yaparken cihaz ekranında "KART OKUTUNUZ" uyarısı görünmeli. Olmadıysa ECR modu kapalıdır → adım 3'ü tekrarlayın.
Mevzuat: Cihazınız YN ÖKC (Yeni Nesil Ödeme Kaydedici Cihaz) sertifikalı olmalı. Banka POS sözleşmenizde "ECR entegrasyon kabiliyetli" yazmalı; aksi halde kart ödemesi mevzuat dışı kalır.
🧪 ŞU AN TEST MODU AKTİF
Kart ödemelerinde SİMÜLE başarı dönecek, gerçek kart işlemi yapılmaz. Müşteri kartı uzatsa bile para çekilmez. Gerçek mağaza kullanımı için bu kutuyu kapatın.
🚫 GERÇEK MOD AÇIK FAKAT ENDPOINT YOK
Test modu kapalı ama API URL veya Cihaz IP + Port girilmemiş. Bu durumda kart ödemesi HATA verecek. Aşağıdaki alanları doldurun ya da Test modunu açın.
✅ GERÇEK MOD — CANLI ÖDEME AKTİF
Kart ödemeleri gerçek POS cihazına/agent'a gönderilir. Bağlantı testini bir kez çalıştırıp yeşil onay aldıktan sonra mağaza kullanımına hazırsınız.

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

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

{{ zReportResult.success ? '✅ Z-Raporu alındı' : '❌ Z-Raporu hatası' }}
{{ zReportResult.error || zReportResult.ref }}
{{ zReportResult.z_report_text }}
{{ posTestResult.error || posTestResult.message || 'OK' }}
REF: {{ posTestResult.ref }}
⚠ Gerçek mağaza kullanımına geçmek için Test Modu'nu kapatın ve cihaz/agent bilgilerini girin.
🔓 Son başarılı bağlantı: {{ settingsForm.pos_verified_at }}
📋 Ç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

Kapalıyken orijinal şablon görüntüsü aynen korunur. Açtığınızda her şeyi (renk, boyut, pozisyon) istediğiniz gibi ayarlayabilirsiniz.

💾 Profil {{ Object.keys(labelProfiles).length }} kayıtlı
🎨 Hazır Renk Teması
📏 Boyut
{{ labelOptions.paddingMm }} mm
🎨 Renkler (boş = orijinal)
{{ row.label }}
🔤 Yazı Boyutları (0 = orijinal)
{{ row.label }} {{ labelOptions[row.key] || 'orijinal' }}{{ labelOptions[row.key] ? 'pt' : '' }}
📌 Hizalama
{{ row.label }}
📐 Pozisyon (X / Y mm — kaydırma)
{{ row.label }}
+ değer = sağa/aşağı · − değer = sola/yukarı
📊 Barkod Yüksekliği
{{ labelOptions.barcodeHeight || 'orijinal' }}{{ labelOptions.barcodeHeight ? ' mm' : '' }}
📝 Üstyazı Banner
Renk
📄 A4 Sayfa Düzeni
{{ labelOptions.a4PageMargin }} mm
{{ labelOptions.a4LabelGap }} mm

🔍 Ü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
{{ labelOptions.extraText }}
… 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) }}
🧪 TEST MODU: POS simüle edildi + GIB faturası simüle
⚠ Gerçek kart çekilmedi / fatura GIB'e gitmedi.