موديول متابعة الحمل هو المسؤول عن إدارة ملف الحمل الكامل للمريضة: حساب ميعاد الولادة المتوقع (EDD) من تاريخ آخر دورة (LMP)، تسجيل زيارات المتابعة الدورية (الوزن، الضغط، عمر الحمل بالأسابيع)، أشعة الموجات فوق الصوتية للحمل، صرف الأدوية وطلب التحاليل لكل زيارة، تسجيل تاريخ فقدان الحمل السابق (EPC)، وتقارير الولادات المتوقعة وحالات الخطورة. يحتوي النظام الحالي على مسارين متوازيين ومكررين لنفس الوظيفة: مسار "ANC Sheet" ومسار "Antenatal Visit".
ancsheet بحالة endpreg=0 أو mainantenental بحالة done=0) بحيث يوجد حمل نشط واحد فقط لكل مريضة.ivf = LMP + 9 أشهر − 7 أيام).diagnosisant وcomplaintant)، الملاحظات والخطة العلاجية.mainantenentalus): GA، GS، CRL، FHR، BPD، FL، موضع المشيمة، السائل الأمنيوسي، الوزن المتوقع للجنين.op_4d_list) بمجرد إدخال EDD، وتحديث حالتها (t11/t21) عند تسجيل تواريخ T-scan وTT-scan.investcats/invests) مع تسجيل النتائج وطباعة الطلبات.phobstetric + عدادات جدول المرضى).edd وexpected)، حالات EPC بالتاريخ (epc)، المرضى حسب نوع الخطورة (risktype)، والحالات حسب نوع إنهاء الحمل (termination).| الجدول | الغرض | أهم الحقول | العلاقات |
|---|---|---|---|
ancsheet | ملف الحمل الرئيسي للمريضة (مسار ANC Sheet): LMP/EDD، المشيمة، فحوصات T/TT-scan، لقطة G/P/EPC عند إنهاء الحمل | patientid, endpreg, sheetlmp, sheetedd, placenta, tscandate, ttscandate, obstgn, obstpn, obstepc, 4d_list_id | patients عبر patientid، op_4d_list عبر 4d_list_id |
ancnewvisit | زيارة متابعة داخل ملف ANC: التاريخ، عمر الحمل، الوزن، الضغط، بيانات أشعة مختصرة، الخطة | ancsheetid, newvisitdate, newvisitw, newvisitbw, newvisitbp, usn, usplace, usaf, usefw, usbiom, plan | ancsheet عبر ancsheetid |
ancsheetdrugs | أدوية/روشتات مرتبطة بملف ANC بتاريخ معين، للزوجة أو الزوج | patientid, ancsheetid, date, drugid, drugname, drugdos, forhusband, doctorid, recepittmpid, deleted | ancsheet عبر ancsheetid، drugs عبر drugid، awusers عبر doctorid |
ancsheetinvest | تحاليل واستقصاءات مطلوبة من ملف ANC مع النتيجة | patientid, ancsheetid, date, investid, investresult, forhusband, doctorid, deleted | ancsheet عبر ancsheetid، invests عبر investid |
mainantenental | ملف الحمل الرئيسي للمسار الموازي (Antenatal Visit): LMP/EDD/IVF date، عدد مرات الحمل G، الهيموجلوبين، جنس الجنين | patientid, doctorid, lmp, eed, ivf, g, done, hb, sex, sysdate | patients عبر patientid، awusers عبر doctorid |
antenalvisit | زيارة متابعة في المسار الموازي: شكوى، وزن، ضغط، نبض، تشخيصات وشكاوى متعددة (CSV) | patientid, mainantenentalid, antenaldate, complaint, wt, bp, pulse, diagnosisid, complaintid, conditions | mainantenental عبر mainantenentalid، diagnosisant/complaintant عبر قوائم CSV (استنتاج) |
mainantenentaldrugs | أدوية المسار الموازي (نسخة مكررة من ancsheetdrugs بنفس البنية) | patientid, mainantenatalid, date, drugid, drugname, drugdos, forhusband, doctorid, deleted | mainantenental عبر mainantenatalid، drugs عبر drugid |
mainantenentalinvest | تحاليل المسار الموازي (نسخة مكررة من ancsheetinvest) | patientid, mainantenatalid, date, investid, investresult, forhusband, doctorid, deleted | mainantenental عبر mainantenatalid، invests عبر investid |
mainantenentalus | سجل أشعة الموجات فوق الصوتية للحمل: قياسات الجنين والمشيمة والسائل الأمنيوسي | mainantenatalid, patientid, date, nga, gs, crl, fhr, bpd, fl, placenta, ai, fwt, doctorid | mainantenental عبر mainantenatalid، awusers عبر doctorid |
placenta | قائمة اختيار لمواضع المشيمة (ant, post high, fundal, ant low lying...) تُستخدم في حقل ancsheet.placenta | id, title, del | تُقرأ من شاشة ancsheet عبر data-celtable |
pla2cen | قائمة اختيار "مكان إجراء الحقن المجهري" تخص فعليًا موديول IVF وليس متابعة الحمل (حقل ivfsheet.pla2cen) | id, title (نوعه int خطأً), del | ivfsheet عبر pla2cen (موديول IVF) |
anprotocol | قائمة بروتوكولات التنشيط (long ag / antag / short ag) — جدول قديم؛ الكود الحالي يستخدم جدول icsiprotocol بدلًا منه | id, title, del | غير مستخدم فعليًا (استنتاج: مهجور لصالح icsiprotocol) |
antype | قائمة نوع العقم (1ry / 2ry / sex selection) — تخص موديول IVF (حقل ivfsheet.antype) | id, title, del | ivfsheet عبر antype (موديول IVF) |
antypes | قائمة نوع الدورة (fresh / frozen) — تخص موديول IVF (حقل ivfsheet.antypes) | id, title, del | ivfsheet عبر antypes (موديول IVF) |
wifeepc | سجل فقدان الحمل السابق EPC للمريضة: النوع، أسبوع الحمل، العلاج، الطبيب، الباثولوجي، التكلفة | infertilitysheetid, wifeepcdate, wifeepctype, wifeepcw, wifeepcttt, wifeepcobst, histopath, coast, wifeepcp, wifeepcepc | infertilitysheet عبر infertilitysheetid، قوائم wifeepctype/wifeepcttt/wifeepcobst |
wifeepctype | قائمة أنواع فقدان الحمل: EPL، A T1، A T2، C VM، P VM، EP (حمل خارج الرحم) | id, title, del | wifeepc عبر wifeepctype |
wifeepcttt | قائمة طرق علاج فقدان الحمل: conservative، medical (miso/MTX)، D&C، laparoscopy/laparotomy | id, title, del | wifeepc عبر wifeepcttt |
wifeepcobst | قائمة الأطباء/المراكز التي تعاملت مع حالة فقدان الحمل (أسماء أطباء بالعربية) | id, title, del | wifeepc عبر wifeepcobst |
wifeobst | قائمة الأطباء/المستشفيات التي أجرت الولادات السابقة لأطفال المريضة (اختيار متعدد) | id, title, del | awifep عبر wifeobst (قائمة CSV) |
wifemodeofd | قائمة طريقة الولادة: CS (قيصرية)، sVD، nVD (طبيعية) | id, title, del | awifep عبر wifemodeofd |
wifetypeofd | قائمة توقيت الولادة: FT (مكتملة) / PT (مبتسرة) | id, title, del | awifep عبر wifetypeofd |
ancsheet.php?ac=index) يبحث النظام عن ملف حمل نشط (endpreg=0)؛ إن لم يوجد يُنشأ تلقائيًا، ويُنشأ كذلك ملف infertilitysheet إن لم يوجد، ويُسجل الدخول في lastvisit.eedlmp()، وبمجرد وجود EDD يُضاف صف تلقائي في قائمة انتظار أشعة 4D (op_4d_list) ويُربط بالملف عبر 4d_list_id.op_4d_list (الأعمدة t11/t21).ancnewvisit بتاريخ اليوم ويحسب عمر الحمل بالأسابيع والأيام من LMP تلقائيًا، ثم تُملأ الحقول (وزن، ضغط، ملاحظات، خطة، بيانات أشعة) بحفظ فوري حقلًا بحقل عبر AJAX.ancsheetdrugs) من كتالوج الأدوية، للزوجة أو الزوج، مع إمكانية الطباعة وعرض روشتات التواريخ السابقة وتعديلها.ancsheetinvest وتُطبع، وتُسجل النتائج لاحقًا في نفس الصفوف.awifep مع قوائم طريقة/توقيت/مكان الولادة) وحالات فقدان الحمل (wifeepc مع قوائم النوع/العلاج/الطبيب)، وتُحرر من هنا مباشرة.endpreg=1 وتُلتقط قيم G/P/EPC من ملف العقم وتُحفظ في الملف، ويصبح الملف أرشيفًا يُستعرض من شاشة archive/historys.antenalvisit.php تدير نفس الحمل بجداول أخرى: تُنشئ/تحمّل mainantenental (مع حساب G تلقائيًا من phobstetric وعدادات المريضة)، وتسجل زيارات antenalvisit وأشعة mainantenentalus وأدوية وتحاليل خاصة بها، وتُنهى بـ done=1 ويُستعرض أرشيفها برقم الحمل g.edd.php يعرض من ولادتهن المتوقعة اليوم أو في مدى تاريخي من ancsheet.sheetedd، وexpected.php يعرض نفس التقرير من mainantenental.eed، وepc.php يعرض حالات فقدان الحمل بالتاريخ، وrisktype.php يصنف المرضى حسب patients.risktype، وtermination.php يعرض الحالات حسب نوع إنهاء الحمل من phobstetric.patients عبر patientid، وتقرير الخطورة يقرأ patients.risktype وpatients.risk.doctorid في الزيارات والأدوية والتحاليل والأشعة ترتبط بـ awusers.user_id.ancsheetdrugs.drugid وmainantenentaldrugs.drugid يرتبطان بجدول drugs، مع ربط بالإيصالات عبر recepittmpid/recepitdrugid.ancsheetinvest.investid وmainantenentalinvest.investid يرتبطان بـ invests (المصنفة في investcats).wifeepc.infertilitysheetid يرتبط بـ infertilitysheet، وقوائم wifeobst/wifemodeofd/wifetypeofd يستهلكها جدول الأطفال awifep التابع لملف العقم، وإنهاء الحمل ينسخ G/P/EPC من ملف العقم.ancsheet.4d_list_id يرتبط بـ op_4d_list (حجز وتتبع فحوصات 4D).phobstetric وقوائم phobstericterminate/phobstericterplace.registeration المرتبطة بالملف عبر ancsheetid، ويسجل آخر شاشة زارها المريض في lastvisit.antype وantypes وpla2cen (وanprotocol المهجور) تُستخدم فعليًا من ivfsheet وليس من شاشات متابعة الحمل.ancsheet/ancnewvisit مقابل mainantenental/antenalvisit) بجداول أدوية وتحاليل مكررة بنفس البنية، ما يشتت بيانات الحمل الواحد بين مصدرين.ancsheet00.php نسخة قديمة مكررة من ancsheet.php ما زالت موجودة في الكود (Dead/Legacy code).mainantenental (الصحيح antenatal) وعمود الربط مكتوب mainantenatalid بإملاء مختلف عن اسم الجدول، وantenalvisit بدون حرف t.varchar بصيغة Y/m/d في جداول أساسية (ancsheet, ancnewvisit, wifeepc) ما يجعل المقارنات والفرز عرضة للأخطاء، بينما جداول أخرى تستخدم date.mainantenental.patientid من نوع varchar بينما باقي الجداول تستخدم int لنفس المفتاح.del وdeleted وconditions وendpreg/done كلها تؤدي نفس الغرض بأسماء مختلفة.risktype.php وtermination.php يلصقان مدخلات POST مباشرة في جمل SQL، ودوال getselectajax/Add تسمح للعميل بتمرير اسم الجدول والعمود (Table/Mass-assignment injection).anprotocol وantype وantypes وpla2cen مصنفة ضمن هذا الموديول لكنها تخص IVF؛ anprotocol مهجور (الكود يستخدم icsiprotocol)، وعمود pla2cen.title معرف كـ int خطأً، وpla2cen بلا بيانات أولية.placenta يحوي صفوف NULL وقيم نصية حرة مكررة، وقوائم wifeobst/wifeepcobst تخلط أسماء أطباء وأماكن ودول في حقل واحد.diagnosisid وcomplaintid وwifeobst تُخزن كقوائم CSV داخل عمود نصي بدلًا من جداول وسيطة.pregnancies (موديل Pregnancy) يدمج ancsheet + mainantenental بحقول: patient_id, lmp, edd, gravida, status (active/ended), hb, placenta_site_id, مع ترحيل بيانات المسارين بمطابقة المريضة والتواريخ.antenatal_visits (موديل AntenatalVisit) يدمج ancnewvisit + antenalvisit: pregnancy_id, visit_date, weight, bp, pulse, notes, plan، مع جداول وسيطة antenatal_visit_diagnosis وantenatal_visit_complaints بدل قوائم CSV، وحساب عمر الحمل كـ Accessor محسوب وليس عمودًا مخزنًا.antenatal_ultrasounds (موديل AntenatalUltrasound) من mainantenentalus مع ضم حقول T-scan/TT-scan من ancsheet كأنواع فحص (scan_type: routine / first_trimester / anomaly / 4d) بدلًا من أعمدة ثابتة.prescriptions/prescription_items وinvestigation_requests/investigation_results بعلاقة Polymorphic أو بـ pregnancy_id، لتحل محل الجداول الأربعة المكررة (ancsheetdrugs, mainantenentaldrugs, ancsheetinvest, mainantenentalinvest).pregnancy_losses (موديل PregnancyLoss) من wifeepc مربوط مباشرة بـ patient_id بدل المرور على ملف العقم، بحقول: loss_type_id, gestational_weeks, treatment_id, provider_id, histopathology, cost, date من نوع date.delivery_modes (CS/SVD/NVD)، delivery_terms (full_term/preterm)، pregnancy_loss_types، pregnancy_loss_treatments، placenta_sites (بعد تنقية بيانات placenta)، ودمج wifeobst + wifeepcobst في جدول external_providers واحد بحقل نوع (طبيب/مستشفى/خارجي).antype وantypes وpla2cen إلى موديول IVF عند ترحيله، وإسقاط anprotocol بعد التأكد من خلوه من بيانات مرتبطة (الكود يستخدم icsiprotocol).DATE مع معالجة القيم 0000-00-00 والفارغة، توحيد الحذف الناعم على deleted_at (SoftDeletes)، وإضافة مفاتيح أجنبية وقيود فعلية، ونقل منطق EDD إلى Service واحد (EddCalculator) قابل للاختبار.