تقرير قرار معماري — للإدارة العليا

الرؤية الاستراتيجية: كيف تكتمل المنظومة الطبية؟
Moon ERP × LIS × HIS × OBGY

دراسة معمارية حاسمة تجيب على السؤال المصيري: ما العلاقة بين نظام الـ ERP القائم، وموديول المعامل LIS العامل بالإنتاج، ونظام معلومات المستشفيات HIS المخطط له، ونظام عيادات النساء OBGY الذي اكتمل تحليله — ومَن يُبنى على مَن؟ أُجريت الدراسة بمنهجية لجنة تحكيم: مسح أدلة كامل للكود الفعلي، ثم ثلاث معماريات متنافسة دافع كل مهندس عن واحدة بأقصى قوة، ثم ثلاثة محكّمين عدائيين، ثم توليف نهائي ملزم.

📅 تاريخ الإعداد: 11 يونيو 2026 🤖 أُعدّ بواسطة: Claude Code — 16 وكيل تحليل وتحكيم 📂 المصدر: كود Moon ERP الفعلي + تحليل OBGY الكامل + قرارات HMS المعتمدة
15موديول ERP قائم
66موديل في LIS وحده
3معماريات تنافست
3محكّمون عدائيون
2موديولان جديدان فقط
4منتجات قابلة للبيع
📊

الملخص التنفيذي (Executive Summary)

الإجابات المباشرة على أسئلة الإدارة، ثم خلاصة المنطق — التفاصيل والأدلة الكاملة في الأقسام الجانبية.

الإجابات المباشرة

السؤالالقرارالسبب في سطر
هل يكون OBGY هو نواة الـ HIS؟لا — بشكل قاطعOBGY بلا مفهوم Encounter أصلاً (جداوله الإكلينيكية لا ترتبط بالزيارات)، بلا تنويم/طوارئ/أسرّة/تأمين، و~48% من محتواه خاص بطب النساء فقط، وكوده القديم غير قابل للنقل أمنياً — لكنه يظل أثمن أصل معرفي في المعادلة.
موديول واحد أم موديولات منفصلة؟منفصلانModules/HIS منصة إكلينيكية عامة لأي مستشفى + Modules/Obgy أول موديول تخصصي يركّب عليها — بنفس القاعدة الذهبية التي تُبقي LIS قابلاً للبيع منفرداً.
كيف يعمل الجميع معاً؟عمود فقري واحدمريض واحد (lab_patients يرقّى ليصبح السجل الرئيسي MPI)، مواجهة واحدة (his_encounters)، حساب مالي واحد (his_folios) — وكل التخصصات (معمل، نساء، وغداً أي تخصص) تتصل بها بعقود أحداث ثابتة.
كيف نخدم أي مستشفى وليس مراكز النساء فقط؟منصة + إضافاتالـ HIS لا يذكر أي تخصص بالاسم أبداً؛ كل تخصص يسجّل نفسه عبر سجلات التوصيل — فيُباع المنتج بأربع باقات: معمل / عيادات / مركز نساء متكامل / مستشفى عام.

دور OBGY الحقيقي — أربعة أدوار بلا سطر كود واحد

خريطة العلاقات في ست جمل

  1. ERP ↔ LIS: قائم اليوم — LIS يركب على قضبان المنصة (الفروع، الصلاحيات، الترقيم) ويرحّل قيوده عبر CreateJournalEntry فقط.
  2. ERP ↔ HIS: الـ HIS يستهلك الحسابات والموارد البشرية والمخزون والتأمين للأمام كخدمات جاهزة — لا يعيد بناء أي منها.
  3. HIS ↔ LIS: الـ HIS يطلب التحاليل عبر نقطة الدخول الجاهزة CreateLabRequest برقم المواجهة، والنتائج تعود عبر الأحداث (LabResultReleased) — الـ LIS لا يستورد من HIS أبداً ولا يتأثر إطلاقاً.
  4. HIS ↔ OBGY: موديول Obgy يستورد من HIS (المواجهات، الفوترة، النماذج) ويسجّل نفسه في سجلات التوصيل — والـ HIS لا يعرف اسمه أصلاً.
  5. OBGY ↔ LIS: تحاليل الذكورة والهرمونات تصبح فحوصات في كتالوج LIS نفسه بمرجعيات WHO — بلا أي ازدواج.
  6. OBGY ↔ ERP: مرضى OBGY يصبحون سجلات في ملف المريض الموحد، أدويته في كتالوج المنتجات والمخزون، وأمواله عبر الـ Folio إلى الحسابات — ويُلغى ربط cURL القديم نهائياً.

كيف حُسم القرار؟

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

الخلاصة للإدارة

المعادلة التي طلبتموها تتحقق هكذا: الـ ERP هو الأرض، والـ HIS هو الهيكل الإكلينيكي العام فوقها، والـ LIS وOBGY (وأي تخصص قادم) أجنحة متخصصة تركب على الهيكل نفسه. بهذا تبيعون لأي مستشفى منصة عامة كاملة، وتتميزون في سوق النساء والخصوبة بعمق إكلينيكي لا يملكه أحد، دون أن يعيق أي طرف الآخر — وكل قرار هنا ملتزم بالقرارات المعتمدة سابقاً (LIS لا يُمس، HIS موديول واحد، الاعتماديات للأمام فقط).

⚖️

القرار المعماري: مَن يبني على مَن (The Architecture Verdict)

بعد مسح كامل للأدلة (تسعة أقسام موثقة من الشيفرة الفعلية)، وثلاثة مقترحات معمارية متنافسة، ومراجعة تحكيمية عدائية من ثلاث عدسات (الواقع الهندسي، التشغيل السريري، الأعمال والمنتج) — هذا هو القرار النهائي المسبب: مَن هو نواة الـ HIS، وأين يقف OBGY، وكيف يرتبط كل طرف بالآخر. القرار يحترم حرفياً كل القرارات الملزمة المعتمدة سابقاً: Modules/HIS موديول واحد، الاعتماديات أمامية فقط نحو LIS/Accounting/HRM، الرجوع بالأحداث فقط، LIS لا يُمس، ومرضى B2B يبقون في lab_patients.

أولاً: هل يكون OBGY هو نواة الـ HIS؟ — الجواب: لا، بإجماع الأدلة

القرار: OBGY ليس نواة الـ HIS ولن يكون. النواة هي Modules/HIS جديد يُبنى على منصة Moon ERP، ويُستخدم OBGY كـ«بذرة تصميم ومحتوى وأول عميل تجريبي». الأسباب الحاسمة، كلها موثقة من التحليل نفسه:

في المقابل، قيمة OBGY الحقيقية لا تُهدر بل تُحصد في أربعة أشكال: (1) بذرة تصميم مُجرَّبة ميدانياً للنواة العامة (المواعيد/الطابور/فترات اليوم — حيث تسجل المنصة أضعف درجاتها 1/10، ونمط توحيد 18 جدولاً مستنسخاً في 4 جداول متعددة الأشكال، ومحرك الأسئلة والأجوبة، وسير العمليات الجراحية)؛ (2) حزمة محتوى تخصصية كاملة داخل Modules/Obgy؛ (3) أول عميل تجريبي مدفوع مع 10 سنوات بيانات حقيقية و~190 قائمة مصطلحات عربية منسّقة؛ (4) إثبات أن المرحلة الأولى الخارجية (العيادات) قابلة للبيع مستقلة.

ثانياً: موديول منفصل أم مدمج؟ — الجواب: موديولان منفصلان بقاعدة ذهبية

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

ثالثاً: علاقة كل طرف بالآخر — جملة واحدة لكل علاقة

العلاقةالجملة الحاكمة
ERP ↔ LISLIS موديول تخصصي يركب على قضبان المنصة (BaseModel للتينانسي والتدقيق، DataScope للفروع، SequenceService للترقيم) ويرحّل مالياً حصراً عبر CreateJournalEntry — والمنصة لا تعرف شيئاً عن دواخله.
ERP ↔ HISHIS يستهلك خدمات المنصة أمامياً (Core وAccounting وHRM وInventory وNPHIES) عبر Actions وServices معلنة، والمنصة لا تتغير إلا بالترقيات المعتمدة في سجل التعميم (أبرزها استخراج ChargePostingService من PostLabInvoice).
HIS ↔ LISHIS يطلب التحاليل أمامياً عبر Modules\LIS\Actions\CreateLabRequest ممرراً encounter_id، وLIS لا يستورد HIS أبداً — المعلومات تعود خلفياً فقط عبر أحداثه القائمة LabResultReleased / LabRequestCompleted / CriticalResultDetected بصفر تعديل على LIS.
HIS ↔ OBGYObgy يستورد HIS أمامياً (يفتح his_encounters، يرحّل بنوده إلى his_folio_charges، يبني شيتاته على محرك النماذج والقواميس) ويسجّل صلاحياته وتبويباته عبر السجلات — وHIS لا يستورد Obgy ولا يسميه أبداً.
OBGY ↔ LISشيتات Obgy تطلب التحاليل عبر مسار HIS نفسه (CreateLabRequest + جدول الربط obgy_lis_test_map لـ276 فحصاً قديماً)، وتحاليل الذكورة والهرمونات تصبح فحوصات في كتالوج LIS نفسه بمدياتها المرجعية (WHO) — والنتائج تعود بالأحداث.
OBGY ↔ ERPمريضة OBGY تصبح صفاً داخلياً في lab_patients مربوطاً مالياً عبر partner_id → AccBpExt (ما يلغي مزامنة cURL القديمة نهائياً)، ودواؤها في صنف Core Product ومخزون Inventory، ونقودها لا تمر إلا عبر his_folio_charges → ChargePostingService → CreateJournalEntry.

رابعاً: مقارنة المقترحات الثلاثة ودرجات المحكمين

المقترحالفكرةالواقع الهندسيالتشغيل السريريالأعمال والمنتجالنتيجة
P-PLATFORM-FIRST
الفائز — عدستان من ثلاث
نواة HIS رفيعة محايدة للتخصص + Obgy أول موديول تخصصي مركّب78 (فائز)8 (فائز)يُعتمد — بعد امتصاص ضوابط التسلسل من المقترح الثاني
OBGY-AS-SEED
وصيف قوي
توليد Modules/HIS مباشرة من مخطط OBGY §95 وإطلاق صحة المرأة أولاً8 (فائز)77تُمتص ضوابطه: العميل التجريبي من المرحلة صفر، قاعدة «كل جدول له مستهلك إنتاجي»، بوابة التخصص الثاني
Thin-HIS / ERP-Maximalist~17 جدولاً + محرك نماذج EAV/JSON يحمل التوثيق السريري كله4.54.56يُرفض كمعمارية (السجل السريري كـJSON غير مقبول طبياً-قانونياً) — وتُنهب أفضل أفكاره

منطق الحسم: العدسة الهندسية فضّلت OBGY-AS-SEED لأن تصميمه مدفوع الثمن مسبقاً (مخطط §95)، لكن عدستي التشغيل السريري والأعمال رجّحتا P-PLATFORM-FIRST لأنه الوحيد الذي يصل لمستشفى عام بمسار غير مشروط، ويُطلق التعميم التأميني/NPHIES مع أول باقة جديدة لا في آخر المراحل، ويحافظ على مصفوفة الترخيص الرباعية نظيفة، وبصفر قرارات معاد فتحها. القرار النهائي: P-PLATFORM-FIRST معدَّلاً بتسلسل OBGY-AS-SEED — أي «المنصة أولاً، ببذرة OBGY وعميله».

خامساً: الأفكار الممتصة من المقترحين الخاسرين (ملزمة في التنفيذ)

2/3عدسات تحكيم لصالح المعمارية المعتمدة
0قرارات معتمدة سابقاً يُعاد فتحها
16+فكرة ممتصة من المقترحين الخاسرين
22–34أسبوع-شخص حتى باقة صحة المرأة الكاملة

