<div dir="rtl" style="font-family: Arial, sans-serif; max-width: 1100px; margin: auto; padding: 20px; line-height: 1.8;">

# GT4 ERP System
## وثيقة تكميلية — تفاصيل المحاسبة المفقودة
### Accounting Module — Detailed Supplement

---

| البيان | التفاصيل |
|--------|----------|
| المشروع | GT4 ERP System |
| الوثيقة | تكميل تفاصيل مديول المحاسبة |
| رقم الإصدار | 1.0 |
| التاريخ | 2026-02-14 |
| الحالة | نهائية |
| مرجع | GT4_ERP_Complete_BRD_v2.0 — أقسام 22-34 |

---

# فهرس المحتويات

1. نظام الأرصدة الافتتاحية (Opening Balances)
2. إقفال نهاية السنة المالية (Year-End Closing)
3. المعاملات بين الشركات (Inter-Company Transactions)
4. قواعد توزيع التكاليف (Cost Allocation Rules)
5. التسوية البنكية — قواعد المطابقة التلقائية (Bank Reconciliation Matching)

---

# 1. نظام الأرصدة الافتتاحية (Opening Balances)

## 1.1 متى يُستخدم؟

| السيناريو | الوصف |
|----------|-------|
| بداية استخدام النظام لأول مرة | الشركة تنتقل من نظام آخر أو من دفاتر يدوية |
| فتح سنة مالية جديدة (تلقائي) | النظام ينقل الأرصدة تلقائياً — لا يحتاج تدخل |
| إضافة شركة جديدة | شركة موجودة تبدأ استخدام النظام |

## 1.2 مراحل إدخال الأرصدة الافتتاحية

```
المرحلة 1: إعداد البيئة
    ↓
المرحلة 2: إدخال أرصدة شجرة الحسابات
    ↓
المرحلة 3: إدخال أرصدة الأطراف التجارية (عملاء + موردين)
    ↓
المرحلة 4: إدخال أرصدة المخزون الافتتاحية
    ↓
المرحلة 5: إدخال الأصول الثابتة وإهلاكاتها المتراكمة
    ↓
المرحلة 6: إدخال الشيكات المعلقة
    ↓
المرحلة 7: المراجعة والتأكيد
    ↓
المرحلة 8: قفل الأرصدة الافتتاحية
```

## 1.3 المرحلة 1 — إعداد البيئة (قبل أي أرصدة)

| # | الخطوة | مطلوب | ملاحظات |
|---|--------|-------|---------|
| 1 | إنشاء شجرة الحسابات كاملة | نعم | على الأقل الحسابات الرئيسية |
| 2 | تعريف السنة المالية الأولى | نعم | تحديد بداية/نهاية |
| 3 | تعريف العملات وأسعار الصرف | نعم | العملة الأساسية + أي عملات أجنبية |
| 4 | تعريف الفروع | إذا متعدد الفروع | - |
| 5 | تعريف مراكز التكلفة | إذا مطلوب | - |
| 6 | تعريف وحدات القياس والتصنيفات | نعم | قبل إدخال المنتجات |

## 1.4 المرحلة 2 — أرصدة شجرة الحسابات

### شاشة إدخال الأرصدة الافتتاحية

```
┌─────────────────────────────────────────────────────────────┐
│  إدخال الأرصدة الافتتاحية          تاريخ: [01/01/2026]    │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  رقم الحساب │ اسم الحساب      │  مدين     │  دائن       │
│  ──────────┼─────────────────┼──────────┼────────────  │
│  1101      │ الصندوق          │ 50,000   │              │
│  1102      │ البنك الأهلي     │ 250,000  │              │
│  1201      │ الذمم المدينة    │ 180,000  │              │
│  1301      │ المخزون          │ 320,000  │              │
│  1401      │ الأصول الثابتة   │ 500,000  │              │
│  1402      │ مجمع الإهلاك     │          │ 120,000      │
│  2101      │ الذمم الدائنة    │          │ 95,000       │
│  2201      │ قرض بنكي         │          │ 200,000      │
│  3101      │ رأس المال        │          │ 800,000      │
│  3201      │ أرباح مرحلة      │          │ 85,000       │
│  ──────────┼─────────────────┼──────────┼────────────  │
│            │ الإجمالي         │1,300,000 │ 1,300,000    │
│            │ الفرق            │    0     │  ✅ متوازن   │
│                                                             │
│  [حفظ كمسودة]  [مراجعة]  [تأكيد وترحيل]                   │
└─────────────────────────────────────────────────────────────┘
```

### آلية العمل

| الخطوة | الوصف |
|--------|-------|
| 1 | المستخدم يختار تاريخ الأرصدة الافتتاحية (عادة أول يوم في السنة المالية) |
| 2 | يظهر كل الحسابات الفرعية (الترحيلية) في جدول |
| 3 | المستخدم يُدخل الرصيد في خانة مدين أو دائن حسب طبيعة الحساب |
| 4 | النظام يحسب الفرق تلقائياً — يجب أن يكون صفر |
| 5 | إذا الفرق ليس صفر → لا يمكن التأكيد |
| 6 | عند التأكيد → النظام يُنشئ **قيد افتتاحي** تلقائياً |

### حقول قيد الأرصدة الافتتاحية

| الحقل | القيمة |
|-------|--------|
| النوع | `opening_balance` |
| التاريخ | أول يوم في السنة المالية |
| الوصف | "أرصدة افتتاحية — بداية السنة المالية YYYY" |
| المصدر | `system.opening_balance` |
| الحالة | مرحّل مباشرة (لا يمر بمسودة) |
| قابل للتعديل | نعم — فقط قبل قفل الأرصدة الافتتاحية |
| قابل للحذف | لا — يُعدل فقط |

## 1.5 المرحلة 3 — أرصدة الأطراف التجارية

> **مهم:** أرصدة العملاء والموردين يجب أن تتطابق مع إجمالي الذمم المدينة والدائنة في شجرة الحسابات.

