# 17 — مخططات الدورات الشاملة (Mermaid)

## 1. الدورة الكاملة لمشترك جديد

```mermaid
flowchart TD
    subgraph تسجيل
        A[عميل جديد يأتي] --> B[إنشاء شخص Person]
        B --> C[إنشاء مشترك Participant]
        C --> D[ربط ولي أمر Guardian]
    end

    subgraph اشتراك
        D --> E[اختيار برنامج]
        E --> F[اختيار مجموعة]
        F --> G{ممتلئة؟}
        G -->|لا| H[إنشاء Enrollment]
        G -->|نعم| I[قائمة انتظار]
    end

    subgraph مالية
        H --> J[حساب السعر - PricingService]
        J --> K[إنشاء فاتورة]
        K --> L[تحصيل دفعة]
        L --> M[قيد مزدوج مدين/دائن]
    end

    subgraph تفعيل
        M --> N[الاشتراك → نشط]
        N --> O[المشترك → نشط]
        O --> P[توليد سجلات حضور]
        P --> Q[حجز مساحة - إن وُجد]
    end

    subgraph تدريب
        Q --> R[المشترك يحضر حصص]
        R --> S[تسجيل حضور يومي]
        S --> T[تقييم دوري]
        T --> U{انتهى البرنامج؟}
        U -->|نعم| V[تخرج أو تجديد]
        U -->|لا| R
    end
```

---

## 2. الدورة المالية اليومية

```mermaid
flowchart TD
    subgraph بداية_اليوم
        A[موظف الاستقبال يسجّل الدخول] --> B[فتح وردية مالية]
        B --> C[إدخال المبلغ الافتتاحي]
    end

    subgraph عمليات_اليوم
        C --> D{نوع العملية}
        D -->|تسجيل جديد| E[ويزارد الاستقبال]
        D -->|بيع منتج| F[نقطة البيع POS]
        D -->|تحصيل فاتورة| G[تحصيل دفعة]
        D -->|إيداع محفظة| H[إيداع Wallet]

        E --> I[فاتورة + دفعة + قيد]
        F --> I
        G --> I
        H --> I

        I --> J[تحديث عداد الوردية]
        J --> D
    end

    subgraph نهاية_اليوم
        J --> K[إقفال الوردية]
        K --> L[إدخال المبلغ الختامي]
        L --> M[حساب الفرق]
        M --> N{تطابق؟}
        N -->|نعم| O[✓ مطابقة]
        N -->|لا| P[⚠ فرق يحتاج تبرير]
    end
```

---

## 3. دورة الحضور اليومية

```mermaid
flowchart TD
    subgraph توليد
        A[مهمة 02:00 - توليد حصص] --> B[لكل مجموعة نشطة]
        B --> C[إنشاء حصة]
        C --> D[توليد سجلات 'متوقع']
        D --> E[حجز مساحة]
    end

    subgraph تسجيل
        F[المدرب يفتح شاشة الحضور] --> G[قائمة المشتركين]
        G --> H{لكل مشترك}
        H --> I[حاضر ← قبل فترة السماح]
        H --> J[متأخر ← بعد فترة السماح]
        H --> K[مستأذن ← إذن مسبق]
        H --> L[لم يأتِ ← يبقى 'متوقع']
    end

    subgraph تلقائي
        M[مهمة كل ساعة] --> N{انتهت الحصة + ساعتين؟}
        N -->|نعم| O[متوقع → غائب تلقائي]
        N -->|لا| P[انتظار]
    end

    subgraph إنفاذ
        Q[مهمة 06:00 يومياً] --> R{5 غيابات متتالية؟}
        R -->|نعم| S[إيقاف المشترك]
        S --> T[إشعار ولي الأمر]
        R -->|لا| U{نسبة < 75%؟}
        U -->|نعم| V[تحذير ولي الأمر]
        U -->|لا| W[لا إجراء]
    end
```

---

## 4. دورة محرك التسعير

