4.0 KiB
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 یا بالاتر │
│ دارد. │
│ [مشاهده پنلها] │
└─────────────────────────────────────────────┘