🚀

خطة النقل إلى نظام الـ ERP (ERP Migration Blueprint)

الهدف هو استيعاب نظام عيادة النساء والتوليد القديم (PHP/Smarty — 312 جدولًا بلا أي مفاتيح أجنبية) كموديول جديد Modules/Obgy داخل منظومة Moon ERP القائمة (Laravel/nwidart + Angular)، مع الاستغناء نهائيًا عن مزامنة cURL مع قاعدة الـ ERP الخارجية: يصبح المريض هو نفسه عميل الـ ERP، وتتكامل التحاليل مع موديول المعمل LIS، والصيدلية مع المخازن، والماليات مع الحسابات، والمستخدمون مع نظام الصلاحيات الموحد. المحصلة: تتقلص 312 جدولًا قديمًا إلى نحو 85 جدولًا جديدًا (~55 موديل نطاق + جدول قواميس موحد + جداول Pivot ووسائط)، مع إسقاط ~40 جدولًا ميتًا أو مشتقًا.

312 ← ~85جدول قديم ← جدول جديد
~190جدول قوائم يُدمج في lookups واحد
18جدول روشتات/تحاليل مكرر ← جدولان
8مراحل تنفيذ

أولًا: أنماط الدمج العرضية (Cross-cutting Consolidation)

النمط القديمالحل المقترح
~190 جدول قوائم صغيرة بنفس البنية id + title + del (منها رباعية ssemen/sseemen/sseemmen/sseemmeen و24 جدول lapar*/copy* و9 جداول mointoringsheet*)جدول قواميس موحد obgy_lookups بأعمدة (domain, parent_id, title_ar, title_en, sort, is_active, deleted_at)، مع تحويل القوائم الطبية الثابتة (فصائل الدم، طريقة الولادة CS/SVD/NVD، توقيت الولادة FT/PT، أنواع فقدان الحمل) إلى Enums في الكود
10 جداول روشتات مستنسخة (ancsheetdrugs, mainantenentaldrugs, gynadrugs, gynasheetdrugs, infertilitydrugs, infertilitysheetdrugs, mointoringsheetdrugs, followupcarddrugs, operativedetailsdrugs, recorddrugs)جدولا visit_prescriptions + prescription_items بعلاقة Polymorphic نحو الشيت/الزيارة/الدورة، مع عمود المستفيد (زوجة/زوج) وكمية الصرف الفعلية
8 جداول تحاليل مستنسخة (ancsheetinvest, mainantenentalinvest, gynainvestigation, gynasheetinvest, infertilityinvest, infertilitysheetinvest, mointoringsheetinvestigation, followupinvest) + ثلاثية EAVجدولا visit_investigations (LabOrder) + lab_order_items بعلاقة Polymorphic، مرتبطان بكتالوج موديول المعمل LIS
~40 عمودًا يخزن معرفات مفصولة بفواصل (CSV) مثل gyna.diagnosisid وoperations.operationجداول Pivot حقيقية لكل علاقة، مع تسجيل المعرفات المعلقة في سجل أخطاء الترحيل
ثلاثة أنماط حذف منطقي متضاربة (del / deleted / conditions) + جداول تدقيق منسوخة (patients_updates, visits_updates)SoftDeletes (deleted_at) موحد + حزمة تدقيق قياسية laravel-auditing
نقاط AJAX عامة تستقبل اسم الجدول والعمود من المتصفح (ثغرة كتابة شاملة + حقن SQL) وواجهة موبايل بلا مصادقةلا يُنقل أي منها: REST APIs محددة الموارد بـ FormRequests وPolicies ومصادقة Sanctum

ثانيًا: خريطة الموديلات المقترحة حسب النطاق

1) المرضى والتسجيل

