Skip to main content
Satış, bir Hastaya sattığınız tedavi ve ürünlerin fiyatlandırılmış listesidir. Satış alacağı Hastanın cari hesabına işlenir; Tahsilatlar bu alacağa karşı kaydedilir. Bu sayfa satış kayıtlarını, kalemlerini, ödemelerini ve satış listesinin dışa aktarımını yöneten endpoint’leri anlatır. Fatura kesme faturalar kaynağındadır (Faturalar). Teklifi satışa çevirme için Teklifler sayfasına bakın. Uçtan uca akış için Satış, tahsilat ve fatura rehberi sayfasını izleyin.
Tüm istekler Authorization: Bearer <access_token> ve X-Tenant: <tenant_id> başlıklarını taşır. Okuma endpoint’leri sales:read, yazma endpoint’leri sales:write scope’unu ister. Scope’lar için Scope’lar sayfasına bakın.

Endpoint özeti

ViewAllSales:Sale iznine sahip değilseniz yalnızca kendi adınıza açılmış satışları veya atandığınız lead’e ait Hastaların satışlarını görürsünüz. Bu kapsamın dışındaki bir satış 404 RESOURCE_NOT_FOUND döner, 403 dönmez.

Satış nesnesi

Liste yanıtında items her kalem için order, itemable_type, itemable_id, itemable_name, quantity ve total_price alanlarını taşır. Detay yanıtı ayrıca staff, itemable {id, name} ve assistants[].staff döner. payments alanı payment türündeki (Hastaya yapılan) ödemeleri saymaz. cash dışındaki yöntemler şöyle toplanır: credit_card ve clinic_credit_card credit_card altında, bank_account kendi altında, transfer_cash, other, private_insurance ve sgk ise other altında yer alır.

Durumlar

API durumlar arasında geçiş kuralı uygulamaz; her durum değerini kabul eder. Tek istisna, invoiced olmuş bir satıştır (bkz. Faturalanmış satış kuralları).

Oluşturma ve kalemler

POST /api/v1/sales bir satış oluşturur ve 201 ile detay nesnesini döner. Tüm işlem tek bir veritabanı işleminde çalışır.

Gövde alanları

Kalem alanları

İki indirim birlikte uygulanır: tutar indirimi ile ara toplamın yüzdesi. Satış başlığında indirim yoktur. Kalem sırası, gönderdiğiniz sıraya göre 0’dan başlayarak verilir.

Toplamlar sunucuda hesaplanır

Sunucu kalem toplamlarını her zaman yeniden hesaplar. İstekte gönderdiğiniz sub_total, total_discount ve total_tax değerleri yok sayılır. Klinik ayarlarında kalem toplamının korunması açıksa gönderdiğiniz total_price korunur. Bu durumda fark max(0.05, 0.02 × quantity) değerini aşarsa items.N.total_price alanında 422 alırsınız. Bu ayarı GET /api/v1/sales/form-metadata yanıtındaki preserve_item_total_price alanından okuyun. form-metadata ayrıca base_currency, default_tax_rate, override_sale_tax_rate ve stock_deduction_mode alanlarını döner. KDV oranı geçersiz kılma ayarını sunucu zorlamaz; uygulamak istemcinin işidir.

Taksitli satış

installments[] içindeki her satır amount (en az 0,01), due_date ve isteğe bağlı description (en çok 255 karakter) alır. Taksit tutarlarının toplamı satış toplamına eşit olmalıdır (±0,01); aksi halde installments alanında 422 döner. Taksit planını sonradan PUT ile oluşturamaz veya değiştiremezsiniz.

Ürün setinden kalem üretme

GET /api/v1/product-sets/{id}/sale-items bir Ürün setini POST /sales kalem biçimine açar. staff_id boş gelir; göndermeden önce doldurun. Bu endpoint products:read scope’u ve View:ProductSet izni ister.

Güncelleme ve silme

PUT kısmi güncellemedir; göndermediğiniz alanlar değişmez. items gönderirseniz mevcut tüm kalemler ve yardımcı personeller silinip yeniden oluşturulur; kalem kimlikleri değişir. sale_date değişirse alacak hareketlerinin tarihi de taşınır.
Satışta tahsilat veya ödeme kaydı varsa kalemleri değiştirmek alacak hareketini güncellemez. Kalan bakiye eski toplama göre görünmeye devam eder.
DELETE satışı siler ve kalemlerini de siler. Satışa bağlı Hasta hesap hareketleri ve eşleşen kasa/banka hareketleri kalıcı olarak silinir; hesaplar bu hareketleri kaybeder.
Satış oluşturma

Ödemeler

POST /api/v1/sales/{id}/payments satışa Tahsilat veya Hastaya ödeme ekler. İstekte tutar sınırı yoktur: toplam tahsilat satış toplamını aşabilir, kalan bakiye 0’ın altına inmez. installment_number verirseniz satışın taksit planı olmalı, numara planda bulunmalı ve o taksite bağlı tahsilatlar taksit tutarını aşmamalıdır. Taksit seçimi taksitli satışta bile zorunlu değildir. Yanıt sale_id, remaining_balance ve oluşan transaction nesnesini içerir.
Tahsilat ekleme

Hesap hareketleri

