Logo
🛒
{{ settingsForm.company_name || 'EsnafPOS' }}
v2026 PRO
{{ user.full_name?.charAt(0)?.toUpperCase() }}
{{ user.full_name }}
{{ user.role === 'admin' ? '👑 Yönetici' : '🧑‍💼 Kasiyer' }}
📡 İNTERNET YOK — Satış devam eder, bağlantı gelince otomatik senkron {{ offlineQueueCount }} bekleyen
{{ offlineQueueCount }} offline satış senkron bekliyor…
— hemen sipariş / stok gir
{{ reminderStockCount }}
📒 {{ reminderCreditCount }} müşteri veresiye borçlu · Toplam {{ fmt(reminderCreditTotal) }} — tahsilat hatırlat
{{ reminderCreditCount }}
{{ menuItems.find(m => m.id === currentPage)?.label || 'EsnafPOS' }}
Barkod
{{ fmtTL(cartTotal) }}
No Ürün Adı Barkod Miktar Birim Fiyat Tutar
{{ idx + 1 }} {{ item.name }} {{ item.barcode || '—' }}
{{ formatQty(item.quantity) }}
{{ numberTL(item.unit_price) }} {{ numberTL(item.unit_price * item.quantity) }}
⚖ {{ scaleConnected ? 'Terazi' : 'Terazi bekleniyor' }}: {{ scaleWeight > 0 ? scaleWeight.toFixed(3) : '0.000' }} kg
Alınan Para
Para Üstü
{{ paraUstuDisplay }}
Özel Durumlar
Fiş Yazdır (F8)
Ürün Sil! (F5)
Fiyat Gör (F10)
Miktar Düş! (F7)
{{ liveClockText }}
{{ settingsForm.company_name || 'Şirket İsmi' }}

📋 Satış Geçmişi

Satışlar yükleniyor…
No Tarih · Saat Kasiyer Ödeme Toplam
#{{ s.sale_no }} ↩ İade {{ formatReceiptDate(s.created_at) }} {{ s.cashier_name || '—' }}
@{{ s.cashier_username }}
{{ {cash:'Nakit',card:'Kart',mixed:'Karma',credit:'Veresiye'}[s.payment_method] || s.payment_method }}
↩ İade
{{ numberTL(s.grand_total) }} TL
Bu tarihte satış bulunamadı.
Satış detayı yükleniyor…
{{ posSalesSelected.company?.company_name || settingsForm.company_name || 'EsnafPOS' }}
{{ isRefundSale(posSalesSelected) ? '↩ İADE DETAYI · FİŞ GÖRÜNÜMÜ' : 'SATIŞ DETAYI · FİŞ GÖRÜNÜMÜ' }}
↩ İADE İŞLEMİ
SATIŞ NO: #{{ posSalesSelected.sale_no }}
TARİH / SAAT: {{ formatReceiptDate(posSalesSelected.created_at) }}
SATAN KASİYER: {{ posSalesSelected.cashier_name || '—' }}
MÜŞTERİ: {{ posSalesSelected.customer_name }}
ÖDEME: {{ {cash:'NAKİT',card:'KART',mixed:'KARMA',credit:'VERESİYE'}[posSalesSelected.payment_method] || posSalesSelected.payment_method }}
{{ i + 1 }}. {{ item.product_name || item.name || 'Ürün' }}
Barkod: {{ item.barcode }}
{{ formatQty(item.quantity) }} {{ item.unit || 'adet' }} × {{ numberTL(item.unit_price) }} TL {{ numberTL(item.total) }} TL
Bu satışın ürün kalemleri yedekte yok. Yedeği yeniden yükleyin.
Ara toplam{{ numberTL(posSalesSelected.subtotal) }} TL
KDV (dahil){{ numberTL(posSalesSelected.tax_total) }} TL
İndirim-{{ numberTL(posSalesSelected.discount) }} TL
TOPLAM{{ numberTL(posSalesSelected.grand_total) }} TL
Alınan nakit{{ numberTL(posSalesSelected.cash_amount) }} TL
Kart{{ numberTL(posSalesSelected.card_amount) }} TL
Para üstü{{ numberTL(posSalesSelected.change_amount) }} TL
İPTAL EDİLMİŞ SATIŞ
Detaylarını görmek için soldaki herhangi bir satış satırına tıklayın.

