================================================================================
سجل الإصلاحات والتعديلات الكلية — مشروع AqariVerify
التاريخ: 2026-11-11
================================================================================

1. تعديل النصوص والهوية في البوابة وصفحات اللغة
--------------------------------------------------------------------------------
- home.php:
  * تعديل الشارة العلوية (kicker) إلى: "منصة المدقق الذكي لعقد الإيجار".
  * تعديل الوصف التمهيدي (sub) والوصف التعريفي (meta description) إلى:
    "منصة رقمية للتدقيق والتحقق المسبق لتأمين عقود الإيجار وتحقيق الأمن التعاقدي."
  * تحديث بطاقات المزايا والخطوات (السجل العقاري الخاص بالعقار والقائمة الرسمية
    للمستفيدين، كشف التناقضات وتسجيلها وتحويلها للجهة المختصة، نظام الصلاحيات
    الذي يضبطه مسير النظام).

- pages/login.php:
  * تعديل الفقرة التمهيدية (lede) إلى:
    "منصة رقمية للتدقيق والتحقق المسبق لدعم واتخاذ القرارات قبل إتمام أي معاملة إيجار."
  * تحديث النقاط الثلاث:
    1) تحقق مركزي بالاعتماد على رقم التعريف الوطني
    2) مقارنة بالسجل العقاري الخاص بالعقار والقائمة الرسمية للمستفيدين
    3) كشف التناقضات وتسجيلها وتحويلها للجهة المختصة
  * إزالة حسابي aadl_demo و opgi_demo من أزرار الدخول التجريبي.

- lang/ar.php, lang/fr.php, lang/en.php:
  * تغيير مسمى سجل العقود (nav_contracts و contracts_title) إلى "سجل العقود المبرمة"
    (وما يقابلها في الفرنسية والإنجليزية).
  * تعديل login_subtitle إلى "بوابة المدقق الذكي لعقد الإيجار" (وما يقابلها).
  * توضيح role_super_admin إلى "مسير النظام (المدير العام)".
  * إضافة مفاتيح واجهة منح الصلاحيات الفردية من طرف مسير النظام، ومفاتيح صفحة
    التشخيص (nav_diagnostics)، ومفتاح صفة المستأجر بعقد مسجل (rel_registered_tenant).

2. الصلاحيات، منع تكرار الأدوار والمهام، وتحويل AADL/OPGI إلى صيغ إدخال
--------------------------------------------------------------------------------
- includes/rbac.php:
  * الإبقاء على الأدوار السبعة الواضحة فقط:
    super_admin, land_registry, notary, commune, investigation, utility, citizen.
  * إزالة أدوار aadl و opgi المستقلة من مصفوفة الأدوار والصلاحيات.
  * تفعيل المحافظة العقارية (land_registry) وإسناد إدارة الصيغ السكنية والمشاريع
    والقوائم الرسمية (housing.*, named_list.*) لها مع إزالة تداخلها مع البلدية
    (family_book.create/add_member) ومع جهة التدقيق (reviews.manage).
  * إضافة permissionCatalog() و allPermissionKeys() و userPermissions() لدعم
    الصلاحيات المخصصة لكل حساب عبر عمود users.custom_permissions.

- pages/users.php:
  * تمكين مسير النظام (super_admin) من منح أو سحب الصلاحيات الفردية لكل حساب عبر
    مربعات اختيار مصنّفة مع زر استعادة افتراضي الدور.
  * إنشاء عمود users.custom_permissions تلقائياً في MySQL/SQLite إذا لم يكن موجوداً.

- includes/ProgramScope.php:
  * إلغاء حصر الحسابات حسب دور aadl/opgi (ProgramScope::current() يرجع null) مع
    الإبقاء على ProgramScope::propertyClause() كمساعد لتحقق صيغة البيانات.

- database/schema.sql, database/schema_sqlite.sql, upgrade.php:
  * إضافة عمود custom_permissions لجدول users.
  * إضافة خطوة في upgrade.php لتعطيل أي حسابات قديمة بأدوار aadl أو opgi.

- توحيد الصفحات المكررة في partials/sidebar.php والصفحات القديمة:
  * pages/contracts.php: حذف نموذج إضافة العقد المكرر الذي كان يتجاوز محرك التداخل
    والقواعد القانونية، وحصر إنشاء عقود الإيجار في pages/contract-create.php.
  * تحويل الصفحات المكررة القديمة إلى تحويلات آمنة نحو الصفحات الموحدة:
    - pages/reviews.php -> pages/investigation.php
    - pages/residence.php و pages/residence-issue.php -> pages/residence-documents.php
    - pages/aadl-lists.php و pages/opgi-units.php -> pages/housing-projects.php