سادساً: خريطة الموديولات المعتمدة واتجاهات الاعتماد

الموديولالدورأهم الجداول/المكوناتيستورد (أمامياً) ←يُمنع عليه
Modules/HIS جديد — موديول واحدالنواة السريرية المحايدة: المواجهة، الحساب المالي، المواعيد، الأوامر، النماذج، الملاحظات، الجراحة، ثم ADT لاحقاًhis_encounters، his_encounter_diagnoses، his_episodes، his_appointments، his_visit_periods، his_folios، his_folio_charges، his_folio_payments، his_deposits، his_prescriptions(+items)، his_service_orders(+items)، his_form_templates/versions/responses، his_observations، his_lookups، his_clinical_exams، his_patient_spouses، his_surgical_bookings، his_operative_notes؛ لاحقاً: his_wards/rooms/beds، his_bed_assignmentsCore، LIS، Accounting، HRM، Inventory، NPHIESاستيراد Obgy أو تسمية أي تخصص
Modules/Obgy جديد — تخصصيعمق صحة المرأة: الشيتات المعقدة كجداول، البسيطة كمحتوى نماذج مُبذَّرobgy_pregnancies، obgy_antenatal_visits، obgy_ivf_cycles + جداول المراحل (سحب بويضات، إرجاع أجنة، تجميد)، obgy_imaging_studies + موجودات الموجات، obgy_endoscopy_*، obgy_infertility_files، التواريخ التوليدية، obgy_lis_test_map؛ القياسات في his_observations والذكورة/الهرمونات في كتالوج LISHIS، Core، LISجداول مرضى/أطباء/أدوية/أسعار/خزائن خاصة، أو ترحيل GL مباشر
Modules/LIS لا يُمسالمختبر كما هو — القيد الحاكم D5: صفر تأثير أداءً وسلوكاًتغيير وحيد مؤجل: تفعيل FK على عموده الخامل lab_requests.encounter_id عند الانطلاق(كما هو اليوم)استيراد HIS نهائياً
Core / Accounting / HRM / Inventory / NPHIESالعمود الفقري القائمترقيات معتمدة فقط: ChargePostingService في Core (تعميم PostLabInvoice ببادئة إعدادات his.*)، توسيع type-hints في NPHIES (FhirPatientBuilder) للمريض المشتركأي اعتماد على موديول سريري

سابعاً: عقود الأحداث (Event Contracts)

الحدثالمُصدِرالمستهلكونالحمولة الأساسية
LabResultReleased قائمLISHIS (إلحاق النتيجة بالمواجهة)، Obgy (عرضها في الشيت)LabResult
LabRequestCompleted / CriticalResultDetected قائمLISHIS (إغلاق الأمر / صندوق إنذار الطبيب والتمريض)LabRequest / النتيجة الحرجة
BusinessPartnerCreated قائمCoreAccounting (CreatePartnerAccounts — حسابات ذمم المريض آلياً)الشريك التجاري
EncounterOpened / EncounterClosed جديدHISObgy، التقارير، الإشعاراتencounter_id, patient_id, type
AppointmentBooked / AppointmentCheckedIn جديدHISشاشة الانتظار، البوابة، الإشعاراتappointment_id, period_id
FolioChargePosted جديد — الخطاف المالي الموحدHISأي موديول سريري حالي أو مستقبلي (أشعة/عمليات) — مع قيد UNIQUE(source_type, source_id)folio_id, source_type, source_id, total
FolioClosed جديدHISتوليد فواتير مقسومة حسب الدافع → ChargePostingServiceCreateJournalEntry(source_type='his_invoice') → مطالبة NphiesClaimService::submit()folio_id
PatientAdmitted/Transferred/Discharged جديد — مرحلة التنويمHISوظيفة يوم-السرير الليلية على الـ Folio، لوحة الأسرّةencounter_id, bed_id
PrescriptionDispensed جديدHISInventory (StockService::decreaseStock بمرجع الروشتة) + بند Folioprescription_id, encounter_id
FormResponseSubmitted جديد — ممتصHISمستمعو التخصصات (مثال: Obgy يُقدّم مرحلة دورة الحقن المجهري عند توقيع نموذج السحب)form_response_id, form_code, encounter_id
PregnancyOpened/Closed، IvfCycleStageCompleted جديدObgyداخل Obgy والتقارير فقط — HIS لا يستمع لأي تخصصpregnancy_id / cycle_id, stage

ثامناً: العمود الفقري للبيانات — قرار MPI / Encounter / Folio

🎬

سيناريوهات تشغيلية: كيف يعمل الجميع معاً (Operational Scenarios)

خمسة مسارات تشغيلية كاملة من البداية للنهاية تُظهر المعمارية المعتمدة وهي تعمل: أي موديول يتحرك في كل خطوة، وأي جدول يُكتب، وأي حدث يُطلق، وأين يمر المال. السيناريوهات تغطي العيادة الخارجية، والتنويم والولادة، ودورة الحقن المجهري، ومستشفى عاماً بلا قسم نساء، واستمرار معامل B2B بلا أي تأثر — وكلها تسير على نفس العمود الفقري: lab_patientshis_encountershis_folio_chargesCreateJournalEntry.

