إعادة تصميم لوحة العيادة — تحليل قبل التنفيذ

Clinic Dashboard Redesign · analysis for client approval
🎫 ISS-2026-0187 (شكل الرأس + الإحصائيات) 🎫 ISS-2026-0188 (جدول الحجوزات + الحالات) 🖥️ /app/clinic/dashboard ⚠️ يلمس مكوّن مشترك (3 شاشات) 🚫 لا كود قبل الموافقة

① معاينة الشكل المقترح

ده تصوّر مبدئي للشكل الجديد (بيانات وهمية للتوضيح) — الموافقة على الشكل ده قبل ما نكتب أي كود. لو حابب تعدّل ترتيب أو ألوان أو أعمدة، قول وهنعدّل قبل التنفيذ.

🔍 افتح المعاينة في صفحة كاملة

أهم أفكار الشكل: عرض الحجوزات كـجدول (صف لكل مريض) بدل الكروت عشان الاستقبال يمسح بسرعة؛ الحالة بتتقري 3 طرق في نفس الوقت (لون الصف + شريط جانبي + شارة)؛ شرائح فوق الجدول لكل عيادة بعدّادها، و«الكل» بالإجمالي.

② الطلب (زي ما وصل من العميل)

ISS-2026-0187 شكل الرأس والإحصائيات

ISS-2026-0188 منطقة الحجوزات

③ الوضع الحالي (المؤكَّد بالكود)

