أول خدمة: العيادات الخارجية — تصميم تفصيلي

العيادات الخارجية: أنواع المؤسسات + محرّك التسعير متعدد الأبعاد

دمج فكرتك: المؤسسة (عيادة فردية / مركز / مستشفى) تحدّد التدفّق، والسعر يتحدّد بالقسم والدكتور ورتبته — بمحرّك تسعير مرن واحد. يكمّل his-feature1-booking-design.html.

2026-06-15 · Outpatient Consultation deep design · Moon ERP HIS
💡

٠ — الفكرة كما وصفتها (تأكيد الفهم)

كل ده يتجمّع في فكرة واحدة: التسعير له عدة أبعاد (قسم، دكتور، رتبة)، ونوع المؤسسة يحدّد إزاي بنوصل للسعر. التصميم تحت بيغطّي كل الحالات بجدول تسعير مرن واحد.
توضيح مهم (تحديث): القسم بيتحدّد عند تعريف الخدمة — يعني تعمل خدمة "كشف بطنة" وتربطها بقسم الباطنة. فالقسم خاصية في الخدمة نفسها، بيخدم غرضين: (١) التسعير (بطنة ≠ صدر) و(٢) التوجيه — بعد الحجز المريض يروح غرفة/عيادة القسم (يدخل طابور القسم). فعند الحجز بتختار الخدمة (اللي حاملة قسمها) والطبيب بس — مش بتختار القسم تاني.
🏥

١ — أنواع المؤسسات وتأثيرها على التدفّق

نفس النظام، إعداد mode في المركز يحدّد كم خطوة في الحجز.
نوع المؤسسةالخصائصتدفّق الكشف
عيادة فردية single_clinicدكتور واحد ثابت، تخصص واحد غالباًخدمة (كشف) ← الدكتور تلقائي ← السعر ← حفظ
مركز / عدة عيادات centerكذا قسم وكذا دكتور؛ الخدمة بتحمل قسمهاخدمة (كشف بطنة — تحمل قسمها) ← الدكتور ← السعر (محلول) ← حفظ ← 🚪 توجيه لغرفة القسم
مستشفى hospitalزي المركز + تنويم/عمليات/طوارئزي المركز + ربط بالـ encounter والتنويم
المفتاح: his_center_settings.mode + إعداد الخدمة يحدّدوا الخطوات اللي تظهر في شاشة الحجز. العيادة الفردية تخفي اختيار العيادة/القسم/الدكتور وتثبّت الدكتور الوحيد تلقائياً.
🗂️

٢ — الهيكل: تخصص / قسم / عيادة / رتبة

التخصص (Specialty)         مثال: باطنة · نساء وتوليد · جراحة
   └─ القسم/الفرع (Department)   مثال (تحت الباطنة): بطنة · صدر · قلب   ← السعر بيختلف هنا
        └─ العيادة (Clinic)       غرفة/وحدة تشغيلية (في المركز كذا عيادة؛ الفردية = واحدة)
             └─ الطبيب (Practitioner)   له رتبة (rank)

رتبة الطبيب (rank):  ممارس عام · اختصاصي · استشاري · أستاذ   ← التسعير ممكن يعتمد عليها
الكيانالدور في التسعير/التدفّق
التخصصالمظلة العامة؛ الخدمة "كشف" ممكن تترتبط بتخصص
القسم (Department)يتحدّد عند تعريف الخدمة. غرضان: تسعير (بطنة ≠ صدر) + توجيه المريض لغرفة القسم بعد الحجز
العيادة (Clinic)وحدة تشغيلية/فرع؛ بُعد تسعير اختياري (فرع غالي/رخيص)
الطبيب + الرتبةبُعدا تسعير: سعر الدكتور المحدّد، أو سعر حسب الرتبة
📐

٣ — أبعاد التسعير (قابلة للتفعيل لكل خدمة)

سعر الكشف ممكن يتحدّد بأي تركيبة من الأبعاد دي — المركز يفعّل اللي يناسبه.
البُعدالمثالالاستخدام
flat (الخدمة)كشف = 150عيادة فردية بسيطة — سعر واحد
بالقسم (department)بطنة = 200 · صدر = 250"السعر للبطنة مش زي الصدر"
بالعيادة/الفرع (clinic)فرع التحرير = 300 · فرع المعادي = 250فروع بأسعار مختلفة (اختياري)
بالطبيب (doctor)د.أحمد = 200 · د.منى = 300"فرق بين دكتور ودكتور في نفس القسم"
بالرتبة (rank)ممارس = 150 · استشاري = 300"التسعير على رتبة الدكتور"
كله مدعوم بجدول واحد مرن (مش 5 جداول): his_service_prices بأعمدة أبعاد قابلة للـ null. الصف اللي أعمدته متملّية أكتر = أكثر تحديداً. والتحليل بياخد الأكثر تحديداً (القسم التالي).
⚙️

