قيود فاتورة B2B (معمل خارجي كعميل) — المفروض يتعمل إيه

دراسة المحاسبة الصحيحة لفاتورة العميل B2B، بالتطبيق على LR-2026-00288 (dr.wafaa tolba clinic) — إيه القيود المفروض تتعمل، إمتى، وعلى أنهي حسابات.

المثال: LR-2026-00288 → فاتورة LI-2026-00281 · نوع external_lab_receivable · الإجمالي 172.5 (صافي 150 + ضريبة 22.5) · بند: Zinc

1 إيه هو B2B هنا؟

المعمل الخارجي (dr.wafaa tolba clinic) عميل عندنا — بيبعتلنا عينات نحلّلها، والفلوس على حسابه هو (مش على المريض). فالفاتورة نوعها external_lab_receivable = «لينا ذمم عند المعمل الخارجي».

الفرق عن فاتورة المريض العادية

المريض العادي: المدين = حساب المريض. هنا: المدين = حساب المعمل الخارجي (dr.wafaa). والمحاسبة تراكمية شهرية — مش فاتورة-فاتورة.

2 نموذج المحاسبة الصحيح (٣ مراحل)

① عند release كل تحليليترحّل قيد للبند (إيراد + ذمم)
② آخر الشهرمطالبة شهرية تجمّع كل الذمم
③ عند الدفعالمعمل يدفع → تقفيل الذمم

الفكرة الأساسية: الإيراد يتسجّل عند تسليم النتيجة (Release) — لكل تحليل لوحده

مش وقت إنشاء الطلب/الفاتورة. عشان كده الفاتورة بتفضل draft والبنود بتترحّل واحد-واحد أول ما نتيجة كل تحليل تطلع (release) — ده تسجيل إيراد عند التسليم (revenue recognition on delivery)، وهو الصح محاسبياً.

3 القيود المفروض تتعمل (بالتطبيق على LR-2026-00288)

① عند release تحليل Zinc — قيد البند

JE — ترحيل بند فاتورة B2B (عند الـRelease)
الحسابمديندائن
ذمم معمل خارجي — dr.wafaa tolba clinic172.50
إيرادات المبيعات (الصافي)150.00
ضريبة القيمة المضافة المحصلة (VAT)22.50

المدين = حساب المعمل الخارجي نفسه (dr.wafaa) — كل معمل له حسابه. الدائن = الإيراد الصافي + الضريبة (الضريبة التزام مش إيراد).

② آخر الشهر — المطالبة الشهرية (Monthly Claim)

النظام بيجمّع كل بنود dr.wafaa اللي اترحّلت خلال الشهر في مطالبة واحدة (LabMonthlyExternalLabInvoice) تتبعت للمعمل. مفيش قيد إيراد جديد هنا — الإيراد اتسجّل بالفعل عند الـrelease؛ المطالبة مجرد مستند تجميعي للتحصيل.

③ عند دفع المعمل الخارجي

JE — تحصيل من المعمل الخارجي
الحسابمديندائن
الخزينة / البنك (حسب طريقة الدفع)172.50
ذمم معمل خارجي — dr.wafaa tolba clinic172.50

الدفع بيقفّل الذمم اللي اتسجّلت في المرحلة ①.

4 الوضع الحالي للطلب ده (فيه مشكلة)

العنصرالحالةالمفروض
الطلب LR-2026-00288in_progress
الفاتورة LI-2026-00281draft (172.5)تفضل draft لحد المطالبة الشهرية ✓
نتيجة Zincreleased
قيد بند Zincمفيش (JE = NULL)المفروض يترحّل عند الـrelease

🔴 المشكلة: البند مترحّلش مع إن النتيجة اتعملها release

المفروض أول ما Zinc يتعمل release، الـlistener PostInvoiceItemOnResultRelease يرحّل قيد البند (① فوق). بس البند لسه JE = NULL — يعني الترحيل ماتمّش. الأسباب المحتملة: (1) الـrelease حصل قبل إصلاح إعدادات الحسابات / قبل الـreset فالقيد اتمسح، أو (2) الـlistener ماشتغلش، أو (3) خطأ اتبلع. محتاج نعيد ترحيل البند (فيه أمر RepostB2bInvoiceItems جاهز لده).

5 الحسابات المستخدمة (بعد الإصلاحات)

الدورالحسابالحالة
ذمم المعمل الخارجي (المدين)حساب dr.wafaa الخاص (partner account) أو fallback 70يُحسب لكل معمل
الإيراد (الدائن)إيرادات المبيعات (id 36)اتصلّح
الضريبة (الدائن)ضريبة القيمة المضافة المحصلة (2106)صح

ملاحظة عن إعداد منفصل

إعداد lis.external_lab_receivable_account_id لسه بيشير لحساب «حام» (مريض) — بس ترحيل البند بيستخدم حساب الـpartner الخاص بالمعمل (مش الإعداد ده)، فمش بيأثر على القيد. بس يُفضّل نظبّطه برضه للاتساق (زي باقي الإعدادات اللي صلّحناها).

6 الخلاصة — المفروض يتعمل إيه

  • عند release كل تحليل B2B: قيد DR ذمم المعمل / CR إيراد / CR ضريبة — تلقائي.
  • آخر الشهر: مطالبة شهرية تجمّع الذمم (مستند تحصيل، بدون قيد إيراد جديد).
  • عند الدفع: قيد DR خزينة/بنك / CR ذمم المعمل.
  • دلوقتي: بند Zinc اتعمله release بس القيد مترحّلش — محتاجين نعيد ترحيله عشان الإيراد والذمم يتسجّلوا.

تحب أعيد ترحيل بنود الطلب ده (وأظبّط إعداد external_lab_receivable) عشان القيد الصح يظهر؟