# المرحلة الثانية — التحليل الشامل + خطة التنفيذ

> تاريخ: 2026-03-27
> المرجع: SENAITE/Bika LIMS + Cerner PathNet + Epic Beaker + OpenELIS + HL7 FHIR R5 + ISO 15189

---

## ١. الفلو المعياري (Industry Standard — ISO 15189)

```
PRE-EXAMINATION              EXAMINATION               POST-EXAMINATION
═══════════════              ═══════════               ════════════════
1. إنشاء الطلب              7. معالجة العينة          12. مراجعة النتائج
2. تسجيل المريض             8. التحليل/الفحص          13. تحقق فني
3. جمع العينة               9. فحص مراقبة الجودة      14. تحقق طبي
4. نقل العينة              10. إدخال النتيجة          15. إصدار التقرير
5. استلام العينة            11. حساب المعادلات         16. تخزين العينة
6. فرز وتوزيع                                         17. التخلص من العينة
```

### دورة حياة التحليل الكاملة (18 خطوة):

```
1.  ORDER PLACED           → موظف استقبال/طبيب ينشئ الطلب
2.  ORDER ACCEPTED         → المعمل يقبل الطلب
3.  SAMPLE COLLECTION DUE  → فني الجمع يتعيّن
4.  SAMPLE COLLECTED       → سحب الدم / جمع العينة + طباعة باركود
5.  SAMPLE IN TRANSIT      → العينة في الطريق للمعمل
6.  SAMPLE RECEIVED        → المعمل يستلم + فحص بصري (hemolysis, lipemia)
7.  SAMPLE SORTED          → توزيع على الأقسام المعنية
8.  SAMPLE PREPARED        → طرد مركزي، تقسيم (aliquoting) لو لازم
9.  ANALYSIS ASSIGNED      → التحليل يتعيّن لجهاز/فني
10. ANALYSIS IN PROGRESS   → الجهاز شغال أو فحص يدوي
11. QC CHECKED             → فحص مراقبة الجودة للدفعة
12. RESULT ENTERED         → النتيجة تدخل (يدوي أو من الجهاز)
13. TECHNICAL VALIDATION   → الفني يراجع (أو auto-verify لو القواعد نجحت)
14. CLINICAL VALIDATION    → الباثولوجي يراجع (لو مطلوب)
15. RESULT APPROVED        → التوقيع النهائي
16. RESULT RELEASED        → التقرير يتولّد ويتبعت للطبيب/المريض
17. SAMPLE STORED          → تخزين مع تتبع الموقع
18. SAMPLE DISPOSED        → بعد فترة الاحتفاظ
```

---

## ٢. مقارنة الفلو — عندنا vs الريفرنس

### الوضع الحالي (Moon ERP):

```
طلب (pending)
  → جمع (collected)
    → تسليم (delivered) ← التريجر الأهم — بيعمل: كانبان + نتائج فاضية + تحويلات
      → كانبان: مستلمة → قيد المعالجة → مكتملة
        → نتائج: pending → entered → validated → approved → released
```

### الفلو المطلوب (بعد إعادة البناء):

```
طلب (pending)
  │
  ├─ إلغاء تحليل فردي (أي وقت قبل الإصدار) ← جديد
  ├─ إلغاء الطلب كله (مع إمكانية إعادة تفعيل) ← جديد
  │
  → جمع (collected) + طباعة باركود
  │  ├─ رفض العينة (قائمة أسباب منظمة) → إعادة جمع تلقائي + إشعار ← تحسين
  │  └─ تقسيم (aliquoting) لو أكتر من قسم ← تحسين
  │
  → تسليم (delivered)
  │  ├─ فحص بصري (hemolysis, lipemia, icterus) ← جديد
  │  ├─ كانبان لكل قسم (حسب صلاحيات الفني) ← تحسين
  │  └─ تحويل خارجي تلقائي للتحاليل الخارجية ← موجود
  │
  → كانبان (حسب القسم — الفني يشوف قسمه بس)
  │  ├─ مستلمة → بدء المعالجة
  │  ├─ قيد المعالجة → إكمال / رفض / تحويل / إعادة فحص
  │  └─ مكتملة → إدخال نتائج
  │
  → إدخال النتائج
  │  ├─ إدخال يدوي أو من الجهاز
  │  ├─ auto-verify (لو القواعد نجحت → يتخطى التحقق) ← جديد (مستني #1283)
  │  ├─ فحص دلتا (مقارنة بالنتيجة السابقة) ← جديد (مستني #1283)
  │  └─ تنبيه فوري للقيم الحرجة ← جديد (مستني #1283)
  │
  → تحقق فني (مش نفس اللي دخّل النتيجة — عيون أربعة) ← جديد
  → تحقق طبي (الباثولوجي — لو مطلوب حسب التحليل)
  → إصدار → طباعة تقرير
  │
  └─ تعديل بعد الإصدار (amendment workflow) ← تحسين
```

