هذه الوحدة هي «جوهرة» نسخة المركز/المستشفى (MED) المكتشفة على med.greennature.com.sa، وهي غير موجودة في النسخة الأصلية التي جرى تحليلها (312 جدولاً). تُدير غرف العمليات وغرف الإقامة الداخلية (التنويم) عبر طابقين منطقيين: حجز بالساعات (Hourly Reservation) وتقويم تفاعلي (FullCalendar) مع تتبّع إشغال الغرف لحظياً وتقارير تشغيلية للعمليات والإقامة. تمثّل دليلاً مباشراً على خارطة طريق التنويم في نظام معلومات المستشفى (HIS).
for_departmentتنقسم الوحدة إلى ثلاث مناطق وظيفية مترابطة. الأولى: التعريفات الأساسية (غرف العمليات، غرف الإقامة، أنواع العمليات). الثانية: محركات الحجز وهي محركان متوازيان — محرّك «الساعات» القديم (operations_reserve) الذي يقسّم اليوم إلى خانات نصف/كامل الساعة ويخزّنها سطراً لكل ساعة، ومحرّك «التقويم» الأحدث (operations_calendar) المبني على FullCalendar بموارد (Resources) يخزّن العملية في صف واحد يحمل وقت بداية ونهاية. الثالثة: التقارير والإشغال اللحظي (تقارير العمليات والإقامة، تقرير الغرف، قائمة اليوم).
detections الموجود أصلاً بإضافة العلم for_operation = 1 وأعمدة جديدة (استنتاج من الكود): operation_time، residence_time، operations_rooms، cost_details، instructions، sort. الجدول الأصلي في الـ dump يحوي فقط id, title, detectionval, del.visits الأصلي لا يحوي أي عمود تنويم/عمليات. نسخة MED أضافت إليه (استنتاج) أعمدة الإقامة وغرفة العملية: for_department، for_doctor، for_husband، room_no، res_room_no، bed_no، enterance، p_exit، res_enterance_date، res_enterance، res_p_exit، recep_enterance، recep_p_exit، operation_attend، operation_result، operation_time، op_card_add، rec_card_add، today_list، today_list_dept، today_list_sort، in_clinic، clinic_entered، child.for_department = 13، وأطباؤه عبر awrole(id=13).related_dr_depts (قائمة أدوار مفصولة بفواصل).| الجدول | جديد/معروف | الغرض | أهم الحقول المستنتجة | العلاقات |
|---|---|---|---|---|
operations_rooms | جديد | غرف العمليات (OR) موزّعة على طوابق | name, start_time, end_time, floor_no, branch_id, create_date, deleted | floor_no→floors.id، branch_id→branches |
residence_rooms | جديد | غرف الإقامة الداخلية (التنويم) | name, start_time, end_time, floor_no, create_date, deleted | floor_no→floors.id |
operations_rooms_cal | جديد | سجل العملية في محرك التقويم (صف واحد للعملية) — يجمع غرفة العملية وغرفة الإقامة معاً | room_id, res_room_id, patient_id, patient_name, doctor_id, assistant_id, operation_type_id, date, start_time, end_time, res_start_time, res_end_time, cost, cost_details, instructions, for_husband, vip, notes, contacted_patient, contacted_user_id, sms_message, created_by, updated_by, created_at, updated_at | room_id→operations_rooms، res_room_id→residence_rooms، patient_id→patients، doctor_id/assistant_id→awusers، operation_type_id→detections |
operations_main | جديد | رأس الحجز في المحرك القديم (الساعات) — يربط العملية بساعاتها ونوعها | doctor_id, the_date, operation_types_id, operation_hours, residence_hours, operations_rooms_id, residence_rooms_id, create_date | →operations_rooms، →residence_rooms، →detections، →awusers |
doctors_reserves | جديد | سطر حجز لكل ساعة في غرفة عملية (المحرك القديم) | doctor_id, operations_room_id, hour_text, the_date, operation_type, operation_main_id | operation_main_id→operations_main، operations_room_id→operations_rooms |
residence_reserves | جديد | سطر حجز لكل ساعة في غرفة إقامة (المحرك القديم) | doctor_id, residence_room_id, hour_text, the_date, operation_type, operation_main_id | operation_main_id→operations_main، residence_room_id→residence_rooms |
operation_data | جديد | «بورد» تفاصيل العملية المرتبط بالزيارة (طاقم تخدير/تمريض ونتائج) | visit_id, deleted (+ أعمدة الطاقم — استنتاج) | visit_id→visits |
detections (موسّع) | معروف+توسعة | يُعاد استخدامه كـ «أنواع العمليات» عبر for_operation=1 | أضيف: for_operation, operation_time, residence_time, operations_rooms, cost_details, instructions, sort | operations_rooms = قائمة معرّفات غرف مفصولة بفواصل أو -1 (الكل) |
visits (موسّع) | معروف+توسعة | الزيارة هي حامل بيانات الإقامة الفعلية ودخول/خروج المريض من الغرف | أضيف (استنتاج): for_department, room_no, res_room_no, bed_no, enterance, p_exit, res_enterance_date, res_p_exit, op_card_add, today_list, today_list_dept, in_clinic | res_room_no→residence_rooms، room_no→operations_rooms |
floors | معروف | الطوابق (السادس/السابع/الثامن مستخدمة فعلياً) | id, name, deleted | مرجع لـ floor_no |
clinic_rooms / clinic_reserves | جديد | غرف وحجوزات العيادات (تستخدمها قائمة اليوم لتوزيع الأقسام والطبيب الحالي) | today_list, room_id, reserve_day_no, reserve_hour, doctor_id, is_active | →visits.today_list_dept، →awusers |
index() يجهّز غرف العمليات والإقامة وأنواع العمليات والأطباء (دور 13).rooms() وresidenceRooms() تُرجعان قائمة الغرف كـ JSON resources مرتّبة بالطابق.events() يقرأ operations_rooms_cal ضمن نطاق تاريخ، ويلوّن الحدث حسب الطابق/VIP، ويكشف التعارض بفحص تقاطع الأوقات في نفس الغرفة (لون أحمر عند التعارض).searchPatients() بحث حي في patients بالاسم أو رقم الملف statusno.saveOperation() ينشئ صفاً واحداً في operations_rooms_cal يحمل غرفة العملية وغرفة الإقامة معاً مع أوقاتهما والتكلفة والتعليمات والطبيب والمساعد.getOperation()/updateOperation()/removeOperation() (حذف فعلي عبر R::trash).getOperationTime() يجلب من نوع العملية مدّتها ومدّة الإقامة والتكلفة والتعليمات لملء النموذج.index(): اختيار نوع العملية والتاريخ.search(): بناء شبكة ساعات (خانات نصف ساعة) لكل غرفة عملية ضمن طابقها؛ الأخضر متاح، الأحمر محجوز (موجود في doctors_reserves)، الرمادي خارج ساعات الغرفة.residence(): شبكة ساعات لغرف الإقامة بعد ساعة نهاية العملية مباشرة، مع فحص residence_reserves.reserve(): ينشئ رأساً في operations_main ثم سطراً لكل ساعة في doctors_reserves ولكل ساعة إقامة في residence_reserves مربوطة بـ operation_main_id.removeRoom(): تفريغ الساعات المحجوزة (R::trash).roomsreport: لوحة إشغال غرف الإقامة الآن — يربط residence_rooms بـ visits حيث for_department=13 وres_enterance_date IS NOT NULL وres_p_exit IS NULL (مريض داخل الغرفة حالياً)، ويعرض المريض/الطبيب/نوع العملية وأوقات الدخول/الخروج.operationreport.operation_data(): شاشة طوابق غرف العمليات لحظياً (تحديث ذاتي كل 300 ثانية) تُظهر الغرفة المشغولة بزيارة جارية حسب enterance/p_exit ضمن وقت الآن.operations_reports: تقارير العمليات (rooms لغرف العمليات بطابقي 8 و6، resReport لغرف الإقامة بطوابق 8/7/6) موزّعة على 24 خانة ساعة، مع تقرير قائمة (listReport/opReport) يجمع حسب نوع العملية والطبيب، وتقرير متابعة الاتصال بالمريض وإرسال SMS عبر بوابة smsmisr.today_list: قائمة مرضى اليوم موزّعة على غرف العيادات (clinic_rooms) مع سحب وإفلات للترتيب وتتبّع «المريض الحالي» داخل العيادة عبر in_clinic/clinic_entered، والطبيب المناوب عبر clinic_reserves.operationreport.search/showprint: تقرير عمليات بفترة زمنية يربط visits بأسماء الغرف والطبيب ونوع العملية مع طباعة.التسعير يُحمل من نوع العملية: detections.detectionval (التكلفة) مع cost_details النصية وoperation_time/residence_time (المدد). عند الحفظ في التقويم تُنسخ القيم إلى operations_rooms_cal.cost وcost_details. لا يوجد محرك فوترة مستقل داخل هذه الوحدة — التكلفة وصفية ومرتبطة بنوع العملية فقط (استنتاج).
WHERE بدمج نصي مباشر للمدخلات (مثل floor_no IN (...)، doctor_id = $doctorId، operations_rooms_id in (...)) — خطر حقن واضح يجب معالجته في الترحيل.password) مكتوب صراحةً داخل operations_reports.sendSmsMisr() — يجب نقله إلى متغيّر بيئة وتدويره.operation_details() يضبط $_SESSION['user_id']=123 ويعطّل فحص الصلاحيات — منفذ تشخيصي خطر.for_department=13، awrole id=13، أرقام طوابق 6/7/8، ومرشّح detections.id in (55,152,217,228) مكتوبة في الكود.operations_reserve (الساعات) وoperations_calendar (التقويم) يكتبان في جداول مختلفة (doctors_reserves/operations_main مقابل operations_rooms_cal) — مصدران غير متزامنين لنفس مفهوم الحجز.visits وdetections.OperationType مستقل بدل ركوب جدول detections، مع جدول تسعير حقيقي مربوط بالفوترة.res_enterance_date/res_p_exit على الزيارة.operation_data وassistant_id ويجب توسعته.