٤ — محرّك التسعير: قاعدة الأولوية (الأكثر تحديداً يفوز)

عند الحجز، نوصل لأنسب سعر بترتيب أولوية واضح — يغطّي كل حالاتك بقاعدة واحدة.

لكل (خدمة، عيادة، قسم، دكتور، رتبة) في الحجز، نبحث في his_service_prices ونأخذ أول صف مطابق بالترتيب ده (من الأخص للأعم):

  1. ١ سعر الطبيب المحدّد (practitioner_id مطابق) — يفوز على كل حاجة. "د.منى بطنة = 300"
  2. ٢ القسم + الرتبة (department_id + rank) — "استشاري بطنة = 280"
  3. ٣ القسم (department_id) — "كشف بطنة = 200"
  4. ٤ الرتبة (rank) — "استشاري = 300 (أي قسم)"
  5. ٥ سعر الخدمة الافتراضي (flat) — "كشف = 150"
العيادة (clinic_id) بُعد إضافي اختياري يقيّد أي مستوى (لفروع مختلفة). والسعر المحلول دايماً قابل للتعديل اليدوي في الحجز بصلاحية، ويتخزّن snapshot.
🧮

٥ — أمثلة محلولة (كل حالاتك)

الحالةصفوف التسعير الموجودةالحجزالسعر المحلول
عيادة فرديةكشف flat = 150كشف (د.أحمد تلقائي)150 (مستوى ٥)
بالقسمبطنة=200 · صدر=250كشف · قسم بطنة200 (مستوى ٣)
فرق بين الدكاترةبطنة=200 · د.منى بطنة=300كشف · بطنة · د.منى300 (مستوى ١ يفوز)
بالرتبةممارس=150 · استشاري=300كشف · استشاري300 (مستوى ٤)
قسم + رتبةبطنة استشاري=280 · بطنة=200كشف · بطنة · استشاري280 (مستوى ٢)
قاعدة واحدة بتحل كل السيناريوهات اللي وصفتها — والمركز يحط الصفوف اللي تناسب سياسته بس.
🖥️

٦ — شاشة التسعير الجماعي (زي ما طلبت)

اختار القسم + الخدمة ← كل دكاترة القسم يطلعوا ← سعّر كل واحد + عمولاته.
تسعير خدمةحفظ الكل
الخدمة: كشف ▾
التخصص: باطنة ▾
القسم: بطنة ▾
أساس التسعير: بالطبيب ▾
الطبيب
الرتبة
السعر
أساسي
مساعد
تحويل
د. أحمد
استشاري
300
180
40
30
د. منى
اختصاصي
250
150
35
25
د. خالد
ممارس
150
90
25
20
💡 زر "تعبئة بالرتبة" يملأ السعر تلقائياً حسب رتبة كل دكتور لو أساس التسعير = بالرتبة
كل صف هنا بيتحوّل لصف في his_service_prices (practitioner_id مملّى = مستوى ١). لو أساس التسعير "بالقسم" → صف واحد للقسم؛ "بالرتبة" → صف لكل رتبة. نفس الشاشة، أعمدة مختلفة حسب الأساس.
🛠️

٧ — إدارة التسعير (من الخدمة + من الطبيب) وإضافة طبيب لاحقاً

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

مثالك بالظبط

الخدمة (الاسم بيحمل القسم)السعر الافتراضيالقسم المختارالنتيجة
كشف بطنة200بطنةأطباء بطنة يطلعوا → تسعّر كل واحد
إعادة كشف بطنة100بطنةنفس أطباء بطنة
كشف صدر250صدرأطباء صدر يطلعوا
إعادة كشف صدر120صدرنفس أطباء صدر

مدخلان لنفس التسعير (اتجاهين)

المدخلالاستخدام
من الخدمةافتح "كشف بطنة" → كل أطباء قسم بطنة → سعّر كل واحد (شاشة التسعير الجماعي فوق)
من الطبيبافتح "د. خالد" → كل خدمات أقسامه → سعّر كل خدمة. ده حل "من مكان تاني أظبطها"

