# نظام تصنيف الإيرادات والمصروفات

## نظرة عامة

تم إنشاء نظام شامل لتصنيف الإيرادات والمصروفات باستخدام جداول قاعدة بيانات منفصلة، مما يتيح المرونة الكاملة في إدارة وتخصيص الأنواع.

---

## الملفات التي تم إنشاؤها

### 1. Migrations (قاعدة البيانات)

#### ✅ `database/migrations/2026_03_29_012458_create_revenue_types_table.php`
جدول أنواع الإيرادات مع الحقول:
- `id`: المعرف الفريد
- `code`: كود مميز للنوع (مثل: installment_payment)
- `name_ar`: الاسم بالعربية
- `name_en`: الاسم بالإنجليزية
- `description_ar`: الوصف بالعربية
- `description_en`: الوصف بالإنجليزية
- `icon`: أيقونة Heroicon
- `color`: اللون المميز (success, info, primary...)
- `is_active`: هل النوع نشط
- `sort_order`: ترتيب العرض

#### ✅ `database/migrations/2026_03_29_012459_create_expense_types_table.php`
جدول أنواع المصروفات (نفس البنية)

### 2. Models (النماذج)

#### ✅ `app/Models/RevenueType.php`
- دعم الترجمة التلقائية حسب اللغة
- Scopes: `active()`, `ordered()`
- Attributes: `getNameAttribute()`, `getDescriptionAttribute()`

#### ✅ `app/Models/ExpenseType.php`
- نفس ميزات RevenueType

### 3. Seeders (البيانات الأولية)

#### ✅ `database/seeders/RevenueTypesSeeder.php`
**أنواع الإيرادات (12 نوع):**

##### الأنواع الأساسية (من النظام الحالي):
1. **قسط مسدد** (installment_payment) - مدفوعات الأقساط
2. **فاتورة بيع نقدية** (cash_sale) - مبيعات نقدية مباشرة
3. **دفعة عميل** (customer_payment) - دفعات مباشرة
4. **إيداع شريك** (partner_deposit) - إيداعات الشركاء

##### أنواع إضافية:
5. **مبيعات آجلة** (credit_sale) - مبيعات بالدفع الآجل
6. **عوائد بنكية** (bank_interest) - فوائد على الودائع
7. **خصومات مكتسبة** (discounts_earned) - خصومات من الموردين
8. **استرداد مرتجعات** (sale_returns_recovered) - استرداد من مرتجعات
9. **إيرادات استثمارية** (investment_income) - عوائد استثمارات
10. **إيرادات خدمات** (service_revenue) - خدمات للعملاء
11. **إيرادات إيجارية** (rental_income) - تأجير ممتلكات
12. **إيرادات متنوعة** (miscellaneous_revenue) - أخرى

#### ✅ `database/seeders/ExpenseTypesSeeder.php`
**أنواع المصروفات (18 نوع):**

##### الأنواع الأساسية (من النظام الحالي):
1. **فاتورة شراء** (purchase) - شراء البضائع
2. **مصروف عام** (expense) - مصروفات تشغيلية
3. **مسحوبات شريك** (partner_withdrawal) - مسحوبات الشركاء

##### أنواع إضافية:
4. **رواتب وأجور** (salaries_wages) - رواتب الموظفين
5. **إيجارات** (rent) - إيجار المحلات والمخازن
6. **مرافق وخدمات** (utilities) - كهرباء، ماء، إنترنت
7. **صيانة وإصلاح** (maintenance) - صيانة المعدات
8. **تسويق وإعلان** (marketing) - حملات تسويقية
9. **مصروفات إدارية** (administrative) - مصروفات مكتبية
10. **مواصلات ونقل** (transportation) - نقل وشحن
11. **عمولات بنكية** (bank_charges) - رسوم بنكية
12. **ضرائب ورسوم** (taxes) - ضرائب حكومية
13. **تأمينات** (insurance) - أقساط التأمين
14. **إهلاك** (depreciation) - إهلاك الأصول
15. **تدريب وتطوير** (training) - تدريب الموظفين
16. **مستلزمات مكتبية** (office_supplies) - أدوات مكتبية
17. **أتعاب مهنية** (professional_fees) - محاسبين ومحامين
18. **مصروفات متنوعة** (miscellaneous_expense) - أخرى

