🔬

ملحق: جناح المناظير الموسع (MED: Extended Endoscopy Suite)

يوثّق هذا الملحق وحدة المناظير في نسخة المركز/المستشفى المكتشفة على med.greennature.com.sa. هذه النسخة توسّع نطاق نظام النساء والولادة الأصلي ليشمل مناظير الجهاز الهضمي (تنظير المعدة endoscopy وتنظير القولون colonoscopy) إلى جانب مناظير النساء (تنظير الرحم hystroscopic وتنظير البطن laparoscopic). الأهم أنها تعتمد محرّك «قوالب تقارير» (Template Engine) جديد كلياً يحل محل أسلوب جداول البحث المجزّأة (lapar* / copy*) المستخدم في النسخة الأصلية.

نظرة عامة على المكوّنات (Controllers)

تتكوّن الوحدة من سبعة Controllers تنقسم إلى ثلاثة أنماط معمارية مختلفة، جميعها يبني على إطار awframework ومكتبة RedBeanPHP (نمط R::dispense / R::findAll / R::getRow) مع عرض عبر Smarty.

7Controllers
14جدول جديد (NEW)
3أنماط قوالب مختلفة
2تخصص (نساء + جهاز هضمي)
3جداول بحث ديناميكية

محرّك القوالب: كيف يختلف عن النسخة الأصلية

في النسخة الأصلية (obgy ذات الـ312 جدولاً) كان كل حقل تشريحي في تقرير المنظار مرتبطاً بجدول بحث مستقل صغير (مثل laparpelvis, laparro, laparrt, copycavity, copycx, copyrostium ... عشرات الجداول)؛ أي «جدول لكل قائمة منسدلة». نسخة المركز تستبدل هذا النهج بثلاث آليات قوالب أنظف:

  1. قالب افتراضي واحد (GI): الجدول endoscopy_template / colonoscopy_template يحوي صفاً واحداً (id = 1) فيه نص افتراضي لكل قسم تشريحي. عند فتح نموذج الإضافة يُمرَّر template_data إلى Smarty فتُملأ الحقول مسبقاً بالقيمة الطبيعية، ويعدّلها الطبيب عند الحاجة. القالب يدير أيضاً ترويسة/تذييل الطباعة (header_print, footer_print عبر uploadupdate).
  2. بنك قوالب مُسمّاة (Gyne): laparoscopic / hystroscopic يخزّنان عدة صفوف، كل صف قالب كامل باسم template_name. واجهة oscopic تعرضها في قائمة select؛ وعند تغيير الاختيار يستدعي oscopic.js الإجراء ac=render الذي ينفّذ R::getRow('select * from laparoscopic where id = ?') ويعيد JSON، فيُحقَن في حقول الفورم عبر jQuery .val().
  3. قوائم بحث ديناميكية بدلاً من جداول ثابتة: في oscopic.php توجد دوال عامة (addToTable, editModal, updateModal, deleteModelItem) تستقبل اسم الجدول كمعامل (table_name من POST) وتدير صفوف oscopic_operations / oscopic_required_examinations / oscopic_specimens مع حذف منطقي (deleted = 1). هذا يحوّل «عشرات جداول البحث الثابتة» إلى جداول قليلة قابلة للإدارة من الواجهة.

ملاحظة أمنية دوال addToTable / updateModal / deleteModelItem تمرّر اسم الجدول واسم العمود مباشرة من POST إلى RedBean دون قائمة بيضاء — يجب تقييدها عند الترحيل (خطر تعديل جداول غير مقصودة). خطأ مرصود في oscopic.js (السطور 19-20) يُملأ left_ovary وleft_ovary_procedures من response.right_ovary بدل القيم اليسرى (خطأ نسخ-لصق).

مسار العمل الكامل (تنظير المعدة كمثال) (end-to-end flow)

  1. إعداد القالب: المدير يفتح endoscopy_template.php?ac=index → يحرّر النصوص الافتراضية وترويسة/تذييل الطباعة → update() يخزّن في endoscopy_template (id=1).
  2. إنشاء تقرير: endoscopy.php?ac=index&patientid= يحمّل بيانات المريض + يحسب العمر من dateofbirth + يجلب الطبيب المُحوِّل من awusers + يمرّر template_data فتُملأ الحقول التشريحية مسبقاً.
  3. الحفظ: ac=addR::dispense('endoscopy') يخزّن كل الأقسام (esophagus, stomach, pylorus, duodenum ...) مع patient_id وexam_date.
  4. الصور: ac=uploadImage ثم ac=upload يرفع إلى upload/endoscopy/ ويخزّن في endoscopy_images (مرتبط بـ endoscopy_id + patient_id).
  5. العرض/التعديل/الحذف: show / edit / update / del على الجدول endoscopy.
  6. الطباعة: ac=printReport يدمج سجلّ المريض + بيانات القالب (ترويسة/تذييل) + الصور في print.html.tpl.

