# 🏢 وثيقة المقارنة والتوثيق: النسخة الاحترافية (Pro) ضد النسخة الأساسية (Lite)

مرحباً بك في مستند المقارنة التقنية والوظيفية لسكربت إدارة الفواتير والمبيعات السحابي. يهدف هذا المستند إلى توضيح الفروقات الدقيقة بين **النسخة الأساسية (Lite)** والنسخة **الاحترافية (Pro)**، سواء من الناحية البرمجية، أو الهندسية، أو الوظيفية، لتمكين فريق التطوير والتسويق من فهم حدود كل إصدار وتقديم الدعم الفني المناسب للعملاء.

---

## 📊 جدول المقارنة السريعة (Quick Comparison)

| وجه المقارنة | النسخة الأساسية (Lite) | النسخة الاحترافية (Pro) |
| :--- | :---: | :---: |
| **إدارة العملاء والمبيعات** | ✅ مفعّل | ✅ مفعّل |
| **عروض الأسعار والفواتير** | ✅ مفعّل | ✅ مفعّل |
| **كشف حساب العميل التفصيلي** | ✅ مفعّل | ✅ مفعّل |
| **ملف العميل التفصيلي وطباعته** | ❌ غير متوفر | ✅ مفعّل (`public/customers/profile` & `print_profile`) |
| **ملف الشركة التفصيلي وطباعته** | ❌ غير متوفر | ✅ مفعّل (`public/companies/profile` & `print_profile`) |
| **ملف الفرع التفصيلي وطباعته** | ❌ غير متوفر | ✅ مفعّل (`public/branches/profile` & `print_profile`) |
| **تعدد اللغات وإدارة الترجمات** | 🌐 لغتين فقط كحد أقصى (`public/languages`) | ♾️ لغات متعددة وغير محدودة مع لوحة إدارة كاملة |
| **إدارة الشركات والأفرع** | 🏢 شركة وفرع واحد فقط | 🌐 شركات متعددة + فروع جغرافية متصلة |
| **كتالوج المنتجات والخدمات** | ❌ غير متوفر (إدخال يدوي للبنود) | ✅ مفعّل (إدارة كاملة لكتالوج الخدمات والمنتجات) |
| **إدارة المشتريات والموردين** | ❌ غير متوفر | ✅ مفعّل (فواتير مشتريات وسندات دفع للموردين) |
| **الصناديق والمالية** | ❌ غير متوفر | 🏦 مفعّل (حسابات الخزائن، البنوك، حركة المقبوضات والصرف) |
| **نظام حماية التراخيص (Central JWT)** | ❌ تعطيل اختياري / فحص محلي بسيط | 🔒 مفعّل وجدار حماية مشفر (Domain Binding + Heartbeat) |
| **تشفير الكود المصدري الحساس** | ❌ غير مشفر | 🛡️ مشفر بـ ionCube / SourceGuardian لمنع التلاعب بالباقات |

---

## 1. ⚙️ النسخة الأساسية (Lite Version)
تم تصميم النسخة **اللايت** لتكون نظاماً خفيفاً وسهلاً للغاية ومناسباً للمستقلين والمؤسسات الناشئة وأصحاب الأنشطة الفردية الذين يمتلكون موارد استضافة محدودة (استضافات مشتركة بسيطة) ويبحثون عن آلية سريعة لإصدار الفواتير بدون تعقيدات مالية ومخزنية.

### 🛡️ الميزات المفعّلة والقيود في النسخة اللايت:
1. **لوحة التحكم الرئيسية (Basic Dashboard):**
   * استعراض إجمالي المبيعات، الفواتير المستحقة، السدادات، وأرصدة العملاء الحالية.
   * اختصارات سريعة لإنشاء الفواتير والعملاء بشكل فوري.
2. **إدارة العملاء (Customers CRM):**
   * إضافة العملاء ببياناتهم (الاسم، الجوال، البريد، العنوان، الرقم الضريبي).
   * عرض أرصدة العملاء الحالية ومتابعة مديونياتهم.
   * توليد **كشف حساب عميل موحد تفصيلي** وتصديره كـ PDF أو طباعته.
   * ⚠️ **قيد هام:** يفتقر هذا الإصدار لصفحة ملف بيانات العميل الشخصي التفاعلي (`public/customers/profile`) والنسخة المخصصة للطباعة (`public/customers/print_profile`).
