# جریان کاربری — تسک ۰۹: تنظیمات نوبت‌دهی

## جریان تنظیم اولیه نوبت‌دهی توسط دکتر

```
دکتر وارد پنل می‌شود
          │
          ▼
POST /api/v1/appointment-settings/weekly-schedule
  { doctor_uuid, schedule: { saturday: {...}, sunday: {...}, ... } }
          │
          └─► ذخیره برنامه هفتگی پایه
```

## جریان ثبت مرخصی یا تعطیلات

```
دکتر تعطیلات را ثبت می‌کند
          │
          ▼
POST /api/v1/appointment-settings/holidays
  { doctor_uuid, start_date, end_date, reason }
          │
          └─► در بازه تعطیلات، هیچ نوبتی نمی‌توان گرفت
```

## جریان override یک روز خاص

```
دکتر می‌خواهد یک روز خاص را سفارشی کند
          │
          ├─► غیرفعال کردن یک روز:
          │   POST /date-override { date: "2024-03-15", active: false }
          │
          └─► اسلات سفارشی برای یک روز:
              POST /date-override {
                date: "2024-03-15",
                active: true,
                custom_slots: [{ start: "10:00", end: "12:00", duration: 20 }]
              }
```

## الگوریتم محاسبه اسلات‌های خالی (تسک ۱۰ از این استفاده می‌کند)

```
برای تاریخ درخواست‌شده:
          │
          ▼
آیا در بازه Holiday است؟
  بله → نوبت موجود نیست
  خیر │
      ▼
آیا DateOverride برای این تاریخ وجود دارد؟
  بله → active=false: نوبت موجود نیست
         active=true: از custom_slots استفاده کن
  خیر │
      ▼
از WeeklySchedule روز هفته مربوطه استفاده کن
  active=false: نوبت موجود نیست
  active=true:  اسلات‌های slots را محاسبه کن
          │
          ▼
اسلات‌های رزروشده را حذف کن (از جدول appointments)
          │
          ▼
لیست اسلات‌های خالی را برگردان
```
