⚙️

النظام والصلاحيات والإعدادات (Platform, Auth, Roles & Settings)

هذا الموديول هو البنية التحتية للنظام بالكامل (إطار العمل المخصص "aw framework"): تسجيل دخول المستخدمين عبر مكتبة Login مدمجة، ومنظومة صلاحيات على أربعة مستويات (الدور ← الكنترولر ← الإجراء ← زر الواجهة، إضافةً إلى إظهار/إخفاء عناصر القائمة الجانبية لكل دور)، وسجل إعدادات البرنامج المركزي الذي يتحكم في معظم خصائص الشاشات الطبية والطباعة والترقيم، إلى جانب بنية الفروع والطوابق والأجهزة (غير مفعّلة عملياً)، وشاشة الانتظار للعرض في الاستقبال، وواجهة برمجية (API) لتطبيق موبايل للمريضات، وصفحات المساعدة، وعدد من الجداول التجريبية المهملة.

22جدول
12كنترولر
14علاقة رئيسية

الوظائف الرئيسية

الجداول وبنية البيانات (Data Models)

الجدولالغرضأهم الحقولالعلاقات
awcontrollسجل الكنترولرات الخاضعة لنظام الصلاحيات (81 صفاً مزروعاً يغطي كل شاشات النظام)id, label, nameأب لـ awcontrollprop عبر awcontroll_id
awcontrollpropالإجراءات (actions) المتاحة لكل كنترولر مع قيمة سماح افتراضية (index, addit, show, edit, updateit, del...)id, proplabel, checkval, awcontroll_idawcontroll عبر awcontroll_id
awmenuشجرة القائمة الجانبية (102 عنصر) بمستويين مع الترتيب والأيقونات ووضع العرض المبسّط/الكاملlabel, link, parent, sort, icon, form, withpatientذاتية عبر parent؛ awrolemenu عبر menu_id
awroleالأدوار الوظيفية (Management, pharmacist, reception, doctors, rays, assistants...)id, nameأب لجداول الصلاحيات والمستخدمين عبر role_id
awrolebtnصلاحيات أزرار الواجهة لكل دور؛ أربعة أزرار مثبّتة بالكود (1 إضافة مريضة، 2 إضافة زيارة، 3 تعديل زيارة، 4 حذف زيارة)role_id, btn_id, checkvalawrole عبر role_id
awrolecontrollpropمصفوفة منح/منع كل إجراء لكل دور (نحو 3000 صف)role_id, controllprop_id, checkvalawrole عبر role_id، awcontrollprop عبر controllprop_id
awrolemenuإظهار/إخفاء عناصر القائمة الجانبية لكل دورrole_id, menu_id, checkvalawrole عبر role_id، awmenu عبر menu_id
awrolepositionالوظائف داخل الدور (مثل: Council Head, Sonographer, Supervisor)id, roleid, nameawrole عبر roleid؛ awusers عبر positionid
awrolespecializeالتخصصات داخل الدور (Anasthests, operation للأطباء والمساعدين)id, roleid, nameawrole عبر roleid؛ awusers عبر specialid
awusersحسابات الموظفين: بيانات الدخول والتفعيل واستعادة كلمة المرور ومحاولات الدخول الفاشلة والدور والفرعuser_id, user_name, user_password_hash, role_id, specialid, positionid, branch_id, attendawrole عبر role_id؛ branches عبر branch_id (استنتاج، القيمة "-1" تعني كل الفروع)
programesettingسجل الإعدادات المركزي الوحيد (~75 عموداً): هوية المركز، الطباعة، مفاتيح تفعيل الخصائص، أقسام التاريخ المرضي، عدّادات الإيصالات، ربط ERP، بيانات بريد بنص صريحcentername, simpleview, erpdb, erpdbsave, serial_month, last_serial, last_refund_serial, branches, email, passwordقاعدة ERP خارجية عبر erpdb/erpdbsave
branchesفروع المركز — جدول فارغ وملف الكنترولر Branches.php غير موجود رغم تسجيله في القائمة والصلاحياتid, name, created_at, updated_atawusers عبر branch_id (استنتاج)
floorsطوابق المبنى — فارغ وغير مستخدم في الكودid, name, deleted, default_valuedevices عبر floor_no (استنتاج)
devicesالأجهزة/الغرف داخل الطوابق — فارغ، الكنترولر adddevices مسجّل في awcontroll لكن الملف غير موجودdevice_name, location, floor_no, deletedfloors عبر floor_no
device_trackingتتبّع حركة المريضة بين الأجهزة بإشارة متعددة الأشكال (polymorphic) لأي سجل سريري — ميزة مخطَّطة غير منفَّذة (استنتاج)patient_id, device_id, target_id, target_table, visit_date, visit_time, user_idpatients عبر patient_id، devices عبر device_id، awusers عبر user_id
messagesرسائل داخلية بين المستخدمين — فارغ ولا يوجد كود يستخدمه (دردشة المريضات تتم عبر جدول chat في موديول آخر)message, sender_id, receiver_id, created_atawusers عبر sender_id وreceiver_id
screen_sliderصور العرض الدوّار على شاشة الانتظار في الاستقبالid, image, create_dateتُقرأ في تطبيق screen/ مع جدولي visits وpatients
helpمقالات المساعدة داخل النظام مع حذف ناعمname, content, tempdeleteلا علاقات
table2جدول تجريبي مهمل — فارغ بلا أي استخدامid, name2لا علاقات
table3جدول تجريبي مهمل — فارغ بلا أي استخدامid, nameلا علاقات
tablenameبقايا قالب إنشاء جداول — فارغ ومهملid, delلا علاقات
testtbl1جدول اختبار مهمل — فارغid, name2لا علاقات
testtbl2جدول اختبار مهمل — فارغid, nameلا علاقات

