Blueprint · مخطط بناء موديول جديد

مخطط بناء موديول HIS — نظام معلومات المستشفى على Moon ERP

تصميم شامل لموديول HIS عام وكامل، مبني على تحليل نظامك القديم (OB-GYN) ودراسة GNU Health وأعراف Moon ERP — مكوناته بالتفصيل، تكامله مع موديولاتك الحالية، رؤية الـ UI/UX، وبنية الفولدرات.

2026-06-15 · مبني على: obgy-erp-analysis · GNU Health study · LIS/Production audits · يتكامل مع: LIS · NPHIES · Accounting · Inventory · HRM
27مكوّن HIS كامل
5موديولات نتكامل معاها (مش نبنيها)
12كومبوننت UI أساسي يتبني أول
4مراحل بناء (MVP→مستشفى)
🎯

٠ — الرؤية والمبدأ الحاكم

موديول HIS عام وشامل، بس مبني على عمودك الفقري الحقيقي (نساء وتوليد) وبيتكامل مع موديولاتك مش يكرّرها.

الهدف: نبني Modules/HIS يغطّي كل ما يمكن في نظام معلومات مستشفى، بس بذكاء — الموديول بيملك الطبقة الإكلينيكية بس، والفلوس/المخزون/الموظفين/المعمل/التأمين بتفضل في موديولاتك الموجودة ويتكامل معاها بالـ reference.

المبدأ الحاكم (من دراسة GNU Health): هوية واحدة party/patient (MPI) ← الـ Encounter (الزيارة الإكلينيكية) هو الجذر ← كل ورقة إكلينيكية بتتعلّق بـ encounter_id. ده بيحل أكبر دَيْن في نظامك القديم (جدول visits اللي بيخلط الحجز والإكلينيكي والفلوس → نفصلهم).
📋

١ — مكونات HIS الكاملة (شامل كل ما يمكن)

القائمة الكاملة لأي مكوّن ممكن يكون في نظام معلومات مستشفى.
#المكوّنالنطاق
1تسجيل المرضى / MPIفهرس مريض رئيسي — هوية party/patient واحدة، ديموغرافيا، منع تكرار
2ADT (دخول/خروج/تحويل)دورة حياة التنويم، حالة الـ encounter، التحويل بين الأجنحة/الأسرّة
3المواعيد والجدولةفترات، طوابير، تقويم الأطباء، حالات الموعد
4العيادات الخارجية (OPD)زيارة خارجية، طابور انتظار، سير الاستشارة
5التنويم (IPD)سجل الدخول، ملاحظات يومية، جولات
6السجل الطبي الإلكتروني (EMR)SOAP، علامات حيوية، قائمة مشاكل، حساسية، تشخيصات، قفل بالتوقيع
7إدارة الطلبات (CPOE)إدخال موحّد للطلبات ← معمل/أشعة/أدوية/إجراءات
8التمريضخطط رعاية، علامات حيوية، إدخال/إخراج، سجل إعطاء الدواء (MAR)
9العمليات والمسرح الجراحيجدولة المسرح، حجز جراحي، ملاحظات العملية، التخدير
10الطوارئ (ER)فرز (triage)، تسجيل سريع، لوحة الطوارئ
11الصيدلية وإعطاء الدواءكتالوج أدوية، وصفة، صرف، MAR، تحذيرات تفاعل/حمل
12الأشعة (RIS/PACS)طلبات تصوير، worklist الأجهزة، تقرير، ربط DICOM
13المعملكتالوج، طلب، عيّنة، نتيجة، تحقّق
14-16بنك الدم · إدارة الأسرّة · التغذيةوحدات الدم/التوافق · خريطة الأسرّة · طلبات الحمية
17-18الفوترة والكاشير · التأمين والمطالباتالتقاط الخدمات، فاتورة، إيصالات · أهلية، موافقة مسبقة، مطالبة
19-20السجلات الطبية والترميز (ICD) · التقارير والتحليلاتترميز ICD-10، إكمال الملف · لوحات إكلينيكية، سجلات، KPIs
21-23بوابة المريض · الإحالات · الموافقات والطب الشرعيحجز/نتائج أونلاين · إحالة/تتبّع · موافقات إلكترونية، توقيعات، خزنة وثائق
24-27مكافحة العدوى · التدقيق والصلاحيات · خزنة الوثائق · البيانات الأساسيةأمراض معدية، عزل · سجل غير قابل للتعديل، RBAC · مرفقات · ICD/formulary/كتالوجات
🔗

