Skip to main content
Fatura, bir satıştan e-belge entegratörü (Nilvera veya NES) üzerinden kestiğiniz resmî belgedir. Fatura her zaman bir satıştan doğar; taslak olarak kaydedebilir ya da hemen gönderebilirsiniz. Belgeyi hangi vergi kimliğiyle kesecekleri ise fatura hesabı belirler: kliniğin ya da doktorun entegratördeki kimliği ve API anahtarı.
Şu an yalnızca e-SMM (Serbest Meslek Makbuzu) kesilir. Hesap türü olarak einvoice (E-Fatura) seçilebilir, ancak bu türdeki bir hesapla fatura, seri veya kontör çağrıları *_FAILED hata koduyla sonuçlanır. API ile oluşturduğunuz her faturanın document_class değeri SMM’dir. EFATURA ve EARSIV kayıtları yalnızca içe aktarılan verilerde görünür.
Tüm istekler Authorization: Bearer <access_token> ve X-Tenant: <tenant_id> başlıklarını taşır. Okuma endpoint’leri invoices:read, yazma endpoint’leri invoices:write scope’unu ister. Bkz. Scope’lar. Satış tarafı için Satışlar sayfasına, uçtan uca akış için Satış, tahsilat ve fatura rehberi sayfasına bakın.

Endpoint özeti

İzinler istek doğrulanmadan önce denetlenir. Eksik scope veya izin 403 FORBIDDEN döner. Faturalar değiştirilemez: PUT/PATCH /invoices/{id} ve DELETE /invoices/{id} yoktur. Başka klinikteki bir kimlik her zaman 404 RESOURCE_NOT_FOUND döner.

Fatura nesnesi

Yanıt sale_id, customer_id ve invoice_account_id alanlarını döndürmez. Satış temsilcisi izolasyonu açıksa ve Hasta başka bir temsilciye atanmış bir lead ise record_state değeri {"is_read_only": true, "reason_code": "LEAD_NOT_ASSIGNED"} olur. Bu durumda alıcı adı, vergi numarası, e-posta ve Hasta kimlik alanları maskelenir. Bkz. İzinler ve görünürlük.

Listeleme

GET /invoices yalnızca bu kaynağa özgü filtreleri destekler. Genel kurallar için Sayfalama ve Filtreleme ve sıralama sayfalarına bakın. View:Invoice iznine sahip herkes klinikteki tüm faturaları görür; faturalar için “tümünü görme” izni ayrıca yoktur.

Durum akışı

query-status yerel durumu entegratörün durumuyla değiştirir. Entegratör kodları şöyle eşlenir: bilinmiyor, bekliyor veya beklemede waiting; başarılı veya tamamlandı success; hata veya başarısız error; iptal cancelled. Tanınmayan kodlar waiting olur.
Durum sorgusu cancelled ya da draft durumunu entegratörün işlem durumuyla ezebilir. Nilvera hiçbir zaman cancelled döndürmez; iptal edilmiş bir Nilvera e-SMM’sini yeniden sorguladığınızda status=success ve is_cancelled=true görürsünüz. İptal bilgisi için her zaman is_cancelled alanına güvenin.
Toplu sorgu (POST /invoices/query-status) ids dizisinde 1–100 kimlik alır ve her zaman 200 döner. Başarısız kayıtlar results[].message alanında bildirilir, HTTP hatası olarak değil:

Fatura oluşturma

POST /api/v1/invoices bir satıştan fatura keser. Flextell önce entegratörü çağırır, ardından yerel kaydı yazar. Satış görünürlüğü için ViewAllSales:Sale iznine sahip değilseniz satışın size ait olması ya da Hastanın lead’inin size atanmış olması gerekir.
Başarılı yanıt 201 ve fatura nesnesidir.

