منصة Laravel 12 مبنية على نظام موديولات nwidart/laravel-modules مع واجهة Angular، تعمل حالياً في الإنتاج بخمسة عشر موديولاً مفعّلاً بالكامل (modules_statuses.json). توفر النواة خدمات منصّة جاهزة — تعدد الشركات والفروع، الصلاحيات، التدقيق، الترقيم، الإعدادات، الموافقات، وناقل الأحداث — يرثها أي موديول جديد (HIS أو OBGY) دون أي تطوير إضافي.
App\Models\BaseModel فيحصل تلقائياً على TenantAware (ختم company_id عند الإنشاء + نطاق scopeTenant)، وAuditable (سجل تدقيق كامل عبر spatie/laravel-activitylog)، وSoftDeletes، وHasArabicContent (ثنائية اللغة name/name_ar).branches مركزي (app/Models/Branch.php) بعلاقة branch_user مع علم is_primary؛ كل عملية جديدة تُختم بفرع المستخدم الأساسي عبر DataScope::operatingBranchId().Modules/Core/app/Support/DataScope.php: لكل دور data_scope بقيم all / branch / own تُطبَّق على استعلامات القوائم مع دعم فلتر ?branch_id= ورأس X-Branch-Id من واجهة Angular — صُمّم أصلاً لـ LIS وقابل للتطبيق المباشر على أي موديول إكلينيكي.spatie/laravel-permission مع Modules\Core\Models\Role، وسجلّ تبعيات الصلاحيات PermissionDependencyRegistry الذي يسمح لكل موديول بتسجيل شجرة صلاحياته وحزم أدواره الجاهزة عند الإقلاع (LIS مسجَّل بالبادئة lis من LISServiceProvider) — نفس النمط جاهز لبادئتي his وobgy.BusinessPartnerCreated فيستمع موديول المحاسبة عبر CreatePartnerAccounts لإنشاء الحسابات تلقائياً؛ وLIS يملك 10 أحداث (مثل LabResultReleased وCriticalResultDetected) مع 11 مستمعاً داخلياً.SequenceService بترقيم لكل شركة/موديول/كيان مع خيار per_branch وإعادة تصفير حسب السنة المالية (sequences + sequence_counters).SettingsService بأربعة نطاقات (SettingScope: global / company / branch / user) مع تعريفات setting_definitions.ApprovalWorkflowService متعدد المستويات (approval_workflows / approval_workflow_levels / approval_logs) — حالياً مقصور على Sales وPurchases في ApprovalModule ويحتاج توسعة للسياقات الإكلينيكية (استنتاج).attachments + سمة HasAttachments (morphMany) — جاهزة لملفات الأشعة والتقارير الطبية.AiChatService مع جداول ai_settings وai_usage_logs وai_response_cache.MoonLicenseClient وQuotaTrackingService وسمة TracksQuota (مثل max_users وmax_branches) وCentralSyncQueue.الكيان الرئيسي للأطراف في النواة هو Modules\Core\Models\BusinessPartner (جدول business_partners) بأعلام is_customer/is_supplier وعلاقات جهات اتصال وعناوين، وتُبنى فوقه امتدادات لكل موديول: المحاسبة عبر AccBpExt وCRM عبر crm_customer_ext (partner_id). أما المريض فلا وجود له على مستوى النواة إطلاقاً؛ الكيان الوحيد للمرضى هو Modules\LIS\Models\LabPatient (جدول lab_patients) داخل موديول المعمل، ويحمل mrn وبيانات التأمين ورموز بوابة المريض، ويرتبط بسجل الأطراف عبر partner_id. كذلك يرتبط الأطباء (LabDoctor) وشركات التأمين (LabInsuranceContract) والمعامل الخارجية (LabExternalLab) جميعاً بـBusinessPartner عبر partner_id. أي مشروع HIS سيتطلب ترقية «ملف المريض» إلى سجل رئيسي مشترك بدل بقائه حبيس موديول المعمل (استنتاج).
| الموديول | الغرض | الكيانات الرئيسية | Migrations / Models |
|---|---|---|---|
Core | البيانات الرئيسية وخدمات المنصة المشتركة | BusinessPartner, Product, Role, Sequence, Setting, ApprovalWorkflow, Attachment | 39 / 31 |
Accounting | دفتر أستاذ كامل وأصول وبنوك وموازنات | Account, JournalEntry, FiscalYear, BankReconciliation, FixedAsset, CostCenter | 51 / 44 |
LIS | نظام معلومات المعامل المكتمل (المرجع الإكلينيكي القائم) | LabPatient, LabRequest, LabSample, LabResult, LabInvoice, LabMachine, LabQcResult, LabInsuranceContract | 137 / 66 |
HRM | الموارد البشرية: حضور بيومتري وإجازات ورواتب وتوظيف | Employee, Attendance, Payroll, LeaveRequest, BiometricDevice, Shift | 47 / 40 |
Inventory | المخازن والحركات وطبقات التكلفة والجرد | Warehouse, StockBalance, InventoryMovement, InventoryCostLayer | 15 / 14 |
Sales | دورة البيع: عرض سعر ← أمر ← تسليم ← فاتورة ← تحصيل | SalesQuotation, SalesOrder, SalesInvoice, SalesPayment, SalesCommission | 16 / 14 |
Purchases | دورة الشراء: طلب ← أمر ← استلام ← فاتورة ← سداد | PurchaseRequest, PurchaseOrder, PurchaseGrn, PurchaseBill | 14 / 13 |
POS | نقاط البيع والجلسات النقدية | POSTerminal, POSSession, POSCoupon | 7 / 5 |
WebStore | متجر إلكتروني كامل بعملاء وسلال وطلبات | StoreCustomer, StoreOrder, StoreCart, StorePrescription | 25 / 29 |
CRM | امتداد علاقات العملاء فوق سجل الأطراف | CrmCustomerExt, CrmTicket, CrmSlaPolicy | 1 / 6 |
CMMS | صيانة الأصول وأوامر الشغل والصيانة الوقائية | CmmsAsset, CmmsWorkOrder, CmmsPmSchedule | 1 / 6 |
Production | التصنيع: قوائم مواد وأوامر إنتاج | BillOfMaterials, ProductionOrder, ProductionCenter | 3 / 7 |
QMS | إدارة الجودة: فحوص وعدم مطابقة وإجراءات تصحيحية | Inspection, NonConformance, CapaAction | 1 / 7 |
NPHIES | تكامل منصة التأمين الصحي السعودية «نفيس» | NphiesConfig, NphiesPreauth, NphiesTransaction | 6 / 3 |
EInvoicing | الفوترة الإلكترونية الرسمية وإرسالياتها | EInvoiceConfig, EInvoiceDocument, EInvoiceSubmission | 3 / 3 |
CoreServiceProvider) يحمّل الهجرات والإعدادات والترجمات تلقائياً، والتفعيل عبر modules_statuses.json.BusinessPartner عبر partner_id.PermissionDependencyRegistry::register() مع حزم أدوار جاهزة.Modules/LIS/app/Actions/PostLabInvoice.php يستدعي Modules\Accounting\Actions\CreateJournalEntry (قيود عادية وقيود تأمين).LabSampleReceived ← GenerateResultsOnSampleReceived، LabResultReleased ← PostInvoiceItemOnResultRelease) تفصل المراحل الإكلينيكية عن المالية.الخلاصة الاستراتيجية: المنصة تقدّم لأي موديول HIS أو OBGY جديد البنية الإدارية والمالية والأمنية كاملةً؛ الفجوة الوحيدة الجوهرية هي غياب «سجل مريض موحّد» على مستوى النواة، وهي نقطة القرار المعمارية الأولى قبل بناء HIS (استنتاج).