🛏️

ملحق: الإقامة الداخلية وغرف العمليات (MED: Inpatient & OR Management)

هذه الوحدة هي «جوهرة» نسخة المركز/المستشفى (MED) المكتشفة على med.greennature.com.sa، وهي غير موجودة في النسخة الأصلية التي جرى تحليلها (312 جدولاً). تُدير غرف العمليات وغرف الإقامة الداخلية (التنويم) عبر طابقين منطقيين: حجز بالساعات (Hourly Reservation) وتقويم تفاعلي (FullCalendar) مع تتبّع إشغال الغرف لحظياً وتقارير تشغيلية للعمليات والإقامة. تمثّل دليلاً مباشراً على خارطة طريق التنويم في نظام معلومات المستشفى (HIS).

10كنترولر في النطاق
6جداول جديدة
2محركا حجز (ساعات + تقويم)
13قسم العمليات for_department

نظرة عامة على البنية

تنقسم الوحدة إلى ثلاث مناطق وظيفية مترابطة. الأولى: التعريفات الأساسية (غرف العمليات، غرف الإقامة، أنواع العمليات). الثانية: محركات الحجز وهي محركان متوازيان — محرّك «الساعات» القديم (operations_reserve) الذي يقسّم اليوم إلى خانات نصف/كامل الساعة ويخزّنها سطراً لكل ساعة، ومحرّك «التقويم» الأحدث (operations_calendar) المبني على FullCalendar بموارد (Resources) يخزّن العملية في صف واحد يحمل وقت بداية ونهاية. الثالثة: التقارير والإشغال اللحظي (تقارير العمليات والإقامة، تقرير الغرف، قائمة اليوم).

اكتشاف معماري مهم: توسعة جداول قائمة وليست جداول جديدة فقط

جدول الكيانات

الجدولجديد/معروفالغرضأهم الحقول المستنتجةالعلاقات
operations_roomsجديدغرف العمليات (OR) موزّعة على طوابقname, start_time, end_time, floor_no, branch_id, create_date, deletedfloor_nofloors.id، branch_idbranches
residence_roomsجديدغرف الإقامة الداخلية (التنويم)name, start_time, end_time, floor_no, create_date, deletedfloor_nofloors.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_atroom_idoperations_rooms، res_room_idresidence_rooms، patient_idpatients، doctor_id/assistant_idawusers، operation_type_iddetections
operations_mainجديدرأس الحجز في المحرك القديم (الساعات) — يربط العملية بساعاتها ونوعهاdoctor_id, the_date, operation_types_id, operation_hours, residence_hours, operations_rooms_id, residence_rooms_id, create_dateoperations_rooms، →residence_rooms، →detections، →awusers
doctors_reservesجديدسطر حجز لكل ساعة في غرفة عملية (المحرك القديم)doctor_id, operations_room_id, hour_text, the_date, operation_type, operation_main_idoperation_main_idoperations_main، operations_room_idoperations_rooms
residence_reservesجديدسطر حجز لكل ساعة في غرفة إقامة (المحرك القديم)doctor_id, residence_room_id, hour_text, the_date, operation_type, operation_main_idoperation_main_idoperations_main، residence_room_idresidence_rooms
operation_dataجديد«بورد» تفاصيل العملية المرتبط بالزيارة (طاقم تخدير/تمريض ونتائج)visit_id, deleted (+ أعمدة الطاقم — استنتاج)visit_idvisits
detections (موسّع)معروف+توسعةيُعاد استخدامه كـ «أنواع العمليات» عبر for_operation=1أضيف: for_operation, operation_time, residence_time, operations_rooms, cost_details, instructions, sortoperations_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_clinicres_room_noresidence_rooms، room_nooperations_rooms
floorsمعروفالطوابق (السادس/السابع/الثامن مستخدمة فعلياً)id, name, deletedمرجع لـ floor_no
clinic_rooms / clinic_reservesجديدغرف وحجوزات العيادات (تستخدمها قائمة اليوم لتوزيع الأقسام والطبيب الحالي)today_list, room_id, reserve_day_no, reserve_hour, doctor_id, is_activevisits.today_list_dept، →awusers

دورة حياة الحجز (محرك التقويم — الأحدث)

  1. تحميل التقويم: index() يجهّز غرف العمليات والإقامة وأنواع العمليات والأطباء (دور 13).
  2. الموارد: rooms() وresidenceRooms() تُرجعان قائمة الغرف كـ JSON resources مرتّبة بالطابق.
  3. الأحداث: events() يقرأ operations_rooms_cal ضمن نطاق تاريخ، ويلوّن الحدث حسب الطابق/VIP، ويكشف التعارض بفحص تقاطع الأوقات في نفس الغرفة (لون أحمر عند التعارض).
  4. اختيار المريض: searchPatients() بحث حي في patients بالاسم أو رقم الملف statusno.
  5. الحفظ: saveOperation() ينشئ صفاً واحداً في operations_rooms_cal يحمل غرفة العملية وغرفة الإقامة معاً مع أوقاتهما والتكلفة والتعليمات والطبيب والمساعد.
  6. التعديل/الحذف: getOperation()/updateOperation()/removeOperation() (حذف فعلي عبر R::trash).
  7. التعبئة التلقائية: getOperationTime() يجلب من نوع العملية مدّتها ومدّة الإقامة والتكلفة والتعليمات لملء النموذج.

دورة حياة الحجز (المحرك القديم — الساعات)

  1. index(): اختيار نوع العملية والتاريخ.
  2. search(): بناء شبكة ساعات (خانات نصف ساعة) لكل غرفة عملية ضمن طابقها؛ الأخضر متاح، الأحمر محجوز (موجود في doctors_reserves)، الرمادي خارج ساعات الغرفة.
  3. residence(): شبكة ساعات لغرف الإقامة بعد ساعة نهاية العملية مباشرة، مع فحص residence_reserves.
  4. reserve(): ينشئ رأساً في operations_main ثم سطراً لكل ساعة في doctors_reserves ولكل ساعة إقامة في residence_reserves مربوطة بـ operation_main_id.
  5. removeRoom(): تفريغ الساعات المحجوزة (R::trash).

الإشغال اللحظي والتقارير

التسعير

التسعير يُحمل من نوع العملية: detections.detectionval (التكلفة) مع cost_details النصية وoperation_time/residence_time (المدد). عند الحفظ في التقويم تُنسخ القيم إلى operations_rooms_cal.cost وcost_details. لا يوجد محرك فوترة مستقل داخل هذه الوحدة — التكلفة وصفية ومرتبطة بنوع العملية فقط (استنتاج).

ملاحظات أمنية وتقنية

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