Satır ve tutar kuralları

  • custom_line_items göndermezseniz her satış kalemi bir satır olur. Gönderirseniz her satır quantity × unit_price olarak hesaplanır.
  • Tutarı 0 veya altındaki satırlar atılır. Hiç satır kalmazsa fatura oluşmaz; bu yüzden 0 TL’lik satışa e-SMM kesilemez.
  • Satır tutarı, Hastadan KDV dahil ve stopaj düşülmüş olarak tahsil edilen tutar sayılır. Brüt ücret tutar / (1 − stopaj + KDV) ile bulunur; KDV ve stopaj brüt ücretten hesaplanır. Stopaj uygulamak Hastanın ödediği tutarı değiştirmez, vergi matrahını büyütür.
  • Örnek: %10 KDV ile 50.000 TL için brüt 45.454,55, KDV 4.545,46, ödenecek 50.000,00. %20 stopajla brüt 55.555,56, KDV 5.555,56, stopaj 11.111,11, ödenecek yine 50.000,00.
  • Yabancı para birimli satışta satışın exchange_rate değeri 0’dan büyük olmalıdır. Aksi halde istek INVOICE_CREATE_FAILED ile döner.
  • Eksik Hasta bilgisi (ad, kimlik, adres) için XML’de varsayılanlar kullanılır: şehir İstanbul, ülke Türkiye, ilçe Merkez, Hasta adı Hasta. Kimlik numarası olmayan Hastada entegratör belgeyi reddedebilir; faturalamadan önce bilgileri tamamlayın.
  • Kimlik numarası 11 haneliyse TCKN, diğer durumlarda VKN sayılır.

Önizleme

POST /invoices/preview oluşturma ile aynı gövdeyi alır (mode hariç) ve hiçbir şey kaydetmeden { "sale_id", "invoice_account_id", "html" } döner. Kesmeden önce kontrol etmek için kullanın.
Nilvera’nın ayrı bir taslak uç noktası yoktur; mode=draft isteği Nilvera hesabında da entegratöre gönderim çağrısı yapar ve belgenin bu durumda kesinleşip kesinleşmediği doğrulanmamıştır. Nilvera hesabıyla kesim yapacaksanız önce /invoices/preview ile önizleyin ve draft modunu kesin gönderim gibi ele alın.

Taslağı kesinleştirme

POST /invoices/{id}/send taslağı gönderir. Taslak oluşturulduğu andaki XML ile gönderilir; satışta sonradan yaptığınız değişiklikler yansımaz. Zaten kesinleştirilmiş bir faturada INVOICE_SEND_FAILED ve Bu fatura zaten kesinleştirilmiş. mesajını alırsınız. Entegratör “zaten kayıtlı” derse mesaj, durumu query-status ile kontrol etmenizi söyler.

Yan etkiler

  • Satış durumu. Gönderilmiş bir fatura (oluşturma, kesinleştirme veya iptal geri alma sonrası) kalan faturalanabilir tutarı sıfıra indirirse satış invoiced (Faturalandırıldı) olur. Taslaklar satışı değiştirmez. Faturalanmış satış silinemez.
  • Stok. Klinik ayarı Stok Düşürme Modu Fatura Kesildiğinde ise gönderilmiş fatura, satıştaki tüm ürün kalemlerini stoktan düşer (yalnızca özel satırları değil). Stok yetersizse işlem başarısız olur. Bkz. Depolar ve stok.
  • Lead kuralı. Lead aşamasındaki Hasta için fatura kesilemez; istek INVOICE_CREATE_FAILED döner.

İptal ve geri alma

İptal. POST /invoices/{id}/cancel gönderilmiş faturayı iptal eder. Başarıda status=cancelled, is_cancelled=true olur ve satış invoiced idiyse completed durumuna döner (satışa ait başka geçerli fatura kalsa bile). İptal stoku geri yükler. Geri alma. POST /invoices/{id}/revert-cancel iptali geri alır: status=sent, is_cancelled=false. Kalan faturalanabilir tutar sıfırsa satış yeniden invoiced olur. Stok yeniden düşülmez. Başarısızlıkta mesaj, hata zarfının message alanında gelir. Entegratör kaynaklı hatalar şöyle çevrilir: zaman aşımı Bağlantı zaman aşımına uğradı. Lütfen tekrar deneyin., yetkilendirme hatası API yetkilendirmesi başarısız. Fatura hesabı ayarlarını kontrol edin., bulunamadı Belge bulunamadı.; diğer durumlarda entegratörün ham metni döner. archive ve DELETE .../archive yalnızca Flextell’deki arşiv bayrağını değiştirir, entegratörü çağırmaz ve tekrarlanabilir (idempotent). Fatura silme yoktur; faturalar yasal saklama kapsamındadır ve Hasta imha talebiyle silinmez.