السيناريو 1: مريضة عيادة نساء خارجية — من الحجز إلى القيد المحاسبي

  1. الحجز: موظفة الاستقبال (أو بوابة المريض) تحجز موعداً في Modules/HIS — صف في his_appointments مرتبط بفترة سعة في his_visit_periods، ويُطلق الحدث AppointmentBooked فتتحدّث شاشة الانتظار.
  2. الوصول والطابور: عند تسجيل الحضور (AppointmentCheckedIn) يفتح HIS مواجهة his_encounters بنوع opd ورقم تسلسلي من SequenceService، ويستمد المريضة من lab_patients عبر النطاق internal()، ويضبط queue_position — ويُطلق EncounterOpened.
  3. الشيت السريري: الطبيبة تفتح مساحة العمل /clinic/*؛ تبويب الشيت النسائي يأتي من Modules/Obgy المسجّل في EncounterContentRegistry: الشيت البسيط يُحفظ كاستجابة نموذج his_form_responses مثبتة على إصدار غير قابل للتعديل (his_form_versions) ثم تُوقَّع (draft → signed)، والعلامات الحيوية تُسجَّل صفوفاً منمّطة في his_observations.
  4. الروشتة: وصفة في his_prescriptions/his_prescription_items بأصناف من Core Product؛ عند الصرف من الصيدلية يُطلق PrescriptionDispensed فيخصم Inventory StockService::decreaseStock المخزون بمرجع الروشتة، ويُضاف بند إلى his_folio_charges.
  5. طلب التحاليل: الطبيبة تطلب تحليلاً من شاشة HIS التي تستدعي Modules\LIS\Actions\CreateLabRequest (المسار المستخرج خصيصاً لهذا) ممررةً encounter_id — فيتولد طلب lab_requests بتسعيره وفاتورته داخل LIS بلا أي تعديل عليه، ويظهر في worklists المختبر كأي طلب آخر.
  6. النتيجة: المختبر يُدخل ويعتمد ويُصدر النتيجة بدورة عمله المعتادة؛ الحدث LabResultReleased يصل مستمعَ HIS فيُلحق النتيجة بالمواجهة وتظهر داخل شيت Obgy عبر obgy_lis_test_map؛ ولو كانت حرجة فالحدث CriticalResultDetected ينبّه الطبيبة فوراً.
  7. الفوترة: كشف العيادة والسونار والصرف بنود في his_folio_charges بقيد UNIQUE(source_type, source_id)؛ فاتورة المختبر تدخل الـ Folio بالمرجع فقط ولا تُرحَّل ثانية.
  8. القيد المحاسبي: إقفال الـ Folio (FolioClosed) يولّد الفاتورة حسب الدافع، ثم يرحّل ChargePostingService القيد عبر Modules\Accounting\Actions\CreateJournalEntry (مدين ذمم المريضة عبر AccBpExt.ar_account_id / دائن إيراد وضريبة) بمصدر source_type='his_invoice' — ولو كانت مؤمَّنة تنطلق المطالبة عبر NphiesClaimService::submit().

السيناريو 2: حالة ولادة وتنويم — ADT والعمليات ومطالبة التأمين

  1. الدخول (Admission): من الطوارئ أو بحجز مسبق، يفتح HIS مواجهة his_encounters بنوع ipd (وقد تكون ابنة مواجهة العيادة عبر parent_encounter_id)، ويُطلق PatientAdmitted.
  2. السرير: تخصيص سرير في his_bed_assignments (جناح → غرفة → سرير من his_wards/his_rooms/his_beds)؛ كل نقلة داخلية تُسجَّل بحدث PatientTransferred، ووظيفة ليلية تضيف بند «يوم سرير» إلى his_folio_charges آلياً.
  3. التحقق التأميني: عند مكتب الدخول يُستدعى NphiesEligibilityService::check() (بعد توسيع مدخلاته للمريض المشترك)، ويُحصل على موافقة مسبقة NphiesPreauth تُربط بالـ Folio.
  4. الأوامر أثناء الإقامة: تحاليل عبر CreateLabRequest(encounter_id, source=in_patient) — قيمة الـ enum موجودة أصلاً في LIS؛ أدوية عبر his_prescriptions ثم الصرف والخصم المخزني؛ كل بند يصل الـ Folio بحدث FolioChargePosted.
  5. الولادة القيصرية: حجز في his_surgical_bookings، ثم تقرير عمليات منمّط في his_operative_notes (فريق الجراحة في his_operative_note_staff، التخدير والشق من قواميس his_lookups) — وتسجيل المولود حدث DeliveryRecorded في Modules/Obgy؛ مستلزمات العملية تُخصم من مخزن العمليات (Inventory warehouse) وتتقيد كبنود Folio.
  6. الخروج: PatientDischarged يحرر السرير ويغلق المواجهة؛ FolioClosed يقسم الفاتورة: حصة المريضة نقداً عبر خزائن وورديات الكاشير القائمة، وحصة التأمين فاتورة تحمل أعمدة nphies_claim_status / nphies_preauth_ref / nphies_covered_amount بنمط lab_invoices المثبت.
  7. المطالبة: NphiesClaimService::submit() يبني مطالبة FHIR (بالتشخيصات من his_encounter_diagnoses وأكواد SBS على كتالوج الخدمات) ويسجّل كل شيء في nphies_transactions، والرد يعود بالـ polling ويحدّث الفاتورة — ثم قيد التحصيل عبر CreateJournalEntry.

السيناريو 3: دورة حقن مجهري IVF — حلقة طولية عبر الموديولات

  1. فتح الملف: ملف عقم للزوجين: المريضة صف lab_patients داخلي، وبيانات الزوج في his_patient_spouses؛ تُفتح حلقة رعاية his_episodes بنوع «دورة IVF» يملك تفاصيلها obgy_ivf_cycles في Modules/Obgy، ويُطلق IvfCycleOpened.
  2. تحاليل ما قبل الدورة: الهرمونات وتحليل السائل المنوي فحوصات في كتالوج LIS نفسه (مُبذَّرة بمدياتها المرجعية WHO) تُطلب عبر CreateLabRequest — فتحصل مجاناً على دورة التحقق والاعتماد وواجهات الأجهزة، وتعود النتائج بحدث LabResultReleased إلى شيت العقم.
  3. المتابعة والتنشيط: كل زيارة متابعة مواجهة opd مرتبطة بالحلقة؛ قياسات الجريبات وسماكة البطانة تُسجَّل صفوفاً منمّطة في his_observations وتُعرض في ودجة الشبكة الزمنية (observation grid) — لا JSON مدفوناً.
  4. السحب والإرجاع: سحب البويضات إجراء جراحي يومي (his_encounters type=daycase + his_surgical_bookings)؛ توقيع نموذج السحب يُطلق FormResponseSubmitted فيستمع Obgy ويقدّم مرحلة الدورة (IvfCycleStageCompleted): تخصيب → obgy_embryo_transfers → تجميد الفائض في obgy_cryopreservations.
  5. المال والنتيجة: كل مرحلة ترحّل بنودها إلى his_folio_charges (باقة الدورة أو بنوداً متدرجة) وتُفوتر عبر نفس مسار ChargePostingService؛ ونتيجة الدورة (حمل إيجابي) تغلق الحلقة وتفتح تلقائياً ملف حمل obgy_pregnancies بحدث PregnancyOpened — فتبدأ متابعة الحمل على نفس العمود الفقري.

السيناريو 4: مستشفى عام بلا قسم نساء — نفس المنصة بمفتاح ترخيص مختلف

  1. التفعيل: عميل جديد (مستشفى باطنة وجراحة عامة) يُرخَّص له Core + Accounting + HRM + Inventory + LIS + HIS فقط؛ Modules/Obgy غير مفعّل — والتحقق على مستوى الـ API (بند المرحلة صفر) لا الواجهة فقط.
  2. لا أثر للتخصص: لأن HIS لا يستورد Obgy ولا يسميه، تعمل النواة كاملة: مواعيد وطوابير، مواجهات، تشخيصات ICD في his_encounter_diagnoses، أوامر تحاليل وأدوية، تنويم وأسرّة، عمليات عامة في his_surgical_bookings/his_operative_notes — بلا جدول نسائي واحد في قاعدة بياناته.
  3. محتوى تخصصاته: شيتات الباطنة والجراحة تُؤلَّف كمحتوى في محرك النماذج (his_form_templates + قواميس his_lookups بنطاقات خاصة) — وأي تخصص مستقبلي يحتاج جداول صلبة يمر بحوكمة «مبرر كسر الميتاداتا».
  4. الإثبات المؤسسي: هذا السيناريو هو نفسه «بوابة التخصص الثاني» الملزمة قبل تمويل التنويم: تشغيل تخصص رفيع كمحتوى خالص يثبت للإدارة أن النواة ليست نظام نساء وتوليد متنكراً.
  5. نفس المال ونفس المختبر: الفوترة والمطالبات والمخزون والرواتب تمر بنفس المسارات (FolioClosed → ChargePostingService → CreateJournalEntry → NPHIES) — أي أن باقة «Moon Hospital» منتج تركيب وترخيص، لا مشروع تطوير جديد لكل عميل.

السيناريو 5: معمل B2B الحالي يستمر — صفر تأثر بكل ما سبق

  1. العزل بالبيانات: مرضى المعامل الخارجية يبقون في lab_patients بمالكهم external_lab_id والفهرس الفريد (company_id, ext_scope_key, national_id) — القرار المحسوم 37/40؛ وHIS لا يراهم أصلاً لأنه يقرأ عبر LabPatient::internal() حصراً، وبلا أي Global Scope شامل (القيد المعتمد).
  2. العزل بالاتجاه: LIS لا يستورد HIS بنص القرار D2؛ عموده encounter_id يبقى NULL لكل طلبات B2B والمشي المباشر، فلا يتغير سلوك بوابة المعامل الخارجية ولا سلسلة المناديب (lab_external_lab_couriers) ولا الفوترة الشهرية للمعامل.
  3. العزل بالأداء: القيد الحاكم D5 يسري على كل مرحلة: صفر استعلامات مضافة على المسارات الساخنة (worklist والاستقبال)، وبوابة قبول لكل بند = نجاح كل الاختبارات + قياس curl قبل/بعد، وأي تدهور يُرجِع البند فوراً.
  4. العزل بالأدوات: بوابات CI تمنع آلياً ظهور use Modules\HIS داخل LIS — حماية ميكانيكية لا تعتمد على الانضباط وحده، لأن nwidart لا يفرض اتجاهات الاعتماد بنفسه.
  5. الخلاصة التجارية: باقة «Moon Lab» (Tier-1) تظل تُباع وتعمل مستقلة تماماً كما اليوم — وهي التي تموّل المراحل الأولى من خارطة الطريق.
5مسارات كاملة على عمود فقري واحد
1مسار مالي موحّد: Folio → ChargePostingService → CreateJournalEntry
0تعديلات على شيفرة LIS في كل السيناريوهات
3أحداث LIS قائمة تكفي للرجوع الخلفي كله
🗓️

خارطة الطريق والمراحل (Roadmap & Phasing)

خطة تنفيذ متدرجة من اليوم: تبدأ بحزمة الجاهزية المعتمدة فعلاً (المرحلة صفر، ~7–10 أيام عمل)، وتسير بحيث تنتج كل مرحلة زيادة قابلة للبيع تموّل التي تليها — مختبر ← عيادات ← صحة المرأة ← مستشفى. القاعدتان الحاكمتان طوال الطريق: كل جدول في النواة له مستهلك إنتاجي في أول قطار إصدار له، وLIS لا يتأثر أداءً ولا سلوكاً (بوابة قياس قبل/بعد لكل بند).

تسلسل المراحل

المرحلةالنطاقالموديولات الملموسةالزيادة القابلة للبيعالحجمالاعتماديات
المرحلة 0 — جاهزية المنصة معتمدة — لم تبدأ بنود hms-phase0-spec.md الستة: W1-1 ترقية DataScope إلى Core، W1-2 عمود employee_id على lab_doctors، W1-3 استخراج CreateLabRequest + عمود encounter_id الخامل، W1-4 PermissionDependencyRegistry (يصلح انعكاس Core→LIS)، W2-1 تحصين B2B (نطاقات internal()/forLab())، W2-2 فرض تفعيل الموديولات على مستوى الـ API بوضع التسجيل أولاً Core، LIS (بنود خاملة فقط) لا منتج جديد — لكنها بوابة دخول إلزامية لكل ما بعدها، وتفتح طريق التسعير المتدرج (فرض الترخيص) S ~7–10 أيام عمل لا شيء — تبدأ فوراً
المرحلة 0-ب — مسار تشغيلي موازٍ ممتص من المقترح الوصيف معالجة فورية لثغرات النظام القديم (SQLi، إغلاق mobileservices.php، إزالة نسخ القاعدة من جذر الويب)؛ تصدير إنتاجي حديث للقواميس (~190 قائمة) وجداول RedBean (بوابة حاجزة — خطر R7)؛ توقيع عيادة OBGY عميلاً تجريبياً مدفوعاً بعقد خدمات ترحيل يُفوتر من الآن النظام القديم فقط — صفر مساس بـ Moon ERP إيراد خدمات الترحيل يبدأ قبل أول سطر شيفرة في HIS S موازية للمرحلة 0 — فريق تشغيل لا تطوير
المرحلة 1 — نواة HIS للعيادات الخارجية سقالة Modules/HIS؛ العمود الفقري (his_encounters/his_episodes/his_folios/his_folio_charges بقيد الفوترة الأحادية)؛ محرك المواعيد والطابور (his_appointments بأعمدة scheduled_at والموارد من اليوم الأول)؛ استخراج ChargePostingService وتعميم قوائم الأسعار والتأمين وتوسيع FhirPatientBuilder (جاهزية NPHIES من أول باقة)؛ مساحة العمل /clinic/*؛ ثم — أخيراً لا أولاً — محرك النماذج والقواميس (his_form_templates/versions/responses بسير التوقيع، his_lookups، his_observations) مستخرجاً من قوالب OBGY الحقيقية Modules/HIS (جديد)، Core (الترقيات المعتمدة)، NPHIES (توسيع type-hints) Tier-2 باقة Moon Clinic — عيادات ومجمعات طبية (مصر والسعودية) بمواعيد وطوابير وفوترة ومطالبات؛ وشرط الإطلاق: العميل التجريبي يمارس فعلياً كل جدول في النواة L 8–14 أسبوع-شخص المرحلة 0 مكتملة؛ قرار إداري واحد (انظر جدول القرارات)
المرحلة 2Modules/Obgy وإطلاق العميل التجريبي جداول التخصص المعقدة فقط (obgy_pregnancies، obgy_ivf_cycles ومراحلها، التصوير، المناظير، ملفات العقم) — والشيتات البسيطة محتوى نماذج مُبذَّر؛ الذكورة والهرمونات إلى كتالوج LIS؛ ترحيل البيانات: المرضى إلى lab_patients، فصل صفوف الدفع السحرية (detectionid −99/999/9999) عن المواجهات، الصفوف غير المطابقة كمواجهات source=migration بطوابير مراجعة طبية (خطر R2)؛ ترحيل الوسائط 4.8GB؛ الإطلاق الفعلي بالعيادة Modules/Obgy (جديد)، Modules/HIS (استهلاك)، LIS (بذور كتالوج فقط) Tier-3 باقة Moon Women's Health — مراكز نساء وتوليد وحقن مجهري، بميزة المحتوى العربي المنسّق وعمق IVF النادر في الأنظمة العامة (~22–34 أسبوع-شخص تراكمياً) L 8–12 أسبوع-شخص (يتداخل ذيلها مع المرحلة 1) المرحلة 1 + التصدير الإنتاجي للقواميس (0-ب)
المرحلة 3 — بوابة التخصص الثاني ملزمة تشغيل تخصص رفيع (مثلاً باطنة عامة) كمحتوى خالص: نماذج + قواميس + كتالوج خدمات، بلا جدول صلب واحد — لإثبات أن محركات النواة (الفحص/التاريخ المرضي/القواميس/المواعيد) خالية من بصمة النساء والتوليد؛ أي جدول صلب جديد يمر بحوكمة «مبرر كسر الميتاداتا» بموافقة الإدارة Modules/HIS (محتوى وبذور فقط) عرض بيعي حي: «أضف تخصصاً في أسابيع» — وتأمين مصداقية باقة المستشفى قبل تمويلها S–M 2–4 أسابيع-شخص المرحلة 1؛ شرط مسبق لتمويل المرحلة 4
المرحلة 4 — التنويم وحركة المرضى (ADT) الأجنحة والغرف والأسرّة (his_wards/rooms/beds/bed_assignments)، أحداث الدخول/النقل/الخروج، وظيفة يوم-السرير الليلية على الـ Folio، العربون والدفعات المقدمة على سندات القبض القائمة، تصميم الطوارئ والفرز (سلم ترياج + لوحة تتبع — تصميم جديد كلياً، لم يصممه أحد بعد)، أساسيات محطة التمريض Modules/HIS (امتداد داخلي)، Accounting (استهلاك) Tier-4 باقة Moon Hospital — مستشفيات عامة وخاصة بدورة تنويم كاملة ومطالبات تأمين L 10–16 أسبوع-شخص المرحلتان 1 و3؛ تموّلها إيرادات Tier-2/3
المرحلة 5 — الامتدادات السريرية الصيدلية السريرية وeMAR (طبقة «إعطاء الدواء» الغائبة في كل المقترحات — تُبنى فوق سلسلة الوصف/الصرف القائمة)؛ تعميم إدارة العمليات للمستشفيات العامة بعد التحقق منها على حالات OBGY الجراحية الحقيقية؛ الأشعة (RIS) بعقد «المنفّذ» نفسه D3 الذي يستعمله المختبر؛ سجل الحساسية وقائمة المشاكل Modules/HIS، موديول أشعة مستقبلي ترقيات مسعّرة داخل باقتي Tier-3/4 M–L لكل امتداد 4–10 أسابيع-شخص المرحلة 4 لمعظمها؛ الأشعة قد تسبقها
7–10أيام عمل للمرحلة صفر المعتمدة
~3 شهورحتى أول باقة جديدة قابلة للبيع (Moon Clinic)
22–34أسبوع-شخص حتى باقة صحة المرأة مع عميل حي
4باقات من قاعدة شيفرة واحدة بمفاتيح ترخيص

المخاطر والقرارات المطلوبة من الإدارة

الخطرالأثرالتخفيفالقرار المطلوب من الإدارة
تعارض نطاق: العمق السريري في Modules/Obgy يسبق سقف «HIS v1 إداري-مالي» المعتمد (خطر تضخم EMR رقم 7)توسع غير ممول وتأخر المرحلة 1العمق السريري محصور حصراً خلف مفتاح ترخيص Obgy الذي تموّله شريحته الدافعة — النواة تبقى إدارية-ماليةاعتماد تعديل صياغة رسمي واحد: «العمق السريري مسموح داخل الموديولات التخصصية المرخّصة فقط» — هذا هو القرار الوحيد المعاد فتحه جزئياً
فرض الترخيص اليوم واجهة فقط (moduleGuard) — الخادم لا يتحققالتسعير المتدرج بالباقات مستحيل تقنياًبند المرحلة 0 (W2-2): فرض على مستوى الـ API بوضع تسجيل-فقط أولاً لأن إعدادات الشركات الحية قديمةاعتماد موعد التحول من «تسجيل فقط» إلى «فرض فعلي» بعد أسبوعين من المراقبة
R7: القواميس المنسّقة (~190 قائمة) وجداول RedBean موجودة في الإنتاج فقط — نسخة 2024 فارغةبذور his_lookups وكل الـ ETL محجوبةتصدير إنتاجي حديث كبوابة حاجزة في المرحلة 0-ب قبل أي عمل بذورتفويض الوصول للإنتاج القديم وجدولة التصدير فوراً
R2: السجلات السريرية القديمة لا تشير إلى الزيارات — الربط بالمواجهات اجتهادي (مريض+تاريخ)بيانات تاريخية ملصوقة بمواجهات خاطئة = خطر سريريالصفوف غير المؤكدة تُرحَّل كمواجهات source=migration بدرجات ثقة وطوابير مراجعة يعتمدها طبيب — لا تخمين صامتاعتماد ميزانية وقت طبي للمراجعة ضمن عقد الترحيل المدفوع
انحياز نسائي يتحجر في النواة «العامة» (قوائم فحص الثدي/الغدة، نموذج فترات اليوم في الجدولة)باقة المستشفى تُكشف كنظام نساء متنكربوابة التخصص الثاني الملزمة (المرحلة 3) + مراجعة حياد لكل مخطط نواة + أعمدة جدولة قابلة للترقية من اليوم الأولاعتماد البوابة شرطاً مالياً ملزماً قبل صرف ميزانية المرحلة 4
محرك النماذج بنية تحتية جديدة بلا سابقة في المنصة (درس «محركات الطباعة الأربعة»)تجريد بلا مستهلك يتعفن ويعاد بناؤهيُبنى أخيراً في المرحلة 1 مستخرجاً من قوالب OBGY الحقيقية؛ قاعدة «كل جدول له مستهلك إنتاجي»؛ الشيتات المعقدة تتجاوزه إلى جداول صلبةلا قرار — ضابط تنفيذي يُراقب في مراجعات المراحل
الطوارئ (ترياج) وeMAR وسجل الحساسية لم يصممها أي مقترح — فجوة مشتركة كشفها التحكيمبيع باقة المستشفى بقدرات ناقصة سريرياًمقيدة بنوداً مسماة في المرحلتين 4 و5 بتصميم جديد، لا وعود ضمنيةإقرار أن باقة Tier-4 لا تُسوَّق قبل اكتمال بنود الطوارئ والتمريض في المرحلة 4
تركّز الإيراد المرجعي في عميل واحد (عيادة OBGY)انكشاف تجاري وتصميم مفرط التخصيصالمرحلة 1 تستهدف شريحة العيادات الواسعة بالتوازي؛ NPHIES جاهز من أول باقة لفتح السوق السعودياعتماد هدف مبيعات: عميلا Tier-2 على الأقل خلال ربعين من إطلاق المرحلة 1
🧩

نواة Moon ERP والموديولات الخمسة عشر (Moon ERP Core & Modules)

منصة Laravel 12 مبنية على نظام موديولات nwidart/laravel-modules مع واجهة Angular، تعمل حالياً في الإنتاج بخمسة عشر موديولاً مفعّلاً بالكامل (modules_statuses.json). توفر النواة خدمات منصّة جاهزة — تعدد الشركات والفروع، الصلاحيات، التدقيق، الترقيم، الإعدادات، الموافقات، وناقل الأحداث — يرثها أي موديول جديد (HIS أو OBGY) دون أي تطوير إضافي.

نظرة رقمية سريعة

15موديولاً مفعّلاً في الإنتاج
366ملف Migration إجمالاً
308نموذج بيانات (Model)
137Migration في موديول LIS وحده
24حدث Domain Event معرّفاً

خدمات المنصة التي يرثها أي موديول جديد مجاناً

سجل الأطراف الموحّد: يوجد «شريك أعمال» ولا يوجد «مريض» في النواة

الكيان الرئيسي للأطراف في النواة هو 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, Attachment39 / 31
Accountingدفتر أستاذ كامل وأصول وبنوك وموازناتAccount, JournalEntry, FiscalYear, BankReconciliation, FixedAsset, CostCenter51 / 44
LISنظام معلومات المعامل المكتمل (المرجع الإكلينيكي القائم)LabPatient, LabRequest, LabSample, LabResult, LabInvoice, LabMachine, LabQcResult, LabInsuranceContract137 / 66
HRMالموارد البشرية: حضور بيومتري وإجازات ورواتب وتوظيفEmployee, Attendance, Payroll, LeaveRequest, BiometricDevice, Shift47 / 40
Inventoryالمخازن والحركات وطبقات التكلفة والجردWarehouse, StockBalance, InventoryMovement, InventoryCostLayer15 / 14
Salesدورة البيع: عرض سعر ← أمر ← تسليم ← فاتورة ← تحصيلSalesQuotation, SalesOrder, SalesInvoice, SalesPayment, SalesCommission16 / 14
Purchasesدورة الشراء: طلب ← أمر ← استلام ← فاتورة ← سدادPurchaseRequest, PurchaseOrder, PurchaseGrn, PurchaseBill14 / 13
POSنقاط البيع والجلسات النقديةPOSTerminal, POSSession, POSCoupon7 / 5
WebStoreمتجر إلكتروني كامل بعملاء وسلال وطلباتStoreCustomer, StoreOrder, StoreCart, StorePrescription25 / 29
CRMامتداد علاقات العملاء فوق سجل الأطرافCrmCustomerExt, CrmTicket, CrmSlaPolicy1 / 6
CMMSصيانة الأصول وأوامر الشغل والصيانة الوقائيةCmmsAsset, CmmsWorkOrder, CmmsPmSchedule1 / 6
Productionالتصنيع: قوائم مواد وأوامر إنتاجBillOfMaterials, ProductionOrder, ProductionCenter3 / 7
QMSإدارة الجودة: فحوص وعدم مطابقة وإجراءات تصحيحيةInspection, NonConformance, CapaAction1 / 7
NPHIESتكامل منصة التأمين الصحي السعودية «نفيس»NphiesConfig, NphiesPreauth, NphiesTransaction6 / 3
EInvoicingالفوترة الإلكترونية الرسمية وإرسالياتهاEInvoiceConfig, EInvoiceDocument, EInvoiceSubmission3 / 3

كيف يندمج موديول إكلينيكي في المنصة؟ (نموذج LIS العامل)

  1. التسجيل: مزوّد خدمة لكل موديول (مثل CoreServiceProvider) يحمّل الهجرات والإعدادات والترجمات تلقائياً، والتفعيل عبر modules_statuses.json.
  2. الهوية: ربط الكيانات الخارجية (طبيب، شركة تأمين، معمل خارجي، مريض) بسجل BusinessPartner عبر partner_id.
  3. الصلاحيات: تسجيل شجرة صلاحيات الموديول في PermissionDependencyRegistry::register() مع حزم أدوار جاهزة.
  4. المالية: ترحيل مباشر إلى دفتر الأستاذ — Modules/LIS/app/Actions/PostLabInvoice.php يستدعي Modules\Accounting\Actions\CreateJournalEntry (قيود عادية وقيود تأمين).
  5. سير العمل: أحداث نطاق (LabSampleReceivedGenerateResultsOnSampleReceived، LabResultReleasedPostInvoiceItemOnResultRelease) تفصل المراحل الإكلينيكية عن المالية.

الخلاصة الاستراتيجية: المنصة تقدّم لأي موديول HIS أو OBGY جديد البنية الإدارية والمالية والأمنية كاملةً؛ الفجوة الوحيدة الجوهرية هي غياب «سجل مريض موحّد» على مستوى النواة، وهي نقطة القرار المعمارية الأولى قبل بناء HIS (استنتاج).

🔬

موديول المعامل 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.
💼

الأعمدة المساندة: الحسابات والموارد البشرية والمخزون والتأمين (Accounting, HRM, Inventory & NPHIES)

تمتلك منصة Moon ERP أربع وحدات تشغيلية ناضجة وعاملة في الإنتاج تشكّل العمود الفقري المالي والإداري لأي نظام مستشفيات قادم: وحدة Accounting (دفتر أستاذ كامل وقيود آلية)، ووحدة HRM (موظفون وورديات وحضور ورواتب)، ووحدة Inventory (مخازن وحركات مخزون بطرق تكلفة FIFO/متوسط مرجّح)، ووحدة NPHIES (أهلية التأمين والمطالبات السعودية بصيغة FHIR). الخلاصة الاستراتيجية: الفوترة المحاسبية، والرواتب، ومخزون الصيدلية والمستهلكات، والتكامل التأميني — كلها وظائف موجودة فعلاً ويجب ألا يُعاد بناؤها داخل وحدة HIS، بل تستهلكها HIS عبر عقود تكامل مثبتة يستخدمها مختبر LIS اليوم في الإنتاج.

44نموذج بيانات في Accounting
40نموذج بيانات في HRM
14نموذج بيانات في Inventory
7خدمات FHIR في NPHIES
40Action محاسبي جاهز (ترحيل/اعتماد/عكس)

أولاً: وحدة الحسابات (Accounting) — دفتر الأستاذ المركزي

الوحدة تغطي دورة محاسبية كاملة: شجرة حسابات هرمية ثنائية اللغة في جدول accounts (مستويات أب/ابن، تصنيف header/detail، تصنيف زكوي zakat_classification)، وقيود يومية في journal_entries وjournal_entry_lines بدورة حالات Draft → Approved → Posted / Cancelled، وسنوات وفترات مالية، وعملات وأسعار صرف، وسندات قبض وصرف (receipt_vouchers / payment_vouchers)، وشيكات وعُهد نقدية وتسويات بنكية وأصول ثابتة وموازنات وضرائب واستقطاع وزكاة.

الدليل العملي أن هذا النمط يعمل مع وحدة طبية: مختبر LIS يرحّل فواتيره اليوم عبر Modules/LIS/app/Actions/PostLabInvoice.php الذي ينشئ قيد إيراد بقيمة entry_type = 'lab_invoice' وقيد تكلفة 'lab_cogs' ضمن معاملة واحدة، وكذلك تفعل وحدات Sales وPurchases وPOS وHRM.

ثانياً: وحدة الموارد البشرية (HRM) — الكادر الطبي والإداري

وحدة شاملة: ملف موظف كامل في جدول employees، أقسام هرمية في departments، مسميات وظيفية، ورديات وجداول مناوبات، حضور بأجهزة بصمة، إجازات، رواتب وقروض ومكافآت نهاية خدمة، توظيف وتقييم أداء وتدريب.

ثالثاً: وحدة المخزون (Inventory) — العمود الفقري للصيدلية والمستهلكات

محرك مخزون متعدد المخازن: جدول warehouses (هرمي، مرتبط بالفرع وبحساب محاسبي account_id)، وأرصدة لحظية في inventory_stock_balances (كمية، متوسط تكلفة، قيمة إجمالية لكل منتج/متغير/مخزن)، وسجل حركة كامل في inventory_movements، وطبقات تكلفة FIFO في inventory_cost_layers، ومستندات استلام وصرف وتحويل وجرد وتسوية.

رابعاً: وحدة نفيس (NPHIES) — بوابة التأمين السعودية

تكامل FHIR كامل مع منصة نفيس: إعدادات المنشأة والشهادات في nphies_config، وسجل تدقيق لكل معاملة (طلب/استجابة JSON كاملة) في nphies_transactions، وموافقات مسبقة في nphies_preauths (مرجع الموافقة، المبلغ المعتمد، فترة الصلاحية، البنود المعتمدة).

خريطة: ماذا تستهلك HIS من كل عمود؟

الوظيفة المستشفويةالوحدة المالكةنقطة التكامل الفعليةالقرار
فوترة المرضى وقيود الإيراد والتكلفةAccountingCreateJournalEntry::execute() مع source_type خاص بـ HIS — بنفس نمط PostLabInvoiceتُستهلك — لا تُبنى
سندات القبض/الصرف والخزينة والشيكاتAccountingreceipt_vouchers / payment_vouchers / petty_cashتُستهلك — لا تُبنى
ملفات الأطباء والتمريض ورواتبهم ومناوباتهمHRMemployees.user_id → users + shift_schedules + PayrollAccountingServiceتُستهلك — HIS يضيف فقط الملف المهني السريري
مخزون الصيدلية والمستهلكات الطبيةInventoryStockService::decreaseStock() بمرجع وصفة/أمر طبي + مخازن من نوع صيدليةتُستهلك — لا تُبنى
أهلية التأمين والموافقات والمطالباتNPHIESNphiesEligibilityService / NphiesPreauthService / NphiesClaimServiceتُستهلك بعد تعميمها عن نماذج LIS
تعريف الخدمات والأصناف والشركاء والفروعCoreProduct / BusinessPartner / Branch / SettingsServiceتُستهلك — لا تُبنى

الخلاصة الإدارية

  1. أربع وظائف مستشفوية جوهرية — الفوترة المحاسبية، الرواتب والمناوبات، مخزون الصيدلية، التأمين الصحي — موجودة اليوم في الإنتاج ومثبتة بتكاملات حقيقية مع وحدة طبية (LIS).
  2. نمط التكامل المعتمد في المنصة واضح ومتكرر: الوحدة التخصصية تملك مستنداتها السريرية فقط، وتستدعي العمود المساند عبر Actions وServices وعقود رسمية — وهذا هو القالب الجاهز لـ HIS.
  3. الفجوة الوحيدة الجديرة بالاستثمار هي تعميم وحدة NPHIES لتخدم مريض المستشفى كما تخدم مريض المختبر، وهي فجوة تعميم لا فجوة بناء.
  4. أي تصميم لـ HIS (أو لاعتماد OBGY) يعيد بناء دفتر أستاذ أو محرك مخزون أو مسير رواتب داخله يجب رفضه معمارياً.
🖥️

واجهة Angular وأنماط البناء (Angular Frontend Architecture)

واجهة Moon ERP مبنية على Angular 21 بمكوّنات مستقلة (Standalone Components) مع إدارة حالة NgRx 21 ومكتبة PrimeNG 21، وبدعم كامل للغة العربية (RTL) كلغة أولى. وحدة المختبر LIS تعمل إنتاجياً داخل هذه الواجهة بنمطين: مدمج داخل النظام (/core/lis/*) ومستقل بشاشة كاملة للمختبر (/lab/*)، وهو ما يشكّل المخطط المرجعي الجاهز لبناء واجهة HIS/OBGY.

80+مجلد ميزة في src/app/features/
65+خدمة API في core/services/
60خدمة خاصة بالمختبر lis-*.service.ts
27+شريحة حالة NgRx في core/store/
7,494مفتاح ترجمة في en.json / ar.json

التنظيم العام للمشروع

يتبع المشروع في /home/moonui/public_html/moon-erp/src/app فصلاً صارماً بين الطبقات:

نمط تدفق البيانات موحّد في كل شاشات CRUD: Component → Action → Effect → Service → API → Reducer → Selector مع شكل حالة ثابت لكل شريحة (loading / saving / error / loaded / meta) باستخدام @ngrx/entity.

شاشات المختبر LIS — النموذج العملي الناضج

وحدة LIS تضم أكثر من 60 شاشة في features/lis/ وتعمل بثلاثة سياقات توجيه: مدمج، ومستقل عبر lis-standalone.routes.ts بتخطيط خاص LisLayoutComponent، وبوابة عامة للمرضى برابط رمزي (/p/:token) دون تسجيل دخول. أهم الشاشات التشغيلية:

الشاشةالملفالحجم (سطر)الدور التشغيلي
قائمة عمل الأقسامdept-worklist/dept-worklist.component.ts2,848إدخال النتائج لكل قسم (رقمي/نصي/اختياري/معادلة) مع أعلام LL/HH/L/H/N
قائمة عمل الاعتمادvalidation-worklist/validation-worklist.component.ts3,727مراجعة واعتماد وإطلاق النتائج (validate / approve / release / print)
قائمة عمل السحبcollection-worklist/collection-worklist.component.ts1,646سحب العينات بالباركود وتجميع الأنابيب — تحلّ محل شاشة العينات القديمة على مسار /lab/samples
الاستقبالreception/reception.component.ts574استلام العينات في المعمل (specimen receiving)
لوحة المتابعةboard/lis-board.component.ts315لوحة مراحل (6 مراحل) لكل طلب/قسم مع زمن الانتظار
كانبان (متقاعد)kanban/lis-kanban.component.ts1,490أُحيل للتقاعد في النمط المستقل — المسار /lab/kanban يعيد التوجيه إلى worklist
معالج الطلبات v2request-wizard-v2/معالج من 4 خطوات: المريض ← الفحوصات ← الفوترة (فرد/تأمين/معمل خارجي) ← الدفع

درس معماري مهم: المختبر تحوّل من نموذج الكانبان إلى نموذج Worklist مدفوع من الخادم عبر core/services/lis-worklist.service.ts (عقد WorklistCard / WorklistRow مع علم تشغيل USE_SERVER_WORKLIST) — أي أن منطق ترتيب العمل انتقل للباك-إند وبقيت الواجهة عارضاً ومنفّذاً للإجراءات.

الصلاحيات والحماية

  1. authGuard — يتحقق من الجلسة ويعيد تحميل الملف الشخصي من /auth/me قبل السماح بأي مسار (مع معالجة الجلسات الملغاة).
  2. permissionGuard — يقرأ بادئات الصلاحيات من بيانات المسار مثل data: { permissions: ['lis.results'] } بمطابقة على حدود النقطة، مع تجاوز كامل لدور super-admin.
  3. moduleGuard — يمنع الوصول لمسارات الوحدات المعطّلة من شاشة module-activation.
  4. على مستوى الأزرار: التوجيه الهيكلي *appCan في shared/directives/can.directive.ts يخفي أي زر لا يملك المستخدم صلاحيته — حماية دفاعية والباك-إند يظل الحكم النهائي.

الترجمة والطباعة

ما يجب أن تلتزم به واجهة HIS/OBGY الجديدة

📜

قرارات HMS المعتمدة سابقاً (Settled HMS Decisions & Phase-0)

قبل أي رؤية جديدة لعلاقة ERP ↔ LIS ↔ HIS ↔ OBGY، يجب تثبيت ما اعتُمد فعلاً: دراسة الجدوى المعمارية لنظام المستشفيات (النسخة 2 بتاريخ 10 يونيو 2026، الملف /home/moonui/public_html/hms-feasibility-report.html) ومواصفة التنفيذ /home/moonui/hms-phase0-spec.md. هذه الوثائق تحمل قرارات معتمدة من المالك بصيغة «لا يُعاد فتحها» — أي أنها قيود مُلزِمة على أي طرح جديد بخصوص نظام عيادات النساء والتوليد (OBGY)، وحالتها التنفيذية: معتمدة ولم يبدأ تنفيذها بعد.

6/10الجاهزية الإجمالية للمنصة (بلا عوائق صلبة)
4قرارات معمارية حاكمة معتمدة
6بنود المرحلة 0 — كلها لم تبدأ بعد
21–35أسبوع-شخص حتى نهاية المرحلة 2 (تنويم كامل)
144+اختباراً في بوابة القبول قبل أي دفع

القرارات المعتمدة المُلزِمة (لا يُعاد فتحها)

وثّقت الدراسة أربعة قرارات حاكمة، وأكدتها مواصفة المرحلة 0 تحت عنوان صريح SETTLED DECISIONS (do not reopen):

مصفوفة التداخل المعتمدة — قدرات المستشفى مقابل الموجود

قدرة HISالموجود اليومالتقييم المعتمدالاستراتيجية
ملف المريض + ربطه بالحساباتlab_patients يغطي ~80% (MRN، تأمين، partner_id ← شريك أعمال بحسابات تلقائية)جزئي قويترقية في المكان (قرار 1)
الاستقبال يطلب تحاليلPOST /lis/requests يقبل المصدر in_patient/emergency منذ البدايةجاهزتكامل عبر CreateLabRequest
الأطباءسجل ناضج في LIS بعمولات وتواقيع — صفر ربط بـ HRMجزئيعمود employee_id يكمل سلسلة طبيب←موظف←مستخدم
الزيارة / Encounterlab_visits غلاف رفيع 1:1 حول طلب معملبذرةكيان Encounter جديد في HIS
المواعيد والحجوزاتلا محرك تقويم/حجز في الموديولات الـ15 إطلاقاًغير موجود (1/10)بناء جديد — أكبر بند
الفندقة: غرف/أسرّة + ADTصفر جداول (بحث شامل مؤكَّد)غير موجود (0–1/10)بناء جديد كامل (مرحلة 2)
التسعير والتأمينقوائم أسعار وتغطية تأمين في LIS مربوطة بالتحاليل فقطانقسامتعميم على بنود polymorphic
الصيدليةالمخزن جاهز (باتشات + POS)؛ الإكلينيكية غير موجودةجزئيمرحلة 3 فوق Inventory/POS
فوليو المريض والودائعالنمط المحاسبي قائم (فوترة مرحلية B2B + تخصيص FIFO)، الكيان غير موجودنمط جاهزقرار 4
الكاشير والخزائن والتأمين/NPHIESكامل ومجرّب في LIS (ورديات، تقرير Z، مطالبات FHIR)جاهز (9/10 مالياً)إعادة استخدام مباشرة

خارطة الطريق المعتمدة (P0–P3)

  1. المرحلة 0 — التأسيس (تُنفَّذ الآن، ~7–10 أيام-مطوّر): حزمة «جاهزية المنصة» المستقلة الموصوفة أدناه — معتمدة من المالك قبل أي شغل HIS.
  2. المرحلة 1 — العيادات الخارجية (8–14 أسبوع-شخص): استقبال + ملف مريض 360° + محرك المواعيد (أكبر بناء جديد) + Encounter عيادة + فوليو وكاشير وتأمين.
  3. المرحلة 2 — التنويم والفندقة (10–16 أسبوع-شخص): أجنحة/غرف/أسرّة + ADT + رسوم إقامة بـ Job ليلي + ودائع + محطة تمريض أساسية.
  4. المرحلة 3 — الامتدادات (4–10 أسابيع-شخص لكل بند): صيدلية إكلينيكية، عمليات/أشعة بنفس عقد القرار 3، تغذية، بوابة مواعيد.

بنود المرحلة 0 وحالتها التنفيذية

المواصفة /home/moonui/hms-phase0-spec.md تنص: معتمدة من المالك، لم يبدأ أي بند (كل خانات الحالة فارغة حتى تاريخ قراءتها):

البندالمضمونالخطر على LISبوابة الإثباتالحالة
W1-1رفع نطاق الفروع: LisDataScopeModules/Core/app/Support/DataScope.php مع shim توافقي (14 موضع نداء بلا تغيير)لا خطرسويتات LIS القائمةلم يبدأ
W1-2عمود employee_id خامل على lab_doctors (ربط طبيب←موظف HRM)صفرLabDoctorApiTest (11)لم يبدأ
W1-3استخراج CreateLabRequest Action بمطابقة بايت + encounter_id خامل على lab_requestsمنخفضLabRequestApiTest (42) + سويتات B2B (74)لم يبدأ
W1-4سجل تبعيات الصلاحيات في Core (PermissionDependencyRegistry) — يصلح انعكاس RoleSaveService.php:10 ويجهّز تسجيل his.*صفر (استجابات مطابقة بالبايت)سويتات Role (47+)لم يبدأ
W2-1تحصين B2B (8 بنود: مؤشر اللوحة، 6 منتقيات واجهة، حارس الدمج، قيد فريد UNIQUE(company_id, ext_scope_key, national_id)، scopes مسماة…) + ترقية الكيان المشتركمنخفض — تغييرات مقصودة فقطLabPatientApiTest (20) + اختبارات حراسة جديدةلم يبدأ — البند 8 ينتظر قرار المالك
W2-2فرض مفتاح الموديولات على API — وضع المراقبة فقط (القياس أثبت أن الفرض الفوري يكسر تدفقات شغّالة: إعداد شركة التطوير لا يذكر موديولات عليها بيانات حية)لا حظرمراجعة السجلات بعد أسبوعينلم يبدأ

مؤجَّل صراحة إلى انطلاق HIS: سقّالة Modules/HIS وصلاحيات his.*، جداول Encounter/Folio، رفع طرق الدفع/الخزائن، تعميم قوائم الأسعار/التأمين، خدمة ترحيل الرسوم الموحدة (سجل التعميم — القسم 5+ من الدراسة).

الأسئلة التي تركتها الوثائق مفتوحة

أين يلمس استحواذ OBGY هذه القرارات؟

الوثيقتان لا تذكران OBGY إطلاقاً — فكل ما يلي مواضع تقاطع نحددها نحن (استنتاج) بناءً على ما قرأناه في الوثيقتين وتحليل OBGY (/home/amrtechogate/public_html/obgy-erp-analysis.md):

🏥

أصول OBGY القابلة لإعادة الاستخدام (OBGY Reusable Assets)

تصنيف استراتيجي لأصول نظام عيادات النساء والتوليد القديم (312 جدولاً، 18 وحدة وظيفية، موثَّقة بالكامل في obgy-erp-analysis.md) إلى ثلاث فئات: أصول عامة تصلح نواةً لأي وحدة مستشفيات (HIS)، وأصول تخصصية تخص طب النساء فقط، وأصول يجب التخلص منها نهائياً. هذا التصنيف هو المدخل الرئيسي لقرار مجلس الإدارة: هل يصبح OBGY هو قلب وحدة HIS أم وحدة تخصصية فوقها؟

نظرة كمية سريعة

312جدولاً في النظام القديم
~190جدول قوائم/مفردات سريرية (61%)
~85جدولاً مستهدفاً بعد الترحيل (مخطط القسم 95)
~32%أصول عامة لأي تخصص (استنتاج)
~48%أصول تخصصية نسائية (استنتاج)
~20%للإسقاط النهائي (استنتاج)

النسب الثلاث الأخيرة تقدير تحليلي (استنتاج) مبني على أرقام موثقة في التحليل: ~190 جدول قوائم من 312 (61%)، وخطة الترحيل 312 → ~85 جدولاً مع إسقاط ~40 جدولاً ميتاً/مشتقاً مباشرة، واستبدال ~17 جدول منصة (aw*) بنواة الـ ERP الحالية.

الفئة (أ) — أصول عامة تصلح لأي تخصص طبي نواة HIS محتملة

هذه ليست أكواداً قابلة للنقل (الكود القديم PHP 5.6 / Smarty / RedBeanPHP غير قابل للإنقاذ)، بل نماذج بيانات وتدفقات عمل مجرَّبة سريرياً لسنوات يعاد بناؤها في Laravel داخل نواة HIS:

الأصلالمصدر القديم (جداول/ملفات)ماذا يصبح في Laravel
نموذج الزيارة + طابور الانتظارvisits (حجز + طابور + دفع في جدول واحد)، visit_periods (سعة الفترات)، endvisitreports، detections (كتالوج الخدمات)، شاشة الطابور core/controllers/index.php وتطبيق شاشة الانتظار obgy/screen/Appointment + Encounter (queue_no, drag-sort) + Service + VisitPeriod + PatientLedgerEntry — مع إصلاح العيب الجوهري: ربط كل سجل سريري بـ encounter_id
نمط «الشيت السريري» + أبناؤه10 جداول وصفات متطابقة (ancsheetdrugs, gynadrugs, infertilitysheetdrugs, mointoringsheetdrugs, operativedetailsdrugs…) و8 جداول تحاليل (ancsheetinvest, gynainvestigation, infertilitysheetinvest…)Prescription/PrescriptionItem (علاقة prescribable متعددة الأشكال) وLabOrder/LabOrderItem مرتبطة بكتالوج LIS — أربعة جداول بدل 18
محرك أسئلة وأجوبة التاريخ المرضي القابل للتهيئةpresenthistoryquestions, presenthistoryanswers, جدول الإجابات الفعلية gynaph (يُنشأ وقت التشغيل — يجب تصديره من الإنتاج)HistoryQuestion / HistoryAnswerOption / PatientHistoryAnswer — محرك استبيانات سريرية عام لأي عيادة
الفحص السريري لكل جهاز عضويexamination (علامات حيوية + 5 أعمدة أجهزة) + 9 قوائم نتائج (examinationhead/chest/abdomen/pelvis/extremitis, examinationlocalse, generalbreast/hirsutism/thyroid)ClinicalExamination + ExaminationFinding + خيارات في obgy_lookups(domain=exam.*) مع body_system enum
سير عمل العمليات وقائمة الانتظار الجراحيةop_wait_list, operativedetails (المذكرة الجراحية الكاملة: تخدير، شق جراحي، فريق، أدوية أثناء العملية), anasthesa/generalanasthesa, jncision/midlinejncision, hospitalnames, pathology/histopathSurgicalBooking + OperativeNote + operative_note_staff + AnesthesiaType + incision_types + Hospital — مصممة صراحةً في المخطط (بند 2.6) لتستهلكها وحدة HIS/HMS
كروت المتابعة والتعليماتfollowupcard + followupcarddrugs (تأكيد الكارت يدفع الوصفة للصيدلية عبر recepittmp/receiptdrugs)، مكتبة instructionكارت لقاء مربوط بـ Encounter + حدث PrescriptionDispensed للصيدلية + InstructionTemplate وReferral
مرفقات الوسائط الطبيةsonar (صور/فيديو، MyISAM)، patientfiles، gtimage/gtdetail (رسوم تخطيطية معلَّمة)، مجلد obgy/upload/ بحجم 3.2GB (منها upload/sonar 3.1GB / 1,846 ملفاً داخل web root!)MediaAttachment عبر spatie medialibrary بروابط موقعة + AnnotatedDiagram/DiagramMarker بإحداثيات نسبية
محرك المفردات السريرية الموحَّد~190 جدول قوائم بنفس الشكل id + title + del — قيمتها الحقيقية في المحتوى المنسَّق سريرياً الموجود في قاعدة الإنتاج (القوائم فارغة في dump 2024)جدول واحد obgy_lookups (domain, parent_id, title_ar, title_en, sort, is_active) + PHP Enums للقيم الثابتة سريرياً
طلبات التحاليل الحرة (EAV)otherinvestigations / otherinvestigationsrows / otherinvestigationsvalues + كتالوج invests (276 تحليلاً) وinvestcats (22 فئة)طبقة ربط obgy_lis_test_map على كتالوج LIS القائم؛ التحاليل الحرة تصبح ad-hoc tests في LIS
مجلس الأطباء والصلاحيات الدقيقةجداول b* (جلسات مناقشة الحالات) + نموذج RBAC awcontroll/awcontrollprop/awrolecontrollprop (~590 إجراء / ~3000 منحة)BoardRequest/BoardSession/BoardMemberOpinion (يعاد بناؤها) + خريطة صلاحيات إلى spatie/laravel-permission

الفئة (ب) — أصول تخصصية: قيمتها داخل وحدة «صحة المرأة» فقط

الفئة (ج) — للإسقاط النهائي: لا يُرحَّل ولا يُحاكى

ماذا يعني هذا لقرار «نواة HIS أم وحدة تخصصية؟»

  1. الأصول العامة (الفئة أ) أنماط تصميم مجرّبة وليست نظاماً جاهزاً: النظام القديم نفسه يعاني عيباً معمارياً قاتلاً موثقاً في القسم 90 — السجلات السريرية لا تشير أبداً إلى الزيارة (patientid + تاريخ فقط)، أي أن نموذج «اللقاء/Encounter» الذي تحتاجه HIS غير موجود أصلاً في OBGY ويجب بناؤه جديداً.
  2. ~48% من الجداول محتوى نسائي بحت، والكود غير قابل للنقل بالكامل؛ ما يُنقل فعلياً هو: نموذج Encounter/Queue، نمط الشيت + الوصفات + طلبات المعمل، محرك Q&A، الفحص لكل جهاز، سير العمليات، ومحرك القوائم — وكلها مصممة في مخطط القسم 95 (بند 2.6) لتكون module-agnostic تستهلكها HIS.
  3. التكاملات محسومة في المخطط: المريض هو مريض الـ ERP نفسه، المعمل عبر أحداث LabOrderPlaced/LabResultReceived إلى LIS، والصرف عبر PrescriptionDispensed إلى المخزون، والفوترة عبر VisitInvoiced إلى الحسابات.
  4. الخلاصة التحليلية (استنتاج): تُستخرج أصول الفئة (أ) لتؤسس نواة HIS العامة، ويُبنى OBGY كوحدة تخصصية (الفئة ب) فوق تلك النواة — لا أن يكون OBGY ذاته نواة HIS.
🏨

نطاق الـ HIS المستهدف لأي مستشفى (Target HIS Scope (Any Hospital))

يحدد هذا القسم النطاق المرجعي الكامل لنظام معلومات المستشفيات (HIS) الذي تستهدف الشركة بيعه لأي مستشفى عام — وليس فقط مراكز النساء والخصوبة — ثم يصنّف كل قدرة وظيفية حسب مصدر بنائها: هل تغطيها وحدات Moon ERP القائمة (المحاسبة، المخزون، الموارد البشرية، LIS، NPHIES)؟ أم تمنحنا تحليلات نظام OBGY الموروث بذرة تصميمية جاهزة؟ أم أنها بناء جديد بالكامل؟ مع محاذاة كل قدرة لموارد FHIR القياسية التي تعتمدها تقاريرنا الحالية.

14قدرة وظيفية مرجعية
4تغطيها Moon ERP
7تبذرها تحليلات OBGY
5بناء جديد بالكامل (العمود الداخلي للتنويم)

منهجية التصنيف ومحاذاة FHIR

أسماء القدرات مُحاذاة لموارد FHIR R4 لأن تقرير التحليل القائم في /home/amrtechogate/public_html/obgy-erp-analysis.md يستخدم النمط ذاته بالفعل: نموذج Appointment وEncounter من جدول visits، واقتراح نمذجة إنهاء العلاج (endvisitreports) كحالة على EpisodeOfCare، وأوامر المعمل كـ ServiceRequest عبر أحداث LabOrderPlaced وLabResultReceived، والوصفات بدلالة MedicationRequest عبر حدث PrescriptionDispensed، والعمليات كـ Procedure. تصنيف المصادر ثلاثي:

مصفوفة القدرات: القدرة × المصدر × أولوية الإصدار الأول القابل للبيع

#القدرةمحاذاة FHIRموجودة في Moon ERPتبذرها تحليلات OBGYبناء جديدأولوية v1
1الفهرس الرئيسي للمرضى (MPI)Patientجزئيًا — سجل المريض/العميل في الـ ERP؛ والمخطط ينص: المريض الموروث «يصبح» مريض الـ ERP (§1.1)نعم — متطلبات إزالة التكرار موثقة (المخاطرة R10: أرقام ملفات MAX+1 وهويات وطنية مكررة) ونمط obgy_patient_profilesسير عمل دمج/مراجعة التكرارات، وإصدار رقم ملف MRN لكل منشأةP0 حرجة
2المواعيد والجدولةAppointment, Schedule, Slotلاقويةvisits (شق الحجز)، فترات بسعة قصوى visit_periods.max_no، قائمة انتظار urgent=1، حجز موبايل، vacationsClinicClosureجدولة متعددة الموارد (طبيب + غرفة + جهاز)P0 حرجة
3العيادات الخارجية وطابور الاستقبال (OPD)Encounter (ambulatory), EpisodeOfCareلاقوية — نموذج Encounter من شق الطابور في visits + followupcard (§1.2)؛ آليات الطابور visitorder/enterordered/view، توجيه الشيتات عبر lastvisit، شاشة الانتظار screen_slider مع خدمة طابور (§1.6)تهيئة عيادات متعددة التخصصات ونموذج أقسام عامP0 حرجة
4الدخول والخروج والتحويل (ADT)Encounter (inpatient), EpisodeOfCare, Locationلاضعيفة جدًا — دليل مستشفيات hospitalnames وخطابات تحويل طباعية فقط (instruction.php::printtransfer)؛ جداول floors/devices/device_tracking ميزة غير مكتملة قرر المخطط إسقاطها (§1.16)نعم — دورة التنويم كاملة: أمر دخول، تحويل، ملخص خروج، آلة حالات EpisodeOfCareP0 حرجة
5إدارة الأسرّة والأجنحةLocation (جناح/غرفة/سرير)لالانعم — شجرة مواقع، حالات السرير (مشغول/محجوز/تنظيف)، لوحة إشغالP0 حرجة
6الطوارئ (ER)Encounter (emergency) + فرز كـ Observationلاضعيفة — علم الأولوية urgent=1 ليس نظام فرز (استنتاج)نعم — مقاييس فرز، لوحة تتبع طوارئ، قرار المصيرP1 عالية
7أوامر الطبيب الموحدة (CPOE)ServiceRequest, MedicationRequestجانب تنفيذ المعمل عبر LISقوية الشكل — توحيد 8 جداول *invest في visit_investigations/lab_order_items و10 جداول *drugs في visit_prescriptions/prescription_items بعلاقات متعددة الأشكال، وأحداث LabOrderPlaced/PrescriptionDispensedمحور أوامر موحّد (ServiceRequest واحد)، أوامر أشعة، حزم أوامر، دورة حالة الأمرP0 حرجة
8التوثيق الإكلينيكي (ملاحظات/نماذج)Condition, Observation, QuestionnaireResponseلاقويةClinicalExamination (علامات حيوية)، محرك أسئلة وأجوبة قابل للتهيئة presenthistoryquestions/presenthistoryanswers، ClinicalNote بأنواع، تشخيصات عبر pivot encounter_diagnosesباني نماذج عام لأي تخصص، ترميز ICD-10، اعتماد وتعديل الملاحظاتP0 حرجة
9سجل إعطاء الدواء وصيدلية التنويم (eMAR)MedicationRequest, MedicationAdministrationالمخزون وكتالوج الأصناف في الـ ERP؛ المخطط §1.14: الكتالوج والرصيد يُفوَّضان لـ ERP inventory item masterجزئيًا — سلسلة الصرف الخارجي (recepittmp/receiptdrugs → حدث PrescriptionDispensed) وأدوية أثناء العمليات (operativedetailsdrugs)نعم — طبقة الإعطاء: جرعات مجدولة، توثيق تمريضي للإعطاء، مخزون الجناحP0 حرجة (نسخة مبسطة في v1)
10إدارة غرف العمليات (OR)Procedure, ServiceRequestلاقويةSurgicalBooking من op_wait_list، OperativeNote من operativedetails مع pivot operative_note_staff، تخدير متدرج anasthesageneralanasthesa، incision_types، نتائج باثولوجي pathology؛ والمخطط §2.6 ينص أنها مصممة module-agnostic لاستهلاك وحدة HMS لهالوحة جدولة غرف العمليات، قائمة فحص ما قبل الجراحة، الإفاقة (PACU)P1 عالية
11محطة التمريضObservation, Task, CarePlanلاضعيفة — حقول العلامات الحيوية في examination وخدمة الطابور (استنتاج لإعادة الاستخدام)نعم — تقييمات تمريضية، خطط رعاية، مهام ومناوبات، ميزان سوائلP1 عالية
12الفوترة وملف الحساب + دورة التأمينAccount, ChargeItem, Claim, Coverageنعم (العمود الفقري) — المحاسبة + NPHIES للتأمين السعوديجسر قويPatientLedgerEntry من totalbalance والأكواد السحرية detectionid (-99/999/9999)، أحداث VisitInvoiced/PaymentReceived/RefundIssued (§2.4)، كتالوج خدمات من detectionsملف حساب التنويم (تجميع الرسوم من CPOE/eMAR/OR)، تسعير الباقات، الموافقات المسبقة لكل EncounterP0 حرجة
13أوامر المعمل → LISServiceRequest, DiagnosticReportنعم — وحدة LIS ناضجة وتعمل إنتاجيًانعم — طبقة ربط الكتالوج obgy_lis_test_map (§2.2)؛ investcats 22 تصنيفًا وinvests 276 فحصًاطفيف — الـ HIS يستهلك العقد نفسهP0 (إعادة استخدام)
14الأشعة (RIS/PACS)ImagingStudy, DiagnosticReportلاجزئيًا — تصميم رأس موحد ImagingStudy (توحيد ultrasound*/tvs/hsg/mrict/sonar) مع MediaAttachmentنعم — قائمة عمل الأجهزة، تكامل DICOM/PACS، طابور تقارير أخصائي الأشعةP2 متوسطة (تقارير فقط في v1)

