Skip to main content
Bu rehber, bir Hastaya satış kaydetmekten o satışın faturasını kesmeye kadar olan akışı tek bir örnek üzerinden gösterir: satışı oluşturur, iki parça tahsilat kaydeder, e-SMM keser ve faturanın durumunu izlersiniz. Rehber entegratörler içindir; alan alan ayrıntı için Satışlar, Hesaplar ve işlemler ve Faturalar sayfalarına bakın.

Senaryo

Ayşe Yılmaz (Hasta 123) bir Tedavi (67) için gelir. Tedavi KDV hariç 2.500 TL’dir, %20 KDV uygulanır ve Hastaya %10 indirim yapılır. Hasta 1.000 TL’yi nakit, kalanı kredi kartıyla öder. Ardından klinik satış için e-SMM keser. Örnekteki tutarlar şöyle hesaplanır:

Ön koşullar

ViewAllSales:Sale izniniz yoksa yalnızca kendi satışlarınızı ya da Hastanın lead’i size atanmış satışları görürsünüz. Kapsam dışındaki satış 403 değil 404 döner.

Satış oluşturma

POST /api/v1/sales satışı ve kalemlerini tek işlemde oluşturur. Sunucu kalem toplamlarını her zaman kendisi hesaplar; gönderdiğiniz sub_total, total_discount ve total_tax değerleri yok sayılır. Para birimi için currency_id gerekir. Kimliği GET /api/v1/sales/form-metadata yanıtındaki base_currency alanından alabilirsiniz. Baz para biriminde exchange_rate değerini 1 gönderin.
Satış oluşturma
Başarılı yanıt 201 ve satış detayıdır. Yanıttaki id değerini sonraki adımlarda kullanın. Bu rehberde satış kimliği 123, sonradan oluşacak fatura kimliği 456 olarak kabul edilir; tüm kimlikler örnektir.
unit_price KDV hariçtir. staff_id, discount_amount ve discount_percentage her kalemde zorunludur. tax_rate yalnızca 0, 1, 10 veya 20 olabilir.
Satış bu noktada Hastanın alacağı olarak kaydedilir; tahsilat henüz yoktur. Bu endpoint ödeme almaz. Taksitli satış için is_installment_sale ve installments[] alanlarını kullanın; taksit planını sonradan PUT ile değiştiremezsiniz.

Ödeme kaydetme

POST /api/v1/sales/{id}/payments satışa tahsilat ekler. amount ve payment_method zorunludur; type göndermezseniz collection (Tahsilat) olur. Ödeme yöntemi değerlerini GET /api/v1/payment-methods ile listeleyebilirsiniz.
1

İlk tahsilat: 1.000 TL nakit

Nakit tahsilat
Yanıtta remaining_balance değeri 1700 olur.
2

İkinci tahsilat: 1.700 TL kredi kartı, hesaba işlenerek

account_id verirseniz tahsilat kasa/banka hesabına da işlenir. Hesabın para birimi currency_id ile farklıysa hesabın para birimi geçerli olur.
Kredi kartı tahsilatı
Yanıtta remaining_balance değeri 0 olur.
3

Hareketleri kontrol edin

GET /api/v1/sales/123/transactions satışın tüm hareketlerini döner. meta.collections_by_account alanı tahsilatları hesaba göre gruplar.
Her yanıt sale_id, remaining_balance ve oluşan transaction nesnesini içerir. Tahsilat ve Hastaya ödeme aynı endpoint’ten geçer: type değerini payment yaparsanız para Hastaya geri ödenir.
Satışa tahsilat girdikten sonra kalemleri PUT ile değiştirirseniz alacak hareketi güncellenmez ve kalan bakiye eski toplama göre görünür. Tutar değişecekse kalemleri tahsilattan önce güncelleyin.

Fatura oluşturma

Fatura her zaman bir satıştan doğar. Flextell önce e-belge entegratörünü çağırır, sonra yerel kaydı yazar.
Şu an yalnızca e-SMM kesilir. einvoice (E-Fatura) türündeki bir hesapla seri, kontör ve fatura çağrıları *_FAILED koduyla sonuçlanır. API ile oluşturduğunuz her faturanın document_class değeri SMM’dir.
1

Fatura hesabını belirleyin

GET /api/v1/sales/123 yanıtındaki default_invoice_account_id önerilen hesabı verir; değer null olabilir. null ise hesapları listeleyin:
Hesapları listeleme
Bu rehberde seçilen hesap 7’dir.
2

Seriyi seçin

Seri listesi
Yanıt, seri adlarının haritasıdır ({"invoice_account_id": 7, "series": {"SMM": "SMM"}}). Seçtiğiniz adı series_name olarak gönderin. Seriler 5 dakika önbellekte tutulabilir.
3

Önizleyin

POST /api/v1/invoices/preview, oluşturma ile aynı gövdeyi alır (mode hariç) ve hiçbir şey kaydetmeden html döner.
Önizleme
4