3. **عروض الأسعار والفواتير (Quotes & Invoices):**
   * إنشاء عروض أسعار وتحويلها بضغطة زر إلى فواتير معتمدة.
   * إدارة الفواتير والبنود بمرونة كاملة (حساب الضرائب والخصومات).
   * إرسال الفواتير وعروض الأسعار للعميل عبر البريد الإلكتروني.
   * طباعة الفواتير بنمط ورقي نظيف ومحاذاة مرآتية كاملة (RTL/LTR) حسب لغة النظام.
4. **السدادات (Voucher In):**
   * تسجيل دفعات العملاء المالية (كاش، تحويل بنكي، شيك) وتخصيصها لتسوية فواتير معينة.
5. **الشركات (Single Corporate):**
   * إدارة ملف بيانات الشركة الأساسية (شعار الشركة، الاسم التجاري، رمز الشركة، السجل والضريبة) عبر واجهة التعديل السريع فقط.
   * ⚠️ **قيد هام:** لا يتوفر في هذا الإصدار صفحة ملف الشركة التفصيلي المتكامل (`public/companies/profile`) أو خيار طباعة الملف التعريفي للشركة (`public/companies/print_profile`).
6. **الفروع الجغرافية (Single Branch Limit):**
   * ⚠️ **قيد هام:** يفتقر هذا الإصدار الأساسي لمكون الفروع الجغرافية المتعددة؛ حيث يقتصر النظام بصورة صلبة على فرع افتراضي رئيسي واحد، ولا يتوفر له شاشات إدارة الفروع (`public/branches`) أو الملفات التفصيلية والطباعة للفروع (`public/branches/profile`).
7. **إدارة اللغات (Language Restriction):**
   * ⚠️ **قيد هام:** تقتصر واجهة إدارة اللغات والترجمات في هذا الإصدار (`public/languages`) على **لغتين فقط** (العربية والإنجليزية كحد أقصى) مع قفل إمكانية إضافة أو تفعيل أي لغات إضافية.

---

## 2. 💎 النسخة الاحترافية (Pro Version)
تمثل النسخة **برو** نظاماً مالياً مصغراً ومتكاملاً، يستهدف الشركات المتوسطة والمجموعات التجارية التي تبحث عن أداة تحكم قوية وشاملة لعملياتها التجارية والمخزنية عبر عدة فروع جغرافية مع حماية التدفقات المالية والصناديق.

### 🌟 الميزات الحصرية للنسخة برو (Pro Features):

#### 🏢 أ. الهيكل التنظيمي المتقدم وتعدد الأفرع (Multi-Branch System)
* **تعدد الشركات والفروع:** يتيح النظام لـ (Super Admin) إضافة فروع إدارية متعددة تنتمي لشركات مختلفة.
* **فصل وعزل البيانات:** عزل تام للفواتير والعملاء والصناديق لكل فرع، مع إمكانية استخراج تقارير مدمجة للمجموعة كاملة من قبل الإدارة العليا.
* **ربط المستخدمين بالفروع:** تحديد فرع معين لكل محاسب أو مدير مبيعات لا يمكنه رؤية أو تعديل بيانات فروع أخرى.
* **نسخ البيانات الذكي والتفاعلي (Copy Company Info) ⚡:** زر تفاعلي فاخر بجانب الحفظ، بمجرد اختيار الشركة الأم للفرع، يقوم النظام بسحب وتعبئة كافة البيانات القانونية والتواصل والعنوان تلقائياً من الشركة الأم مع إمكانية تعديلها، مما يوفر على الموظف وقتاً هائلاً ومجهوداً متكرراً.
* **تطهير المدخلات الانتقائي (Selective Clear Inputs) 🧹:** زر تفاعلي بجانب الحفظ لتفريغ وتطهير كافة حقول الفرع دفعة واحدة لإعادة الكتابة، مع استثناء الاسم والشركة والشعار بذكاء.

