Core Module

البنية التحتية للنظام - System Infrastructure & Shared Components

Ready Foundation 24 Endpoints

نظرة عامة - Overview

Core Module هو حجر الأساس للنظام. يوفر البنية التحتية المشتركة بين جميع الـ Modules الأخرى.

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

  • Status Management: نظام موحد لإدارة الحالات (Draft, Pending, Approved, etc.)
  • Taxonomy System: تصنيف هرمي للبيانات (Categories, Tags, Types)
  • Tax Management: إدارة الضرائب والرسوم (VAT 15%)
  • Code Sequences: توليد أرقام تلقائية (INV-2025-0001)
  • Outbox Events: Event-Driven Architecture للتكامل بين Modules
  • Settings System: إعدادات النظام المركزية
ملاحظة هامة: جميع Modules الأخرى تعتمد على Core Module. يجب تشغيله أولاً.

الكيانات - Database Entities

1. Status

Polymorphic

نظام موحد لإدارة حالات الكيانات في النظام

الحقول الرئيسية:

  • name - اسم الحالة (مثال: "Draft")
  • slug - معرف فريد (مثال: "draft")
  • model_type - نوع الـ Model (مثال: "invoice", "appointment")
  • color - لون الحالة في الواجهة (مثال: "green", "red")
  • icon - أيقونة الحالة
  • is_default - حالة افتراضية؟
  • is_final - حالة نهائية؟ (لا يمكن التعديل بعدها)

أمثلة على الاستخدام:

// Invoice Statuses
'draft', 'pending', 'approved', 'paid', 'cancelled'

// Appointment Statuses
'scheduled', 'confirmed', 'completed', 'cancelled', 'no_show'

// Admission Statuses
'admitted', 'in_treatment', 'discharged'

2. Taxonomy

Hierarchical

نظام تصنيف هرمي للبيانات (Categories, Tags, Types)

الحقول الرئيسية:

  • name - اسم التصنيف
  • slug - معرف فريد
  • parent_id - التصنيف الأب (للهيكل الهرمي)
  • type - نوع التصنيف (category, tag, type)
  • description - وصف التصنيف

مثال على الهيكل الهرمي:

Medical Services (Parent)
├── Cardiology
│   ├── ECG
│   └── Echocardiography
├── Radiology
│   ├── X-Ray
│   └── MRI
└── Laboratory
    ├── Blood Tests
    └── Urine Tests

3. Tax

Pricing

إدارة الضرائب والرسوم

الحقول:

  • name - اسم الضريبة (مثال: "VAT")
  • rate - النسبة (مثال: 15.00 للـ VAT)
  • type - النوع (percentage, fixed)
  • is_active - نشطة؟

مثال:

Tax::create([
    'name' => 'VAT',
    'rate' => 15.00,
    'type' => 'percentage',
    'is_active' => true
]);

4. CodeSequence

Auto Number

توليد أرقام تلقائية للفواتير والمستندات

الحقول:

  • key - مفتاح التسلسل (مثال: "invoice")
  • prefix - البادئة (مثال: "INV-")
  • suffix - اللاحقة (اختياري)
  • current_value - القيمة الحالية
  • padding - عدد الأصفار (مثال: 4 → 0001)

أمثلة على النتائج:

INV-2025-0001
INV-2025-0002
APT-20251206-0042
PAT-2025-00123

5. OutboxEvent

Event-Driven

تخزين الأحداث للتكامل بين Modules (Outbox Pattern)

الحقول:

  • event_type - نوع الحدث
  • payload - البيانات (JSON)
  • processed - تمت معالجته؟
  • processed_at - وقت المعالجة

6. Setting

Configuration

إعدادات النظام المركزية

الحقول:

  • key - مفتاح الإعداد
  • value - القيمة
  • type - نوع البيانات (string, boolean, json)
  • group - المجموعة (general, email, sms)

API Endpoints (24 endpoint)

Authentication Required: جميع الـ endpoints تتطلب Bearer Token

1. Status Management APIs

GET
/api/core/statuses
قائمة جميع الحالات مع pagination
عرض التفاصيل

Query Parameters:

per_page: integer     // عدد النتائج (default: 15)
page: integer         // رقم الصفحة
model_type: string    // فلترة حسب نوع Model (invoice, appointment)
is_default: boolean   // الحالات الافتراضية فقط
is_final: boolean     // الحالات النهائية فقط

Response Example:

{
  "status": true,
  "data": [
    {
      "id": 1,
      "name": "Draft",
      "slug": "draft",
      "model_type": "invoice",
      "color": "gray",
      "icon": "fa-file",
      "is_default": true,
      "is_final": false
    }
  ],
  "meta": {
    "current_page": 1,
    "total": 25
  }
}
GET
/api/core/statuses/grouped
الحالات مجمعة حسب model_type
عرض التفاصيل

الوصف: يرجع الحالات مجمعة حسب نوع الـ Model (مفيد للـ dropdowns)

Response Example:

{
  "status": true,
  "data": {
    "invoice": [
      {"id": 1, "name": "Draft", "slug": "draft"},
      {"id": 2, "name": "Pending", "slug": "pending"},
      {"id": 3, "name": "Paid", "slug": "paid"}
    ],
    "appointment": [
      {"id": 10, "name": "Scheduled", "slug": "scheduled"},
      {"id": 11, "name": "Confirmed", "slug": "confirmed"}
    ]
  }
}
GET
/api/core/statuses/contexts
قائمة مسطحة بجميع أنواع الـ contexts المتاحة
عرض التفاصيل