```mermaid
flowchart TD
    A[طلب حساب سعر] --> B[البحث عن سعر أساسي نشط]
    B --> C{وُجد؟}
    C -->|لا| D[✗ رفض: لا يوجد سعر محدد]
    C -->|نعم| E[جمع القواعد المطبقة]

    E --> F[تقييم شروط كل قاعدة]
    F --> G[تصفية: غير المتراكمة - الأعلى أولوية يفوز]

    G --> H[تطبيق بالترتيب]
    H --> I[قاعدة 1: مثلاً خصم عمر 10%]
    I --> J[قاعدة 2: مثلاً خصم أخوة 15%]
    J --> K[تطبيق حد أقصى لكل قاعدة]

    K --> L{كوبون؟}
    L -->|نعم| M[8 تحققات على الكوبون]
    M --> N[تطبيق خصم الكوبون]
    L -->|لا| O[تخطي]

    N --> P[فحص الحد الأقصى العام - 50%]
    O --> P
    P --> Q[فحص: لا يكون سالب]
    Q --> R[النتيجة النهائية ← الفاتورة]
```

---

## 5. دورة عملية POS

```mermaid
sequenceDiagram
    participant C as العميل
    participant R as الاستقبال
    participant POS as نقطة البيع
    participant Pricing as محرك التسعير
    participant Inv as المخزون
    participant Fin as المالية

    C->>R: يريد شراء منتج + اشتراك
    R->>POS: إضافة بنود للسلة
    POS->>Pricing: حساب سعر كل بند
    Pricing-->>POS: الأسعار المحسوبة
    R->>POS: تطبيق كوبون
    POS->>POS: التحقق من الكوبون (8 checks)
    POS-->>R: الإجمالي بعد الخصم

    R->>POS: إتمام البيع (كاش)
    POS->>POS: DB::transaction بدأت

    POS->>Fin: إنشاء فاتورة + دفعة + قيد مزدوج
    POS->>Inv: حركة مخزون (خصم المنتج)
    POS->>POS: إنشاء اشتراك + تفعيل
    POS->>POS: تحديث عداد الوردية
    POS->>POS: إنشاء إيصال

    POS->>POS: DB::transaction انتهت ✓
    POS-->>R: ✓ تم + إيصال
    R-->>C: إيصال مطبوع
```

---

## 6. دورة إنشاء المجموعة وتوليد الحصص

```mermaid
flowchart TD
    subgraph إعداد
        A[إنشاء برنامج] --> B[إنشاء مجموعة]
        B --> C[تعيين مدرب]
        C --> D[إنشاء جدول أسبوعي]
        D --> E[ربط بمنشأة]
    end

    subgraph توليد_يومي
        F[مهمة 02:00] --> G[لكل مجموعة نشطة بجدول]
        G --> H[لكل يوم في الأسبوع القادم]
        H --> I{عطلة؟}
        I -->|نعم| J[تخطي]
        I -->|لا| K{موجودة بالفعل؟}
        K -->|نعم| J
        K -->|لا| L[إنشاء حصة]
        L --> M[توليد حضور المشتركين]
        M --> N[توليد حضور المدرب]
        N --> O[حجز المساحة]
    end

    subgraph أثناء_الحصة
        P[الحصة تبدأ] --> Q[المدرب يسجل الحضور]
        Q --> R[الحصة تنتهي]
        R --> S[حالة: مكتملة]
    end
```

---

## 7. دورة المحفظة

```mermaid
flowchart TD
    A[ولي الأمر يودع 2000 ج.م] --> B[lockForUpdate على المحفظة]
    B --> C[إنشاء wallet_transaction: deposit]
    C --> D[الرصيد: 0 → 2000]

    E[عملية شراء 1500 ج.م] --> F[lockForUpdate]
    F --> G{الرصيد ≥ المطلوب؟}
    G -->|نعم| H[إنشاء wallet_transaction: debit]
    H --> I[الرصيد: 2000 → 500]
    G -->|لا| J[✗ رصيد غير كافٍ]

    K[تجميد 300 ج.م] --> L[frozen_amount: 0 → 300]
    L --> M[available = balance - frozen = 500 - 300 = 200]
```

---

## 8. دورة الموارد البشرية الشهرية

```mermaid
flowchart TD
    subgraph يومياً
        A[المدرب يحضر حصة] --> B[حدث: AttendanceMarked]
        B --> C[Listener: GenerateTrainerCompensation]
        C --> D[مكافأة: pending]
    end

    subgraph نهاية_الشهر
        E[فتح فترة رواتب] --> F[تجميع مكافآت الشهر]
        F --> G[خصم أقساط السلف]
        G --> H[إنشاء كشف راتب draft]
        H --> I[مراجعة وتعديل]
        I --> J[اعتماد: approved]
        J --> K[صرف: paid]
        K --> L[إشعار المدرب]
    end
```

---

## 9. دورة قائمة الانتظار

