يدير هذا الموديول كتالوج التحاليل المعملية والفحوصات (مصنّفة في فئات إكلينيكية مثل أمراض الدم، الكيمياء، الهرمونات، الفيروسات...)، وطلب التحاليل للمريضة أو الزوج من داخل شيتات متابعة الحمل وأمراض النساء والعقم، إضافة إلى شاشة فحوصات مرنة (Other Investigations) تتيح للطبيب تعريف أعمدة فحوصات خاصة وتسجيل قيمها لكل مريضة بنمط EAV، كما يتضمن آلية تصدير الملف الكامل للمريضة إلى ملفات Excel كنسخ احتياطية.
investcats) وبنود التحاليل (invests) مع ترتيب عرض مخصص (displayorder) عبر شاشة addinvestigation.php.favorite) لتظهر بشكل أسرع عند طلب التحاليل من الشيتات.ancsheetinvest لمتابعة الحمل، gynasheetinvest لأمراض النساء، infertilitysheetinvest للعقم) مع تحديد ما إذا كان التحليل للزوجة أم للزوج (forhusband) وطباعة أمر التحليل.investresult) يدوياً على مستوى كل أمر تحليل، وعرضها مجمّعة حسب التاريخ في الشيتات والتقارير المجمعة.investigation.php): تجميع وعرض وتحرير مباشر (inline AJAX) لفحوصات السائل المنوي والأشعة بالصبغة والموجات الصوتية والمنظار البطني والرحمي والرنين والهرمونات والباثولوجي (جداول موديول العقم).otherinvestigations) ثم إنشاء صف لكل مريضة بتاريخ معين (otherinvestigationsrows) وتخزين القيم بنمط سمة/قيمة (otherinvestigationsvalues).excel.php ومكتبة PHPExcel، مع قائمة انتظار للمرضى المطلوب تصديرهم (excelinfopatients).excelinfo يخزّن الرقم التسلسلي لتفعيل النسخة (يُفحص عند تسجيل الدخول) رغم أن اسمه يوحي بأنه خاص بالإكسل.| الجدول | الغرض | أهم الحقول | العلاقات |
|---|---|---|---|
investcats | فئات كتالوج التحاليل (22 فئة مزروعة: Hematology, Chemistry, Hormonal profile, Virology, Tumor markers, Genetics, Radiological, ANC booking...) ويُستخدم displayorder لتجميع الفئات في أعمدة شاشة طلب التحاليل. | id, name, displayorder, deleted | أب لجدول invests عبر investcatid |
invests | كتالوج بنود التحاليل نفسها (276 بنداً مزروعاً مثل CBC, FSH, AMH, HBs Ag, CA 125, Karyotyping...) مع إمكانية التفضيل والحذف المنطقي. | id, investcatid, name, favorite, deleted | investcats عبر investcatid؛ يُشار إليه من ancsheetinvest وgynasheetinvest وinfertilitysheetinvest عبر investid |
investigations | جدول قديم بأعمدة ثابتة لنتائج تحاليل حجز متابعة الحمل (Hb, Platelets, FBS, OGTT, HBsAg, HCV, CUA, Ferritin) بزوجي عمودين لكل تحليل: تاريخ (invesd*) ونتيجة (invest*). فارغ في النسخة الحالية ويُقرأ فقط في ancsheet00.php وCompletesreport.php. | id, ancsheetid, invesdhb/investhb, invesdplat/investplat, invesdogtt, invesdhbs, invesdhcv, invesdcua, invesdferr | شيت متابعة الحمل عبر ancsheetid (استنتاج) |
otherinvestigations | تعريفات الفحوصات المخصصة التي يضيفها الطبيب (تمثل أعمدة الشبكة الديناميكية في شاشة الفحوصات). | id, name, deleted | أب لجدول otherinvestigationsvalues عبر investid |
otherinvestigationsrows | صف فحوصات مخصصة لمريضة بتاريخ معين (رأس السجل في نمط EAV). | id, date, patientid, doctorid, deleted | patients عبر patientid؛ awusers عبر doctorid |
otherinvestigationsvalues | قيم الفحوصات المخصصة (تفاصيل نمط EAV): قيمة واحدة لكل تقاطع صفّ × تعريف فحص؛ تُنشأ تلقائياً لكل التعريفات عند إضافة صف جديد. | id, investrowid, investid, value, date | otherinvestigationsrows عبر investrowid؛ otherinvestigations عبر investid |
excelinfo | اسم مضلِّل: يخزّن الرقم التسلسلي لترخيص البرنامج (hash SHA-512 مرتبط بجهاز الخادم) وتاريخ التفعيل، ويُفحص في login.php عند الدخول والتفعيل. صف واحد فقط. | id, time, serial | لا علاقات (جدول إعدادات مستقل) |
excelinfopatients | قائمة انتظار للمرضى المطلوب توليد ملف Excel لهم؛ تُملأ من patienthistory.php وcompletereport.php وتُفرَّغ بالكامل (TRUNCATE) بعد كل تشغيل لـ excel.php. | id, patientid, statusno | patients عبر patientid؛ statusno منسوخ من patients.statusno ويحدد مجلد الحفظ |
addinvestigation.php) بإنشاء فئات التحاليل وبنودها، وتحريرها مباشرة عبر AJAX، وتمييز المفضلة، والحذف المنطقي (deleted = 1).displayorder (مكوّدة يدوياً: 1-2، 3، 4-5، 6-11، أكبر من 11) مع قائمة المفضلة، ويختار الطبيب التحاليل المطلوبة (checkboxes) ويحدد التاريخ وهل هي للزوجة أم للزوج.ancsheetinvest أو gynasheetinvest أو infertilitysheetinvest) حاملاً patientid وinvestid وdate وdoctorid وforhusband، ثم يُعرض أمر التحاليل للطباعة باسم المريضة أو الزوج.investresult لكل سجل، وتُعرض التحاليل مجمّعة حسب التاريخ (زوجة/زوج) داخل الشيت وفي التقرير المجمع (completereport.php) الذي يجلب اسم التحليل من الكتالوج invests.investigation.php?patientid=...) تعرض لكل مريضة جداول السائل المنوي وHSG وUS/TVS والمنظارين وMRI/CT والهرمونات والباثولوجي، وتُنشئ تلقائياً صفاً فارغاً بتاريخ اليوم إن لم يوجد، مع تحرير أي خلية مباشرة عبر update().otherinvestsAdd) ينشئ عموداً جديداً، وإضافة صف للمريضة (otherinvestsRow) ينشئ سجلاً في otherinvestigationsrows وقيماً فارغة في otherinvestigationsvalues لكل تعريف نشط داخل معاملة واحدة، ثم تُملأ القيم بالتحرير المباشر.patienthistory.php أو completereport.php تُضاف المريضة تلقائياً إلى قائمة excelinfopatients إن لم تكن موجودة.excel.php (يُشغَّل مباشرة، على الأرجح بمجدولة cron - استنتاج) فيقرأ القائمة، ويفرّغها، ويبني لكل مريضة جدول HTML شاملاً (تاريخ مرضي، فحص، تحاليل، زيارات، متابعة حمل) ويحوّله إلى ملف .xlsx منسّق يُحفظ في excel_backups/{statusno}/{date}.xlsx.otherinvestigationsrows.patientid وexcelinfopatients.patientid وكذلك patientid في جميع جداول أوامر التحاليل الفرعية، وstatusno المنسوخ من patients.statusno.ancsheetinvest.investid → invests.id وancsheetinvest.ancsheetid → شيت متابعة الحمل، وinvestigations.ancsheetid (الجدول القديم)، وكذلك mainantenentalinvest.gynasheetinvest.investid → invests.id إضافة إلى gynainvestigation وfollowupinvest التابعة لموديولات المتابعة.infertilitysheetinvest.investid → invests.id، وشاشة investigation.php تعرض وتحرر جداول موديول العقم (semen, hsg, ustv, laparoscopy, hysteroscopy, mrict, hormon, pathology).doctorid في otherinvestigationsrows وجميع جداول أوامر التحاليل لإظهار اسم الطبيب الطالب.mointoringsheetinvestigation يتبع نفس النمط ويرجع للكتالوج ذاته (استنتاج من تشابه البنية).excelinfo مضلِّل تماماً: هو مخزن ترخيص/تفعيل البرنامج (serial SHA-512) وليس له علاقة بالإكسل، وقد أُدرج عمداً ضمن الجداول المحمية من الحذف في setup.php.investigations قديم (legacy) بأعمدة ثابتة مكررة لكل تحليل (زوج تاريخ/نتيجة)، فارغ من البيانات، وقد حلّ محله نمط ancsheetinvest المرتبط بالكتالوج؛ كما يُستعلم عنه في Completesreport.php بمعرّف شيت IVF أحياناً (خلط محتمل في المعرّفات).ancsheetinvest, gynasheetinvest, infertilitysheetinvest) تختلف فقط في سياق الشيت.displayorder (1-2 / 3 / 4-5 / 6-11 / >11 / 0 / -1) ومكرر في أكثر من كنترولر (ancsheet00.php, antenalvisit.php...).investigation.php::update() وaddinvestigation.php::update(): استقبال اسم الجدول واسم العمود من الطلب مباشرة (tableName/colName) ما يسمح بالكتابة في أي جدول؛ كما يُدمج doctorid في نصوص SQL بدون ربط معاملات.investcatid = 0 لا تنتمي لأي فئة).investigation.php تُنشئ تلقائياً صفوفاً فارغة في 7 جداول عند أول فتح للملف، ما يولّد بيانات وهمية (سجلات بلا قيم) بمرور الوقت.excel.php سكريبت إجرائي بلا فئة كنترولر ولا تحقق من الصلاحيات، يعتمد مكتبة PHPExcel المهجورة، ويستخدم مواضع صفوف مكوَّدة يدوياً للتنسيق ما يجعله هشاً لأي تغيير في البنية، ويسمّي الملفات بتاريخ اليوم فقط (الكتابة فوق التصدير السابق لنفس اليوم).otherinvestigationsvalues يخزّن كل القيم كنص حر (varchar) دون وحدات قياس أو مدى مرجعي أو نوع بيانات.LabTestCategory (من investcats) وLabTest (من invests) مع مفاتيح أجنبية حقيقية، وإضافة حقول ناقصة إكلينيكياً (كود التحليل، الوحدة، المدى المرجعي، نوع النتيجة) وتنظيف السجلات التجريبية والفارغة قبل الترحيل.ancsheetinvest, gynasheetinvest, infertilitysheetinvest ومثيلاتها) في نموذج واحد LabOrder + LabOrderItem بعلاقة polymorphic (orderable_type/orderable_id) نحو الزيارة أو الشيت، مع حقول patient_id, doctor_id, ordered_for (wife/husband), result, result_date.investigations القديم نهائياً (فارغ ومهجور) بعد التأكد من خلوّه في قاعدة الإنتاج، وترحيل أي بيانات تاريخية محتملة إلى LabOrderItem.CustomInvestigation (تعريف) وCustomInvestigationResult مع التحقق من نوع القيمة، أو دمجها كلياً في الكتالوج الموحد كفحوصات يعرّفها المستخدم بدلاً من نظام موازٍ.displayorder ونطاقاته الثابتة) بحقل ترتيب صريح وتجميع قابل للتهيئة من واجهة الإدارة في Angular.excelinfo (الترخيص) لأنها خاصة بالنسخة المكتبية القديمة، والاستعاضة عنها بإدارة الاشتراكات/التفعيل في الـ ERP إن لزم.excelinfopatients وسكريبت excel.php بنظام Jobs/Queues في Laravel مع مكتبة حديثة (Laravel Excel / PhpSpreadsheet) أو تقارير PDF، وتسجيل حالة كل عملية تصدير بدلاً من TRUNCATE.