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

3.5 KiB

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