Faturayı kesin

mode değerini send yapın. draft taslak üretir ve satışın durumunu değiştirmez. Nilvera hesaplarında taslak için ayrı bir uç nokta yoktur; draft istekleri de entegratörün gönderim uç noktasına gider. Bu yüzden Nilvera ile çalışıyorsanız draft yerine önce önizleme kullanın.
Fatura kesme
Başarılı yanıt 201 ve fatura nesnesidir; status değeri sent olur.
custom_line_items göndermezseniz her satış kalemi bir fatura satırı olur. Satır tutarı, Hastadan KDV dahil tahsil edilen tutar sayılır. Örnekte 2.700 TL için brüt ücret 2.250 TL, KDV 450 TL, ödenecek toplam 2.700 TL’dir. global_withholding_rate (0 ile 1 arası kesir) ve diğer alanlar için Faturalar sayfasına bakın.
Kimlik numarası olmayan Hastada entegratör belgeyi reddedebilir. Faturalamadan önce Hastanın adını, kimlik numarasını ve adresini Hastalar kaynağından tamamlayın. Aynı satışa daha önce fatura kesilip kesilmediğini GET /api/v1/invoices?sale_id=123 ile kontrol edin.
Aynı akışı panelden yürütmek için Tahsilat ve Faturalaştırma sayfalarına bakın.

Fatura durumunu izleme

Fatura sent durumunda kesinleşir; entegratörün işlemi tamamlaması sonradan görünür. Güncel durumu entegratörden almak için sorgulayın:
Durum sorgusu
Birden çok faturayı POST /invoices/query-status ile toplu sorgulayabilirsiniz; ids dizisi 1 ile 100 arası kimlik alır ve yanıt her zaman 200 döner. Başarısız kayıtlar results[].message alanında bildirilir.
İptal bilgisi için status yerine is_cancelled alanına bakın. Durum sorgusu cancelled ya da draft değerini entegratörün işlem durumuyla ezebilir; iptal edilmiş bir Nilvera e-SMM’si yeniden sorgulandığında status=success ve is_cancelled=true görürsünüz.
Satışın kendisini de izleyin. Gönderilmiş faturalar satışın tamamını karşılayınca satış otomatik olarak invoiced (Faturalandırıldı) olur. Bu satış kilitlidir: PUT yalnızca notes alanını kabul eder, DELETE 422 SALE_INVOICED döner. Taslak faturalar satışı değiştirmez; taslağı POST /invoices/{id}/send ile kesinleştirdiğinizde satış durumu güncellenir. Faturayı iptal ederseniz (POST /invoices/{id}/cancel) invoiced olan satış completed durumuna döner. İptali POST /invoices/{id}/revert-cancel ile geri alırsanız ve kalan faturalanabilir tutar sıfırsa satış yeniden invoiced olur.

Hata durumları

Hata gövdesi success: false, error_code ve message alanlarını taşır. Kodunuzu message metnine göre değil error_code değerine göre dallandırın. Genel liste için Hata kodları sayfasına bakın. INVOICE_CREATE_FAILED yanıtı gerçek nedeni taşımaz. Şu nedenleri sırayla eleyin:
  • Tutarı sıfır olan satış: 0 TL’lik satışa e-SMM kesilemez.
  • Yabancı para birimli satışta exchange_rate 0’dan büyük değil.
  • Fatura hesabında API anahtarı yok ya da hesap türü E-Fatura.
  • Lead aşamasındaki Hasta.
  • Klinikte stok düşme modu Fatura Kesildiğinde ve stok yetersiz. Sunucu bu durumda Yetersiz stok: <ürün> (Depo No: <depo>) hatasını üretir; yanıtta yine de yalnızca genel mesaj görürsünüz.
POST /sales, POST /sales/{id}/payments ve POST /invoices idempotency anahtarını desteklemez. Zaman aşımından sonra isteği körlemesine tekrarlarsanız ikinci bir satış, ikinci bir tahsilat ya da ikinci bir fatura oluşabilir. Tekrar etmeden önce GET /sales?customer_id=123, GET /sales/{id}/transactions ya da GET /invoices?sale_id=123 ile kaydın oluşup oluşmadığını kontrol edin.
Klinik aboneliği ya da kurulumu nedeniyle kilitliyse bu isteklerin hepsi 402 veya 428 ile döner. Bkz. Abonelik ve kurulum kilitleri.

İlgili sayfalar

Satışlar

Satış nesnesi, durumlar, listeleme ve dışa aktarma.

Hesaplar ve işlemler

Kasa/banka hesapları, hasta işlemleri ve bakiyeler.

Faturalar

Fatura nesnesi, iptal, PDF/XML ve fatura hesapları.

e-Fatura entegrasyonu

Entegratör hesabı ekleme, seriler ve kontör.