هل الباك إند الحالي مهيأ؟ كيف يُبنى الموديول؟ كيف يتكامل مع المعامل (LIS) والموارد البشرية والحسابات والمنتجات؟ وماذا عن ملف المريض والاستقبال والفندقة وحجز الغرف؟ — إجابات مبنية على تشريح فعلي للكود (15 موديولاً، بالملف والسطر) لا على افتراضات.
نعم — المنصة مهيأة لاستضافة نظام مستشفيات، والقرار الصحيح أنه موديول منفصل Modules/HIS يستهلك LIS والحسابات والـ HRM ولا يعيد بناءها. أقوى دليل: وحدة المعامل نفسها — أعقد موديول في النظام (135 هجرة، ~311 مساراً) — بُنيت بنفس الوصفة وتتكامل اليوم فعلياً مع الحسابات (قيود يومية كاملة بأنواع فواتير خمسة)، ومع شركاء الأعمال (كل مريض يصبح تلقائياً شريكاً له حسابات أستاذ خاصة)، ومع الخزائن وورديات الكاشير والتأمين وNPHIES. هذه بالضبط البنية التحتية التي يحتاجها أي HIS — وهي موجودة وتعمل.
in_patient / emergency موجودة في الـ enum منذ البداية، وكيان الزيارة lab_visits قائم. أي أن «الاستقبال الذي يطلب تحاليل» — أحد أهم متطلباتك — تكامل وليس بناء: شاشة استقبال HIS تستدعي مسار إنشاء الطلب الموجود، والمعمل يبقى المنفّذ بلا أي تغيير.module.json + ثلاثة Providers + ملفات مسارات + هجرات/زارعات/ترجمات — إنشاء Modules/HIS ميكانيكياً رخيص (سطر artisan + dump-autoload + تسجيل في الحالة والصلاحيات وقائمة الواجهة ~30 سطراً إضافياً). module.json · LISServiceProvider.php:22-39system.enabled_modules تحترمه الواجهة (moduleGuard) بينما الخادم لا يفحصه إطلاقاً — موديول «معطّل» تبقى API الخاصة به قابلة للنداء (تحقق مباشر: grep شامل للخادم — النتيجة الوحيدة لـ enabled_modules هي DTO ترخيص لا أي فرض)؛ وطبقة الترخيص المركزية موجودة لكنها غير موصولة كـ middleware. قرار فرض على مستوى API مطلوب ضمن التأسيس. system-modules.service.ts · auth.guard.ts:162| قدرة الـ HIS | الموجود اليوم | التقييم | الاستراتيجية |
|---|---|---|---|
| ملف المريض + ربطه بالحسابات | lab_patients يغطي ~80% من سجل مريض رئيسي: MRN، هوية وطنية فريدة لكل شركة، جنسية، تأمين، روابط بورتال، وأهمها partner_id ← شريك أعمال بحسابات مدينة/دائنة تلقائية — متطلب «المريض المربوط بالحسابات» يعمل اليوم حرفياً في LIS | جزئي قوي | ترقيته لكيان مشترك (القرار 1) |
| الاستقبال يطلب تحاليل | POST /lis/requests يقبل اليوم: المريض، الطبيب، التحاليل/الباقات، الفرع، عقد التأمين، والمصدر in_patient/emergency + توليد فاتورة تلقائي | جاهز | تكامل عبر استخراج Action (القرار 3) |
| الأطباء | سجل ناضج في LIS (تخصصات، ترخيص، توقيع، محرك عمولات وتسويات كامل) — لكن صفر ربط بموظفي HRM (الـ FK مؤجل بتعليق صريح في الهجرة) | جزئي | إضافة user_id/employee_id ويصبح سجل الممارسين الموحد |
| الزيارة/الـ Encounter | lab_visits غلاف رفيع 1:1 حول طلب معمل (مسجّل/منتظر/جارٍ/مكتمل) | بذرة | كيان Encounter جديد في HIS يبنى على النمط |
| المواعيد والحجوزات | لا يوجد أي محرك مواعيد/تقويم في الموديولات الـ 15 («appointment» مجرد تسمية في enum؛ CRM تذاكر فقط) | غير موجود | بناء جديد — أكبر بند واجهةً أيضاً |
| الفندقة: أجنحة/غرف/أسرّة + ADT | صفر — بحث شامل في كل الموديولات: لا جداول ولا مفاهيم (أصول CMMS فيها نص موقع حر فقط) | غير موجود | بناء جديد كامل (المرحلة 2) |
| الكتالوج: منتجات وخدمات وأسعار وتأمين | منتجات Core فيها نوع «خدمة» وتتبع باتشات؛ لكن قوائم الأسعار المسماة وتغطية التأمين (حصة مريض/شركة، حدود، فوترة شهرية) موجودة في LIS فقط ومربوطة بالتحاليل | انقسام | تعميم نمط LIS للتسعير/التأمين على بنود HIS |
| الصيدلية | كمخزن تعمل اليوم: مخزون بباتشات وتواريخ صلاحية + POS للبيع؛ الصيدلة الإكلينيكية (وصفات/eMAR/مخدرات) غير موجودة | المخزن جاهز | مرحلة 3 — فوق Inventory/POS |
| فوليو المريض (الفاتورة المجمعة) | لا يوجد كيان فوليو/إيداع — لكن النمط الأولي موجود ويعمل: الفوترة المرحلية بند-ببند بقيود لحظية مطبقة على فواتير B2B، وتخصيص الدفعات FIFO، وسندات القبض | نمط جاهز | تعميم النمط + كيان Encounter/Folio (القرار 4) |
| الدفعات المقدمة/الودائع | غير مدعومة (الدفع مربوط بفاتورة منشورة ويمنع الزيادة) | ناقص | تبنى على سابقتي سند القبض وتخصيص FIFO |
| كاشير الاستقبال والخزائن | كامل في LIS: طرق دفع ديناميكية (تمارا/تابي)، خزائن بحسابات أستاذ تلقائية، ورديات بتقرير Z | جاهز | إعادة استخدام مباشرة |
| التأمين والمطالبات + NPHIES | عقود بأسعار معتمدة وحصص، فوترة شهرية، وتكامل NPHIES (أهلية/موافقات/مطالبات FHIR) | جاهز | تعميم على بنود HIS غير المعملية |
patient_id في 52 ملفاً، وNPHIES يبني FHIR Patient منه مباشرة، وفيه فعلاً ربط الحسابات والبورتال — نقله أغلى بكثير من ترقيته. قاعدة سلامة حرجة ترافق القرار: الجدول ثنائي الغرض (مرضى الشركة + مرضى معامل B2B) — يجب أن يرى HIS حصرياً external_lab_id IS NULL كـ Global Scope مع اختبار يحرسها.managingOrganization — وهو حرفياً دور عمود external_lab_id. وعرض مرضى B2B في شاشة الموظفين اليوم مقصود لا تسريب (بشارة معمل موصوفة في الكود).LabResultReleased / LabRequestCompleted يستمع لها HIS لتغذية ملف الزيارة. بهذا يبقى LIS قابلاً للبيع منفرداً كما هو اليوم.CreateLabRequest Action يستهلكه كونترولر LIS نفسه (سلوك مطابق بالبايت) ويستدعيه HIS، + عمود encounter_id اختياري على الطلبات ليرتبط الأمر بالزيارة ويتجمّع في الفوليو. الواجهة أسهل: ويزارد الطلبات نفسه يدعم وضع Dialog مدمج — شاشة الاستقبال تفتحه كما هو. ونفس العقد يصبح القالب لاحقاً للأشعة وأي منفّذ خدمة آخر.internal()/forLab()) يستهلكها HIS ومواضع محددة فقط؛ كل استعلامات LIS الحالية (قوائم العمل، الكانبان، النتائج — التي تحتاج المجموعتين عمداً) تبقى بلا أي لمسة.internalOnly الموجود أصلاً في خدمة الواجهة؛ حارس الدمج يُسلَّم مع رسالة الخطأ المترجمة في شاشة الدمج؛ تصحيح مؤشر اللوحة تغيير رقمي مقصود — وكل ذلك في حزمة نشر واحدة (خادم + واجهة معاً) حتى لا توجد لحظة «خادم جديد بواجهة قديمة».| البند | الخطر على السلوك الحالي | بوابة الإثبات | قيمته الذاتية اليوم | التوقيت |
|---|---|---|---|---|
| رفع نطاق الفروع من LIS إلى Core (نقل class + shim توافقي — مواقع النداء الـ 14 بلا أي تغيير) | لا خطر | سويتات LIS القائمة | يفتح نطاق الفروع لـ HRM/Sales | هذا الأسبوع |
ربط الطبيب بالموظف: عمود employee_id خامل على سجل الأطباء (سلسلة طبيب←موظف←مستخدم تكتمل) | صفر | LabDoctorApiTest 11 | ربط الرواتب/العمولات | هذا الأسبوع |
استخراج CreateLabRequest Action من الكونترولر (~300 سطر) بمطابقة بايت + encounter_id خامل | منخفض | LabRequestApiTest 42 + سويتات B2B 74 | يسدد دين الكونترولر الضخم | هذا الأسبوع |
| تحصين شريك B2B (حزمة الـ 8 بنود في القرار 1) + الـ Global Scope والترقية للكيان المشترك | منخفض — تغييرات مقصودة فقط | LabPatientApiTest 20 + اختبارات حراسة جديدة | يصلح تسريبات حقيقية اليوم (الدمج، الويزارد، المؤشر) | الأسبوع القادم |
| فرض مفتاح الموديولات على مستوى API | يجب log-only أولاً | قياس السجلات أسبوعين | حوكمة | الأسبوع القادم — وضع المراقبة فقط: القياس الفعلي أثبت أن إعدادات الشركات قديمة (شركة عليها مبيعات ومشتريات ومخازن وموظفون فعليون وإعدادها لا يذكر هذه الموديولات) — الفرض الفوري كان سيكسر تدفقات شغّالة |
| سقّالة Modules/HIS + صلاحيات his.* | خاملة لكن لا داعي لها الآن — تُنشأ عند انطلاق HIS | مع HIS | ||
| جداول Encounter/Folio + أحداث النطاق | تصميمها يُعتمد الآن، إنشاؤها مع HIS | مع HIS | ||
الإجمالي المعدَّل لحزمة «الآن»: ~6–9 أيام-مطوّر (أقل من تقدير التأسيس الأصلي لأن بندين أُجِّلا بداعي عدم الحاجة لا الخطورة).
إجابة سؤال «إيه تاني محتاج يبقى عاماً؟» — جردٌ كامل للقدرات التي نمت داخل LIS بينما هي بطبيعتها قدرات منصة. القاعدة الحاكمة: نرفع الآن ما يصلح خللاً قائماً أو يلزم لأكثر من موديول بلا تكلفة، ونرفع البقية عند أول حاجة فعلية (الرفع المبكر بلا مستهلكٍ ثانٍ = هندسة زائدة).
| القدرة | مكانها اليوم | من يحتاجها غداً | التوقيت | ملاحظة |
|---|---|---|---|---|
| نطاق بيانات الفروع (own/branch/all) | داخل LIS (LisDataScope) | HIS وHRM وSales | الآن — مُقرر | نقل class لـ Core بـ shim توافقي؛ الـ 14 موضع نداء بلا تغيير |
| سجل تبعيات الصلاحيات والقوالب الجاهزة (التوسعة + presets + صفحات الهبوط) | داخل LIS — وCore يستورد منه (انعكاس طبقات قائم) | HIS سيحتاج تسجيل his.* بنفس الآلية | الآن — يُضاف للحزمة | سجل Core يساهم فيه كل موديول بملف تبعياته؛ يصلح الانعكاس RoleSaveService.php:10 ويفتح الباب لأي موديول قادم. ملاحظة: محرك الصلاحيات نفسه (spatie + RoleSaveService) عام في Core أصلاً — لا نقل مطلوب |
| طرق الدفع الديناميكية + الخزائن + ورديات الكاشير (تمارا/تابي، تقرير Z) | داخل LIS (جداول lab_*) | كاشير استقبال HIS أول مستهلك ثانٍ حقيقي؛ وPOS/Sales لاحقاً | مع HIS مرحلة 1 | الرفع قبلها بلا داعٍ — وعنده تُنقل الجداول بأسماء عامة مع جسور توافق لـ LIS |
| خدمة ترحيل الرسوم الموحدة (تعميم نمط الفوترة المرحلية + توحيد اختيار حساب المدينين المنسوخ 3 مرات داخل LIS وحده) | أفعال خاصة بكل موديول | فوليو HIS — وكل الموديولات تستفيد | مع الفوليو (HIS م1) | تمنع «النسخة السادسة» من نفس المنطق — مخطَّط لها في القرار 4 |
| قوائم الأسعار المسماة + التغطية التأمينية (أسعار معتمدة، حصص، حدود، فوترة شهرية) | داخل LIS ومربوطة بالتحاليل FK | خدمات/غرف/إجراءات HIS | مع HIS مرحلة 1 | تعميم على بنود polymorphic — أكبر بنود هذا السجل جهداً |
| سجل الممارسين (أطباء بعمولات وتواقيع) | داخل LIS | HIS يستهلكه مباشرة (القرار المعتمد) | يبقى مكانه + ربط HRM الآن | الرفع الكامل لـ Core يُقيَّم فقط لو احتاجته موديولات غير صحية |
| خدمة ضرائب عامة (VAT اليوم إعداد lis.*) | إعداد لكل موديول | فواتير HIS | لاحقاً — عند توحيد الفوترة | منخفضة الإلحاح؛ تُحل ضمن خدمة الترحيل الموحدة |
| عقد الطباعة الموحد (واجهة) | مُعمَّم فعلياً (shared/print + عقد القوالب) بأسماء LIS-ية | إيصالات وفواتير HIS | إعادة تسمية فقط عند أول استهلاك HIS | الأصعب أُنجز في مشروع الطباعة — المتبقي شكلي |
| عام بالفعل ولا يحتاج أي نقل: محرك الصلاحيات والأدوار (Core + العزل بالشركات)، التسلسلات لكل شركة/فرع، الإعدادات، شركاء الأعمال وحساباتهم التلقائية، فعل القيود المحمي، الفروع وأختامها، المرفقات، الإشعارات — وهذه تحديداً هي «الهدية» التي يرثها HIS من اليوم الأول. | ||||
| المحور | الدرجة | الخلاصة | |
|---|---|---|---|
| البنية المالية (قيود، حسابات مريض، خزائن، تأمين، NPHIES) | 9/10 | جاهزة ومجربة — HIS يركّب عليها تركيباً | |
| بنية الموديولات والتعددية (شركات/فروع/صلاحيات/تسلسلات) | 8/10 | الوصفة مثبتة بأعقد موديول؛ ينقصها فرض API للمفاتيح | |
| الواجهة (نمط تطبيق-داخل-تطبيق، صلاحيات، طباعة، RTL) | 8/10 | النمط مجرب 3 مرات (POS/HR/Lab) — HIS رابعها؛ معظم الشاشات تركيب لا اختراع | |
| هوية المريض والممارسين | 7/10 | 80% موجود — مشروط بترقية التأسيس وحارس B2B | |
| انضباط التكامل (عقود/أحداث بين الموديولات) | 4/10 | حدث واحد في النظام كله؛ التاريخ أثبت خطر الازدواج — يعالَج بالتأسيس | |
| محرك المواعيد | 1/10 | لا يوجد محرك — الدرجة لوجود بذرة الزيارات (lab_visits) وتسمية enum فقط؛ البناء جديد واجهةً وخادماً | |
| الفندقة/الأسرّة/الفوليو | 0–1/10 | لا وجود لأي جداول (تحقق مباشر بالبحث الشامل) — الدرجة الجزئية لأن أنماطه المحاسبية الأولية (فوترة مرحلية، FIFO) قائمة | |
| الإجمالي | ≈6/10 | جاهز بشروط — لا عوائق صلبة؛ الفجوات «بناء نطاق» لا «جراحة منصة» |
external_lab_id IS NULL + اختبار حارس دائم — يُنفَّذ في التأسيس قبل أي شاشة.