---

## خطوات التثبيت

### 1. تحديث Autoload
```bash
composer dump-autoload
```

### 2. تشغيل Migrations
```bash
php artisan migrate
```

سيتم إنشاء الجدولين:
- ✅ `revenue_types`
- ✅ `expense_types`

### 3. تشغيل Seeders
```bash
# تشغيل seeders محددة
php artisan db:seed --class=RevenueTypesSeeder
php artisan db:seed --class=ExpenseTypesSeeder

# أو تشغيل كل الـ seeders
php artisan db:seed
```

### 4. التحقق من البيانات
```bash
# عرض أنواع الإيرادات
php artisan tinker
>>> App\Models\RevenueType::count()
>>> App\Models\RevenueType::all()

# عرض أنواع المصروفات
>>> App\Models\ExpenseType::count()
>>> App\Models\ExpenseType::all()
```

---

## الاستخدام في الكود

### جلب أنواع الإيرادات
```php
use App\Models\RevenueType;

// جميع الأنواع النشطة مرتبة
$revenueTypes = RevenueType::active()->ordered()->get();

// نوع محدد بالكود
$installmentType = RevenueType::where('code', 'installment_payment')->first();

// الاسم المترجم تلقائياً
echo $installmentType->name; // يعرض حسب اللغة الحالية
```

### جلب أنواع المصروفات
```php
use App\Models\ExpenseType;

// جميع الأنواع النشطة
$expenseTypes = ExpenseType::active()->ordered()->get();

// للاستخدام في Select/Dropdown
$options = ExpenseType::active()
    ->ordered()
    ->pluck('name_ar', 'code')
    ->toArray();
```

### في Filament Forms
```php
use App\Models\RevenueType;
use Filament\Forms\Components\Select;

Select::make('revenue_type_code')
    ->label('نوع الإيراد')
    ->options(function() {
        return RevenueType::active()
            ->ordered()
            ->pluck('name_ar', 'code');
    })
    ->required()
```

---

## المميزات

### 1. مرونة كاملة
- ✅ إضافة أنواع جديدة بسهولة
- ✅ تعديل الأنواع الموجودة
- ✅ تفعيل/تعطيل الأنواع
- ✅ إعادة ترتيب الأنواع

### 2. دعم متعدد اللغات
- ✅ عربي وإنجليزي
- ✅ ترجمة تلقائية حسب الـ locale
- ✅ سهولة إضافة لغات جديدة

### 3. تخصيص الواجهة
- ✅ أيقونات Heroicon لكل نوع
- ✅ ألوان مميزة لكل نوع
- ✅ ترتيب عرض مخصص

### 4. قابلية التوسع
- ✅ سهولة إضافة حقول جديدة
- ✅ ربط بجداول أخرى
- ✅ تقارير وإحصائيات حسب النوع

---

## التطوير المستقبلي المقترح

### 1. ربط الجداول الموجودة
إضافة `revenue_type_code` و `expense_type_code` لـ:
- `payments` table
- `sales` table
- `purchases` table
- `expenses` table

### 2. إنشاء Resources في Filament
- RevenueTypeResource - لإدارة أنواع الإيرادات
- ExpenseTypeResource - لإدارة أنواع المصروفات

### 3. تحديث التقارير
تعديل `GeneralTreasuryReport` لاستخدام الأنواع من الجداول بدلاً من الـ hardcoded types

### 4. Dashboard Widgets
- Widget يعرض توزيع الإيرادات حسب النوع (Pie Chart)
- Widget يعرض توزيع المصروفات حسب النوع (Bar Chart)

---

## الملخص

✅ **تم إنشاء:**
- 2 Migrations
- 2 Models
- 2 Seeders
- 30 نوع مسبق التعريف (12 إيراد + 18 مصروف)

✅ **جاهز للاستخدام:**
- فقط قم بتشغيل `php artisan migrate` و `php artisan db:seed`

✅ **قابل للتوسع:**
- يمكن إضافة أنواع جديدة
- يمكن ربطه بالجداول الموجودة
- يمكن إنشاء واجهات إدارة كاملة

---

**تاريخ الإن شاء**: 29 مارس 2026  
**الحالة**: جاهز للتنفيذ ✅
