الهدف هو استيعاب نظام عيادة النساء والتوليد القديم (PHP/Smarty — 312 جدولًا بلا أي مفاتيح أجنبية) كموديول جديد Modules/Obgy داخل منظومة Moon ERP القائمة (Laravel/nwidart + Angular)، مع الاستغناء نهائيًا عن مزامنة cURL مع قاعدة الـ ERP الخارجية: يصبح المريض هو نفسه عميل الـ ERP، وتتكامل التحاليل مع موديول المعمل LIS، والصيدلية مع المخازن، والماليات مع الحسابات، والمستخدمون مع نظام الصلاحيات الموحد. المحصلة: تتقلص 312 جدولًا قديمًا إلى نحو 85 جدولًا جديدًا (~55 موديل نطاق + جدول قواميس موحد + جداول Pivot ووسائط)، مع إسقاط ~40 جدولًا ميتًا أو مشتقًا.
| النمط القديم | الحل المقترح |
|---|---|
~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 |
| الموديل المقترح | الجداول القديمة | ملاحظات الدمج |
|---|---|---|
Patient + ObgyPatientProfile | patients (نصف الزوجة) | المريضة تصبح هي سجل المريض/العميل في الـ ERP مباشرة؛ الملف الإضافي يحمل رقم الملف (بتسلسل معاملاتي بدل MAX+1) والرقم القومي والخطورة |
Spouse | أعمدة husband* في patients | فصل بيانات الزوج في جدول 1-1 |
PreviousMarriage | previous_marriage + hus_previous_marriage | دمج بعمود تمييز (زوجة/زوج) مع إصلاح ترميز latin1 |
ObstetricBaseline | أعمدة pno/cs/ab/ectopic/vmodel/svd | أرصدة افتتاحية رقمية للصيغة التوليدية |
MedicalRecord, DeliveryRegistration, MediaAttachment | records, registeration, patientfiles + مجلدات الرفع | تصحيح coast → cost decimal؛ وسائط بجدول حقيقي وروابط موقعة |
قواميس: JobTitle, PersonTitle, Complaint... | wifejobs+husbandjobs، wifetypes+husbandtypes، complaint+complaintant، education، wifestatus، risktype، origin | توحيد القوائم المزدوجة في obgy_lookups؛ فصائل الدم Enum؛ إسقاط patients_tmp وlocations وجداول التطوير |
| الموديل المقترح | الجداول القديمة | ملاحظات الدمج |
|---|---|---|
Appointment + Encounter | visits (الحجز + الطابور) وfollowupcard | تفكيك الجدول المركب؛ ربط السجلات الإكلينيكية بـ encounter_id يعالج العيب البنيوي (لا يوجد ربط زيارة في أي جدول إكلينيكي) |
Service, VisitPeriod, ClinicClosure, TreatmentClosure | detections, visit_periods, vacations, endvisitreports | سعة الفترات تُفحص بمعاملة قاعدة بيانات؛ تفعيل الإجازات فعليًا في منع الحجز |
PatientLedgerEntry + Invoice + Payment | totalbalance + الأكواد السحرية في visits (-99 قسط / 999 سداد / 9999 مرتجع) | دفتر حساب بأنواع حركات Enum صريحة ورصيد محسوب؛ الترحيل للحسابات عبر Events |
| — | old_visits, visits_updates, lastvisit, totalbalancepaids | تُسقط: أرشيف ميت / تدقيق مهجور / مؤشر يُشتق بالاستعلام / جدول ميت |
| الموديل المقترح | الجداول القديمة | ملاحظات الدمج |
|---|---|---|
ClinicalExamination + ExaminationFinding | examination + 9 جداول نتائج فحص متطابقة البنية | كتالوج نتائج موحد بعمود جهاز الجسم؛ إلغاء الإنشاء التلقائي عند العرض |
Diagnosis + Pivot | diagnosis + diagnosisant | دمج بعمود تخصص وجدول وسيط بدل CSV |
HistoryQuestion / HistoryAnswerOption / PatientHistoryAnswer | presenthistoryquestions/answers + جدول gynaph (وقت تشغيل) | gynaph غير موجود في النسخة الاحتياطية — يجب تصديره من الإنتاج |
Prescription/Item + LabOrder/Item | 18 جدول الروشتات/التحاليل المستنسخة + ثلاثية EAV | راجع جدول الأنماط العرضية أعلاه |
نماذج التاريخ المرضي: MenstrualHistory, ObstetricHistory+ObstetricBaby, ContraceptionHistory, PastMedical/Surgical/GynecologicalHistory, PastArtCycle+تفاصيل ICSI, FamilyHistory | جداول ph* التسعة + wifep/awifep + الكتالوجات المزدوجة و*dm | توحيد سجل الحمول السابقة في مصدر واحد وحساب الصيغة التوليدية كخدمة/Accessor؛ طريقة انتهاء الحمل Enum ثابت |
| الموديل المقترح | الجداول القديمة | ملاحظات الدمج |
|---|---|---|
Pregnancy | ancsheet + mainantenental + followup | دمج ثلاثة أجيال متوازية لملف الحمل في كيان واحد؛ المطابقة بالمريضة + LMP وأعلام done/endpreg |
AntenatalVisit, AntenatalUltrasound, FourDScanBooking, ClinicalNote | ancnewvisit+antenalvisit+followupvisit، mainantenentalus+أعمدة T/TT-scan، op_4d_list، followupdiagnosis/exam/invest | عمر الحمل GA يُحسب ولا يُخزن؛ حالة 4D صريحة بدل أعلام البتات |
PregnancyLoss + قوائمه, ExternalProvider | wifeepc + wifeepctype/ttt، wifeobst+wifeepcobst | إعادة الربط بالمريضة مباشرة بدل شيت العقم؛ إسقاط anprotocol اليتيم |
GynaVisit, GynaSheet+GynaSheetVisit, GynaUltrasound+Follicle, InfertilityProfile+Plan | gyna، gynasheet+maingyna+newvisitg، gynaus+gynausficils، gynainfertility+أعمدة gyna.inf_* | القواميس التسعة الفارغة ← obgy_lookups مع التصدير من الإنتاج؛ إهمال شاشة gynasheet00 |
| الموديل المقترح | الجداول القديمة | ملاحظات الدمج |
|---|---|---|
InfertilityFile | infertility + جداوله الفرعية + infertilitysheet (64 عمودًا) | دمج الجيلين في ملف واحد لكل مريضة بجداول فرعية مهيكلة وPivot بدل CSV |
IvfCycle | ivfsheet + mointoringsheet | توحيد المسارين بقيد فهرس فريد جزئي = دورة نشطة واحدة لكل مريضة |
IvfCycleVisit + FollicleMeasurement | ovst + mointoringsheetvisits + folliculom | شبكة حويصلات مطبّعة (جانب/قطر/عدد) بدل 26 عمودًا مشفرًا |
OocyteRetrieval, SemenSample, EmbryoTransfer, Cryopreservation, EndometrialPrep, CycleOutcome | أعمدة مراحل ivfsheet + eprep + جدول sefo (وقت تشغيل) | نمذجة المراحل كجداول فرعية؛ إسقاط icsi المشتق واستبداله باستعلام |
SemenAnalysis, AndrologyInvestigation, HormoneResult+HormoneDefinition | semen+semeninfertility، semen2 العريض، hormon+hormonalprofile+hormonalprofile2 | تطبيع طولي (صف لكل فحص/هرمون) مع وحدة ومدى مرجعي وربط بـ LIS؛ حذف اليتيم sseemmeen وإعادة تسمية الرباعية المشوهة بعد مراجعة العيادة |
| الموديل المقترح | الجداول القديمة | ملاحظات الدمج |
|---|---|---|
ImagingStudy + FetalScanFinding + GynaScanFinding | ultrasound(+detail), ultrasoundobst(+detail), ultrasoundgyna, tvs, dtvs, sis, hsg, hsginfertility, mrict, sonar | رأس دراسة موحد بنوع وحالة اعتماد؛ 16 جدول مفردات ← obgy_lookups؛ صور وفيديو السونار ← وسائط قياسية |
AnnotatedDiagram + DiagramMarker | gtimage + gtdetail | إحداثيات نسبية للعلامات |
EndoscopyProcedure + EndoscopyFinding + EndoscopyTerm | laparoscopy, hysteroscopy, laparoscopyinfertility, hysteroscopyinfertility + 24 قائمة lapar*/copy* | نموذج واحد بحقل نوع + جدول نتائج (موضع/تصنيف) بدل 26 عمود CSV + معجم موحد |
OperativeNote, SurgicalBooking, InfertilityOperation, Procedure, AnesthesiaType, IncisionType, Hospital, HistopathologyFinding, PathologyResult, Location | operativedetails(+drugs), op_wait_list, operations, operation, anasthesa+generalanasthesa, jncision+midlinejncision, hospitalnames, histopath, pathology, place+place2 | فريق العملية CSV ← Pivot بأدوار؛ دمج الأماكن بعمود نوع؛ إسقاط operationids؛ أدوية العمليات ← نظام الروشتات الموحد |
| الموديل المقترح | الجداول القديمة | ملاحظات الدمج |
|---|---|---|
LabTestCategory + LabTest (طبقة Mapping على LIS) | investcats (22 فئة) + invests (276 بندًا) + EAV المخصص | كل بند قديم يُربط ببند كتالوج LIS عبر obgy_lis_test_map؛ إسقاط investigations القديم وexcelinfo (ترخيص) |
Drug, DrugCategory, DosageForm, Supplier, PurchaseInvoice/Item, StockMovement | drugs (~2000)، importbill+importdetails، pharmacystore، recepittmp+receiptdrugs | كتالوج الأصناف والمخزون يُسند لاحقًا لموديول مخازن الـ ERP؛ دفتر حركات برصيد محسوب يمنع السالب؛ إسقاط drugdos وimporttdetails |
BoardRequest, BoardSession, BoardSessionMember, BoardMemberOpinion, BoardComment | brequests, bsession, bsessionmembers, bmemberopenion, bcomments, councilstaff | إعادة بناء من الصفر (الجداول فارغة) مع إضافة patient_id الإلزامي وEnums للحالات ودمج العضوية في صلاحيات الـ ERP |
| منصة الـ ERP القياسية | awusers, awrole + 5 جداول صلاحيات, awmenu, programesetting, branches, mobileservices | Sanctum + spatie/laravel-permission؛ تفكيك الإعدادات إلى مفتاح/قيمة و.env؛ فروع بـ Pivot بدل "-1"؛ إعادة كتابة واجهة الموبايل بمصادقة إلزامية |
patient_id، مع جدول مطابقة لمعرفات obygyPatientId التاريخية وأحداث PatientRegistered/Updated لأي مستهلك داخلي.LabOrderPlaced ينشئ أوردر في LIS بالبنود الممَيِّزة عبر obgy_lis_test_map، وترجع النتائج بحدث LabResultReceived لتظهر داخل الشيت الإكلينيكي بدل النص الحر.PrescriptionDispensed فيُخصم المخزون وتُنشأ حركة بيع في موديول المخازن؛ كتالوج الأدوية يُساد (Master) في أصناف الـ ERP، والمشتريات بالكامل لموديول المشتريات.VisitInvoiced / PaymentReceived / RefundIssued تنشئ فواتير وسندات وقيود في موديول الحسابات بدل دفتر اليومية المتخفي في visits وأكواده السحرية؛ قائمة أسعار الخدمات (detections) تُدار من الـ ERP.branch_user.Encounter وOperativeNote وSurgicalBooking وHospital وخدمة الطابور بشكل غير مرتبط بالموديول ليعاد استخدامها من HMS لاحقًا.obgy_lookups والـ Enums، حزمة التدقيق، عدة الترحيل ETL (محولات التواريخ والترميز وفاحص الأيتام)، وتصدير إلزامي من قاعدة الإنتاج (قيم القواميس + جداول وقت التشغيل sefo/gynaph/followupdrugs)، وربط المستخدمين والأدوار بمنظومة الصلاحيات.IvfCycle وجداول المراحل وشبكة الحويصلات، وتطبيع السائل المنوي والهرمونات — الأغنى إكلينيكيًا ويتطلب اعتماد الأطباء لدلالات القوائم.etl_orphans بسبب مسجل ومراجعة عينات مع الأطباء.Encounter، وما لا يُطابق يُسند لزيارة تاريخية اصطناعية.ivfsheet مقابل mointoringsheet، وأربعة جداول للسائل المنوي وثلاثة للهرمونات — قواعد دمج حتمية (مريضة + LMP/تاريخ) بأسبقية أجيال يعتمدها الأطباء، مع تقرير دمج لكل مريضة.Y/m/d و0000-00-00 وفراغات ونصوص حرة — محلل دفاعي مع طابور رفض وإحصاءات لكل عمود.sefo, gynaph, followupdrugs) وأعمدة RedBean الديناميكية غائبة — تصدير إنتاجي طازج قبل كل بروفة ترحيل مع بوابة مقارنة مخططات في خط الأنابيب.detectionid والربط الذاتي) — إعادة اشتقاق معاملاتية إلى أنواع حركات صريحة ومطابقة الأرصدة لكل مريضة مع شاشات النظام القديم قبل التسليم للحسابات.done=0 وأرقام قومية مكررة — تمريرة إزالة تكرار (رقم قومي/هاتف/اسم+ميلاد) بطابور مراجعة بشرية، ولا تُرحَّل المسودات الخالية من بيانات إكلينيكية.husdandname, coast, registeration...).