### شاشة أرصدة العملاء

```
┌──────────────────────────────────────────────────────────────┐
│  أرصدة العملاء الافتتاحية           العملة: [ج.م]           │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  كود     │ اسم العميل        │ الرصيد    │ العملة │ بالأساسية│
│  ────────┼──────────────────┼──────────┼───────┼─────────│
│  BP-001  │ شركة النور        │ 50,000   │ EGP   │ 50,000  │
│  BP-003  │ مؤسسة الفجر       │ 30,000   │ EGP   │ 30,000  │
│  BP-007  │ شركة الأمل        │ 5,000    │ USD   │ 250,000 │
│  BP-012  │ محلات السلام       │ 20,000   │ EGP   │ 20,000  │
│  ────────┼──────────────────┼──────────┼───────┼─────────│
│          │ إجمالي بالعملة     │          │       │ 350,000 │
│          │ رصيد الذمم المدينة │          │       │ 350,000 │
│          │ الفرق              │          │       │ 0 ✅    │
│                                                              │
│  ⚠ يجب أن يتطابق الإجمالي مع رصيد حساب الذمم المدينة      │
│                                                              │
│  [حفظ]  [تأكيد]                                              │
└──────────────────────────────────────────────────────────────┘
```

### القواعد

| رقم | القاعدة |
|-----|---------|
| BR-OB-001 | إجمالي أرصدة العملاء = رصيد حساب الذمم المدينة في الافتتاحي |
| BR-OB-002 | إجمالي أرصدة الموردين = رصيد حساب الذمم الدائنة في الافتتاحي |
| BR-OB-003 | أرصدة بالعملة الأجنبية تُحوّل بسعر الصرف بتاريخ الافتتاح |
| BR-OB-004 | الرصيد الافتتاحي يُسجل في جدول `core_debt_changes` كأول حركة |
| BR-OB-005 | يمكن إدخال تفصيل الفواتير المعلقة (اختياري — لتقرير أعمار الديون) |

### تفصيل الفواتير المعلقة (اختياري)

| # | اسم الحقل | النوع | ملاحظات |
|---|-----------|-------|---------|
| 1 | `partner_id` | FK | الطرف التجاري |
| 2 | `invoice_ref` | VARCHAR | رقم الفاتورة من النظام القديم |
| 3 | `invoice_date` | DATE | تاريخ الفاتورة الأصلي |
| 4 | `due_date` | DATE | تاريخ الاستحقاق — مهم لتقرير أعمار الديون |
| 5 | `original_amount` | DECIMAL | المبلغ الأصلي |
| 6 | `paid_amount` | DECIMAL | المبلغ المسدد |
| 7 | `remaining_amount` | DECIMAL | المتبقي = الأصلي - المسدد |
| 8 | `currency_id` | FK | العملة |
| 9 | `notes` | TEXT | ملاحظات |

> **الفائدة:** إدخال تفاصيل الفواتير المعلقة يسمح بتقرير أعمار ديون دقيق من أول يوم. بدونها، كل الأرصدة ستظهر بعمر واحد (تاريخ الافتتاح).

## 1.6 المرحلة 4 — أرصدة المخزون

| طريقة الإدخال | الوصف | متى تُستخدم |
|-------------|-------|-----------|
| إجمالي فقط | رصيد المخزون كرقم واحد في الشجرة | لا يوجد مديول مخازن |
| تفصيلي بالمنتج | كمية + سعر تكلفة لكل منتج | مع مديول المخازن |
| استيراد Excel | ملف Excel بكل المنتجات والكميات | أعداد كبيرة من المنتجات |

### حقول رصيد المنتج الافتتاحي

| # | اسم الحقل | النوع | ملاحظات |
|---|-----------|-------|---------|
| 1 | `product_id` | FK | المنتج |
| 2 | `store_id` | FK | المخزن |
| 3 | `quantity` | DECIMAL | الكمية |
| 4 | `unit_cost` | DECIMAL | تكلفة الوحدة |
| 5 | `total_cost` | DECIMAL | محسوب = كمية × تكلفة |
| 6 | `batch_no` | VARCHAR | رقم الدفعة (إذا بدفعات) |
| 7 | `expiry_date` | DATE | تاريخ الصلاحية (إذا مطلوب) |
| 8 | `serial_numbers` | TEXT | أرقام تسلسلية (إذا بتسلسل) |

### القاعدة

```
مجموع (كمية × تكلفة) لكل المنتجات = رصيد حساب المخزون في الأرصدة الافتتاحية
```

## 1.7 المرحلة 5 — الأصول الثابتة

| # | اسم الحقل | النوع | ملاحظات |
|---|-----------|-------|---------|
| 1 | اسم الأصل | نص | - |
| 2 | الفئة | قائمة | مركبات/أثاث/معدات... |
| 3 | تاريخ الشراء الأصلي | DATE | التاريخ الحقيقي |
| 4 | التكلفة الأصلية | DECIMAL | سعر الشراء الأصلي |
| 5 | مجمع الإهلاك حتى تاريخ الافتتاح | DECIMAL | المبلغ المستهلك |
| 6 | القيمة الدفترية | DECIMAL | محسوب = التكلفة - مجمع الإهلاك |
| 7 | العمر الافتراضي المتبقي (شهور) | INT | المتبقي من العمر |
| 8 | طريقة الإهلاك | قائمة | ثابت/متناقص/متسارع |
| 9 | القيمة التخريدية | DECIMAL | - |
| 10 | الموقع | قائمة | - |

### القاعدة

```
مجموع التكلفة الأصلية = رصيد حساب الأصول الثابتة في الافتتاحي
مجموع مجمع الإهلاك = رصيد حساب مجمع الإهلاك في الافتتاحي
```

## 1.8 المرحلة 6 — الشيكات المعلقة

### شيكات واردة معلقة (من عملاء)