Sayfalar · Menü

Diğer sayfalara buradan geçin. Satışa dönmek için «Satış (POS)» seçin. (F12)

Satışı iptal et?

Sepetteki tüm ürünler silinecek. Satış kaydı oluşmaz.

İskonto

Ara toplam: {{ fmt(cartGross) }} · Mevcut iskonto: {{ fmt(posDiscount) }}

Grup / Ürün Kısayolları

Örn: Çok satılan ürünler — çift tık ile de açabilirsiniz.

Seçili: {{ pendingSlotProduct.name }} — aşağıdaki boş/dolu slota tıkla

📦 Ürün Yönetimi

Toplam {{ productsTotal }} ürün

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ı
{{ productFilter.page }} / {{ productPages }} · {{ productsTotal }} ürün

📋 Satış Geçmişi

Bu kriterlerde satış bulunamadı.
#{{ s.sale_no }} ↩ İade
{{ fmt(s.grand_total) }} ₺
{{ formatDate(s.created_at) }}
👤 {{ s.customer_name }}
{{ s.cashier_name || '—' }}
↩ İade {{ s.payment_method==='cash'?'💵 Nakit':s.payment_method==='card'?'💳 Kart':s.payment_method==='credit'?'📒 Veresiye':'🔀 Karışık' }} {{ s.status==='completed'?'✓ Tamamlandı':'✗ İptal' }}
{{ s.document_type==='invoice'?'📑 Faturayı Gör':'🧾 Fişi Gör' }}

📊 Raporlar & Analizler

💰 Bugün Ciro
{{ fmt(dashboard.today_sales?.total || 0) }}
{{ fmtInt(dashboard.today_sales?.count || 0) }} satış
💵 Nakit
{{ fmt(dashboard.payment_breakdown?.cash || 0) }}
💳 Kart
{{ fmt(dashboard.payment_breakdown?.card || 0) }}
📒 Veresiye
{{ fmt(dashboard.payment_breakdown?.credit || 0) }}
📈 Tahmini Kar
{{ fmt(dashboard.today_profit || 0) }}
⚠ Düşük Stok
{{ fmtInt(dashboard.low_stock_count || 0) }}
Satış Adedi
{{ fmtInt(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) }}
Veresiye
{{ fmt(reportData.summary.credit) }}
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 }} {{ fmtQty(row.qty) }} {{ row.sale_count }} {{ fmt(row.total) }}
Bu aralıkta veri yok

🏷 Bugün Kategori Satışları

{{ i+1 }}. {{ c.category_name }}
{{ fmt(c.total_amount) }}
{{ fmtQty(c.total_qty) }} adet · {{ fmtInt(c.sale_count) }} satış · %{{ c.share_percent }}

🏆 Bugün En Çok Satanlar

ÜrünAdetTutar
{{ tp.product_name }} {{ fmtQty(tp.total_qty) }} {{ fmt(tp.total_amount) }}
Kategori
{{ fmtInt(categoryReport.summary?.category_count || 0) }}
Ciro
{{ fmt(categoryReport.summary?.total_revenue || 0) }}
Adet
{{ fmtQty(categoryReport.summary?.total_qty || 0) }}
Kar
{{ fmt(categoryReport.summary?.total_profit || 0) }}
# Kategori Adet Ciro Pay %
{{ i<3 ? ['🥇','🥈','🥉'][i] : '#'+(i+1) }} {{ c.category_name }} {{ fmtQty(c.total_qty) }} {{ fmt(c.total_revenue) }} %{{ c.share_percent }}
Bu aralıkta kategori satışı yok
# Ürün Adet Ciro
{{ i<3 ? ['🥇','🥈','🥉'][i] : '#'+(i+1) }} {{ p.product_name }} {{ fmtQty(p.total_qty) }} {{ 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 }} {{ fmtInt(p.stock) }} {{ 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

📦 Toplam Ürün
{{ allProducts.length }}
⚠ Düşük Stok
{{ stockAlerts.length }}
💎 Stok Değeri
{{ fmt(totalStockValue) }}
❌ Tükenmiş
{{ outOfStockCount }}
Tüm stoklar yeterli
Düşük stok uyarısı yok
{{ prodEmoji(a) }}
{{ a.name }}
BİTTİ KRİTİK
{{ a.barcode || '-' }}
Stok / Min {{ a.stock }} / {{ a.min_stock }}
Görsel Ürün Stok Toplam ₺ İşlem
{{ prodEmoji(p) }}
{{ p.name }}
{{ p.barcode || '-' }}
{{ fmtInt(p.stock) }} {{ 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.)

💸 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) }}
📒 Veresiye Tahsilat (gelir) {{ fmt(dayendData.credit_collections?.total || 0) }}
Nakit {{ fmt(dayendData.credit_collections?.cash || 0) }} · Kart {{ fmt(dayendData.credit_collections?.card || 0) }}
💰 Kasada Olması Gereken {{ fmt(dayendData.drawer_cash) }}
🏷 İ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 }}
{{ fmtQty(p.qty) }} 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