GET /sales/{id}/transactions satışın tüm hareketlerini sayfalı döner. Filtreler: search (açıklama ve fatura numarası), type (sale, sale_invoice, collection, payment, opening_balance, purchase_invoice). sort_by değerleri: transaction_date (varsayılan), created_at, debit, credit, due_date, invoice_number, amount, account. sort_order varsayılanı desc. Yanıtın meta.collections_by_account alanı, filtreden bağımsız olarak satışın tüm tahsilatlarını hesaba göre gruplar. PUT /sales/{id}/transactions/{transactionId} yalnızca collection türündeki bir hareketin account_id veya payment_method değerini değiştirir; tutar, tarih ve fatura numarası değişmez. En az birini gönderin. Hesap kliniğe ait, aktif ve tahsilatla aynı para biriminde olmalıdır. DELETE /sales/{id}/transactions/{transactionId} herhangi bir hareketi siler; Pay:Sale değil Delete:Sale ister. delete_related_transactions varsayılan olarak true olup eşleşen kasa/banka hareketini de siler. false gönderirseniz hesap hareketi yerinde kalır. Yanıt güncel remaining_balance değerini içerir. Hesaplar için Hesaplar ve işlemler sayfasına bakın.

Stoktan düşme

POST /sales/{id}/stock-deduct yalnızca klinikte stok düşme modu Hiçbir Zaman (Manuel) (never) ise çalışır. Diğer modlarda stok otomatik düşer ve endpoint 422 STOCK_DEDUCTION_DISABLED döner. Düşme satış başına bir kez yapılır. Stok kuralları için Depolar ve stok sayfasına bakın.

İstatistikler ve dışa aktarma

Liste filtreleri

GET /api/v1/sales genel sayfalama (per_page 1–100, varsayılan 15) ve filtreleme ve sıralama kurallarını kullanır. Bu kaynağa özgü filtreler: Yanıtın meta.totals alanı filtreye uyan tüm satışların para birimine göre toplamını verir: currency_id, currency_code, sales, collections, balance, overdue. Farklı para birimleri birbirine çevrilmez. Her satışın bakiyesi 0’a sabitlenir; fazla ödenmiş bir satış başka satışın borcunu azaltmaz. meta.timezone kliniğin saat dilimini verir.

İstatistikler

GET /api/v1/sales/stats klinik genelindeki özeti döner ve ViewAllSales:Sale ister. View:Sale yetmez. days parametresi 2–90 arasıdır (varsayılan 7). sales_amount, sales_count ve collections_amount aynı yapıdadır: labels[] (gg.aa biçimi), data[], current (bugün), previous (dün) ve change_percentage. Dün değeri 0 ise change_percentage null döner. Seriler klinik saat diliminde bugünde biter. Yanıt 5 dakikaya kadar önbellekten gelebilir.

Dışa aktarma

GET /api/v1/sales/export liste filtrelerinin tümünü kabul eder ve ek olarak format alır: excel (varsayılan) veya pdf. Dışa aktarma her zaman asenkrondur. İstek 202 döner:
Dosya hazır olunca kullanıcıya bildirimle indirme bağlantısı gelir. Bağlantı 24 saat geçerlidir. Süresi dolan bağlantı için GET /api/v1/notifications/system/{id}/download-url ile yenisini alın; bu da Export:Sale izni ister. Dosya, aynı filtrelerle listenin döndüreceği satırları içerir ve ViewAllSales kapsamınıza uyar. Tablo sıralaması yansımaz; satırlar sale_date azalan sırayla gelir. Dosya dili klinik diline göre belirlenir, Accept-Language başlığına göre değil.
Dışa aktarma sınırı klinik ve kullanıcı başına saatte 10 istektir. Aşarsanız 429 ve Retry-After başlığı alırsınız. Genel sınırlar için Oran sınırları sayfasına bakın.
Her iki biçimde de kalem başına bir satır bulunur; satış düzeyindeki hücreler satışın ilk satırında yer alır. Sütunlar: Tarih, Danışan No, Danışan, Kimlik/Pasaport No, Ülke, Personel, Yardımcı Personel, İçerik, Adet, Tutar, Toplam, Tahsilat, Bakiye. Excel dosyasında ayrıca Kur ve Not sütunları bulunur. PDF dosyası Genel Özet, Satış Detayları ve Özet Tablolar bölümlerinden oluşur. Farklı para birimleri toplanmaz, yan yana gösterilir.

Faturalanmış satış kuralları

Durumu invoiced olan satış kilitlidir.
  • PUT yalnızca notes alanını kabul eder. customer_id, currency_id, exchange_rate, status, user_id veya items gönderirseniz sale alanında 422 alırsınız.
  • DELETE 422 SALE_INVOICED döner: Bu satış faturalandırıldığı için artık silinemez.
Faturalama için ek olarak CreateDocument:Sale ve Create:Invoice izinleri gerekir. Ayrıntı için Faturalar sayfasına bakın.

Hata kodları

Tüm satış endpoint’leri ortak olarak 401 UNAUTHENTICATED, 403 FORBIDDEN, 422 VALIDATION_FAILED ve 429 TOO_MANY_REQUESTS dönebilir. Genel liste için Hata kodları sayfasına bakın. Ödeme doğrulama hataları 422 ile alan düzeyinde döner: Bu satışın taksit planı yok., Taksit numarası 1 ile :max arasında olmalıdır., :number. taksite girilen toplam ödeme taksit tutarını aşamaz., Seçilen hesap bu işletmeye ait değil., Seçilen hesap aktif değil..

İzinler

Görünürlük kuralları için İzinler ve görünürlük sayfasına bakın.