#### 📦 ب. كتالوج المنتجات والخدمات (Inventory & Items Catalog)
* **دليل السلع والخدمات:** الاحتفاظ بكتالوج كامل يضم جميع المنتجات والخدمات مع أسعارها الافتراضية، الأكواد، الباركود، والنسب الضريبية المرتبطة بها.
* **التعبئة التلقائية للفواتير:** عند البدء بكتابة اسم المنتج في الفاتورة، يقوم النظام بالتعبئة التلقائية لسعر الوحدة والضريبة والوصف دون الحاجة للكتابة اليدوية (مما يمنع أخطاء التسعير البشري).

#### 🛒 ج. المشتريات والموردين (Purchases & Vendors CRM)
* **فواتير المشتريات (Purchase Invoices):** تسجيل وإدخال فواتير المشتريات من الموردين لتوثيق المصاريف والسلع الداخلة.
* **إدارة الموردين:** الاحتفاظ بسجل كامل للموردين وحركات مديونياتهم وكشوف حسابات الموردين تفصيلياً.

#### 🏦 د. الخزائن والصناديق والبنوك (Treasuries & Banking)
* **إدارة النقدية:** تعريف الحسابات المالية المختلفة (خزينة الإدارة، خزينة الكاش، حساب بنك الراجحي، حساب البنك الأهلي، إلخ).
* **سندات المقبوضات والصرف (Vouchers):** تسجيل مباشر لأي حركات صرف (مصروفات إدارية، رواتب، إيجارات) أو مقبوضات خارج نطاق الفواتير التقليدية مع ترحيلها فورياً لأرصدة الصناديق المتأثرة.
* **مطابقة ومطالعة الأرصدة البنكية:** شاشات تدفق مالي تفصيلية لمشاهدة أرصدة الصناديق وتاريخ عملياتها لحظة بلحظة.

#### 📄 هـ. صفحات الملفات الشخصية والطباعة التفصيلية (Customer & Company Profiles)
* **ملف العميل التفصيلي (`public/customers/profile`):** لوحة تحكم ثرية وتفاعلية خاصة بكل عميل، تعرض رسومات بيانية لمشترياته، تفاصيل فواتيره، المبالغ المستحقة والمسددة، وجدول سداد تاريخي متكامل مع إمكانية طباعة هذا الملف وتصديره بشكل منسق عبر (`public/customers/print_profile`).
* **ملف الشركة المتقدم وطباعته (`public/companies/profile` & `print_profile`):** لوحة معلومات تفصيلية تستعرض الهيكل الإداري للشركة، وتعداد وإحصائيات الفروع التابعة لها حركياً من قاعدة البيانات، وجدولاً تفاعلياً حقيقياً بكافة الفروع النشطة والمحذوفة مع أسمائها ورموزها وإجراءاتها.
* **ملف الفرع الجغرافي المتقدم وطباعته (`public/branches/profile` & `print_profile`):** لوحة معلومات تفصيلية بهوية بصرية متميزة (تدرج نيلى وبنفسجي فخم) تعرض بيانات السجل والضريبة والهاتف والعناوين للفرع، بالإضافة إلى كود الفرع وربطه تفاعلياً بملف الشركة الأم مع إمكانيات الطباعة المرآتية RTL/LTR الكاملة.
* **إدارة لغات النظام غير المحدودة (`public/languages`):** يفتح الإصدار الاحترافي القيود عن نظام اللغات بالكامل، مما يسمح بإضافة لغات غير محدودة (مثل الفرنسية، الأوردو، التركية، إلخ) مع تعديل وتخصيص الترجمات لكل اللغات من خلال لوحة تحكم مرنة وسهلة الاستخدام.