| # | اسم الحقل | النوع | ملاحظات |
|---|-----------|-------|---------|
| 1 | رقم الشيك | VARCHAR | - |
| 2 | اسم العميل (الساحب) | FK | الطرف التجاري |
| 3 | البنك المسحوب عليه | VARCHAR | - |
| 4 | المبلغ | DECIMAL | - |
| 5 | تاريخ الاستحقاق | DATE | - |
| 6 | الحالة | ENUM | تحت التحصيل / في البنك |

### شيكات صادرة معلقة (لموردين)

| # | اسم الحقل | النوع | ملاحظات |
|---|-----------|-------|---------|
| 1 | رقم الشيك | VARCHAR | - |
| 2 | اسم المورد (المستفيد) | FK | الطرف التجاري |
| 3 | البنك المسحوب عليه | FK | حساب بنكي |
| 4 | المبلغ | DECIMAL | - |
| 5 | تاريخ الاستحقاق | DATE | - |
| 6 | الحالة | ENUM | مسلّم / لم يُصرف بعد |

## 1.9 المرحلة 7 — المراجعة والتأكيد

### تقرير مراجعة الأرصدة الافتتاحية

| البند | المبلغ في الشجرة | المبلغ التفصيلي | الفرق | الحالة |
|-------|-----------------|----------------|-------|--------|
| الذمم المدينة | 180,000 | 180,000 | 0 | متطابق |
| الذمم الدائنة | 95,000 | 95,000 | 0 | متطابق |
| المخزون | 320,000 | 320,000 | 0 | متطابق |
| الأصول (صافي) | 380,000 | 380,000 | 0 | متطابق |
| ميزان المراجعة | 0 | - | 0 | متوازن |

### القواعد

| رقم | القاعدة |
|-----|---------|
| BR-OB-010 | لا يمكن تأكيد الأرصدة إلا إذا الميزان متوازن (مدين = دائن) |
| BR-OB-011 | لا يمكن تأكيد إلا إذا تفاصيل العملاء = إجمالي الذمم المدينة |
| BR-OB-012 | لا يمكن تأكيد إلا إذا تفاصيل الموردين = إجمالي الذمم الدائنة |
| BR-OB-013 | لا يمكن تأكيد إلا إذا تفاصيل المخزون = إجمالي حساب المخزون |
| BR-OB-014 | لا يمكن تأكيد إلا إذا تفاصيل الأصول = إجمالي حسابات الأصول |

## 1.10 المرحلة 8 — قفل الأرصدة الافتتاحية

| الإجراء | الوصف |
|---------|-------|
| قفل الأرصدة | بعد التأكد من صحة كل شيء |
| بعد القفل | لا يمكن تعديل الأرصدة إلا بفتح القفل (صلاحية مدير مالي) |
| فتح القفل | يحتاج صلاحية `accounting.opening_balance.unlock` |
| سجل المراجعة | كل تعديل على الأرصدة بعد القفل يُسجل في Audit Trail |

---

# 2. إقفال نهاية السنة المالية (Year-End Closing)

## 2.1 نظرة عامة

إقفال السنة المالية هو عملية محاسبية تتم مرة واحدة في نهاية كل سنة مالية لنقل نتائج الأعمال إلى حقوق الملكية وفتح سنة جديدة.

## 2.2 أنواع الحسابات وسلوكها عند الإقفال

| نوع الحساب | التصنيف | السلوك عند الإقفال |
|-----------|---------|-------------------|
| الأصول | دائم (مستمر) | الرصيد يُنقل كما هو للسنة الجديدة |
| الخصوم | دائم (مستمر) | الرصيد يُنقل كما هو للسنة الجديدة |
| حقوق الملكية | دائم (مستمر) | الرصيد يُنقل كما هو + صافي الربح |
| الإيرادات | مؤقت (يُغلق) | الرصيد يُصفّر → يُنقل لحساب ملخص الدخل |
| المصروفات | مؤقت (يُغلق) | الرصيد يُصفّر → يُنقل لحساب ملخص الدخل |

## 2.3 خطوات الإقفال بالتفصيل

```
الخطوة 1: التحقق من الجاهزية
    ↓
الخطوة 2: قيود التسوية (Adjusting Entries)
    ↓
الخطوة 3: مراجعة ميزان المراجعة بعد التسوية
    ↓
الخطوة 4: قيد إقفال الإيرادات
    ↓
الخطوة 5: قيد إقفال المصروفات
    ↓
الخطوة 6: قيد إقفال ملخص الدخل → أرباح مرحلة
    ↓
الخطوة 7: إقفال فترة الإقفال
    ↓
الخطوة 8: فتح السنة الجديدة ونقل الأرصدة
```

### الخطوة 1 — التحقق من الجاهزية

| # | الفحص | مطلوب | ملاحظات |
|---|-------|-------|---------|
| 1 | كل القيود مرحّلة | نعم | لا قيود مسودة أو معلقة |
| 2 | كل الفترات الشهرية مقفلة | نعم | 12 فترة مقفلة |
| 3 | التسوية البنكية مكتملة | مستحسن | تحذير إذا لم تكتمل |
| 4 | الإهلاك الشهري مكتمل | مستحسن | 12 قيد إهلاك |
| 5 | ميزان المراجعة متوازن | نعم | لا يمكن الاستمرار إذا غير متوازن |
| 6 | لا فروقات عملة غير مسجلة | مستحسن | تحذير |

### الخطوة 2 — قيود التسوية

| نوع التسوية | الوصف | المثال |
|-------------|-------|--------|
| إيرادات مستحقة | إيرادات تمت لم تُسجل | خدمات مؤداة لم تُفوتر |
| مصروفات مستحقة | مصروفات تمت لم تُسجل | فواتير خدمات لم تصل |
| إيرادات مقدمة | مبالغ مقبوضة لم تُكتسب | اشتراكات مقدمة |
| مصروفات مقدمة | مبالغ مدفوعة لم تُستنفد | إيجار مدفوع مقدماً |
| مخصصات | ديون مشكوك فيها | تقدير نسبة عدم التحصيل |
| فروقات عملة | إعادة تقييم أرصدة بالعملة الأجنبية | فرق سعر صرف آخر العام |

