اختبار حي على moon-erp.elbaset.com — تقارير + سلامة الـ GL + سلوك الـ API. (الضرائب مستثناة بطلب المستخدم)
📅 2026-05-21🌐 moon-erp.elbaset.com📊 122 قيد مُرحَّل · 113 حساب
3CRITICAL
1HIGH (فجوة فحص)
6اختبارات نجحت
⛔ الخلاصة: الـ GL نفسه سليم (كل الـ 122 قيد مُرحَّل متزن فردياً، والمجموع 414,532.057 مدين = دائن). لكن هناك قيد واحد رُحِّل على حساب رئيسي (header) — وده كسر تقريرَي ميزان المراجعة والمركز المالي. كل المشاكل في الـ Backend (موديول Sales + تقارير المحاسبة)، مش في الفرونت إند.
🔴 المشاكل الحرجة
F1 · قيد مُرحَّل على حساب رئيسي (Header/Control account)
CRITICAL
الاكتشاف
القيد JV-2026-0009 (id=9، نوعه sales_payment، تاريخ 2026-03-25) فيه سطر مدين 744.95 على الحساب #1 "الأصول" — وهو حساب رئيسي (header) وليس تفصيلي.
الاختبار
تأكدت أن الـ API يقبل ذلك: POST /accounting/journal-entries بسطر على حساب header → HTTP 201 (مقبول).
القاعدة المحاسبية
الحسابات الرئيسية (control accounts) تُجمِّع أرصدة أبنائها فقط — يُمنَع الترحيل المباشر عليها. كل قيد يجب أن يُرحَّل على حساب تفصيلي.
الأثر
المصدر موديول Sales — تسجيل دفعة مبيعات اختار حساب header كطرف مدين (على الأرجح إعداد "الحساب النقدي الافتراضي" يشير لحساب رئيسي).
الإصلاح
Backend: رفض أي سطر JE على حساب account_type = header عند الإنشاء/الاعتماد + تصحيح منطق ترحيل دفعات المبيعات + تصحيح القيد #9 بقيد عكسي.
F2 · ميزان المراجعة لا يتزن — فرق 744.95
CRITICAL
الاكتشاف
GET /accounting/reports/trial-balance
total_period_debit = 413,787.107
total_period_credit = 414,532.057 ← فرق 744.95
السبب الجذري
التقرير يعرض الحسابات التفصيلية فقط ويستبعد الحسابات الرئيسية. القيد #9 رحّل 744.95 على حساب رئيسي → المبلغ اختفى من جانب المدين في التقرير.
الأهمية
ميزان المراجعة غير المتزن هو أخطر إشارة في المحاسبة — يعني الدفاتر (كما تظهر في التقرير) غير سليمة. التقرير الرسمي لا يمكن تقديمه لمدقق.
الإصلاح
بعد منع F1، التقرير سيتزن تلقائياً. إضافياً: التقرير يجب أن يكتشف ويُحذِّر لو وُجد ترحيل على حساب رئيسي بدلاً من إخفائه بصمت.
F3 · قائمة المركز المالي لا تتزن
CRITICAL
الاكتشاف
GET /accounting/reports/balance-sheet
total_assets = 2,672.95
total_liabilities = 380,619.157
total_equity = 0 ← صفر!
Income Statement: net_income = −377,201.257
المعادلة
الأصول = الخصوم + حقوق الملكية + صافي الدخل
المفروض: 380,619.157 + 0 + (−377,201.257) = 3,417.90
الفعلي: total_assets = 2,672.95 → ناقص 744.95 (نفس مبلغ F1، لأن الحساب #1 أصل header)
السبب
مشكلتان متراكبتان:
1) حقوق الملكية = 0 — صافي دخل الفترة الجارية (−377,201) لا يُدرَج في حقوق الملكية، فالميزانية لا تتزن في أي تاريخ أثناء السنة (مطابق لملاحظة CA28 في المراجعة الأصلية — كانت HIGH ولم تُرسَل لأحمد).
2) الحساب #1 (أصل header) مستبعَد → الأصول ناقصة 744.95.
الإصلاح
Backend: BalanceSheetService يجب أن يحسب صافي دخل الفترة (إيرادات − مصروفات) ويُدرجه ضمن حقوق الملكية كـ "أرباح/خسائر الفترة الجارية".
🟠 فجوة في أداة الفحص
F4 · accounting:integrity-check لا يكتشف هذه المشاكل
HIGH
الاكتشاف
GET /accounting/integrity-check رجع has_issues: false — بينما الدفاتر (في التقارير) غير متزنة فعلياً.
السبب
الفحص يغطي: قيود مرحَّلة بلا رقم · قيود مرحَّلة غير متزنة فردياً · vouchers معتمدة بـ JE درافت · تسويات بنكية بفرق. لكنه لا يفحص: (أ) أن ميزان المراجعة يتزن، (ب) وجود سطور على حسابات header.
الأثر
الـ "defense-in-depth" اللي عمله أحمد (ACC-FIX-9) فيه نقطة عمياء — لن يُنبِّه على هذا النوع من الانحراف خلال 24 ساعة كما هو موعود.
الإصلاح
إضافة فحصين لـ AccountingIntegrityService: posted_lines_on_header_accounts + trial_balance_out_of_balance.
✅ الاختبارات التي نجحت
سلامة الـ GL الأساسية — كل الـ 122 قيد مُرحَّل متزن فردياً · المجموع الكلي 414,532.057 مدين = دائن تماماً
مفيش قيود غير متزنة في حالة draft أو approved
مفيش قيود draft/approved على حسابات header (المشكلة في قيد posted واحد فقط)
integrity-check الأساسي — صفر قيود بلا رقم · صفر vouchers معلّقة · صفر تسويات بفرق
General Ledger لكل حساب — يعمل (HTTP 200)
كل endpoints التقارير مُسجَّلة وتستجيب (27 تقرير)
📋 التوصية
#
الإصلاح
الموديول
الأولوية
F1
منع ترحيل JE على حسابات header + تصحيح منطق دفعات المبيعات
Backend — Sales + Accounting
P0
F3
إدراج صافي دخل الفترة في حقوق الملكية بقائمة المركز المالي
Backend — Accounting Reports
P0
F2
تصحيح القيد #9 بقيد عكسي بعد إصلاح F1 + تحذير التقرير
Backend — data fix
P0
F4
إضافة فحصَي header-account + trial-balance لأداة الـ integrity
Backend — AccountingIntegrityService
P1
ملاحظة: كل المشاكل في الـ Backend — تحتاج تذاكر لأحمد. الفرونت إند (إصلاحات الجلسة: 6 CRITICAL + 10 HIGH + MEDIUM/LOW) منشور وغير متورّط في أي من هذه الأربع.