# جریان کاربری — تسک ۱۰: مدیریت پرسنل (Staff)

## جریان ایجاد پرسنل جدید

```
مدیر کلینیک/دکتر وارد پنل می‌شود
          │
          ▼
GET /api/v1/staff
  → لیست پرسنل فعلی context جاری نمایش داده می‌شود
          │
          ▼
کاربر روی «افزودن پرسنل» کلیک می‌کند → Modal باز می‌شود
          │
          ▼
POST /api/v1/staff
  { full_name, phone?, job_title?, address?, national_code? }
          │
          ├─► 422: full_name خالی است → نمایش خطا در فرم
          │
          └─► 201: پرسنل ایجاد شد → لیست refresh می‌شود
```

## جریان ویرایش پرسنل

```
کاربر روی آیکن ویرایش در جدول کلیک می‌کند
          │
          ▼
Modal با اطلاعات فعلی پر می‌شود
          │
          ▼
PATCH /api/v1/staff/{uuid}
  { full_name, phone, job_title, ... }
          │
          ├─► 403: این پرسنل متعلق به شما نیست
          └─► 200: ویرایش موفق → Modal بسته می‌شود
```

## جریان غیرفعال‌سازی (Soft Delete)

```
کاربر روی toggle در جدول کلیک می‌کند
          │
          ▼
PATCH /api/v1/staff/{uuid}/toggle
          │
          ▼
active: true → false  یا  false → true
          │
          ▼
در لیست: badge وضعیت تغییر می‌کند (فعال/غیرفعال)
```

## چرا حذف سخت ممنوع است

```
clinic_staff (active=false)
    │
    ├── service_items.staff_id → هنوز به پرسنل ارجاع دارد
    │                             (تاریخچه سرویس‌ها حفظ می‌شود)
    │
    └── session_services.staff_id → سشن‌های قبلی بیمار
                                    نام انجام‌دهنده را نشان می‌دهند
```

اگر پرسنل حذف سخت می‌شد:
- `service_items.staff_id` → NULL (انجام‌دهنده سرویس گم می‌شد)
- `session_services.staff_id` → NULL (تاریخچه ویزیت ناقص می‌شد)

## نمایش در Frontend (StaffPage.tsx)

```
┌─────────────────────────────────────────────────┐
│  پرسنل کلینیک                    [+ افزودن]    │
├──────────┬──────────┬──────────┬────────────────┤
│ نام      │ سمت      │ تلفن     │ وضعیت   عملیات│
├──────────┼──────────┼──────────┼────────────────┤
│ علی رضایی│ پرستار   │ 0912...  │ ✅فعال  ✏️ 🔘 │
│ مریم نوری│ منشی     │ 0913...  │ ❌غیرفعال✏️ 🔘│
└──────────┴──────────┴──────────┴────────────────┘
```

- ستون آخر: آیکن ویرایش (Modal) + toggle وضعیت
- غیرفعال‌ها با رنگ کمتر نمایش داده می‌شوند اما از لیست حذف نمی‌شوند
- فیلتر: «فقط فعال‌ها» / «همه» — query param `?active=1`
