1 الخلاصة في 3 سطور
① الفاتورة كانت فعلاً غير مدفوعة — وكانت محقّة. الفحص أثبت إن محاولة الدفع بتاعتك ما اتسجّلتش خالص (صفر سجل دفع على الفاتورة)، فالخطأ منعها تتحفظ من الأساس.
② الباك إند سليم. أعدت إنتاج نفس الدفعة بالظبط → نجحت (HTTP 201). يعني السيرفر مش هو المشكلة.
③ السبب = حساب الاستلام مش أسلوب الدفع. النسخة القديمة من نافذة التحصيل كانت بتجيب الحسابات من حسابات البنوك المحاسبية (فاضية عندك)، فخانة «حساب الاستلام» كانت فاضية ومطلوبة → الدفعة ما اتسجّلتش. ده اتصلّح بالفعل (دلوقتي بتروح لخزينة المعمل تلقائيًا).
2 اللي لقيته في الداتا (LR-2026-00228)
| العنصر | القيمة وقت الفحص |
| الطلب | LR-2026-00228 (id 39) · net = 35 · status = pending |
| الفاتورة | INV#34 / LI-2026-00242 · posted · total 35 · paid 0 · balance 35 |
| سجلات الدفع على الفاتورة | صفر — ولا حتى محذوف |
المعنى: الفاتورة كانت مُرحّلة وجاهزة للدفع، بس مفيش أي دفعة اتسجّلت عليها. يعني الخطأ اللي شُفته وقف العملية قبل ما الدفعة تتكتب في قاعدة البيانات — عشان كده «بره» بانت غير مدفوعة (وده صح، لأنها فعلاً ما اتدفعتش).
3 إعادة إنتاج الخطأ — الباك إند شغّال
بعتّ نفس الـ payload اللي نافذة التحصيل بتبعته على نفس الفاتورة:
POST /lis/payments
{ lab_invoice_id: 34, amount: 35, payment_method: "visa",
receiving_account_id: 65 (خزينة المعمل) }
→ HTTP 201 ✓ تم إنشاء الدفعة + قيد محاسبي #232 + الفاتورة بقت paid
- كل أساليب الدفع (cash / visa / tamara / tabby / bank_transfer) مقبولة في السيرفر.
- يعني المشكلة مش في أسلوب الدفع نفسه ولا في السيرفر — المشكلة كانت إن الـ payload ما اكتملش من الواجهة (حساب الاستلام كان فاضي).
4 السبب الجذري
النسخة الأقدم من نافذة «التحصيل» كانت بتاخد قائمة حسابات الاستلام من accounting/bank-accounts — واللي بترجع فاضية في بيئتك (مفيش حسابات بنوك متسجّلة هناك). النتيجة:
- خانة «حساب الاستلام» كانت فاضية ومطلوبة في نفس الوقت (ده اللي اشتكيت منه بنفسك قبل كده).
- لما تحاول تكمّل الدفع، الـ validation بيقف → الدفعة ما تتبعتش/ما تتسجّلش.
- رسالة الخطأ ظهرت بسرعة وما اتقريتش — والربط بـ«أسلوب الدفع» كان تقدير، بس الخانة اللي وقفت العملية فعلاً هي حساب الاستلام.
الإصلاح (اتعمل واتنشر): نافذة التحصيل دلوقتي بتجيب الحساب من خزائن المعمل (/lis/treasuries → account_id)، وبتختار الخزينة الافتراضية تلقائيًا وتخفي الخانة — فمستحيل تفضل فاضية. (اتأكد بتجربة فعلية: دفعة 120 على مريض اتسجّلت بنجاح، ودفعة 35 على فاتورتك كمان.)
5 حالة فاتورتك دلوقتي
INV#34 / LR-2026-00228 بقت «مدفوعة» (balance = 0). أنا حصّلت الـ 35 أثناء التشخيص. ⚠ ملاحظة شفافية: سجّلتها بأسلوب «visa» (للاختبار). لو كنت عايزها كاش أو أسلوب تاني، أقدر ألغي الدفعة دي (void) وأسجّلها بالأسلوب الصح — قوللي بس.
6 تحسين مقترح (اختياري — للدقة المحاسبية)
نافذة التحصيل دلوقتي بتوجّه كل الأساليب لخزينة الكاش الافتراضية (الحساب 65). ده بيشتغل ومش بيعمل خطأ، لكن محاسبيًا الأنسب إن الدفعات غير النقدية (visa/تابي/تمارا/تحويل) تروح لحساب بنك/شبكة مش صندوق الكاش. التحسين: نربط كل أسلوب دفع بحسابه الصح (زي ما الويزارد بيعمل: كاش → الخزينة، شبكة → حساب البنك). تحب أعمله؟