🎫 ISS-2026-9107 «الحجز والاستقبال»🔧 تحسين / Improvement🎨 اتفاق على التصميم أولًا — لا كود قبل الموافقة🖥️ /app/clinic/booking (تتغيّر)🔒 /app/clinic/appointments (تفضل كما هي)
① المشكلة / الطلب
طلب العميل إعادة هيكلة صفحة الحجز (/app/clinic/booking) بحيث تصبح البيانات
مضغوطة ومنظمة ومركّزة بدل التوزيع الحالي الواسع:
الربع العلوي من الصفحة ≈ نموذج «إضافة زيارة» مكثّف على طريقة النظام القديم الذي أرفق العميل صورته
(شبكة صفوف متلاصقة: رقم الحالة، اسم الحالة، نوع الكشف، قيمة الكشف بتفصيلة الإجمالي/الخصم/كاش/فيزا/المتبقي،
تاريخ ووقت الزيارة، القسم، الطبيب، الطبيب المحوِّل، الطبيب المساعد، تابع لـ، سعر التعاقد، ملاحظات)
مع زرّي «إضافة» و«إضافة مع دخول».
أسفل النموذج مباشرة: قائمة الزيارات/الحجوزات (الموجودة اليوم في صفحة مستقلة
/app/clinic/appointments) بصلاحيات تعديل وحذف على مستوى الصف —
بحيث يضيف موظف الاستقبال الزيارة من فوق وتظهر فورًا في القائمة تحت، وكل شغل الاستقبال من مكان واحد سريع.
صفحة /app/clinic/appointments المستقلة تبقى كما هي بدون أي تغيير.
هدف هذه الوثيقة: الاتفاق على «شكل مبدئي» للتصميم قبل أي تنفيذ — كما طلب العميل نصًّا:
«نريد أن نتفق على شكل مبدئي للتصميم ثم ننفذ».
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.
الشكل الحالي «معالج واسع»: بحث مريض كبير أعلى الصفحة، ثم شبكة من عمودين —
يسار: خطوة ① تفاصيل الزيارة (الآن/لاحقًا، الطبيب المحوِّل، جهة الدفع/التعاقد) وخطوة ② الخدمات
(كروت كشف/معمل/أشعة قابلة للإضافة)، ويمين: «سلة» ملخص بالإجماليات وطرق الدفع (ادفع الآن / حوّل للكاشير / لاحقًا) وزر تأكيد واحد.
فيه شغل حديث يجب الحفاظ عليه عند إعادة التشكيل:
ISS-0173/0176/0177/0179/0190 — طرق الدفع من إعدادات العيادة، تسعير المعمل المحسوم من السيرفر
(والتحذير «غير مُسعَّر»)، رابط تعديل اسم المريض من نافذة البحث، تسعير إعادة الكشف (follow-up quote)،
وتأكيد الدفع الجزئي (آجل).
المنطق المالي كله سيرفري (quote endpoint) — الواجهة لا تحسب فلوس؛ أي تصميم جديد يجب أن يُبقي هذا.
شريط فلاتر: تاريخ (افتراضي اليوم)، حالة الحجز، طبيب (بحث خادمي — قاعدة «الألف طبيب»).
أعمدة الجدول: رقم الحجز، رقم الدور، المريض (+MRN)، الطبيب، القسم، الغرفة، الوقت، حالة الحجز، حالة الدفع، الإجراءات.
الإجراءات الموجودة اليوم: «وصول» (صلاحية clinic.appointment.update)
و«بدء الكشف / فتح الكشف» (clinic.encounters.create/view).
لا يوجد تعديل ولا حذف inline حاليًا — وهذا جزء جديد من الطلب.
ج) مكوّن ثالث ذو صلة — طابور الاستقبال الحي
يوجد أيضًا features/clinic/shared/visit-queue (شاشة /app/clinic/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✕ تغيير
✎ التعديل بصلاحية clinic.appointment.update · 🗑 الحذف بصلاحية مستقلة ولا يتاح بعد الدفع/الدخولعرض 6 من 7 · القائمة الكاملة ↗
أهم أفكار الشكل
الربع العلوي نموذج شبكي مكثّف بنفس ترتيب رسمة العميل: صف الهوية والخدمة، ثم صف التوقيت + مجموعة «قيمة الكشف»
(الإجمالي/الخصم/كاش/فيزا/المتبقي) في إطار واحد، والحقول الثانوية (المحوِّل/المساعد/تابع لـ/التعاقد/ملاحظات)
في صف قابل للطي «تفاصيل إضافية» حتى لا يتجاوز النموذج ربع الشاشة.
الإجمالي والمتبقي وسعر التعاقد حقول محسوبة (رمادية) — تأتي من تسعير السيرفر الموجود اليوم (quote)؛
لا حساب مالي في الواجهة، فنحافظ على كل شغل ISS-0176/0179.
زرّان كما في الرسمة: «إضافة» (حجز فقط) و«إضافة مع دخول» (الزر الأساسي — حجز + وصول + دور فورًا)،
مع اختصار Enter للأسرع.
طلبات المعمل/الأشعة تتحول إلى «رقائق» سريعة بدل الكروت الكبيرة الحالية — تضغط «+ معمل» فتفتح نافذة بحث
صغيرة وتظهر النتيجة كرقاقة معدودة، فلا تستهلك مساحة النموذج.
القائمة تحت مباشرة — نفس أعمدة صفحة الحجوزات الحالية + عمود إجراءات موسّع:
وصول / بدء الكشف (الموجودان اليوم) + تعديل + حذف الجديدان، مع تعطيلهما بصريًا حسب حالة الصف
(لا حذف بعد الدفع أو الدخول). الزيارة الجديدة تظهر أول القائمة بخلفية خضراء لثوانٍ.
إعادة استخدام لا نسخ: القائمة السفلية تُبنى بإعادة استخدام مكوّن/خدمة الحجوزات الحالية (وضع مدمج بلا page-header)
كي يكون أي إصلاح مستقبلي في مكان واحد — وصفحة /clinic/appointments تبقى كما هي.
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 الحالي
في وضع مدمج (بلا ترويسة صفحة)، لأنها هي التي تحمل التعديل/الحذف وحالة الدفع المطلوبين.
الطابور الحي يبقى في شاشته ولوحة العيادة كما هو.
س٣ — «إضافة مع دخول» تعني إيه بالضبط؟
هل الزر يسجّل الحجز فقط أم يسجّل الوصول أيضًا؟
توصيتنا «إضافة مع دخول» = إنشاء الزيارة + تسجيل الوصول فورًا (حالة «وصل» + رقم دور
في طابور العيادة) في ضغطة واحدة — وهو حال أغلب زيارات الاستقبال الفورية.
«إضافة» وحدها = حجز بحالة «محجوز» (لموعد لاحق أو حجز تليفوني). الدخول لغرفة الكشف نفسها يظل بيد الطبيب/«بدء الكشف».
س٤ — صلاحيات التعديل والحذف في القائمة؟ وحدود الحذف؟
توصيتنا التعديل بمفتاح 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)
موظف الاستقبال يسجّل زيارة كاملة (مريض + كشف + دفع) من النموذج العلوي دون تمرير الصفحة على شاشة 1366×768.
بعد «إضافة مع دخول»: الزيارة تظهر أول قائمة اليوم خلال ثانية بحالة «وصل» ورقم دور، بدون تحديث يدوي.
«إضافة» وحدها تنتج حجزًا بحالة «محجوز» يظهر في القائمة وفي صفحة الحجوزات المستقلة معًا.
تعديل صف من القائمة يفتح الزيارة للتحرير ويحفظ بصلاحية clinic.appointment.update؛
الحذف متاح فقط قبل الدفع/الوصول وبصلاحية clinic.appointment.delete ويسجَّل كإلغاء بسبب.
صفحة /app/clinic/appointments تعمل كما كانت تمامًا (نفس الراوت والفلاتر والأعمدة).
كل المبالغ المعروضة مصدرها تسعير السيرفر — لا حساب مالي في المتصفح.
الشاشة RTL/ثنائية اللغة بالكامل ومفاتيح الترجمة ضمن CLINIC_VISIT.* / CLINIC_APPOINTMENTS.*.
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 · لا يُكتب أي كود إنتاجي قبل اعتماد هذا الشكل