HoReCa
Önemli Noktalar
Get Fiscal Parameters ZORUNLUDUR: Sepet oluşturmadan önce
terminal-idile Get Fiscal Parameters API çağrılması ve dönen sectionNo/taxPercent değerleri MUTLAKA kullanılmalıdır.Kablosu entegrasyonda Polling YAPILMAZ, Webhook ZORUNLUDUR: Sepet durumu kontrol etmek için setInterval/polling kullanamazsınız. Set Client Settings API ile webhook tanımlayın.
sectionNo Ataması OKC Cihazında Tanımlanır: API'ye gönderilen sectionNo değerleri, OKC cihazında önceden Setup edilmiş mali kısımlarla eşleşmeli. Fiscal Parameters API bu değerleri döndürür.
basketID Benzersiz Olmalıdır: Her sepet için UUID v4 kullanın. Sabit veya tahmin edilebilir ID'ler sepetlerin karışmasına neden olur.
Tek Fişte Farklı KDV
Soru: Aşağıdaki sepet doğru mu? Özellikle taxPercent değerleri ve sectionNo ataması onaylanmak isteniyor?
{
"basketID": "masa-12-2025-04-11",
"documentType": 0,
"items": [
{"name": "Izgara Köfte", "price": 32000, "sectionNo": 2, "taxPercent": 1000, "quantity": 1000},
{"name": "Efes Bira 0.5", "price": 18000, "sectionNo": 1, "taxPercent": 2000, "quantity": 2000}
],
"paymentItems": [{"amount": 78000, "type": 1}]
}✅ CEVAP
Sepet yapısı DOĞRU, ancak aşağıdaki hususlara dikkat edilmeli:
sectionNo Değerleri: Örnekteki
sectionNoatamalarının (1=alkol%20, 2=yiyecek%10) OKC cihazında fiziksel olarak tanımlanmış olması gerekir. Bunları doğrulamak için:taxPercent FORMAT: Değerler temel puan formatında gönderilir (100 = %1, 1000 = %10, 2000 = %20). Örnekteki değerler doğru.
Tutar Hesaplaması:
Izgara Köfte: 32.000 TL (sectionNo 2, %10 KDV) → Toplam tutara %10 katkı
Bira: 36.000 TL (18×2, sectionNo 1, %20 KDV) → Toplam tutara %20 katkı
Servis: 10.000 TL (sectionNo 3, %20 KDV) → Toplam tutara %20 katkı
Toplam: 78.000 TL ✓
Sectionno: 3 Ayrı Kısım mı?
✅ EVET, ayrı olmalıdır. Servis bedeli yiyecek kalemine dahil edilirse Türkiye'de vergi ziyaı oluşur.
Restoranlar TÜRe göre sectionNo: 3'ü "Garsoniye / Servis Bedeli" olarak setup ederler.
Bu kurulum OKC cihazında yapılır (Setup > Sections), API'de değil.
Doğru Kod Yapısı
Token Dokümantasyon Referansı
Get Fiscal Parameters API:
GET /v1/fiscal-info?terminal-id={terminalId}Yanıt örneği:
Hesap Bölme (Split Bill): Tek Masada 3 Farklı Ödeme
Soru: Bir masadaki ödeme 3 parça yapılacaksa 3 ayrı sepet arka arkaya OKC'ye gönderilebilir mi? Aynı masa/oturum için zincirleme sepet gönderiminde herhangi bir kısıt var mı?
✅ CEVAP
Arka arkaya sepet göndermede bir kısıt yoktur ancak işlemlerin karışmadan parçalı ödenebilmesi için doğrudan ÖKC üzerinde parçalı ödeme akışı kullanılmalıdır.
Tek bir sepet OKC'ye gönderilir, parçalama ve tahsilat adımları cihaz üzerinde yapılır. Ödemeler tamamlandığında entegrasyon tarafına webhook ile ödeme bilgileri döner.
Tek Sepet ile Parçalı Ödeme (ÖNERILEN AKIŞ)
Webhook: Parçalı Ödemeler
Bu Akışın Avantajları
✅ OKC cihazının native split bill özelliğini kullanır
✅ Sistem kompleksliğini azaltır
✅ Tüm ödemeler tek basketID altında konsolide edilir
✅ Müdür/kasiyer dostu (cihaz üzerinde "Hesap Böl" butonu)
✅ Audit trail daha temiz
İkramı / Bedelsiz Ürün
Soru A: Ürünü sepete 0 fiyatlı kalem olarak eklemek mümkün mü? Soru B: Gerçek fiyatı yazıp indirim kalemi eklemek mümkün mü? Soru C: Toplam tutarı 0 TL olan bir sepet OKC'ye gönderilebilir mi?
✅ CEVAPLAR
A - 0 TL Kalem
⚠️ ÖNERILMEZ
Patron ikramı için doğrudan 0 TL kalem yerine indirim akışı kullanılmalıdır.
B - Gerçek fiyat + indirim
✅ EVET
Tutar indirimi olarak %100 indirim gönderebilirsiniz.
C - Uygulama yöntemi
✅ adjust ile
discount objesinde type ve value/totalValue iletilmelidir.
Önerilen Yöntem
Patron ikramı için ürün gerçek fiyatıyla kalır, indirim item.adjust üzerinden gönderilir.
Discount objesindeki "type": 0 ve "value" alanını tek ürün fiyatı olarak iletebilirsiniz.
Ürün quantity'si 1'den fazla ise item.adjust içinde "value" yerine "totalValue" göndererek birim fiyata değil tüm ürünlere uygulanacak indirimi iletebilirsiniz.
JSON Örnekleri
3 adet kolanın birim fiyatına 100 TL indirim
3 adet kolanın tamamına 300 TL indirim
Not
Patron ikramı senaryosunda ana yaklaşım: item.adjust ile indirim göndermek, kalemi sıfırlamak yerine mali izlenebilirliği korumaktır.
Kart ile Bahşiş
Soru A: Bahşiş OKC fişine dahil edilmeli mi?
Soru B: Dahil edilecekse hangi kısıma, hangi KDV oranıyla?
Soru C: paymentItems toplamı items toplamını aşabilir mi?
✅ CEVAPLAR
Kredi kartı ile bahşiş için resmi yaklaşım şu an geliştirme aşamasındadır.
Yemek Çeki / TokenFlex / Sodexo / Multinet / Edenred
Soru: Yemek çeki ödemesi paymentItems içinde hangi type kodu ile iletilmeli?
Çözüm: Yemek Çekini Kart (Type 7) Olarak Gönder
Büyük Masa Kurumsal Fatura (Tutar > 12.000 TL)
Soru: İşyeri kendi e-fatura sisteminde 2 ayrı KDV oranı içeren fatura kesiyor, sonra OKC'ye E-Fatura Bilgi Fişi (documentType:9006) gönderiyor. Bilgi fişindeki items listesi e-fatura ile birebir eşleşmeli mi, yoksa sadece toplam tutar yeterli mi?
✅ CEVAP
Items listesi e-fatura ile BİREBİR eşleşmeli. Sadece toplam yeterli DEĞİL.
Token OKC, E-Fatura Bilgi Fişi (documentType: 9006) gönderildiğinde, aşağıdaki doğrulamalar yapar:
KDV Tutarı Doğrulaması: Gönderilen items'den hesaplanan KDV, e-faturadaki KDV ile eşit olmalı
Tutar Doğrulaması: Items toplamı, birebir eşleşmeli
KDV Kısımları (sectionNo): Farklı oranlar farklı kısımlar MUTLAKA ayrılmalı
Doğru Davranış
Kod Yapısı
JSON Örneği (Onerilen Örnekten Düzeltilmiş)
Dikkat: documentType: 9006 Şartları
İşyeri: E-fatura mükellefi OLMALI
Müşteri: E-fatura mükellefi OLMALI (B2B)
Tutar: Genellikle > 12.000 TL
E-Fatura Sistemi: İşyerin e-fatura platformunda fatura önceden oluşturulmuş OLMALI
Seri Numarası:
GIBveyaARGSbaşlayan belge numarası
Eğer müşteri kurumsal değilse → documentType: 9007 (E-Arşiv Bilgi Fişi)
Otel Minibar ve Oda Servisi (Çoklu Gelir Merkezi)
Soru A: Farklı günlerde farklı gelir merkezlerinde oluşan harcamalar check-out sırasında tek bir sepette birleştirilerek OKC'ye gönderilebilir mi? Soru B: Her gelir merkezi için ayrı kısım (sectionNo) gerekiyor mu? Otel için önerilen kısım yapısı nedir?
✅ CEVAPLAR
A - Konsolide Sepet
✅ EVET
Farklı gelir merkezlerinden harcamalar tek sepette birleştirilebilir.
B - Ayrı sectionNo
✅ EVET
Her gelir merkezi (minibar, oda servisi, SPA) ayrı sectionNo almalı.
Otel Kısım Yapısı (Önerilen)
Code Yapısı
JSON Örneği
Etkinlik Kaparosu ve Bakiye Tahsilatı
Soru: Adım 2'de düzenlenen e-Arşiv fişindeki toplam tutar, kaparo tutarını dahil mi etmeli, hariç mi tutmalı? Bakiye hesabı fatura numarasına mı yoksa basketID'ye mi bağlanıyor?
✅ CEVAP
Kaparo Tutar Dahil mi?
✅ Adım 2'de HARIÇ tutulmalı. Sepet toplamı = Tamam Hizmet Tutarı (kaparo YOK).
Bakiye Hesabı Bağlantısı
basketID'ye bağlanmalı (veritabanı tutucu) ve referans olarak fatura no'su kullanılmalı.
Süreç Detayları
Adım 1: Kaparo (documentType: 9000)
Kaydedilecek:
basketID:
dugun-kaparo-2025-089-uuidMüşteri: Mehmet & Ayşe Yılmaz
Kaparo Tutarı: 50.000 TL
Bulamış Tutar: 0 TL (kaparo sadece ayrılır)
Adım 2: Etkinlik Günü — Ana Fiş (documentType: 9007)
Kaydedilecek:
basketID:
dugun-etkinlik-2025-089-uuidReferans: dugun-kaparo-2025-089 (kaparo için)
Fiş Tutarı: 1.700.000 TL (kaparo HARİÇ)
Fatura No: ARS2025000089000
Adım 3: Bakiye Tahsilatı (documentType: 9002)
Kaydedilecek:
basketID:
dugun-bakiye-2025-089-uuidReferans: dugun-etkinlik-2025-089 (ana fiş için)
Bakiye Tutarı: 1.200.000 TL
Hesaplandı: 1.700.000 TL (Adım 2) + 50.000 TL (kaparo) - 550.000 TL (arzu edilen ek harç) = toplam
Kod Yapısı
Önemli: Tutar Hesaplaması
Referans: Fiscal Parameters Yapısı
Sepet oluşturmadan ÖNCE çağrılması gereken Get Fiscal Parameters API'sinin döndürdüğü yapı:
Özet: Kritik Kurallar
Get Fiscal Parameters MUTLAK
Sepet oluşturmadan önce
400 - Kısım yok
Unique basketID
UUID v4 kullanın
409 - Çokluk
Polling YASAK
Webhook kullanın
429 - Rate limit
LOCKED sepet güncelleme
Güncelleme yapılmaz
422 - Kilitli
documentType doğru seçim
Tutar bazında otomatik
400 - Yanlış type
Webhook MUTLAK
Ödeme sonucu alınır
Sonuç alınamaz
Items = sectionNo'ye ait
Fiscal params'ten al
400 - Hatalı section
KDV dahil fatura eşiği
12.000 TL (2026)
Fiş reddedilir
Last updated

