🔬

موديول المعامل LIS — السطح التكاملي (LIS Module Integration Surface)

موديول المعامل هو الموديول الإكلينيكي الوحيد العامل فعلياً في الإنتاج داخل Moon ERP، وهو بذلك «القالب المُثبَت» الذي يجب أن يُبنى عليه أي موديول إكلينيكي قادم (HIS أو عيادات النساء والتوليد). هذا القسم يوثّق بنيته الفعلية كما قُرئت من الكود في Modules/LIS: خريطة الكيانات، دورة حياة الطلب، الأحداث التي يبثّها، التكامل المحاسبي، نمط الصلاحيات، ونطاق الفروع — بالإضافة إلى أعمدة «الجاهزية للمستشفى» التي أُضيفت بالفعل ولم تُستهلك بعد.

حجم الموديول بالأرقام

66نموذج بيانات (Model)
137Migration
10أحداث Domain Events
26خدمة Service
66Controller
36اعتمادية صلاحيات صريحة

خريطة الكيانات الأساسية

جميع الجداول تحمل البادئة lab_ والموديول مكتفٍ ذاتياً مع جسور محسوبة نحو بقية الـ ERP:

دورة حياة الطلب — من الاستقبال إلى الفاتورة

  1. الاستقبال: إنشاء الطلب عبر الأكشن Modules\LIS\Actions\CreateLabRequest — وهو مستخرج نصياً من الكنترولر خصيصاً «لكي يستطيع HIS إنشاء طلبات معمل عبر نفس المسار» (تعليق موثق في الكود: HMS Phase-0 W1-3). شاشة الاستقبال تُنشئ الفاتورة وتحصّل الدفع في نفس الخطوة، وسلسلة تسعير واضحة: سعر صريح ← تسعير معمل خارجي ← قائمة أسعار الطبيب ← السعر الافتراضي.
  2. سحب العينات: الجمع يبث LabSampleCollected، والاستلام يبث LabSampleReceived الذي يولّد صفوف النتائج المعلّقة، ويفتح معالجة الأقسام، ويُنشئ إحالات خارجية تلقائياً للفحوصات المُسنَدة للخارج.
  3. قوائم العمل: كانبان أقسام، صندوق نتائج الأجهزة مع مطابقة آلية MachineResultMatchingService وقواعد تحقق تلقائي.
  4. إدخال النتائج: يبث LabResultEntered (يستهلك الكواشف ويحدّث حالة الطلب) وCriticalResultDetected للقيم الحرجة (إنذار فوري).
  5. التحقق ← الاعتماد ← الإصدار: سلّم صلاحيات منفصل لكل خطوة (lis.results.validate / approve / release) مع صلاحية استثنائية محروسة release_unpaid.
  6. عند الإصدار: حدث LabResultReleased يشغّل سلسلة مستمعين مرتّبة عمداً في EventServiceProvider: تجميع الباقات والمعادلات ← النشر التلقائي للبوابة ← ترحيل بند الفاتورة B2B محاسبياً ← قلب الطلب إلى completed وبث LabRequestCompleted.
  7. بعد الإصدار: مسارات سحب وتصحيح من الدرجة الأولى بأحداث LabResultRetracted وLabResultCorrected وسجل تدقيق كامل في lab_result_audit_logs.

الأحداث المبثوثة — نقطة استهلاك النتائج لأي موديول قادم

عشرة أحداث في Modules/LIS/app/Events تحمل النموذج كاملاً، وأهمها للتكامل: LabResultReleased (لكل فحص) وLabRequestCompleted (لكل طلب) — أي أن HIS أو موديول النساء والتوليد سيستقبل النتائج بالاشتراك في نفس ناقل الأحداث الذي يستخدمه LIS داخلياً للفوترة والنشر، دون أي تعديل على المعمل.

التكامل المحاسبي

قاعدة ثابتة: LIS يحتفظ بدفتر مساعد خاص به ويرحّل قيوداً ملخّصة فقط عبر موديول المحاسبة — لا يكتب في دفتر الأستاذ مباشرة. الترحيل في Modules\LIS\Actions\PostLabInvoice عبر Modules\Accounting\Actions\CreateJournalEntry، بحسابات من الإعدادات (lis.receivable_account_id، lis.revenue_account_id، lis.tax_payable_account_id) مع تفضيل حساب مدينين خاص بالشريك عبر AccBpExt، وقيد تكلفة مبيعات منفصل، واحتساب عمولات الأطباء تلقائياً عند الترحيل، وترحيل بنود B2B بنداً-ببند فور إصدار كل نتيجة (مستمع PostInvoiceItemOnResultRelease — idempotent).

الصلاحيات ونطاق الفروع

الآليةالتنفيذ الفعليالجاهزية لإعادة الاستخدام في HIS/OBGY
صلاحيات بنمط lis.{resource}.{action}Middleware على مستوى الكنترولر، مثال موثق في LabRequestControllerنمط قابل للنسخ مباشرة كـ his.* / obgy.*
خريطة اعتماديات الصلاحياتLisPermissionDependencies: 36 حافة صريحة + قاعدة عامة (أي فعل يستلزم view)، تُوسَّع كإغلاق متعدٍّ عند حفظ الدورسُجّلت في سجل مركزي Modules\Core\Support\PermissionDependencyRegistry (مرحلة HMS Phase-0 W1-4) — نقطة امتداد جاهزة لأي موديول
نطاق رؤية البيانات بالفرعown / branch / all حسب دور المستخدم، مع فلترة X-Branch-Id وختم فرع التشغيل على كل سجل جديدالمنطق رُفع بالفعل من LIS إلى Modules\Core\Support\DataScope (مرحلة W1-1) وLisDataScope أصبح غلافاً متوافقاً فقط

أعمدة الجاهزية للمستشفى — مضافة فعلاً وخاملة عمداً

عقد التكامل المستقبلي: كيف يطلب HIS/OBGY تحليلاً ويستلم نتيجته

  1. إنشاء الطلب باستدعاء CreateLabRequest بمصدر in_patient مع تعبئة encounter_id — فيحصل تلقائياً على التسعير والفوترة والتأمين وختم الفرع.
  2. توحيد هوية المريض مؤقتاً عبر lab_patients.partner_id (BusinessPartner) إلى حين حسم قرار سجل المرضى المركزي (استنتاج)، وهوية الطبيب عبر employee_id.
  3. استلام النتائج بالاشتراك في LabResultReleased وLabRequestCompleted وLabResultCorrected/LabResultRetracted للتعديلات.
  4. اعتماد نفس «وصفة الموديول الإكلينيكي الجيد»: جداول ببادئة موحدة، Enums لكل آلة حالات، أحداث ومستمعون مرتّبون للآثار الجانبية، Actions كنقاط دخول بين الموديولات، ترحيل محاسبي عبر CreateJournalEntry فقط، وصلاحيات ونطاق فروع من Core.