ما تقدمه تحليلات OBGY فعليًا — وما لا تقدمه

قطع الإصدار الأول القابل للبيع (Sellable v1)

  1. v1 (P0): MPI + المواعيد + مقابلات العيادات الخارجية والطابور + ADT + الأسرّة والأجنحة + CPOE (معمل/صيدلية/إجراءات) + التوثيق الإكلينيكي + eMAR مبسط + ملف الحساب وجسر NPHIES + إعادة استخدام LIS — لا يشتري أي مستشفى نظامًا بلا عمود تنويم، رغم أن OBGY لا يسهم فيه (استنتاج منتجي فوق الحقائق الموثقة).
  2. v1.5 (P1): الطوارئ والفرز، إدارة غرف العمليات (مبذورة بقوة من OBGY)، محطة التمريض.
  3. v2 (P2): الأشعة RIS/PACS، eMAR كامل مع المحاليل، خطط الرعاية.

الخلاصة المعمارية لمدخلات قرار المجلس: البذور المشتركة (Encounter، أشكال CPOE، الدفتر المالي، خدمة الطابور) موضعها الطبيعي نواة إكلينيكية مشتركة يستهلكها الـ HIS وتستهلكها وحدة Modules/Obgy التخصصية معًا — وهو الاتجاه الذي يشير إليه §2.6 من المخطط نصًا؛ أما اعتبار OBGY ذاته «نواة الـ HIS» فتعارضه حقيقة أن خمس قدرات التنويم الجوهرية ودورة التأمين غائبة عنه تمامًا.

