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

# GT4 ERP System
## وثيقة متطلبات الأعمال الشاملة (BRD/PRD)
### النواة المشتركة + المحاسبة المالية — Complete Core & Accounting Module

---

| البيان | التفاصيل |
|--------|----------|
| المشروع | GT4 ERP System |
| الوثيقة | وثيقة متطلبات الأعمال الشاملة (BRD/PRD) |
| النطاق | النواة المشتركة (Core Module) + المحاسبة المالية (Accounting Module) |
| رقم الإصدار | 2.0 |
| التاريخ | 2026-02-14 |
| الحالة | نهائية — مدمجة ومكتملة |
| المديولات المدعومة | المحاسبة • المبيعات • المشتريات • المخازن • POS • HR • التصنيع |
| ملاحظة | تم إلغاء Multi-Tenant — النظام يعمل بقاعدة بيانات واحدة لكل شركة |

---

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

**الجزء الأول: النواة المشتركة (Core Module)**

1. مقدمة وأهمية Core Module
2. المبدأ المعماري
3. إدارة الشركات
4. إدارة المستخدمين والصلاحيات
5. إدارة الأطراف التجارية (Business Partners) — عميل + مورد موحد
6. إدارة المنتجات والخدمات (Products & Services)
7. إدارة التصنيفات (Categories)
8. إدارة وحدات القياس (Units of Measure)
9. إدارة العملات وأسعار الصرف (Currencies)
10. إدارة الفروع والمواقع (Branches)
11. إدارة الإعدادات العامة (Settings)
12. نظام التسلسل والترقيم (Sequences)
13. نظام المرفقات (Attachments)
14. نظام التنبيهات والإشعارات (Notifications)
15. نظام سير العمل (Workflow Engine)
16. نظام إعدادات الأتمتة وتدفق العمليات (Automation & Flow Settings)
17. سجل المراجعة (Audit Trail)
18. نظام المديولات (Module Registry)
19. نظام البحث والفلاتر
20. الإعدادات الإقليمية والتعريب
21. نظام التحكم في التزامن (Concurrency Control)

**الجزء الثاني: مديول المحاسبة المالية (Accounting Module)**

22. نظرة عامة على مديول المحاسبة
23. شجرة الحسابات (Chart of Accounts)
24. الفترات المالية (Financial Periods)
25. القيود المحاسبية (Journal Entries)
26. دفتر الأستاذ العام (General Ledger)
27. الحسابات المدينة والدائنة (AR/AP)
28. النقدية والبنوك (Cash & Bank)
29. الأصول الثابتة (Fixed Assets)
30. مراكز التكلفة (Cost Centers)
31. الموازنات التقديرية (Budgeting)
32. إدارة الضرائب (Tax Management)
33. التقارير المالية (Reports)
34. ربط المحاسبة بالمديولات الأخرى (Integration Mapping)

**الجزء الثالث: الملاحق**

35. هيكل قاعدة البيانات الكامل
36. مصطلحات
37. سيناريوهات الشراء
38. ترتيب التطوير المقترح

---

# الجزء الأول: النواة المشتركة (Core Module)

---

# 1. مقدمة وأهمية Core Module

## 1.1 ما هو Core Module؟

Core Module هو الأساس الذي تُبنى عليه كل المديولات في نظام GT4 ERP. يحتوي على الكيانات والوظائف المشتركة التي تحتاجها كل المديولات. لا يُباع منفصلاً بل يأتي تلقائياً مع أي مديول يشتريه العميل.

## 1.2 لماذا Core Module منفصل؟

- **منع تكرار البيانات:** الطرف التجاري يُسجل مرة واحدة ويستخدمه كل المديولات
- **تناسق البيانات:** كل المديولات ترى نفس البيانات
- **مرونة البيع:** العميل يشتري أي مديول ويعمل مباشرة
- **سهولة التطوير:** التعديل في Core ينعكس على كل المديولات

## 1.3 القاعدة الذهبية

> أي مديول يشتريه العميل يجب أن يعمل بشكل مستقل مع Core فقط، بدون الحاجة لشراء مديولات أخرى.

## 1.4 المديولات المخطط دعمها

| المديول | الحالة | الأولوية |
|---------|--------|---------|
| المحاسبة المالية | تم التحليل (مدمج في هذه الوثيقة) | 1 |
| المبيعات | تم التحليل | 2 |
| المخازن | مخطط | 3 |
| المشتريات | مخطط | 4 |
| نقاط البيع (POS) | مخطط | 5 |
| الموارد البشرية (HR) | مخطط | 6 |
| التصنيع | مخطط | 7 |

---

# 2. المبدأ المعماري

## 2.1 أنواع الكيانات في النظام

### النوع الأول: كيانات Core (مشتركة)
البيانات الأساسية التي يحتاجها الجميع. يملكها Core وتتم إدارتها منه.

**أمثلة:** الأطراف التجارية (عملاء/موردين)، المنتجات، التصنيفات، وحدات القياس، العملات، الفروع، المستخدمين، الإعدادات.

### النوع الثاني: امتدادات المديولات (Module Extensions)
حقول إضافية يضيفها كل مديول على كيانات Core عند تفعيله.

**أمثلة:** مديول المبيعات يضيف "حد الدين" و"نوع السعر" على الطرف التجاري. مديول المخازن يضيف "الكمية المتاحة" على المنتج.

### النوع الثالث: كيانات خاصة بالمديول (Module-Owned)
كيانات تنتمي 100% لمديول محدد ولا تظهر إلا عند تفعيله.

**أمثلة:** فواتير المبيعات (المبيعات)، القيود اليومية (المحاسبة)، حركات المخزون (المخازن).

## 2.2 نمط الامتداد (Extension Pattern)

```
┌────────────────────────────────────────────────┐
│       Core: core_business_partners              │
│  id | name | phone | email | is_customer |      │
│  is_supplier | tax_id | address                 │
└────────────────────┬───────────────────────────┘
                     │
        ┌────────────┼────────────┐
        ▼            ▼            ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ sales_bp   │ │ acc_bp     │ │ pur_bp     │
│ _ext       │ │ _ext       │ │ _ext       │
│            │ │            │ │            │
│ credit_lmt │ │ ar_account │ │ payment    │
│ price_type │ │ ap_account │ │ _terms     │
│ rep_id     │ │ netting    │ │ currency   │
└────────────┘ └────────────┘ └────────────┘
```

## 2.3 نظام الأحداث (Event Bus)

Core يوفر نظام أحداث مركزي تستخدمه كل المديولات للتواصل:

```
مديول المبيعات يُطلق:  "sales.invoice.approved"
                              ↓
                     Core Event Bus
                              ↓
         ┌────────────────────┼────────────────┐
         ▼                    ▼                ▼
  المحاسبة (مفعل)     المخازن (مفعل)    HR (غير مفعل)
  → يولد قيد          → يخصم مخزون      → لا شيء
```

### جدول الأحداث الرئيسية:

| الحدث | المُصدر | المستقبلون المحتملون |
|-------|---------|---------------------|
| partner.created | Core | المحاسبة (فتح حساب/حسابات) |
| partner.updated | Core | الكل |
| partner.role_added | Core | المحاسبة (فتح حساب إضافي) |
| partner.role_removed | Core | المحاسبة (تعطيل حساب) |
| partner.frozen | Core | المبيعات + المشتريات (منع عمليات) |
| product.created | Core | المخازن (رصيد صفري) |
| invoice.approved | المبيعات | المحاسبة + المخازن |
| invoice.paid | المبيعات | المحاسبة |
| return.approved | المبيعات | المحاسبة + المخازن |
| purchase.approved | المشتريات | المحاسبة + المخازن |
| payment.made | المشتريات | المحاسبة |
| stock.adjusted | المخازن | المحاسبة |
| journal.posted | المحاسبة | - |
| netting.done | المحاسبة | - |
| payroll.approved | HR | المحاسبة |
| production.completed | التصنيع | المخازن + المحاسبة |

---

# 3. إدارة الشركات

> **ملاحظة:** تم إلغاء نظام Multi-Tenant. كل شركة تعمل بقاعدة بيانات مستقلة. إعدادات الشركة تُخزن في جدول إعدادات واحد.

## 3.1 حقول الشركة

| اسم الحقل | النوع | مطلوب | الافتراضي | ملاحظات |
|-----------|-------|-------|----------|---------|
| اسم الشركة (عربي) | نص | نعم | - | - |
| اسم الشركة (إنجليزي) | نص | نعم | - | - |
| الاسم المختصر | نص | لا | - | - |
| الرقم الضريبي | نص | لا | - | Tax ID / VAT |
| السجل التجاري | نص | لا | - | - |
| رقم الهاتف | نص | لا | - | - |
| الفاكس | نص | لا | - | - |
| البريد الإلكتروني | بريد | لا | - | - |
| الموقع الإلكتروني | رابط | لا | - | - |
| العنوان | نص | لا | - | - |
| المدينة | نص | لا | - | - |
| الدولة | قائمة | لا | - | - |
| الرمز البريدي | نص | لا | - | - |
| العملة الأساسية | قائمة | نعم | - | لا يمكن تغييرها بعد وجود عمليات |
| بداية السنة المالية | تاريخ | نعم | 1 يناير | - |
| اللغة الافتراضية | قائمة | نعم | عربي | عربي / إنجليزي |
| المنطقة الزمنية | قائمة | نعم | - | - |
| اللوجو | صورة | لا | - | يظهر في الطباعة |
| حالة الشركة | حالة | نعم | نشطة | نشطة / معلقة / مغلقة |

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

| رقم | القاعدة |
|-----|---------|
| BR-CO-001 | كل شركة لها قاعدة بيانات مستقلة |
| BR-CO-002 | العملة الأساسية لا تتغير بعد وجود عمليات |
| BR-CO-003 | لا يمكن حذف بيانات الشركة إذا كانت تحتوي على عمليات |

---

# 4. إدارة المستخدمين والصلاحيات

