يجيب هذا الملحق على سؤال المالك المباشر: هل نسخة 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 إطلاقًا. التباعد بنيوي وليس تجميليًا.
OBGY لا يحتوي إطلاقًا على composer.json ولا مجلد vendor/. أما MED فيبدأ ملف إعداداته بـ require_once __DIR__ . '/../vendor/autoload.php' ويستورد Monolog\Logger وPsr. هذه تبعيات مُدارة عبر Composer لا يمكن «تفعيلها بإعداد» — وجودها يثبت أن MED بُنيت على سلسلة أدوات (toolchain) أحدث. كما تغيّر R::freeze والمنطقة الزمنية (Cairo بدل Los Angeles) وقاعدة البيانات (medgreennatureco_med).
_controll.php: متطابق 100% (303 سطر = 303 سطر) — قلب نظام الكنترولرات لم يتغيّر.examination.php: الفرق +2/-2 أسطر فراغات فقط (whitespace) — نفس المنطق حرفيًا._header.php: فروق مسافات وتنسيق فقط._menu.php: الفرق +6/-6 فقط — تم تعطيل (تعليق) إعادة التوجيه عند انتهاك الصلاحيات وإعادة تفعيل حذف awrolemenu؛ تغيير سلوكي صغير لا أكثر.الملفات المشتركة الكبيرة تضخّمت ضِعفيًا إلى خمسة أضعاف، وهذا انفجار في حجم الكود لا يفسّره أي إعداد:
| الملف المشترك | OBGY أسطر | MED أسطر | أسطر مضافة / محذوفة | الدلالة |
|---|---|---|---|---|
visits.php | 1946 | 9660 | +8599 / -885 | 65 → 220 دالة؛ +155 دالة جديدة (مختبر، باركود، فوترة PDF، تكامل ERP) |
patients.php | 2259 | 4157 | +2332 / -434 | 77 → 127 دالة (فروع، منظمات، أرقام ملفات تنظيمية) |
_member.php | 356 | 1018 | كبير | مزامنة الأطباء مع ERP (addAllDoctorsToERP, curlAddDoctor) |
_role.php | 598 | 991 | كبير | صلاحيات أوسع (قوائم مستخدم منفصلة) |
antenalvisit.php | 1361 | 1756 | +395 | حقول/مسارات إضافية للزيارة قبل الولادة |
_sidebar.php | 160 | 361 | +241 / -40 | قائمة جانبية ثانية (userMenuSidebar) وفلترة بنمط النموذج |
programesetting.php | 296 | 376 | +177 / -97 | +44 مفتاح إعداد جديد + جدولا إعدادات جديدان |
setup.php | 225 | 354 | +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 أضافت فوقها قائمة مستخدم ثانية.
المنطق المعماري المُزال: استُبدلت «الأوراق» أحادية الصفحة (single-page clinical sheets) بكنترولرات وحدات مستقلة (modular controllers):
| أُزيل من MED | البديل في MED | الملاحظة |
|---|---|---|
ancsheet / ancsheet00 | antenalvisit.php (مُوسَّع) + mainantenental* | ورقة ANC ذابت في تدفق الزيارة |
gynasheet / gynasheet00 | gyna.php + ultrasoundgyna.php | فُصلت أمراض النساء عن السونار |
infertilitysheet / 00 | infertility.php | — |
ivfsheet / ivfsheet00 | embryology.php, embryoslab.php, embryofreezing.php, spermfreezing.php, ovumpickupembryotrans.php, ivf_reports.php | ورقة IVF واحدة → 6 وحدات معملية |
iui, monitoring, edd, epc | مدمجة في تدفق الزيارة/التقارير | أُلغيت ككنترولرات مستقلة |
Deliveries | إشعارات الولادة عبر birth_notify + التقارير | — |
operations | operations_reserve.php, operations_calendar.php, operations_rooms.php, operations_reports.php, operation_types.php | وحدة عمليات/غرف كاملة |
mobileservices, sh, addpresenthistory, Completesreport, Ivfstatistics | — | أُزيلت / استُبدلت بتقارير المركز |
erp_common.php يستدعي localhost/erp/controllers/api_web.php برمز JWT؛ وvisits.php يزامن فواتير البيع (erpSellbill, erpSellbillUpdate, erpSellbillDel) و_member.php يزامن الأطباء.branches, regions, governorate, residence_rooms + كنترولرات regions.php, branch_common.php, beauty_branches.php.endoscopy, colonoscopy, laparoscopic, hystroscopic)، أشعة (raysdept, radiation, addrays)، مختبر (invsdept, labdevices, financiallab)، صيدلية (pharmacy)، ذكورة (and_visits, and_examination, and_history).createbarcode, createSampleBarCode)، دفعات مقدمة (advance_payment)، أرشفة (archive.php, archive_request).الجداول التالية مُشار إليها في الكنترولرات المشتركة المُعدَّلة في MED، وتمت مقارنتها بقائمة الـ312 جدولًا الأصلية. الأغلبية جديدة (استنتاج من استدعاءات RedBeanPHP والـ SQL الخام):
| الجدول | جديد/معروف | الغرض | أهم الحقول المستنتجة | العلاقات |
|---|---|---|---|---|
programesettingex | جديد | إعدادات ميزات إضافية (أعمدة ديناميكية) | revisioned + أعمدة من programesetting2 (استنتاج) | يُملأ من programesetting2.colum_name |
programesettinglab | جديد | إعدادات وحدة المختبر | lab_style | 1: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 جدولًا الأصلي.
branches/regions/organizations) يفرض نموذج بيانات متعدد المنشآت (multi-tenant/branch) في الـ ERP الهدف.api_web.php (فواتير بيع، عملاء، أطباء) — يجب توثيق هذا الجسر وعدم تكراره؛ ويُوصى بمعالجة رمز JWT المضمّن في erp_common.php أمنيًا (استنتاج: سرّ مكتوب صلبًا).programesetting (الآن +44 مفتاحًا + جدولان) يجب أن تُرحَّل كطبقة «تهيئة المنشأة/الميزات» (feature-flags) في الـ ERP، لأنها تحدد المسارات النشطة.