🧬

العمود الفقري للبيانات: المريض والمواجهة والفوترة (Patient/Encounter/Billing Data Spine)

أصعب سؤال تكاملي في البرنامج كله: كيف تتشارك وحدات ERP و LIS و HIS و OBGY هويةَ المريض الواحدة، وخطَّ المواجهة السريرية (Encounter)، ومسارَ الفوترة من الخدمة إلى القيد المحاسبي إلى مطالبة NPHIES؟ هذا القسم يحسم مكان سجل المرضى الرئيسي (MPI)، ويقترح مخطط Encounter/Folio الذي تستند إليه كل الوحدات السريرية، ويعمّم مسار الترحيل المحاسبي المثبت فعلياً في المختبر — وكل ما يلي موثّق من ملفات الشيفرة الحقيقية.

أولاً: هوية المريض — أين يعيش سجل المرضى الرئيسي (MPI)؟

يوجد اليوم ثلاثة كيانات "شبيهة بالمريض" في المنظومة، بالإضافة إلى جدول مرضى النظام القديم لعيادة النساء والتوليد:

الكيانالموقعطبيعتهأبرز الأعمدة
lab_patients إنتاج فعليModules/LIS/database/migrations/2026_03_01_000006سجل أشخاص سريري حي (~11,769 مريضاً داخلياً + 15 B2B)mrn فريد، national_id، partner_idbusiness_partners، external_lab_id، insurance_info
business_partnersModules/Core/.../2026_02_16_200001كيان تجاري (عميل/مورّد) بلا أي حقول سريريةis_customer، credit_limit، tax_number، payment_terms_days
عميل CRMModules/CRM/.../2026_03_31_100001امتداد لشريك الأعمال فقط (crm_customer_ext) — ليس سجل أشخاص مستقلاًcustomer_type
patients في OBGY نظام قديمobgy/core/controllers/patients.php (تحليل القسم 01)صف واحد = الزوجان معاً؛ بلا أي مفاتيح أجنبية معلنة في القاعدة كلهاstatusno يولَّد بـ MAX+1، أعمدة الزوج مدمجة (husdandname بخطأ إملائي)، مزامنة cURL إلى client.obygyPatientId