- تحديث ملفات العرض التجريبي:
  * pages/demo-accounts.php, seed_demo.php, pages/demo-scenario.php (بما في ذلك جدول
    الحسابات وجدول الخطوات الـ21 المتسلسلة وقسم "جرّب بنفسك") لتعكس الأدوار الجديدة
    وكون AADL و OPGI صيغاً سكنية عند الإدخال فقط.

3. حذف المساءلة الجبائية من التحقق الذكي لعقد الإيجار
--------------------------------------------------------------------------------
- includes/engines/LeaseRules.php:
  * حذف الإشارة إلى التهرّب الجبائي والمساءلة الجبائية من نصي القاعدتين
    LEASE-FORM-005 و LEASE-RENT-006.
  * الإبقاء على القاعدة LEASE-TAX-001 وحقل c_property_tax الخاص بتحديد من يتحمل
    الرسوم والضرائب العقارية بين المؤجّر والمستأجر.

4. إصلاح التضاربات المنطقية والثغرات المكتشفة في الكود
--------------------------------------------------------------------------------
- includes/engines/VerificationEngine.php & includes/engines/ContradictionEngine.php:
  * معالجة التناقض عند حفظ العقار من property-edit.php (type_id = 1): أصبحت
    القائمة الرسمية للمستفيدين (named_list) تُفحص متى كان housing_program يساوي
    'aadl' أو 'opgi' حتى لو لم يكن requires_named_list = 1 في property_types، مع
    استبعاد السجلات المنسحبة (status = 'withdrawn').
  * إصلاح حالة إنشاء ملف المراجعة في VerificationEngine::persist() من 'open'
    (القديمة المخالفة لـ ENUM الترقية) إلى 'NEW' وتوجيه الإشعار إلى investigation
    عبر pages/investigation.php.

- includes/engines/TrustIndex.php & pages/dashboard.php:
  * تحديث استعلامات حالات المراجعة المفتوحة لتشمل القيم الحديثة
    ('NEW','UNDER_REVIEW','ADDITIONAL_INFO_REQUIRED') مع التوافق الخلفي.
  * إزالة كود ProgramScope الميت من dashboard.php وربط بطاقتي لوحة الموثّق بشرطي
    can('contract.create') و can('contract.verify_public').

- pages/property-view.php:
  * توحيد قراءة حالة العقد باستعمال strtolower() لعرض الشارة والترجمة بشكل صحيح
    مع القيم الكبيرة (ACTIVE, EXPIRED, DRAFT...).

- api/index.php:
  * إضافة apiRequirePerm() لفرض صلاحيات RBAC عند استدعاء الـ API عبر جلسة مستخدم
    مسجّل (verify.run, properties.view, persons.view, reviews.view).

- includes/RentalContractService.php:
  * منع إنشاء/فحص عقد إيجار بتواريخ غير صالحة (end_date < start_date -> INVALID_DATES).
  * منع تطابق الرقم الوطني للمؤجر والمستأجر (SAME_PARTIES).
  * التحقق من أن الرقم الوطني للمستأجر مكوّن من 18 رقماً عند الإنشاء (BAD_TENANT_NIN).

- includes/ResidenceCertificateService.php:
  * التعرف على المستأجر المرتبط بعقد إيجار نشط ومسجّل على العقار (property_contracts)
    عند تقييم شهادة/بطاقة الإقامة بدل فتح حالة عدم تطابق خاطئة بحقه (مع استخدام
    تاريخ مرتبط بالمعاملات للتوافق بين MySQL و SQLite).

- pages/property-edit.php:
  * ضمان التناسق المنطقي عند إدخال/تعديل العقار: ربط type_id بالصيغة المناسبة إن
    وُجدت، وضبط housing_program = 'none' على (NONE / PRIVATE)، ومنع بقاء عقار
    AADL/OPGI بوضعية ملكية PRIVATE (تحويلها تلقائياً إلى NOT_TRANSFERRED)، مع
    مزامنة الحقول في الواجهة عبر JavaScript.

5. إنشاء ملف التشخيص الشامل
--------------------------------------------------------------------------------
- pages/diagnostics.php (مربوط في partials/sidebar.php تحت قسم الإدارة):
  * محمي بصلاحية مسير النظام فقط (requirePermission('*')).
  * يفحص 5 محاور: البيئة والتخزين، قاعدة البيانات والأعمدة، الصلاحيات وتفادي التكرار،
    تناسق البيانات الفعلية (الحالات القديمة، تداخل العقود، تناقض الصيغة والملكية)،
    واختبار حي للمحركات (RentalContractEngine, LeaseRules, LeaseAnalyzer,
    InvestigationService).

6. نتائج التحقق النهائي بعد آخر تعديل
--------------------------------------------------------------------------------
- فحص الصيغة البرمجية (php -l): 93 ملف PHP — 0 أخطاء صياغية.
- فحص المنطق والسيناريو: نجاح 81/81 اختباراً بنجاح تام.
================================================================================