الحاجةالموجود فعلاًالمرجع
مكوّن الطابورمشترك في 3 شاشات: لوحة العيادة، صفحة الطابور الكاملة /clinic/queue، ومحطات التمريض/الطبيب (بوضع «اختيار» بدون أزرار). أي تحويل لجدول بيأثّر على التلاتة.shared/visit-queue/*
clinic-dashboard…html:92
clinic-queue-page…ts:24
station-shell…html:6
حالات الطابورموجودة أصلاً: waiting · in_room · done · ordered + عدّادات جاهزة (waitingCount/inRoomCount/doneCount). يعني ألوان 0188 توصيل حالة موجودة مش موديل جديد.clinic-dashboard.service.ts:37,119-121
أزرار حضور/دخول/انتهاءالـتحويلات موجودة كـ API بس الأزرار مش موجودة في الطابور: حضور=POST appointments/{id}/arrive، دخول=status{in_consultation}، انتهاء=status{done}. FE دلوقتي بينادي setStatus لـ cancel/no_show بس.AppointmentController::arrive/status
TransitionAppointmentStatus.php
«دخول التالي = انتهاء السابق»مش موجود. كل تحويل بيشتغل على موعد واحد بس.TransitionAppointmentStatus.php:22-29
مصدر بيانات الطابورGET clinic/queue بيرجّع arrived + in_consultation فقطالمواعيد المحجوزة (booked) مش بتظهر. فيه بديل GET clinic/appointments?date=today بيرجّع كل الحالات.QueueController.php:54-57
اسم العيادة/الغرفةالرد فيه department{name} (التخصص) لكل صف، لكن مفيش اسم غرفة (room_id بس، وكتير null).QueueEntryResource.php:35
اسم الخدمةمش متسلسل في أي رد — service_id بس.QueueEntryResource / AppointmentResource
العيادات النشطةمفيش حقل. فيه جدول clinic_rooms (بعمود is_active) وربط department على كل موعد.ClinicRoom.php · ClinicDashboardService::headline
الرأس والتاريخالعنوان PAGE_TITLE=«لوحة العيادة». فيه أصلاً todayLabel() بيحسب تاريخ اليوم بالكامل — جاهز يتنقل جنب العنوان. المستطيل الأخضر = dash-hero.clinic-dashboard.component.html:5-10,21-40
مفاتيح الترجمةموجود أصلاً (وغير مستخدم): COL_PATIENT/DOCTOR/SERVICE/STATUS/ROOM… وSTATUS_WAITING/IN_ROOM/DONE. ناقص: حضور/دخول/انتهاء، فلتر العيادات، العيادات النشطة.i18n/{ar,en}.json → CLINIC_DASHBOARD.*

④ الفجوة (موجود ↔ مطلوب ↔ اللي هيتعمل)

البندموجودمطلوباللازم
187 تاريخ جنب العنوانتاريخ محسوب في heroجنب «لوحة العيادة»FE
187 حذف المستطيل الأخضرموجوديتشالFE
187 عدد العيادات النشطةلا شيءكارت إحصائيةBE FE
188 فلتر بالعيادات + عدّادdepartment في كل صفشرائح بعدّاد + «الكل»FE
188 جدول بدل الكروتكروت (مشترك)جدول بصف/مريضFE
188 عمود الخدمةservice_id بساسم الخدمةBE
188 أزرار حضور/دخول/انتهاءAPI موجود، أزرار لأ3 أزرار/صفFE
188 إظهار المحجوزين (booked)الطابور مابيرجّعهمشيظهروا عشان «حضور»BE FE
188 دخول التالي = انتهاء السابقلا شيءتلقائيBE
188 ألوان + فلتر الحالاتحالات + عدّاداتتلوين الصف + فلترFE

⑤ الملفات المتأثرة والاعتماديات

Frontend

Backend

⑥ الحالات الحدّية

⑦ خطة التنفيذ (حزم عمل بالترتيب)

WP1 — رأس الصفحة 187 FE

التاريخ جنب العنوان + حذف dash-hero. صغيرة ومستقلة.

WP2 — عدد العيادات النشطة 187 BEFE

حقل active_clinics (عدد الأقسام المميّزة اللي عليها زيارات النهاردة) + كارت KPI جديد.

WP3 — إثراء بيانات الطابور 188 BE

تسلسل service{name} و مفتاح العيادة باسمه، وتضمين المحجوزين (قرار D1).

WP4 — الجدول + الأزرار + الألوان 188 FE

تحويل المكوّن المشترك لجدول، أزرار حضور/دخول/انتهاء موصّلة بالـAPI، تلوين الصف بالحالة، مع الحفاظ على وضع المحطات.

WP5 — فلتر العيادات + فلتر الحالات 188 FE

شرائح لكل عيادة بعدّادها + «الكل»، وفلتر بالـ3 حالات.

WP6 — دخول التالي = انتهاء السابق 188 BE

في TransitionAppointmentStatus: عند التحويل لـ in_consultation، إقفال أي موعد آخر «بالداخل» بنفس النطاق (قرار D3) داخل ترانزاكشن + اختبار انحدار.

كل حزمة تتراجع بـ code-review، والبناء يفضل أخضر، والميجريشن (لو فيه) على قاعدة التطوير في نفس الخطوة.

⑧ قرارات محتاجة موافقتك

D1 — إظهار المواعيد المحجوزة في الجدول

عشان زر «حضور» يشتغل، الجدول لازم يعرض المواعيد المحجوزة (booked) — والطابور الحالي مابيعرضهاش. مقترحي: نوسّع مصدر الجدول يعرض كل مواعيد اليوم (محجوز/حاضر/بالداخل/منتهي) من غير الملغي.

التوصية: نعرض المحجوزين كمان — يبقى الجدول لوحة كاملة لليوم من الحجز للانتهاء.

D2 — «العيادة» تتعرّف إزاي (للفلتر وللعدّاد)؟

«العيادة» ممكن تكون القسم/التخصص (موجود ومضمون على كل موعد) أو الغرفة الفعلية (كتير فاضية بلا اسم). لازم الفلتر والعدّاد يستخدموا نفس المفتاح.

التوصية: القسم/التخصص — متاح دايمًا ومتسق. (لو تقصد الغرف الفعلية، محتاجين نظبّط أسماء الغرف الأول.)

D3 — «السابق» اللي بيتقفل تلقائيًا نطاقه إيه؟

لما تدخل الحالة التالية، نقفل أنهي حالة سابقة؟ بتاعة نفس الطبيب (الطبيب بيشوف مريض واحد في المرة) ولا نفس الغرفة؟

التوصية: نفس الطبيب — هو الأقرب لمعنى «الحالة اللي جوه دلوقتي».

D4 — نطاق تطبيق الجدول

المكوّن مشترك. نطبّق الجدول الجديد على لوحة العيادة + صفحة الطابور الكاملة (شكل موحّد)، ونحافظ على وضع «الاختيار» في محطات التمريض/الطبيب زي ما هو.

التوصية: جدول في اللوحة والطابور، والمحطات زي ما هي.

الخلاصة: الشكل جاهز للمراجعة فوق، والحالات موجودة في النظام أصلاً فالتنفيذ مباشر نسبيًا. محتاج بس موافقتك على الشكل + قرارات D1–D4، وبعدها نبدأ التنفيذ بالترتيب.