الحجز والاستقبال — دمج «إضافة الزيارة» و«قائمة الزيارات» في شاشة واحدة

Booking & Reception merge — initial design for client approval · ISS-2026-9107
🎫 ISS-2026-9107 «الحجز والاستقبال» 🔧 تحسين / Improvement 🎨 اتفاق على التصميم أولًا — لا كود قبل الموافقة 🖥️ /app/clinic/booking (تتغيّر) 🔒 /app/clinic/appointments (تفضل كما هي)

① المشكلة / الطلب

طلب العميل إعادة هيكلة صفحة الحجز (/app/clinic/booking) بحيث تصبح البيانات مضغوطة ومنظمة ومركّزة بدل التوزيع الحالي الواسع:

هدف هذه الوثيقة: الاتفاق على «شكل مبدئي» للتصميم قبل أي تنفيذ — كما طلب العميل نصًّا: «نريد أن نتفق على شكل مبدئي للتصميم ثم ننفذ».
EN — The client wants the booking page restructured: a dense legacy-style "add visit" form occupying the top ~quarter of the screen (mirroring the attached sketch's field set, incl. Add / Add-with-check-in buttons), with the appointments list shown directly below it — with inline edit + delete — so reception works from one fast screen. The standalone /clinic/appointments page remains untouched. This document is the design-agreement deliverable: no production code until the shape is approved.

② الوضع الحالي

أ) نموذج الحجز الحالي — FE

الملفات: src/app/features/clinic/booking/create-visit.component.ts (≈1520 سطر) + create-visit.component.html + create-visit.component.scss.

ب) قائمة الحجوزات الحالية — FE

الملفات: src/app/features/clinic/appointments/clinic-appointments.component.ts (≈420 سطر) + clinic-appointments.component.html + .scss — الراوت /app/clinic/appointments.

ج) مكوّن ثالث ذو صلة — طابور الاستقبال الحي

يوجد أيضًا features/clinic/shared/visit-queue (شاشة /app/clinic/queue ولوحة العيادة) — وهو طابور حي (من وصل ومن عند الدكتور)، مختلف عن «قائمة حجوزات اليوم». التذكرة 9107 تخص قائمة الحجوزات تحت النموذج، وليس الطابور الحي — وهذا أحد قرارات القسم ④.

الشاشةالراوتالملفاتمصيرها في 9107
نموذج الحجز/app/clinic/booking features/clinic/booking/create-visit.component.{ts,html,scss} يُعاد تشكيله نموذج مكثّف بالأعلى + قائمة بالأسفل
قائمة الحجوزات/app/clinic/appointments features/clinic/appointments/clinic-appointments.component.{ts,html,scss} تبقى كما هي ويُعاد استخدام جوهرها داخل صفحة الحجز
الطابور الحي/app/clinic/queue features/clinic/shared/visit-queue خارج نطاق 9107
EN — Today the booking form is a spacious two-column wizard (patient search → visit details + service cards, with a summary/payment rail) at features/clinic/booking/create-visit.component.*, carrying recent server-quoted-pricing work that must survive the redesign. The appointments list at features/clinic/appointments/clinic-appointments.component.* has date/status/doctor filters and Arrive / Start-consultation row actions — but no inline edit/delete yet. The live queue (shared/visit-queue) is a different component and stays out of scope.

③ التصميم المقترح — المعاينة

قبل ← بعد

قبل — شاشتان منفصلتان
/clinic/bookingمعالج واسع بعمودين + سلة ملخص — يملأ الشاشة كلها
/clinic/appointmentsقائمة الحجوزات في صفحة أخرى — تنقّل ذهاب/عودة لكل مريض
بعد — شاشة استقبال واحدة (/clinic/booking)
صفحة واحدة
▲ الربع العلوي: نموذج «تسجيل زيارة» مكثّف (شبكة الرسمة المرفقة) + «إضافة» / «إضافة مع دخول»
▼ الباقي: زيارات اليوم مباشرة — الزيارة الجديدة تظهر فورًا، مع وصول/بدء/تعديل/حذف على كل صف
/clinic/appointmentsتبقى كما هي بدون تغيير (لمن يريد شاشة القائمة وحدها)

المعاينة الكاملة — الشكل بعد التنفيذ (بيانات وهمية للتوضيح)

نفس كثافة الرسمة المرفقة لكن بهوية Moon ERP (تيل / PrimeNG Aura). الحقول الرمادية محسوبة تلقائيًا، وصف «شادية عبد الحميد سالم» هو زيارة أُضيفت للتو من النموذج وظهرت فورًا في أول القائمة.

https://moonui3.elbaset.com/app/clinic/booking

🗂️ الحجز والاستقبال