Ad SoyadKullanıcı AdıRolDurumİşlem
{{ u.full_name }} {{ u.username }} {{ u.role==='admin'?'Yönetici':'Kasiyer' }} {{ u.is_active==1?'Aktif':'Pasif' }}

⚙ Ayarlar

Satış ekranı grup & ürün kısayolları

Grup adlarını düzenleyin (örn. «Çok satılan ürünler»). Her grupta 20 ürün kısayolu (4×5). Satış ekranında da «Grup / Kısayol Ayarla» ile düzenlenebilir.

{{ g.name }}
{{ (g.slots||[]).filter(Boolean).length }} / 20 dolu

Fiş alt mesajı ve fiş görünümü için sekmesine gidin.

🖼

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 yöneticinizden veya .htaccess üzerinden upload_max_filesize ve post_max_size değerlerini yükseltmesini isteyin.

🔐 Kullanıcı Adı & Şifre Değiştir

Giriş yaptığınız hesabın kullanıcı adını ve/veya şifresini buradan güvenle değiştirebilirsiniz.

{{ accountFormError }}

{{ accountFormOk }}

🖼 İş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
🖼

🎨 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

🧾 Fiş Çıktısı Düzenleme

Yazı boyutları, hizalama, etiketler ve görünürlük. Değişiklikler anında önizlemede ve satış fişinde görünür.

Başlık & İşletme

Ürün & Toplam

Etiket metinleri

Görünürlük

📋 Canlı Fiş Önizlemesi

80mm termal yazıcı görünümü · Değişiklikler anında yansır

📑 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

Kapalıyken normal fiş satışı yapılır (bakkal/market). Açıkken her satış e-Fatura olarak kesilir ve GIB bağlantısı zorunludur.

🖨 Fiş Çıktısı

Satış sonrası fiş önizlemesi ve yazıcı ayar penceresi açılmaz. Satış kaydı anında tamamlanır.

USB / Seri Termal Yazıcı

Chrome/Edge (HTTPS). Bir kez «Bağlan» deyip fiş yazıcını seçin; sonraki satışlarda diyalogsuz basar.

{{ thermalConnected ? 'Bağlı — sessiz fiş aktif' : 'Bağlı değil' }}
İpucu: Chrome kısayoluna --kiosk-printing eklerseniz (ve varsayılan yazıcı termal ise) tarayıcı diyaloğu da çıkmaz.

🏛 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. Gerçek mağaza 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

İsteğe bağlı. Açıkken kart/karışık ödemede tutar otomatik POS cihazına gönderilir. Kapalıyken kart satışı yine yapılabilir (harici terminal).

📟 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 sertifikalı olmalı. Banka POS sözleşmenizde "ECR entegrasyon kabiliyetli" yazmalı.
🧪 ŞU AN TEST MODU AKTİF
Kart ödemelerinde SİMÜLE başarı dönecek, gerçek kart işlemi yapılmaz. Gerçek mağaza 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ş. Alanları doldurun ya da Test modunu açın.
✅ GERÇEK MOD — CANLI ÖDEME AKTİF
Kart ödemeleri gerçek POS cihazına gönderilir. Bağlantı testini çalıştırıp yeşil onay alın.

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

