# ✅ خطة العمل والمهام التفصيلية

**حالة المشروع:** جاهز للتطبيق الفوري  
**المدة المتوقعة:** 6-8 أسابيع  
**فريق العمل:** 1-2 مطور + 1 محاسب

---

## 📅 الجدول الزمني

| المرحلة | المدة | البدء | الانتهاء | الحالة |
|--------|------|------|----------|--------|
| المرحلة 1: الأساسيات | أسبوعان | W1 | W2 | ⏳ جاهز |
| المرحلة 2: الواجهات | أسبوعان | W2 | W4 | ⏳ جاهز |
| المرحلة 3: القيود التلقائية | أسبوعان | W4 | W6 | ⏳ جاهز |
| المرحلة 4: التقارير | أسبوع | W6 | W7 | ⏳ جاهز |
| المرحلة 5: الاختبار والتحسين | أسبوع | W7 | W8 | ⏳ جاهز |

---

## 🎯 المرحلة الأولى: الأساسيات (أسبوعان)

### المهام الأساسية:

#### 1. إعداد قاعدة البيانات (يوم 1-2)
- [ ] إنشاء جدول `chart_of_accounts`
- [ ] إنشاء جدول `journal_entries`
- [ ] إنشاء جدول `journal_entry_lines`
- [ ] إنشاء جدول `journal_mappings`
- [ ] إنشاء جدول `account_balances`
- [ ] إنشاء الفهارس المناسبة
- [ ] اختبار الهجرات

**ملاحظات:**
```
- استخدم migrations فقط
- تأكد من Referential Integrity
- ضع soft deletes للحسابات
```

#### 2. إنشاء Models (يوم 2-3)
- [ ] `ChartOfAccount` model
- [ ] `JournalEntry` model
- [ ] `JournalEntryLine` model
- [ ] `JournalMapping` model
- [ ] `AccountBalance` model
- [ ] العلاقات (Relationships)
- [ ] Scopes والدوال المساعدة

**الملفات:**
```
app/Models/Accounting/
├── ChartOfAccount.php
├── JournalEntry.php
├── JournalEntryLine.php
├── JournalMapping.php
└── AccountBalance.php
```

#### 3. إنشاء Seeders (يوم 4-5)
- [ ] `ChartOfAccountsSeeder` - بيانات شجرة الحسابات
- [ ] `JournalMappingSeeder` - ربط الحسابات الافتراضي
- [ ] تشغيل seeders الاختبار

**البيانات الأساسية:**
```php
[
    'code' => '1000',
    'name' => 'Current Assets',
    'name_ar' => 'الأصول الجارية',
    'account_type' => 'asset',
    'normal_balance' => 'debit',
]
```

#### 4. Services الأساسية (يوم 6-7)
- [ ] `ChartOfAccountService` - خدمة الحسابات
- [ ] `JournalEntryService` - خدمة القيود
- [ ] `BalanceCalculationService` - حساب الأرصدة

#### 5. الاختبارات (يوم 8-10)
- [ ] Unit tests للـ Models
- [ ] Feature tests للـ Services
- [ ] Data validation tests
- [ ] Balance verification tests

**أمثلة:**
```php
test('chart of account can be created', function () {
    // test code
});

test('journal entry must be balanced', function () {
    // test code
});
```

---

## 🎨 المرحلة الثانية: الواجهات (أسبوعان)

### Filament Resources

#### 1. ChartOfAccountResource (يوم 1-2)
**الميزات:**
- [ ] Create - إضافة حساب جديد
- [ ] Edit - تعديل الحساب
- [ ] Delete - حذف الحساب (مع قيود)
- [ ] List - عرض الحسابات بشكل شجري
- [ ] Search - بحث سريع
- [ ] Export - تصدير Excel

**الحقول:**
```
- Code (نص، مفتاح فريد)
- Name (نص، إنجليزي)
- Name AR (نص، عربي)
- Account Type (select: asset, liability, equity, revenue, expense)
- Normal Balance (select: debit, credit)
- Parent Account (relation، للتسلسل الهرمي)
- Level (رقم، حساب تلقائي)
- Description (textarea)
- Is Active (toggle)
```

**الواجهة الخاصة:**
```php
// pages/ListChartOfAccounts.php
- عرض الحسابات في tree view
- فلاتر: حسب النوع، الحالة
```

#### 2. JournalEntryResource (يوم 3-5)
**الميزات:**
- [ ] Create - إضافة قيد يدوي
- [ ] Edit - تعديل القيد (إذا لم ينشر)
- [ ] Delete - حذف القيد (إذا لم ينشر)
- [ ] List - عرض جميع القيود
- [ ] Post/Unpost - نشر/إلغاء نشر القيد
- [ ] Validation - التحقق من التوازن

