خطة تنفيذ: ربط الفحص بالجنس + التحكّم الكامل في الطباعة

5 فيتشرز مترابطة في الـ LIS. لكل واحدة: الموجود حالياً (من فحص الكود + الداتابيز) والمقترح (باك + فرونت) + القرارات المطلوبة. تخطيط فقط — مفيش تنفيذ قبل موافقتك.

🗓️ 2026-06-09🧬 LISBackend-first · Plan before implement
المحتوى: 1) جنس الفحص · 2) كومنتات الطباعة · 3) إخفاء عضو بنل من الطباعة · 4) ترتيب السكاشن في الطباعة · 5) استبعاد تحليل من الطباعة · خطة التنفيذ + القرارات
1

ربط الفحص بنوع الجنس — إخفاء التحاليل غير المناسبة وقت اختيار المريض

🔍 الموجود

  • lab_investigations مفيش عمود gender
  • المريض عنده gender، والـwizard (request-wizard-v2) شايف جنس المريض المختار.
  • دلوقتي قائمة التحاليل بتظهر كلها بغضّ النظر عن جنس المريض.

🎯 المقترح

  • DB عمود gender_applicability على lab_investigations: male / female / both (افتراضي both).
  • BE إضافته للـfillable + Resource + Store/Update request + شاشة تعريف الفحص.
  • FE في الـwizard: لما يتحدّد المريض، نفلتر قائمة التحاليل — نخفي اللي gender_applicability بتاعها مايطابقش جنس المريض (both تظهر دايماً).
  • FE في شاشة الـInvestigations: dropdown لاختيار الجنس عند التعريف.
قرار: القيم تكون male / female / both؟ والتحاليل القديمة كلها تبقى both افتراضياً (مايتأثرش حاجة)؟
2

التحكّم في كومنتات الطباعة — الأنواع، الحجم/اللون/الثقل، وقائمة أسباب جاهزة

🔍 الموجود

  • lab_results فيه comment + printable_comment موجود (مش مستخدم في الطباعة لسه).
  • محرّك الطباعة بيدعم: كومنت لكل تحليل (comment) + كومنت جماعي تحت النتائج (data.comments).
  • إعدادات التقرير الحالية بسيطة: lis.report_template (اسم تمبلت) + header/footer. مفيش تحكّم في حجم/لون/ثقل الكومنت.
  • الأسباب (Reasons) في lab_rejection_reasons بعمود category = (deferral / rejection / sample) — وده اللي شاشة lab/sample-reasons بتديره.

🎯 المقترح

  • DB category جديدة في lab_rejection_reasons = result_comment (قائمة أسباب/كومنتات جاهزة للنتيجة المطبوعة) — بنفس بنية sample-reasons.
  • BE مفتاح إعداد جديد lis.print_comment_config (JSON): font size · color · weight · موضع (جنب التحليل / جماعي في النهاية) · أنواع الكومنتات اللي تظهر.
  • FE تاب جديد في إعدادات المعمل: «كومنتات الطباعة» — التحكّم في الستايل + اختيار الأنواع.
  • FE وقت كتابة الكومنت (في الـvalidation/results): كستم أو اختيار من القائمة (الـ category الجديدة).
  • FE محرّك الطباعة يطبّق الستايل (حجم/لون/ثقل) من الإعداد.
قرار: الستايل (حجم/لون/ثقل) يتطبّق على كل كومنتات الطباعة موحّد، ولا لكل نوع كومنت ستايل لوحده؟ والقائمة الجاهزة تكون category واحدة result_comment كفاية؟
3

إخفاء عضو بنل من الطباعة — يفضل في النتيجة، يختفي في الطباعة

🔍 الموجود

  • lab_investigation_panel_members: panel_id, member_id, section_id, sort_order. مفيش flag إخفاء
  • كل أعضاء البنل بتظهر في النتيجة وفي الطباعة.

🎯 المقترح

  • DB عمود hide_from_print (boolean) على lab_investigation_panel_members.
  • BE يتسرّب للـResource علشان الطباعة تعرفه.
  • FE في محرّر أعضاء البنل (panel-members-editor): checkbox «إخفاء من الطباعة».
  • FE محرّك الطباعة يستبعد الأعضاء دي — بتفضل ظاهرة في شاشة النتيجة.