### الخطوة 4 — قيد إقفال الإيرادات

```
مثال:
    حساب المبيعات: رصيد دائن 500,000
    حساب إيرادات أخرى: رصيد دائن 20,000

قيد الإقفال:
    مدين: المبيعات                    500,000
    مدين: إيرادات أخرى                 20,000
    دائن: ملخص الدخل                  520,000

النتيجة: حسابات الإيرادات رصيدها = 0
```

### الخطوة 5 — قيد إقفال المصروفات

```
مثال:
    حساب تكلفة البضاعة: رصيد مدين 300,000
    حساب الرواتب: رصيد مدين 80,000
    حساب الإيجار: رصيد مدين 24,000
    حساب مصروفات أخرى: رصيد مدين 16,000

قيد الإقفال:
    مدين: ملخص الدخل                  420,000
    دائن: تكلفة البضاعة               300,000
    دائن: الرواتب                       80,000
    دائن: الإيجار                       24,000
    دائن: مصروفات أخرى                  16,000

النتيجة: حسابات المصروفات رصيدها = 0
```

### الخطوة 6 — قيد إقفال ملخص الدخل

```
ملخص الدخل:
    دائن (من الإيرادات): 520,000
    مدين (من المصروفات): 420,000
    صافي = 100,000 (ربح)

قيد النقل:
    مدين: ملخص الدخل                  100,000
    دائن: الأرباح المرحلة             100,000

→ إذا كان خسارة:
    مدين: الأرباح المرحلة             XXX
    دائن: ملخص الدخل                  XXX
```

### الخطوة 8 — فتح السنة الجديدة

| الإجراء | التفاصيل |
|---------|----------|
| إنشاء سنة مالية جديدة | بداية = يوم بعد نهاية السنة الحالية |
| توليد 12 فترة + فترة إقفال | تلقائياً |
| نقل أرصدة الحسابات الدائمة | قيد افتتاحي تلقائي |
| تصفير الحسابات المؤقتة | الإيرادات والمصروفات = 0 |
| نقل رصيد الأرباح المرحلة | يشمل صافي ربح/خسارة السنة المنتهية |

## 2.4 حقول قيود الإقفال التلقائية

| الحقل | القيمة |
|-------|--------|
| النوع | `year_end_closing` |
| التاريخ | آخر يوم في السنة المالية |
| الفترة | فترة الإقفال (الفترة 13) |
| الوصف | "قيد إقفال [الإيرادات/المصروفات/ملخص الدخل] — السنة المالية YYYY" |
| المصدر | `system.year_end_closing` |
| قابل للتعديل | لا — يُنشأ ويُحذف كمجموعة فقط |

## 2.5 قواعد العمل

| رقم | القاعدة |
|-----|---------|
| BR-YEC-001 | لا يمكن الإقفال إلا إذا كل القيود مرحّلة |
| BR-YEC-002 | لا يمكن الإقفال إلا إذا كل الفترات الشهرية مقفلة |
| BR-YEC-003 | الإقفال يحتاج صلاحية `accounting.year_end.close` |
| BR-YEC-004 | يمكن التراجع عن الإقفال (Reopen) بصلاحية مدير مالي |
| BR-YEC-005 | التراجع يحذف قيود الإقفال + قيد الافتتاحي الجديد |
| BR-YEC-006 | لا يمكن إقفال سنة إذا السنة السابقة غير مقفلة |
| BR-YEC-007 | قيود الإقفال تُنشأ كمجموعة واحدة (الكل أو لا شيء) |
| BR-YEC-008 | فترة الإقفال (13) تُفتح فقط لقيود التسوية والإقفال |

## 2.6 الإعدادات

| الإعداد | النوع | الافتراضي | الوصف |
|---------|-------|----------|-------|
| `accounting.income_summary_account` | FK | - | حساب ملخص الدخل (مطلوب) |
| `accounting.retained_earnings_account` | FK | - | حساب الأرباح المرحلة (مطلوب) |
| `accounting.auto_create_opening_entry` | BOOLEAN | true | إنشاء قيد افتتاحي تلقائياً |
| `accounting.require_all_periods_closed` | BOOLEAN | true | إلزام إقفال كل الفترات |
| `accounting.require_reconciliation` | BOOLEAN | false | إلزام التسوية البنكية |

---

# 3. المعاملات بين الشركات (Inter-Company Transactions)

> **ملاحظة:** النظام لا يدعم Multi-Tenant لكن العميل قد يملك أكثر من شركة (كل منها بقاعدة بيانات مستقلة). هذا القسم يتعامل مع التعاملات بينها.

## 3.1 السيناريوهات

| # | السيناريو | المثال |
|---|----------|--------|
| 1 | شركة تبيع لشركة أخرى | شركة التصنيع تبيع لشركة التوزيع |
| 2 | تحويل أموال بين شركات | شركة A تحول لشركة B |
| 3 | مصروف مشترك | إيجار مبنى واحد لشركتين |
| 4 | موظف يعمل في أكثر من شركة | راتبه يُوزع |

## 3.2 النمط المعماري

```
┌──────────────────┐          ┌──────────────────┐
│  شركة A (DB-A)   │          │  شركة B (DB-B)   │
│                  │          │                  │
│  حساب: شركة B    │ ←──────→ │  حساب: شركة A    │
│  (ذمم مدينة)     │  API     │  (ذمم دائنة)     │
│                  │          │                  │
│  فاتورة بيع      │  ───→    │  فاتورة شراء     │
│  لشركة B         │  تلقائي  │  من شركة A       │
└──────────────────┘          └──────────────────┘
```

## 3.3 الإعداد

### جدول الشركات المرتبطة (acc_related_companies)

