يغطي هذا الموديول الجانب الذكوري من تقييم العقم في العيادة: تسجيل تحاليل السائل المنوي (العدد، الحركة، الأشكال الطبيعية، الحيوية... إلخ)، والفحوصات الأندرولوجية المتقدمة (الموجات فوق الصوتية على كيس الصفن، الخريطة الكروموسومية Karyotyping، حذف كروموسوم Y الدقيق، تفتت الحمض النووي للحيوانات المنوية SDF، عينة الخصية TESE)، إضافة إلى ملفات الهرمونات للزوج والزوجة. تُسجَّل البيانات من مسارين متوازيين: شاشة الفحوصات العامة للمريض (جدولا semen وhormon) وشيت العقم المفصّل (جداول semeninfertility وsemen2 وhormonalprofile/hormonalprofile2).
count، الحركة التقدمية motilitya/motilityab، الأشكال الطبيعية normal، خلايا الصديد puscell، مع أعلام تصنيفية (Oligo / Astheno / Terato / Normal) كمربعات اختيار.nc (العدد)، prm (الحركة التقدمية)، tm (الحركة الكلية)، af (الأشكال غير الطبيعية)، vit (الحيوية)، vol (الحجم)، tzi، sdi.hormonalprofile2) يضم AMH وTSH وP4 (للزوجة — استنتاج).hormon): LH، FSH، PRL، E2، AMH، Free/Total Testosterone، P4، TSH، T3، T4، DHT، BhCG، Inhibin B، DHEAS، إضافة إلى دلالات أورام (CA125، CEA، LDH).ssemen/sseemen/sseemmen/sseemmeen بجدول ivfsheet.sh.php) مع فك ترميز القوائم المرجعية وطباعة الشيت.semen وhormon عبر العمود del، وحذف فعلي لصفوف شيت العقم.| الجدول | الغرض | أهم الحقول | العلاقات |
|---|---|---|---|
semen | تحليل سائل منوي سريع لكل مريض من شاشة الفحوصات، مع تصنيف الحالة (Oligo/Astheno/Terato/Normal) | sdate, patientid, count, motilitya, motilityab, normal, puscell, normaltype, oligo, astheno, tetrato, doctorid, del | patients عبر patientid، awusers عبر doctorid |
semeninfertility | صفوف تحاليل السائل المنوي داخل شيت العقم (معايير WHO) | infertilitysheetid, semenplace, sementype, date, nc, prm, tm, af, vit, vol, tzi, sdi | infertilitysheet عبر infertilitysheetid، semenplace عبر semenplace، sementype عبر sementype |
semen2 | الفحوصات الأندرولوجية المتقدمة لكل شيت عقم: سونار الصفن، TRUE، Karyotype، Yq Micro، SDF، Semen Fr، TESE — تاريخ ومكان ونتيجة لكل فحص (جدول عريض) | infertilitysheetid, detescrotal/placescrotal/semen2resultscrotal, detekaryo/semen2resultkaryo, deteyqmicro/semen2resultyqmicro, detesdf/semen2resultsdf, detetese/semen2placetese/resulttese, detesemenfr/semen2placesemenfr/resultsemenfraf/resultsemenfrm/resultsemenfrc, deteother/placeother/resultother | infertilitysheet عبر infertilitysheetid، وسبعة جداول lookup عبر أعمدة semen2result* وsemen2place* (نتيجة السونار قيم متعددة مفصولة بفواصل) |
semenplace | قائمة مرجعية: أماكن/معامل إجراء تحليل السائل المنوي (تُملأ من المستخدم — فارغة في النسخة) | id, title, del | تُقرأ من semeninfertility.semenplace |
sementype | قائمة مرجعية: أنواع تحليل السائل المنوي | id, title, del | تُقرأ من semeninfertility.sementype |
semen2placesemenfr | قائمة مرجعية: مكان إجراء فحص Semen Fr | id, title, del | تُقرأ من semen2.semen2placesemenfr |
semen2placetese | قائمة مرجعية: مكان إجراء عينة الخصية TESE | id, title, del | تُقرأ من semen2.semen2placetese |
semen2resultkaryo | قائمة مرجعية: نتائج الخريطة الكروموسومية Karyotyping | id, title, del | تُقرأ من semen2.semen2resultkaryo |
semen2resultscrotal | قائمة مرجعية: نتائج سونار كيس الصفن (اختيار متعدد) | id, title, del | تُقرأ من semen2.semen2resultscrotal (CSV) |
semen2resultsdf | قائمة مرجعية: نتائج فحص تفتت DNA الحيوانات المنوية SDF | id, title, del | تُقرأ من semen2.semen2resultsdf |
semen2resulttrue | قائمة مرجعية: نتائج فحص TRUE (استنتاج: TRUS سونار عبر المستقيم) | id, title, del | تُقرأ من semen2.semen2resulttrue |
semen2resultyqmicro | قائمة مرجعية: نتائج فحص حذف كروموسوم Y الدقيق | id, title, del | تُقرأ من semen2.semen2resultyqmicro |
ssemen | قائمة مرجعية لأول قائمة منسدلة بعمود "Semen" في جدول دورة IVF (اسم جدول مشوّه إملائيًا) | id, title, del | تُقرأ من ivfsheet.ssemen |
sseemen | قائمة مرجعية للقائمة الثانية بعمود "Semen" في شيت IVF | id, title, del | تُقرأ من ivfsheet.sseemen |
sseemmen | جدول يتيم غير مستخدم: العمود ivfsheet.sseemmen يقرأ خياراته فعليًا من جدول icsisemen وليس من هذا الجدول | id, title, del | لا توجد قراءة من الكود (مرشّح للحذف) |
sseemmeen | قائمة مرجعية للقائمة الرابعة بعمود "Semen" في شيت IVF | id, title, del | تُقرأ من ivfsheet.sseemmeen |
hormon | لوحة هرمونات معملية شاملة لكل مريض من شاشة الفحوصات، تشمل هرمونات الخصوبة ودلالات الأورام | sdate, patientid, lh, fsh, prl, etwo, amh, freet, totalt, pfour, tsh, tthree, tfour, dht, bhcg, inhibinb, asd, dheas, ca125, cea, ldh, doctorid, del | patients عبر patientid، awusers عبر doctorid |
hormonalprofile | الملف الهرموني للزوج داخل شيت العقم: FSH، LH، TT، PRL، E2، Inhibin + خانتان إضافيتان (تاريخ/نتيجة لكل هرمون) | infertilitysheetid, datefsh/resultfsh, datelh/resultlh, datett/resulttt, dateprl/resultprl, datee2/resulte2, dateinhibin/resultinhibin, dateother/resultother | infertilitysheet عبر infertilitysheetid |
hormonalprofile2 | الملف الهرموني الثاني بشيت العقم ويضم AMH وTSH وP4 (للزوجة — استنتاج) | infertilitysheetid, date, dateamh/resultamh, datetsh/resulttsh, datefsh/resultfsh, datelh/resultlh, datee2/resulte2, datep4/resultp4, dateprl/resultprl, dateother/resultother | infertilitysheet عبر infertilitysheetid |
investigation.php) لمريض محدد؛ إذا لم يوجد سجل سائل منوي، يُنشئ النظام تلقائيًا صفًا فارغًا في semen بتاريخ اليوم ومعرّف الطبيب الحالي.update العامة التي تستقبل اسم الجدول والعمود والقيمة)، وتُضاف صفوف جديدة بزر "Add" (دالة addRow العامة لجداول semen وhormon وغيرها)، ويتم الحذف منطقيًا بوضع del = 1.infertilitysheet.php) فيُنشأ infertilitysheet تلقائيًا للمريض إن لم يوجد، وتُحمَّل صفوف semeninfertility وsemen2 وhormonalprofile وhormonalprofile2 المرتبطة به.append العامة التي تُنشئ صفًا بربط infertilitysheetid)، ثم يملأ الخلايا التي تُحفظ فورًا حقلًا بحقل.getselectajax تُدخل سطرًا جديدًا في جدول الـ lookup المعني)؛ نتيجة سونار الصفن تُحفظ كقائمة معرّفات مفصولة بفواصل.ivfsheet.php) يسجّل الطبيب خصائص العينة المنوية المستخدمة في الدورة من أربع قوائم منسدلة تُخزَّن قيمها في أعمدة ssemen/sseemen/sseemmen/sseemmeen بجدول ivfsheet.sh.php الشيت كاملًا للقراءة: يجلب صفوف السائل المنوي والفحوصات الأندرولوجية والملفات الهرمونية ويفك ترميز كل القوائم المرجعية إلى نصوصها، ويسجّل آخر زيارة للمريض في lastvisit.completereport.php وfullreport.php وغيرها) ضمن التقرير الشامل للمريضة.semen.patientid وhormon.patientid وكذلك infertilitysheet.patientid الذي تتفرع منه بقية الجداول.semeninfertility وsemen2 وhormonalprofile وhormonalprofile2 كلها أبناء لـ infertilitysheet عبر infertilitysheetid.ivfsheet.ssemen وsseemen وsseemmen وsseemmeen تشير إلى جداول الـ lookup الخاصة بهذا الموديول إضافة إلى جدول icsisemen التابع لموديول IVF.semen.doctorid وhormon.doctorid إلى awusers.user_id (يُعرض اسم الطبيب مع كل سجل).semen وhormon يُعرضان في نفس شاشة الفحوصات مع HSG والباثولوجي والفحوصات الأخرى، ويتحكم إعداد programesetting.investshow في شكل الشاشة.drugsex.php المرتبط بالموديول هو في الواقع إدارة كتالوج الأدوية (drugs) المستخدم في الروشتات، وليس له علاقة مباشرة بجداول السائل المنوي.sh.php يسجّل فتح الشيت في جدول lastvisit.semen.patientid معرّف نصي varchar(191) بينما معرف المريض رقمي.varchar(191) (حتى تواريخ الفحوصات ونتائج الهرمونات)، ما يمنع أي تحقق أو حسابات أو فرز زمني سليم.ssemen/sseemen/sseemmen/sseemmeen ليست نسخًا مكررة من بعضها: ثلاثة منها قوائم مرجعية مستخدمة فعليًا لأعمدة "Semen" بشيت IVF، بينما sseemmen جدول يتيم لا يقرأه الكود إطلاقًا (القائمة المقابلة تقرأ من icsisemen)."id in (0$ids)" — نمط هش وقابل لحقن SQL.update وappend وgetselectajax تستقبل اسم الجدول والعمود من طلب POST مباشرة دون قائمة سماح — ثغرة Mass Assignment/كتابة في أي جدول.infertilitysheet00.php يستعلم جدول semen بشرط infertilitysheetid = ? رغم أن الجدول لا يحتوي هذا العمود أصلًا — كود قديم ميت يعكس تغيّر التصميم.semen فارغًا إذا لم يوجد، ما يولّد سجلات فارغة غير ذات معنى في قاعدة البيانات.hormon يخلط هرمونات الخصوبة بدلالات الأورام (CA125، CEA، LDH) في صف واحد عريض.drugsex.php اسم مضلِّل (إدارة كتالوج الأدوية)، ويحتوي استعلامات DataTables مبنية بدمج نصوص مع LIKE '%...%' مباشرة من المدخلات — قابلية حقن SQL.semen2 "عريض" (wide table): لكل فحص ثلاث أو أربع أعمدة (تاريخ/مكان/نتيجة) بدلًا من نمذجة الفحوصات كصفوف.SemenAnalysis موحّد يدمج semen وsemeninfertility في جدول واحد بأعمدة رقمية مُنمَّطة (volume، concentration، progressive_motility، total_motility، normal_forms، vitality، tzi، sdi، pus_cells) مع patient_id إلزامي وinfertility_sheet_id اختياري، وأعلام التصنيف (oligo/astheno/terato) كحقول boolean أو يُستغنى عنها بالحساب من القيم.semen2 العريض إلى موديل AndrologyInvestigation بصيغة طولية: صف لكل فحص بأعمدة type (scrotal_us, trus, karyotype, y_microdeletion, sdf, semen_fr, tese, other) وperformed_at وplace وresult، مع جدول pivot لنتائج السونار متعددة القيم بدل السلاسل المفصولة بفواصل.semen2result* وsemen2place*) في جدولين مرجعيين عامين: andrology_result_options وlab_places مع عمود تمييز investigation_type، ودمج semenplace/sementype في نفس البنية.hormon وhormonalprofile وhormonalprofile2 بموديل HormoneResult طولي (patient_id، infertility_sheet_id اختياري، hormone_code، value، sampled_at) مع جدول مرجعي hormones يشمل المدى الطبيعي والوحدة، وربطه بموديول المعمل في الـ ERP بدل تكرار البيانات؛ مع فصل دلالات الأورام عن هرمونات الخصوبة.sseemmen نهائيًا، وإعادة تسمية ssemen/sseemen/sseemmeen إلى قوائم مرجعية بأسماء واضحة بعد التحقق من دلالتها السريرية مع العيادة (استنتاج: مصدر العينة وطريقة التحضير وحالتها)، وربطها بموديول IVF كحقول منمّطة في دورة الحقن.DATE والقيم الرقمية إلى DECIMAL مع تنظيف البيانات أثناء الترحيل (قيم نصية حرة متوقعة)، واعتماد deleted_at (SoftDeletes) بدل عمود del.patient_id، doctor_id، infertility_sheet_id) واستبدال نقاط النهاية العامة (تحديث أي جدول/عمود من POST) بـ Form Requests وValidation وWhitelisting في Laravel وواجهات Angular مخصصة لكل نموذج.