تسجيل زيارة وإدارة حجوزات اليوم — من مكان واحد Enter = إضافة مع دخول
تسجيل زيارة جديدة نقدي جهة الدفع: كاش
10482
👤 شادية عبد الحميد سالم MRN-10482 أنثى · 01001234567 ✕ تغيير
كشف استشاري
الباطنة
د. محمد عبد الرازق
2026/07/16 📅
11:30 ص
قيمة الكشف
600.00
50.00
550.00
0.00
0.00
▾ تفاصيل إضافية (الطبيب المحوِّل، المساعد، التعاقد، ملاحظات)
لا يوجد
اختر…
لا يوجد
0.00
مثال: حالة متابعة بعد العملية…
طلبات مصاحبة: 🧪 معمل · CBC + سكر صائم (2) + 🩻 أشعة + 💊 الصيدلية
الإجمالي المستحق: 780.00 (كشف 550 + معمل 230 — تسعير السيرفر) مسح ↺ إضافة ✓ إضافة مع دخول
زيارات اليوم 7 زيارات 📅 2026/07/16 الحالة: الكل الطبيب: الكل
#الدورالمريضالطبيبالقسمالوقت الحالةالدفعالإجراءات
A-1027 12 شادية عبد الحميد سالمMRN-10482أُضيفت الآن د. محمد عبد الرازق الباطنة 11:30 وصلت مدفوع ▶ بدء الكشف ✎ تعديل 🗑
A-1026 أحمد سمير الجنديMRN-10311 د. هالة مصطفى الجلدية 12:00 محجوز غير مدفوع 📍 وصول ✎ تعديل 🗑 حذف
A-1025 11 منى إبراهيم الدسوقيMRN-09877 د. محمد عبد الرازق الباطنة 11:15 في الكشف مدفوع ↗ فتح الكشف 🗑
A-1024 10 عبد الرحمن خالد فهميMRN-10455 المعمل 11:05 وصل جزئي 🧪 الطلب ✎ تعديل 🗑
A-1023 ياسمين عادل توفيقMRN-10102 د. شريف النبراوي العظام 13:30 محجوز غير مدفوع 📍 وصول ✎ تعديل 🗑 حذف
A-1022 9 حسن عبد الله مرعيMRN-08240 د. هالة مصطفى الجلدية 10:40 انتهى مدفوع ↗ فتح الكشف 🗑
✎ التعديل بصلاحية clinic.appointment.update · 🗑 الحذف بصلاحية مستقلة ولا يتاح بعد الدفع/الدخول عرض 6 من 7 · القائمة الكاملة ↗

أهم أفكار الشكل

EN — Proposed layout: a dense grid "add visit" panel (top ~quarter) mirroring the client's sketch — identity/service row, timing + a bordered "consultation fee" group (total/discount/cash/visa/remaining), secondary fields behind a collapsible "more details" row, lab/rad orders as compact chips, and two actions: Add and the primary Add + check-in. Below it, today's visits list reusing the existing appointments component in embedded mode, with the current Arrive/Start actions plus new inline Edit and Delete (state-guarded: no delete once paid/checked-in). All money stays server-quoted. The standalone appointments page is untouched.

④ قرارات وأسئلة نحتاج موافقتك عليها

س١ — أي الحقول تبقى ظاهرة دائمًا في النموذج العلوي، وأيها خلف «تفاصيل إضافية»؟

حتى يلتزم النموذج بربع الشاشة، لا يمكن إظهار كل حقول الرسمة دفعة واحدة على الشاشات المتوسطة.

توصيتنا ظاهر دائمًا: اسم الحالة، رقم الحالة (تلقائي)، نوع الكشف، القسم، الطبيب، التاريخ/الوقت، ومجموعة قيمة الكشف (الإجمالي/الخصم/كاش/فيزا/المتبقي). خلف «تفاصيل إضافية ▾»: الطبيب المحوِّل، الطبيب المساعد، تابع لـ، سعر التعاقد، الملاحظات — ويُفتح الصف تلقائيًا لو للمريض تعاقد تأميني.

س٢ — القائمة السفلية: قائمة الحجوزات أم الطابور الحي؟

عندنا مكوّنان مختلفان: «قائمة حجوزات اليوم» (appointments) و«الطابور الحي» (queue — من وصل ومن عند الدكتور).

توصيتنا قائمة الحجوزات — بإعادة استخدام مكوّن clinic-appointments الحالي في وضع مدمج (بلا ترويسة صفحة)، لأنها هي التي تحمل التعديل/الحذف وحالة الدفع المطلوبين. الطابور الحي يبقى في شاشته ولوحة العيادة كما هو.

س٣ — «إضافة مع دخول» تعني إيه بالضبط؟

هل الزر يسجّل الحجز فقط أم يسجّل الوصول أيضًا؟