## 4.1 المستخدمين (Users)

| اسم الحقل | النوع | مطلوب | ملاحظات |
|-----------|-------|-------|---------|
| كود المستخدم | نص (فريد) | نعم | - |
| اسم المستخدم (عربي) | نص | نعم | - |
| اسم المستخدم (إنجليزي) | نص | لا | - |
| البريد الإلكتروني | بريد (فريد) | نعم | للدخول + استعادة كلمة المرور |
| كلمة المرور | نص مشفر | نعم | bcrypt |
| رقم الموبايل | نص | لا | - |
| الصورة الشخصية | صورة | لا | - |
| اللغة المفضلة | قائمة | نعم | عربي / إنجليزي |
| المجموعة/الدور | قائمة (متعدد) | نعم | ربط بمجموعة صلاحيات |
| الفروع المسموحة | متعدد | لا | - |
| حالة المستخدم | حالة | نعم | نشط / معلق / محذوف |
| آخر تسجيل دخول | تاريخ+وقت | - | تلقائي |
| المصادقة الثنائية (2FA) | نعم/لا | نعم | اختياري |

## 4.2 المجموعات/الأدوار (Roles)

| اسم الحقل | النوع | مطلوب | ملاحظات |
|-----------|-------|-------|---------|
| اسم المجموعة (عربي) | نص | نعم | مثل: مدير المبيعات |
| اسم المجموعة (إنجليزي) | نص | نعم | مثل: Sales Manager |
| الوصف | نص | لا | - |
| الصلاحيات | متعدد | نعم | قائمة الصلاحيات |
| حالة المجموعة | حالة | نعم | نشطة / غير نشطة |

## 4.3 هيكل الصلاحيات

الصلاحيات تُبنى على نمط: `module.entity.action`

```
core.partner.create          →  إنشاء طرف تجاري
core.partner.view            →  عرض طرف تجاري
core.partner.edit            →  تعديل
core.partner.delete          →  حذف
core.partner.import          →  استيراد
core.partner.export          →  تصدير
core.partner.set_customer    →  تعيين كعميل
core.partner.set_supplier    →  تعيين كمورد
core.product.create          →  إنشاء منتج
core.product.edit            →  تعديل منتج
sales.invoice.create         →  إنشاء فاتورة مبيعات
sales.invoice.approve        →  اعتماد فاتورة
accounting.journal.post      →  ترحيل قيد محاسبي
inventory.stock.adjust       →  تعديل مخزون
```

## 4.4 صلاحيات على مستوى البيانات (Data-Level)

| نوع الصلاحية | الوصف | مثال |
|-------------|-------|------|
| الكل (All) | يرى كل البيانات | المدير العام |
| الفرع (Branch) | بيانات فرعه فقط | مدير الفرع |
| المندوب (Rep) | بيانات عملائه فقط | مندوب المبيعات |
| الشخصي (Own) | ما أنشأه فقط | المحاسب |

## 4.5 أدوار افتراضية

| الدور | الوصف | المديول |
|-------|-------|---------|
| Super Admin | صلاحيات كاملة | الكل |
| مدير عام | صلاحيات كاملة للشركة | الكل |
| مدير مبيعات | إدارة كاملة للمبيعات | المبيعات |
| مندوب مبيعات | إنشاء عروض وفواتير فقط | المبيعات |
| محاسب | إنشاء قيود وتقارير | المحاسبة |
| مدير مالي | محاسب + ترحيل + إقفال | المحاسبة |
| أمين مخزن | حركات المخزون والجرد | المخازن |
| كاشير POS | نقاط البيع فقط | POS |
| مسؤول HR | إدارة الموظفين والرواتب | HR |
| عارض فقط | مشاهدة بدون أي تعديل | الكل |

---

# 5. إدارة الأطراف التجارية (Business Partners)

> **تصميم موحد:** العميل والمورد كيان واحد. الطرف التجاري يمكن أن يكون عميل أو مورد أو كلاهما معاً. بيانات أساسية واحدة — أدوار متعددة.

## 5.1 لماذا النموذج الموحد؟

| المشكلة في النموذج القديم | الحل في النموذج الموحد |
|--------------------------|----------------------|
| نفس الطرف يُسجل مرتين | يُسجل مرة واحدة |
| تناقض البيانات بين السجلين | بيانات واحدة متسقة |
| صعوبة المقاصة المحاسبية | مقاصة مباشرة بين الحسابين |
| تكرار الرقم الضريبي والعنوان | بيانات واحدة |

## 5.2 البيانات الأساسية (Core)

| اسم الحقل | النوع | مطلوب | الافتراضي | قاعدة العمل | ملاحظات |
|-----------|-------|-------|----------|-------------|---------|
| الكود | نص (فريد) | نعم | تلقائي | من نظام التسلسل | BP-0001 |
| الاسم (عربي) | نص | نعم | - | - | - |
| الاسم (إنجليزي) | نص | لا | - | - | - |
| **هل عميل** | **نعم/لا** | **نعم** | **لا** | **واحد على الأقل مطلوب** | **تحديد دور عميل** |
| **هل مورد** | **نعم/لا** | **نعم** | **لا** | **واحد على الأقل مطلوب** | **تحديد دور مورد** |
| نوع الطرف | قائمة | نعم | فرد | - | فرد / شركة |
| الرقم الضريبي | نص | لا | - | فريد إذا أُدخل | Tax ID |
| السجل التجاري | نص | لا | - | - | - |
| اسم المنشأة | نص | لا | - | الاسم الرسمي | - |
| رقم التليفون | نص | لا | - | - | - |
| رقم الموبايل | نص | لا | - | - | - |
| البريد الإلكتروني | بريد | لا | - | فريد إذا أُدخل | - |
| الموقع الإلكتروني | رابط | لا | - | - | - |
| العنوان | نص | لا | - | - | - |
| المدينة | نص | لا | - | - | - |
| المحافظة/المنطقة | قائمة | لا | - | - | - |
| الدولة | قائمة | لا | - | - | - |
| الرمز البريدي | نص | لا | - | - | - |
| تصنيف الطرف | قائمة | لا | عادي | - | VIP / عادي / جديد / استراتيجي |
| مجموعة الطرف | قائمة | لا | - | قابلة للتعريف | - |
| الصورة/اللوجو | صورة | لا | - | - | - |
| ملاحظات | نص طويل | لا | - | - | - |
| حالة الطرف | حالة | نعم | نشط | - | نشط / مجمد / موقوف |
| تاريخ الإنشاء | تاريخ+وقت | - | تلقائي | - | - |
| أنشأه | مستخدم | - | تلقائي | - | - |
| آخر تعديل | تاريخ+وقت | - | تلقائي | - | - |
| عدّله | مستخدم | - | تلقائي | - | - |

### سلوك الأدوار:

| قيمة الدور | يظهر في فواتير البيع | يظهر في فواتير الشراء | حسابات محاسبية |
|-----------|--------------------|--------------------|---------------|
| عميل فقط | نعم | لا | ذمم مدينة فقط |
| مورد فقط | لا | نعم | ذمم دائنة فقط |
| كلاهما | نعم | نعم | ذمم مدينة + ذمم دائنة + مقاصة |

## 5.3 جهات الاتصال (Contacts) — جدول فرعي

| اسم الحقل | النوع | مطلوب | ملاحظات |
|-----------|-------|-------|---------|
| الطرف التجاري | FK | نعم | ربط |
| اسم جهة الاتصال | نص | نعم | - |
| المنصب/الوظيفة | نص | لا | - |
| القسم | نص | لا | - |
| رقم التليفون | نص | لا | - |
| رقم الموبايل | نص | لا | - |
| البريد الإلكتروني | بريد | لا | - |
| جهة الاتصال الرئيسية | نعم/لا | نعم | واحد فقط رئيسي |

## 5.4 العناوين المتعددة (Addresses) — جدول فرعي

| اسم الحقل | النوع | مطلوب | ملاحظات |
|-----------|-------|-------|---------|
| الطرف التجاري | FK | نعم | ربط |
| تسمية العنوان | نص | نعم | مثل: المقر الرئيسي |
| نوع العنوان | قائمة | نعم | فوترة / شحن / كلاهما |
| العنوان التفصيلي | نص | نعم | - |
| المدينة | نص | لا | - |
| المنطقة | نص | لا | - |
| الدولة | قائمة | لا | - |
| الرمز البريدي | نص | لا | - |
| هل الافتراضي | نعم/لا | نعم | عنوان واحد افتراضي لكل نوع |

## 5.5 الامتدادات حسب المديول المفعّل

### عند تفعيل مديول المبيعات (يظهر للعملاء وكلاهما فقط):

| # | اسم الحقل | النوع | الافتراضي | يُفعّل بإعداد | ملاحظات |
|---|-----------|-------|----------|--------------|---------|
| 1 | حد الدين/الائتمان | رقمي | 10000 | - | الحد الأقصى للمديونية |
| 2 | نوع السعر الافتراضي | قائمة | 0 (جملة) | - | **0=جملة، 1=تجزئة، 2=نصف جملة، 4-13=أسعار مخصصة** (13 خيار) |
| 3 | المندوب المسؤول | قائمة | - | - | مندوب المبيعات |
| 4 | شروط الدفع | قائمة | نقدي | - | نقدي / 30 يوم / 60 يوم |
| 5 | أصل المديونية | رقمي | 0 | - | رصيد افتتاحي ذمم مدينة |
| 6 | المسؤول | نص | - | - | - |
| 7 | خصم خاص | نعم/لا | لا | - | هل للعميل خصم خاص |
| 8 | قيمة الخصم الخاص | FLOAT | 0 | - | نسبة مئوية |
| 9 | نسبة تحصيل المندوب | FLOAT | 0 | `mandobCollectionRatio=1` | % عمولة المندوب على التحصيل |
| 10 | أيام التأجيل | INT | 0 | - | فترة السماح للسداد (بالأيام) |
| 11 | المخازن المسموحة | نص | - | - | CSV معرفات المخازن. فارغ = الكل |
| 12 | بطاقة RFID | VARCHAR(20) | - | - | تعريف العميل بالبطاقة |
| 13 | كلمة مرور العميل | VARCHAR | - | - | لدخول النظام/التطبيق |

