Files
clinicpro/docs/phase2_taskes/task-10-staff/user_flow.md
T

87 lines
3.5 KiB
Markdown

# جریان کاربری — تسک ۱۰: مدیریت پرسنل (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`