ملاحظة: ده flag ثابت على تعريف البنل (لكل الطلبات). بيكمّل نقطة 5 (الاستبعاد اللحظي).
4

ترتيب السكاشن/التابات في الطباعة (شامل تقرير الهيستو)

🔍 الموجود

  • محرّك الطباعة بيرندر data.sections[] بالترتيب اللي بيتبني بيه (صفحة لكل سكشن/بنل).
  • الترتيب دلوقتي بيتحدّد ضمنياً من ترتيب تجميع البيانات — مفيش تحكّم صريح.

🎯 المقترح

  • BE الطباعة ترتّب السكاشن حسب sort_order الموجود على lab_sections (مصدر واحد للترتيب).
  • FE (اختياري) في التمبلت/الإعدادات: ترتيب السكاشن بالسحب (drag) لو عايز ترتيب خاص بالطباعة مختلف عن sort_order.
  • FE تقرير الهيستو ياخد نفس الترتيب.
قرار: الترتيب يكفي يكون من sort_order بتاع السكشن (أبسط)، ولا عايز ترتيب مستقل خاص بالطباعة في التمبلت؟
5

استبعاد تحليل من الطباعة — اختيار لحظي وقت الطباعة، شامل كل مسارات الطباعة

🔍 الموجود

  • lab_results مفيش flag استبعاد من الطباعة
  • الطباعة بتطبع كل التحاليل اللي ليها نتيجة.
  • مسارات الطباعة: محرّك أساسي + طباعة البورتل/الـB2B + print-queue.

🎯 المقترح

  • FE وقت الطباعة (من الـvalidation/results): اختيار التحاليل اللي هتطبع (checkbox لكل تست) → نمرّر print_result_ids للمحرّك.
  • DB (اختياري) flag دائم exclude_from_print على lab_results لو عايز استبعاد ثابت كمان.
  • BE الفلاتر دي تتطبّق في كل مسارات الطباعة: المحرّك الأساسي + بورتل المريض + الـB2B + print-queue (مصدر فلترة موحّد).
قرار: الاستبعاد يكون لحظي بس وقت الطباعة (اختيار في كل مرة)، ولا عايز كمان flag دائم على التحليل؟ ونقطة البنل (3) بتغطّي إخفاء عضو معيّن دائماً.

خطة التنفيذ (Backend-first، بالترتيب)

P1
Migrations (DB): gender_applicability على investigations · hide_from_print على panel_members · category جديدة result_comment · (اختياري) exclude_from_print على results.
P2
Backend: fillable + Resources + Requests + إعداد lis.print_comment_config + فلترة الطباعة الموحّدة (إخفاء أعضاء/تحاليل + ترتيب السكاشن).
P3
Frontend — تعريفات: جنس الفحص (Investigations) · إخفاء عضو بنل (panel editor) · تاب «كومنتات الطباعة» + ترتيب السكاشن في الإعدادات.
P4
Frontend — التشغيل: فلترة الـwizard بالجنس · اختيار كومنت من القائمة · اختيار تحاليل الطباعة وقت الـvalidation.
P5
الطباعة: تطبيق الستايل + الإخفاء + الترتيب في كل المحرّكات (أساسي/بورتل/B2B/print-queue) + تحقّق.

القرارات المطلوبة قبل البدء

  1. جنس الفحص: male / female / both (القديم = both)؟
  2. ستايل الكومنت موحّد لكل الكومنتات، ولا لكل نوع ستايل؟ وقائمة الأسباب category واحدة result_comment؟
  3. ترتيب السكاشن من sort_order كفاية، ولا ترتيب مستقل في التمبلت؟
  4. استبعاد التحليل: لحظي بس، ولا كمان flag دائم؟
  5. أبدأ بالكل دفعة واحدة، ولا فيتشر فيتشر بالترتيب فوق؟
كله Backend-first: الباك مصدر الحقيقة (flags + إعدادات + فلترة الطباعة موحّدة)، والفرونت يرسم/يختار. مفيش منطق طباعة متكرر — مصدر فلترة واحد بيخدم كل مسارات الطباعة.