# سكريبتات إصلاح القيود غير المتزنة

هذه السكريبتات مصممة لمساعدتك في إصلاح مشكلة عدم التوازن في ميزان المراجعة والميزانية العمومية.

## المشكلة الحالية

- **الفرق في ميزان المراجعة**: 449,732.75 ريال
- **الفرق في الميزانية العمومية**: 449,732.75 ريال
- **السبب**: قيود من طرف واحد (قيود ناقصة) في قاعدة البيانات

## السكريبتات المتوفرة

### 1. `fix_unbalanced_entries.php` - تقرير القيود غير المتزنة

**الغرض**: توليد تقرير تفصيلي بجميع القيود غير المتزنة للمراجعة اليدوية.

**الاستخدام**:
```bash
php fix_unbalanced_entries.php
```

**المخرجات**:
- تقرير في الشاشة
- ملف نصي باسم `unbalanced_entries_report_YYYY-MM-DD_HH-MM-SS.txt`

**المحتوى**:
- القيود بدون تاريخ (date_export = NULL)
- القيود بتواريخ مختلفة غير متزنة
- تفاصيل كل قيد غير متزن (الحسابات، المبالغ، الفرق)

---

### 2. `fix_date_export.php` - تعيين تاريخ للقيود الفارغة

**الغرض**: تعيين تاريخ (من created_at) للقيود التي date_export = NULL.

**ملاحظة**: هذا لا يحل مشكلة عدم التوازن، لكنه يجعل القيود قابلة للعرض في التقارير.

**الاستخدام**:
```bash
php fix_date_export.php
```

**المخرجات**:
- سيطلب التأكيد قبل التنفيذ
- سيقوم بتحديث date_export = DATE(created_at) للقيود الفارغة

---

### 3. `auto_fix_unbalanced.php` - إصلاح تلقائي

**الغرض**: إصلاح القيود غير المتزنة بشكل آلي بإضافة طرف تصحيحي.

**تحذير**: هذا السكريبت يعدل البيانات بشكل دائم!

**الاستخدام**:
```bash
php auto_fix_unbalanced.php
```

**ما يفعله**:
1. يبحث عن حساب "فروق تصحيحية" أو ينشئ واحداً جديداً
2. لكل قيد غير متزن، يضيف طرف تصحيحي لتعادله
3. يحفظ الطرف التصحيحي في حساب الفروق

**مثال**:
- إذا كان قيد فاتورة رقم 1: مدين 9,824.12 ودائن 5,293.27 (الفرق 4,530.85)
- سيضيف قيد تصحيحي: دائن 4,530.85 في حساب الفروق

---

## التوصيات

### الخيار 1: الإصلاح اليدوي (الأفضل)

1. شغل `fix_unbalanced_entries.php` للحصول على التقرير
2. راجع كل قيد غير متزن
3. أضف الطرف الناقص يدوياً من خلال النظام
4. شغل السكريبت مرة أخرى للتأكد من التوازن

### الخيار 2: الإصلاح شبه التلقائي

1. شغل `fix_date_export.php` لتعيين التواريخ
2. راجع التقرير من `fix_unbalanced_entries.php`
3. أصلح القيود الكبيرة يدوياً
4. استخدم `auto_fix_unbalanced.php` للقيود الصغيرة

### الخيار 3: الإصلاح التلقائي الكامل

1. شغل `auto_fix_unbalanced.php` مباشرة
2. راجع حساب "فروق تصحيحية" لاحقاً
3. إذا تمكنت من تحديد الأسباب الحقيقية، احذف القيود التصحيحية وأضف القيود الصحيحة

---

## التحقق من التوازن

بعد الإصلاح، يمكنك التحقق من التوازن باستخدام:

```bash
php artisan tinker --execute="
\$diff = \App\Models\credittransactions::where('save', 1)->sum('debtor') - \App\Models\credittransactions::where('save', 1)->sum('creditor');
echo 'الفرق: ' . number_format(\$diff, 2) . ' ريال' . PHP_EOL;
echo (abs(\$diff) < 0.01) ? 'متزن ✓' : 'غير متزن ✗';
"
```

---

## ملاحظات مهمة

1. **نسخ احتياطي**: قبل تشغيل أي سكريبت يعدل البيانات، قم بعمل نسخة احتياطية لقاعدة البيانات
2. **بيئة الاختبار**: يفضل تجربة السكريبتات في بيئة اختبار أولاً
3. **مراجعة يدوية**: الإصلاح اليدوي دائماً أفضل لفهم الأسباب الحقيقية
4. **حساب الفروق**: إذا استخدمت الإصلاح التلقائي، راجع حساب "فروق تصحيحية" بشكل دوري

---

## الدعم

إذا واجهت أي مشاكل، راجع:
- التقرير المولد من `fix_unbalanced_entries.php`
- سجلات Laravel في `storage/logs`
- تأكد من صلاحيات الكتابة على قاعدة البيانات