الأدلة على أن lab_patients أصبح فعلياً سجل المرضى الرئيسي وليس مجرد "مرضى مختبر":

الخلاصة: سجل المرضى الرئيسي المستقبلي هو lab_patients مرقّى إلى ملكية مشتركة. مرضى OBGY يُرحَّلون إليه كصفوف داخلية (external_lab_id = NULL)، وتُفصل بيانات الزوج إلى جدول تخصصي مثل his_patient_spouses (استنتاج متوافق مع توصيات التحليل نفسه)، ويُلغى ازدواج cURL نهائياً لأن الربط المالي موجود أصلاً عبر partner_id.

11,769مريضاً داخلياً في lab_patients
37/40درجة قرار بقاء مرضى B2B في السجل الموحّد
8مفاتيح أجنبية صلبة + 144 إشارة patient_id في 52 ملف LIS
0مفاتيح أجنبية معلنة في قاعدة OBGY بأكملها

ثانياً: خط المواجهة — مخطط Encounter + Folio المقترح

الوضع الحالي: عمود lab_requests.encounter_id أُضيف بالفعل (هجرة 2026_06_10_160000) لكنه خامل عمداً — بلا مفتاح أجنبي ولا قارئ — في انتظار انطلاق HIS، وجداول Encounter/Folio مؤجلة رسمياً بقرار معتمد. أما OBGY فيقدّم الدرس الأهم: جدول visits عنده يخلط الحجز والطابور والمواجهة السريرية ودفتر المدفوعات في جدول واحد، بقيم سحرية في detectionid (−99 قسط، 999 سداد متبقٍ، 9999 استرداد) — وهذا بالضبط ما يجب ألا يتكرر في HIS.