٢ — نبني vs نتكامل (منع التكرار)

جزء كبير موجود في موديولاتك بالفعل — نتكامل معاه بالـ reference، منبنيهوش تاني.
المكوّنالقرارالموديول الموجود اللي نتكامل معاه
المعملنتكاملLIS — HIS يبعت طلب، يستقبل نتيجة. منبنيهوش
التأمين والمطالباتنتكاملNPHIES — HIS يوفّر encounter + تشخيص + خدمات
الفوترة / دفتر الأستاذنتكاملAccounting + POS + EInvoicing — HIS يطلّع charge → فاتورة، بدون دفتر موازٍ
مخزون الأدوية/الصرفنتكاملInventory — الصرف = stock move، مش تعديل رصيد
الموظفين/الأطباءنتكاملHRMpractitioner.hrm_employee_id FK
التسجيل/MPI · ADT · EMR · CPOE · OB-GYN · OR · IPD · الصيدلية الإكلينيكية · الأشعة (RIS)نبني (HIS)جديد — دي الطبقة الإكلينيكية اللي HIS بيملكها
القاعدة: الموظفين = HRM · المخزون = Inventory · الفلوس = Accounting/POS · المعمل = LIS · المطالبات = NPHIES. الـ HIS مبيكرّرش — بيشاور عليهم بـ FK ويتكامل بالـ Events والـ Services.
🧬

٣ — الموديل الأساسي (الـ Encounter هو الجذر)

هوية موحّدة (Party) ← الزيارة الإكلينيكية (Encounter) هي المحور اللي كل حاجة بتتعلّق بيه.
his_parties              (أي شخص أو منشأة؛ الديموغرافيا هنا مرة واحدة)
  puid, party_type, is_patient/is_practitioner/is_institution (أعلام دور)
    │
    ├─ his_party_relationships  (زوج/وصي/أم — الزوج علاقة مش عمود)
    ├─ his_patients        ── party_id, mrn (MPI)            ← هوية المريض
    └─ his_practitioners   ── party_id, hrm_employee_id (FK→HRM)

                  his_appointments  (حجز: scheduled→checked_in→done)
                          │ check-in
                          ▼
        ┌────────────  his_encounters  ────────────┐   الجذر الإكلينيكي
        │  patient, practitioner, department,
        │  class[opd|ipd|er], appointment_id?, admission_id?,
        │  status: in_progress → done → SIGNED (يقفل → للقراءة فقط)
        └──────────────────┬────────────────────────┘
   ┌──────────┬────────────┼────────────┬──────────────┐
his_vitals  his_orders  his_diagnoses  his_observations  his_clinical_notes
            (CPOE→معمل/   (ICD-10)       (SOAP/فحص)
             أشعة/دواء)

قوائم طولية معلّقة على المريض، مرجوعة من الـ encounter:
his_problems · his_allergies · his_medications  (قائمة مشاكل/حساسية/أدوية نشطة)
ليه ده مهم: الحجز (appointment) والإكلينيكي (encounter) والفلوس (charge) منفصلين — يحل خلط جدول visits القديم. وعند التوقيع (sign) الـ encounter يتقفل = نمط التدقيق اللي نظامك القديم مكنش عنده. متعدد المستأجرين بـ company_id + FK حقيقية.
🧩

٤ — تفصيل المكونات اللي نبنيها

كل نطاق فرعي والكيانات الأساسية بتاعته.
النطاقالكيانات الأساسية
التسجيل / ADTpatients, admissions, transfers, discharges
المواعيدappointments, schedule_slots, waitlist
EMR/Encountersencounters, observations, vitals, clinical_notes, diagnoses
CPOE/Ordersorders, order_items, order_sets (نوع الطلب بيوجّهه لـ LIS/RIS/صيدلية)
التمريضcare_plans, nursing_assessments, intake_output, vitals_rounds
العمليات (OR)surgery_cases, or_schedules, surgery_team, anesthesia_records, op_notes
IPD/أسرّةwards, beds, bed_assignments (حالة السرير enum)
الصيدلية/MARprescriptions, prescription_lines, medication_administrations (الصرف → Inventory move)
🤰

٥ — حزمة النساء والتوليد (قيمتك الخاصة)

