DrugCatalog Module

قاموس الأدوية المسجلة لدى SFDA - SFDA Registered Drug Reference

Ready Read-Only 500+ Drugs

نظرة عامة (Overview)

DrugCatalog Module هو مرجع معتمد للأدوية المسجلة لدى الهيئة السعودية للدواء والغذاء (SFDA). يوفر قاعدة بيانات شاملة للأدوية مع معلومات الشركات المصنعة، أشكال الجرعات، وطرق الإعطاء.

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

  • Read-Only Protection: لا يمكن التعديل من API (حماية البيانات المرجعية)
  • SFDA Compliant: متوافق مع معايير الهيئة السعودية
  • 500+ Drugs: قاعدة بيانات شاملة جاهزة للاستخدام
  • Comprehensive Data: معلومات كاملة عن الأدوية والشركات
  • Multi-Language: دعم اللغة العربية والإنجليزية
  • ATC Classification: تصنيف عالمي للأدوية
  • Controlled Substances: تتبع الأدوية المراقبة والمخدرات

الكيانات (Entities)

Entity Drug

Path: Modules/DrugCatalog/Entities/Drug.php

الوصف: الكيان الأساسي للدواء مع جميع المعلومات الطبية

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

- id
- trade_name (اسم العلامة التجارية)
- generic_name (الاسم العام)
- scientific_name (الاسم العلمي)
- strength (قوة الدواء - مثل: 500mg)
- sfda_registration_number (رقم التسجيل - فريد)
- atc_code (رمز ATC الدولي)
- barcode
- manufacturer_id (FK: manufacturers)
- dosage_form_id (FK: dosage_forms)
- route_id (FK: routes)
- therapeutic_class_id (FK: therapeutic_classes)
- is_controlled (boolean)
- is_narcotic (boolean)
- is_refrigerated (boolean)
- is_active

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

  • manufacturer() → Manufacturer
  • dosageForm() → DosageForm
  • route() → Route
  • therapeuticClass() → TherapeuticClass
  • inventoryProducts() → InventoryProduct (belongsToMany)

مميزات خاصة:

  • Read-Only Policy: لا يمكن التعديل/الحذف من API
  • SFDA Tracking: رقم تسجيل فريد لكل دواء
  • Controlled Substances: تتبع الأدوية المراقبة
  • Storage Requirements: متطلبات التخزين (تبريد)

Entity Manufacturer

Path: Modules/DrugCatalog/Entities/Manufacturer.php

الوصف: الشركات المصنعة للأدوية

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

- id
- name (اسم الشركة)
- name_ar (الاسم بالعربية)
- country_id (FK: countries)
- website
- email
- phone
- is_local (boolean - شركة محلية؟)
- is_active

العلاقات:

  • country() → Country (من Geo Module)
  • drugs() → Drug (hasMany)

Entity DosageForm

Path: Modules/DrugCatalog/Entities/DosageForm.php

الوصف: أشكال الجرعات (Tablet, Capsule, Syrup, etc.)

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

- id
- name (اسم الشكل)
- name_ar (الاسم بالعربية)
- code (رمز قياسي)
- description
- is_solid (boolean)
- is_liquid (boolean)
- is_injectable (boolean)
- is_active

أمثلة:

  • Tablet - أقراص
  • Capsule - كبسولات
  • Syrup - شراب
  • Injection - حقن
  • Cream - كريم
  • Ointment - مرهم

Entity Route

Path: Modules/DrugCatalog/Entities/Route.php

الوصف: طرق الإعطاء (Oral, IV, IM, etc.)

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

- id
- name (اسم الطريقة)
- name_ar (الاسم بالعربية)
- code (رمز قياسي)
- description
- is_active

أمثلة:

  • Oral - عن طريق الفم
  • IV (Intravenous) - وريدي
  • IM (Intramuscular) - عضلي
  • SC (Subcutaneous) - تحت الجلد
  • Topical - موضعي
  • Inhalation - استنشاق

Entity TherapeuticClass

Path: Modules/DrugCatalog/Entities/TherapeuticClass.php

الوصف: التصنيف العلاجي للأدوية

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

- id
- name (اسم التصنيف)
- name_ar (الاسم بالعربية)
- code (رمز التصنيف)
- description
- parent_id (FK: self - hierarchical)
- is_active

أمثلة:

  • Antibiotics - المضادات الحيوية
  • Analgesics - المسكنات
  • Antihypertensives - خافضات الضغط
  • Antidiabetics - أدوية السكري

API Endpoints

Base URL: /api/drug-catalog
تنبيه: جميع الـ endpoints هي Read-Only - لا يمكن POST/PUT/DELETE

Drugs

GET /drugs

قائمة الأدوية مع pagination و filtering

Query Parameters
  • search - البحث في الاسم/الاسم العام
  • manufacturer_id - فلترة حسب الشركة المصنعة
  • dosage_form_id - فلترة حسب شكل الجرعة
  • route_id - فلترة حسب طريقة الإعطاء
  • therapeutic_class_id - فلترة حسب التصنيف العلاجي
  • is_controlled - الأدوية المراقبة فقط
  • is_narcotic - المخدرات فقط
  • include - manufacturer,dosageForm,route,therapeuticClass