#### 🔒 و. نظام حماية وتوزيع التراخيص (SaaS/On-Premise License Guard)
* **الربط بنطاق العميل (Domain Binding):** يرتبط مفتاح التفعيل تلقائياً باسم النطاق (Domain) المثبت عليه السكربت، مما يمنع تشغيل النسخة على خوادم أخرى غير مصرح لها.
* **التوقيع الرقمي (JWT Token):** لا يثق النظام ببيانات قاعدة البيانات المحلية لتحديد صلاحية الـ Pro، بل يطلب ملف توكن رقمي مشفر وموقع إلكترونياً من خادم التراخيص المركزي الخاص بك.
* **التشفير البرمجي:** تشفير ملفات التحقق والتحكّم بالباقات باستخدام **ionCube Loader** لمنع المطورين أو العملاء من كسر الحماية محلياً.

---

## 3. 📂 الفوارق الهندسية والتقنية (Technical Architecture)

```mermaid
graph TD
    subgraph LITE_EDITION [النسخة الأساسية Lite]
        L1[فواتير المبيعات Sales] --> DB1[(قاعدة بيانات محلية)]
        L2[العملاء CRM] --> DB1
        L3[سندات القبض البسيطة] --> DB1
    end

    subgraph PRO_EDITION [النسخة الاحترافية Pro]
        P1[الفروع المتعددة Multi-Branches] --> DB2[(قاعدة بيانات مع فهارس متقدمة)]
        P2[المشتريات والموردين] --> DB2
        P3[الصناديق والبنوك Treasuries] --> DB2
        P4[كتالوج المنتجات Inventory] --> DB2
        
        P1 -.-> LicenseServer{خادم التحقق المركزي}
        LicenseServer -->|JWT Token Encrypted| P1
    end
```

### 1. تصميم قاعدة البيانات وعمل الفهارس (Database Indexes)
* **في النسخة اللايت:** الاستعلامات بسيطة والفهارس تركز على مفاتيح الجداول الأساسية (ID, Name, Email).
* **في النسخة برو:** تم تفعيل فهارس مركبة ومتقدمة (Composite Indexes) لدعم البحث والفرز الفوري لملايين السجلات دون إرهاق السيرفر (مثل الفهارس المركبة لتاريخ الحركة مع الفرع والعميل في جدول `customer_ledger_entries`).

### 2. معالجة وتصدير التقارير الضخمة (Chunking & Server-Side Processing)
* **في النسخة اللايت:** تصدير البيانات يتم بشكل متزامن وبسيط كونه يتعامل مع أحجام بيانات محدودة.
* **في النسخة برو:** شاشات التقارير وجداول البيانات تعمل بالكامل بآلية (Server-side pagination) ولا يتم استدعاء أو معالجة أكثر من 50 سجلاً في الطلب الواحد. كما تعتمد عمليات التصدير الضخمة على فكرة **المعالجة بالدفعات (Chunking)** لحماية الاستضافات المشتركة من الانهيار (Memory Limit Exhaustion).

---

## 4. 🚀 مسار الترقية السلس (Upgrade Path)

عند رغبة العميل بالترقية من النسخة الأساسية (Lite) إلى النسخة الاحترافية (Pro)، تتم العملية بمرونة كاملة ودون فقدان لأي بيانات من خلال ثلاث خطوات برمجية:

1. **إدخال مفتاح الترقية (Activate Pro Key):** يشتري العميل مفتاح ترقية Pro من موقعك ويقوم بإدخاله في إعدادات النظام.
2. **الاتصال بخادم التراخيص:** يقوم نظام العميل بالاتصال بخادمك للتحقق من المفتاح وتثبيت توكن الترقية الرقمي (JWT Pro Token).
3. **تفعيل الشاشات تلقائياً:** بمجرد نجاح التحقق، يقوم كود النظام محلياً بإظهار أزرار وشاشات (المخزون، المشتريات، الصناديق، الأفرع) التي كانت مخفية بصرياً ومقيدة برمجياً، مع إطلاق جداول قاعدة البيانات الخاصة بـ Pro تلقائياً عبر نظام الـ Migrations المدمج.

---

## 🧠 5. سيناريوهات الحماية والتحايل التجاري (SaaS Monetization & Security Edge Cases)