المحتوى الإكلينيكي المتخصص — مبني على نمط "aggregate الحمل" مع GPA مُشتق و EDD غير مخزّن.
النطاقالمحتوىبيوحّد إيه من القديم
الحمل / المتابعةpregnancy (gravida، LMP→EDD، fetuses) + prenatal_visit[] (أسابيع محسوبة، ضغط، fundal height، FHR، EFW، BPD/AC/HC/FL، مخاطر)يوحّد ancsheet/mainantenental/followup (3 stacks → 1)
الولادة / Perinatalperinatal (نوع الولادة، عرض، شق، مشيمة) + monitoring[] partograph + puerperium_monitor[] (lochia) + pregnancy_result[] → المولود يبقى party/patientoperations + registeration + بيانات النفاس
أمراض النساءتاريخ الطمث، Pap (Bethesda)، ماموجرام، منظار؛ قائمة المشاكل؛ منظار بطن/رحمgynecology, phmenstrual, endoscopy
العقم / IVF-ARTموديول ART من الدرجة الأولى: art_cycle + stimulation_day[] (folliculometry) + art_procedure (OPU/ET). دورة ناجحة → تولّد pregnancyivfsheet/mointoringsheet/folliculom → aggregate؛ السائل المنوي/الهرمونات → LIS
السونار التوليديbiometry منظّم على prenatal_visit + imaging_study للصور*us/ultrasoundobst → biometry منظّم
الخط المتصل: عقم → دورة ART → حمل → ولادة → مولود (كمريض جديد). ده اللي تصميمك القديم بالجداول المتوازية مكنش يقدر يعبّر عنه.
🔌

٦ — التكامل مع موديولاتك (العقود)

HIS بينسّق، الموديولات الموجودة بتملك بياناتها. الحدود = Events (إشعار) + Services (أمر).
التدفّقالآلية
CPOE → معملHIS Action بيستدعي LIS\CreateLabRequest (موجود أصلاً للغرض ده)، ويسمع LabResultReleased → يكتب observation مربوط (بـ ref مش نسخة)
الفوترة → Accountingعند توقيع الـ encounter/إتمام الطلب، PostChargeItem بينده service الفوترة (نفس مسار LIS) — idempotent، بدون كتابة GL مباشرة
الصيدلية → InventoryDispenseMedication بينده stock-move service (يخصم من موقع الصيدلية ذرّياً)
المطالبات → NPHIESHIS يطلّع EncounterFinalized → listener يبني المطالبة من التشخيصات + الخدمات
الأطباء ← HRMpractitioner.hrm_employee_id FK → موظف HRM (مصدر الحقيقة للموظفين)
القاعدة: أوامر الكتابة عبر-الموديول تمشي بالـ Action/Service (متزامن، transactional)؛ الإشعارات تمشي بالـ Events (async، queued).

القسم الخاص — رؤية الـ UI / UX

نبنيها بنفس طريقة التحليل: design system أول، وworkspaces حسب الدور، ونتجنّب أخطاء الـ LIS هيكلياً.
المبدأ: نورِّث اللي الـ LIS عمله صح (استقبال barcode بصوت، إدخال نتائج keyboard inline، worklist-first) ونمنع اللي عمله غلط هيكلياً (9K سطر ميت، 2471 لون يدوي، god components، 3/97 OnPush، صفر ARIA) — عبر CI gates وبنية فولدرات ضد التكرار.

١. مبادئ التصميم

٢. عقد الـ keyboard الموحّد

المفتاحالإجراءالمفتاحالإجراء
/ · Ctrl+Kبحث المريض العام (command palette)Enterفتح/حفظ خلية + انتقال لأسفل
↑ ↓تحريك الصف في أي worklistTab / Shift+Tabالحقل/الخلية التالية
Ctrl+Sحفظ مسودةCtrl+Enterتوقيع/إنهاء (الإجراء المؤكَّد)
Alt+Nإجراء "الخطوة التالية"Scanدايماً يروح للـ ScanInput النشط

٣. الـ Design System (يتبني أول — Sprint 0)

السبب الجذري لمشاكل الـ LIS كان غياب الطبقة دي. هنا نعكس الترتيب: التوكنز + مكتبة الكومبوننتس تيجي الأول، ومفيش شاشة يُسمح لها تـ merge لون hex خام أو جدول مخصّص.