### حقول E-Bill (الفاتورة الإلكترونية) للعميل:

| # | اسم الحقل | الاسم بالعربي | النوع | يُفعّل بإعداد |
|---|-----------|--------------|-------|--------------|
| 1 | `ebill_governorate` | المحافظة (فاتورة إلكترونية) | VARCHAR | `ebillclient=1` |
| 2 | `ebill_city` | المدينة (فاتورة إلكترونية) | VARCHAR | `ebillclient=1` |
| 3 | `ebill_street` | الشارع (فاتورة إلكترونية) | VARCHAR | `ebillclient=1` |
| 4 | `ebill_building_num` | رقم المبنى | VARCHAR | `ebillclient=1` |
| 5 | `ebill_tax_type` | نوع الضريبة | ENUM('P','B','F') | `ebillclient=1` |

### حقول التموين/المخابز (Tamween):

| # | اسم الحقل | الاسم بالعربي | النوع | يُفعّل بإعداد |
|---|-----------|--------------|-------|--------------|
| 1 | `tamween_persons` | عدد أفراد التموين | INT | `tamweenBakery=1` |
| 2 | `da3m_persons` | عدد أفراد دعم الخبز | INT | `tamweenBakery=1` |
| 3 | `card_number` | رقم البطاقة | VARCHAR(14) | `tamweenBakery=1` |
| 4 | `card_password` | رقم سري البطاقة | VARCHAR | `tamweenBakery=1` |

### حقول الخياطة/التفصيل (يُفعّل بإعداد `clientdetail=0`):

| # | اسم الحقل | الاسم بالعربي | النوع |
|---|-----------|--------------|-------|
| 1 | `jacket_size` | مقاس الجاكيت | FLOAT |
| 2 | `shoulder` | الكتف | FLOAT |
| 3 | `sleeve` | الكُم | FLOAT |
| 4 | `jacket_length` | طول الجاكيت | FLOAT |
| 5 | `jacket_width` | عرض الجاكيت | FLOAT |
| 6 | `sleeve_head` | رأس الكُم | FLOAT |
| 7 | `pants_beam` | البيم | FLOAT |
| 8 | `pants_stone` | الحجر | FLOAT |
| 9 | `pants_hash` | الحشو | FLOAT |
| 10 | `pants_knee` | الركبة | FLOAT |
| 11 | `pants_thigh` | الفخذ | FLOAT |
| 12 | `pants_leg` | الرجل | FLOAT |
| 13 | `samanah` | السمانة | FLOAT |
| 14 | `pants_length` | طول البنطلون | FLOAT |
| 15 | `sudairi_belly` | بطن الصديري | FLOAT |
| 16 | `sudairi_chest` | صدر الصديري | FLOAT |
| 17 | `sudairi_length` | طول الصديري | FLOAT |
| 18 | `booking_date` | تاريخ الحجز | DATE |
| 19 | `rehearsal_date` | تاريخ البروفة | DATE |

### ملف مرفقات العميل:

| # | اسم الحقل | الاسم بالعربي | النوع |
|---|-----------|--------------|-------|
| 1 | `id_card_image` | صورة البطاقة | FILE |
| 2 | `tax_card_image` | صورة البطاقة الضريبية | FILE |
| 3 | `commercial_reg_image` | صورة السجل التجاري | FILE |
| 4 | `benefit_document` | مستند الفائدة | FILE |

### عند تفعيل مديول المشتريات (يظهر للموردين وكلاهما فقط):

| # | اسم الحقل | النوع | الافتراضي | يُفعّل بإعداد | ملاحظات |
|---|-----------|-------|----------|--------------|---------|
| 1 | شروط الدفع | قائمة | نقدي | - | - |
| 2 | العملة الافتراضية | قائمة | - | - | - |
| 3 | حد الائتمان | رقمي | 0 | - | - |
| 4 | أصل المديونية | رقمي | 0 | - | رصيد افتتاحي ذمم دائنة |
| 5 | الدين بعملة المورد | DECIMAL(10,2) | 0 | `showCurrency=1` | الدين محسوب بعملة المورد |
| 6 | نسبة خصم الشحن | FLOAT | 0 | - | للموردين شركات الشحن |
| 7 | مسؤول الضمان | VARCHAR | - | `maintenance=1` | اسم مسؤول الضمان |
| 8 | موبايل مسؤول الضمان | VARCHAR | - | `maintenance=1` | - |
| 9 | اسم مندوب المبيعات | VARCHAR | - | `maintenance=1` | مندوب المورد |
| 10 | موبايل المندوب | VARCHAR | - | `maintenance=1` | - |
| 11 | اسم المستفيد في الشيكات | VARCHAR | - | `maintenance=1` | الاسم المكتوب على الشيك |
| 12 | تصنيفات المنتجات | VARCHAR | - | - | CSV: أي فئات يوردها المورد |
| 13 | المنطقة الحكومية | FK | - | `maintenance=1` | التقسيم الجغرافي |

### عند تفعيل مديول المحاسبة:

| اسم الحقل | يظهر عندما | ملاحظات |
|-----------|-----------|---------|
| حساب الذمم المدينة | عميل أو كلاهما | يُفتح تلقائياً تحت الحساب الأب |
| حساب الإيرادات الافتراضي | عميل أو كلاهما | - |
| حساب الذمم الدائنة | مورد أو كلاهما | يُفتح تلقائياً تحت الحساب الأب |
| حساب المصروفات الافتراضي | مورد أو كلاهما | - |
| السماح بالمقاصة | كلاهما فقط | تفعيل المقاصة بين الحسابين |

### عند تفعيل POS (للعملاء وكلاهما):

| اسم الحقل | النوع | ملاحظات |
|-----------|-------|---------|
| بطاقة ولاء | نص | رقم البطاقة |
| نقاط الولاء | رقمي | رصيد النقاط |

## 5.6 جدول تاريخ تغييرات الديون (core_debt_changes)

> كل حركة دين (فاتورة، سداد، مرتجع) تُسجل كسجل مستقل لتتبع كامل.

| # | اسم الحقل | الاسم بالعربي | النوع | ملاحظات |
|---|-----------|--------------|-------|---------|
| 1 | `id` | المعرف | BIGINT PK | - |
| 2 | `partner_id` | الطرف التجاري | FK | ربط بالطرف التجاري |
| 3 | `partner_role` | نوع الدور | ENUM('customer','supplier') | هل هو دين عميل أم مورد |
| 4 | `debt_before` | الدين قبل | DECIMAL(20,3) | الرصيد قبل الحركة |
| 5 | `change_amount` | مبلغ التغيير | DECIMAL(20,3) | القيمة |
| 6 | `debt_after` | الدين بعد | DECIMAL(20,3) | الرصيد بعد الحركة |
| 7 | `change_type` | نوع التغيير | ENUM('increase','decrease') | زيادة أم نقص |
| 8 | `process_name` | اسم العملية | VARCHAR(500) | مثل: "فاتورة بيع"، "سداد عميل" |
| 9 | `source_document_type` | نوع المستند المصدر | VARCHAR | مثل: sell_invoice, payment_receipt |
| 10 | `source_document_id` | معرف المستند | BIGINT | FK للمستند الأصلي |
| 11 | `comment` | ملاحظة | TEXT | - |
| 12 | `currency_id` | العملة | FK | - |
| 13 | `conversion_factor` | معامل التحويل | FLOAT | سعر الصرف وقت العملية |
| 14 | `amount_in_currency` | المبلغ بالعملة | DECIMAL(10,2) | - |
| 15 | `debt_before_in_currency` | الدين قبل بالعملة | DECIMAL(10,2) | للموردين بعملتهم |
| 16 | `change_in_currency` | التغيير بالعملة | DECIMAL(10,2) | - |
| 17 | `debt_after_in_currency` | الدين بعد بالعملة | DECIMAL(10,2) | - |
| 18 | `discount` | خصم | DECIMAL(10,2) | خصم على الدفعة |
| 19 | `early_repayment_discount` | خصم سداد مبكر | DECIMAL(10,2) | - |
| 20 | `pay_type` | طريقة الدفع | VARCHAR | نقدي، شيك، تحويل |
| 21 | `pay_serial_no` | رقم تسلسل الدفع | INT | - |
| 22 | `cost_center_id` | مركز التكلفة | FK | - |
| 23 | `tags` | العلامات | VARCHAR | CSV |
| 24 | `is_deleted` | محذوف | BOOLEAN | حذف ناعم |
| 25 | `journal_entry_id` | القيد المحاسبي | FK | ربط بالقيد المولد |
| 26 | `created_at` | تاريخ الإنشاء | DATETIME | - |
| 27 | `created_by` | المستخدم | FK | - |
| 28 | `user_selected_date` | التاريخ المختار | DATE | تاريخ يحدده المستخدم |

## 5.7 التأثير على المحاسبة عند إضافة طرف

### إذا كان عميل فقط + المحاسبة مفعلة:
```
→ فتح حساب فرعي تحت "الذمم المدينة" تلقائياً
  مثال: 1201 الذمم المدينة → 1201-001 شركة النور
```

### إذا كان مورد فقط + المحاسبة مفعلة:
```
→ فتح حساب فرعي تحت "الذمم الدائنة" تلقائياً
  مثال: 2101 الذمم الدائنة → 2101-001 شركة النور
```

### إذا كان كلاهما + المحاسبة مفعلة:
```
→ فتح حسابين:
  1201-001 شركة النور (ذمم مدينة)
  2101-001 شركة النور (ذمم دائنة)
→ تفعيل إمكانية المقاصة
```

## 5.8 المقاصة (Netting)

