🔬 تحليل متطلبات عميل المختبر — Developer Backlog v5
مراجعة فنية لكل بند بعته العميل، تحقّق فعلي من كود نظام Moon ERP / LIS وبياناته الحيّة، ثم خطة تنفيذ متكاملة.
📅 المراجعة: 2026-05-21📋 18 بند من العميل🌐 تحقّق حي على moon-erp.elbaset.com📂 الموديول: LIS (المختبر)
① ما الذي بعته العميل؟
العميل (مختبر) أرسل وثيقة بعنوان "قائمة المتطلبات والمشاكل البرمجية — Developer Backlog v5" — ثنائية اللغة، فيها 18 بند موزّعة على 5 أقسام، كل بند مُصنّف من العميل كـ (عطل / ميزة / تعديل / لغة / تحديث جديد):
القسم
عدد البنود
المحتوى
1. تسجيل المرضى والفواتير
3
نموذج إضافة مريض · ضريبة VAT على الفواتير · أيقونة واتساب
2. الأعطال البرمجية
3
طباعة الفواتير · بحث المريض في التجميع · تقرير السائل المنوي
3. تقارير ناقصة
3
صورة الدم (CBC) · البراز · البول — ناقصة معاملات
4. اللغة وتنسيق التقرير
4
أسماء الفحوصات/الأجهزة بالإنجليزية · ضبط تقرير المختبر · توقيعات/أختام لكل مستخدم
5. سير العمل و B2B
5
أقسام قائمة العمل · تعليق العينة · بوابات إلكترونية · مطالبات B2B الشهرية · أداة تعديل الباقات
الخلاصة الأولية: كل الـ 18 بند منطقية وسليمة لمختبر يعمل في السعودية. لكن عند التحقق الفعلي من الكود — ليست كلها "أعطال": بعضها موجود فعلاً، بعضها مشكلة بيانات (إدخال) وليس كود، وبعضها مزايا جديدة تحتاج بناء.
② نتيجة التحقق — تصنيف الـ 18 بند
3موجود فعلاً ✅
4عطل كود حقيقي 🐛
4مشكلة بيانات 📊
3ميزة جديدة ✨
4جزئي / ضبط 🎨
نقطة مهمة جداً: بنود "التقارير الناقصة" (CBC / البراز / البول / السائل المنوي) ليست أعطال برمجية — النظام يدعم الباقات (Panels) بالكامل. المشكلة أن البيانات المستوردة من النظام القديم ناقصة: باقات فاضية أو أعضاء ناقصين. الحل = إدخال بيانات عبر أداة تعديل الباقات الموجودة بالفعل (البند 18) — مش تعديل كود.
③ القسم 1 — تسجيل المرضى والفواتير
1نموذج "إضافة مريض جديد" بجانب "الإضافة السريعة"
موجود فعلاً
العميل: إضافة خيار "إضافة مريض جديد" بجانب "الإضافة السريعة" + الحقول: الاسم، العمر، الجنس، الهاتف، الهوية (سعودي/غير سعودي للضريبة)
الواقع
الزرّان موجودان بالفعل — patients/lis-patients.component.html:11-19 (Quick Add + New). كل الحقول موجودة: name, gender, date_of_birth (العمر يُحسب من تاريخ الميلاد), phone, national_id, national_id_type (هوية/إقامة/جواز).
الناقص
مفيش flag صريح "سعودي/غير سعودي" مربوط بحساب الضريبة. الجنسية تُستنتج ضمنياً من نوع الهوية فقط. منطقي — قواعد إعفاء VAT تحتاج علامة جنسية واضحة.
العميل: الفواتير الحالية لا تشمل ضريبة؛ مطلوب حساب وإظهار VAT
الواقع
موديل الفاتورة فيه حقول الضريبة (tax لكل بند، tax_amount للفاتورة) والواجهة تعرضها — لكن فقط @if (tax_amount > 0). الـ CreateLisInvoice لا يرسل أي مدخل ضريبة، والإجماليات تُحسب في الـ backend بدون نسبة VAT. عملياً الفواتير تظهر ضريبة = صفر.
الأثر
مختبر سعودي ملزم بضريبة 15% — ده التزام قانوني.
الإجراء
تذكرة backend لأحمد: حساب VAT 15% على بنود الفاتورة + الإعفاء حسب جنسية المريض (يرتبط بالبند 1). الواجهة جاهزة للعرض.
3أيقونة الإرسال عبر واتساب للتقارير والفواتير
عطل / ناقص
العميل: إضافة/إصلاح أيقونة إرسال عبر واتساب
الواقع
مفيش أي زر/أيقونة واتساب في موديول LIS كله — grep "whatsapp|wa.me" = صفر نتائج.
الإجراء
إضافة زر "إرسال واتساب" في الفواتير وصفحة النتائج — يفتح wa.me/<phone> برسالة + رابط التقرير/الفاتورة. عمل frontend بسيط.
④ القسم 2 — الأعطال البرمجية
4طباعة الفواتير لا تعمل
عطل مؤكد
العميل: ميزة طباعة الفواتير لا تعمل وتحتاج إصلاح فوري
الواقع
مؤكد — invoices/lis-invoices.component.ts مفيهوش أي كود print/pdf/generateReport. أزرار الفاتورة: post/cancel فقط — مفيش زر طباعة. توليد الـ PDF موجود لكنه مربوط بصفحة النتائج فقط، مش الفواتير.
الإجراء
بناء طباعة فاتورة LIS — قالب PDF (header/footer/logo) + زر طباعة. ممكن نعيد استخدام بنية LisReportPdfService.
5وحدة التجميع — البحث عن المريض بالاسم/الرقم لا يعمل
عطل frontend
العميل: استقبال المريض والبحث عنه بالاسم أو الـ ID لا يعمل في وحدة التجميع
الواقع
صفحة التجميع samples/lis-samples.component.ts:237 — الـ onBarcodeScan() يطابق request_number فقط. الـ backend (LabRequestController.php:80) يدعم البحث بالاسم/MRN — لكن الواجهة لا تستغله، فلو أدخلت اسم تظهر "barcode not found".
الإجراء
تعديل frontend: وضع بحث يقبل اسم المريض / MRN / رقم الطلب (الـ backend جاهز).
6تقرير السائل المنوي لا يعمل / لا يظهر بيانات
مشكلة بيانات
العميل: نظام تقرير السائل المنوي لا يعمل
الواقع (تحقق حي)
فحص "تحليل السائل المنوي" (id=235) — هو panel لكن بـ 0 أعضاء (panel_members=0). الباقة فاضية تماماً → التقرير يطلع فاضي. مش عطل كود — البيانات المستوردة من النظام القديم ناقصة.
الإجراء
إدخال أعضاء باقة السائل المنوي (الحجم، العدد، الحركة، الشكل الطبيعي، اللزوجة...) عبر أداة تعديل الباقات (البند 18). كذلك "السائل النخاعي" id=244 و "أهبة التخثر" id=296 فاضيين.
⑤ القسم 3 — التقارير الناقصة (مشكلة بيانات وليست كود)
تحقّق حي على بيانات النظام: النظام فيه 18 باقة (Panel). الإطار البرمجي للباقات يعمل 100%. المشكلة في اكتمال البيانات المستوردة.
الباقات استوردت من النظام القديم بأعضاء ناقصين. الإطار (Panels + Members + Reference Ranges) شغّال — لكن البيانات ناقصة.
مشكلة إضافية مكتشفة
أعضاء باقة CBC الـ 11 كلهم name_en = "Complete Blood Count" (اسم الأب!) بدل أسماءهم الصحيحة (WBC, RBC, Hemoglobin...). خطأ في الاستيراد. كذلك معظم الباقات بـ 0 normal_ranges (مفيش معدلات مرجعية).
الإجراء
عملية تنظيف بيانات: استكمال أعضاء الباقات + تصحيح أسماءهم الإنجليزية + إدخال المعدلات المرجعية. تتم عبر أداة الباقات الموجودة (البند 18) — وقد نعمل سكربت استيراد جماعي لتسريعها.
⑥ القسم 4 — اللغة وتنسيق التقرير
10أسماء الفحوصات بالإنجليزية
جزئي
العميل: كل أسماء الفحوصات تظهر بالإنجليزية
الواقع
التقارير المطبوعة تستخدم الإنجليزية بالفعل (getInvNameEn()). لكن شاشات النظام (إدخال النتائج، القوائم) تتبع لغة الواجهة — لو عربي تظهر عربي. كل الـ 297 فحص له name_en معبأ — لكن أعضاء الباقات أسماءهم الإنجليزية غلط (راجع 7-9).
الإجراء
قرار: هل الإنجليزية إجبارية في الشاشات حتى لو الواجهة عربية؟ + تصحيح name_en لأعضاء الباقات.
11أسماء الأجهزة بالإنجليزية
موجود فعلاً
الواقع
موديل الجهاز فيه name_en و name_ar. تعديل ربط بسيط لعرض الإنجليزية. مش ميزة ناقصة.
12ضبط تنسيق تقرير المختبر (هيدر/فوتر/محتوى)
ضبط مقبول
العميل: التنسيق "مقبول" كإطار، لكن مطلوب إعادة ضبط الهيدر والفوتر ومحاذاة المحتوى
الواقع
تقرير الـ PDF (lis-report-pdf.service.ts) أُعيد تصميمه مؤخراً بنمط NASLAB — هيدر بشعار، فوتر بـ Verified/Printed، جدول بـ 5 أعمدة، فواصل صفحات. العميل أكّد إنه "مقبول" — يطلب فقط ضبط دقيق للمحاذاة والمسافات.
الإجراء
polish — جلسة ضبط بصري للهيدر/الفوتر/محاذاة الأعمدة بعد ما العميل يحدد بالضبط ما يريد ضبطه.
13توقيعات/شعارات/أختام رقمية لكل مستخدم
ميزة جديدة
العميل: رفع وإدارة توقيعات رقمية وشعارات وأختام مخصصة لكل مستخدم
الواقع
مفيش — الـ PDF يأخذ شعار شركة واحد فقط. مفيش رفع/إدارة توقيع أو ختم لكل مستخدم. مفيش حقول توقيع/ختم على موديل المستخدم.
الإجراء
ميزة جديدة: رفع توقيع + ختم لكل مستخدم (تذكرة backend لحقول التخزين + frontend للرفع والإدارة) — التقرير يستخدم توقيع الطبيب المعتمِد.
⑦ القسم 5 — سير العمل و B2B
14قائمة العمل — إضافة كل الأقسام الطبية
جزئي / بيانات
الواقع
قوائم العمل (worklist/kanban) تحمّل الأقسام ديناميكياً من الـ API. تظهر كل الأقسام لو كانت مُسجّلة كـ Lab Sections. "أقسام ناقصة" = أقسام لم تُنشأ في البيانات الأساسية. الإجراء: مراجعة قائمة الأقسام وإضافة الناقص.
15تعليق/إيقاف العينة مؤقتاً (Sample Hold)
ناقص
الواقع
صفحة التجميع فيها collect/aliquot/reject — لكن مفيش "تعليق/إيقاف مؤقت". منطقي — المختبر يحتاج تعليق عينة (انتظار دفع، عينة متجلطة، إعادة سحب) دون رفضها.
الإجراء
إضافة أيقونة/إجراء "تعليق العينة" + حالة hold. يُفضّل تأكيد إن الـ backend (10 حالات للعينة) فيه حالة on-hold.
16بوابة المرضى وبوابة الشركات B2B
ميزة كبيرة
الواقع
"بوابة المرضى" الحالية = شاشة بحث داخلية للموظف، مش بوابة self-service للمريض بتسجيل دخول. بوابة المختبرات الخارجية موجودة لكنها للإحالات (referrals)، مش بوابة B2B لعملاء الشركات.
الإجراء
مشروع منفصل: بوابة مريض (login + نتائجه/فواتيره) + بوابة B2B لعملاء الشركات. حجم كبير — إبيك مستقل.
17نظام محاسبي لمطالبات B2B الشهرية
ميزة كبيرة
الواقع
يوجد جزئياً — فوترة التأمين الشهرية موجودة (insurance-invoices — تجميع شهري). لكن مفيش مطالبات شهرية مُجمّعة لعملاء B2B/المختبرات الخارجية، ومفيش مستند مطالبة بنفس تصميم تقرير المختبر.
الإجراء
بناء موديول مطالبات B2B الشهرية (تجميع + توليد مطالبة بتصميم التقرير المعتمد). يحتاج backend + frontend.
18أداة تعديل محتويات الباقات (Panel Tests)
موجود فعلاً
الواقع
موجود — صفحة الفحوصات فيها addPanelMembers/removePanelMember/updatePanelMembers → PUT /lis/investigations/{id}/panel-members. الباقات المستوردة من النظام القديم قابلة لإعادة التكوين. هذه الأداة هي الحل للبنود 6-9.
⑧ الخطة المتكاملة
يوم 1-2
المرحلة 0 — تنظيف البيانات (الأهم — يحل 4 بنود فوراً)
الرسالة للعميل: كل ملاحظاتك سليمة ومنطقية. لكن النظام أقوى مما يبدو — معظم "الأعطال" في قسم التقارير هي بيانات ناقصة من النظام القديم (نُصلحها بإدخال بيانات سريع، يومين)، والأعطال الكودية الحقيقية 4 فقط وبسيطة. المزايا الكبيرة (البوابات + مطالبات B2B) نخطّط لها كمشاريع منفصلة بجدول واضح.