| # | اسم الحقل | النوع | ملاحظات |
|---|-----------|-------|---------|
| 1 | `id` | BIGINT PK | - |
| 2 | `company_name` | VARCHAR | اسم الشركة الأخرى |
| 3 | `company_code` | VARCHAR | كود الشركة |
| 4 | `connection_type` | ENUM | `api` / `manual` |
| 5 | `api_endpoint` | VARCHAR | URL للـ API (إذا تلقائي) |
| 6 | `api_key` | VARCHAR | مفتاح الاتصال (مشفر) |
| 7 | `receivable_account_id` | FK | حساب الذمم المدينة لهذه الشركة |
| 8 | `payable_account_id` | FK | حساب الذمم الدائنة لهذه الشركة |
| 9 | `is_active` | BOOLEAN | - |

## 3.4 آلية العمل

### الوضع التلقائي (API):

| الخطوة | شركة A (البائع) | شركة B (المشتري) |
|--------|----------------|-------------------|
| 1 | مستخدم يُنشئ فاتورة بيع لشركة B | - |
| 2 | عند الاعتماد → API يرسل لشركة B | - |
| 3 | - | يُنشئ فاتورة شراء مسودة تلقائياً |
| 4 | قيد: مدين الذمم المدينة-B / دائن الإيرادات | - |
| 5 | - | مراجعة + اعتماد → قيد: مدين المشتريات / دائن الذمم الدائنة-A |
| 6 | عند السداد → إشعار لشركة B | عند السداد → إشعار لشركة A |

### الوضع اليدوي:

| الخطوة | الوصف |
|--------|-------|
| 1 | كل شركة تُسجل عملياتها يدوياً |
| 2 | في نهاية الفترة → تقرير مطابقة بين الشركات |
| 3 | المستخدم يُطابق العمليات ويسجل الفروقات |

## 3.5 تقرير المطابقة بين الشركات

| البند | شركة A (مدين لها) | شركة B (دائن لها) | الفرق |
|-------|-------------------|-------------------|-------|
| رصيد حساب شركة B | 150,000 | - | - |
| رصيد حساب شركة A | - | 150,000 | - |
| الفرق | - | - | 0 (متطابق) |

## 3.6 قواعد العمل

| رقم | القاعدة |
|-----|---------|
| BR-IC-001 | كل شركة مرتبطة يجب أن يكون لها حساب ذمم مدينة وحساب ذمم دائنة |
| BR-IC-002 | الربط عبر API اختياري — يمكن العمل يدوياً |
| BR-IC-003 | في نهاية كل فترة يجب تشغيل تقرير المطابقة |
| BR-IC-004 | الفروقات تُسجل كتسوية بموافقة المدير المالي |
| BR-IC-005 | عند إقفال السنة — حسابات بين الشركات يجب أن تكون متطابقة |

---

# 4. قواعد توزيع التكاليف (Cost Allocation Rules)

## 4.1 ما هو التوزيع؟

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

```
مثال: إيجار المبنى 60,000 ج.م / شهر
    ↓ يُوزع على 3 أقسام
    ↓
    قسم المبيعات: 30,000 (50%)
    قسم الإنتاج: 18,000 (30%)
    قسم الإدارة: 12,000 (20%)
```

## 4.2 طرق التوزيع

| # | الطريقة | الوصف | الاستخدام |
|---|---------|-------|----------|
| 1 | **نسبة ثابتة (Fixed %)** | نسب محددة مسبقاً لكل مركز تكلفة | إيجار، كهرباء، تأمين |
| 2 | **حسب عدد الموظفين (Headcount)** | التوزيع بنسبة عدد موظفي كل قسم | رواتب الإدارة، موارد بشرية |
| 3 | **حسب المساحة (Area)** | التوزيع بنسبة مساحة كل قسم | إيجار، صيانة، نظافة |
| 4 | **حسب الإيرادات (Revenue)** | التوزيع بنسبة إيرادات كل مركز | مصاريف تسويق |
| 5 | **حسب التكلفة المباشرة (Direct Cost)** | التوزيع بنسبة التكاليف المباشرة | مصاريف إدارية |
| 6 | **حسب ساعات العمل (Labor Hours)** | التوزيع بنسبة ساعات العمل | للتصنيع |
| 7 | **يدوي (Manual)** | المستخدم يحدد المبالغ يدوياً | حالات خاصة |

## 4.3 جدول قواعد التوزيع (acc_allocation_rules)

| # | اسم الحقل | النوع | ملاحظات |
|---|-----------|-------|---------|
| 1 | `id` | BIGINT PK | - |
| 2 | `rule_name_ar` | VARCHAR | اسم القاعدة بالعربي |
| 3 | `rule_name_en` | VARCHAR | اسم القاعدة بالإنجليزي |
| 4 | `source_account_id` | FK | حساب المصروف المصدر |
| 5 | `allocation_method` | ENUM | fixed_pct / headcount / area / revenue / direct_cost / labor_hours / manual |
| 6 | `frequency` | ENUM | monthly / quarterly / yearly / on_demand |
| 7 | `auto_execute` | BOOLEAN | تنفيذ تلقائي في نهاية الفترة |
| 8 | `is_active` | BOOLEAN | - |
| 9 | `created_by` | FK | - |
| 10 | `notes` | TEXT | - |

## 4.4 جدول تفاصيل التوزيع (acc_allocation_rule_lines)

| # | اسم الحقل | النوع | ملاحظات |
|---|-----------|-------|---------|
| 1 | `id` | BIGINT PK | - |
| 2 | `rule_id` | FK | القاعدة |
| 3 | `cost_center_id` | FK | مركز التكلفة المستقبل |
| 4 | `target_account_id` | FK | حساب الهدف (اختياري — نفس المصدر إذا فارغ) |
| 5 | `percentage` | DECIMAL(5,2) | النسبة (لـ fixed_pct) |
| 6 | `driver_value` | DECIMAL | القيمة المحركة (عدد موظفين، مساحة...) |

**القاعدة:** مجموع النسب = 100% دائماً.

## 4.5 آلية التنفيذ