تمثل هذه القسم البنية التحتية لسياسة تسييل النظام (Monetization Strategy) وضمان عدم التفاف العملاء على الباقات بطرق ملتوية. يوضح الجدول التالي السيناريوهات الدقيقة التي تم معالجتها برمجياً، مع سيناريوهات متوقعة وحلولها الهندسية المتبعة.

### 🏢 أ. السيناريوهات المنفذة برمجياً بالفعل (Implemented Scenarios)

#### 1. سيناريو الالتفاف بالاستعادة (Soft Delete / Restore Bypass)
* **الوصف:** يقوم العميل في باقة اللايت بإنشاء شركة/فرع، ثم يقوم بحذفه مؤقتاً (Soft Delete) لينخفض الاستهلاك الفعلي إلى 0، ثم يقوم بإنشاء شركة ثانية، ثم يذهب لسلة المحذوفات ويعمل استعادة (Restore) للشركة الأولى ليتحايل ويحصل على شركتين نشطتين في باقة اللايت.
* **الحل البرمجي المنفذ:** تم إدراج فحص الحماية المركزي `check_resource_limit` داخل دالة الاستعادة الفردية `restore($id)` ودالة العمليات الجماعية `bulkAction` للشركات والفروع. يتم احتساب الأثر مسبقاً، وإذا كانت استعادة السجل ستتخطى حد الباقة، يتم حظر العملية فوراً مع عرض رسالة تنبيه حمراء واضحة للمستخدم.

#### 2. سيناريو تراكم البيانات بعد الهبوط للباقة الأدنى (SaaS Downgrade / Legacy Data Overflow)
* **الوصف:** يشترك العميل في باقة البرو لشهور معدودة، ويقوم بإنشاء 10 شركات و 10 فروع ومستخدمين متعددين، ثم ينتظر انتهاء الباقة ليعود قسرياً إلى الباقة الأساسية (Lite)، مستفيداً من الـ 10 شركات المفتوحة مجاناً دون تجديد الترخيص.
* **الحل الهندسي المتكامل والمنفذ:** 

  1. **التهيئة والتحكم الكامل للعميل (User Active Choice UI):**
     * بدلاً من فرض النظام لخيارات عشوائية، تظهر للمستخدم في صفحة التراخيص (`public/settings/license`) بطاقة مخصصة في حال وجود فائض موارد عن حد الباقة الأساسية.
     * تتيح الواجهة لمالك النظام اختيار **شركة رئيسية واحدة فقط نشطة**، واختيار **فرع نشط واحد فقط** (يتم تصفيته ديناميكياً ليعرض فقط الفروع التابعة للشركة الرئيسية المختارة لمنع أي تعارض)، واختيار **3 مستخدمين نشطين** كحد أقصى (مع تفعيل حساب السوبر أدمن تلقائياً خارج هذه الحسبة لمنع قفل النظام).
     * **تجاوز كثافة البيانات (Large Datasets Handling) 🚀:** لتفادي القوائم المنسدلة الطويلة والمزدحمة في حال وجود مئات الكيانات، تم بناء قوائم بحث تفاعلية مخصصة (Custom Searchable Dropdowns) للشركات والفروع، وحاوية بحث ديناميكية للمستخدمين مزودة بفلترة فورية أثناء الكتابة وعداد تتبع حي (`Selection Counter`) يوضح نسبة المحددين (مثال: `2 / 3`).
     
  2. **كبح التلاعب بفترة تجميد صلبة (15-Day Cooldown Cooldown):**
     * لمنع العميل من التلاعب عن طريق "التناوب" على تفعيل الشركات كل ساعة لقضاء أعماله مجاناً، يتم قفل إمكانية تعديل هذه الخيارات وتجميدها تماماً بمجرد الحفظ لمدة **15 يوماً**.
     * يتم إظهار طابع الحفظ وتفعيل **عداد تنازلي ديناميكي (Countdown Timer)** يوضح بدقة الأيام والساعات المتبقية حتى يتاح له إعادة الضبط والتخصيص مرة أخرى.
     
  3. **الاحتياط التلقائي بقانون الأقدمية (FIFO Fallback):**
     * كإجراء وقائي لضمان استمرارية تشغيل النظام فور هبوط الباقة وتجنب توقفه بالكامل، يطبق النظام تلقائياً **قانون الأقدمية (FIFO Rule)** كخيار افتراضي مؤقت يعتمد على أقدم السجلات النشطة وغير المحذوفة في قاعدة البيانات.
     * بمجرد قيام العميل بحفظ تهيئته اليدوية المخصصة للمرة الأولى، يتم إيقاف قانون FIFO والانتقال فوراً لاعتماد خيارات العميل المخزنة.
     
  4. **دورة حياة دورية ومرنة (Downgrade Cooldown Reset):**
     * عند الانتقال مجدداً للباقة الاحترافية (Pro)، تفقد هذه الخيارات والقيود تأثيرها تماماً.
     * عند الهبوط مرة أخرى للباقة الأساسية (Lite)، يتم **إعادة تصفير عداد الـ 15 يوماً تلقائياً** لمنح العميل حق التغيير والتهيئة الفورية لمرة واحدة فور الهبوط كفترة انتقالية عادلة، ثم يبدأ عداد التجميد بالعمل بمجرد حفظ الاختيار الأول.
     
  5. **وضع التوافق الصامت بلا مضايقات (Compliant State):**
     * إذا هبط العميل للباقة الأساسية وكان استهلاكه الفعلي خلال فترة البرو متوافقاً أصلاً مع حدود اللايت (مثال: لديه شركة واحدة وفرع واحد و3 مستخدمين فقط)، فإن النظام **يعمل بسلاسة مطلقة ودون المطالبة بأي تهيئة أو قفل أي سجلات**.
     
  6. **التعليق التلقائي وأمن الخادم (Auto-Suspension & Controller Lock):**
     * بقية السجلات غير النشطة يتم قفلها وتعليقها لحظياً في الواجهات ببادج `🔒 معلق (انتهى الترخيص)` مع تجميد خيار التعديل والإجراءات.
     * يتم اعتراض أي محاولات التفاف عبر الروابط المباشرة في وحدات التحكم وتوجيهها لقائمة العرض مع تنبيه بالمنع لانتهاء ترخيص الـ Pro.

