Files
clinicpro/docs/phase2_taskes/task-13-clinic-services/user_flow.md
T

4.0 KiB

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

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

کاربر وارد صفحه «سرویس‌ها» می‌شود
          │
          ▼
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 یا بالاتر  │
│    دارد.                                    │
│    [مشاهده پنل‌ها]                          │
└─────────────────────────────────────────────┘