عندما يكون الطرف عميل ومورد معاً:

```
مثال: شركة النور
  ذمم مدينة (مستحق لنا): 30,000 ج.م
  ذمم دائنة (مستحق علينا): 20,000 ج.م

قيد المقاصة:
  مدين: الذمم الدائنة (2101-001)  20,000
  دائن: الذمم المدينة (1201-001)  20,000

النتيجة:
  ذمم مدينة: 10,000 ج.م (لصالحنا)
  ذمم دائنة: 0
```

## 5.9 الوظائف حسب المديول

| الوظيفة | Core | المبيعات | المشتريات | المحاسبة |
|---------|------|---------|----------|---------|
| إنشاء / تعديل / عرض | نعم | - | - | - |
| حذف (إذا لا عمليات) | نعم | - | - | - |
| البحث والفلترة | نعم | - | - | - |
| استيراد من Excel | نعم | - | - | - |
| تصدير إلى Excel | نعم | - | - | - |
| عرض فواتير المبيعات | - | نعم | - | - |
| عرض فواتير الشراء | - | - | نعم | - |
| إيصال سداد (تحصيل) | - | نعم | - | - |
| إيصال دفع (للمورد) | - | - | نعم | - |
| إدارة أقساط العميل | - | نعم | - | - |
| تقرير مديونيات | - | نعم | - | - |
| كشف حساب محاسبي | - | - | - | نعم |
| كشف حساب موحد (مدين+دائن) | - | - | - | نعم |
| تقرير عمر الديون | - | - | - | نعم |
| المقاصة | - | - | - | نعم |

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

| رقم | القاعدة |
|-----|---------|
| BR-BP-001 | يجب اختيار دور واحد على الأقل (عميل أو مورد أو كلاهما) |
| BR-BP-002 | كود الطرف التجاري فريد ولا يتكرر |
| BR-BP-003 | لا يمكن حذف طرف لديه عمليات |
| BR-BP-004 | يمكن إضافة دور جديد في أي وقت |
| BR-BP-005 | لا يمكن إزالة دور إذا كان لديه أرصدة أو عمليات مفتوحة |
| BR-BP-006 | عند إضافة دور والمحاسبة مفعلة → يُفتح حساب تلقائي |
| BR-BP-007 | المقاصة ممكنة فقط على أطراف بدور مزدوج |
| BR-BP-008 | المقاصة تحتاج اعتماد حسب إعدادات سير العمل |
| BR-BP-009 | تجميد الطرف يمنع أي عمليات جديدة |
| BR-BP-010 | فواتير المبيعات تعرض فقط أطراف عميل أو كلاهما |
| BR-BP-011 | فواتير الشراء تعرض فقط أطراف مورد أو كلاهما |
| BR-BP-012 | الرقم الضريبي فريد إذا أُدخل |
| BR-BP-013 | جهة اتصال رئيسية واحدة فقط |
| BR-BP-014 | عنوان افتراضي واحد لكل نوع (فوترة / شحن) |

---

# 6. إدارة المنتجات والخدمات (Products & Services)

## 6.1 البيانات الأساسية في Core

| اسم الحقل | النوع | مطلوب | الافتراضي | ملاحظات |
|-----------|-------|-------|----------|---------|
| كود المنتج (SKU) | نص (فريد) | نعم | تلقائي | PRD-0001 |
| اسم المنتج (عربي) | نص | نعم | - | - |
| اسم المنتج (إنجليزي) | نص | لا | - | - |
| الباركود | نص (فريد) | لا | - | فريد إذا أُدخل |
| نوع المنتج | قائمة | نعم | منتج | منتج / خدمة |
| التصنيف | قائمة | نعم | - | ربط بالتصنيفات |
| التصنيف الفرعي | قائمة | لا | - | - |
| الوصف المختصر | نص | لا | - | - |
| الوصف التفصيلي | نص طويل | لا | - | - |
| وحدة القياس الأساسية | قائمة | نعم | قطعة | - |
| الصورة الرئيسية | صورة | لا | - | - |
| صور إضافية | صور متعددة | لا | - | Gallery |
| الوزن (كجم) | رقمي | لا | - | - |
| الطول / العرض / الارتفاع | رقمي | لا | - | بالسنتيمتر |
| الشركة المصنعة | قائمة | لا | - | قابلة للتعريف |
| بلد المنشأ | قائمة | لا | - | - |
| الموديل | نص | لا | - | - |
| نسبة الضريبة | نسبة | لا | 0% | VAT% الافتراضية |
| تتبع بالرقم التسلسلي | نعم/لا | نعم | لا | Serial Numbers |
| تتبع بالدفعات | نعم/لا | نعم | لا | Batch/Lot |
| له تاريخ صلاحية | نعم/لا | نعم | لا | Expiry |
| ملاحظات | نص طويل | لا | - | - |
| حالة المنتج | حالة | نعم | نشط | نشط / غير نشط / متوقف |

### حقول إضافية في Core:

| # | اسم الحقل | الاسم بالعربي | النوع | يُفعّل بإعداد | ملاحظات |
|---|-----------|--------------|-------|--------------|---------|
| 1 | `product_code` | كود المنتج | VARCHAR | `showprocode=1` | كود داخلي مختلف عن SKU |
| 2 | `part_number` | رقم القطعة | VARCHAR | `showpartnumber=1` | لقطع الغيار والاستيراد |
| 3 | `item_symbol` | رمز الصنف | VARCHAR | - | للفاتورة الإلكترونية |
| 4 | `hs_code` | رمز النظام المنسق | VARCHAR | `showhscode=1` | تصنيف جمركي |
| 5 | `warranty_duration` | مدة الضمان (بالأيام) | INT | `showgrantduration=1` | فترة ضمان المنتج |
| 6 | `sort_order` | ترتيب العرض | INT | - | ترتيب المنتج في القوائم |
| 7 | `web_api_id` | معرف API الخارجي | INT | `webApiId=1` | للتكامل مع أنظمة خارجية |

### حقول E-Bill (الفاتورة الإلكترونية):

| # | اسم الحقل | الاسم بالعربي | النوع | ملاحظات |
|---|-----------|--------------|-------|---------|
| 1 | `tax_barcode_type` | نوع باركود الضريبة | ENUM('GS1','EGS') | GS1=دولي، EGS=مصري |
| 2 | `tax_barcode` | باركود الضريبة | VARCHAR | رمز المنتج في المنظومة |
| 3 | `tax_unit_code` | كود الوحدة الضريبي | VARCHAR | رمز الوحدة في المنظومة |

## 6.2 نظام الأسعار الكامل (13 مستوى) — sales_product_ext

| # | اسم الحقل | الاسم بالعربي | النوع | الافتراضي | يُفعّل بإعداد |
|---|-----------|--------------|-------|----------|--------------|
| 1 | `sell_price_wholesale` | سعر الجملة | DECIMAL(10,2) | 0.00 | `showpriceall=1` |
| 2 | `sell_price_semi_wholesale` | سعر نصف الجملة | DECIMAL(10,2) | 0.00 | `showpricehalf=1` |
| 3 | `sell_price_retail` | سعر التجزئة | DECIMAL(10,2) | 0.00 | `showpriceunit=1` |
| 4 | `sell_price_4` | سعر 4 | DECIMAL(10,2) | 0.00 | `showprice4=1` |
| 5 | `sell_price_5` | سعر 5 | DECIMAL(10,2) | 0.00 | `showprice5=1` |
| 6 | `sell_price_6` | سعر 6 | DECIMAL(10,2) | 0.00 | `showprice6=1` |
| 7 | `sell_price_7` | سعر 7 | DECIMAL(10,2) | 0.00 | `showprice7=1` |
| 8 | `sell_price_8` | سعر 8 | DECIMAL(10,2) | 0.00 | `showprice8=1` |
| 9 | `sell_price_9` | سعر 9 | DECIMAL(10,2) | 0.00 | `showprice9=1` |
| 10 | `sell_price_10` | سعر 10 | DECIMAL(10,2) | 0.00 | `showprice10=1` |
| 11 | `sell_price_11` | سعر 11 | DECIMAL(10,2) | 0.00 | `showprice11=1` |
| 12 | `sell_price_12` | سعر 12 | DECIMAL(10,2) | 0.00 | `showprice12=1` |
| 13 | `sell_price_13` | سعر 13 | DECIMAL(10,2) | 0.00 | `showprice13=1` |

**ربط السعر بالعميل:** العميل يُربط بـ `price_type_id`: 0=جملة، 1=تجزئة، 2=نصف جملة، 4-13=أسعار مخصصة.

## 6.3 أسعار الشراء وتتبعها — pur_product_ext

| # | اسم الحقل | الاسم بالعربي | النوع | ملاحظات |
|---|-----------|--------------|-------|---------|
| 1 | `buy_price` | سعر الشراء الأساسي | DECIMAL(10,2) | المُدخل يدوياً |
| 2 | `buy_price_real` | سعر الشراء الفعلي | DECIMAL(10,2) | بعد كل المصاريف |
| 3 | `last_buy_price` | آخر سعر شراء | DECIMAL(10,2) | يُحدّث تلقائياً |
| 4 | `last_buy_price_with_discount` | آخر سعر بعد الخصم | DECIMAL(10,2) | يُحدّث تلقائياً |
| 5 | `last_buy_price_with_tax` | آخر سعر بالضريبة | DECIMAL(10,2) | يُحدّث تلقائياً |
| 6 | `last_buy_price_with_discount_and_tax` | آخر سعر بالخصم والضريبة | DECIMAL(10,2) | يُحدّث تلقائياً |
| 7 | `mean_buy_price` | متوسط سعر الشراء | DECIMAL(10,2) | المتوسط المرجح |
| 8 | `mean_buy_price_with_discount` | متوسط بعد الخصم | DECIMAL(10,2) | يُحدّث تلقائياً |
| 9 | `mean_buy_price_with_tax` | متوسط بالضريبة | DECIMAL(10,2) | يُحدّث تلقائياً |
| 10 | `overall_average_price` | المتوسط العام الشامل | DECIMAL(10,2) | المتوسط العام |