---

### 📌 تفاصيل وسيناريوهات تفاعلية هامة (Detailed Edge-Case Discussions & Solutions)

> [!NOTE]
> يوضح هذا القسم القرارات التصميمية والحلول الهندسية التي تم التوافق عليها لمعالجة كافة أشكال التلاعب والتحايل، وتوفير تجربة مستخدم عادلة ومرنة في الوقت ذاته.

#### 1. آلية عمل قانون الأقدمية (FIFO Rule) وتأثرها بالحذف (Soft Delete)
* **السؤال المطروح:** ماذا لو كانت الشركة أو الفرع الأقدم محذوفاً بالفعل من أيام باقة البرو، وعاد النظام للايت؟ هل سيتم تفعيل المحذوف أم كيف يتصرف الـ FIFO؟ وماذا يظهر في الاختيار اليدوي؟
* **الحل الهندسي المعتمد:**
  * **تصفية تامة للمحذوفات:** يتجاهل قانون الأقدمية (FIFO) تماماً أي سجلات محذوفة مؤقتاً (Soft-Deleted). عند البحث عن أقدم شركة أو فرع أو مستخدم، يقوم النظام بالبحث فقط في السجلات التي قيمتها `deleted_at IS NULL`.
  * **مثال عملي:** إذا كان لدى العميل شركة رقم 1 (تم إنشاؤها أولاً ثم حُذفت أثناء فترة البرو) وشركة رقم 2 (نشطة ومستمرة)، فعند الهبوط إلى لايت، سيعتبر نظام FIFO تلقائياً أن **شركة رقم 2** هي الخيار الأقدم والنشط، ولن ينظر إطلاقاً لشركة رقم 1 المحذوفة.
  * **واجهة الاختيار اليدوي:** القوائم المنسدلة للتخصيص اليدوي تعرض **فقط وفقط** الكيانات النشطة وغير المحذوفة. لا يمكن للمستخدم بأي حال من الأحوال اختيار سجل محذوف أو معلق بالحذف.