---

## ٣. فجوات الإلغاء (Cancellation)

### الوضع الحالي:
- إلغاء بس على مستوى الطلب كله
- بس في حالة pending أو sample_collected
- الإلغاء نهائي — مفيش إعادة تفعيل

### المطلوب (من الريفرنس):
1. **إلغاء تحليل فردي** من الطلب (مش الطلب كله)
2. **إلغاء في أي مرحلة** قبل الإصدار (مع صلاحيات مختلفة حسب المرحلة)
3. **إمكانية إعادة تفعيل** (reinstate) — الإلغاء مش نهائي
4. **حالة الطلب بتتحسب تلقائي**: لو 3 من 5 تحاليل اتلغوا → الطلب فعّال للـ 2 الباقيين
5. **التأثير على الفاتورة**: لو تحليل اتلغى قبل المعالجة → مفيش رسوم

### تاسك باك اند مطلوب:
- إضافة `cancelled` على `InvestigationStatus` enum
- endpoint: `POST /requests/{id}/investigations/{invId}/cancel`
- endpoint: `POST /requests/{id}/investigations/{invId}/reinstate`
- تحديث حساب totals تلقائي عند الإلغاء
- صلاحيات: قبل الجمع = استقبال، بعد الجمع = مشرف/مدير

---

## ٤. فجوات الرفض وإعادة الجمع (Rejection)

### الوضع الحالي:
- رفض من الكانبان بحقل نص حر
- الباك اند بيعمل عينة جديدة تلقائي (كويس)
- مفيش أسباب منظمة
- مفيش إشعار للفني

### المطلوب:
1. **قائمة أسباب رفض منظمة** (configurable):
   - Hemolyzed (محللة)
   - Lipemic (دهنية)
   - Clotted (متجلطة)
   - QNS - كمية غير كافية
   - Wrong tube type (أنبوبة خاطئة)
   - Mislabeled (خطأ في البيانات)
   - Contaminated (ملوثة)
   - Expired (تجاوزت وقت الثبات)
   - Leaking (تسريب)

2. **إشعار فوري** لفني الجمع بالإعادة
3. **تتبع عدد مرات الرفض** لكل عينة

### تاسك باك اند مطلوب:
- جدول/enum لأسباب الرفض
- إضافة `rejection_reason_code` على العينة (بدل النص الحر)
- إشعار (notification) عند الرفض

---

## ٥. فجوات التحقق من النتائج (Result Validation)

### الوضع الحالي:
- 4 خطوات: entered → validated → approved → released
- كل حاجة يدوي — مفيش auto-verify
- مفيش فحص دلتا
- مفيش تنبيه قيم حرجة
- نفس الشخص يقدر يدخل ويراجع (مفيش عيون أربعة)