Response Example:

{
  "status": true,
  "data": [
    "invoice",
    "appointment",
    "admission",
    "prescription",
    "lab_test"
  ]
}
GET
/api/core/statuses/by-context
الحالات حسب context محدد
عرض التفاصيل

Query Parameters:

context: string (required)    // نوع الـ Model (invoice, appointment)

مثال:

GET /api/core/statuses/by-context?context=invoice
GET
/api/core/statuses/{id}
تفاصيل حالة محددة
POST
/api/core/statuses
إنشاء حالة جديدة
عرض التفاصيل

Request Body:

{
  "name": "Approved",
  "slug": "approved",
  "model_type": "invoice",
  "color": "green",
  "icon": "fa-check-circle",
  "order": 3,
  "is_default": false,
  "is_final": false,
  "is_active": true
}
PUT
/api/core/statuses/{id}
تحديث حالة
DELETE
/api/core/statuses/{id}
حذف حالة

2. Taxonomy APIs

GET
/api/core/taxonomies
قائمة التصنيفات
عرض التفاصيل

Query Parameters:

type: string          // نوع التصنيف (category, tag, type)
parent_id: integer    // التصنيفات الأبناء لـ parent معين
search: string        // بحث في الاسم
GET
/api/core/taxonomies/grouped
التصنيفات مجمعة حسب النوع (هرمية)
GET
/api/core/taxonomies/{id}
تفاصيل تصنيف محدد
POST
/api/core/taxonomies
إنشاء تصنيف جديد
عرض التفاصيل

Request Body:

{
  "name": "Cardiology",
  "slug": "cardiology",
  "type": "category",
  "parent_id": 1,
  "description": "Heart and cardiovascular services"
}
PUT
/api/core/taxonomies/{id}
تحديث تصنيف
DELETE
/api/core/taxonomies/{id}
حذف تصنيف

3. Tax Management APIs

GET
/api/core/taxes
قائمة الضرائب
POST
/api/core/taxes
إنشاء ضريبة جديدة
عرض التفاصيل

Request Body:

{
  "name": "VAT",
  "rate": 15.00,
  "type": "percentage",
  "is_active": true
}
PUT
/api/core/taxes/{id}
تحديث ضريبة

4. Code Sequence APIs

GET
/api/core/sequences
قائمة جميع التسلسلات
POST
/api/core/sequences
إنشاء تسلسل جديد
عرض التفاصيل

Request Body:

{
  "key": "invoice",
  "prefix": "INV-",
  "padding": 4,
  "current_value": 0
}
POST
/api/core/sequences/{id}/next
الحصول على الرقم التالي في التسلسل
عرض التفاصيل

الوصف: يقوم بزيادة الرقم الحالي وإرجاع الرقم الكامل المنسق

Response Example:

{
  "status": true,
  "data": {
    "number": "INV-0001",
    "current_value": 1
  }
}

5. Outbox Event APIs

GET
/api/core/outbox
قائمة الأحداث
POST
/api/core/outbox
إضافة حدث جديد
GET
/api/core/outbox/{id}
تفاصيل حدث محدد

التكامل مع Modules الأخرى

1. استخدام Status في الفواتير (Invoices)

use Modules\Core\Services\StatusService;

$statusService = app(StatusService::class);

// الحصول على حالة معينة
$draftStatus = $statusService->getBySlug('draft', 'invoice');

// تعيين حالة للفاتورة
$invoice->status_id = $draftStatus->id;
$invoice->save();

2. استخدام CodeSequence

use Modules\Core\Services\CodeSequenceService;

$sequenceService = app(CodeSequenceService::class);

// توليد رقم فاتورة جديد
$invoiceNumber = $sequenceService->getNext('invoice');
// Result: "INV-2025-0001"

// توليد رقم موعد
$appointmentNumber = $sequenceService->getNext('appointment');
// Result: "APT-20251206-0042"

3. استخدام Taxonomy

// الحصول على تصنيف محدد
$category = Taxonomy::where('slug', 'cardiology')->first();

// الحصول على التصنيفات الأبناء
$subCategories = $category->children;

Best Practices

✅ التوصيات

  • استخدم Status بدلاً من enum: لمرونة أكبر في إدارة الحالات
  • استخدم CodeSequence للأرقام: لا تقم بتوليد الأرقام يدوياً
  • استخدم Taxonomy للتصنيفات: بدلاً من إنشاء جداول منفصلة
  • Cache Status و Taxonomy: لتحسين الأداء

❌ تجنب

  • إنشاء status يدوياً دون استخدام النظام
  • حذف status مستخدمة في النظام
  • تعديل slug للـ status بعد الاستخدام

Statistics

6
Entities
24
API Endpoints
100%
Authenticated
Ready
Status

Key Features

  • ✅ Unified Status Management System
  • ✅ Hierarchical Taxonomy System
  • ✅ Tax Calculation Support
  • ✅ Auto Number Generation
  • ✅ Event-Driven Architecture
  • ✅ Centralized Settings