```
1. النظام يقرأ قواعد التوزيع النشطة
2. لكل قاعدة:
   a. يجلب رصيد حساب المصدر للفترة الحالية
   b. إذا الطريقة = fixed_pct → يحسب حسب النسب
   c. إذا الطريقة = headcount → يجلب عدد الموظفين من HR ويحسب النسب
   d. إذا الطريقة = revenue → يجلب الإيرادات ويحسب النسب
3. يُنشئ قيد توزيع:
   مدين: حساب المصروف في مركز تكلفة 1 → مبلغ 1
   مدين: حساب المصروف في مركز تكلفة 2 → مبلغ 2
   مدين: حساب المصروف في مركز تكلفة 3 → مبلغ 3
   دائن: حساب المصروف العام → المبلغ الكلي
4. القيد يدخل كمسودة للمراجعة (أو يُرحل مباشرة إذا تلقائي كامل)
```

### مثال عملي — توزيع الكهرباء:

```
فاتورة كهرباء: 30,000 ج.م
قاعدة التوزيع: حسب المساحة

مركز التكلفة    │ المساحة (م2) │ النسبة │ المبلغ
───────────────┼─────────────┼────────┼──────
المبيعات        │ 200          │ 40%    │ 12,000
الإنتاج        │ 250          │ 50%    │ 15,000
الإدارة        │ 50           │ 10%    │ 3,000
───────────────┼─────────────┼────────┼──────
المجموع        │ 500          │ 100%   │ 30,000

القيد:
    مدين: مصروف كهرباء — مبيعات     12,000
    مدين: مصروف كهرباء — إنتاج      15,000
    مدين: مصروف كهرباء — إدارة       3,000
    دائن: مصروف كهرباء — عام        30,000
```

## 4.6 تقرير التوزيع

| المصروف | الطريقة | الإجمالي | مبيعات | إنتاج | إدارة | مخازن |
|---------|---------|---------|--------|-------|-------|-------|
| الإيجار | نسبة ثابتة | 60,000 | 30,000 | 18,000 | 12,000 | 0 |
| الكهرباء | مساحة | 30,000 | 12,000 | 15,000 | 3,000 | 0 |
| التأمين | موظفين | 20,000 | 8,000 | 6,000 | 4,000 | 2,000 |
| **المجموع** | | **110,000** | **50,000** | **39,000** | **19,000** | **2,000** |

## 4.7 قواعد العمل

| رقم | القاعدة |
|-----|---------|
| BR-ALC-001 | مجموع نسب التوزيع = 100% |
| BR-ALC-002 | لا يمكن توزيع على مراكز تكلفة غير نشطة |
| BR-ALC-003 | التوزيع التلقائي يُنفذ قبل إقفال الفترة |
| BR-ALC-004 | قيود التوزيع تحمل علامة `allocation` لتمييزها |
| BR-ALC-005 | إذا الطريقة تعتمد على بيانات مديول غير مفعل → تحذير |
| BR-ALC-006 | يمكن تشغيل محاكاة (Simulation) قبل التنفيذ الفعلي |

---

# 5. التسوية البنكية — قواعد المطابقة التلقائية (Bank Reconciliation)

## 5.1 نظرة عامة

التسوية البنكية هي مطابقة حركات البنك في النظام مع كشف البنك الفعلي لاكتشاف الفروقات.

```
┌─────────────────────────┐     ┌─────────────────────────┐
│  حركات النظام (GL)       │     │  كشف البنك (Statement)  │
│                         │     │                         │
│  شيك #1234: -5,000      │ ←→  │  شيك #1234: -5,000      │ ✅ متطابق
│  تحويل وارد: +10,000    │ ←→  │  تحويل: +10,000         │ ✅ متطابق
│  شيك #1235: -3,000      │     │                         │ ❌ في النظام فقط
│                         │     │  عمولة بنكية: -150       │ ❌ في البنك فقط
│                         │     │  فوائد: +200             │ ❌ في البنك فقط
└─────────────────────────┘     └─────────────────────────┘
```

## 5.2 مصادر بيانات كشف البنك

| المصدر | الطريقة | الصيغة |
|--------|---------|--------|
| إدخال يدوي | المستخدم يدخل كل حركة | - |
| استيراد ملف | رفع ملف كشف البنك | CSV / Excel / OFX |
| API بنكي (مستقبلي) | ربط مباشر مع البنك | JSON |

## 5.3 حقول حركة كشف البنك (acc_bank_statement_lines)

| # | اسم الحقل | النوع | ملاحظات |
|---|-----------|-------|---------|
| 1 | `id` | BIGINT PK | - |
| 2 | `statement_id` | FK | كشف البنك |
| 3 | `transaction_date` | DATE | تاريخ الحركة |
| 4 | `value_date` | DATE | تاريخ القيمة (قد يختلف) |
| 5 | `reference` | VARCHAR | رقم المرجع / رقم الشيك |
| 6 | `description` | VARCHAR | وصف الحركة |
| 7 | `debit_amount` | DECIMAL | سحب |
| 8 | `credit_amount` | DECIMAL | إيداع |
| 9 | `balance` | DECIMAL | الرصيد بعد الحركة |
| 10 | `match_status` | ENUM | `unmatched` / `matched` / `partially_matched` / `created` |
| 11 | `matched_entry_id` | FK | القيد المطابق في النظام |
| 12 | `match_method` | ENUM | `auto` / `manual` |

## 5.4 قواعد المطابقة التلقائية (acc_reconciliation_rules)

### جدول القواعد