### المطلوب:
1. **محرك التحقق التلقائي** (تاسك #1283 — مبعوتة للباك اند):
   - فحص المدى (النتيجة في المدى الصالح؟)
   - فحص القيم الحرجة (النتيجة حرجة؟)
   - فحص دلتا (تغيرت كتير عن آخر مرة؟)
   - فحص مراقبة الجودة (QC ناجح؟)
   - فحص أعلام الجهاز (مفيش خطأ؟)
   - لو كل القواعد نجحت → auto-verify → يتخطى المراجعة اليدوية

2. **تنبيه القيم الحرجة**:
   - popup فوري للفني
   - إشعار للباثولوجي
   - توثيق: مين اتبلّغ + إمتى + مين رد

3. **مبدأ العيون الأربعة**:
   - اللي بيدخل النتيجة ≠ اللي بيراجعها
   - الباك اند يرفض لو نفس الـ user_id

4. **تعديل بعد الإصدار (Amendment)**:
   - النتيجة القديمة تتحفظ (مبتتمسحش)
   - سبب التعديل إجباري
   - التقرير الجديد يبيّن "معدّل" + القيمتين

### تاسك باك اند مطلوب:
- #1283 (مبعوتة بالفعل) — محرك التحقق + فحص دلتا
- تاسك جديدة: تنبيه القيم الحرجة
- تاسك جديدة: مبدأ العيون الأربعة (entered_by ≠ validated_by)
- تاسك جديدة: Amendment workflow (result_amendments table)

---

## ٦. الصلاحيات والأدوار (Roles & Permissions)

### الأدوار المطلوبة:

| الدور | الوصف | الشاشات اللي يشوفها |
|-------|-------|---------------------|
| **موظف استقبال** (Receptionist) | تسجيل مرضى + إنشاء طلبات + فوترة | الويزارد + المرضى + الفواتير |
| **فني جمع عينات** (Phlebotomist) | جمع العينات + طباعة باركود | شاشة الجمع فقط |
| **فني مختبر** (Lab Technician) | إدخال نتائج — قسمه بس | الكانبان (قسمه) + النتائج (قسمه) |
| **مشرف قسم** (Section Head) | مراجعة + إلغاء + رفض — قسمه | كل حاجة في قسمه |
| **أخصائي باثولوجي** (Pathologist) | موافقة + إصدار + تعديل | النتائج + التقارير |
| **مدير المختبر** (Lab Director) | كل حاجة | كل الشاشات |
| **محاسب** (Billing) | فواتير + مدفوعات | الفواتير + المدفوعات |
| **مسؤول جودة** (Quality Officer) | مراقبة جودة + تدقيق | QC + Compliance + تقارير |

### التحكم حسب القسم (Section-Based Access):
- الفني في قسم أمراض الدم **يشوف بس** تحاليل أمراض الدم
- مفيش حاجة من قسم الكيمياء تظهرله
- المشرف يشوف كل التحاليل في قسمه
- المدير يشوف كل الأقسام

### تاسك باك اند مطلوب:
- ربط المستخدم بقسم/أقسام (`user_sections` pivot)
- فلترة الكانبان والنتائج حسب أقسام المستخدم
- صلاحيات مفصلة: `lis.results.enter`, `lis.results.validate`, `lis.results.approve`, `lis.results.release`
- فحص العيون الأربعة: `entered_by ≠ validated_by`

---

## ٧. Score Card — التقييم الشامل

| المجال | النسبة | الأولوية | ملاحظة |
|--------|--------|---------|--------|
| دورة حياة الطلب | 75% | — | كويس — محتاج إلغاء فردي |
| دورة حياة العينة | 80% | — | كويس — محتاج aliquoting + فحص بصري |
| دورة حياة التحليل | 75% | — | كويس — محتاج إلغاء + أسباب رفض |
| دورة حياة النتيجة | 62% | — | محتاج amendment + auto-verify |
| **الإلغاء** | **30%** | 🔴 عالية | إلغاء فردي + إعادة تفعيل |
| **الرفض** | **40%** | 🔴 عالية | أسباب منظمة + إشعار |
| **التحويل الخارجي** | **70%** | 🟡 متوسطة | كويس — محتاج send endpoint (#1285) |
| **التحقق التلقائي** | **0%** | 🔴 عالية | مستني #1283 |
| **فحص دلتا** | **0%** | 🔴 عالية | مستني #1283 |
| **تنبيه القيم الحرجة** | **0%** | 🔴 عالية | تاسك جديدة مطلوبة |
| **الصلاحيات** | **30%** | 🔴 عالية | أدوار + أقسام + عيون أربعة |
| **العيون الأربعة** | **0%** | 🟡 متوسطة | تاسك باك اند |
| **Aliquoting** | **0%** | 🟡 متوسطة | الباك اند جاهز — الفرونت ناقص |
| **تتبع العينات** | **50%** | 🟡 متوسطة | الموديلز موجودة |
| **المتوسط العام** | **~40%** | | من المعيار الصناعي |

---

## ٨. خطة التنفيذ

### الاستراتيجية: فرونت اند أولاً → باك اند تاسكات مجمعة

**ليه؟**
- الباك اند 80% مظبوط — التعديلات إضافات
- لما نبني الشاشات هنكتشف كل الفجوات مع بعض
- نبعت تاسكات مجمعة لأحمد — أقل ذهاب وإياب
- نشتغل بالـ API الحالي + نضيف الميزات الجديدة لما تجهز

### التقسيم (5 أجزاء):

#### الجزء 2.1: Request Wizard (ويزارد الطلب)
- إعادة بناء من الصفر بـ sub-components
- Stepper واضح + ملخص دائم
- تحسين اختيار التحاليل (AutoComplete + categories)
- تحسين الباقات (كاردات + توفير)
- شاشة مراجعة قبل الإرسال
- **باك اند مطلوب**: إلغاء تحليل فردي

#### الجزء 2.2: Sample Collection (جمع العينات)
- إعادة بناء من الصفر
- باركود ريدر auto-focus
- كاردات ملونة حسب نوع العينة
- جمع الكل بضغطة واحدة
- تحسين الرفض (أسباب منظمة)
- **باك اند مطلوب**: أسباب رفض منظمة + إشعار

#### الجزء 2.3: Kanban Board (لوحة المعالجة)
- إعادة بناء من الصفر بـ sub-components
- ألوان حسب الأولوية
- فلترة حسب القسم (section-based access)
- إدخال نتائج محسّن (panels + keyboard shortcuts)
- auto-refresh بدون قطع الشغل
- **باك اند مطلوب**: section-based access + عيون أربعة

#### الجزء 2.4: Results (النتائج)
- إعادة بناء من الصفر
- Spreadsheet-style entry (Tab/Enter navigation)
- ألوان حسب الحالة + أعلام ملونة
- Panels collapsible
- أزرار progressive (تحقق → موافقة → إصدار)
- **باك اند مطلوب**: auto-verify + delta check + critical alerts + amendment

#### الجزء 2.5: Print & Reports (الطباعة والتقارير)
- تحسين PDF (حقول الباثولوجي + التوقيع)
- Print Queue محسّن
- طباعة إذن تحويل (Referral Slip)

### الترتيب المقترح:
```
2.1 Request Wizard  → 2.2 Samples → 2.3 Kanban → 2.4 Results → 2.5 Print
     (3-4 أيام)      (2-3 أيام)    (3-4 أيام)   (3-4 أيام)   (1-2 يوم)
```

بعد كل جزء → نبعت تاسكات الباك اند المطلوبة.

---

## ٩. ملف المقارنة التفصيلي

المقارنة الكاملة مع الأنظمة العالمية محفوظة في:
`/home/moonui/public_html/moon-erp/LIS-COMPARISON-FRAMEWORK.md` (782 سطر)

المصادر:
- HL7 FHIR R5 specifications
- OpenELIS Global 2 source code
- Bika LIMS / SENAITE workflow definitions
- CLSI/CAP standards
- ISO 15189
- Cerner PathNet / Epic Beaker / Sunquest documentation

---

## ١٠. تاسكات الباك اند المطلوبة (ملخص — تتبعت بعد خلاص الفرونت)

| # | الوصف | الأولوية | مرتبطة بجزء |
|---|-------|---------|-------------|
| 1 | إلغاء تحليل فردي من الطلب + إعادة تفعيل | عالية | 2.1 |
| 2 | أسباب رفض منظمة (enum/table) | عالية | 2.2 |
| 3 | إشعار فني الجمع عند الرفض | متوسطة | 2.2 |
| 4 | ربط المستخدم بأقسام (section-based access) | عالية | 2.3 |
| 5 | مبدأ العيون الأربعة (entered_by ≠ validated_by) | متوسطة | 2.3/2.4 |
| 6 | تنبيه القيم الحرجة (critical value alerts) | عالية | 2.4 |
| 7 | Amendment workflow (تعديل بعد الإصدار) | متوسطة | 2.4 |
| — | #1283 محرك التحقق التلقائي + فحص دلتا | عالية | 2.4 (مبعوتة) |
| — | #1284 مراقبة الأجهزة + سجل اتصالات | متوسطة | — (مبعوتة) |
