> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flextell.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Tedaviler API

> Klinikte uygulanan hizmetleri/işlemleri ve bunlara bağlı seans planlarını yönetmek için endpoint'ler.

<Note>
  Tüm isteklerde `X-Tenant` header'ı **zorunludur**. İşlemler ve listelemeler sadece belirtilen tenant'a ait tedaviler ile sınırlandırılmıştır.
</Note>

## Endpoint özeti

| Metot    | Endpoint                        | Açıklama                            |
| -------- | ------------------------------- | ----------------------------------- |
| `GET`    | `/api/v1/treatments`            | Tedavileri filtreli olarak listeler |
| `GET`    | `/api/v1/treatments/{id}`       | Tek bir tedaviyi detaylı getirir    |
| `POST`   | `/api/v1/treatments`            | Yeni tedavi oluşturur               |
| `PUT`    | `/api/v1/treatments/{id}`       | Tedaviyi kısmi günceller            |
| `DELETE` | `/api/v1/treatments/{id}`       | Tedaviyi soft delete eder           |
| `DELETE` | `/api/v1/treatments/{id}/force` | Tedaviyi kalıcı olarak siler        |

<Tip>
  Tüm parametreler, alanlar ve örnek istek/yanıtlar için **[API Referansı](/api-reference)** sekmesine bakın.
</Tip>

## Tedavi kavramı

Treatment API'de "tedavi", **klinikte uygulanan bir hizmeti/işlemi** temsil eder.

Her tedavi; adı, fiyatı, KDV oranı, seans sayısı, aktiflik durumu ve opsiyonel olarak bağlı ürünler ile seans planı ile birlikte yönetilir.

## İş kuralları

**`tax_rate`:** Sadece şu değerleri alabilir: `0`, `1`, `10`, `20`.

**Seans planı (`sessions`):** `session > 1` ise `sessions` alanı **zorunludur** ve tam olarak `session` kadar eleman içermelidir.

<Info>
  Seans planı, **çok seanslı tedavilerde** (örneğin ameliyat + kontrol seansları) her seansın sırasını, tipini ve aradaki gün farklarını tarif eder.
</Info>

<Warning>
  `session_order = 1` için seans tipi her zaman `operation` olmalıdır. Bu kural **değiştirilemez**.

  Hata mesajı: `The first session (session_order = 1) must always be of type "operation".`
</Warning>

<Warning>
  **Güncelleme:** `session` değeri değişmiş ve `sessions` gönderilmemişse `422` hata döner.

  Mesaj: `When changing session count, the sessions plan must be provided.`
</Warning>

## Silme kuralları

### Soft delete (`DELETE /api/v1/treatments/{id}`)

<Warning>
  **Özel kural:** Tedavi herhangi bir randevu ile ilişkiliyse silme reddedilir (`422`).

  Hata mesajı: `This treatment cannot be deleted because it is associated with one or more appointments. Please remove the treatment from all appointments before deleting.`
</Warning>

### Force delete (`DELETE /api/v1/treatments/{id}/force`)

<Warning>
  Geri alınamaz.

  **Özel kural:** Tedavi herhangi bir randevu ile ilişkiliyse (**soft delete edilmiş randevular dahil**) kalıcı silme reddedilir (`422`).

  Hata mesajı: `This treatment cannot be permanently deleted because it is associated with one or more appointments. Please remove the treatment from all appointments before deleting.`
</Warning>

## Yetkilendirme

### Uygulama izinleri (permissions)

| İşlem                       | Permission              |
| --------------------------- | ----------------------- |
| Listeleme                   | `ViewAny:Treatment`     |
| Detay / Tek gösterme        | `View:Treatment`        |
| Oluşturma                   | `Create:Treatment`      |
| Güncelleme                  | `Update:Treatment`      |
| Silme (soft delete)         | `Delete:Treatment`      |
| Kalıcı silme (force delete) | `ForceDelete:Treatment` |

### Token scope'ları (Passport)

| İşlem                                              | Scope              |
| -------------------------------------------------- | ------------------ |
| Okuma (`index`, `show`)                            | `treatments:read`  |
| Yazma (`store`, `update`, `delete`, `forceDelete`) | `treatments:write` |
