# خطة إعادة بناء شاشات المرحلة الثانية — النسخة النهائية

> تاريخ: 2026-03-28
> الحالة: الباك اند جاهز ١٠٠% — كل الـ endpoints شغالة ومختبرة

---

## الأخطاء اللي وقعنا فيها (لا نكررها):

### خطأ ١: بنينا قبل ما نفهم الباك اند
بنينا شاشات وبعدين اكتشفنا إن الـ API مش بيرجع البيانات اللي محتاجينها. مثلاً GET /results مكانش بيرجع request_number ولا barcode.
**الدرس**: قبل ما نبني أي شاشة — نختبر الـ API الأول ونتأكد إيه بيرجع بالظبط.

### خطأ ٢: استخدمنا الفكر القديم بدل الريفرنس
بنينا كانبان بـ ٣ أعمدة وكاردات — بس الريفرنس بيقول جدول spreadsheet.
**الدرس**: كل شاشة نرجع للـ spec المسجل (docs/lis-screen-designs-reference.md) قبل ما نبدأ.

### خطأ ٣: المسميات كانت غلط
استخدمنا "تحقق/اعتماد/إصدار" بس الريفرنس بيقول "إرسال/تصديق/نشر". والأدوار كانت مختلطة — الفني كان يقدر يصدق ويعتمد.
**الدرس**: نستخدم المسميات من docs/lis-workflow-analysis.md ونفصل الأدوار صح.

### خطأ ٤: مفيش error handling واضح
لما الـ API كان بيفشل — المستخدم مكانش بيشوف رسالة خطأ واضحة.
**الدرس**: كل API call يكون فيه error handling واضح مع toast message.

### خطأ ٥: بنينا كل حاجة مرة واحدة بدون اختبار
بنينا الشاشة كاملة وبعدين اكتشفنا مشاكل كتير.
**الدرس**: نبني خطوة خطوة — كل خطوة نختبرها قبل ما ننتقل للتالية.

### خطأ ٦: النتائج المكررة
الـ aliquoting كان بيعمل نتائج مكررة لنفس التحليل في نفس الطلب.
**الدرس**: دايماً نعمل deduplication بالحالة الأعلى (released > approved > validated > entered > pending).

### خطأ ٧: auto-refresh كان بيمسح الشغل
الـ auto-refresh في قائمة العمل كان بيعمل reload للبيانات والنتائج المدخلة بتروح.
**الدرس**: مفيش auto-refresh أثناء الإدخال. refresh يدوي بس.

### خطأ ٨: الفلتر الافتراضي كان بيخفي النتائج
بعد إدخال النتيجة حالتها بتتغير من pending لـ entered فبتختفي من الفلتر.
**الدرس**: الفلتر الافتراضي يكون "الكل" مش "معلق".

---

## الـ APIs المتاحة دلوقتي (كلها مختبرة وشغالة):

### النتائج:
- POST /results/{id}/enter — إدخال النتيجة (pending → entered)
- POST /results/{id}/validate — تصديق فني (entered → validated)
- POST /results/{id}/approve — اعتماد (validated → approved)
- POST /results/{id}/release — إصدار (approved → released)
- POST /results/{id}/return — إرجاع خطوة (مع سبب)
- POST /results/{id}/reset — مسح القيمة (من pending/entered)
- POST /results/{id}/retract — سحب + نسخة جديدة (NEW!)
- POST /results/{id}/retest — إعادة فحص + نسخة جديدة (NEW!)
- POST /results/{id}/correct — تصحيح بعد الإصدار (NEW!)
- POST /results/{id}/auto-verify — تحقق تلقائي
- POST /results/bulk-draft — حفظ مسودة بالجملة (NEW!)
- POST /results/bulk-enter — إدخال بالجملة (NEW!)
- POST /results/bulk-validate — تصديق بالجملة (NEW!)
- POST /results/bulk-approve — اعتماد بالجملة (NEW!)
- POST /results/bulk-release — إصدار بالجملة (NEW!)
- GET /results — يرجع request + sample info (FIXED!)

### التنبيهات:
- GET /critical-alerts — قائمة التنبيهات الحرجة (NEW!)
- POST /critical-alerts/{id}/acknowledge — تأكيد التنبيه (NEW!)

### أسباب الرفض:
- GET/POST/PUT/DELETE /rejection-reasons — CRUD (NEW!)