## 6.4 نسب الهوامش والأرباح — sales_product_ext تكملة

| # | اسم الحقل | الاسم بالعربي | النوع | ملاحظات |
|---|-----------|--------------|-------|---------|
| 1 | `real_price_percentage` | نسبة السعر الفعلي | FLOAT | % هامش فوق سعر الشراء |
| 2 | `wholesale_margin_pct` | نسبة هامش الجملة | FLOAT | % ربح الجملة |
| 3 | `semi_wholesale_margin_pct` | نسبة هامش نصف الجملة | FLOAT | % ربح نصف الجملة |
| 4 | `retail_margin_pct` | نسبة هامش التجزئة | FLOAT | % ربح التجزئة |
| 5 | `sell_percent_type` | نوع نسبة البيع | TINYINT | 0=إضافة، 1=خصم |
| 6 | `sell_add_percent` | نسبة إضافة البيع | FLOAT | نسبة تُضاف على السعر |
| 7 | `sell_discount_percent` | نسبة خصم البيع | FLOAT | نسبة تُخصم من السعر |
| 8 | `buy_discount_percent` | نسبة خصم الشراء | FLOAT | - |
| 9 | `weighted_discount` | الخصم المرجح | FLOAT | خصم مرجح محسوب |

**وضع النسبة المئوية** (`precentages=0`): المستخدم يُدخل % → النظام يحسب السعر.
**وضع القيمة المطلقة** (`precentages=1`): المستخدم يُدخل السعر → النظام يحسب النسبة.

## 6.5 وحدات قياس متعددة — core_product_units (كل وحدة لها 13 سعر)

| # | اسم الحقل | الاسم بالعربي | النوع | ملاحظات |
|---|-----------|--------------|-------|---------|
| 1 | `unit_id` | وحدة القياس | FK | ربط بجدول الوحدات |
| 2 | `conversion_factor` | معامل التحويل | INT | 1 كرتونة = 12 قطعة |
| 3 | `barcode` | باركود الوحدة | VARCHAR | باركود خاص |
| 4 | `buy_price` | سعر شراء الوحدة | DECIMAL(10,2) | - |
| 5 | `sell_price_wholesale` | سعر جملة الوحدة | DECIMAL(10,2) | = سعر_المنتج x معامل_التحويل |
| 6 | `sell_price_semi_wholesale` | سعر نصف جملة | DECIMAL(10,2) | - |
| 7 | `sell_price_retail` | سعر تجزئة | DECIMAL(10,2) | - |
| 8-17 | `sell_price_4` to `sell_price_13` | سعر 4 إلى 13 | DECIMAL(10,2) | أسعار مخصصة |
| 18 | `tax_unit_code` | كود الوحدة الضريبي | VARCHAR | للفاتورة الإلكترونية |
| 19 | `is_default_sell` | افتراضي للبيع | BOOLEAN | - |
| 20 | `is_default_buy` | افتراضي للشراء | BOOLEAN | - |

**القاعدة:** أسعار الوحدة الفارغة = سعر المنتج x معامل التحويل.

## 6.6 المتغيرات (Variants)

| اسم الحقل | النوع | مطلوب | ملاحظات |
|-----------|-------|-------|---------|
| نوع المتغير | نص | نعم | اللون / المقاس / الموديل |
| قيمة المتغير | نص | نعم | أحمر / L / 2025 |
| SKU المتغير | نص (فريد) | نعم | كود فريد |
| باركود المتغير | نص | لا | - |
| صورة المتغير | صورة | لا | - |
| حالة المتغير | حالة | نعم | نشط / غير نشط |

## 6.7 امتدادات المديولات

### مديول المخازن (inv_product_ext):
الكمية المتاحة، الكمية المحجوزة، الحد الأدنى، الحد الأقصى، طريقة التقييم (9 طرق)، المخزن الافتراضي، الكمية الافتتاحية.

### مديول المحاسبة (acc_product_ext):
حساب الإيرادات، حساب تكلفة البضاعة، حساب المخزون.

### مديول التصنيع (mfg_product_ext):
قابل للتصنيع، مادة خام، قائمة المواد (BOM).

## 6.8 حقول قطاعية

### البصريات (Optic) — يُفعّل بـ `isOpticProg=0`:
`is_optic` (ENUM: no/without_size_color/with_size_color)، `optic_services` (خدمات بصرية).

### السيارات — يُفعّل بـ `isCarBill=1`:
`vehicle_type`، `chassis_no`، `motor_no`، `the_color`.

### الأونلاين — يُفعّل بـ `showonline=1`:
`is_online`، `online_category_id`، `min_appear_online`، `search_filter_ids`، `in_menu`.

### استراتيجيات البيع:
`selling_type` (ENUM: 1=FCFO أول تكلفة، 2=LCFO آخر تكلفة، 3=بالصلاحية).

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

| رقم | القاعدة |
|-----|---------|
| BR-PRD-001 | SKU فريد ولا يتكرر |
| BR-PRD-002 | الباركود فريد إذا أُدخل |
| BR-PRD-003 | لا يمكن حذف منتج له حركات |
| BR-PRD-004 | التصنيف مطلوب |
| BR-PRD-005 | تغيير وحدة القياس الأساسية يتطلب عدم وجود حركات |
| BR-PRD-006 | منتج "خدمة" لا يتتبع بالمخزون |

---

# 7. إدارة التصنيفات (Categories)

## 7.1 تصنيفات المنتجات (هرمية)

| اسم الحقل | النوع | مطلوب | ملاحظات |
|-----------|-------|-------|---------|
| كود التصنيف | نص (فريد) | نعم | تلقائي |
| اسم التصنيف (عربي) | نص | نعم | - |
| اسم التصنيف (إنجليزي) | نص | لا | - |
| التصنيف الأب | قائمة | لا | null = رئيسي |
| الوصف | نص | لا | - |
| الصورة | صورة | لا | - |
| الترتيب | رقمي | لا | - |
| في المنيو/الكتالوج | نعم/لا | نعم | نعم |
| إيقاف البيع بالسالبة | BOOLEAN | لا | يمنع البيع إذا المخزون صفر |
| حالة التصنيف | حالة | نعم | نشط / غير نشط |

### هوامش التصنيف الكاملة (sales_category_ext) — 14 هامش:

| # | اسم الحقل | الاسم بالعربي | النوع | يُفعّل بإعداد |
|---|-----------|--------------|-------|--------------|
| 1 | `real_buy_margin_pct` | هامش الشراء الفعلي % | FLOAT | - |
| 2 | `wholesale_margin_pct` | هامش الجملة % | FLOAT | - |
| 3 | `semi_wholesale_margin_pct` | هامش نصف الجملة % | FLOAT | - |
| 4 | `retail_margin_pct` | هامش التجزئة % | FLOAT | - |
| 5 | `price4_margin_pct` | هامش سعر 4 % | FLOAT | `showprice4=1` |
| 6 | `price5_margin_pct` | هامش سعر 5 % | FLOAT | `showprice5=1` |
| 7 | `price6_margin_pct` | هامش سعر 6 % | FLOAT | `showprice6=1` |
| 8 | `price7_margin_pct` | هامش سعر 7 % | FLOAT | `showprice7=1` |
| 9 | `price8_margin_pct` | هامش سعر 8 % | FLOAT | `showprice8=1` |
| 10 | `price9_margin_pct` | هامش سعر 9 % | FLOAT | `showprice9=1` |
| 11 | `price10_margin_pct` | هامش سعر 10 % | FLOAT | `showprice10=1` |
| 12 | `price11_margin_pct` | هامش سعر 11 % | FLOAT | `showprice11=1` |
| 13 | `price12_margin_pct` | هامش سعر 12 % | FLOAT | `showprice12=1` |
| 14 | `price13_margin_pct` | هامش سعر 13 % | FLOAT | `showprice13=1` |
| 15 | `sell_discount` | خصم البيع | FLOAT | - |
| 16 | `buy_discount` | خصم الشراء | FLOAT | - |
| 17 | `discount_type` | نوع الخصم | ENUM | none/fixed/percentage |

### وحدات التصنيف الافتراضية (core_category_default_units):
كل تصنيف يعرف وحدات افتراضية تُملأ تلقائياً عند إضافة منتج: `category_id`, `unit_id`, `conversion_factor`.

## 7.2 تصنيفات الأطراف التجارية

اسم (عربي/إنجليزي)، ينطبق على (عملاء/موردين/كلاهما)، وصف، لون.

## 7.3 الدول والمحافظات

الدول: كود ISO، اسم (عربي/إنجليزي)، كود اتصال.
المحافظات: الدولة FK، اسم (عربي/إنجليزي).

---

# 8. إدارة وحدات القياس (Units of Measure)

اسم (عربي/إنجليزي)، اختصار (عربي/إنجليزي)، مجموعة (عدد/وزن/حجم/طول/مساحة)، حالة.

### مجموعات افتراضية:
العدد: قطعة، درزن، كرتونة | الوزن: جرام، كيلو، طن | الحجم: مللي، لتر، جالون | الطول: سم، متر | المساحة: م2.

---

# 9. إدارة العملات وأسعار الصرف

عملات: كود ISO، اسم (عربي/إنجليزي)، رمز، منازل عشرية، هل أساسية، حالة.
أسعار صرف: عملة، سعر، تاريخ سريان، مصدر.
قواعد: عملة أساسية واحدة، لا تتغير بعد وجود عمليات، حفظ تاريخي، آخر سعر سارٍ.

---

# 10. إدارة الفروع والمواقع

كود، اسم (عربي/إنجليزي)، نوع (فرع/مخزن/مصنع/معرض)، عنوان، مدينة، دولة، هاتف، مسؤول، حالة.

---

# 11. إدارة الإعدادات العامة (Settings)