الكومبوننتالغرض
PatientBannerشريط سياق المريض ملصوق فوق — صورة/اسم/MRN + صف حساسية أحمر + flags (Rh−، حامل + أسابيع، عزل). الكومبوننت اللي بيمنع أخطاء "المريض الغلط"
WorklistGrid / QueueGridالشغّالة — قائمة virtual-scrolled بالكيبورد، أعمدة بالـ config، فلاتر محفوظة
EncounterShellإطار الطبيب: PatientBanner + stepper (شكوى→فحص→تشخيص→طلبات→وصفة→توقيع) + timeline rail. بيمنع الـ god-component
OrderCart / CPOEكتالوج طلبات بحث + سلّة + تحذيرات تفاعل/تكرار inline + STAT — بديل كليك-لكل-تحليل
ResultViewer · VitalsInput · StatusBadge · KPICardعرض نتائج (↑↓ + مدى) · إدخال علامات حيوية سريع · شارة الحالة الوحيدة المعتمدة · بطاقة مؤشر
PageHeader · ScanInput · FormDialog · TimelineRailترويسة · إدخال باركود بصوت · modal بـ focus-trap · شريط تاريخ المريض

٤. مساحات العمل حسب الدور

المساحةالوصف والـ UX
الاستقبال / MPIطابور وصول اليوم · بحث-أولاً يمنع تكرار الـ MRN (لازم ترفض "لا يوجد تطابق" قبل إنشاء جديد) · تسجيل بـ FormDialog + طباعة سوار
الجدولةلوحة يوم/أسبوع، أعمدة = أطباء/غرف، سحب-للحجز · تعارضات inline · check-in يحوّل للطابور
طابور العيادات (OPD)طابور انتظار حي + عدّادات + ScanInput للسوار (بصوت)
كوكبيت الطبيب (EMR) ⭐المركز: EncounterShell بالـ spine (شكوى→فحص→تشخيص→طلبات→وصفة→توقيع)، كل خطوة بزر "التالي"، timeline على اليمين، الزيارة كلها تتعمل بدون ماوس
مساحة النساء والتوليد ⭐chart الحمل/ANC (LMP/EDD، trend grid للزيارات)، partograph (اتساع/FHR/تقلصات مقابل خطوط الإنذار)، سونار منظّم (biometry → GA/EFW)
IPD / لوحة الأسرّةشبكة أسرّة ملوّنة بالحالة، admit/transfer/discharge + checklist
OR · التمريض/MAR · الصيدلية · الكاشير · بوابة المريضجدول المسرح + WHO checklist · مهام مستحقة + scan سوار+دواء (5 rights) · طابور وصفات + verify · طابور غير مدفوع · بوابة مبسّطة عالية التباين

٥. بنية فولدرات الـ Frontend (ضد التكرار)

features/his/
├── his.routes.ts                 # جدول مسارات lazy واحد — نسخة وحيدة لكل شاشة (لا -v2)
├── his-layout/                   # shell: شريط علوي + sidebar حسب الدور + command palette
│   └── nav.config.ts             # دور→قائمة (data مش كود مكرّر)
│
├── shared/                       # ★ الـ DESIGN SYSTEM — يتبني أول، يُستورد في كل مكان
│   ├── index.ts                  # البارّل الوحيد — الشاشات تستورد منه فقط
│   ├── styles/_tokens.scss       # توكنز اللون/المسافة/الخط (مصدر الحقيقة)
│   ├── components/               # الـ12 primitive: patient-banner, worklist-grid,
│   │                             #   encounter-shell, order-cart, result-viewer, vitals-input,
│   │                             #   status-badge, kpi-card, page-header, scan-input, form-dialog, timeline-rail
│   ├── directives/ · pipes/ · models/
│
├── core/                         # خدمات HIS (بيانات + cross-cutting)، بدون UI
│   ├── services/ · guards/ · config/
│
├── registration/   components/   # فولدر لكل WORKSPACE (دور/مجال)
├── scheduling/     · opd-reception/ · emr/ (steps/) · obgyn/ (anc-chart, partograph, ultrasound)
├── ipd/ · or/ · nursing/ · pharmacy/ · billing/ · portal/ · setup/
قواعد ضد التكرار مدمجة في البنية: نسخة وحيدة لكل route (مفيش -v2 يتعمله merge أبداً) · sub-components محلية في components/ الشاشة، والمشترك يترقّى لـ shared/ · shared/index.ts هو سطح الاستيراد الوحيد · knip/ts-prune في CI يفشّل الكود الميت.

٦. ضوابط الجودة (merge gates — مش أماني)

OnPush على كل كومبوننت (lint) Signals-first <400 سطر/كومبوننت صفر hex خام (stylelint) صفر كود ميت (knip) a11y checklist + axe كل النصوص translate PatientBanner إجباري على شاشات المريض تغطية ≥80%

⚙️

٧ — بنية الـ Backend (Modules/HIS)

