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 izin403 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.
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.
201 ve fatura nesnesidir.
Satır ve tutar kuralları
custom_line_itemsgöndermezseniz her satış kalemi bir satır olur. Gönderirseniz her satırquantity × unit_priceolarak 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_ratedeğeri 0’dan büyük olmalıdır. Aksi halde istekINVOICE_CREATE_FAILEDile döner. - Eksik Hasta bilgisi (ad, kimlik, adres) için XML’de varsayılanlar kullanılır: şehir
İstanbul, ülkeTürkiye, ilçeMerkez, 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.
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ğindeise 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_FAILEDdö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ındakidefault_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ı.