الموديل المقترحالجداول القديمةملاحظات الدمج
Patient + ObgyPatientProfilepatients (نصف الزوجة)المريضة تصبح هي سجل المريض/العميل في الـ ERP مباشرة؛ الملف الإضافي يحمل رقم الملف (بتسلسل معاملاتي بدل MAX+1) والرقم القومي والخطورة
Spouseأعمدة husband* في patientsفصل بيانات الزوج في جدول 1-1
PreviousMarriageprevious_marriage + hus_previous_marriageدمج بعمود تمييز (زوجة/زوج) مع إصلاح ترميز latin1
ObstetricBaselineأعمدة pno/cs/ab/ectopic/vmodel/svdأرصدة افتتاحية رقمية للصيغة التوليدية
MedicalRecord, DeliveryRegistration, MediaAttachmentrecords, registeration, patientfiles + مجلدات الرفعتصحيح coast → cost decimal؛ وسائط بجدول حقيقي وروابط موقعة
قواميس: JobTitle, PersonTitle, Complaint...wifejobs+husbandjobs، wifetypes+husbandtypes، complaint+complaintant، education، wifestatus، risktype، originتوحيد القوائم المزدوجة في obgy_lookups؛ فصائل الدم Enum؛ إسقاط patients_tmp وlocations وجداول التطوير

2) المواعيد والزيارات وجسر الماليات

الموديل المقترحالجداول القديمةملاحظات الدمج
Appointment + Encountervisits (الحجز + الطابور) وfollowupcardتفكيك الجدول المركب؛ ربط السجلات الإكلينيكية بـ encounter_id يعالج العيب البنيوي (لا يوجد ربط زيارة في أي جدول إكلينيكي)
Service, VisitPeriod, ClinicClosure, TreatmentClosuredetections, visit_periods, vacations, endvisitreportsسعة الفترات تُفحص بمعاملة قاعدة بيانات؛ تفعيل الإجازات فعليًا في منع الحجز
PatientLedgerEntry + Invoice + Paymenttotalbalance + الأكواد السحرية في visits (‎-99 قسط / 999 سداد / 9999 مرتجع)دفتر حساب بأنواع حركات Enum صريحة ورصيد محسوب؛ الترحيل للحسابات عبر Events
old_visits, visits_updates, lastvisit, totalbalancepaidsتُسقط: أرشيف ميت / تدقيق مهجور / مؤشر يُشتق بالاستعلام / جدول ميت

3) النواة الإكلينيكية المشتركة والتاريخ المرضي

الموديل المقترحالجداول القديمةملاحظات الدمج
ClinicalExamination + ExaminationFindingexamination + 9 جداول نتائج فحص متطابقة البنيةكتالوج نتائج موحد بعمود جهاز الجسم؛ إلغاء الإنشاء التلقائي عند العرض
Diagnosis + Pivotdiagnosis + diagnosisantدمج بعمود تخصص وجدول وسيط بدل CSV
HistoryQuestion / HistoryAnswerOption / PatientHistoryAnswerpresenthistoryquestions/answers + جدول gynaph (وقت تشغيل)gynaph غير موجود في النسخة الاحتياطية — يجب تصديره من الإنتاج
Prescription/Item + LabOrder/Item18 جدول الروشتات/التحاليل المستنسخة + ثلاثية EAVراجع جدول الأنماط العرضية أعلاه
نماذج التاريخ المرضي: MenstrualHistory, ObstetricHistory+ObstetricBaby, ContraceptionHistory, PastMedical/Surgical/GynecologicalHistory, PastArtCycle+تفاصيل ICSI, FamilyHistoryجداول ph* التسعة + wifep/awifep + الكتالوجات المزدوجة و*dmتوحيد سجل الحمول السابقة في مصدر واحد وحساب الصيغة التوليدية كخدمة/Accessor؛ طريقة انتهاء الحمل Enum ثابت

4) متابعة الحمل وأمراض النساء