مشكلة "إضافة دكتور بعد الخدمة" — ٤ حلول مدمجة

  1. شبكة أمان قاعدة الأولوية بترجع للسعر الافتراضي: دكتور جديد لسه ماتسعّرش → الحجز ياخد سعر القسم/الخدمة (200) → مبيقفش أبداً. تسعّره وقت ما تحب.
  2. مؤشر مؤشر النواقص: النظام يبيّن "٣ خدمات بدون سعر خاص لـ د.خالد" → تكملها بضغطة.
  3. auto-seed توليد تلقائي (اختياري): أول ما تضيف الطبيب للقسم، النظام يولّد صفوف تسعير بالسعر الافتراضي لكل خدمات القسم → تعدّل اللي عايزه بس.
  4. دفعة من شاشة الطبيب: زر "سعّر كل خدمات أقسامه" — تفتح الطبيب مرة واحدة وتسعّر كل خدماته، بدل ما تفتح كل خدمة لوحدها.
الخلاصة: مش محتاج تعيد فتح كل خدمة لما تضيف دكتور. الحجز شغّال على طول (شبكة الأمان)، والنظام بيوريك النواقص، وتسعّر الدكتور الجديد من شاشته مرة واحدة لكل خدماته.
تسعير من شاشة الطبيب: د. خالدسعّر كل خدماته
الطبيب: د. خالد · الرتبة: ممارس · أقسامه: بطنة
الخدمة
القسم
السعر
أساسي
الحالة
كشف بطنة
بطنة
بدون سعر (افتراضي 200)
إعادة كشف بطنة
بطنة
بدون سعر (افتراضي 100)
📅

٨ — تدفّق الحجز حسب نوع المؤسسة

عيادة فرديةأبسط تدفّق
المريض
← خدمة: كشف
د.أحمد (تلقائي)
← السعر 150
← حفظ
مركز / مستشفىتدفّق كامل
المريض
← خدمة: كشف بطنة (تحمل قسمها)
← الطبيب: د.منى
← السعر 300 (محلول)
← حفظ
← 🚪 غرفة الباطنة
في الحالتين: السعر المحلول قابل للتعديل بصلاحية، والعمولات (أساسي/مساعد/تحويل) بتتجاب snapshot من صف التسعير المطابق → تغذّي الفاتورة (Accounting) وعمولات الأطباء.
🧬

٩ — الموديل المحدّث (يدمج الأبعاد)

يحدّث جدول التسعير في feature1 لجدول مرن متعدد الأبعاد.
— الهيكل —
his_specialties(name)              his_departments(specialty_id, name)   — بطنة/صدر
his_rooms(department_id, name)     — غرفة القسم (للتوجيه بعد الحجز)
his_services(..., service_type, department_id)   — الخدمة "كشف بطنة" بتحمل قسمها (تسعير + توجيه)
his_clinics(company_id, branch_id, name, specialty_id?)
his_practitioners(party_id, hrm_employee_id, rank[gp|specialist|consultant|professor])
his_practitioner_assignments(practitioner_id, clinic_id, department_id)

— محرّك التسعير المرن (جدول واحد، أبعاد nullable) —
his_service_prices(
   id, company_id, service_id,
   clinic_id?       — بُعد اختياري (فرع)
   department_id?    — بطنة/صدر
   practitioner_id?  — دكتور محدّد (الأخص)
   doctor_rank?      — ممارس/استشاري
   price,
   primary_fee, assistant_fee, referral_fee, fee_type[amount|percent]
)
القرار: ORDER BY specificity → أول مطابق (practitioner > dept+rank > dept > rank > flat)

— الحجز (snapshot وقت الحفظ) —
his_booking_services(booking_id, service_id, clinic_id?, department_id?,
   practitioner_id?, assistant_id?, referring_doctor_id?,
   resolved_price, doctor_primary_fee, doctor_assistant_fee, referral_fee)
الفرق عن feature1: استبدلنا service_doctor_pricing (دكتور فقط) بـ his_service_prices متعدد الأبعاد — يغطّي القسم والعيادة والدكتور والرتبة في جدول واحد بقاعدة أولوية. وأضفنا rank للطبيب وdepartments تحت التخصص.
العيادات الخارجية — التصميم التفصيلي · المؤسسات + التسعير متعدد الأبعاد · يكمّل his-feature1-booking-design.html · 2026-06-15