# تسک ۱۳: سرویس‌های کلینیک (Clinic Services) ## توضیح پیاده‌سازی مدیریت سرویس‌های کلینیک در دو سطح: بخش (ServiceSection) و زیربخش (ServiceItem). دسترسی فقط در پنل **Basic+** — gate: `hasFeature('services')`. در تسک ۱۵ (پرونده بیمار)، ServiceItems در سشن‌های بیمار استفاده می‌شوند. ## Endpoint ها | متد | مسیر | Gate | توضیح | |-----|------|------|-------| | GET | `/api/v1/service-sections` | Basic+ | لیست بخش‌ها | | POST | `/api/v1/service-section` | Basic+ | ایجاد بخش | | PATCH | `/api/v1/service-section/{uuid}` | Basic+ | ویرایش بخش | | DELETE | `/api/v1/service-section/{uuid}` | Basic+ | حذف بخش | | GET | `/api/v1/service-items/{sectionUuid}` | Basic+ | لیست زیربخش‌های یک بخش | | POST | `/api/v1/service-item` | Basic+ | ایجاد زیربخش | | PATCH | `/api/v1/service-item/{uuid}` | Basic+ | ویرایش زیربخش | | DELETE | `/api/v1/service-item/{uuid}` | Basic+ | حذف زیربخش | **نکته DELETE:** حذف سخت مجاز است — اما اگر ServiceItem در session_services استفاده شده باشد، باید با خطا متوقف شود (FK ON DELETE RESTRICT). ## پیش‌نیازها - **تسک ۱۰** (ClinicStaff — برای staff_id در ServiceItem) - **تسک ۱۱** (Subscription — hasFeature gate) ## زمان تخمینی ۸ تا ۱۰ ساعت ## نمونه Request ### POST /api/v1/service-section ```json { "name": "تزریقات" } ``` ### POST /api/v1/service-item ```json { "section_uuid": "uuid-of-section", "name": "سرم ۵۰۰cc", "price_rials": 85000, "staff_uuid": "uuid-of-staff-optional" } ``` ### PATCH /api/v1/service-item/{uuid} ```json { "price_rials": 95000, "staff_uuid": null } ``` ## نمونه Response ### GET /api/v1/service-sections ```json { "success": true, "data": [ { "uuid": "...", "name": "تزریقات", "active": true, "items_count": 3 }, { "uuid": "...", "name": "فیزیوتراپی", "active": true, "items_count": 7 } ] } ``` ### GET /api/v1/service-items/{sectionUuid} ```json { "success": true, "data": [ { "uuid": "...", "name": "سرم ۵۰۰cc", "price_rials": 85000, "staff": { "uuid": "...", "full_name": "علی رضایی" }, "active": true } ] } ``` ## کدهای خطا | کد | HTTP | توضیح | |----|------|-------| | `ERR_SUBSCRIPTION_REQUIRED` | 403 | پنل Basic یا بالاتر لازم است | | `ERR_SERVICE_SECTION_HAS_ITEMS` | 409 | بخش دارای زیربخش است — ابتدا آنها را حذف کنید | | `ERR_SERVICE_ITEM_IN_USE` | 409 | سرویس در پرونده بیمار استفاده شده — قابل حذف نیست |