| # | اسم الحقل | النوع | ملاحظات |
|---|-----------|-------|---------|
| 1 | `id` | BIGINT PK | - |
| 2 | `bank_account_id` | FK | الحساب البنكي |
| 3 | `rule_name` | VARCHAR | اسم القاعدة |
| 4 | `priority` | INT | ترتيب التنفيذ (1 = الأعلى) |
| 5 | `match_amount` | BOOLEAN | مطابقة المبلغ |
| 6 | `amount_tolerance` | DECIMAL | هامش المبلغ المسموح (0 = تطابق تام) |
| 7 | `amount_tolerance_type` | ENUM | `fixed` / `percentage` |
| 8 | `match_reference` | BOOLEAN | مطابقة رقم المرجع |
| 9 | `reference_match_type` | ENUM | `exact` / `contains` / `starts_with` |
| 10 | `match_date` | BOOLEAN | مطابقة التاريخ |
| 11 | `date_tolerance_days` | INT | هامش التاريخ بالأيام |
| 12 | `match_description` | BOOLEAN | مطابقة الوصف |
| 13 | `description_keywords` | VARCHAR | كلمات مفتاحية (CSV) |
| 14 | `auto_create_entry` | BOOLEAN | إنشاء قيد تلقائي إذا لم يوجد مطابقة |
| 15 | `auto_create_account_id` | FK | حساب القيد التلقائي |
| 16 | `is_active` | BOOLEAN | - |

### القواعد الافتراضية (مرتبة بالأولوية)

| الأولوية | اسم القاعدة | المعايير | الإجراء |
|---------|------------|---------|--------|
| 1 | **مطابقة تامة** | المبلغ تام + المرجع تام + التاريخ ± 0 أيام | مطابقة تلقائية |
| 2 | **مطابقة بالمرجع** | المرجع تام + المبلغ تام + التاريخ ± 3 أيام | مطابقة تلقائية |
| 3 | **مطابقة بالمبلغ والتاريخ** | المبلغ تام + بدون مرجع + التاريخ ± 1 يوم | اقتراح مطابقة |
| 4 | **مطابقة تقريبية** | المبلغ ± 1% + التاريخ ± 5 أيام | اقتراح مطابقة |
| 5 | **عمولة بنكية** | الوصف يحتوي "commission" أو "عمولة" | إنشاء قيد تلقائي → حساب عمولات بنكية |
| 6 | **فوائد بنكية** | الوصف يحتوي "interest" أو "فوائد" | إنشاء قيد تلقائي → حساب إيرادات فوائد |
| 7 | **رسوم بنكية** | الوصف يحتوي "fees" أو "رسوم" | إنشاء قيد تلقائي → حساب مصروفات بنكية |

## 5.5 آلية المطابقة التلقائية

```
1. المستخدم يرفع كشف البنك (CSV/Excel)
2. النظام يقرأ الحركات ويُحللها
3. لكل حركة في كشف البنك:
   a. يبحث في حركات النظام (القيود المرحلة لحساب البنك)
   b. يطبق القواعد بالترتيب (من الأعلى أولوية)
   c. القاعدة الأولى التي تنطبق → يُنفذ إجراءها:
      - "مطابقة تلقائية" → يربط الحركتين
      - "اقتراح مطابقة" → يعرض للمستخدم ليؤكد
      - "إنشاء قيد" → يُنشئ قيد مسودة
   d. إذا لا قاعدة تنطبق → تبقى "غير مطابقة"
4. النظام يعرض النتيجة:
   - حركات مطابقة تلقائياً (أخضر)
   - حركات مقترحة (أصفر — تحتاج تأكيد)
   - حركات غير مطابقة (أحمر — تحتاج تدخل يدوي)
```

## 5.6 شاشة التسوية البنكية

```
┌───────────────────────────────────────────────────────────────────┐
│  التسوية البنكية — البنك الأهلي           فترة: يناير 2026       │
├───────────────────────────────────────────────────────────────────┤
│                                                                   │
│  رصيد النظام (دفتر الأستاذ):     275,050                         │
│  رصيد كشف البنك:                  280,000                         │
│  الفرق:                           4,950                           │
│                                                                   │
│  ═══ تفسير الفرق ═══                                             │
│                                                                   │
│  ┌─ حركات في النظام وليست في البنك (شيكات لم تُصرف) ─┐          │
│  │ شيك #1235 لشركة المستقبل      │ -3,000  │ 15/01  │          │
│  │ تحويل لمورد #782              │ -2,000  │ 28/01  │          │
│  │                         المجموع: -5,000            │          │
│  └──────────────────────────────────────────────────────┘          │
│                                                                   │
│  ┌─ حركات في البنك وليست في النظام ─────────────────┐          │
│  │ عمولة بنكية                    │ -150    │ 31/01  │ [إنشاء قيد]│
│  │ فوائد دائنة                    │ +200    │ 31/01  │ [إنشاء قيد]│
│  │ حركة غير معروفة                │ -100    │ 25/01  │ [تحديد]   │
│  │                         المجموع: -50              │          │
│  └──────────────────────────────────────────────────────┘          │
│                                                                   │
│  التحقق: 275,050 - 5,000 + (-50) = 270,000                      │
│          280,000 - 5,000 - (-50) = 275,050  ❌ لا يزال فرق      │
│                                                                   │
│  [حفظ المسودة]  [إكمال التسوية]  [طباعة تقرير]                  │
└───────────────────────────────────────────────────────────────────┘
```

## 5.7 أنواع الفروقات

| النوع | الوصف | الإجراء |
|-------|-------|--------|
| **شيكات لم تُصرف** | في النظام لكن البنك لم يخصمها بعد | لا إجراء — تُحل تلقائياً الشهر القادم |
| **إيداعات في الطريق** | أودعناها لكن البنك لم يُسجلها | لا إجراء — تُحل تلقائياً |
| **عمولات بنكية** | البنك خصمها ولم نسجلها | إنشاء قيد: مدين مصروف عمولات / دائن البنك |
| **فوائد بنكية** | البنك أضافها ولم نسجلها | إنشاء قيد: مدين البنك / دائن إيرادات فوائد |
| **خطأ في النظام** | قيد خاطئ | تصحيح بقيد عكسي + قيد صحيح |
| **خطأ من البنك** | البنك سجل حركة خاطئة | مراجعة البنك — لا تعديل في النظام |
| **حركة غير معروفة** | لا نعرف مصدرها | بحث وتحديد → إما إنشاء قيد أو إبلاغ البنك |