الموديل المقترحالجداول القديمةملاحظات الدمج
Pregnancyancsheet + mainantenental + followupدمج ثلاثة أجيال متوازية لملف الحمل في كيان واحد؛ المطابقة بالمريضة + LMP وأعلام done/endpreg
AntenatalVisit, AntenatalUltrasound, FourDScanBooking, ClinicalNoteancnewvisit+antenalvisit+followupvisit، mainantenentalus+أعمدة T/TT-scan، op_4d_list، followupdiagnosis/exam/investعمر الحمل GA يُحسب ولا يُخزن؛ حالة 4D صريحة بدل أعلام البتات
PregnancyLoss + قوائمه, ExternalProviderwifeepc + wifeepctype/ttt، wifeobst+wifeepcobstإعادة الربط بالمريضة مباشرة بدل شيت العقم؛ إسقاط anprotocol اليتيم
GynaVisit, GynaSheet+GynaSheetVisit, GynaUltrasound+Follicle, InfertilityProfile+Plangyna، gynasheet+maingyna+newvisitg، gynaus+gynausficils، gynainfertility+أعمدة gyna.inf_*القواميس التسعة الفارغة ← obgy_lookups مع التصدير من الإنتاج؛ إهمال شاشة gynasheet00

5) العقم والحقن المجهري وتحاليل الزوج

الموديل المقترحالجداول القديمةملاحظات الدمج
InfertilityFileinfertility + جداوله الفرعية + infertilitysheet (64 عمودًا)دمج الجيلين في ملف واحد لكل مريضة بجداول فرعية مهيكلة وPivot بدل CSV
IvfCycleivfsheet + mointoringsheetتوحيد المسارين بقيد فهرس فريد جزئي = دورة نشطة واحدة لكل مريضة
IvfCycleVisit + FollicleMeasurementovst + mointoringsheetvisits + folliculomشبكة حويصلات مطبّعة (جانب/قطر/عدد) بدل 26 عمودًا مشفرًا
OocyteRetrieval, SemenSample, EmbryoTransfer, Cryopreservation, EndometrialPrep, CycleOutcomeأعمدة مراحل ivfsheet + eprep + جدول sefo (وقت تشغيل)نمذجة المراحل كجداول فرعية؛ إسقاط icsi المشتق واستبداله باستعلام
SemenAnalysis, AndrologyInvestigation, HormoneResult+HormoneDefinitionsemen+semeninfertility، semen2 العريض، hormon+hormonalprofile+hormonalprofile2تطبيع طولي (صف لكل فحص/هرمون) مع وحدة ومدى مرجعي وربط بـ LIS؛ حذف اليتيم sseemmeen وإعادة تسمية الرباعية المشوهة بعد مراجعة العيادة

6) التصوير والمناظير والعمليات

الموديل المقترحالجداول القديمةملاحظات الدمج
ImagingStudy + FetalScanFinding + GynaScanFindingultrasound(+detail), ultrasoundobst(+detail), ultrasoundgyna, tvs, dtvs, sis, hsg, hsginfertility, mrict, sonarرأس دراسة موحد بنوع وحالة اعتماد؛ 16 جدول مفردات ← obgy_lookups؛ صور وفيديو السونار ← وسائط قياسية
AnnotatedDiagram + DiagramMarkergtimage + gtdetailإحداثيات نسبية للعلامات
EndoscopyProcedure + EndoscopyFinding + EndoscopyTermlaparoscopy, hysteroscopy, laparoscopyinfertility, hysteroscopyinfertility + 24 قائمة lapar*/copy*نموذج واحد بحقل نوع + جدول نتائج (موضع/تصنيف) بدل 26 عمود CSV + معجم موحد
OperativeNote, SurgicalBooking, InfertilityOperation, Procedure, AnesthesiaType, IncisionType, Hospital, HistopathologyFinding, PathologyResult, Locationoperativedetails(+drugs), op_wait_list, operations, operation, anasthesa+generalanasthesa, jncision+midlinejncision, hospitalnames, histopath, pathology, place+place2فريق العملية CSV ← Pivot بأدوار؛ دمج الأماكن بعمود نوع؛ إسقاط operationids؛ أدوية العمليات ← نظام الروشتات الموحد

7) المعمل والصيدلية والمجلس والمنصة

