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

# Hasta notları ve görevleri

> Hastaya ait notları ve görevleri API ile yönetmeyi anlatır.

Not, hasta kaydına eklenen serbest metindir. Görev, başlığı, sorumlusu ve son tarihi olan bir iş kalemidir. İkisi de `/customers/{id}/...` altında çalışır ve `{id}` hasta kimliğidir. Hastanın kendisini yönetmek için [Hastalar](/api/kaynaklar/hastalar) sayfasına bakın. Lead'e ait not ve görevler için [Lead notları ve görevleri](/api/kaynaklar/lead-notlari-ve-gorevleri) sayfasını kullanın.

<Info>
  Her istekte `Authorization: Bearer <access_token>` ve `X-Tenant: <tenant_id>` başlıkları gerekir. Ayrıntı: [Klinikler ve X-Tenant](/api/klinikler-ve-x-tenant).
</Info>

## Endpoint özeti

Taban adres `https://app.flextell.ai/api/v1`. Notlar için scope'ların ikisi birden gerekir. Görevler için yalnızca hasta scope'u yeter.

| Metot | Endpoint | Açıklama | Scope | İzin |
| - | - | - | - | - |
| GET | `/customers/{id}/notes` | Notları listeler | `customers:read` ve `notes:read` | `View:Customer` ve `View:Note` |
| POST | `/customers/{id}/notes` | Not oluşturur | `customers:write` ve `notes:write` | `Update:Customer` ve `Create:Note` |
| GET | `/customers/{id}/notes/{note_id}` | Tek not döner | `customers:read` ve `notes:read` | `View:Customer` ve `View:Note` |
| PUT | `/customers/{id}/notes/{note_id}` | Notu günceller | `customers:write` ve `notes:write` | `Update:Customer` ve `Update:Note` |
| DELETE | `/customers/{id}/notes/{note_id}` | Notu siler | `customers:write` ve `notes:write` | `Update:Customer` ve `Delete:Note` |
| GET | `/customers/{id}/tasks` | Görevleri listeler | `customers:read` | `View:Customer` |
| POST | `/customers/{id}/tasks` | Görev oluşturur | `customers:write` | `Update:Customer` |
| GET | `/customers/{id}/tasks/{taskId}` | Tek görev döner | `customers:read` | `View:Customer` |
| PUT | `/customers/{id}/tasks/{taskId}` | Görevi kısmen günceller | `customers:write` | `Update:Customer` |
| DELETE | `/customers/{id}/tasks/{taskId}` | Görevi siler | `customers:write` | `Update:Customer` |
| POST | `/customers/{id}/tasks/{taskId}/complete` | Görevi tamamlar | `customers:write` | `Update:Customer` |
| POST | `/customers/{id}/tasks/{taskId}/reopen` | Tamamlanmış görevi yeniden açar | `customers:write` | `Update:Customer` |

Notların kendi izinleri vardır (`View:Note`, `Create:Note`, `Update:Note`, `Delete:Note`) ve kapsamı `ViewAllNotes:Note` belirler. Görev işlemleri için ayrı bir görev izni yoktur; hasta izinleri yeter.

Tek kayıt ve işlem yanıtları `{"success": true, "data": ...}` zarfıyla döner. Listeler `success` olmadan `data`, `links` ve `meta` taşır. Ayrıntı: [Yanıt yapısı](/api/istekler/yanit-yapisi).

## Notlar

Bir hastanın not listesi iki kaynaktan oluşur: hastaya doğrudan eklenen notlar ve hastanın henüz dönüşmemiş Lead'ine eklenen notlar. Lead hastaya dönüşürken notları kopyalanır. Kopyalanan not listede bir kez görünür; `origin` alanı `lead`, `source_lead_id` alanı Lead'in kimliğidir.

### Not nesnesi