سير العمل (Workflow)

  1. يفتح المستخدم login.php فتتحقق مكتبة Login من اسم المستخدم وكلمة المرور في awusers (bcrypt) وتكتب في الجلسة user_id وrole_id، مع إيقاف مؤقت بعد ثلاث محاولات فاشلة وخيار "تذكرني" بكوكي مؤمَّن.
  2. عند فتح أي شاشة، يستدعي الكنترولر autho::checkautho() للتأكد من تسجيل الدخول ثم autho::checkauthoize() التي تبحث عن الكنترولر في awcontroll والإجراء في awcontrollprop ثم قرار الدور في awrolecontrollprop، وعند الرفض يُحوَّل المستخدم إلى صفحة خطأ الصلاحية.
  3. تُبنى القائمة الجانبية من awmenu تكرارياً حسب parent وsort، مع تصفية حسب وضع العرض (programesetting.simpleview مقابل awmenu.form) وصلاحية الدور في awrolemenu، وإلحاق رقم المريضة الحالية بالروابط الموسومة withpatient.
  4. ينشئ مدير النظام دوراً جديداً في _role.php ثم يضبط مصفوفته: عناصر القائمة (إظهار/إخفاء)، وكل إجراء لكل كنترولر (سماح/منع)، والأزرار السريرية الأربعة في awrolebtn التي تُنشأ تلقائياً عند أول فتح.
  5. يضيف المدير المستخدمين في _member.php: فحص فوري لتفرّد اسم المستخدم، ثم إدراج مباشر في awusers مع الدور والوظيفة والتخصص المحمّلَين حسب الدور المختار.
  6. يضبط المدير إعدادات البرنامج في programesetting.php (شعار وخلفية وهوامش طباعة ومفاتيح تفعيل أقسام الملف الطبي...) فتُحدَّث الصف الوحيد رقم 1 الذي تقرأه كل الشاشات السريرية.
  7. من شاشة setup.php (كلمة مرور ثابتة 123456) يُربط النظام بقاعدة بيانات ERP خارجية وتُختار الخزينة الافتراضية من جدول save فيها، وتوجد أيضاً أداة تفريغ شامل للجداول للبدء من جديد.
  8. تعمل شاشة الانتظار screen/controllers/index.php دون تسجيل دخول: تعرض صور screen_slider واسم المريضة المُنادى عليها (زيارة اليوم ذات view=1 وend_visit=0) وقائمة الخمس التاليات، وتُحدَّث عبر AJAX من loadInfo.
  9. تطبيق الموبايل يستدعي mobileservices.php مباشرة (دون مصادقة): تسجيل مريضة، دخول بالموبايل وكلمة المرور، حجز زيارة (كشف/سونار/إعادة)، عرض الروشتات من gynadrugs وdrugs، وقراءة الدردشة، مع مزامنة بيانات العميلة مع نظام ERP عبر curl ومفتاح API مثبّت بالكود.

الارتباط بالموديولات الأخرى

ملاحظات فنية

توصيات النقل إلى ERP