⚖️

ملحق: ماذا تغيّر في النواة المشتركة — إعدادات أم نسخة أحدث؟ (MED: Shared-Core Diff — Settings or Fork?)

يجيب هذا الملحق على سؤال المالك المباشر: هل نسخة med.greennature.com.sa هي «نفس البرنامج بإعدادات مختلفة»، أم نسخة أحدث (Fork) فيها تباعد فعلي في الكود؟ تمت المقارنة آليًا عبر diff -qr بين obgy/core/controllers وmed/core/controllers، مع مقارنة تفصيلية لخمسة كنترولرات أساسية وفحص ملف الإعدادات aw_config.php ومنظومة programesetting والقوائم، لتحديد ما هو مدفوع بالإعدادات (config-driven) وما هو مكتوب صلبًا في الكود (hard-coded).

الحكم النهائي بالأرقام

النتيجة: نسخة أحدث (Fork) وليست مجرد إعدادات. نعم النواة الإطارية (framework core) واحدة، ونعم MED تعتمد بكثافة على مفاتيح إعدادات لإظهار/إخفاء الوظائف — لكن تلك المفاتيح تتحكم في مسارات كود جديدة كليًا غير موجودة في OBGY إطلاقًا. التباعد بنيوي وليس تجميليًا.

77 → 134عدد الكنترولرات (OBGY ← MED)
57ملف مشترك بالاسم
21مشترك ومتطابق تمامًا
36مشترك لكنه مُعدَّل (Differ)
21أُزيل في MED
78أُضيف في MED

دليل «نسخة أحدث» قاطع: تبعيات Composer جديدة

OBGY لا يحتوي إطلاقًا على composer.json ولا مجلد vendor/. أما MED فيبدأ ملف إعداداته بـ require_once __DIR__ . '/../vendor/autoload.php' ويستورد Monolog\Logger وPsr. هذه تبعيات مُدارة عبر Composer لا يمكن «تفعيلها بإعداد» — وجودها يثبت أن MED بُنيت على سلسلة أدوات (toolchain) أحدث. كما تغيّر R::freeze والمنطقة الزمنية (Cairo بدل Los Angeles) وقاعدة البيانات (medgreennatureco_med).

أين هو «نفس البرنامج» فعلًا (تطابق أو فروق تجميلية)؟

أين هو «التباعد الحقيقي» (Fork)؟

الملفات المشتركة الكبيرة تضخّمت ضِعفيًا إلى خمسة أضعاف، وهذا انفجار في حجم الكود لا يفسّره أي إعداد:

الملف المشتركOBGY أسطرMED أسطرأسطر مضافة / محذوفةالدلالة
visits.php19469660+8599 / -88565 → 220 دالة؛ +155 دالة جديدة (مختبر، باركود، فوترة PDF، تكامل ERP)
patients.php22594157+2332 / -43477 → 127 دالة (فروع، منظمات، أرقام ملفات تنظيمية)
_member.php3561018كبيرمزامنة الأطباء مع ERP (addAllDoctorsToERP, curlAddDoctor)
_role.php598991كبيرصلاحيات أوسع (قوائم مستخدم منفصلة)
antenalvisit.php13611756+395حقول/مسارات إضافية للزيارة قبل الولادة
_sidebar.php160361+241 / -40قائمة جانبية ثانية (userMenuSidebar) وفلترة بنمط النموذج
programesetting.php296376+177 / -97+44 مفتاح إعداد جديد + جدولا إعدادات جديدان
setup.php225354+149دوال ERP (geterpVisaAccounts, saveERPDBVisaAccount) وtablesToClean

الجزء «المدفوع بالإعدادات» — لكنه يقود كودًا جديدًا

منظومة programesetting في MED أصبحت مركز تحكّم بالميزات: أضافت 44 عمودًا/مفتاحًا جديدًا لم يكن لها أي أثر في OBGY، إضافة إلى جدولي إعدادات جديدين programesettingex وprogramesettinglab وجدول أعمدة ديناميكي programesetting2. أمثلة على المفاتيح: system_type، branches، regions، organizations، advance_payment، surgeon، rooms، ovum_tab، embro_tab، tanks_view، whatsapp_sms، national_id_req، barcode_print، refer_doctor، printserial. كل مفتاح يُظهر/يُخفي وظيفة، لكن الوظيفة نفسها كود جديد لا وجود له في النسخة المُحلَّلة. أي: «config-driven» نعم، لكن فوق قاعدة كود مُتفرّعة.

القوائم الجانبية تبقى مدفوعة من قاعدة البيانات عبر awmenu (مع فلترة بـ programesetting.simpleview ونمط النموذج form in (0,1,2))، أي إن البنية الإطارية للقوائم لم تتغيّر — لكن MED أضافت فوقها قائمة مستخدم ثانية.

الكنترولرات الـ21 المُزالة واستبدالاتها (تحوّل من «أوراق» إلى وحدات)