#### 2. مرونة الحفظ والتعديل وإعادة الهبوط المتكرر (Pro -> Lite -> Pro -> Lite)
* **السؤال المطروح:** ماذا يحدث لو قام العميل بالترقية إلى برو ثم هبط إلى لايت ثم ترقى مجدداً وهبط، كيف يتم التعامل مع مهلة الـ 15 يوماً للتجميد؟
* **الحل الهندسي المعتمد:**
  * **تجميد الـ 15 يوماً:** بمجرد قيام العميل بحفظ خياراته اليدوية الأولى في باقة اللايت، يُقفل الخيار تماماً لمدة 15 يوماً كاملة (مع عداد تنازلي بالأيام والساعات والدقائق) لمنع التناوب السريع لتشغيل الشركات مجاناً.
  * **تصفير التجميد عند الترقية:** عند قيام العميل بتفعيل ترخيص Pro مجدداً، يتم تصفير وحذف تاريخ الحفظ السابق (`active_lite_selection_updated_at = NULL`).
  * **فرصة فورية عند الهبوط الجديد:** عندما يهبط العميل مرة أخرى إلى لايت مستقبلاً، يجد النظام أن حقل تاريخ الحفظ فارغ (`NULL`)، مما يمنحه **فرصة فورية ومجانية** لإعادة ضبط خياراته وحفظها من جديد دون أي انتظار. وبمجرد الحفظ الأول الجديد، يبدأ عداد التجميد (15 يوماً) في العمل مرة أخرى.

#### 3. سيناريو تدمير أو حذف الاختيارات اليدوية أثناء فترة البرو (Selection Invalidation)
* **السؤال المطروح:** ماذا لو اختار العميل يدوياً شركة رقم 2 وفرع رقم 2، ثم ترقى إلى برو، وأثناء فترة البرو قام بحذف شركة رقم 2 أو فرع رقم 2، ثم هبط لاحقاً إلى لايت؟
* **الحل الهندسي المعتمد:**
  * **التحقق الديناميكي الفوري:** عند هبوط النظام إلى لايت، يتم فحص الاختيارات المخزنة في الإعدادات. إذا تبين أن الشركة أو الفرع المختارين سابقاً قد تم حذفهما مؤقتاً (Soft-deleted) أو نهائياً (Hard-deleted)، يعتبر النظام هذا الاختيار **ملغى وغير صالح (Invalidated)**.
  * **الرجوع التلقائي الصامت للـ FIFO:** في هذه الحالة، يتراجع النظام فوراً وبشكل صامت إلى تطبيق **قانون الأقدمية (FIFO Rule)** لتحديد الشركة والفرع النشطين المتاحين حالياً، مع إتاحة الخيار للمستخدم للدخول إلى لوحة التراخيص وإجراء تخصيص يدوي جديد (إذا لم تكن مهلة الـ 15 يوماً نشطة، أو بعد انتهائها).

#### 4. وضع التوافق الصامت بلا مضايقات (Compliant State)
* **السؤال المطروح:** ماذا لو هبط العميل للباقة الأساسية وكان استهلاكه الفعلي خلال فترة البرو متوافقاً أصلاً مع حدود اللايت (مثال: لديه شركة واحدة وفرع واحد و3 مستخدمين فقط)؟
* **الحل الهندسي المعتمد:**
  * **التشغيل الخفي:** إذا كان إجمالي الكيانات النشطة في قاعدة البيانات للعميل لا يتجاوز حدود باقة اللايت (<= 1 شركة، <= 1 فرع، <= 3 مستخدمين بالإضافة للسوبر أدمن)، يعطل النظام كافة أشكال القفل والحظر تلقائياً.
  * **واجهة مستخدم نظيفة:** لن يرى العميل أي كروت قفل أو بطاقات تحذيرية أو مطالبة بالاختيار اليدوي في لوحة التراخيص، بل سيعمل النظام وكأنه في وضع طبيعي تماماً لضمان تجربة مستخدم (Zero-Friction) راقية وممتازة للملتزمين بحدود الباقة.