الموديل المقترحالجداول القديمةملاحظات الدمج
LabTestCategory + LabTest (طبقة Mapping على LIS)investcats (22 فئة) + invests (276 بندًا) + EAV المخصصكل بند قديم يُربط ببند كتالوج LIS عبر obgy_lis_test_map؛ إسقاط investigations القديم وexcelinfo (ترخيص)
Drug, DrugCategory, DosageForm, Supplier, PurchaseInvoice/Item, StockMovementdrugs (~2000)، importbill+importdetails، pharmacystore، recepittmp+receiptdrugsكتالوج الأصناف والمخزون يُسند لاحقًا لموديول مخازن الـ ERP؛ دفتر حركات برصيد محسوب يمنع السالب؛ إسقاط drugdos وimporttdetails
BoardRequest, BoardSession, BoardSessionMember, BoardMemberOpinion, BoardCommentbrequests, bsession, bsessionmembers, bmemberopenion, bcomments, councilstaffإعادة بناء من الصفر (الجداول فارغة) مع إضافة patient_id الإلزامي وEnums للحالات ودمج العضوية في صلاحيات الـ ERP
منصة الـ ERP القياسيةawusers, awrole + 5 جداول صلاحيات, awmenu, programesetting, branches, mobileservicesSanctum + spatie/laravel-permission؛ تفكيك الإعدادات إلى مفتاح/قيمة و.env؛ فروع بـ Pivot بدل "-1"؛ إعادة كتابة واجهة الموبايل بمصادقة إلزامية

ثالثًا: نقاط التكامل مع منظومة Moon ERP

رابعًا: مراحل التنفيذ (Phased Rollout)

  1. المرحلة 0 — التأسيس (حجم M): هيكل الموديول، إطار obgy_lookups والـ Enums، حزمة التدقيق، عدة الترحيل ETL (محولات التواريخ والترميز وفاحص الأيتام)، وتصدير إلزامي من قاعدة الإنتاج (قيم القواميس + جداول وقت التشغيل sefo/gynaph/followupdrugs)، وربط المستخدمين والأدوار بمنظومة الصلاحيات.
  2. المرحلة 1 — المرضى والاستقبال (L): دمج المريضة في ملف الـ ERP، فصل الزوج، الأرصدة الافتتاحية، المواعيد والطابور والفترات والإجازات، كتالوج الخدمات، دفتر حساب المريض وجسر الحسابات. أول تشغيل فعلي للاستقبال.
  3. المرحلة 2 — النواة الإكلينيكية والكتالوجات (L): الفحص والتشخيص ومحرك التاريخ المرضي، جدولا الروشتات والتحاليل الموحدان، ربط كتالوج التحاليل بـ LIS، وتكامل الصيدلية مع المخازن.
  4. المرحلة 3 — الحمل والنساء (L): دمج أجيال ملف الحمل الثلاثة، زيارات ومتابعات وسونار الحمل وحجوزات 4D وفقدان الحمل، وزيارات وشيتات وسونار النساء — أعلى حجم بيانات وأصعب إزالة تكرار.
  5. المرحلة 4 — العقم والحقن المجهري والأندرولوجيا (L): توحيد ملف العقم ودورة IvfCycle وجداول المراحل وشبكة الحويصلات، وتطبيع السائل المنوي والهرمونات — الأغنى إكلينيكيًا ويتطلب اعتماد الأطباء لدلالات القوائم.
  6. المرحلة 5 — التصوير والمناظير والعمليات (M): توحيد دراسات التصوير ونتائجها، معجم المناظير، المذكرات الجراحية وقوائم الانتظار والباثولوجيا.
  7. المرحلة 6 — المجلس والكروت والتقارير والموبايل (M): إعادة بناء مجلس الأطباء، قوالب التعليمات والتحويل، طبقة التقارير الإحصائية كاستعلامات + لوحات Angular، وواجهة موبايل REST موثقة وموثَّقة الهوية.
  8. المرحلة 7 — الوسائط والتحول النهائي (M): ترحيل 4.8 جيجابايت وسائط (جرد بالبصمات ثم rsync مرحلي ثم سجلات وسائط)، تشغيل متوازٍ مع مطابقة، ترحيل الفرق الأخير، تجميد النظام القديم للقراءة فقط، وإيقاف مزامنة cURL والقاعدة القديمة نهائيًا.

خامسًا: سجل مخاطر ترحيل البيانات