| Alan | Tür | Açıklama |
| - | - | - |
| `id` | integer | Not kimliği |
| `record_state` | object | `is_read_only` ve `reason_code`. İmha edilmiş hastada `CUSTOMER_ERASED` |
| `content` | string | Not metni |
| `user_id` | integer | Yazar |
| `author` | object | Yazarın `id` ve `name` bilgisi |
| `origin` | string | Notun hastaya mı (`customer`) yoksa Lead'e mi (`lead`) eklendiği |
| `source_lead_id` | integer veya null | Lead'den kopyalanan notlarda Lead kimliği |
| `created_at`, `updated_at`, `deleted_at` | datetime | Zaman damgaları |

### Listeleme

| Parametre | Açıklama |
| - | - |
| `search` | `content` içinde büyük/küçük harf duyarsız metin arar. Aksan duyarsız değildir. |
| `sort_by` | `content`, `created_at` veya `updated_at` |
| `sort_order` | Sıralama yönü |
| `created_at_from`, `created_at_to` | Oluşturma tarihi aralığı |
| `updated_at_from`, `updated_at_to` | Güncelleme tarihi aralığı |
| `per_page`, `page` | Sayfalama. Bkz. [Sayfalama](/api/istekler/sayfalama) |

Tarih aralıkları kliniğin saat dilimindeki gün sınırlarına göre okunur. `_to` yalnızca tarih ise o günün tamamını kapsar.

### Oluşturma ve değiştirme

| Alan | Zorunlu | Kural |
| - | - | - |
| `content` | Evet (oluşturmada) | En çok 65535 karakter |
| `user_id` | Hayır | Yazar. Kliniğin herhangi bir kullanıcısı olabilir. Boşsa isteği yapan kullanıcı yazılır. |