---

### 🔮 ب. السيناريوهات المستقبلية والتدابير الاستباقية (Future Edge Cases & Proactive Solutions)

#### 3. سيناريو تشغيل العمليات على الكيانات المعلقة (Locked Resources in Operations)
* **الوصف:** العميل لديه فرع معلق بسبب انتهاء ترخيص البرو، ويحاول المحاسب تسجيل فواتير مبيعات، أو سندات قبض، أو حركات مالية تنتمي لهذا الفرع المعلق عبر واجهة الفواتير.
* **الحل الهندسي الاستباقي:** 
  * **تصفية القوائم (Dropdown Filtering):** عند استدعاء الفروع والشركات في قوائم الاختيار أثناء إنشاء الفواتير والسندات، يتم استبعاد أي كيان معلق (`is_resource_item_locked === true`) من الظهور تماماً.
  * **التحقق من صحة المدخلات في السيرفر:** عند معالجة طلب حفظ الفاتورة، يتم فحص معرفات الفروع والشركات المرسلة للتأكد من عدم تعلقها برمجياً؛ فإذا تبين أنها مقفلة، يُرفض الطلب فوراً لضمان إحداث شلل تشغيلي كامل للكيانات المعلقة حتى يتم تجديد الاشتراك.

#### 4. سيناريو دخول الموظفين الإضافيين بعد انتهاء باقة البرو (Staff Users Exceeded Limit)
* **الوصف:** قام العميل بتعيين 5 محاسبين نشطين في النظام أثناء اشتراكه في باقة البرو. بعد انتهاء الترخيص والعودة للايت (والتي تسمح بـ 3 مستخدمين فقط)، يحاول المحاسبين الإضافيين تسجيل الدخول واستخدام النظام بشكل طبيعي.
* **الحل الهندسي الاستباقي:** 
  * **حجب الدخول التلقائي (Login Restriction Filter):** في دالة تسجيل الدخول (Authentication Middleware)، يتم فحص معرف المستخدم المدخل (User ID). وبناءً على قانون الأقدمية، يُسمح فقط لأول 3 مستخدمين نشطين تم إنشاؤهم بالدخول.
  * **التوجيه ورسالة التنبيه:** إذا حاول المستخدم الرابع أو الخامس تسجيل الدخول، يُرفض طلبه فوراً ويتم إعادة توجيهه لشاشة تسجيل الدخول مع إشعار: *"تم تعليق هذا الحساب مؤقتاً لانتهاء ترخيص النسخة الاحترافية (Pro) وتخطي حد مستخدمي الباقة الأساسية. يرجى مراجعة مالك النظام لتجديد الترخيص!"*.

#### 5. سيناريو التلاعب المباشر بقاعدة البيانات المحلية (Database Tampering)
* **الوصف:** قيام عميل يمتلك خادم محلي (On-Premises) بالدخول إلى لوحة التحكم الخاصة بقاعدة البيانات (مثل phpMyAdmin) وتغيير قيمة `license_type` يدوياً إلى `pro` و `license_status` إلى `activated` لسرقة الميزات دون شراء مفتاح تفعيل.
* **الحل الهندسي الاستباقي:** 
  * **التوقيع الرقمي المشفر (JWT Cryptographic Handshake):** عند إدخال مفتاح الترقية، لا يكتفي النظام بتحديث حقل في قاعدة البيانات، بل يتصل بخادم التراخيص المركزي ويرجع بـ (توكن JWT مشفر وموقع رقمياً) يحتوي على تفاصيل الترخيص وتاريخ انتهائه، ويحفظ محلياً في ملف إعدادات مشفر ومحمي.
  * **تشفير الكود الحساس (Sourceguard/ionCube):** يتم تشفير مساعد الترخيص `license_helper.php` وملفات التحقق الحيوية تماماً، لمنع المطور أو العميل من تعديل الكود المصدري محلياً لتجاوز فحص JWT.

---

*تم إعداد هذا المستند لحفظ الحقوق البرمجية وتوفير خريطة طريق واضحة لبناء وتطوير أقسام النظام.*