## 5.8 تقرير التسوية البنكية النهائي

```
═══════════════════════════════════════════════════════
       تقرير التسوية البنكية
       البنك الأهلي — حساب 1102
       الفترة: يناير 2026
═══════════════════════════════════════════════════════

رصيد دفتر الأستاذ بتاريخ 31/01/2026:    275,050

يُضاف: فوائد لم تُسجل في النظام:          +200
يُخصم: عمولات لم تُسجل في النظام:         -150
يُخصم: حركات غير محددة:                    -100

الرصيد المعدل للنظام:                     275,000
═══════════════════════════════════════════════════════

رصيد كشف البنك بتاريخ 31/01/2026:        280,000

يُخصم: شيكات لم تُصرف:
    شيك #1235                              -3,000
    تحويل #782                             -2,000

الرصيد المعدل للبنك:                      275,000
═══════════════════════════════════════════════════════

الفرق بعد التسوية:                        0 ✅
═══════════════════════════════════════════════════════
```

## 5.9 حقول رأس التسوية (acc_bank_reconciliations)

| # | اسم الحقل | النوع | ملاحظات |
|---|-----------|-------|---------|
| 1 | `id` | BIGINT PK | - |
| 2 | `bank_account_id` | FK | الحساب البنكي |
| 3 | `period_id` | FK | الفترة المالية |
| 4 | `statement_date` | DATE | تاريخ كشف البنك |
| 5 | `statement_balance` | DECIMAL | رصيد كشف البنك |
| 6 | `gl_balance` | DECIMAL | رصيد دفتر الأستاذ |
| 7 | `adjusted_gl_balance` | DECIMAL | الرصيد المعدل للنظام |
| 8 | `adjusted_bank_balance` | DECIMAL | الرصيد المعدل للبنك |
| 9 | `difference` | DECIMAL | الفرق النهائي (يجب = 0) |
| 10 | `status` | ENUM | `draft` / `in_progress` / `completed` / `approved` |
| 11 | `completed_by` | FK | المستخدم الذي أكملها |
| 12 | `completed_at` | DATETIME | تاريخ الإكمال |
| 13 | `approved_by` | FK | المستخدم الذي اعتمدها |
| 14 | `notes` | TEXT | ملاحظات |

## 5.10 إعدادات التسوية البنكية

| الإعداد | النوع | الافتراضي | الوصف |
|---------|-------|----------|-------|
| `reconciliation.auto_match` | BOOLEAN | true | تفعيل المطابقة التلقائية |
| `reconciliation.amount_tolerance` | DECIMAL | 0 | هامش المبلغ (0 = تطابق تام) |
| `reconciliation.date_tolerance_days` | INT | 3 | هامش التاريخ بالأيام |
| `reconciliation.auto_create_bank_charges` | BOOLEAN | true | إنشاء قيود عمولات تلقائياً |
| `reconciliation.bank_charges_account` | FK | - | حساب العمولات البنكية |
| `reconciliation.bank_interest_account` | FK | - | حساب الفوائد البنكية |
| `reconciliation.require_approval` | BOOLEAN | true | التسوية تحتاج اعتماد |
| `reconciliation.csv_date_format` | VARCHAR | YYYY-MM-DD | صيغة التاريخ في CSV |
| `reconciliation.csv_delimiter` | VARCHAR | , | فاصل الأعمدة |
| `reconciliation.csv_encoding` | VARCHAR | UTF-8 | ترميز الملف |

## 5.11 قواعد العمل

| رقم | القاعدة |
|-----|---------|
| BR-REC-001 | لا يمكن إكمال التسوية إلا إذا الفرق = 0 |
| BR-REC-002 | يمكن حفظ تسوية غير مكتملة كمسودة |
| BR-REC-003 | القيود المنشأة من التسوية تحمل مصدر `bank_reconciliation` |
| BR-REC-004 | لا يمكن تعديل تسوية معتمدة |
| BR-REC-005 | التسوية تحتاج اعتماد من المدير المالي |
| BR-REC-006 | الحركات المطابقة لا يمكن فك ارتباطها بعد الاعتماد |
| BR-REC-007 | عند استيراد CSV — التكرارات تُكتشف بالمرجع + المبلغ + التاريخ |
| BR-REC-008 | تسوية الشهر الحالي تعتمد على تسوية الشهر السابق (الرصيد المرحل) |

---

# ملحق: جداول قاعدة البيانات الإضافية

```sql
-- أرصدة افتتاحية
acc_opening_balances              -- رأس الأرصدة الافتتاحية
acc_opening_balance_lines         -- تفاصيل كل حساب
acc_opening_balance_invoices      -- فواتير معلقة تفصيلية (اختياري)
acc_opening_stock                 -- أرصدة مخزون افتتاحية
acc_opening_assets                -- أصول ثابتة افتتاحية
acc_opening_checks                -- شيكات معلقة افتتاحية

-- إقفال السنة
acc_year_end_closing              -- رأس عملية الإقفال
acc_closing_entries               -- قيود الإقفال المنشأة

-- بين الشركات
acc_related_companies             -- الشركات المرتبطة
acc_intercompany_transactions     -- المعاملات بين الشركات

-- توزيع التكاليف
acc_allocation_rules              -- قواعد التوزيع
acc_allocation_rule_lines         -- تفاصيل كل قاعدة (مراكز + نسب)
acc_allocation_executions         -- سجل تنفيذ التوزيعات
acc_allocation_entries            -- القيود الناتجة

-- التسوية البنكية
acc_bank_reconciliations          -- رأس التسوية
acc_bank_statements               -- كشوف البنك المستوردة
acc_bank_statement_lines          -- حركات كشف البنك
acc_reconciliation_rules          -- قواعد المطابقة
acc_reconciliation_matches        -- ربط الحركات المتطابقة
```

---

**نهاية الوثيقة التكميلية**

*GT4 ERP System - Accounting Detail Supplement v1.0 - فبراير 2026*

</div>