<CodeGroup>
  ```bash curl theme={null}
  curl -X POST "https://app.flextell.ai/api/v1/customers/123/notes" \
    -H "Authorization: Bearer <access_token>" \
    -H "X-Tenant: <tenant_id>" \
    -H "Content-Type: application/json" \
    -d '{ "content": "Hasta aramalarda öğleden sonrayı tercih ediyor." }'
  ```

  ```javascript JavaScript theme={null}
  const res = await fetch("https://app.flextell.ai/api/v1/customers/123/notes", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${accessToken}`,
      "X-Tenant": tenantId,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ content: "Hasta aramalarda öğleden sonrayı tercih ediyor." }),
  });
  const { data } = await res.json();
  ```
</CodeGroup>

Oluşturma `201` döner:

```json theme={null}
{
  "success": true,
  "data": {
    "id": 501,
    "record_state": { "is_read_only": false, "reason_code": null },
    "content": "Hasta aramalarda öğleden sonrayı tercih ediyor.",
    "user_id": 7,
    "author": { "id": 7, "name": "Mehmet Demir" },
    "origin": "customer",
    "source_lead_id": null,
    "created_at": "2026-10-12T14:30:00+03:00",
    "updated_at": "2026-10-12T14:30:00+03:00",
    "deleted_at": null
  }
}
```

Silme `{"message": "Not başarıyla silindi"}` döner. Silme yumuşaktır; bkz. [Silme yaşam döngüsü](/api/istekler/silme-yasam-dongusu).

<Warning>
  `ViewAllNotes:Note` izni yoksa yalnızca kendi yazdığınız veya size atanmış notları görürsünüz. Diğer notlar `404` döner.
</Warning>

## Görevler

Görev listesi de iki kaynaktan oluşur: hastaya eklenen görevler ve hastanın Lead'lerine eklenen görevler (`origin: lead`). Lead tarafındaki görev uç noktası hastaya eklenen görevleri göstermez.

### Görev nesnesi

| Alan | Tür | Açıklama |
| - | - | - |
| `id` | integer | Görev kimliği |
| `record_state` | object | `is_read_only` ve `reason_code` |
| `lead_id`, `customer_id` | integer veya null | Görevin sahibi. Biri doludur, diğeri `null` olur. |
| `source_lead_id` | integer veya null | Lead silinince hastaya devredilen görevlerde Lead kimliği |
| `origin` | string | `customer` veya `lead` |
| `title` | string | Başlık |
| `description` | string veya null | Açıklama |
| `assigned_user_id`, `assigned_user` | integer / object | Sorumlu kullanıcı |
| `created_by_user_id`, `created_by` | integer / object | Görevi oluşturan |
| `due_at` | datetime veya null | Son tarih, klinik saat dilimiyle ofsetli |
| `is_active` | boolean | Pasif görev için hatırlatma gönderilmez |
| `is_completed` | boolean | `completed_at` doluysa `true` |
| `completed_at` | datetime veya null | Tamamlanma anı |
| `created_at`, `updated_at` | datetime | Zaman damgaları |

### Listeleme

| Parametre | Açıklama |
| - | - |
| `completed` | `true` yalnızca tamamlananları, `false` yalnızca açık olanları döner |
| `is_active` | Aktiflik filtresi |
| `created_at_from`, `created_at_to` | Oluşturma tarihi aralığı |
| `due_at_from`, `due_at_to` | Son tarih aralığı |
| `completed_at_from`, `completed_at_to` | Tamamlanma tarihi aralığı |
| `sort_by` | `title`, `due_at`, `completed_at`, `created_at` veya `updated_at`. Varsayılan sıra `created_at` azalan. |
| `sort_order` | Sıralama yönü |
| `per_page`, `page` | Sayfalama |

### Oluşturma ve güncelleme

| Alan | Zorunlu | Kural |
| - | - | - |
| `title` | Evet (oluşturmada) | En çok 255 karakter |
| `description` | Hayır | En çok 65535 karakter |
| `assigned_user_id` | Hayır | Kliniğin aktif bir kullanıcısı. Bkz. Atama kuralları bölümü |
| `due_at` | Hayır | Tarih-saat. Ofset yoksa klinik saat dilimi kabul edilir. |
| `is_active` | Hayır | Varsayılan `true` |

Güncellemede (`PUT`) gönderdiğiniz alanlar değişir, gönderilmeyenler korunur.

<CodeGroup>
  ```bash curl theme={null}
  curl -X POST "https://app.flextell.ai/api/v1/customers/123/tasks" \
    -H "Authorization: Bearer <access_token>" \
    -H "X-Tenant: <tenant_id>" \
    -H "Content-Type: application/json" \
    -d '{
      "title": "Tedavi sonrası kontrol araması",
      "description": "Hastanın iyileşme sürecini sorun.",
      "assigned_user_id": 7,
      "due_at": "2026-10-20T10:00:00+03:00"
    }'
  ```

  ```javascript JavaScript theme={null}
  const res = await fetch("https://app.flextell.ai/api/v1/customers/123/tasks", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${accessToken}`,
      "X-Tenant": tenantId,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      title: "Tedavi sonrası kontrol araması",
      description: "Hastanın iyileşme sürecini sorun.",
      assigned_user_id: 7,
      due_at: "2026-10-20T10:00:00+03:00",
    }),
  });
  const { data } = await res.json();
  ```
</CodeGroup>

Oluşturma `201` döner. Örnek yanıt `assigned_user` ve `created_by` nesnelerini kısaltır:

```json theme={null}
{
  "success": true,
  "data": {
    "id": 88,
    "record_state": { "is_read_only": false, "reason_code": null },
    "lead_id": null,
    "customer_id": 123,
    "source_lead_id": null,
    "origin": "customer",
    "title": "Tedavi sonrası kontrol araması",
    "description": "Hastanın iyileşme sürecini sorun.",
    "assigned_user_id": 7,
    "created_by_user_id": 7,
    "due_at": "2026-10-20T10:00:00+03:00",
    "is_active": true,
    "is_completed": false,
    "completed_at": null
  }
}
```

Silme `{"message": "Hasta görevi silindi"}` döner ve yumuşaktır.

## Görevi tamamlama ve yeniden açma

İki uç nokta da gövde istemez ve güncel görevi döner.

| İşlem | `completed_at` | `is_active` | `is_completed` |
| - | - | - | - |
| `POST .../complete` | Şu an | `false` | `true` |
| `POST .../reopen` | `null` | `true` | `false` |

```bash theme={null}
curl -X POST "https://app.flextell.ai/api/v1/customers/123/tasks/88/complete" \
  -H "Authorization: Bearer <access_token>" \
  -H "X-Tenant: <tenant_id>"
```

Vadesi gelen açık görev için sorumlu kullanıcıya, sorumlu yoksa görevi oluşturana `Görev zamanı geldi` bildirimi gider. Bildirim her görev için bir kez gönderilir. Yeniden açılan görevde bu kayıt sıfırlanır, bu yüzden vade geçmediyse hatırlatma yeniden çalışır.

<Note>
  Tamamlanan görev pasif olur ve hatırlatma almaz. Görevi yalnızca pasife almak için `PUT` ile `is_active: false` gönderin; bu, görevi tamamlanmış yapmaz.
</Note>

## Atama kuralları

* `assigned_user_id` kliniğin aktif bir kullanıcısı olmalıdır. Başka klinikten bir kullanıcı `422` döner (`The selected user does not belong to this tenant.`).
* `Assign:Lead` izniniz yoksa görev her zaman size atanır. Oluşturmada gönderdiğiniz `assigned_user_id` yok sayılır. Güncellemede göndermeniz de sorumluyu değiştirmez; alan size çevrilir.
* Görevi başka birine atamak için `Assign:Lead` (panelde **Lead'ler** grubunda **Ata**) izni gerekir.
* Görevi başka birine atadığınızda ya da sorumluyu değiştirdiğinizde yeni sorumlu `Size bir görev atandı` bildirimini alır. Kendinize atadığınızda ya da sorumluyu boşalttığınızda bildirim gitmez.
* Görev listesinde `ViewAllLeads:Lead` veya `ViewAllCustomers:Customer` izni olanlar tüm görevleri görür. Diğerleri yalnızca kendi oluşturduğu veya kendisine atanan görevleri görür. Kapsam dışı bir görevin kimliğini kullanırsanız `404` alırsınız.
* Lead başka bir kullanıcıya devredilirken açık görevlerin ne olacağı Lead tarafında `task_action` ile seçilir. Ayrıntı: [Lead notları ve görevleri](/api/kaynaklar/lead-notlari-ve-gorevleri).

## Yetki ve hata kodları

Kontroller sırayla şöyle çalışır: scope ve izin (`403`), alan doğrulaması (`422`), kayıt bulunamadı veya görünürlük dışı (`404`), imha edilmiş hasta (`409`). Genel kurallar için [İzinler ve kayıt görünürlüğü](/api/izinler-ve-gorunurluk) sayfasına bakın.

| Kod | HTTP | Ne zaman |
| - | - | - |
| `FORBIDDEN` | 403 | Scope eksik (`Invalid scope(s) provided.`) veya izin eksik (`Bu işlem için yetkiniz yok.`). Lead'e ait bir not veya görevi değiştirmek için `Update:Lead` da gerekir. |
| `LEAD_NOT_ASSIGNED` | 403 | Başka bir temsilcinin Lead aşamasındaki hastasında not listeleme, not yazma veya görev yazma. Yanıtta `data.assigned_user` (`id`, `name` veya `null`) döner. |
| `RESOURCE_NOT_FOUND` | 404 | Hasta, not veya görev yok ya da görünürlüğünüz dışında (`Hasta bulunamadı`, `Not bulunamadı`, `Hasta görevi bulunamadı`) |
| `CUSTOMER_ERASED` | 409 | İmha edilmiş hastada her yazma, `complete` ve `reopen` dahil. Mesaj: `Bu hastanın verileri imha edildi; kayıt salt okunurdur.` |
| `VALIDATION_FAILED` | 422 | Boş veya fazla uzun `title`/`content`, geçersiz tarih, klinik dışı kullanıcı |

<Tip>
  Diğer hasta uç noktaları Lead aşamasındaki hasta kimliği için `404` döner. Not ve görev uç noktaları bu kimliği de kabul eder.
</Tip>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.