تكامل نظام التحاليل (LIS) مع المتعاملين (Partners) في الحسابات

تقرير الوضع الحالي — هل كل المتعاملين (أشخاص ومؤسسات) بيتسجّلوا كـ Partner في المحاسبة؟

التاريخ: 3 يونيو 2026  •  الشركة: 4 (بيئة التطوير)  •  مبني على فحص الكود + الداتا الفعلية + اختبار حيّ

المبدأ المطلوب

كل أنواع المتعاملين في نظام التحاليل — أشخاص (مرضى، أطباء) ومؤسسات (معامل خارجية، شركات تأمين) — المفروض يتولّد ليهم سجل Partner (شريك تجاري) في موديول الحسابات، عشان الفوترة والذمم (AR/AP) تشتغل عليهم.

الخلاصة في سطر

التكامل لسه موجود وشغّال في مسارات الستاف والويزارد والمؤسسات — لكن فيه ثغرة واضحة: مرضى بورتال الـB2B بيتعملوا من غير Partner، بالإضافة للمرضى المستوردين القدام اللي اتعملوا بره الـAPI.

✅ 4
مسارات شغّالة
❌ 2
ثغرات
46
إجمالي الـPartners فعلياً
(1 مؤسسة + 45 فرد)

الجزء الشغّال ✅

المصدرالنوعالحالةالكود / الدليل
مريض من الستاف POST /lis/patients شخص شغّال LabPatientController@store — يعمل Partner لو مفيش partner_id
مريض من ويزارد الطلب (inline) شخص شغّال بيستخدم نفس endpoint الستاف
المعامل الخارجية مؤسسة شغّال LabExternalLabController@store — auto • الداتا: 6/6
الأطباء شخص شغّال مشروط بفلاج auto_create_partner • الداتا: 6/6
شركات التأمين مؤسسة مشروط مشروط بفلاج auto_create_partner • العقود الـ4 الحالية: 0 مربوطين

✔ اختبار حيّ (اتعمل دلوقتي)

أنشأت مريض من API الستاف، فاتولّد له Partner تلقائي:
POST /lis/patients → HTTP 201
  patient_id = 11798
  partner_id = 48   type = individual   name = "Partner Test PT"
(اتمسح بعد الاختبار)

الثغرات ❌

1) مرضى بورتال الـB2B — مفيش Partner خالص

الكنترولر ExternalLabPortalPatientController@store بيعمل LabPatient::create() على طول من غير أي استدعاء لـ CreateBusinessPartner. فأي مريض اللاب الخارجي يضيفه من بوابته مايتسجّلش كشريك في الحسابات.

13
مرضى B2B
1
منهم عنده Partner
المسار الجديد
اللي اتبنى دلوقتي

2) المرضى المستوردين القدام — اتعملوا بره الـAPI

الكتلة الكبيرة من المرضى دخلت عن طريق سكربت import مش عن طريق الـAPI، فمحصلتش على Partners.

مرضى عندهم Partner: 23 من 11,777  (~0.2%)

إزاي التكامل بيشتغل (المسار الصح)

إنشاء كيان LISمريض / طبيب / معمل خارجي
الكنترولرلو مفيش partner_id → ينده CreateBusinessPartner
BusinessPartnerسجل شريك (type: individual / company) في الحسابات
الربطالكيان بيخزّن partner_id ← تشتغل عليه الفوترة والذمم

ملاحظة محاسبية: في الـB2B الفوترة فعلياً بتروح على حساب المعمل الخارجي (هو الشريك اللي عليه الـAR)، مش المريض الفرد — فمن ناحية محاسبية بحتة مرضى B2B ممكن مايحتاجوش Partner. لكن ده يخالف القاعدة "كل شخص → Partner".

المقترح

  1. قفل ثغرة البورتال (الأساسي): نخلّي ExternalLabPortalPatientController (store + update) يعمل/يزامن BusinessPartner زي كنترولر الستاف بالظبط — going-forward لكل مريض B2B جديد.
  2. Backfill لمرضى B2B (صغير): نعمل Partners للـ12 مريض B2B الناقصين دلوقتي (سكربت لمرة واحدة).
  3. Backfill للمستوردين (اختياري وكبير): سكربت لمرة واحدة يعمل Partner للـ~11,754 مريض القدام — ينفّذ على دفعات. (يُنفّذ فقط لو محتاج كل مريض يبقى شريك فعلاً.)
  4. توحيد فلاج الأطباء/التأمين: نخلّي auto_create_partner ON افتراضياً عشان مايعتمدش على الفرونت.