### التقارير:
- GET /result-reports/request/{id}/pdf — تحميل PDF
- GET /result-reports/request/{id}/preview — معاينة
- POST /result-reports/publish — نشر (request_ids[] + channels)

### العينات:
- POST /samples — إنشاء (مع auto_split)
- POST /samples/{id}/collect — جمع
- POST /samples/{id}/deliver — تسليم (يعمل aliquot + kanban + results تلقائي)
- POST /samples/{id}/reject — رفض

### الطلبات:
- POST /requests — إنشاء
- POST /requests/{id}/investigations — إضافة تحليل (مع reuse sample logic!)
- DELETE /requests/{id}/investigations/{inv} — حذف تحليل
- POST /requests/{id}/cancel — إلغاء
- POST /requests/{id}/invalidate — إبطال بعد النشر (NEW!)

---

## خطة البناء — ٧ شاشات بالترتيب:

### الشاشة ١: الويزارد (إنشاء الطلب) — تحسين
**المرجع**: docs/lis-screen-designs-reference.md — Screen 1
**الموجود**: شاشة V2 موجودة وشغالة — صفحة واحدة بتصميم LDM
**المطلوب**:
- بعد الحفظ → إنشاء العينات تلقائي (auto_split) + طباعة الباركودات
- تحذير التحاليل المكررة (GET /patients/{id}/recent-investigations)
- إضافة تحليل لطلب قائم (POST /requests/{id}/investigations) — من شاشة تفاصيل الطلب
**الاختبار**: إنشاء طلب → التأكد إن العينات اتعملت والباركودات اتطبعت

### الشاشة ٢: جمع العينات — تحسين
**المرجع**: docs/lis-screen-designs-reference.md — Screen 2
**الموجود**: جدول بالطلبات والأنابيب والتحاليل وزرار الجمع
**المطلوب**:
- الباركودات تكون ظاهرة من الأول (لأن العينات بتتنشأ من الويزارد)
- زرار "تم الجمع" = collect بس (مش create)
- الطلبات اللي كل عيناتها اتجمعت تنزل لقسم "تم جمعها"
**الاختبار**: فتح الصفحة → التأكد إن الباركودات ظاهرة → جمع → التأكد إن الحالة اتغيرت

### الشاشة ٣: استلام العينات — تحسين
**المرجع**: docs/lis-screen-designs-reference.md — Screen 3
**الموجود**: مسح باركود + قبول/رفض + سجل يومي
**المطلوب**:
- أسباب الرفض من dropdown منظم (GET /rejection-reasons)
- رفض جزئي (تحاليل معينة مش العينة كلها)
- بعد القبول → عرض باركودات الأقسام + طباعة
**الاختبار**: مسح باركود → التأكد إن التحاليل ظاهرة → قبول → التأكد إن الـ aliquots اتعملت

### الشاشة ٤: قائمة العمل (إدخال النتائج) — إعادة بناء
**المرجع**: docs/lis-screen-designs-reference.md — Screen 4
**المرجع**: docs/lis-workflow-analysis.md — Role 4 (Analyst)
**الموجود**: جدول spreadsheet مع inline entry
**المطلوب**:
- الفلتر حسب القسم (section dropdown)
- الحالة ظاهرة بنص ولون (مش بس نقطة)
- الفصل حسب الطلب (request_number) مش المريض
- الـ panels كـ accordion (مطوية بشكل افتراضي)
- Tab/Enter للتنقل
- العلم التلقائي (فوري عند الكتابة)
- حفظ مسودة تلقائي (POST /results/bulk-draft كل ٣٠ ثانية)
- زرار "إرسال" = POST /results/bulk-enter (مش enter واحد واحد)
- الفني يقدر: إدخال + رفض + إعادة فحص
- الفني مش يقدر: تصديق + اعتماد + إصدار
- Deduplication بالحالة الأعلى
- مفيش auto-refresh أثناء الإدخال
**الاختبار**: اختيار قسم → التأكد إن التحاليل ظاهرة → إدخال نتائج → Tab → إرسال → التأكد إن الحالة اتغيرت لـ entered

