🧾 إيصال استلام نقدية للمعامل (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 (إيصال الاستلام)
receipt_number (تسلسل جديد RCV-2026-00001) · external_lab_id · partner_id
amount · date · payment_method (كاش/فيزا/تحويل…) · receiving_account_id (خزينة/بنك)
journal_entry_id · created_by · notes · حالة (مكتمل/ملغي) + إلغاء يعكس القيد
تخصيصات allocations[]: المبلغ يتوزّع على فواتير المعمل المفتوحة (يزوّد amount_paid على كل فاتورة، الأقدم أولًا).
د) واجهات
شاشة المعمل الخارجي (تبويب مالي): زر «تسجيل تحصيل / إيصال استلام» → المبلغ + الوسيلة + حساب الاستلام → ينشئ الإيصال + يطبعه.
إيصال مطبوع (حراري/A4) فيه: اسم المعمل، رقم الإيصال، المبلغ، الوسيلة، الرصيد قبل/بعد + الكريدت المتاح .
كشف الحساب (Statement) يضيف قائمة المدفوعات + الرصيد الجاري .
قائمة الإيصالات + بحث + إلغاء.
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) → قيد (مدين خزينة/بنك · دائن ذمم المعمل) → ربط الإيصال.
3 Endpoints: 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 — دفعة مقدّمة: نسمح بدفعة أكبر من المستحق (رصيد دائن/مقدّم للمعمل) ولا نمنع الزيادة عن المستحق؟
📄 تحليل ومقترح — Moon ERP / LIS · إيصال استلام نقدية للـ B2B · 2026-05-31 · كل الحقائق من الكود الفعلي (ExternalLabPortalBillingService / PostLabInvoiceItem / MonthlyExternalLabInvoice)