Response Example
{
  "data": [
    {
      "id": 1,
      "trade_name": "Panadol",
      "generic_name": "Paracetamol",
      "strength": "500mg",
      "sfda_registration_number": "SFDA-123456",
      "manufacturer": {
        "id": 1,
        "name": "GSK",
        "country": "UK"
      },
      "dosage_form": {
        "id": 1,
        "name": "Tablet"
      },
      "is_controlled": false,
      "is_active": true
    }
  ],
  "meta": {
    "current_page": 1,
    "total": 500
  }
}
GET /drugs/{id}

تفاصيل دواء محدد

Query Parameters
  • include - manufacturer,dosageForm,route,therapeuticClass
GET /drugs/search

بحث متقدم في الأدوية

Query Parameters
  • q - البحث في جميع الحقول
  • by_barcode - البحث بالباركود
  • by_atc - البحث برمز ATC
  • by_sfda - البحث برقم SFDA

Manufacturers

GET /manufacturers

قائمة الشركات المصنعة

Query Parameters
  • search - البحث في الاسم
  • country_id - فلترة حسب الدولة
  • is_local - الشركات المحلية فقط
  • include - country,drugs
GET /manufacturers/{id}

تفاصيل شركة محددة

GET /manufacturers/{id}/drugs

جميع أدوية شركة معينة

Dosage Forms

GET /dosage-forms

قائمة أشكال الجرعات

GET /dosage-forms/{id}

تفاصيل شكل جرعة محدد

Routes

GET /routes

قائمة طرق الإعطاء

GET /routes/{id}

تفاصيل طريقة إعطاء محددة

Therapeutic Classes

GET /therapeutic-classes

قائمة التصنيفات العلاجية

GET /therapeutic-classes/{id}

تفاصيل تصنيف علاجي محدد

Read-Only Policies

الحماية من التعديل

جميع Entities في DrugCatalog محمية من التعديل/الحذف من خلال Policies:

// DrugPolicy.php
public function create(User $user): bool
{
    return false; // لا يمكن إنشاء أدوية من API
}

public function update(User $user, Drug $drug): bool
{
    return false; // لا يمكن تعديل الأدوية
}

public function delete(User $user, Drug $drug): bool
{
    return false; // لا يمكن حذف الأدوية
}

public function view(User $user, Drug $drug): bool
{
    return true; // يمكن القراءة فقط
}

كيفية إضافة/تعديل البيانات

ملحوظة: يتم إضافة/تعديل البيانات فقط من خلال:
  • Database Seeders
  • Direct Database Access
  • Admin Panel (future feature)

Integration

Integration مع Inventory Module

الربط بين Drug (catalog) و InventoryProduct من خلال DrugInventoryMappingService:

use Modules\Inventory\Application\Services\DrugInventoryMappingService;

$mappingService = app(DrugInventoryMappingService::class);

// ربط دواء مع منتج في المخزون
$drug = Drug::find(1);
$product = $mappingService->syncDrugToInventory($drug, $locationId, [
    'sku' => 'MED-PANADOL-500',
    'track_batch' => true
]);

// البحث عن منتجات لدواء معين
$products = $mappingService->findInventoryProductsForDrug($drug->id, $locationId);

// البحث عن دواء من منتج
$drug = $mappingService->findDrugForInventoryProduct($product);

Integration مع Pharmacy Module

استخدام Drug في فواتير الصيدلية:

// في PharmacySaleLine
$saleLine = PharmacySaleLine::create([
    'pharmacy_sale_id' => $saleId,
    'drug_id' => 1, // من DrugCatalog
    'inventory_product_id' => 5, // من Inventory
    'quantity' => 10,
    'price' => 25.00
]);

// الحصول على معلومات الدواء
$drugInfo = $saleLine->drug;
echo $drugInfo->trade_name; // Panadol
echo $drugInfo->manufacturer->name; // GSK

Best Practices

التوصيات

  • استخدم include parameter لتحميل العلاقات المطلوبة فقط
  • استخدم Filters للبحث الدقيق بدلاً من تحميل جميع البيانات
  • تأكد من ربط Drug مع InventoryProduct قبل استخدامه في الصيدلية
  • استخدم is_controlled للتحكم في صلاحيات الصرف
  • راقب is_narcotic للأدوية المخدرة

تحذيرات

  • لا تحاول التعديل من API - سيفشل بـ 403 Forbidden
  • تأكد من وجود Drug في Catalog قبل إنشاء InventoryProduct
  • استخدم sfda_registration_number للتحقق من الأدوية
  • راجع is_active قبل استخدام الدواء

Database Schema

الجداول الرئيسية

drugs

- id (PK)
- trade_name
- generic_name
- scientific_name
- strength
- sfda_registration_number (unique)
- atc_code
- barcode
- manufacturer_id (FK → manufacturers)
- dosage_form_id (FK → dosage_forms)
- route_id (FK → routes)
- therapeutic_class_id (FK → therapeutic_classes)
- is_controlled
- is_narcotic
- is_refrigerated
- is_active
- created_at
- updated_at

manufacturers

- id (PK)
- name
- name_ar
- country_id (FK → countries)
- website
- email
- phone
- is_local
- is_active

dosage_forms

- id (PK)
- name
- name_ar
- code
- description
- is_solid
- is_liquid
- is_injectable
- is_active

إحصائيات Module

500+
Registered Drugs
50+
Manufacturers
15+
API Endpoints
100%
Read-Only Protected