```mermaid
flowchart TD
    A[طلب تسجيل في مجموعة ممتلئة] --> B[إضافة لقائمة الانتظار]
    B --> C[ترتيب: حسب وقت الطلب]

    D[مشترك ينسحب من المجموعة] --> E[عداد المجموعة -1]
    E --> F[حدث: WaitlistSpotAvailable]
    F --> G[أول شخص في القائمة]
    G --> H[إرسال إشعار: مكان متاح]
    H --> I{الرد؟}
    I -->|قبول| J[نقل: waitlisted → pending]
    J --> K[إنشاء فاتورة]
    K --> L[بعد الدفع: active]
    I -->|رفض/انتهاء المهلة| M[الانتقال للتالي في القائمة]
    M --> G
```

---

## 10. دورة المستندات

```mermaid
flowchart TD
    A[رفع مستند] --> B[حالة: pending]
    B --> C[المسؤول يراجع]
    C --> D{القرار}
    D -->|قبول| E[حالة: approved]
    D -->|رفض| F[حالة: rejected + سبب]

    E --> G[المستند فعّال]
    G --> H{تاريخ انتهاء؟}
    H -->|نعم| I[مهمة يومية تفحص]
    I --> J{انتهى؟}
    J -->|نعم| K[حالة: expired + تنبيه]
    J -->|لا| L[تحذير قبل 7 أيام]
    H -->|لا| M[فعّال دائماً]

    F --> N[إعادة رفع] --> B
```

---

## 11. دورة كشف تعارض المساحات

```mermaid
flowchart TD
    A[طلب حجز مساحة] --> B[تحديد: منشأة + يوم + وقت + أجزاء]
    B --> C[البحث عن حجوزات مؤكدة]
    C --> D[تصفية: نفس المنشأة + نفس اليوم]
    D --> E[تصفية: تداخل زمني]
    E --> F{وُجد تداخل؟}
    F -->|لا| G[✓ لا تعارض - يمكن الحجز]
    F -->|نعم| H[فحص تقاطع الأجزاء]
    H --> I{نفس الأجزاء مطلوبة؟}
    I -->|لا| G
    I -->|نعم| J[✗ تعارض]
    J --> K[إرجاع تفاصيل: من يحجز + متى + أي أجزاء]
```

---

## 12. دورة الفاتورة الكاملة

```mermaid
stateDiagram-v2
    [*] --> draft : إنشاء

    draft --> sent : إرسال لولي الأمر
    draft --> cancelled : إلغاء

    sent --> partially_paid : دفعة جزئية
    sent --> overdue : تجاوز الاستحقاق (تلقائي)
    sent --> cancelled : إلغاء (مدفوع=0 فقط)

    overdue --> partially_paid : دفعة جزئية
    overdue --> paid : دفع كامل

    partially_paid --> paid : اكتمال الدفع

    paid --> refunded : استرداد

    note right of cancelled : لا يمكن إلغاء فاتورة بها مدفوعات
    note right of paid : التعديل = استرداد + فاتورة جديدة
    note right of refunded : قيد عكسي جديد
```

---

## 13. نظرة شاملة — تدفق البيانات بين الوحدات

```mermaid
flowchart LR
    subgraph الهوية
        Users[مستخدمين]
        Roles[أدوار]
        Branches[فروع]
    end

    subgraph الأشخاص
        People[أشخاص]
        Participants[مشتركين]
        Guardians[أولياء أمور]
    end

    subgraph التدريب
        Programs[برامج]
        Groups[مجموعات]
        Sessions[حصص]
        Enrollments[اشتراكات]
    end

    subgraph المالية
        Invoices[فواتير]
        Payments[مدفوعات]
        Transactions[قيود]
        Wallets[محافظ]
    end

    subgraph العمليات
        Attendance[حضور]
        Assignments[تعيينات]
        Facilities[منشآت]
        Inventory[مخزون]
        POS[نقطة بيع]
        HR[موارد بشرية]
    end

    subgraph الدعم
        Notifications[إشعارات]
        Documents[مستندات]
        Evaluations[تقييمات]
        Reports[تقارير]
        Settings[إعدادات]
    end

    Participants --> Enrollments
    Enrollments --> Groups
    Groups --> Sessions
    Sessions --> Attendance
    Enrollments --> Invoices
    Invoices --> Payments
    Payments --> Transactions
    POS --> Invoices
    POS --> Inventory
    Assignments --> Attendance
    Attendance --> HR
    HR --> Transactions
    Sessions --> Facilities
```