**الحقول الأساسية:**
```
- Entry Number (auto-generated)
- Entry Date (date picker)
- Description (textarea)
- Description AR (textarea)
- Reference Type (select)
- Reference ID (number)
- Posted (toggle، read-only)
```

**الحقول المتكررة (Repeater):**
```
Lines:
  - Account (relation select)
  - Debit (decimal)
  - Credit (decimal)
  - Description (text)
```

**الحساب الخاص:**
```php
// validation
- Dr = Cr (يجب أن تتساوى)
- إذا لم تتساوى: رسالة خطأ واضحة
- عرض مجموع Dr و Cr أسفل الجدول
```

#### 3. JournalMappingResource (يوم 5-7)
**الغرض:** ربط الفواتير بالحسابات

**المجموعات:**
```
Sales Mapping (إعدادات المبيعات)
├─ sales_account (حساب المبيعات)
├─ discount_account (حساب الخصم)
├─ returns_account (حساب العوائد)
├─ ar_account (حساب الذمم المدينة)
├─ cogs_account (حساب تكلفة المباعة)
├─ inventory_account (حساب المخزون)
└─ tax_account (حساب الضريبة)

Purchase Mapping (إعدادات المشتريات)
├─ purchases_account
├─ ap_account
├─ inventory_account
└─ tax_account

Payment Mapping (إعدادات الدفوعات)
├─ cash_account
├─ bank_account
└─ expense_accounts
```

**الواجهة الخاصة:**
```php
// pages/JournalMappingConfiguration.php
- التحقق: هل تم اختيار جميع الحسابات المطلوبة؟
- Preview: عرض كيف ستبدو القيود
- Validation: لا حسابات مفقودة
```

---

## ⚙️ المرحلة الثالثة: القيود التلقائية (أسبوعان)

### 1. إعداد Events (يوم 1-2)

**الأحداث المطلوبة:**
```php
app/Events/Accounting/
├── SaleCreated.php
├── SaleUpdated.php
├── SaleDeleted.php
├── PurchaseCreated.php
├── PurchaseUpdated.php
├── PurchaseDeleted.php
├── PaymentReceived.php
├── PaymentPaid.php
└── ReturnCreated.php
```

### 2. إعداد Listeners (يوم 2-5)

**الـ Listeners:**
```php
app/Listeners/Accounting/
├── CreateSalesJournalEntries.php
├── UpdateSalesJournalEntries.php
├── DeleteSalesJournalEntries.php
├── CreatePurchaseJournalEntries.php
├── UpdatePurchaseJournalEntries.php
├── DeletePurchaseJournalEntries.php
├── RecordPaymentReceived.php
├── RecordPaymentPaid.php
└── RecordReturnJournalEntry.php
```

**مثال Listener:**
```php
class CreateSalesJournalEntries implements ShouldQueue {
    public function handle(SaleCreated $event) {
        $saleJournalService = app(SalesJournalService::class);
        $saleJournalService->createSalesEntries($event->sale);
    }
}
```

### 3. تسجيل Events (يوم 5-6)

**في AppServiceProvider:**
```php
Event::listen(SaleCreated::class, CreateSalesJournalEntries::class);
Event::listen(PurchaseCreated::class, CreatePurchaseJournalEntries::class);
// إلخ
```

### 4. اختبار القيود (يوم 7-10)

**Test Cases:**
```php
test('sale creates correct journal entries', function () {
    $sale = Sale::factory()->create();
    $entries = JournalEntry::where('reference_id', $sale->id)->get();
    
    assert($entries->count() === 2); // قيد المبيعات + COGS
    assert($entries->first()->isBalanced());
});
```

---

## 📊 المرحلة الرابعة: التقارير (أسبوع)

### 1. TrialBalanceReport (يوم 1-2)

**الميزات:**
- [ ] جدول بجميع الحسابات
- [ ] عمود رصيد خصم
- [ ] عمود رصيد ائتمان
- [ ] مجاميع
- [ ] فحص التوازن
- [ ] تصدير PDF/Excel

**الصيغة:**
```
ميزان المراجعة
من تاريخ: _____ إلى تاريخ: _____

| الحساب | الخصم | الائتمان |
|-------|------|--------|
| ...   | ...  | ...    |
|-------|------|--------|
| الإجمالي | ... | ... |
```

### 2. IncomeStatementReport (يوم 2-3)

**العناصر:**
- الإيرادات (مع التفاصيل)
- الخصم والعوائد
- صافي المبيعات
- تكلفة السلع المباعة
- الربح الإجمالي
- المصروفات
- الربح/الخسارة قبل الضريبة
- الضريبة
- الربح الصافي

### 3. BalanceSheetReport (يوم 3-4)

