🖨️ طباعة بوابة المريض = تقرير المعمل الرسمي

تحليل: جعل طباعة البوابة تلتزم بالأقسام والبانلز وأنواع التحاليل — تماماً كتقرير المعمل

تحليل قبل التنفيذ · 2026-05-22

① المطلوب

الطباعة اللي بيشوفها المريض من البوابة لازم تكون نفس طباعة المعمل الرسمية:

② الوضع الحالي — مقارنة

✘ طباعة البوابة الحالية

PpPrintService — جدول إنجليزي مسطّح في صفحة واحدة. كل التحاليل ورا بعض بدون أقسام ولا بانلز.

Moon Lab — Report
TestResultRef
Hemoglobin1413-17
WBC74-11
Glucose9070-100
ALT227-56
— الكل مخلوط في صفحة —
✔ تقرير المعمل الرسمي

LisReportPdfService (756 سطر) — صفحة لكل قسم، بانلز مجمّعة، ترويسة المعمل، QR.

Moon Lab
Hematology — صفحة ١
Complete Blood Count
Hemoglobin1413-17
WBC74-11
صفحة ١ / ٢
Moon Lab
Chemistry — صفحة ٢
Glucose9070-100
ALT227-56
صفحة ٢ / ٢

③ تقرير المعمل — إزاي بيشتغل

LisReportPdfService.generateReport(data, settings, lab) — يستقبل ReportData فيه sections[]:

ReportData {
  requestNumber, requestDate, patient{name,mrn,age,gender}, doctor,
  sections: [
    { name: "Hematology",
      panelName?: "CBC",
      results: [ { testName, result, unit, referenceRange, flag,
                   indent?, subHeader? } ] }
  ]
}
الخدمة قابلة لإعادة الاستخدام مباشرة: providedIn:'root' — البوابة تقدر تستدعيها لو وفّرت لها ReportData بالشكل الصح.

④ الناقص — لازم الـ Backend

عشان نطبع per-section لازم نعرف كل تحليل في أنهي قسم، وكمان نعرف البانلز. استجابة GET /lis/portal/requests الحالية:

tests: [
  { name, name_en, unit, status, value, normal_min, normal_max, abnormal_flag }
  // ✘ مفيش section   ✘ مفيش تجميع بانل
]
الناقصالطبقةالحالة
حقل section (name + name_en) لكل تحليلBackendجديد — أحمد
تعشيش البانلز (is_panel + members[])Backendتذكرة #1601
(اختياري) code لكل تحليل — لعرضه في التقريرBackendجديد — أحمد
سن/جنس المريض: ترويسة التقرير فيها سن وجنس المريض — جلسة البوابة بترجّع {id, mrn, name} فقط. الحل: إما الـ backend يضيفهم لرد link-access، أو نطبع بدونهم (السن/الجنس فاضيين). مقترح: نضيفهم لرد link-access — تحسين بسيط.

⑤ الخطة

الـ Backend — توسيع تذكرة #1601

استجابة /lis/portal/requests لكل تحليل (وكل عضو بانل):

{
  "section": { "name": "أمراض الدم", "name_en": "Hematology" },
  "code": "HGB",
  "name": "...", "name_en": "Hemoglobin", "unit": "g/dL",
  "status": "released", "value": "14",
  "normal_min": "13", "normal_max": "17", "abnormal_flag": "normal"
}

+ تعشيش البانلز (is_panel + members[]) من #1601. + سن/جنس المريض في رد link-access.

الواجهة — إعادة استخدام خدمة التقرير

1
محوّل جديد portalRequestToReportData() — يبني ReportData من PortalRequest: تجميع بالقسم، البانل كـ panelName/أعضاء، الفحوصات المُصدَرة فقط.
2
PpPrintService يستدعي LisReportPdfService.generateReport() بدل الجدول المسطّح — مع LabInfo من config.json و ReportSettings افتراضية (بدون توقيع طبيب).
3
النتيجة: طباعة البوابة = تقرير المعمل بالظبط — صفحة لكل قسم، بانلز مجمّعة، إنجليزي.
تدرّج آمن: الواجهة تُبنى الآن — لو الـ backend لسه ما أضافش section، كل التحاليل تروح قسم واحد «Lab Results» (صفحة واحدة، شغّال). أول ما section يوصل → تتقسّم تلقائياً.

⑥ القرار