١. المطلوب (بكلامك)
- كل مركز يتخصّص له أكتر من قائمة أسعار (مش يشوف كل القوائم).
- في البورتال B2B لما أعمل طلب: أختار المريض، وتظهر قوائم المركز المخصّصة له وأختار منها.
- دلوقتي فيه تعارض: المركز عنده أسعار داخلية (inbound) + أسعار خارجية (outbound) + قوائم أسعار — لخبطة في اللوجيك.
- نوحّد كله: قوائم أسعار وخلاص. نعمل قائمة/قائمتين/تلاتة ونخصّصها للمركز، سواء هو بيعمل الطلب أو أنا. والاختيار في البورتال بيأثّر على التقارير والمطالبات المالية.
٢. الوضع الحالي — مصدر اللخبطة
✗ ٣ آليات تسعير متوازية للمركز الواحد
| الآلية | المعنى | بتُستخدم فين دلوقتي |
|---|---|---|
lab_external_lab_pricing · direction = inbound |
سعر كل تحليل لما المركز عميل (إحنا نبيع له) | كتالوج البورتال B2B + إنشاء الطلب من البورتال |
lab_external_lab_pricing · direction = outbound |
سعر كل تحليل لما هم يحاسبونا (نرسل لهم إحالة) | مسار الـ Send Out / الإحالات |
| قوائم الأسعار المسمّاة (الـ pivot الجديد) | قوائم مسمّاة نخصّصها للمركز كعميل | شاشة الموظف (request wizard) فقط |
فالنتيجة: الموظف بيسعّر من قوائم مسمّاة، والبورتال بيسعّر من inbound per-test — نظامين مختلفين لنفس الغرض (تسعير العميل) = التعارض اللي بتقصده.
BE: ExternalLabPortalCatalogController · ExternalLabPortalRequestController (LabExternalLabPricing inbound) · external-labs screen (inbound/outbound tabs)
٣. التوحيد المقترح — قوائم أسعار للعميل، وخلاص
حل ١ — تسعير العميل (inbound) مصدره قوائم الأسعار المسمّاة في كل مكان BE FE
- كتالوج البورتال B2B: يشتق التحاليل وأسعارها من قائمة الأسعار المختارة للمركز (أو الافتراضية) — بدل
lab_external_lab_pricinginbound. - إنشاء الطلب من البورتال: يضيف اختيار
price_list_idمن ضمن قوائم المركز المخصّصة (الافتراضية مختارة مسبقًا)؛ الأسعار + بنود الفاتورة + المطالبات المالية تتبعها تلقائيًا (المطالبات بتقرأ من بنود الفاتورة أصلاً). - شاشة الموظف (wizard): عاملة كده بالفعل ✓.
- شاشة المعامل الخارجية: نشيل/نخفي تبويب أسعار inbound per-test (بقى ملغّى المعنى) ونسيب بس "قوائم الأسعار" (اللي ضفناها) + outbound.
حل ٢ — outbound (تكلفة الإحالات) يفضل منفصل لكن بمسمّى واضح BE FE
- الـ outbound = "اللي المركز بيحاسبنا بيه لما نرسل له" — اتجاه عكسي ومفهوم مختلف عن تسعير العميل، فمنطقي يفضل منفصل (بيستخدمه الـ Send Out).
- بس نوضّح التسمية في الواجهة: "تكلفة الإحالات (نرسل لهم)" بدل كلمة outbound الغامضة، عشان ما يتلخبطش مع قوائم أسعار العميل.
- (بديل لو حبيت) نوحّده هو كمان كـ "قائمة أسعار إحالات" — لكن ده شغل زيادة بفايدة قليلة دلوقتي.
حل ٣ — ترحيل البيانات الحالية BE
- البرنامج لسه بيتصمم ومفيش داتا مهمة. لو فيه صفوف inbound قديمة لمركز، (اختياري) نحوّلها لقائمة أسعار مولّدة "أسعار <المركز>" ونخصّصها كافتراضية — أو نتجاهلها ونبدأ نظيف بقوائم الأسعار.
٤. أسئلة محتاجة قرارك
س١ الـ outbound (تكلفة الإحالات)
نسيبه منفصل (تكلفة إحالات) ولا نوحّده هو كمان لقوائم أسعار؟ — اقتراحي: نسيبه منفصل مع تسمية أوضح.
س٢ مين يختار القائمة في البورتال B2B؟
المركز نفسه يختار من ضمن قوائمه المخصّصة فقط (الافتراضية مبدئيًا)، ولا تتثبّت على الافتراضية بدون اختيار (تجنّب إنه يختار الأرخص)؟ — اقتراحي: يختار من قوائمه المخصّصة فقط (إحنا اللي بنحدد إيه المتاح له).
س٣ أسعار inbound القديمة
نحوّلها لقائمة أسعار مولّدة لكل مركز، ولا نبدأ نظيف ونعتمد على القوائم المسمّاة بس؟ — اقتراحي: نبدأ نظيف (مفيش داتا مهمة).
٥. ترتيب التنفيذ (بعد موافقتك)
- BE كتالوج البورتال + إنشاء الطلب من البورتال يقروا من قائمة الأسعار المختارة (price_list_id) بدل inbound.
- BE endpoint للبورتال يرجّع قوائم المركز المخصّصة للاختيار.
- FE واجهة البورتال: اختيار قائمة الأسعار عند إنشاء الطلب + عرض الكتالوج حسبها.
- FE شاشة المعامل الخارجية: إخفاء تبويب inbound per-test وتوضيح outbound كـ "تكلفة الإحالات".
- اختبار: طلب من البورتال بقائمة مختارة → فاتورة + مطالبة شهرية بالأسعار الصح.