يغطي هذا الموديول تسجيل الفحص العام للمريضة (الوزن، الطول، مؤشر كتلة الجسم، ضغط الدم، النبض، سكر الدم العشوائي) مع نتائج الفحص لكل جهاز من أجهزة الجسم (الرأس والرقبة، الصدر والقلب، البطن، الحوض، الأطراف)، بالإضافة إلى قوائم نتائج الفحص الموضعي والعام (الثدي، الشعرانية، الغدة الدرقية)، ومحرك أسئلة وأجوبة قابل للتهيئة للتاريخ المرضي الحالي (Present History)، وكتالوجَي التشخيصات لعيادتي النساء ومتابعة الحمل.
awusers.addNewRow)، ثم تعبئة كل خلية على حدة بالحفظ التلقائي الفوري (Inline AJAX update) دون زر حفظ.b_p وbp2).head, chest, abdomen, pelvis, extremitis) في جدول programesetting.addexitem) مع ربطها فورًا بسجل الفحص الجاري.del.presenthistoryquestions) وإجاباتها (presenthistoryanswers) من شاشة إعداد مستقلة، مع ترتيب عرض الأسئلة (displayorder) وتمييز إجابات مفضلة (favorite).gynaph) مع إمكانية الطباعة والاستعراض حسب التاريخ.diagnosis) وآخر لزيارات متابعة الحمل (diagnosisant)، مع اختيار متعدد يُخزن كقائمة مفصولة بفواصل في حقل الزيارة، وإضافة تشخيص جديد أثناء الزيارة.infertilitysheet.generalanasthesa) كمستوى فرعي تابع لنوع التخدير (anasthesa) ويُستخدم في شاشة تفاصيل العمليات.| الجدول | الغرض | أهم الحقول | العلاقات |
|---|---|---|---|
examination | سجل الفحص العام للمريضة (علامات حيوية + ملخص فحص الأجهزة) | patientid, doctorid, examinationdate, weight, height, bmi, b_p, bp2, pulse, rgb, headandneck, chestandheart, abdomen, pelvis, extremitis, del | patients عبر patientid، awusers عبر doctorid |
examinationhead | قائمة نتائج فحص الرأس والرقبة | id, name, del | examination عبر headandneck (استنتاج: يُخزن المعرف أو النص) |
examinationchest | قائمة نتائج فحص الصدر والقلب | id, name, del | examination عبر chestandheart |
examinationabdomen | قائمة نتائج فحص البطن | id, name, del | examination عبر abdomen |
examinationpelvis | قائمة نتائج فحص الحوض | id, name, del | examination عبر pelvis |
examinationextremitis | قائمة نتائج فحص الأطراف | id, name, del | examination عبر extremitis |
examinationlocalse | قائمة نتائج الفحص الموضعي (النسائي) — اختيار متعدد | id, title, del | infertilitysheet عبر examinationlocalse (قائمة معرفات بفواصل) |
generalbreast | قائمة نتائج فحص الثدي — اختيار متعدد | id, title, del | infertilitysheet عبر generalbreast (قائمة معرفات بفواصل) |
generalhirsutism | قائمة درجات الشعرانية (Hirsutism) | id, title, del | infertilitysheet عبر generalhirsutism |
generalthyroid | قائمة نتائج فحص الغدة الدرقية | id, title, del | infertilitysheet عبر generalthyroid |
generalanasthesa | تفاصيل/أنواع فرعية للتخدير العام تابعة لنوع التخدير الرئيسي | id, name, anasthesaid, del | anasthesa عبر anasthesaid، operativedetails عبر anasthesaid (موديول العمليات) |
diagnosis | كتالوج تشخيصات زيارات النساء (الجيناكولوجي) | id, name, conditions (يُستخدم كحذف منطقي), title, del | gyna عبر diagnosisid (قائمة معرفات بفواصل) |
diagnosisant | كتالوج تشخيصات زيارات متابعة الحمل (Antenatal) | id, name, conditions (حذف منطقي) | antenalvisit عبر diagnosisid (قائمة معرفات بفواصل) |
presenthistoryquestions | بنك أسئلة التاريخ المرضي الحالي (فئات) | id, name, displayorder, deleted | presenthistoryanswers عبر presenthistorycatid، gynaph عبر catid |
presenthistoryanswers | الإجابات المعرفة مسبقًا لكل سؤال تاريخ مرضي | id, presenthistorycatid, name, favorite, deleted | presenthistoryquestions عبر presenthistorycatid، gynaph عبر answerid |
examination.php?ac=index)؛ تُعرض جميع سجلات الفحص السابقة (غير المحذوفة) مرتبة بالتاريخ تنازليًا مع اسم الطبيب لكل سجل.programesetting؛ فإذا كان علم الجهاز (رأس/صدر/بطن/حوض/أطراف) لا يساوي 1 تُحمَّل قائمته المنسدلة من جدول اللوكب المقابل، وإلا يظهر حقل نص حر.addNewRow) بتاريخ اليوم ومعرف الطبيب من الجلسة، ويُعاد جزء HTML للصف الجديد.update العامة التي تستقبل اسم الجدول والعمود والقيمة من الواجهة، ويُحسب الـ BMI تلقائيًا في المتصفح.addexitem)؛ تُدرج في جدول اللوكب ثم يُحدَّث عمود سجل الفحص بمعرف القيمة الجديدة.del = 1 (delData).addpresenthistory.php يُدير المسؤول أسئلة التاريخ المرضي الحالي وإجاباتها: إضافة سؤال (يأخذ ترتيب عرض تاليًا تلقائيًا)، إضافة إجابات لكل سؤال، تمييز مفضلة، وحذف منطقي.gyna.php) تُعرض الأسئلة في أعمدة حسب displayorder (مجموعات 1-3، 4-6، 7-9، 10-12، أكبر من 12، وصفر = أخرى)، وتُحفظ الإجابات المختارة لكل تاريخ في جدول gynaph مع معرف المريضة والطبيب، مع إمكانية الطباعة والحذف حسب التاريخ.diagnosis فتُخزن معرفاتها كنص مفصول بفواصل في gyna.diagnosisid؛ وبنفس الآلية تُخزن تشخيصات diagnosisant في antenalvisit.diagnosisid لزيارات الحمل، مع إمكانية إضافة تشخيص جديد للكتالوج أثناء الزيارة.generalbreast وgeneralhirsutism وgeneralthyroid وexaminationlocalse وتُخزن في أعمدة جدول infertilitysheet، وتُفك ترميزها عند طباعة التقارير الكاملة (sh.php, Completesreport.php).examination.patientid → patients.id.examination.doctorid → awusers.user_id، مع فحص الصلاحيات عبر role_id في الجلسة.programesetting.head/chest/abdomen/pelvis/extremitis تتحكم في إظهار القوائم المنسدلة مقابل النص الحر.gyna.diagnosisid → معرفات diagnosis (CSV)، وgynaph.catid/answerid → presenthistoryquestions/presenthistoryanswers.antenalvisit.diagnosisid → معرفات diagnosisant (CSV).infertilitysheet.generalbreast/generalhirsutism/generalthyroid/examinationlocalse → جداول اللوكب المقابلة.generalanasthesa.anasthesaid → anasthesa.id، وتُستهلك في operativedetails.php.sh.php وCompletesreport.php وcombinedreport.php تفك ترميز معرفات الفحص والتشخيص للطباعة.setup.php يصنف diagnosis وdiagnosisant ضمن الجداول المسموح تفريغها، بينما generalanasthesa محمي من الحذف.examination.patientid من نوع varchar(191) بينما patients.id رقمي — عدم تطابق أنواع.varchar بلا أي تحقق من الصحة.examination تخزن محتوى مختلطًا: نصًا حرًا أحيانًا ومعرف لوكب رقميًا أحيانًا أخرى (دالة addexitem تكتب المعرف في نفس العمود النصي) — خطر جسيم على جودة البيانات عند الترحيل.conditions في diagnosis/diagnosisant يُستخدم فعليًا كعلم حذف منطقي (1 = محذوف) رغم اسمه المضلل، إلى جانب وجود عمود del آخر غير مستخدم في diagnosis.examination::update() لا تتضمن أي فحص لتسجيل الدخول أو الصلاحيات، وتقبل اسم الجدول والعمود مباشرة من طلب POST — ثغرة تتيح تعديل أي جدول/عمود (Mass Assignment). كذلك delData وaddexitem يقبلان اسم الجدول من العميل.sh.php وCompletesreport.php تبني استعلامات SQL بدمج نصي مباشر (id in (0$var)) — سطح هجوم لحقن SQL.gynaph (إجابات التاريخ المرضي الفعلية للمريضات) غير موجود في ملف الـ SQL Dump رغم استخدامه في الكود — يُنشأ غالبًا وقت التشغيل بواسطة RedBeanPHP في الوضع المرن (استنتاج).AUTO_INCREMENT=1)؛ المفردات السريرية الفعلية موجودة فقط في قاعدة بيانات الإنتاج.gyna.php اعتمادًا على قيم displayorder.diagnosis وdiagnosisant متطابقا البنية تقريبًا ومفترقان فقط حسب نوع العيادة.ClinicalExamination (جدول clinical_examinations) بمفاتيح أجنبية حقيقية patient_id وdoctor_id، وأنواع صحيحة: decimal للوزن والطول والـ BMI، أعمدة systolic/diastolic/pulse أعدادًا صحيحة، وdate لتاريخ الفحص، مع SoftDeletes.examinationlocalse وgeneralbreast وgeneralhirsutism وgeneralthyroid في جدول موحد examination_finding_options بعمود تمييز body_system (head_neck, chest_heart, abdomen, pelvis, extremities, local, breast, hirsutism, thyroid) بدلًا من تسعة جداول متطابقة البنية.examination_findings (examination_id, body_system, finding_option_id قابل للفراغ, free_text قابل للفراغ) لفصل النص الحر عن المعرفات، مع سكربت ترحيل ينظف المحتوى المختلط الحالي (رقم = معرف لوكب، غير ذلك = نص حر).diagnosis وdiagnosisant في كتالوج واحد diagnoses بعمود specialty (gyna/antenatal)، واستبدال أعمدة CSV بجدول وسيط visit_diagnosis (morph أو visit_id + diagnosis_id)، مع التفكير في إسناد التشخيصات إلى ترميز ICD-10 مستقبلًا.HistoryQuestion وHistoryAnswerOption (مع is_favorite) وPatientHistoryAnswer (يحل محل gynaph) بمفاتيح أجنبية لـ patient_id وvisit_date وdoctor_id، واستبدال منطق التجميع المكتوب صراحة بعمود display_group صريح.AnesthesiaType وAnesthesiaSubtype (يحل محل anasthesa وgeneralanasthesa) بعلاقة belongsTo صريحة، ويُستهلك من موديول العمليات.deleted_at (Laravel SoftDeletes) بدلًا من الأعلام الثلاثة المتضاربة del وdeleted وconditions.