Belgeler

E-posta geçmişindeki status değerleri sent, read, unread ve failed’dir; status_label her zaman Türkçedir (Gönderildi, Okundu, Okunmadı, Başarısız, Bilinmiyor). Önizleme, PDF ve XML endpoint’leri Download:Invoice, e-posta gönderme SendEmail:Invoice, e-posta geçmişi View:Invoice iznini ister.

Fatura hesapları ve seriler

Fatura hesabı, belgeyi kesen tarafın vergi kimliğini ve entegratör bağlantısını tutar. Hesap oluşturmadan önce entegratörü seçin: integration_id, tipi fatura olan ve aktif bir entegratöre (Nilvera veya NES) ait olmalıdır.

Hesap nesnesi

API anahtarı şifreli saklanır ve hiçbir yanıtta dönmez.

Hesap oluşturma ve güncelleme

POST /invoices/accounts gövdesinde integration_id, party_type, document_type, tax_number ve extra_fields zorunludur. Bireysel hesapta name ve surname, kurumsal hesapta title zorunludur. extra_fields, entegratörün istediği her anahtarı içermelidir; Nilvera ve NES için bu API_KEY (API Anahtarı) alanıdır.
PUT /invoices/accounts/{id} aynı gövdeyi alır, ancak integration_id göndermek 422 verir. Güncelleme tam değiştirme gibi davranır: göndermediğiniz isteğe bağlı alanlar (tax_office, adres, iletişim) null, boolean alanlar false ve withholding_rate_percent 0 olur. Yalnızca extra_fields birleştirilir; göndermediğiniz anahtar mevcut değerini korur. party_type değiştirirseniz diğer türün ad alanları temizlenir. PATCH /invoices/accounts/{id}/default-series yalnızca default_series alır (zorunlu, en çok 255 karakter). Değer entegratörde doğrulanmaz; GET /invoices/series listesinden seçin. DELETE /invoices/accounts/{id} hesabı kalıcı siler. Hesaptan kesilmiş fatura varsa 422 INVOICE_ACCOUNT_HAS_INVOICES döner. Doktorların preferred_invoice_account_id değeri null olur.

Seri ve kontör

GET /invoices/series?invoice_account_id=7 entegratördeki aktif serileri döner:
GET /invoices/credit?invoice_account_id=7 entegratör kontörünü döner: { "total", "used", "remaining", "percentage" }. Flextell kontörü kendisi saymaz, yalnızca entegratörün bakiyesini okur. Seriler 5 dakika, kontör bilgisi 1 dakika önbellekte tutulabilir; hesabı güncellediğinizde veya varsayılan seriyi değiştirdiğinizde önbellek temizlenir. Her iki çağrı da entegratöre bağlıdır; API anahtarı eksik ya da yanlışsa, entegratör yanıt vermezse veya hesap einvoice türündeyse INVOICE_SERIES_LOOKUP_FAILED / INVOICE_CREDIT_LOOKUP_FAILED döner.

Varsayılan hesap

Satış detayındaki default_invoice_account_id alanı faturalarken önerilen hesabı verir. Sıra: satışı yapan kullanıcının tercih ettiği hesap; yoksa satış kalemlerindeki tüm doktorların ortak tercihi (doktorlar farklı hesap seçtiyse tahmin edilmez); yoksa klinik ayarı default_invoice_account_id; yoksa null. Aday hesabın kliniğe ait ve entegratörünün aktif olması gerekir. Doktor tercihi için Doktorlar, asistanlar, odalar, klinik ayarı için Ayarlar sayfasına bakın.

Hata kodları

Genel hata yapısı için Hata kodları sayfasına bakın. Servis belirli bir neden döndürdüğünde, o Türkçe metin varsayılan mesajın yerine geçer. Toplu durum sorgusu, önizleme ve okuma endpoint’leri LEAD_NOT_ASSIGNED denetimi yapmaz.

İlgili sayfalar

Satışlar

Faturanın kaynağı olan satış kayıtları.

Satış, tahsilat ve fatura rehberi

Satıştan faturaya uçtan uca akış.

Faturalar (panel)

Aynı kayıtların panel ekranı.

İzinler ve görünürlük

Lead kısıtı ve maskeleme kuralları.