**الأقسام:**
```
الأصول:
├── الأصول الجارية
└── الأصول الثابتة

الخصوم:
├── الخصوم الجارية
└── الخصوم طويلة الأجل

حقوق الملكية:
├── رأس المال
└── الأرباح المحتفظ بها
```

**التحقق:**
```
الأصول = الخصوم + حقوق الملكية
```

### 4. FinancialPositionReport (يوم 4-5)

**المحتوى:**
- الأرصدة (من Balance Sheet)
- النسب المالية:
  - نسبة السيولة الحالية
  - نسبة السيولة السريعة
  - نسبة الملاءة
  - نسبة الأرباح
  - العائد على الأصول (ROA)
  - العائد على الملكية (ROE)
- الاتجاهات

---

## 🧪 المرحلة الخامسة: الاختبار والتحسين (أسبوع)

### 1. الاختبارات (يوم 1-2)

**أنواع الاختبارات:**

**Unit Tests:**
```php
- حساب الأرصدة
- توازن القيود
- الحسابات الفرعية
```

**Feature Tests:**
```php
- إنشاء قيد يدوي
- نشر قيد
- حذف قيد
- إنشاء قيود تلقائية من فاتورة
```

**API Tests:**
```php
- الحصول على ميزان المراجعة
- الحصول على قائمة الدخل
- الحصول على الميزانية العمومية
```

### 2. التحسينات (يوم 2-3)

- [ ] تحسين الأداء (Caching)
- [ ] تحسين الواجهة (UX)
- [ ] إضافة رسائل خطأ واضحة
- [ ] تحسين التقارير

### 3. التوثيق (يوم 4)

- [ ] توثيق الـ API
- [ ] كتابة تعليقات في الكود
- [ ] دليل المستخدم
- [ ] كتيب التدريب

---

## 📋 قائمة التحقق النهائية

### قبل الإطلاق:

**الوظائف:**
- [ ] جميع الحسابات تعمل بشكل صحيح
- [ ] جميع القيود متوازنة
- [ ] جميع التقارير دقيقة
- [ ] جميع الاختبارات تمر بنجاح

**الأداء:**
- [ ] الصفحات تحمل بسرعة معقولة
- [ ] لا توجد تسريب الذاكرة
- [ ] قاعدة البيانات محسّنة

**الأمان:**
- [ ] التحقق من الصلاحيات
- [ ] عدم تعديل القيود المنشورة
- [ ] Audit trail كامل
- [ ] لا مشاكل SQL injection

**التوافقية:**
- [ ] تعمل على جميع المتصفحات
- [ ] تعمل على الأجهزة المحمولة
- [ ] تعمل مع جميع إصدارات اللغات

---

## 🚀 خطوات الإطلاق

### 1. التحضير (يوم 1)
- [ ] عمل نسخة احتياطية من البيانات
- [ ] التحقق من البيانات الموجودة
- [ ] تدريب الموظفين
- [ ] إنشاء شجرة حسابات نهائية

### 2. الإطلاق (يوم 2)
- [ ] تطبيق الهجرات (Migrations)
- [ ] تشغيل Seeders
- [ ] بدء استخدام النظام
- [ ] مراقبة الأخطاء

### 3. ما بعد الإطلاق (أيام 3+)
- [ ] دعم المستخدمين
- [ ] تصحيح الأخطاء
- [ ] تحسينات إضافية
- [ ] تقارير دورية

---

## 💻 أدوات التطوير

**اللغات والأطر:**
- Laravel 11
- Filament 3
- MySQL 8
- PHP 8.2+

**الحزم المطلوبة:**
```
composer require filament/filament
composer require spatie/laravel-permission
composer require maatwebsite/excel
composer require barryvdh/laravel-dompdf
```

**أدوات المساعدة:**
```bash
# تشغيل الاختبارات
php artisan test

# التحقق من الكود
./vendor/bin/pint

# تشغيل هجرات
php artisan migrate

# تشغيل seeders
php artisan db:seed --class=ChartOfAccountsSeeder
```

---

## 📞 نقاط الاتصال

**للأسئلة التقنية:**
- مطور: [البريد الإلكتروني]
- مراجعة الكود: Pull Requests

**للأسئلة المحاسبية:**
- محاسب: [البريد الإلكتروني]
- تحديد الحسابات: Mapping

---

## 🎯 مقاييس النجاح

```
✓ النظام يعمل بدون أخطاء
✓ جميع القيود متوازنة
✓ التقارير دقيقة
✓ الموظفون يستطيعون استخدامه
✓ الأداء مقبول
✓ البيانات محمية
```

---

**هذه الخطة شاملة وقابلة للتعديل حسب الاحتياجات الفعلية.** 🎯

**متى تريد أن تبدأ؟** 🚀