📷 USB Barkod Okuyucu

Klavye emülasyonlu (HID) tüm barkod okuyucular için. Kaydettikten sonra POS’ta anında geçerli olur.

HID tipik <50ms. Yavaş adaptörde 120–150 deneyin.
Kurulum: Okuyucu USB’ye takılı, “klavye” olarak görünmeli. POS açıkken barkodu okutun — sepete düşer. F3 ile barkod kutusuna odaklanın.

⚖ Terazi Entegrasyonu

USB terazi bağlantısı ile kg birimli ürünlerde ağırlık otomatik çekilir ve fiyat hesaplanır. Kapalıyken terazi POS ekranında görünmez.

Desteklenen teraziler: CAS, Dibal, Mettler Toledo, Şafak, Baykon ve USB-Serial (COM) çıkışlı teraziler. Chrome veya Edge (HTTPS) kullanın. İlk bağlantıda port seçin; sonraki açılışlarda otomatik bağlanır.
📚 Terazi Kurulum Adımları
  1. Teraziyi USB (veya USB-Serial dönüştürücü) ile bilgisayara bağlayın. Windows’ta “Aygıt Yöneticisi → Bağlantı Noktaları (COM)” görünmeli.
  2. Yukarıdan Baud Rate seçin (çoğu terazi 9600). Gerekirse terazi menüsünden aynı hızı ayarlayın.
  3. Protokol: emin değilseniz Otomatik bırakın. CAS / Dibal-Şafak / Mettler markaya göre seçilebilir.
  4. Terazi Ayarlarını Kaydet → Satış (POS) ekranına gidin.
  5. POS’taki terazi panelinde Bağlan’a tıklayın → tarayıcı listesinden terazi COM portunu seçin.
  6. Ürünü teraziye koyun; ağırlık panelde görünmeli. Ürün kartında birim kg olmalı → sepete ekleyince ağırlık otomatik alınır.
  7. Ağırlık gelmiyorsa: baud/protokolü değiştirin, Chrome/Edge kullandığınızdan emin olun, başka programın COM portunu kullanmadığını kontrol edin.

💾 Tam Sistem Yedekleme

Satışlar, ürünler, stok, veresiye, müşteriler, giderler, kategoriler, satış ekranı grup ayarları, işletme bilgileri, kullanıcılar, ayarlar ve yüklenen görseller dahil tüm sistem yedeklenir. ZIP yedek PC uygulamasına da yüklenebilir (tam değişim).

Tam paket kapsamı: kullanıcılar · ayarlar · satış / POS ekranı · satış geçmişi · gruplar/kısayollar · ürünler · stok · müşteriler · veresiyeler · giderler · raporlar (gün sonu / kasa teslimi satışlardan hesaplanır) · barkod etiket ürünleri + etiket profilleri · logo / işletme bilgileri · tüm görseller. Yükleyince eski veri silinir; yedekteki veriler anında görünür.
✓ Cron job gerekmez. Günlük yedekleme açıkken gece 00:00 geçip yeni gün başladığında, o gün uygulama ilk kez açıldığında 1 kez arka planda yedek alınır. Saat/dakika bazlı kontrol yok — satış ekranı asla yavaşlamaz.
⏰ Otomatik Yedekleme
Son otomatik yedek: {{ formatBackupDate(backupSettings.backup_last_run) }}
🛠 Manuel İşlemler

İsteğe bağlı sunucu cron URL (genelde gerekmez): {{ backupCronUrl || '—' }}

📋 Yedek Listesi

Yükleniyor…
Henüz sunucuda yedek yok. «Şimdi Yedek Al» ile ilk yedeği oluşturun.
{{ formatBackupDate(b.created_at) }}
{{ b.type === 'auto' ? '🤖 Otomatik' : '👤 Manuel' }} {{ b.size_human || b.size }} 🖼 Görseller dahil {{ b.tables }} tablo
⚠ Dikkat: Geri yükleme mevcut tüm veriyi seçilen yedekle değiştirir. İşlem öncesi güncel bir yedek almanız önerilir. Geri yükleme sonrası sayfa otomatik yenilenir.

🏷 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
🧾

Fiş #{{ receiptData.sale_no }}

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