🏥 البوابة الخارجية — المعمل الخارجي كعميل

مرجع الوضع الحالي للدور inbound (المعمل بيبعتلنا شغل) — قبل بناء بوابة العميل

REFERENCE · مُصحَّح · 2026-05-23

① الدوران — توضيح مهم

المعمل الخارجي ليه دورين منفصلين تماماً:

🔵 inbound — المعمل كـ عميل

المعمل الخارجي يبعتلنا مرضى/عينات. إحنا نعمل الفلو الداخلي العادي ونرجّعله النتيجة. الفاتورة على حسابه بأسعار متفق عليها.

⬅ ده موضوع الملف ده — ده اللي عايزين نبنيله بوابة

⚪ outbound — المعمل كـ مزوّد خدمة

إحنا نبعتله تحاليل (referrals) ما نقدرش نعملها. هو يدخل نتائجها ويرجّعها لينا.

ده اللي البوابة الحالية /external-lab-portal بتعمله بالفعل (دورة التحويلات).

الخلاصة: البوابة الموجودة دلوقتي بتخدم الدور outbound فقط. الدور inbound (العميل) — اللي إحنا عايزينه — مالوش بوابة خالص؛ المعمل العميل دلوقتي بيعتمد ١٠٠٪ على ريسبشن عندنا يدخّل طلباته.

② الوضع الحالي للدور inbound (العميل)

أ) كيان المعمل الخارجي — موجود

LisExternalLab — يُدار من شاشة الموظفين /lab/external-labs:

LisExternalLab {
  id, name, name_ar, code,
  partner_id,              // حساب محاسبي للفوترة
  license_number, contact_name, contact_phone, contact_email,
  address, address_ar, is_active, notes,
  price_list_id            // قائمة أسعار افتراضية مرتبطة
}

ب) تسعير المعمل — موجود

LisExternalLabPricing — سعر لكل تحليل، باتجاه:

LisExternalLabPricing {
  external_lab_id, investigation_id,
  direction: "inbound" | "outbound",   // inbound = السعر اللي بنحاسب بيه المعمل العميل
  price, effective_from, effective_to, is_active
}

ج) إنشاء طلب لمعمل عميل — موجود لكن للموظفين فقط

في معالج الطلب (request-wizard-v2) الموظف يقدر:

القيد: ده كله بيحصل من جوّه — ريسبشن عندنا هو اللي بيدخّل. المعمل العميل نفسه مايقدرش يضيف طلباته بنفسه.

د) البوابة الحالية للمعمل العميل — غير موجودة

بوابة /external-lab-portal الموجودة فيها فقط:

مفيهاش أي شيء للعميل: لا إنشاء طلب، لا تسجيل مريض، لا متابعة طلبات، لا عرض نتائج. البنية التحتية للبوابة موجودة (مصادقة + layout) — بس المحتوى كله outbound.

③ المطلوب — بوابة العميل (زي الريسبشن)

المعمل الخارجي العميل يدخل البوابة بنفسه ويعمل اللي الريسبشن بيعمله — لكن مقيّد بأسعاره:

المعمل يدخل البوابة يسجّل مريض / يختار مريض يطلب تحاليل (بأسعار inbound بتاعته) يأكّد الطلب إحنا: تجميع ← kanban ← نتائج ← إصدار المعمل يشوف/يطبع النتيجة

الوظائف المطلوبة في بوابة العميل

الوظيفةملاحظة
تسجيل/اختيار مريضمرضى المعمل العميل — مربوطين بيه
إنشاء طلب تحاليل (زي معالج الريسبشن)اختيار تحاليل + باقات
التسعير التلقائي من قائمة inboundالمعمل يشوف أسعاره المتفق عليها فقط
متابعة حالة الطلباتقيد التنفيذ / جاهز…
عرض وطباعة النتائج المُصدَرةنفس تقرير المعمل
كشف حساب / فواتير المعملإجمالي مستحقاته بأسعار inbound
طباعة باركود/إيصال عند الطلبزي الريسبشن

④ إيه اللي نقدر نعيد استخدامه

العنصرالحالة
بنية البوابة (مصادقة + layout + guards)جاهزة — نوسّعها
كيان المعمل + تسعير inboundجاهز بالكامل
منطق معالج الطلب (اختيار تحاليل + تسعير + إنشاء)موجود للموظفين — نعيد استخدامه/نبسّطه للبوابة
محرّك تقرير النتائج (PDF)جاهز
endpoints البوابة للعميل (إنشاء طلب، مرضى، نتائج، فواتير)محتاجة من الـ Backend
أكبر فجوة: الـ Backend. بوابة المعمل الحالية endpoints بتاعتها كلها outbound (referrals). بوابة العميل محتاجة endpoints جديدة: إنشاء طلب، إدارة مرضى المعمل، عرض النتائج/الفواتير — كلها محمية بتوكن المعمل ومقيّدة ببياناته فقط.

ده المرجع المُصحَّح للوضع الحالي. الدور inbound (العميل) = صفر بوابة، بنية تحتية جاهزة.

جاهز لاستقبال تفاصيل الشغل اللي عايز تضيفه عشان نعمل خطة كاملة.