على أعراف Moon ERP بالظبط (زي LIS/Production): Models/Controllers/Services/Actions/Events/Listeners.
Modules/HIS/app/
├── Models/        Party, Patient, Practitioner, Department, Ward, Bed,
│                  Appointment, Encounter, Vital, Observation, Order, OrderItem,
│                  Admission, Transfer, Diagnosis, Problem, Allergy, Medication,
│                  Prescription, PrescriptionLine, MedicationAdministration,
│                  SurgeryCase, Pregnancy, PrenatalVisit, Perinatal, PerinatalMonitor,
│                  PregnancyResult, MenstrualHistory, ArtCycle, StimulationDay
├── Http/          Controllers/ · Requests/ · Resources/
├── Actions/       RegisterPatient, OpenEncounter, SignEncounter (tx+lock),
│                  PlaceLabOrder, ImportLabResult, AdmitPatient, AssignBed,
│                  DispenseMedication, PostChargeItem, FinalizeEncounter,
│                  StartPregnancy, RecordPrenatalVisit, RecordDelivery, StartArtCycle
├── Services/      MpiService, EncounterService, BedBoardService,
│                  GpaCalculatorService, GestationalAgeService, HisBillingBridge
├── Events/ · Listeners/   # PatientRegistered, EncounterSigned, LabOrderPlaced…# CreateLabRequestOnOrderPlaced, PostChargesOnEncounterSigned…
├── Enums/ · Jobs/ (heavy/async) · Support/ (HisTenantScope) · Providers/
└── routes/ · database/migrations/
معايير هندسية (من دروس تدقيق LIS/Production): transactions + قفل على كل تغيير حالة (سرير/encounter/مخزون) · Global Tenant Scope حقيقي (الموديولات الحالية ناقصها) · تدقيق عبر model observers (encounter موقّع = غير قابل للتعديل) · شغل تقيل في queue · listeners idempotent.
🗺️

٨ — خطة البناء (MVP → مستشفى كامل)

مرتّبة لعيادة نساء وتوليد — تشغّل العيادة الأول، وتتوسّع لمستشفى.
المرحلةنبنيليه الترتيب ده
MVPالتسجيل/MPI · المواعيد · OPD encounter (EMR/SOAP + توقيع) · aggregate الحمل + متابعة · أمراض النساء · سونار · وصفات · موافقات · تدقيق/RBAC. + تكامل LIS/Accounting/NPHIES/Inventory/HRMده اللي عيادة النساء بتعمله يومياً. الـ MPI + encounter هما الأساس، و aggregate الحمل أكبر إصلاح لدَيْنك القديم
Phase 2ART/IVF (folliculometry، OPU/ET → ربط بالحمل) · الولادة/Perinatal + المولود كمريض · RIS (أشعة) · CPOE موحّد · إحالات · ترميز ICD · بوابة المريضالـ ART قيمتك المميّزة وإيرادك العالي — بس بيعتمد على spine الـ MVP. الولادة بتقفل الحلقة التوليدية
Phase 3ADT · IPD · التمريض + MAR · OR/المسرح · الطوارئ · إدارة الأسرّة · التغذية · بنك الدم · مكافحة عدوى · تحليلات متقدمةقدرات التنويم محتاجة بس لما تكبر من عيادة لمستشفى — بتعيد استخدام نفس الـ spine، فتأجيلها مخاطرته قليلة
🛡️

٩ — ضوابط الجودة والاعتماد (من اليوم الأول)

حاجات تنظيمية لازم تتبني من البداية، مش retrofit.
المتطلبالتطبيق
مسار تدقيق غير قابل للتعديلسجل append-only لكل PHI، والـ encounter الموقّع يتقفل للقراءة فقط (CBAHI/JCI وطب شرعي)
الموافقات والطب الشرعيموافقات إلكترونية منظّمة + توقيع + خزنة وثائق — MVP، مش قابلة للتأجيل لإجراءات ART/الجراحة
ترميز ICD-10 · NPHIESكل تشخيص مرمّز؛ بنية الـ encounter تغذّي NPHIES من البداية (متعملش retrofit)
سلامة المريضتحذيرات حساسية + فئة حمل الدواء (A–X) عند الوصف (حرج لمرضى التوليد) + فحص تفاعلات + قاعدة حمل نشط واحد
سلامة البياناتFK حقيقية، UTF-8، استعلامات parameterized (يقتل فئة SQL injection القديمة)، RBAC + least privilege
مخطط بناء موديول HIS — Moon ERP · مبني على تحليل OB-GYN + GNU Health + أعراف Moon ERP · 3 محاور (نطاق · معمارية · UI/UX) · 2026-06-15