> ## 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.

# Randevular API

> Hasta randevularını oluşturma, güncelleme, listeleme ve silme için endpoint'ler.

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

## Endpoint özeti

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

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

## Randevu kavramı

Appointment (randevu), bir hastanın belirli bir tarih/saatte belirli bir doktorla — ve isteğe bağlı olarak oda ve asistan ile — ilişkilendirilmiş ziyaretini temsil eder.

Bir randevu; hasta, doktor, tedaviler, zaman, durum, asistan ve oda bilgileri ile birlikte yönetilir.

## İş kuralları

<Note>
  `code` alanı sistem tarafından otomatik üretilir; istek gövdesinde gönderilmez.
</Note>

<Note>
  `scheduled_at` alanı, tenant'ın zaman dilimine göre parse edilir ve UTC olarak saklanır. Tarih filtreleri de tenant zaman dilimine göre UTC'ye çevrilir.
</Note>

<Warning>
  `treatments[]` içindeki her tedavi, hem ilgili tenant'a ait hem de **seçilen doktora atanmış** olmalıdır. Aksi halde: `The selected treatment is not assigned to the selected doctor.`
</Warning>

<Warning>
  `parent_appointment_id` **oluşturma sonrasında değiştirilemez.**

  Hata: `parent_appointment_id cannot be changed after creation.`
</Warning>

<Warning>
  `customer_id` yalnızca şu koşulda değiştirilebilir: randevu bir **parent** appointment olmalı **ve** hiç child appointment'ı olmamalıdır.

  Aksi halde: `Customer can only be changed for parent appointments without any child appointments.`
</Warning>

## Silme kuralları

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

Randevu soft delete edilir.

<Warning>
  Child appointment varsa silinemez. Hata: `Bu randevunun alt randevuları olduğu için silinemez.`
</Warning>

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

<Warning>
  Geri alınamaz. Child appointment varsa kalıcı olarak da silinemez.
</Warning>

## Yetkilendirme

### Uygulama izinleri (permissions)

| İşlem        | Permission                |
| ------------ | ------------------------- |
| Listeleme    | `ViewAny:Appointment`     |
| Detay        | `View:Appointment`        |
| Oluşturma    | `Create:Appointment`      |
| Güncelleme   | `Update:Appointment`      |
| Silme        | `Delete:Appointment`      |
| Kalıcı silme | `ForceDelete:Appointment` |

### Token scope'ları (Passport)

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