HospitalCatalog Module

كتالوج خدمات المستشفى - Services, Packages, Prices & Case Definitions

Ready Multi-Tier Pricing

نظرة عامة (Overview)

HospitalCatalog Module هو نظام شامل لإدارة كتالوج خدمات المستشفى. يوفر إدارة الخدمات الطبية، الباقات، الأسعار المتعددة، وتعريفات الحالات.

الميزات الرئيسية

  • Service Management: إدارة شاملة للخدمات الطبية
  • Multi-Tier Pricing: أسعار متعددة (Cash, Insurance, VIP, etc.)
  • Service Packages: حزم خدمات (Checkup, Surgery, etc.)
  • Case Definitions: تعريفات الحالات الطبية
  • Flexible Categorization: تصنيف مرن للخدمات
  • Revenue Integration: تكامل مع Revenue Module

الكيانات (Entities)

Entity HospitalService

Path: Modules/HospitalCatalog/Entities/HospitalService.php

الوصف: الخدمات الطبية المتاحة في المستشفى

الخصائص الرئيسية:

- id
- location_id (FK: business_locations)
- code (unique per location)
- name (multilingual JSON)
- description
- category_id (FK: taxonomies)
- service_type (consultation, procedure, test, etc.)
- department_id (FK: departments)
- duration_minutes
- is_active
- requires_appointment
- requires_doctor
- requires_equipment

أنواع الخدمات (service_type):

  • consultation - استشارة طبية
  • procedure - إجراء طبي
  • test - فحص مخبري
  • imaging - أشعة
  • surgery - عملية جراحية
  • therapy - علاج طبيعي
  • accommodation - إقامة (غرفة)

العلاقات (Relationships):

  • location() → BusinessLocation
  • category() → Taxonomy
  • department() → Department
  • prices() → ServicePrice (hasMany)
  • packageItems() → PackageItem (hasMany)

Entity ServicePrice

Path: Modules/HospitalCatalog/Entities/ServicePrice.php

الوصف: الأسعار المتعددة للخدمة (Multi-Tier Pricing)

الخصائص الرئيسية:

- id
- service_id (FK: hospital_services)
- price_tier_id (FK: price_tiers)
- price
- cost (التكلفة الفعلية)
- effective_from
- effective_to
- is_active

مثال على Price Tiers:

Tier الوصف الاستخدام
Cash السعر النقدي المرضى الأفراد
Insurance سعر التأمين شركات التأمين
VIP السعر المميز غرف VIP
Corporate سعر الشركات عقود مؤسسات

Entity ServicePackage

Path: Modules/HospitalCatalog/Entities/ServicePackage.php

الوصف: حزم الخدمات (مجموعة خدمات بسعر مخفض)

الخصائص الرئيسية:

- id
- location_id
- code
- name
- description
- package_type (checkup, surgery, maternity, etc.)
- total_price
- discounted_price
- valid_from
- valid_to
- max_uses_per_patient
- is_active

أمثلة على الباقات:

  • Checkup Package: كشف + تحاليل + أشعة
  • Surgery Package: عملية + غرفة + أدوية + متابعة
  • Maternity Package: متابعة حمل + ولادة + رعاية ما بعد الولادة
  • Wellness Package: فحوصات دورية شاملة

العلاقات:

  • items() → PackageItem (hasMany)
  • prices() → PackagePrice (hasMany)

Entity PackageItem

Path: Modules/HospitalCatalog/Entities/PackageItem.php

الوصف: الخدمات المكونة للباقة

الخصائص الرئيسية:

- id
- package_id (FK: service_packages)
- service_id (FK: hospital_services)
- quantity
- unit_price
- discount_percent
- is_optional

مثال:

// باقة فحص شامل
$package = ServicePackage::create([
    'name' => 'Comprehensive Checkup',
    'total_price' => 1000,
    'discounted_price' => 750
]);

// الخدمات المكونة
$package->items()->createMany([
    ['service_id' => 1, 'quantity' => 1], // استشارة
    ['service_id' => 5, 'quantity' => 1], // CBC
    ['service_id' => 8, 'quantity' => 1], // أشعة صدر
    ['service_id' => 12, 'quantity' => 1], // ECG
]);

Entity CaseDefinition

Path: Modules/HospitalCatalog/Entities/CaseDefinition.php

الوصف: تعريفات الحالات الطبية (Clinical Pathways)

الخصائص الرئيسية:

- id
- code
- name
- icd_code (ICD-10 code)
- description
- case_type (inpatient, outpatient, emergency)
- expected_duration_days
- standard_services (JSON array of service IDs)
- is_active

الاستخدام:

تُستخدم لتحديد المسار العلاجي القياسي لحالة معينة، مثل:

  • Normal Delivery → استقبال + غرفة + ولادة + رعاية + خروج
  • Appendectomy → فحوصات + عملية + غرفة + أدوية + متابعة
  • Diabetes Management → استشارة + تحاليل + أدوية + متابعة