### الشاشة ٥: المراجعة والإصدار — إعادة بناء
**المرجع**: docs/lis-screen-designs-reference.md — Screen 5
**المرجع**: docs/lis-workflow-analysis.md — Role 5+6 (Verifier + LabManager)
**الموجود**: كاردات بالطلبات مع أزرار progressive
**المطلوب**:
- النتائج read-only (مش editable)
- أزرار: تصديق الكل → اعتماد الكل → إصدار الكل (progressive)
- سحب (retract) → POST /results/{id}/retract → بيعمل نسخة جديدة
- إعادة فحص (retest) → POST /results/{id}/retest → نسخة جديدة
- تصحيح (correct) → POST /results/{id}/correct → بعد الإصدار
- إرجاع للفني (return) → POST /results/{id}/return
- إبطال الطلب (invalidate) → POST /requests/{id}/invalidate → بعد النشر
- طباعة التقرير → GET /result-reports/request/{id}/pdf (الـ endpoint شغال!)
- نشر → POST /result-reports/publish
- Deduplication بالحالة الأعلى
- الفلتر: محتاج مراجعة / صدرت / الكل (الافتراضي "الكل")
**الاختبار**: فتح → التأكد إن النتائج المدخلة ظاهرة → تصديق → اعتماد → إصدار → طباعة PDF → التأكد إن الـ PDF اتفتح

### الشاشة ٦: تفاصيل الطلب (Request Detail) — جديدة
**المرجع**: docs/lis-screen-designs-reference.md — Screen 7
**الموجود**: مفيش
**المطلوب**:
- هيدر: رقم الطلب + المريض + الطبيب + الأولوية + الحالة
- شريط تقدم: مسجّل → مجمع → مستلم → معالجة → صدرت
- جدول التحاليل: كل تحليل + حالته + العلم + النتيجة (لو موجودة)
- ملخص مالي
- سجل أحداث (activity timeline)
- أزرار: إضافة تحليل + إلغاء + تغيير طبيب + تغيير أولوية + طباعة
**الاختبار**: فتح طلب → التأكد إن كل التحاليل ظاهرة بحالاتها → إضافة تحليل → التأكد إنه اتضاف

### الشاشة ٧: التنبيهات الحرجة — جديدة
**المرجع**: docs/lis-deep-analysis-final.md — Part 4
**الموجود**: مفيش
**المطلوب**:
- قائمة التنبيهات الحرجة (GET /critical-alerts)
- كل تنبيه: المريض + التحليل + القيمة + المدى + الوقت
- زرار "تأكيد" → POST /critical-alerts/{id}/acknowledge
- فلتر: غير مؤكدة / مؤكدة / الكل
**الاختبار**: إدخال نتيجة حرجة → التأكد إن التنبيه ظهر → تأكيد → التأكد إنه اتأكد

---

## قواعد البناء (لا نكسرها):

### قبل ما تبني أي شاشة:
١. اقرأ الـ spec المسجل (docs/lis-screen-designs-reference.md)
٢. اختبر الـ API الأول (curl) وتأكد إيه بيرجع
٣. اعمل mock data في الباك اند (طلب + عينات + نتائج) قبل ما تبني
٤. ابني الشاشة خطوة خطوة — اختبر كل خطوة

### أثناء البناء:
٥. كل API call يكون فيه error handling + toast message
٦. مفيش auto-refresh أثناء الإدخال
٧. الفلتر الافتراضي = "الكل" مش "معلق"
٨. deduplication للنتائج المكررة (بالحالة الأعلى)
٩. الأدوار منفصلة — الفني مش يصدق والمشرف مش يدخل
١٠. Tab/Enter للتنقل في الجداول

### بعد البناء:
١١. اختبر الفلو الكامل (من الطلب للإصدار)
١٢. اختبر كل حالة feedback (رفض + سحب + إعادة + إبطال)
١٣. اختبر الطباعة (PDF)
١٤. اختبر مع أكتر من طلب ومريض

---

## ترتيب التنفيذ:

```
الشاشة ٤ (قائمة العمل) ← الأهم — ده اللي الفني بيستخدمه طول اليوم
    ↓
الشاشة ٥ (المراجعة) ← تكمل الفلو — بدونها مفيش إصدار
    ↓
الشاشة ١ (الويزارد) ← تحسين — إنشاء عينات + طباعة باركود بعد الحفظ
    ↓
الشاشة ٢+٣ (الجمع + الاستلام) ← تحسين — ربط بالويزارد
    ↓
الشاشة ٦ (تفاصيل الطلب) ← جديدة — للمتابعة والبحث
    ↓
الشاشة ٧ (التنبيهات) ← جديدة — سلامة المريض
```
