يوثّق هذا الملحق منظومة معمل الأجنة الكاملة (Full IVF wet-lab) المكتشفة في نسخة المركز/المستشفى med.greennature.com.sa، والتي كانت غائبة تمامًا عن النسخة الأصلية المحلّلة (312 جدولًا). النسخة الأصلية اكتفت بورقة سريرية مسطّحة واحدة ivfsheet وجداول السائل المنوي semen/icsisemen، بينما تضيف نسخة المركز سلسلة عمليات معمليّة متكاملة: سحب البويضات، زراعة الأجنة وتقييمها (Grading يوم 2→6)، تجميد الأجنة والحيوانات المنوية وإذابتها، ومخزون خزّانات النيتروجين (Tanks/Canisters/Positions) مع سجل سلسلة عُهدة (Chain of Custody) وشهادة طرفين (Witnessing).
tanks.php — تعريف الخزّانات وإنشاء شبكة الخلايا تلقائيًا + سجل العُهدة tankcellhistory.embryoslab.php — الورقة المعمليّة الرئيسية (~1670 سطرًا): السائل المنوي، البويضات، التقييم يوم2→يوم6، الإرجاع، التجميد، اختيار الجنس، مواقع الخزّان.embryofreezing.php — تقرير تجميد الأجنة + تفاصيل الأجنة (6 مراحل/درجات) + إذابة embryothawing.spermfreezing.php — تقرير تجميد الحيوانات المنوية + الوسط/البروتوكول + موقع الخزّان ولون القلم.ovumpickupembryotrans.php — سحب البويضات (OPU) + إرجاع الأجنة + تقرير متابعة العملية.embryology.php — تقرير تحليل السائل المنوي المعملي (Andrology).ivf_reports.php — طباعة/تجميع تقارير الـ IVF (قراءة فقط).يوجد نموذجان متوازيان للتخزين الكرايو يتحكّم في اختيارهما الإعداد programesetting.tanks_view (القيمة 1 أو 2)؛ ويُظهر الإعداد awusers.tanks_settings أزرار الخزّان لكل مستخدم.
عند إنشاء خزّان في tanks.php يُولِّد النظام كل الخلايا مسبقًا داخل حلقة ثلاثية حسب tank_type:
| tank_type | المستوى الأول up_level_name | المستوى الثاني cell_name | الموضع cell_part_name | إجمالي الخلايا |
|---|---|---|---|---|
| 1 (Cane) | 1..10 | 1..20 | 1..5 | 1000 (يُعرض كـ 20) |
| 2 | 1..10 | 1..20 | 1..5 | 1000 (يُعرض كـ 100) |
| 3 | 1..10 | 1..30 | 1..10 | 3000 (يُعرض كـ 300) |
كل خلية tankcells تحمل patient_id؛ القيمة 0 تعني خلية فارغة. الحجز يتم بـ saveTankLabCell() الذي يضبط patient_id ويُسجّل في سجل العُهدة. العرض في cells() يجمع الامتلاء على ثلاثة مستويات (Level → Canister → Position).
نموذج بديل (عندما tanks_view = 1) يقسّم الخزّان إلى موقعين location = "A"/"B"، كل موقع 21 زرًّا btn_no، وكل زر شبكة row_no/col_no/cell_no. تُخزَّن الخلية المحجوزة في embryoslab_tank_cells بمعرّف نصّي مركّب tank_cell = location_btn_row_col_cell (مثال A_3_2_1_4). جدول tanks_general يحمل 9 ألوان لكل صف (row1_color..row9_color) مرتبطة بجدول colors (الاسم color_name والحرف color_letter) لترميز المرضى بصريًا.
tankcellhistory يسجّل كل حركة: tank_id, cell_id, patient_id, action_type ('Add patient'/'Remove patient'), done_date, by_user_id.embryologist1 وembryologist2 (مُوقِّع + شاهد). كذلك في الورقة المعمليّة حقول مُجمَّعة للحاقن: injection_embrologist ومراجع icsi_by, embryologist_id, freeze_embryologist_id.embryoslab_tank_cells تحمل user_id, date_add, userid_edit, date_edit والحذف منطقي deleted=1 (لا حذف فعلي للحفاظ على الأثر).cancelled_user وcancelled_reverse_user عند الإلغاء والتراجع عنه.awusers.role_id = 11 (Embryologist) وrole_id = 4 (Clinician)، مع جدول إضافي embryologist للأسماء خارج المستخدمين (مرجعية بـ بادئة *).ovumpickup: التاريخ، الاستشاري consultant، طبيب التخدير anaesthetist، التمريض nurse، العملية، علاج ما بعد العملية، المضاعفات. يصاحبه تقرير متابعة followup_operation (ut_cx, avf_rvf, easy_difficult, postoperative, complications).embryologyreport (count, motility, morphology, sperm_source) ومراجع sperum_source, semen_process.embryoslab برأس واحد لكل مريض (not_confirm=0 مسودّة → 1 مؤكَّدة)، مع وسط الزراعة media/oil/incubator (قوائم مفصولة بفواصل) وvisit_id.embryoscoring صف لكل جنين (itr) وأعمدة لكل يوم 1..6: media1..6, oil1..6, incubator1..6, embrologist1..6 + المرحلة stage والدرجة grade. عدد الصفوف يُشتق من عدد المخصّبات fertilizedData().embryoselection (مرتبط بـ embryoslab_id، مراجع embryo_result, embryo_emb).embryotransfer (صف واحد لكل ورقة): clinician_id, embryologist_id, et_day + قسطرة/صعوبة/دم/مكان (embryocathetertype, embryodifficulty, embryoblood, embryojetplace, embryolah, embryotype). كما يوجد إرجاع مستقل embryotransferovum.embryofreezingreport (no_of_straws, no_of_embryos, day_of_freezing, kit, device, lot_no, location) + صفوف embryo (6 مراحل/درجات لكل قشّة) + إذابة embryothawing (recovered, lost, e_t_date, cathetr).spermfreezingreport (count, motility, a_plus_b, morphology_abn, samples_no, freezing_media_id, freezing_protocol_id, purpose_of_freezing, color_of_pen, embryologist1/2, location).tankcellhistory.| الجدول | جديد/معروف | الغرض | أهم الحقول المستنتجة | العلاقات |
|---|---|---|---|---|
tanks | جديد | خزّان نيتروجين | name, tank_type (1/2/3) | 1→N tankcells |
tankcells | جديد | خلية تخزين مُولَّدة مسبقًا | tank_id, up_level_name, cell_name, cell_part_name, patient_id, created_at | N→1 tanks, → patients |
tankcellhistory | جديد | سجل عُهدة الخلايا | tank_id, cell_id, patient_id, action_type, done_date, by_user_id | → tankcells, awusers |
tanks_general | جديد | مواقع الخزّان البديلة بالألوان | location(A/B), btn_no, rows_letter, row1_color..row9_color | → colors |
embryoslab_tank_cells | جديد | حجز خلية لورقة معمليّة | embryoslab_id, location, btn_no, row_no, col_no, cell_no, tank_cell, user_id, date_add, userid_edit, date_edit, deleted | N→1 embryoslab, → tanks_general |
colors | جديد | ترميز لوني للمرضى | color_name, color_letter | مرجع لـ tanks_general |
embryoslab | جديد | الورقة المعمليّة الرئيسية | patient_id, visit_id, not_confirm, clinician_id, referred_dr_id, media, oil, incubator, injection_embrologist, icsi_by, embryologist_id, freeze_embryologist_id, cancelled, cancelled_user, date | أب لمعظم جداول المعمل |
embryoscoring | جديد | تقييم الجنين يوم2→يوم6 | embryoslab_id, itr, stage/grade, media1..6, oil1..6, incubator1..6, embrologist1..6, deleted | N→1 embryoslab, → stage,grade |
embryoselection | جديد | انتقاء/اختيار الجنين | embryoslab_id, deleted | → embryo_result, embryo_emb |
embryotransfer | جديد | إرجاع الأجنة ET (من الورقة) | embryoslab_id, clinician_id, embryologist_id, embryologist_id_tb, et_day, catheter/difficulty/blood/jet | 1→1 embryoslab |
embryotransferovum | جديد | إرجاع مستقل (OPU flow) | patientid, date, day, consultant, nurse, embryologist, no_of_embryos, quality, notes | → patients |
ovumpickup | جديد | سحب البويضات OPU | patientid, date, consultant, anaesthetist, nurse, operation, postoperative, complications | → patients |
followup_operation | جديد | متابعة عملية الـ OPU | patient_id, nurse_id, anaesthetist_id, clinician_id, embryologist_id, ut_cx, avf_rvf, easy_difficult, postoperative, complications, date | → patients, awusers |
embryofreezingreport | جديد | تقرير تجميد الأجنة | patient_id, date, embryologist, ref_by_prof_dr, no_of_straws, no_of_embryos, day_of_freezing, kit, device, lot_no, location, completed, deleted | 1→N embryo, embryothawing |
embryo | جديد | قشّة جنين مُجمَّدة | embryofreezing_id, stage1..6, grade1..6 | N→1 embryofreezingreport |
embryothawing | جديد | إذابة الأجنة | embryofreezing_id, no_of_embryos, thawing_date, recovered, lost, e_t_date, embryos, grades, embryol_oigist, clinician, cathetr | N→1 embryofreezingreport |
spermfreezingreport | جديد | تقرير تجميد الحيوانات المنوية | patient_id, date, sperm_source, count, motility, a_plus_b, morphology_abn, samples_no, freezing_media_id, freezing_protocol_id, purpose_of_freezing, color_of_pen, embryologist1, embryologist2, location | → freezingmedia, freezingprotocol |
embryologyreport | جديد | تحليل السائل المنوي المعملي | patient_id, date, sperm_source, count, motility, morphology | → patients |
freezingmedia / freezingprotocol | جديد | قوائم وسط/بروتوكول التجميد | media / protocol | مرجع لـ spermfreezingreport |
stage / grade | جديد | مراحل ودرجات الجنين | stage / grade, deleted | مراجع للتقييم والتجميد |
growthmedia, growthoil, growthincubator, growthco2 | جديد | قوائم بيئة الزراعة | name, deleted | مراجع لـ embryoslab/embryoscoring |
oocytequality, oocytezona, oocytecytoplasm, oocytepvs, oocyteother | جديد | قوائم تقييم البويضة | name, deleted | مراجع لـ embryoslab |
embryocathetertype, embryodifficulty, embryoblood, embryojetplace, embryolah, embryotype | جديد | قوائم الإرجاع ET | name | مراجع لـ embryotransfer |
embryo_device, embryo_result, embryo_emb, embryo_lot_select, embryo_catheter_select, embryo_tank, embryo_kit_type | جديد | قوائم مساعدة للمعمل | name, deleted | مراجع متفرّقة |
embryologist | جديد | أخصائيو أجنة خارج المستخدمين | name, deleted | يُدمج مع awusers role 11 |
sperum_source, semen_process | جديد | قوائم مصدر/معالجة السائل المنوي | name, deleted | مراجع لـ embryoslab |
kit, device, cathetr | جديد | مستهلكات التجميد/الإرجاع | kit / device / cathetr, deleted | مراجع للتقارير |
detections | جديد | تصنيف زيارات الأجنة (for_embryo) | for_embryo, del | يربط embryoslab.visit_id |
ivfsheet, semen, icsisemen | معروف | أوراق IVF السريرية الأصلية المسطّحة | — | بديلة/سابقة لمنظومة المعمل الجديدة |
... where id = ' . $id و"select * from awusers where user_id=$ref_dr_id->refer_doctor") دون معاملات مُهيّأة — خطر حقن عالٍ يجب معالجته عند أي ترحيل.deleted=1/del=1) في معظم الجداول، وهو مناسب للحفاظ على سلسلة العُهدة في بيئة منظّمة.Tank → Canister/Cane → Position مع جدول حركات عُهدة (tankcellhistory) كنواة لمتطلب Chain of Custody المطلوب اعتماديًا (CAP/JCI/ESHRE).tankcells الشبكي مقابل embryoslab_tank_cells اللوني) في نموذج واحد قبل الترحيل لتجنّب ازدواجية مصدر الحقيقة لموقع العيّنة.embryologist1/2 الحاليين.growth*, oocyte*, embryo*, freezing*, stage, grade, kit, device, cathetr) في جدول مرجعي موحّد lookup(type,value) لتقليل تضخّم المخطط.embryoslab.visit_id بدورة العلاج/الزيارة في الـ HIS لإغلاق حلقة المسار السريري ← المعملي ← التقارير (ivf_reports.php).kit, device, cathetr, lot_no) لتتبّع الأرصدة والصلاحية ضمن وحدة المخزون في الـ ERP.