## 11.1 إعدادات النظام
اللغة، المنطقة الزمنية، صيغة التاريخ، صيغة الأرقام، المنازل العشرية، حجم الطباعة، الإشعارات، مهلة الجلسة.

## 11.2 إعدادات المديولات (Key-Value)

| المفتاح | القيمة | المديول |
|---------|--------|---------|
| sales.default_price_type | wholesale | المبيعات |
| sales.auto_approve_limit | 5000 | المبيعات |
| sales.allow_negative_stock | false | المبيعات |
| accounting.fiscal_year_start | 01-01 | المحاسبة |
| accounting.auto_post_entries | false | المحاسبة |
| accounting.auto_create_partner_account | true | المحاسبة |
| accounting.ar_parent_account | 1201 | المحاسبة |
| accounting.ap_parent_account | 2101 | المحاسبة |
| inventory.valuation_method | weighted_avg | المخازن |
| inventory.allow_negative | false | المخازن |
| pos.allow_discount | true | POS |

## 11.3 إعدادات المنتجات التفصيلية (14 إعداد)

`product.barcode_digits`(5), `product.specialized_barcode_digits`(7), `product.size_color_barcode_digits`(3), `product.barcode_search_priority`(standard_first), `product.auto_update_buy_price`(true), `product.sell_price_auto_update_mode`(none), `product.sell_price_auto_update_in_buy_bill`(none), `product.update_all_prices_on_wholesale_change`(false), `product.auto_update_unit_prices`(true), `product.price_entry_mode`(absolute), `product.use_list_price`(false), `product.expiry_search_days`(0), `product.barcode_print_type`(C128A), `product.barcode_print_width`(160).

## 11.4 إعدادات العملاء التفصيلية (14 إعداد)

`client.code_enabled`(true), `client.serial_enabled`(true), `client.min_search_chars`(3), `client.all_fields_required`(false), `client.phone_required`(false), `client.default_debt_limit`(0), `client.enforce_debt_limit`(false), `client.allow_negative_debt`(false), `client.show_tailoring_details`(false), `client.delegate_label`(seller), `client.show_delegate_ratio`(false), `client.simple_add_in_bill`(true), `client.show_prev_prices`(true), `client.return_quantity_check`(warn).

## 11.5 إعدادات تقييم المخزون — 9 طرق

1. سعر الشراء | 2. آخر سعر شراء | 3. آخر سعر بعد الخصم | 4. متوسط سعر الشراء | 5. متوسط بعد الخصم | 6. آخر سعر بالضريبة | 7. متوسط بالضريبة | 8. المتوسط العام | 9. سعر الشراء الفعلي.

تُستخدم في: تقييم المخزون، تقييم الأرباح، سعر التكلفة في القيود.

## 11.6 إعدادات الفواتير (9 إعدادات)

`bill.vat_value`(0), `bill.prices_include_vat`(false), `bill.vat_before_or_after_discount`(after), `bill.round_total`(true), `bill.decimal_places`(2), `bill.wholesale_min_qty`(0), `bill.semi_wholesale_min_qty`(0), `bill.show_barcode_in_bill`(false), `bill.ebill_enabled`(false).

---

# 12. نظام التسلسل والترقيم (Sequences)

| اسم الحقل | النوع | مطلوب | ملاحظات |
|-----------|-------|-------|---------|
| اسم التسلسل | نص | نعم | فاتورة مبيعات |
| المديول | قائمة | نعم | Core / المبيعات / المحاسبة |
| الكيان | نص | نعم | invoice |
| البادئة (Prefix) | نص | لا | INV- |
| اللاحقة (Suffix) | نص | لا | - |
| يشمل السنة | نعم/لا | لا | INV-2026-0001 |
| يشمل الشهر | نعم/لا | لا | - |
| عدد الخانات | رقمي | نعم | 4 → 0001 |
| الرقم الحالي | رقمي | نعم | آخر رقم |
| إعادة الترقيم | قائمة | لا | سنوي / شهري / لا |
| لكل فرع مستقل | نعم/لا | لا | - |

### التسلسلات الافتراضية:

BP-(Core), PRD-(Core), QT-(المبيعات), SO-(المبيعات), INV-(المبيعات), RET-(المبيعات), CN-(المبيعات), RV-(المبيعات), PO-(المشتريات), BIL-(المشتريات), PV-(المشتريات), JV-(المحاسبة), STK-(المخازن), MO-(التصنيع).

---

# 13. نظام المرفقات (Attachments)

اسم الملف، نوع، حجم، الكيان المرتبط، معرف الكيان، وصف، رافع، تاريخ.
الأنواع المسموحة: PDF, JPG, PNG, XLSX, DOCX, CSV. الحد: 10MB (قابل للتعريف).

---

# 14. نظام التنبيهات والإشعارات (Notifications)

### هيكل الإشعار:
عنوان، محتوى، نوع (معلومة/تحذير/خطأ/نجاح)، مستقبل، كيان مرتبط، مقروء، تاريخ.

### الأحداث:
فاتورة تحتاج اعتماد → المدير | تجاوز حد الدين → مدير المبيعات | عرض يقترب انتهاؤه → المندوب | قسط مستحق → المحاسب | منتج وصل الحد الأدنى → أمين المخزن | قيد ينتظر → المحاسب | تجاوز موازنة → المدير المالي.

### القنوات:
داخل النظام (دائماً)، البريد الإلكتروني (قابل للتفعيل)، SMS (مستقبلي).

---

# 15. نظام سير العمل (Workflow Engine)

### حالات سير العمل القياسية:
مسودة → قيد المراجعة → معتمد → مرحّل/منفذ → ملغي (بقيد عكسي).

### سير عمل كل مستند:
فاتورة مبيعات: مسودة → معتمدة → مرسلة → مدفوعة جزئياً → مدفوعة كلياً → ملغاة.
عرض سعر: مسودة → مرسل → مقبول/مرفوض → محول.
أمر بيع: مسودة → مؤكد → قيد التنفيذ → منفذ جزئياً → منفذ كلياً → مغلق.
قيد محاسبي: مسودة → معتمد → مرحّل → ملغي (عكس).
أمر شراء: مسودة → معتمد → مرسل للمورد → مستلم جزئياً → مستلم كلياً → مغلق.
حركة مخزون: مسودة → معتمدة → منفذة.

---

# 16. نظام إعدادات الأتمتة وتدفق العمليات (Automation & Flow Settings)

## 16.1 ثلاث مستويات لكل خطوة

| المستوى | الاسم | الشرح | مناسب لـ |
|---------|-------|-------|---------|
| 1 | يدوي (Manual) | كل خطوة تحتاج إجراء يدوي | شركات كبيرة |
| 2 | شبه تلقائي (Semi-Auto) | تلقائي لكن ينتظر مراجعة | شركات متوسطة |
| 3 | تلقائي كامل (Full-Auto) | خطوة واحدة | شركات صغيرة / POS |

## 16.2 إعدادات التدفق الافتراضية

### تدفقات المبيعات:

| # | العملية | الحدث | الإجراء | الافتراضي |
|---|---------|-------|--------|----------|
| F-01 | فاتورة مبيعات | عند الاعتماد | خصم المخزون | شبه تلقائي |
| F-02 | فاتورة مبيعات | عند الاعتماد | قيد محاسبي | شبه تلقائي |
| F-03 | فاتورة مبيعات | عند الاعتماد | إرسال بريد للعميل | معطل |
| F-04 | فاتورة مبيعات | عند الإنشاء | اعتماد تلقائي | يدوي |
| F-06 | مرتجع مبيعات | عند الاعتماد | إضافة للمخزون | شبه تلقائي |
| F-07 | مرتجع مبيعات | عند الاعتماد | قيد عكسي | شبه تلقائي |
| F-09 | تحصيل من عميل | عند الحفظ | قيد محاسبي | تلقائي |
| F-10 | عرض سعر مقبول | عند القبول | تحويل لأمر بيع | يدوي |
| F-11 | أمر بيع | عند التأكيد | حجز مخزون | شبه تلقائي |

### تدفقات المشتريات:

| # | العملية | الحدث | الإجراء | الافتراضي |
|---|---------|-------|--------|----------|
| F-20 | فاتورة شراء | عند الاعتماد | إضافة للمخزون | شبه تلقائي |
| F-21 | فاتورة شراء | عند الاعتماد | قيد محاسبي | شبه تلقائي |
| F-22 | مرتجع شراء | عند الاعتماد | خصم مخزون + قيد | شبه تلقائي |
| F-23 | دفع لمورد | عند الحفظ | قيد محاسبي | تلقائي |

### تدفقات أخرى:

| # | العملية | الحدث | الإجراء | الافتراضي |
|---|---------|-------|--------|----------|
| F-30 | تسوية مخزون | عند الاعتماد | قيد محاسبي | شبه تلقائي |
| F-41 | طرف تجاري جديد | عند الإنشاء | فتح حساب محاسبي | تلقائي |
| F-50 | فاتورة POS | عند الحفظ | اعتماد + خصم + قيد | تلقائي كامل (ثابت) |
| F-60 | مسير الرواتب | عند الاعتماد | قيد محاسبي | شبه تلقائي |

## 16.3 قوالب تدفق جاهزة (Flow Presets)

| القالب | الاعتماد | المخزون | المحاسبة | مناسب لـ |
|--------|---------|---------|---------|---------|
| محل صغير | تلقائي | تلقائي | تلقائي + ترحيل | محلات تجزئة |
| شركة متوسطة | بشرط مبلغ | شبه تلقائي | شبه تلقائي | 10-50 موظف |
| شركة كبيرة | متعدد المستويات | يدوي | يدوي | شركات كبيرة |
| POS سريع | تلقائي بلا توقف | تلقائي | تلقائي | نقاط البيع |

## 16.4 التعامل مع الفشل