توصيتنا «إضافة مع دخول» = إنشاء الزيارة + تسجيل الوصول فورًا (حالة «وصل» + رقم دور في طابور العيادة) في ضغطة واحدة — وهو حال أغلب زيارات الاستقبال الفورية. «إضافة» وحدها = حجز بحالة «محجوز» (لموعد لاحق أو حجز تليفوني). الدخول لغرفة الكشف نفسها يظل بيد الطبيب/«بدء الكشف».

س٤ — صلاحيات التعديل والحذف في القائمة؟ وحدود الحذف؟

التعديل والحذف inline جديدان ويحتاجان مفاتيح صلاحيات وقواعد أمان.

توصيتنا التعديل بمفتاح clinic.appointment.update الموجود (نفس صلاحية «وصول»)، والحذف بمفتاح جديد مستقل clinic.appointment.delete يُمنح للمشرفين فقط. الحذف = إلغاء ناعم (soft cancel بحالة «ملغي» + سبب) وليس مسحًا من قاعدة البيانات، ولا يُتاح إطلاقًا بعد الدفع أو بعد تسجيل الوصول — عندها يكون المسار «استرداد من الكاشير» وليس حذفًا.

س٥ — حقل «القسم» ومقاسه على المعمل والأشعة؟

الرسمة تُظهر القسم والأطباء دائمًا، لكن زيارات المعمل/الأشعة الصِّرفة لا تحتاج طبيبًا ولا قسمًا سريريًا.

توصيتنا القسم والطبيب مطلوبان فقط عندما «نوع الكشف» استشارة/كشف؛ لو الزيارة معمل أو أشعة فقط (عبر رقائق «+ معمل / + أشعة» بلا كشف) يُعطَّل الحقلان تلقائيًا ويُكتفى بالمريض + الطلب + الدفع — كما هو منطق الشاشة الحالية.

EN — Five decisions: (1) always-visible vs collapsed fields — core identity/service/fee visible, referring/assistant/contract/notes collapsed; (2) bottom list = appointments list (reused component), not the live queue; (3) "Add + check-in" = create visit AND mark arrived with a queue number in one click, plain "Add" = booked only; (4) edit reuses clinic.appointment.update, delete gets a new clinic.appointment.delete key and is a soft cancel, blocked once paid/arrived; (5) department/doctor required only for consultation-type visits, auto-disabled for lab/radiology-only visits.

⑤ نطاق مبدئي

✅ داخل النطاق (In-Scope)

  • إعادة تشكيل /app/clinic/booking: نموذج مكثّف بالأعلى (≈ ربع الشاشة) بمجموعة حقول الرسمة.
  • زرّا «إضافة» و«إضافة مع دخول» بالسلوك المتفق عليه في س٣.
  • تضمين قائمة زيارات اليوم أسفل النموذج (إعادة استخدام مكوّن الحجوزات في وضع مدمج) مع تحديث فوري بعد الإضافة.
  • إجراءا تعديل وحذف (إلغاء ناعم) inline بالصلاحيات المتفق عليها في س٤ — يظهران أيضًا تلقائيًا في صفحة الحجوزات المستقلة كونهما في المكوّن المشترك.
  • الحفاظ على كل السلوك المالي السيرفري الحالي (quote، تسعير المعمل، الدفع الجزئي، طرق الدفع من الإعدادات).

🚫 خارج النطاق (Out-of-Scope)

  • أي تغيير في شكل أو سلوك صفحة /app/clinic/appointments المستقلة (تبقى كما هي؛ الاستثناء الوحيد: ظهور زرّي تعديل/حذف الجديدين إن وافق العميل عليهما في المكوّن المشترك).
  • الطابور الحي /app/clinic/queue ولوحة العيادة.
  • شاشة الكاشير وتدفق الاسترداد.
  • وحدة الصيدلية (رقاقة «+ الصيدلية» في المعاينة مستقبلية — تُفعَّل فقط لو موجودة في النسخة).
  • تعديل منطق التسعير أو الخصومات في السيرفر.

معايير القبول (Acceptance Criteria)

EN — In-scope: restructure /clinic/booking (dense top form + embedded today's list + inline edit/soft-delete, instant refresh, both add buttons), preserving all server-quoted pricing behavior. Out-of-scope: the standalone appointments page's look/behavior, the live queue, cashier/refunds, pharmacy module, and server pricing logic. Acceptance: full visit entry without scrolling at 1366×768; add-with-check-in lands in the list within a second as "arrived" with a queue number; delete is a reasoned soft-cancel, blocked once paid/arrived.

Moon ERP · ISS-2026-9107 · وثيقة اتفاق على التصميم — 2026/07/16 · لا يُكتب أي كود إنتاجي قبل اعتماد هذا الشكل