المعمل يبعت مبلغ (مثلاً 5000)، والمستخدم يختار أنهي فواتير المبلغ ده بيسدّدها — بدل التوزيع التلقائي. دراسة الوضع وخطة التنفيذ للموافقة قبل البدء.
دلوقتي في صفحة المعامل الخارجية فيه dialog دفع — المستخدم بيدخل المبلغ + طريقة الدفع + حساب الاستلام بس.
RecordExternalLabPayment بياخد المبلغ ويوزّعه تلقائياً على الفواتير الأقدم أولاً (FIFO) لحد ما يخلص. المستخدم مش بيشوف ولا بيختار أنهي فواتير اتسدّدت. التوزيع بيتسجّل في lab_external_lab_payment_allocations، والقيد: DR حساب الاستلام / CR ذمم المعمل.
زرار «Collect / تحصيل» → المستخدم يدخل المبلغ، وبعدين يختار من قائمة الفواتير المفتوحة أنهي فواتير المبلغ ده بيسدّدها (كل أو جزء).
المستخدم يحدّد الفواتير، والمبلغ المخصّص لازم يساوي مبلغ الدفعة (مع سماح بسداد جزئي لآخر فاتورة).
balance_due).RecordExternalLabPayment: يقبل مصفوفة allocations اختيارية [{invoice_id, amount}]. لو اتبعتت → يوزّع زي ما المستخدم اختار؛ لو فاضية → يفضل FIFO (التوافق القديم).balance_due للفاتورة، والفواتير بتاعت نفس المعمل.DR حساب الاستلام / CR ذمم المعمل — بنفس المبلغ.التحصيل بيعمل نفس القيد بغضّ النظر عن طريقة التوزيع — الاختيار بيأثر على أنهي فواتير تتقفل، مش على القيد:
| الحساب | مدين | دائن |
|---|---|---|
| الخزينة / البنك (حساب الاستلام) | 5000 | |
| ذمم معمل خارجي — dr.wafaa | 5000 |
والفواتير المختارة balance_due بتاعها بيقلّ بالمبلغ المخصّص، واللي تتسدّد بالكامل حالتها تبقى «مدفوعة».
RecordExternalLabPayment يقبل allocations[] + تحقّق، مع الحفاظ على FIFO كـافتراضي لو مفيش اختيار.المستخدم يتحكّم بالظبط في أنهي فواتير اتسدّدت من كل دفعة — أوضح وأدق من التوزيع التلقائي، ومطابق لطريقة شغل المعامل الحقيقية.