| السياسة | الشرح |
|---------|-------|
| تراجع كامل (Rollback) | فشل أي خطوة → تراجع عن الكل |
| **استمر مع تنبيه (الافتراضي)** | أكمل ما نجح + تنبيه + قائمة انتظار |
| أوقف واسأل | عرض رسالة للمستخدم |

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

BR-FLW-001 إلى BR-FLW-008: إعدادات مستقلة لكل شركة، لا تؤثر إلا على المفعل، مديول غير مفعل يُتجاهل، تغيير يؤثر على الجديد فقط، POS دائماً تلقائي كامل، إعدادات مختلفة لكل فرع.

---

# 17. سجل المراجعة (Audit Trail)

المعرف UUID، تاريخ+وقت، مستخدم، إجراء (create/update/delete/approve/post/reverse/login/logout)، كيان، معرف، قيم قديمة JSON، قيم جديدة JSON، IP، متصفح.

قواعد: لا يمكن تعديله أو حذفه، كل عملية تُسجل، دخول/خروج يُسجل، محاولات فاشلة تُسجل.

---

# 18. نظام المديولات (Module Registry)

كود، اسم (عربي/إنجليزي)، إصدار، حالة (مفعل/غير مفعل/تجريبي)، المطلوبة، تاريخ تفعيل.

### علاقات المديولات:
Core: لا شيء | المحاسبة: Core + اختياري (مبيعات، مشتريات، مخازن، HR) | المبيعات: Core + اختياري (محاسبة، مخازن) | المشتريات: Core + اختياري (محاسبة، مخازن) | المخازن: Core + اختياري (محاسبة) | POS: Core+مبيعات + اختياري (مخازن، محاسبة) | HR: Core + اختياري (محاسبة) | التصنيع: Core + اختياري (مخازن، محاسبة).

عند التفعيل: إنشاء جداول، تسلسلات، أدوار، إعدادات، مستمعي أحداث، قوائم.
عند التعطيل: إخفاء (لا حذف)، إلغاء مستمعين، البيانات تبقى.

---

# 19. نظام البحث والفلاتر

بحث عام موحد (أطراف، منتجات، فواتير)، بحث متقدم (فلترة + ترتيب + حفظ + تصدير)، بحث ذكي للمنتجات (من حرفين: اسم + باركود + كمية + سعر).

---

# 20. الإعدادات الإقليمية والتعريب

لغات: عربي + إنجليزي، RTL/LTR، تبديل فوري، لغة لكل مستخدم.
طباعة: قوالب قابلة للتخصيص، ثنائي اللغة، A4/A5/حراري، لوجو، باركود/QR، فاتورة إلكترونية.

---

# 21. نظام التحكم في التزامن (Concurrency Control)

> أي عملية تعدل الدين أو المخزون يجب أن تقفل السجل أولاً.

| الكيان | آلية القفل | الوصف |
|--------|-----------|-------|
| العميل | `partner_lock(id)` | قفل ذري عند تعديل الدين |
| المورد | `partner_lock(id)` | نفس الآلية |
| تفاصيل المخزن | `stock_lock(product_id, store_id)` | قفل عند تعديل الكمية |

---

# الجزء الثاني: مديول المحاسبة المالية (Accounting Module)

---

# 22. نظرة عامة على مديول المحاسبة

## 22.1 وصف المنتج

مديول محاسبة مالية شامل يخدم أنواع مختلفة من الشركات (تجارية، خدمية، صناعية، مختلطة). يدعم عملات متعددة وواجهة ثنائية اللغة (عربي/إنجليزي).

## 22.2 الوحدات الفرعية

| # | الوحدة | الوصف |
|---|--------|-------|
| 1 | شجرة الحسابات (COA) | بناء شجرة مرنة غير محدودة المستويات |
| 2 | دفتر الأستاذ العام (GL) | تسجيل جميع الحركات المالية |
| 3 | الحسابات المدينة (AR) | إدارة حسابات العملاء |
| 4 | الحسابات الدائنة (AP) | إدارة حسابات الموردين |
| 5 | النقدية والبنوك | بنوك / خزن / شيكات |
| 6 | الأصول الثابتة | تسجيل وإهلاكات |
| 7 | مراكز التكلفة | تتبع التكاليف |
| 8 | الموازنات | إعداد ومتابعة |
| 9 | الضرائب | VAT / Withholding Tax |
| 10 | العملات | متعدد العملات وأسعار الصرف |

## 22.3 الكيانات المشتركة (تنتقل إلى Core)

| الكيان | كان في المحاسبة | ينتقل إلى Core | السبب |
|--------|---------------|---------------|-------|
| العملاء/الموردين | نعم (AR/AP) | نعم → أطراف تجارية | الكل يحتاجهم |
| العملات وأسعار الصرف | نعم | نعم | الكل يحتاجها |
| الفروع | نعم | نعم | الكل يحتاجها |
| المستخدمين والصلاحيات | نعم | نعم | الكل يحتاجها |
| سجل المراجعة | نعم | نعم | الكل يحتاجه |
| الإشعارات | نعم | نعم | الكل يحتاجها |

---

# 23. شجرة الحسابات (Chart of Accounts)

## 23.1 الهيكل

شجرة حسابات قابلة للتخصيص بالكامل، بمستويات غير محدودة العمق. نظام ترقيم مختلط (تلقائي مع إمكانية التعديل).

## 23.2 حقول الحساب

| الحقل | النوع | ملاحظات |
|-------|-------|---------|
| رقم الحساب (Account Code) | String | تلقائي مع إمكانية التعديل |
| اسم الحساب (عربي) | String | إلزامي |
| اسم الحساب (إنجليزي) | String | إلزامي |
| الحساب الأب (Parent) | FK | لبناء الشجرة |
| المستوى (Level) | Integer | يحسب تلقائياً |
| التصنيف | Enum | أصول / خصوم / حقوق ملكية / إيرادات / مصروفات |
| الطبيعة (Nature) | Enum | مدين / دائن |
| نوع الحساب | Enum | رئيسي (تجميعي) / فرعي (ترحيلي) |
| العملة الافتراضية | FK | اختياري |
| مركز تكلفة افتراضي | FK | اختياري |
| الحالة | Enum | نشط / مجمد / محذوف |

---

# 24. الفترات المالية (Financial Periods)

سنوات مالية متعددة مع فترات شهرية (12 فترة + فترة إقفال). كل فترة يمكن فتحها وإقفالها بشكل مستقل.

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

---

# 25. القيود المحاسبية (Journal Entries)

## 25.1 أنواع القيود

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

## 25.2 حقول رأس القيد (Header)

| الحقل | النوع | ملاحظات |
|-------|-------|---------|
| رقم القيد | Auto | ترقيم تلقائي حسب السنة |
| التاريخ | Date | تاريخ القيد |
| الفترة المالية | FK | يحدد تلقائياً من التاريخ |
| الوصف | String | وصف القيد |
| النوع | Enum | عادي/عكسي/متكرر/تسوية/إقفال/تلقائي |
| الحالة | Enum | مسودة/معتمد/مرحل/ملغي |
| المرفقات | Files | مستندات مرفقة |
| المصدر | String | اسم الموديول / رقم المستند |

## 25.3 حقول سطر القيد (Line)

| الحقل | النوع | ملاحظات |
|-------|-------|---------|
| الحساب | FK | فرعي فقط |
| مدين (Debit) | Decimal | المبلغ المدين |
| دائن (Credit) | Decimal | المبلغ الدائن |
| العملة | FK | عملة السطر |
| سعر الصرف | Decimal | سعر التحويل |
| المبلغ بالعملة الأساسية | Decimal | يحسب تلقائياً |
| مركز التكلفة | FK | اختياري |
| المشروع | FK | اختياري |
| البيان | String | وصف السطر |

## 25.4 ميزات إضافية

- نظام اعتماد (Approval): مسودة > معتمد > مرحل
- مرفقات ومستندات مع كل قيد
- قوالب قيود جاهزة (Templates)
- ربط بمركز تكلفة و/أو مشروع
- منع تعديل/حذف القيود المرحلة (الإلغاء بقيد عكسي)
- قيود تلقائية من موديولات أخرى مع تعديل قبل الترحيل

---

# 26. دفتر الأستاذ العام (General Ledger)

المرجع الرئيسي لجميع الحركات المالية. يتغذى من القيود المرحلة.

- عرض حركات كل حساب مع الرصيد الجاري
- تصفية حسب الفترة/التاريخ/العملة/مركز التكلفة
- الربط المباشر بالقيد الأصلي (Drill-down)
- أرصدة بالعملة الأصلية والأساسية

---

# 27. الحسابات المدينة والدائنة (AR/AP)

## 27.1 الحسابات المدينة (Accounts Receivable)

- ربط كل عميل بحساب في الشجرة (تلقائي عبر Core Event)
- تتبع فواتير مستحقة ومدفوعات
- تقرير أعمار ديون (Aging Report)
- كشف حساب العميل التفصيلي
- إشعارات دائنة ومدينة

## 27.2 الحسابات الدائنة (Accounts Payable)

- ربط كل مورد بحساب في الشجرة (تلقائي عبر Core Event)
- تتبع فواتير موردين ومدفوعات
- تقرير أعمار ديون للموردين
- كشف حساب المورد التفصيلي
- جدولة مدفوعات وتنبيهات استحقاق

---

# 28. النقدية والبنوك (Cash & Bank)

| الوظيفة | الوصف |
|---------|-------|
| تسوية بنكية يدوية | مطابقة حركات مع كشف البنك |
| تسوية بنكية تلقائية | استيراد CSV/Excel ومطابقة تلقائية |
| شيكات صادرة | جديد > مسلم > مصروف > ملغي |
| شيكات واردة | مستلم > تحت التحصيل > محصل > مرتجع |
| خزن نقدية (Petty Cash) | سندات قبض/صرف مع إقفال يومي |
| تحويلات بين حسابات | بين بنوك وخزن مع قيد تلقائي |

---