الجدول المقترحالدورأهم الأعمدة (مقترح يتبع أعراف LIS القائمة)
his_encountersالمرساة السريرية لكل زيارة/إقامة (مطابق لمفهوم FHIR Encounter)encounter_number فريد، patient_idlab_patients، type (عيادات/تنويم/طوارئ)، status، attending_doctor_idlab_doctors (المرتبط بالموارد البشرية عبر employee_idqueue_position (يستبدل ثلاثية OBGY visitorder/enterordered/viewparent_encounter_id
his_foliosحساب المريض المالي لكل مواجهة/إقامة — وعاء الرسوم قبل الفوترةfolio_number، encounter_id، payer_type (نقدي/تأمين/حساب B2B)، insurance_contract_id، total_charges/balance بدقة decimal(12,3) كما في lab_invoices
his_folio_chargesكل وحدة سريرية ترحّل بنود خدماتها هنا (نقطة الالتقاء الموحدة)source_type/source_id (مرجع متعدد الأشكال: فحص مختبر، خدمة نساء وتوليد، صرف دواء، يوم سرير)، service_code (نمط sbscs_code القائم على lab_investigationscost_center_id، فهرس فريد (source_type, source_id) يضمن أن الفعل السريري يُفوتر مرة واحدة فقط

عقود الربط بين الوحدات (FK/Events) — مع احترام القاعدة المعتمدة: HIS يستورد LIS والمحاسبة والموارد البشرية للأمام، وLIS لا يستورد HIS أبداً:

ثالثاً: مسار الفوترة — من المختبر اليوم إلى المستشفى غداً

المسار المحاسبي مثبت ويعمل في الإنتاج داخل Modules/LIS/app/Actions/PostLabInvoice.php: مدين ذمم العميل (حساب الشريك من AccBpExt.ar_account_id أو إعداد lis.receivable_account_id) / دائن الإيراد والضريبة، مع تقسيم تلقائي بين حصة المريض patient_amount وحصة التأمين insurance_amount، وقيد تكلفة منفصل موزع على مراكز التكلفة، وكل ذلك عبر إجراء محاسبي محايد للوحدات هو Modules\Accounting\Actions\CreateJournalEntry بمرجعية source_type='lab_invoice'. والسداد عبر PostLabPayment.php بنفس سلسلة حسم الحسابات. ثم تكتمل الحلقة وطنياً: حقول المطالبة على الفاتورة نفسها (nphies_claim_status، nphies_covered_amount — هجرة 2026_04_03_000001) وخدمة NphiesClaimService::submit() تسجّل في nphies_transactions.

  1. فعل سريري في أي وحدة (تحليل، كشف، دواء، يوم سرير) ⇠ حدث FolioChargePosted يضيف بنداً إلى his_folio_charges.
  2. إغلاق المواجهة/الخروج ⇠ حدث FolioClosed يولّد الفواتير مقسمة حسب الدافع: فاتورة حصة المريض + فاتورة حصة التأمين (نفس منطق تقسيم insurance_amount/patient_amount القائم).
  3. ترحيل الفاتورة ⇠ خدمة ترحيل موحّدة في النواة (تعميم PostLabInvoice ببادئة إعدادات his.* بدل lis.*) ⇠ CreateJournalEntry بمرجعية source_type='his_invoice' + قيد تكلفة بمراكز التكلفة.
  4. السداد ⇠ تعميم PostLabPayment (مدين الخزينة / دائن الذمم بنفس سلسلة الحسم).
  5. المطالبة ⇠ NphiesClaimService::submit() على الفاتورة ⇠ تتبع في nphies_transactions وتحديث nphies_claim_status.

هذه "خدمة الترحيل الموحّدة" ليست فكرة جديدة: هي بالحرف أحد بنود سجل التعميم المؤجل في hms-phase0-spec.md ("unified charge-posting service")، والجزء الوحيد الخاص بالمختبر في الشيفرة الحالية هو بادئة مفاتيح الإعدادات وسلاسل الحسم — أي أن كلفة التعميم منخفضة والهيكل جاهز. كما يحل هذا المسار نهائياً محل اختراق erpSellbill بـ cURL في OBGY القديم.

ما يعنيه هذا لقرار مجلس الإدارة

📈

المنتج والسوق: ماذا نبيع ولمن (Product & Packaging View)

الشركة تملك اليوم أربعة أصول مكتملة الملامح: منصة ERP ناضجة (15 موديولاً على Laravel 12 / Angular)، ومعامل Modules/LIS في الإنتاج الفعلي (135 هجرة، ~311 مساراً، تكامل NPHIES)، وقرار معتمد ببناء Modules/HIS عام، وأصل إكلينيكي عميق في نساء وتوليد (النظام القديم OBGY: ‏312 جدولاً حُلّلت بالكامل في obgy-erp-analysis.md مع مخطط هجرة إلى Modules/Obgy). هذا القسم يجيب سؤال الإدارة التجاري: كيف تتحول هذه الأصول إلى خط منتجات واحد بأربع باقات قابلة للبيع المنفصل — ولماذا يفرض ذلك معمارياً أن يكون OBGY إضافة تخصصية فوق نواة HIS لا نواةً للـ HIS نفسه.

4باقات من منصة واحدة
15+1موديول إنتاجي اليوم (ERP + LIS)
312→~85جدول: أصل OBGY بعد إعادة البناء
21–35أسبوع-شخص حتى ديمو التنويم (تقدير دراسة HIS)

الباقات الأربع — نفس المنصة، مفاتيح مختلفة

كل باقة هي توليفة موديولات تُفعَّل بالترخيص، لا منتجاً منفصل الكود. القاعدة المعمارية المعتمدة في دراسة الجدوى (القرار 2): ‏HIS يستورد من LIS/Accounting/HRM، وLIS لا يستورد HIS أبداً — وبذلك يبقى المعمل قابلاً للبيع منفرداً كما هو اليوم.

الباقةالعميل المستهدفالموديولات المفعّلةالحالة / حجم البناء
1. معمل فقط يُباع اليوم معامل التحاليل المستقلة وسلاسلها، ومعامل B2B المرجعية Core + Accounting + LIS (خزائن، ورديات كاشير بتقرير Z، عقود تأمين، بورتال B2B، ‏NPHIES) إنتاج فعلي — لا بناء؛ هذا هو المموِّل الحالي للشركة
2. عيادات / مجمع طبي مرحلة HIS 1 العيادات الخارجية والمجمعات الطبية (الشريحة الأوسع عدداً في مصر والسعودية — استنتاج) الباقة 1 + نواة Modules/HIS: مواعيد، Encounter، فوليو، كاشير استقبال، تأمين معمَّم 8–14 أسبوع-شخص بعد تأسيس 3–5 (تقديرات دراسة HIS كما هي)
3. مركز صحة المرأة التمايز الأقوى عيادات نساء وتوليد، مراكز حقن مجهري وأطفال أنابيب IVF/ICSI/IUI الباقة 2 + Modules/Obgy: حمل ومتابعة (Pregnancy)، عقم وأندرولوجيا (SemenAnalysis)، دورات IvfCycle بشبكة قياس الحويصلات FollicleMeasurement، أشعة وموجات (ImagingStudy)، مناظير وعمليات مراحل P1–P4 من مخطط الهجرة في obgy-erp-analysis.md §95؛ النموذج البياني جاهز كاملاً (لا تحليل متبقٍ)
4. مستشفى عام آخر الطريق مستشفيات صغيرة ومتوسطة (تنويم) الباقة 2 + مرحلة HIS ‏2 (أسرّة/ADT/ودائع) + امتدادات المرحلة 3 (صيدلية إكلينيكية فوق Inventory/POS، عمليات وأشعة بنفس عقد CreateLabRequest) 10–16 أسبوع-شخص إضافية للتنويم — وهنا فجوة المنصة الحقيقية (الفندقة 0–1/10 في بطاقة الجاهزية)

كيف تخدم منصة واحدة الباقات الأربع

التمايز التنافسي في سوقي مصر والسعودية

انعكاس التغليف على القرار المعماري: نواة HIS + إضافات تخصصية

التغليف أعلاه غير قابل للتحقيق إلا إذا كانت التخصصات قابلة للفصل ترخيصياً: مستشفى عام لا يدفع ثمن شيتات الحقن المجهري، ومركز IVF لا يدفع ثمن ADT والأسرّة. لو صار OBGY هو نواة HIS لانهار هذا الفصل — كل عميل يحمل 85 جدولاً تخصصياً لا يحتاجها. القسمة الصحيحة:

القدرة في مخطط OBGYأين تستقرالسبب التجاري
المواعيد والطوابير والفترات (Appointment / Encounter / VisitPeriod — وريث visits / visit_periods وكتالوج detections)نواة Modules/HISأكبر فجوة في المنصة (محرك المواعيد 1/10) يملأها تصميمٌ مشتق من نظام شغّال بحجوزات موبايل وطوابير فعلية — وتحتاجه الباقات 2 و3 و4 جميعاً (استنتاج معماري؛ مخطط OBGY نفسه صمّم هذه الكيانات module-agnostic للـ HMS في §2.6)
الروشتة والطلبات المعممة (visit_prescriptions / visit_investigations بنمط morphs)نواة Modules/HISبدائل الجداول المستنسخة العشرة في النظام القديم هي بالضبط ما تحتاجه أي عيادة تخصصية قادمة (قلب، أسنان…) — تعميمها مرة واحدة (استنتاج)
الشيتات التخصصية: Pregnancy / GynaSheet / InfertilityFile / IvfCycle / SemenAnalysis / EndoscopyProcedure / OperativeNoteإضافة Modules/Obgyمحتوى تخصصي يُسعَّر منفصلاً في الباقة 3؛ تفعيله بمفتاح ترخيص لا بنسخة كود
الدفعة المالية للزيارة (VisitInvoiced / PaymentReceived بدل الأكواد السحرية في visits.detectionid وtotalbalance)لا تُبنى إطلاقاً — تُستبدل بفوليو HIS والقيود القائمةمصدر ترحيل واحد لكل بند (قاعدة القرار 4)

تسلسل الطرح — أي شريحة تموّل أي مرحلة

  1. الآن: إيراد باقة «معمل فقط» القائم يموّل حزمة التأسيس (~7–10 أيام-مطوّر: ‏CreateLabRequest، تحصين B2B، فرض المفاتيح بوضع المراقبة) — وهي شرط الترخيص قبل أي بيع باقات.
  2. الربعان التاليان: بناء نواة HIS مرحلة 1 (عيادات خارجية) وإطلاق باقة «عيادات» — التمويل من المعامل + أول عملاء العيادات.
  3. بالتوازي ثم تتويجاً: عيادة OBGY القديمة نفسها هي العميل المرجعي الأول لباقة «صحة المرأة» — لديها دافع اضطراري للهجرة (دين أمني موثق: حقن SQL، ‏API مفتوح، نسخ قاعدة بيانات داخل web root) وبياناتها هي ذاتها اختبار الـ ETL ‏(مراحل P0–P7 وسجل مخاطر R1–R12 جاهزة في المخطط). خدمات الهجرة نفسها بند إيراد (استنتاج).
  4. بعد إثبات باقتي 2 و3: إيرادهما يموّل مرحلة HIS ‏2 (التنويم والفندقة — أغلى بناء جديد) فتكتمل باقة «مستشفى عام»، وتُضاف امتدادات المرحلة 3 حسب طلب السوق بنداً بنداً.

الخلاصة للإدارة: نبيع منصة واحدة بأربع بوابات دخول؛ المعمل يموّل اليوم، والعيادات توسّع غداً، وصحة المرأة تميّزنا عن كل منافس عام، والمستشفى يأتي حين تكون النواة قد دفعت ثمن نفسها. ومعمارياً: ‏OBGY يتفكك — عمومياته (مواعيد/زيارة/روشتة) ترفد نواة Modules/HIS، وتخصصه يبقى إضافة Modules/Obgy مرخّصة على حدة.