# جریان کاربری — تسک ۱۳: سرویس‌های کلینیک

## جریان مشاهده و ایجاد سرویس‌ها

```
کاربر وارد صفحه «سرویس‌ها» می‌شود
          │
          ▼
GET /api/v1/service-sections
  → accordion دو سطحی نمایش داده می‌شود
          │
بر روی هر بخش کلیک می‌کند:
          ▼
GET /api/v1/service-items/{sectionUuid}
  → زیربخش‌ها نمایش داده می‌شوند
```

## ساختار نمایش (ServicesPage.tsx)

```
┌─────────────────────────────────────────────┐
│  سرویس‌های کلینیک              [+ بخش جدید] │
├─────────────────────────────────────────────┤
│ ▼ تزریقات                          ✏️ 🗑️  │
│   ├─ سرم ۵۰۰cc      ۸۵,۰۰۰ ریال  ✏️ 🗑️  │
│   ├─ آمپول B12       ۴۵,۰۰۰ ریال  ✏️ 🗑️  │
│   └─ [+ سرویس جدید]                        │
├─────────────────────────────────────────────┤
│ ► فیزیوتراپی                       ✏️ 🗑️  │
└─────────────────────────────────────────────┘
```

## جریان ایجاد بخش جدید

```
کاربر «+ بخش جدید» کلیک می‌کند → Modal باز می‌شود
          │
          ▼
POST /api/v1/service-section { name: 'تزریقات' }
          │
          ├─► 403 ERR_SUBSCRIPTION_REQUIRED → «پنل Basic لازم است»
          └─► 201 → accordion به‌روز می‌شود
```

## جریان حذف بخش

```
کاربر روی 🗑️ بخش کلیک می‌کند
          │
          ▼
ConfirmDialog: «آیا از حذف بخش "تزریقات" مطمئنید؟
               همه زیربخش‌های آن هم حذف می‌شوند.»
          │
          ▼
DELETE /api/v1/service-section/{uuid}
          │
          ├─► اگر هیچ زیربخشی ندارد → 200 حذف شد
          └─► اگر زیربخش دارد → 409 ERR_SERVICE_SECTION_HAS_ITEMS
              (یا اگر DELETE CASCADE تعریف شده: همه حذف می‌شوند)
```

## جریان حذف زیربخش

```
DELETE /api/v1/service-item/{uuid}
          │
          ├─► اگر در هیچ session_services نیست → 200
          └─► اگر در session_services استفاده شده → 409 ERR_SERVICE_ITEM_IN_USE
              پیام: «این سرویس در پرونده بیمار ثبت شده و قابل حذف نیست.»
```

## جریان انتخاب پرسنل انجام‌دهنده

```
هنگام ایجاد/ویرایش ServiceItem:
          │
          ▼
GET /api/v1/staff → SearchableSelect از پرسنل فعال
  → «علی رضایی (پرستار)»
  → «مریم نوری (فیزیوتراپیست)»
  → [بدون پرسنل مشخص]
```

## gate check — کاربر Free

```
کاربر Free روی «سرویس‌ها» در sidebar کلیک می‌کند
          │
          ▼
ServicesPage.tsx → GET /api/v1/service-sections → 403
          │
          ▼
نمایش banner:
┌─────────────────────────────────────────────┐
│ 🔒 این قابلیت نیاز به پنل Basic یا بالاتر  │
│    دارد.                                    │
│    [مشاهده پنل‌ها]                          │
└─────────────────────────────────────────────┘
```
