🧾 إيصال استلام نقدية للمعامل (B2B) — التحليل والمقترح

تحصيل السداد من المعمل الخارجي · تخفيض الدين · تحرير حد الائتمان · القيود · وإيصال مطبوع

📅 2026-05-31 ⚠️ التحصيل من B2B غير موجود حاليًا 💳 الكريدت والدين موجودين ✅ 🧮 قيد: مدين الخزينة · دائن ذمم المعمل
الخلاصة: البرنامج بيحسب دين المعمل الخارجي (AR) وحد الائتمان ويمنعه لو تعدّاه — لكن مفيش أي طريقة تسجّل إنه دفع: لا إيصال استلام، لا قيد محاسبي، لا تخفيض للدين، ولا تحرير للكريدت. ده الجزء الناقص اللي هنبنيه.

1 إزاي الـ B2B شغّال دلوقتي

المعمل يطلب تحاليل (على الحساب) فاتورة external_lab_receivable (مسوّدة) عند تسليم النتيجة: ترحيل البند → قيد مدين ذمم المعمل / دائن إيراد + ضريبة الدين بيزيد مطالبة شهرية (تجميع)
العنصرالحالةالتفاصيل
المعمل الخارجي كعميلموجودpartner_id + receivable_account_id (حساب ذمم) + credit_limit
تراكم الدينموجودكل بند نتيجة تتسلّم → ترحيل → قيد مدين الذمم. balance_due بيتحسب.
الرصيد المستحق (Outstanding)موجود= مجموع (البنود المرحّلة − المدفوع) على فواتير المعمل.
حد الائتمانموجودلو (المستحق + الطلب الجديد) > الحد → يتمنع الطلب (422 credit_limit_exceeded).
المطالبة الشهريةموجودLabMonthlyExternalLabInvoice — تجميع فواتير الشهر. الحالة issued.
كشف الحساب (Statement)موجودendpoint البورتال بيرجّع: الكريدت + الفواتير + المطالبات. من غير مدفوعات.

2 الناقص (الفجوة)

الوظيفةالحالة
تسجيل دفعة من المعمل الخارجي (تحصيل)غير موجود
إيصال استلام نقدية مطبوع للمعملغير موجود
قيد محاسبي للدفعة (مدين خزينة/بنك · دائن ذمم المعمل)غير موجود
تخفيض الدين + تحرير حد الائتمان بعد الدفعغير موجود
تعليم المطالبة الشهرية «مدفوعة»غير موجود
ظهور المدفوعات في كشف الحساب + الرصيد الجاريغير موجود
ملاحظة: دفعات المرضى (LabPayment) ليها patient_id وموجّهة لفاتورة واحدة — مش مناسبة للـ B2B اللي بيدفع مبلغ واحد على عدّة فواتير شهرية. محتاجين كيان مستقل.

3 المقترح: إيصال استلام نقدية للـ B2B

أ) الفكرة

المعمل بيدفع مبلغ (كاش/بنك) → نعمل إيصال استلام → المبلغ يتوزّع تلقائيًا على أقدم فواتيره المفتوحة (FIFO) → الدين ينقص → الكريدت المتاح يزيد → قيد واحد بإجمالي المبلغ → نطبع الإيصال للمعمل.

ب) القيد المحاسبي

الحسابمديندائن
الخزينة / البنك (حساب الاستلام اللي يختاره الكاشير)المبلغ
ذمم المعمل الخارجي (receivable_account_id / حساب الشريك)المبلغ

بيقلّل رصيد الذمم → الـ Outstanding ينقص → حد الائتمان المتاح يزيد تلقائيًا (نفس استعلام الرصيد الحالي).

ج) كيان جديد LabExternalLabPayment (إيصال الاستلام)

د) واجهات

4 شكل الإيصال (موك)

إيصال استلام نقدية
Cash Receipt Voucher — بلاك سيركل
رقم الإيصالRCV-2026-00007
التاريخ31/05/2026 02:15م
المستلَم من (المعمل)Hazem Lab
طريقة الاستلامتحويل بنكي
وصفسداد دفعة من حساب المعمل
المبلغ المستلَم
3,000.00 SAR
الرصيد قبل5,750.00
المدفوع3,000.00
الرصيد بعد2,750.00
حد الائتمان10,000
المتاح بعد السداد7,250
المستلِم: ______المعتمد: ______

5 مثال كامل

معمل Hazem: حد ائتمان 10,000 · دين حالي 5,750 (متاح 4,250). دفع 3,000 تحويل بنكي:

الخطوةالنتيجة
إنشاء إيصال 3,000توزيع FIFO على أقدم فواتيره (مثلًا فاتورة 1,150 كاملة + 1,850 من التالية)
القيدمدين البنك 3,000 · دائن ذمم المعمل 3,000
الدين5,750 → 2,750
الائتمان المتاح4,250 → 7,250
كشف الحسابيظهر سطر دفعة 3,000 + الرصيد الجاري 2,750

6 خطة التنفيذ

#الباك إند
1ميجريشن + موديل LabExternalLabPayment + lab_external_lab_payment_allocations + تسلسل external_lab_payment (RCV).
2خدمة RecordExternalLabPayment: تحقق (≤ المستحق) → توزيع FIFO (تحديث amount_paid) → قيد (مدين خزينة/بنك · دائن ذمم المعمل) → ربط الإيصال.
3Endpoints: POST /external-labs/{lab}/payments · GET .../payments · POST .../payments/{id}/void.
4توسعة الـ statement يرجّع payments[] + رصيد جاري. وتعليم المطالبة الشهرية «مدفوعة» لما فواتيرها تتسدّد.
5إضافة تحصيل B2B لتقرير التدفق النقدي كداخل (IN) (مش خارج).
#الفرونت إند
6زر «تسجيل تحصيل» + ديالوج (مبلغ/وسيلة/حساب استلام) في شاشة المعمل الخارجي.
7طباعة إيصال الاستلام (حراري/A4) — نعيد استخدام محرّك الطباعة الموجود.
8قائمة إيصالات المعمل + الرصيد/الكريدت المباشر + كشف حساب مطبوع.

7 أسئلة قبل التنفيذ

س1 — التوزيع: المبلغ يتوزّع تلقائيًا على أقدم الفواتير (FIFO) — تمام؟ ولا تحب الكاشير يختار الفواتير يدويًا؟
س2 — حساب الذمم: نستخدم receivable_account_id بتاع المعمل، وإلا حساب الشريك العام، وإلا إعداد lis.receivable_account؟ (نفس ترتيب الترحيل الحالي).
س3 — وسائل الاستلام: نفس الخمسة (كاش/فيزا/تمارا/تابي/تحويل) ولا الـ B2B بيدفع كاش/تحويل بس؟
س4 — الإيصال: حراري 80mm ولا A4؟ وثنائي اللغة؟
س5 — دفعة مقدّمة: نسمح بدفعة أكبر من المستحق (رصيد دائن/مقدّم للمعمل) ولا نمنع الزيادة عن المستحق؟