# 29. الأصول الثابتة (Fixed Assets)

## 29.1 حقول الأصل

| الحقل | النوع | ملاحظات |
|-------|-------|---------|
| رقم الأصل | Auto | ترقيم تلقائي |
| اسم الأصل (عربي/إنجليزي) | String | ثنائي اللغة |
| رقم تسلسلي | String | للتعريف الفريد |
| الفئة | FK | مركبات/أثاث/معدات... |
| تاريخ الشراء | Date | - |
| تكلفة الشراء | Decimal | - |
| العمر الافتراضي (شهور) | Integer | لحساب الإهلاك |
| طريقة الإهلاك | Enum | ثابت/متناقص/متسارع |
| القيمة التخريدية | Decimal | اختياري |
| الموقع/القسم | FK | لتتبع مكان الأصل |
| حساب الأصل | FK | شجرة الحسابات |
| حساب مجمع الإهلاك | FK | شجرة الحسابات |
| حساب مصروف الإهلاك | FK | شجرة الحسابات |
| الحالة | Enum | نشط/مستبعد/مباع |

## 29.2 العمليات

- توليد قيود إهلاك تلقائياً شهرياً
- استبعاد أصول مع حساب ربح/خسارة تلقائي
- بيع أصول مع توليد قيد البيع
- تقرير جرد حسب الموقع/القسم/الفئة

---

# 30. مراكز التكلفة (Cost Centers)

- شجرة مراكز تكلفة هرمية متعددة المستويات
- ربط مركز التكلفة بكل سطر قيد
- تقارير ربحية حسب مركز التكلفة
- مقارنة الفعلي بالتقديري

---

# 31. الموازنات التقديرية (Budgeting)

- موازنات سنوية بتوزيع شهري
- ربط بحسابات الشجرة ومراكز التكلفة
- تقرير Budget vs Actual
- تنبيهات تجاوز الموازنة
- دعم موازنات متعددة (تقديرية/معدلة/معتمدة)

---

# 32. إدارة الضرائب (Tax Management)

| الوظيفة | الوصف |
|---------|-------|
| نسب ضريبية متعددة | تعريف نسب مختلفة (0%, 5%, 14%, 15%...) |
| حساب تلقائي | حساب الضريبة تلقائياً على الفواتير |
| ضريبة القيمة المضافة | تتبع ضريبة المدخلات والمخرجات |
| إقرار ضريبي دوري | توليد VAT Return تلقائي |
| ضريبة الخصم من المنبع | Withholding Tax تلقائي |

---

# 33. التقارير المالية (Reports)

## 33.1 التقارير الأساسية

| التقرير | الوصف | تصفية |
|---------|-------|-------|
| ميزان المراجعة | أرصدة جميع الحسابات | فترة/مستوى/عملة |
| قائمة الدخل | إيرادات ومصروفات وصافي ربح | فترة/مركز تكلفة |
| الميزانية العمومية | أصول/خصوم/حقوق ملكية | تاريخ |
| التدفقات النقدية | تشغيلية/استثمارية/تمويلية | الفترة |

## 33.2 التقارير التفصيلية

| التقرير | الوصف |
|---------|-------|
| كشف حساب تفصيلي | حركات كل حساب مع الرصيد |
| تقرير أعمار الديون | تصنيف مستحقات حسب العمر |
| تقرير مراكز التكلفة | تكاليف وإيرادات كل مركز |
| تقرير الضرائب | إقرار VAT وضريبة الخصم |
| تقرير الأصول الثابتة | جرد وإهلاكات |
| تقرير الموازنة | Budget vs Actual |

## 33.3 إخراج التقارير

تصدير PDF / Excel، طباعة مباشرة، إرسال بالبريد، مصمم تقارير مخصص (Report Builder).

---

# 34. ربط المحاسبة بالمديولات الأخرى (Integration Mapping)

| الحدث | القيد التلقائي |
|-------|---------------|
| فاتورة مبيعات نقدي | مدين: الصندوق ← دائن: الإيرادات + الضريبة |
| فاتورة مبيعات آجل | مدين: الذمم المدينة ← دائن: الإيرادات + الضريبة |
| مردودات مبيعات | مدين: مردودات المبيعات ← دائن: الذمم المدينة |
| تحصيل من عميل | مدين: الصندوق/البنك ← دائن: الذمم المدينة |
| فاتورة شراء | مدين: المشتريات ← دائن: الذمم الدائنة |
| دفع لمورد | مدين: الذمم الدائنة ← دائن: الصندوق/البنك |
| حركة مخزون صادر | مدين: تكلفة البضاعة ← دائن: المخزون |
| مقاصة أطراف تجارية | مدين: الذمم الدائنة ← دائن: الذمم المدينة |
| إهلاك أصول | مدين: مصروف إهلاك ← دائن: مجمع إهلاك |
| رواتب | مدين: مصروف رواتب ← دائن: مستحقات موظفين |

**جميع القيود التلقائية قابلة للمراجعة والتعديل قبل الترحيل لدفتر الأستاذ العام.**

---

# الجزء الثالث: الملاحق

---

# 35. هيكل قاعدة البيانات الكامل

## 35.1 جداول Core

```sql
-- الشركة والإعدادات
core_company_settings

-- المستخدمين والصلاحيات
core_users, core_roles, core_role_permissions, core_user_roles
core_user_branches, core_sessions

-- الأطراف التجارية (موحد)
core_business_partners, core_bp_contacts, core_bp_addresses
core_bp_categories, core_debt_changes

-- المنتجات
core_products, core_product_categories, core_product_units
core_product_variants, core_product_images, core_product_barcodes
core_product_serials, core_category_default_units

-- الجغرافيا
core_countries, core_governorates

-- وحدات القياس
core_units_of_measure, core_unit_groups

-- العملات
core_currencies, core_exchange_rates

-- الفروع
core_branches

-- الإعدادات
core_settings (key-value)

-- التسلسل والترقيم
core_sequences

-- المرفقات
core_attachments

-- الإشعارات
core_notifications, core_notification_settings

-- سير العمل
core_workflow_definitions, core_workflow_transitions, core_workflow_logs

-- سجل المراجعة
core_audit_trail

-- المديولات
core_modules, core_module_events

-- الأتمتة
core_flow_settings, core_flow_presets, core_approval_settings
core_approval_levels, core_flow_queue, core_flow_log

-- عام
core_manufacturers, core_tags
```

## 35.2 جداول الامتدادات

```sql
-- امتدادات المبيعات
sales_bp_ext, sales_product_ext, sales_category_ext
sales_debt_changes, sales_payment_receipts, sales_partner_comments

-- امتدادات المشتريات
pur_bp_ext, pur_product_ext
pur_debt_changes, pur_buy_price_history

-- امتدادات المحاسبة
acc_bp_ext, acc_product_ext

-- امتدادات المخازن
inv_product_ext, inv_store_report
inv_damaged_products, inv_size_color_stock

-- امتدادات POS
pos_bp_ext

-- امتدادات التصنيع
mfg_product_ext
```

## 35.3 جداول المحاسبة (خاصة بالمديول)

```sql
acc_chart_of_accounts, acc_fiscal_years, acc_fiscal_periods
acc_journal_entries, acc_journal_lines
acc_bank_accounts, acc_bank_reconciliations
acc_checks_issued, acc_checks_received
acc_petty_cash, acc_petty_cash_transactions
acc_fixed_assets, acc_asset_categories, acc_depreciation_entries
acc_cost_centers, acc_budgets, acc_budget_lines
acc_tax_rates, acc_tax_returns
acc_recurring_entries, acc_entry_templates
```

## 35.4 ملاحظات معمارية

| الملاحظة | التفاصيل |
|---------|----------|
| كل جدول يحتوي على | id, created_at, created_by, updated_at, updated_by |
| الحذف الناعم | deleted_at — البيانات لا تُحذف فعلياً |
| الفهارس | على الحقول المستخدمة في البحث |

---

# 36. مصطلحات

| المصطلح | الشرح |
|---------|-------|
| Core Module | النواة المشتركة |
| Business Partner | طرف تجاري — عميل و/أو مورد |
| Extension | امتداد — حقول إضافية من مديول |
| Event Bus | ناقل الأحداث المركزي |
| Netting | المقاصة بين الذمم المدينة والدائنة |
| Soft Delete | حذف ناعم |
| BOM | قائمة المواد |
| SKU | كود المنتج الفريد |
| COA | شجرة الحسابات Chart of Accounts |
| GL | دفتر الأستاذ العام General Ledger |
| AR | الحسابات المدينة Accounts Receivable |
| AP | الحسابات الدائنة Accounts Payable |
| VAT | ضريبة القيمة المضافة |
| WHT | ضريبة الخصم من المنبع Withholding Tax |
| FIFO | أول وارد أول صادر |

---

# 37. سيناريوهات الشراء

| السيناريو | ماذا يعمل |
|----------|----------|
| مبيعات فقط | Core + المبيعات: فواتير + أطراف تجارية + منتجات + تحصيل + تقارير. بدون قيود وبدون مخزون |
| محاسبة فقط | Core + المحاسبة: شجرة حسابات + قيود + تقارير مالية + أطراف تجارية بحساباتهم |
| مبيعات + محاسبة | كل ما سبق + قيود تلقائية + كشف حساب + عمر ديون + مقاصة |
| مبيعات + مخازن | فواتير + خصم مخزون تلقائي + تتبع كميات + تنبيه حد أدنى |
| النظام الكامل | كل شيء متكامل |

---

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

| المرحلة | المديول |
|---------|---------|
| 1 | Core Module |
| 2 | المحاسبة (تعديل) |
| 3 | المبيعات |
| 4 | المخازن |
| 5 | المشتريات |
| 6 | POS |
| 7 | HR |
| 8 | التصنيع |

---

**نهاية الوثيقة**

*GT4 ERP System - Complete BRD/PRD v2.0 (Core Module + Accounting Module) - فبراير 2026*

</div>
