يوثّق هذا الملحق وحدة المناظير في نسخة المركز/المستشفى المكتشفة على med.greennature.com.sa. هذه النسخة توسّع نطاق نظام النساء والولادة الأصلي ليشمل مناظير الجهاز الهضمي (تنظير المعدة endoscopy وتنظير القولون colonoscopy) إلى جانب مناظير النساء (تنظير الرحم hystroscopic وتنظير البطن laparoscopic). الأهم أنها تعتمد محرّك «قوالب تقارير» (Template Engine) جديد كلياً يحل محل أسلوب جداول البحث المجزّأة (lapar* / copy*) المستخدم في النسخة الأصلية.
تتكوّن الوحدة من سبعة Controllers تنقسم إلى ثلاثة أنماط معمارية مختلفة، جميعها يبني على إطار awframework ومكتبة RedBeanPHP (نمط R::dispense / R::findAll / R::getRow) مع عرض عبر Smarty.
endoscopy.php + endoscopy_template.php و colonoscopy.php + colonoscopy_template.php. لكل نوع جدول قالب يحوي صفاً واحداً افتراضياً (id = 1) يُملأ مسبقاً في نموذج الإدخال، وجدول سجلّات مرتبط بالمريض، وجدول صور.laparoscopic.php و hystroscopic.php يديران مكتبة قوالب مُسمّاة (template_name) قابلة للاختيار، تُحقَن في الفورم عبر AJAX (ac=render → JSON).oscopic.php (الأكبر، 691 سطراً) يربط قوالب التنظير ببيانات المريض الفعلية، ويضيف قوائم بحث ديناميكية قابلة للتحرير (Operations / Examinations / Specimens) وتقرير عمليات موحّد.في النسخة الأصلية (obgy ذات الـ312 جدولاً) كان كل حقل تشريحي في تقرير المنظار مرتبطاً بجدول بحث مستقل صغير (مثل laparpelvis, laparro, laparrt, copycavity, copycx, copyrostium ... عشرات الجداول)؛ أي «جدول لكل قائمة منسدلة». نسخة المركز تستبدل هذا النهج بثلاث آليات قوالب أنظف:
endoscopy_template / colonoscopy_template يحوي صفاً واحداً (id = 1) فيه نص افتراضي لكل قسم تشريحي. عند فتح نموذج الإضافة يُمرَّر template_data إلى Smarty فتُملأ الحقول مسبقاً بالقيمة الطبيعية، ويعدّلها الطبيب عند الحاجة. القالب يدير أيضاً ترويسة/تذييل الطباعة (header_print, footer_print عبر uploadupdate).laparoscopic / hystroscopic يخزّنان عدة صفوف، كل صف قالب كامل باسم template_name. واجهة oscopic تعرضها في قائمة select؛ وعند تغيير الاختيار يستدعي oscopic.js الإجراء ac=render الذي ينفّذ R::getRow('select * from laparoscopic where id = ?') ويعيد JSON، فيُحقَن في حقول الفورم عبر jQuery .val().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 بدل القيم اليسرى (خطأ نسخ-لصق).
endoscopy_template.php?ac=index → يحرّر النصوص الافتراضية وترويسة/تذييل الطباعة → update() يخزّن في endoscopy_template (id=1).endoscopy.php?ac=index&patientid= يحمّل بيانات المريض + يحسب العمر من dateofbirth + يجلب الطبيب المُحوِّل من awusers + يمرّر template_data فتُملأ الحقول التشريحية مسبقاً.ac=add → R::dispense('endoscopy') يخزّن كل الأقسام (esophagus, stomach, pylorus, duodenum ...) مع patient_id وexam_date.ac=uploadImage ثم ac=upload يرفع إلى upload/endoscopy/ ويخزّن في endoscopy_images (مرتبط بـ endoscopy_id + patient_id).show / edit / update / del على الجدول endoscopy.ac=printReport يدمج سجلّ المريض + بيانات القالب (ترويسة/تذييل) + الصور في print.html.tpl.| الجدول | جديد/معروف | الغرض | أهم الحقول المستنتجة | العلاقات |
|---|---|---|---|---|
endoscopy | جديد | تقرير تنظير معدة لمريض | patient_id, exam_date, indication, anesthesia, procedure, esophagus, cardio_esophageal_junction, stomach, pylorus, duodenum, conclusion, signature, created_at, updated_at | ← patients (patient_id) |
endoscopy_template | جديد | قالب افتراضي واحد (id=1) لتنظير المعدة + ترويسة/تذييل طباعة | نفس الأقسام التشريحية + header_print, footer_print, updated_at | مصدر القيم المسبقة لـ endoscopy |
endoscopy_images | جديد | صور المنظار | image, patient_id, endoscopy_id, create_date | ← endoscopy, patients |
colonoscopy | جديد | تقرير تنظير قولون لمريض | patient_id, exam_date, indication, consent, preparation, instrument, anesthesia, procedure, preparation_2, withdrawal_time, dre, findings, plan, signature, created_at, updated_at | ← patients |
colonoscopy_template | جديد | قالب افتراضي واحد (id=1) لتنظير القولون | نفس حقول colonoscopy (بلا patient) + header_print, footer_print | مصدر القيم المسبقة لـ colonoscopy |
colonoscopy_images | جديد | صور تنظير القولون | image, patient_id, colonoscopy_id, create_date | ← colonoscopy, 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_text | ← patients, laparoscopic (template_id), diagnosis |
patient_hystroscopic | جديد | تقرير تنظير رحم مطبَّق على مريض فعلي | حقول hystroscopic + patient_id, created_at, template_id, diagnosis (CSV), diagnosis_text | ← patients, 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, husband | ← patients, 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) |
deleted) بدل جداول ثابتة.addToTable/updateModal/deleteModelItem تمرّر اسم الجدول/العمود من المستخدم مباشرة إلى ORM؛ يجب فرض قائمة بيضاء عند إعادة البناء.diagnosis كسلسلة مفصولة بفواصل (CSV) داخل التقارير — يُنصح بتطبيعه إلى جدول ربط (many-to-many) في الـ ERP الجديد.endoscopy_images, colonoscopy_images) ضمن خدمة PACS/مرفقات مركزية بدل مجلدات رفع منفصلة لكل وحدة.oscopic.js عند الترحيل لتجنّب انتقال أخطاء سريرية إلى النظام الجديد.