API Endpoints

Base URL: /api/hospital-catalog

Services Management

GET /services

قائمة الخدمات الطبية

Query Parameters
  • search - البحث في الاسم/الكود
  • category_id - فلترة حسب الفئة
  • service_type - نوع الخدمة
  • department_id - القسم
  • include - category,department,prices
POST /services

إنشاء خدمة جديدة

Request Body
{
  "code": "CONS-001",
  "name": {
    "ar": "استشارة باطنة",
    "en": "Internal Medicine Consultation"
  },
  "service_type": "consultation",
  "category_id": 1,
  "department_id": 5,
  "duration_minutes": 30,
  "requires_appointment": true,
  "requires_doctor": true
}
GET /services/{id}

تفاصيل خدمة محددة

PUT /services/{id}

تحديث خدمة

Service Pricing

GET /services/{id}/prices

أسعار خدمة محددة

Response Example
{
  "service_id": 1,
  "service_name": "استشارة باطنة",
  "prices": [
    {
      "tier": "Cash",
      "price": 200.00,
      "is_active": true
    },
    {
      "tier": "Insurance",
      "price": 250.00,
      "is_active": true
    },
    {
      "tier": "VIP",
      "price": 350.00,
      "is_active": true
    }
  ]
}
POST /services/{id}/prices

إضافة/تحديث سعر

Request Body
{
  "price_tier_id": 1,
  "price": 200.00,
  "cost": 80.00,
  "effective_from": "2025-01-01"
}
GET /services/{id}/price

السعر الحالي حسب Price Tier

Query Parameters
  • tier_id - (required) معرف الـ Tier
  • date - التاريخ (default: اليوم)

Packages Management

GET /packages

قائمة الباقات

Query Parameters
  • package_type - نوع الباقة
  • is_active - الحالة
  • include - items,prices
POST /packages

إنشاء باقة جديدة

Request Body
{
  "code": "PKG-CHECKUP-001",
  "name": {
    "ar": "فحص شامل",
    "en": "Comprehensive Checkup"
  },
  "package_type": "checkup",
  "total_price": 1000.00,
  "discounted_price": 750.00,
  "valid_from": "2025-01-01",
  "valid_to": "2025-12-31",
  "items": [
    {
      "service_id": 1,
      "quantity": 1
    },
    {
      "service_id": 5,
      "quantity": 1
    }
  ]
}
GET /packages/{id}

تفاصيل باقة محددة

Case Definitions

GET /case-definitions

قائمة تعريفات الحالات

Query Parameters
  • case_type - نوع الحالة
  • icd_code - كود ICD-10
GET /case-definitions/{id}/services

الخدمات القياسية للحالة

Response Example
{
  "case_definition": {
    "code": "NORMAL-DELIVERY",
    "name": "Normal Delivery",
    "expected_duration_days": 2
  },
  "standard_services": [
    {
      "service_id": 1,
      "name": "Admission",
      "timing": "day_0"
    },
    {
      "service_id": 10,
      "name": "Delivery Room",
      "timing": "day_0"
    },
    {
      "service_id": 15,
      "name": "Room (2 nights)",
      "timing": "day_0-2"
    }
  ],
  "estimated_cost": 5000.00
}

Integration

Integration مع Revenue Module

التكامل مع Revenue Module لإصدار الفواتير:

// إنشاء فاتورة من خدمات
use Modules\Revenue\Entities\Invoice;
use Modules\HospitalCatalog\Entities\HospitalService;

$service = HospitalService::find(1);
$price = $service->getPriceForTier($tierIdش);

$invoice = Invoice::create([
    'patient_id' => $patientId,
    'encounter_id' => $encounterId,
    // ...
]);

$invoice->lines()->create([
    'service_id' => $service->id,
    'description' => $service->name,
    'quantity' => 1,
    'unit_price' => $price->price,
    'total' => $price->price
]);

Integration مع Care Module

ربط الخدمات مع Encounters والـ Admissions:

// إضافة خدمات للـ Encounter
$encounter = CareEncounter::find($id);

$encounter->services()->create([
    'service_id' => 1,
    'quantity' => 1,
    'price_tier_id' => 1,
    'status' => 'pending'
]);

// عند تأكيد الخدمة - إنشاء فاتورة
$encounter->confirmServices();

Best Practices

التوصيات

  • استخدم Price Tiers لإدارة الأسعار المتعددة
  • أنشئ Service Packages للخدمات المتكررة معاً
  • استخدم Case Definitions للمسارات العلاجية القياسية
  • حافظ على effective_from/to للأسعار لتتبع التغييرات
  • استخدم service_type للتصنيف والفلترة

تحذيرات

  • تأكد من وجود سعر فعّال قبل إنشاء فاتورة
  • راجع الباقات المنتهية دورياً
  • لا تحذف خدمات مستخدمة في فواتير - استخدم is_active = false

إحصائيات Module

8+
Entities
6+
Services
30+
API Endpoints
60+
Tests