المنطق المعماري المُزال: استُبدلت «الأوراق» أحادية الصفحة (single-page clinical sheets) بكنترولرات وحدات مستقلة (modular controllers):

أُزيل من MEDالبديل في MEDالملاحظة
ancsheet / ancsheet00antenalvisit.php (مُوسَّع) + mainantenental*ورقة ANC ذابت في تدفق الزيارة
gynasheet / gynasheet00gyna.php + ultrasoundgyna.phpفُصلت أمراض النساء عن السونار
infertilitysheet / 00infertility.php
ivfsheet / ivfsheet00embryology.php, embryoslab.php, embryofreezing.php, spermfreezing.php, ovumpickupembryotrans.php, ivf_reports.phpورقة IVF واحدة → 6 وحدات معملية
iui, monitoring, edd, epcمدمجة في تدفق الزيارة/التقاريرأُلغيت ككنترولرات مستقلة
Deliveriesإشعارات الولادة عبر birth_notify + التقارير
operationsoperations_reserve.php, operations_calendar.php, operations_rooms.php, operations_reports.php, operation_types.phpوحدة عمليات/غرف كاملة
mobileservices, sh, addpresenthistory, Completesreport, Ivfstatisticsأُزيلت / استُبدلت بتقارير المركز

قدرات «المركز/المستشفى» الجديدة (لا توجد في OBGY)

الكيانات (الجداول) المستنتجة من النواة المشتركة المُعدَّلة

الجداول التالية مُشار إليها في الكنترولرات المشتركة المُعدَّلة في MED، وتمت مقارنتها بقائمة الـ312 جدولًا الأصلية. الأغلبية جديدة (استنتاج من استدعاءات RedBeanPHP والـ SQL الخام):

الجدولجديد/معروفالغرضأهم الحقول المستنتجةالعلاقات
programesettingexجديدإعدادات ميزات إضافية (أعمدة ديناميكية)revisioned + أعمدة من programesetting2 (استنتاج)يُملأ من programesetting2.colum_name
programesettinglabجديدإعدادات وحدة المختبرlab_style1:1 مع المنشأة
programesetting2معروفتعريف أعمدة الإعدادات الديناميكيةcolum_nameيُسقَط على programesettingex
organizationsجديدالجهات/الشركات المتعاقدةname, discount (استنتاج)organizations_patient_no, organization_discount
organizations_patient_noجديدأرقام ملفات المريض حسب الجهةpatient_id, org_id, no (استنتاج)patients, organizations
advance_paymentجديدالدفعات المقدمة للمريضpatient_id, amount (استنتاج)patients / visits
archive_requestجديدطلبات أرشفة الملفاتpatient_id, status (استنتاج)patients, archive_tracking
patients_childsجديدأبناء المريضة (ربط أسري)patient_id, child_id (استنتاج)patients
governorate / governorate_centers / regions / sub_regionsجديدالتقسيم الجغرافي/الفروعname, parent_id (استنتاج)هرمية مناطق ↔ فروع
operations_main / operation_room / operations_rooms / operationotherthجديدوحدة العمليات والغرفoperation_id, room_id, date (استنتاج)patients, residence_room
residence_room / residence_roomsجديدغرف الإقامة/التنويمroom_no, status (استنتاج)↔ العمليات والحجوزات
clinic_rooms / day_times / visit_hours / visit_periodجديدجدولة العيادات والمواعيدroom, start_hour, end_hour (استنتاج)visits, الأطباء
rays / raysresults / raysresults_img / gynarays / mainantenentalrays / andvisitsraysجديدقسم الأشعة ونتائجهvisit_id, result, img (استنتاج)visits, patients
investigationresults (+ سلالة _culture/_blood/_urine...)جديدنتائج التحاليل المخبرية المفصّلةvisit_id, value (استنتاج)visits, أنواع التحاليل
invoffer / invofferdetailsجديدباقات/عروض التحاليلname, price, items (استنتاج)↔ التحاليل
refer / refer_doctorجديدتحويل/إحالة الطبيبdoctor, patient_id (استنتاج)patients
sellbill / returnsellbill / bank / bankaccount / client / clientdebtchangeجديدجسور تكامل ERP (فواتير/عملاء/بنوك)عبر erp_common.php (استنتاج)مزامنة مع نظام ERP منفصل
and_visits / and_examination / and_history (andvisits*)جديدوحدة الذكورة (Andrology)visit_id, حقول إكلينيكية (استنتاج)patients
visits_follows / visit_hoursجديدمتابعات الزيارة والمواعيدvisit_id, date (استنتاج)visits
patients / visitsمعروفالكيانات الأساسية (نفسها بنيويًا)موسّعة بحقول فروع/جهاتقلب النظام

إجمالًا تشير قائمة setup.php → tablesToClean إلى نحو 171 كيانًا في عالم MED، منها ~91 كيانًا جديدًا غير موجود في تفريغ الـ312 جدولًا الأصلي.

التأثير على خطة الـ ERP/HIS