جدول الكيانات المستنتجة (inferred from RedBeanPHP & raw SQL)

الجدولجديد/معروفالغرضأهم الحقول المستنتجةالعلاقات
endoscopyجديدتقرير تنظير معدة لمريضpatient_id, exam_date, indication, anesthesia, procedure, esophagus, cardio_esophageal_junction, stomach, pylorus, duodenum, conclusion, signature, created_at, updated_atpatients (patient_id)
endoscopy_templateجديدقالب افتراضي واحد (id=1) لتنظير المعدة + ترويسة/تذييل طباعةنفس الأقسام التشريحية + header_print, footer_print, updated_atمصدر القيم المسبقة لـ endoscopy
endoscopy_imagesجديدصور المنظارimage, patient_id, endoscopy_id, create_dateendoscopy, patients
colonoscopyجديدتقرير تنظير قولون لمريضpatient_id, exam_date, indication, consent, preparation, instrument, anesthesia, procedure, preparation_2, withdrawal_time, dre, findings, plan, signature, created_at, updated_atpatients
colonoscopy_templateجديدقالب افتراضي واحد (id=1) لتنظير القولوننفس حقول colonoscopy (بلا patient) + header_print, footer_printمصدر القيم المسبقة لـ colonoscopy
colonoscopy_imagesجديدصور تنظير القولونimage, patient_id, colonoscopy_id, create_datecolonoscopy, patients
laparoscopicجديدبنك قوالب مُسمّاة لتنظير البطن (نساء)template_name, entry(_procedures), uterus(_procedures), right_tube(_procedures), left_tube(_procedures), right_ovary(_procedures), left_ovary(_procedures), uterosacrals(_procedures), peritoneum(_procedures), recommendationsقالب يُحقَن في patient_laparoscopic
hystroscopicجديدبنك قوالب مُسمّاة لتنظير الرحم (نساء)template_name, entry(_procedures), external_os, cervical_canal, internal_os, uterine_cavity, endometrium, right_ostium, left_ostium, other (+ *_procedures), recommendationsقالب يُحقَن في patient_hystroscopic
patient_laparoscopicجديدتقرير تنظير بطن مطبَّق على مريض فعليحقول laparoscopic + patient_id, created_at, template_id, diagnosis (CSV), diagnosis_textpatients, laparoscopic (template_id), diagnosis
patient_hystroscopicجديدتقرير تنظير رحم مطبَّق على مريض فعليحقول hystroscopic + patient_id, created_at, template_id, diagnosis (CSV), diagnosis_textpatients, hystroscopic, diagnosis
oscopic_reportجديدتقرير عمليات/منظار موحّد للمريض (يدعم الزوج أيضاً)patient_id, created_at, diagnosis (CSV), operation_id, operation_text, required_examination_id, required_examination_text, specimen_id, specimen_text, diagnosis_text, husbandpatients, diagnosis, جداول البحث الثلاثة
oscopic_operationsجديدقائمة بحث ديناميكية للعملياتname, deletedتُدار عبر addToTable/editModal
oscopic_required_examinationsجديدقائمة بحث ديناميكية للفحوص المطلوبةname, deletedتُدار عبر الدوال العامة
oscopic_specimensجديدقائمة بحث ديناميكية للعيّناتname, deletedتُدار عبر الدوال العامة
diagnosisمعروفقائمة التشخيصات المشتركة (تُفلتر بـ conditions = 0)name, conditionsمشترك مع باقي النظام
patients / awusersمعروفالمرضى والمستخدمون/الأطباءdateofbirth, refer_doctor, doctor1, h_doctor1, husbanddateofbirth / user_idمرجع لكل التقارير

مقارنة: النهج القديم مقابل نهج المركز

المحورالنسخة الأصلية (obgy)نسخة المركز (med)
تخزين القوائم التشريحيةجدول لكل حقل: laparpelvis, laparro, laparrt, copycavity, copycx, copyrostium ... (عشرات الجداول)صف قالب واحد كامل (template_*) أو بنك قوالب مُسمّاة + 3 جداول بحث ديناميكية
التخصصنساء وولادة فقط (laparoscopy, hysteroscopy)نساء + جهاز هضمي (معدة endoscopy، قولون colonoscopy)
تعبئة الفورمقوائم منسدلة من جداول بحث ثابتةتعبئة مسبقة من القالب (Smarty) أو حقن AJAX (ac=render → JSON)
الطباعةقوالب طباعة ثابتةترويسة/تذييل قابلة للرفع لكل نوع منظار (header_print/footer_print)

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