SMART EV BOOKING V2
===================

الملفات:
1) webhook.php
   النسخة المطورة للحجز + الإلغاء + تغيير الموعد + قائمة الانتظار.

2) booking-lib.php
   مكتبة مشتركة يستخدمها cron.php. يجب أن تكون إعدادات المفاتيح فيها مطابقة لـ webhook.php.

3) cron.php
   يشغّل:
   - ملخص حجوزات الإدارة يوميًا بعد الساعة 4:00 مساءً.
   - تذكير العميل قبل الموعد بـ 60 دقيقة.
   - إرسال الإشعارات الموجودة في outbox إذا تم ضبط OUTBOUND_WEBHOOK_URL.

4) outbox.php
   لعرض الإشعارات المعلقة عند الحاجة. لا تستخدمه قبل وضع WEBHOOK_SECRET قوي.

مهم جدًا:
- WhatsAuto Server Reply الذي اختبرناه يستقبل الرسائل الواردة ويرد عليها.
- لا نفترض أنه يستطيع بدء رسالة WhatsApp من تلقاء نفسه.
- لذلك التنبيه اليومي والتذكيرات توضع أولًا في notification_outbox.
- للإرسال التلقائي فعليًا يجب ضبط:
  OUTBOUND_WEBHOOK_URL
  OUTBOUND_WEBHOOK_TOKEN
  على خدمة تستطيع إرسال WhatsApp outbound messages.
- إذا كان لديك API إرسال من WhatsAuto أو مزود WhatsApp آخر، نربطه بهذين الحقلين.

إعدادات يجب مراجعتها في webhook.php و booking-lib.php:
OPENAI_API_KEY
OPENAI_MODEL
GOOGLE_CALENDAR_ID
GOOGLE_SERVICE_ACCOUNT_FILE
ADMIN_PHONE
WEBHOOK_SECRET
REMINDER_MINUTES_BEFORE
DAILY_ADMIN_HOUR  (مضبوط حاليًا على 16 = الساعة 4 مساءً)

قائمة الانتظار:
- عندما لا توجد مواعيد يقول النظام للعميل:
  "إذا تريد، اكتب: أضفني لقائمة الانتظار."
- عند الإلغاء أو تغيير الموعد، يتم تجهيز إشعار لأول عميل مناسب في قائمة الانتظار.

Cron في cPanel:
شغّل cron.php كل 15 دقيقة، مثال:
*/15 * * * * /usr/local/bin/php /home/smartev/public_html/portal/cron.php >/dev/null 2>&1

قد يختلف مسار PHP أو مسار حساب cPanel لديك.

قبل الاستبدال:
- احتفظ بنسخة من webhook.php الحالي الذي يعمل.
- انسخ OPENAI_API_KEY الحقيقي إلى webhook.php و booking-lib.php.
- لا ترفع service-account.json داخل public_html.


SMART EV BOOKING V3 - ADMIN REMINDERS
=====================================

ملف جديد:
admin-reminders.php

وظيفته:
- عرض جميع الرسائل المعلقة في notification_outbox.
- زر "فتح واتساب والإرسال" يفتح محادثة واتساب مع النص جاهزًا.
- زر "تم الإرسال" يحول حالة الرسالة إلى sent.
- زر "تجاهل" يحولها إلى dismissed.
- يعرض حجوزات اليوم وقائمة الانتظار الحالية.

الحماية:
ضع قيمة طويلة وعشوائية في:
const ADMIN_PANEL_TOKEN = 'CHANGE_THIS_TO_A_LONG_RANDOM_SECRET';

ويجب وضع نفس القيمة في webhook.php و booking-lib.php.

أول فتح للوحة:
https://smartev.om/portal/admin-reminders.php?token=YOUR_SECRET

بعد نجاح الدخول، تحفظ الجلسة ولن تحتاج لإضافة token في كل مرة داخل نفس المتصفح.

تم تطويره ليعرض:
1) حجوزات اليوم
2) التنبيهات المعلقة
3) قائمة الانتظار

ملاحظة:
ملخص الساعة 4 مساءً وتذكيرات الموعد وقائمة الانتظار تُجهز تلقائيًا بواسطة cron.php.
الإرسال عبر واتساب يبقى بضغطة واحدة من لوحة الإدارة بسبب عدم توفر Outbound API.


تحديث صفحة الإدارة:
- admin-reminders.php يعرض الآن جميع الحجوزات المستقبلية خلال 180 يومًا.
- الحجوزات مرتبة حسب وقت البداية من Google Calendar.
- يعرض: التاريخ، الوقت، الاسم، السيارة، الخدمة، الهاتف، الحالة.


SMART EV BOOKING V4 - ADMIN MANAGEMENT
======================================

تمت إضافة:
- البحث باسم العميل أو رقم الهاتف أو السيارة.
- فلترة حسب التاريخ.
- فلترة حسب نوع الخدمة.
- تعديل موعد الحجز مباشرة من لوحة الإدارة.
- إلغاء الحجز مباشرة من لوحة الإدارة.
- منع تعديل الموعد إلى وقت متداخل.
- التحقق من ساعات العمل عند تعديل الحجز.
- عند الإلغاء أو تغيير الموعد يتم تجهيز إشعار لقائمة الانتظار إذا كان هناك عميل مناسب.
- حماية POST باستخدام CSRF token.

يكفي استبدال:
booking-lib.php
admin-reminders.php

مع إبقاء باقي الملفات الحالية إذا كانت تعمل.


SMART EV BOOKING V5 - OPERATIONS / SECURITY
===========================================

الميزات الجديدة:
1) سجل تدقيق Audit Log
- يسجل إنشاء الحجز.
- إلغاء الحجز.
- تغيير الموعد.
- إنشاء النسخ الاحتياطية.
- حذف النسخ القديمة.
- أخطاء النسخ الاحتياطي.

ملف السجل:
audit-log.jsonl

2) النسخ الاحتياطي التلقائي
- المسار الافتراضي:
  /home/smartev/private/smartev-booking-backups
- مدة الاحتفاظ: 30 يومًا.
- يوجد زر "إنشاء نسخة احتياطية الآن" في لوحة الإدارة.

3) تقارير أسبوعية
لوحة الإدارة تعرض:
- إجمالي الحجوزات آخر 7 أيام.
- المؤكدة.
- الملغاة.
- الخدمات الأكثر طلبًا.

4) الأمان
- قاعدة البيانات تبقى كما هي.
- النسخ الاحتياطية خارج public_html.
- ملفات النسخ بصلاحية 0640.
- لوحة الإدارة ما زالت محمية بالجلسة وADMIN_PANEL_TOKEN وCSRF.

للترقية من V4 إلى V5:
استبدل:
booking-lib.php
admin-reminders.php
cron.php

webhook.php الحالي يمكن إبقاؤه إذا كان يعمل؛ لكن ليتضمن Audit عند إنشاء الحجز عبر WhatsApp، استخدم webhook.php الموجود في هذه الحزمة أيضًا.


SMART EV BOOKING V6 - AI KNOWLEDGE SYSTEM
=========================================

الميزات الجديدة:
1) assistant-system.txt
- يحتوي شخصية المساعد وقواعده الأساسية.
- لا تعدّل الكود لتغيير أسلوب المساعد؛ عدّل هذا الملف.

2) مجلد knowledge/
- workshop.txt
- services.txt
- prices.txt
- booking-policy.txt
- byd.txt
- charging.txt
- faq.txt

3) RAG بسيط محلي
- النظام يبحث في ملفات المعرفة حسب كلمات سؤال العميل.
- يرسل فقط الأجزاء الأكثر صلة إلى OpenAI.
- يقلل التكلفة ويحسن دقة الالتزام بالمعلومات.

4) الأسئلة العامة
- إذا لم تكن الرسالة أمر حجز/إلغاء/تعديل، يجيب OpenAI باستخدام قاعدة المعرفة.
- إذا لم يجد المعلومة، يجب ألا يخمن.

5) admin-knowledge.php
- لوحة لتعديل ملفات المعرفة من المتصفح.
- تستخدم نفس جلسة الإدارة وADMIN_PANEL_TOKEN.

6) لوحة الحجوزات
- أضيف رابط مباشر إلى إدارة قاعدة المعرفة.

للتحديث من V5 إلى V6:
استبدل:
webhook.php
booking-lib.php
admin-reminders.php

وأضف:
assistant-system.txt
admin-knowledge.php
مجلد knowledge بالكامل

لا تستبدل:
service-account.json

مهم:
- تأكد أن OPENAI_API_KEY وADMIN_PANEL_TOKEN في الملفات الجديدة مطابقان للقيم الحالية لديك.


SMART EV BOOKING V6.1 - SECURE KNOWLEDGE PAGE
=============================================

تمت إضافة حماية ثانية خاصة بصفحة:
admin-knowledge.php

الحماية الآن بطبقتين:
1) ADMIN_PANEL_TOKEN / جلسة الإدارة الحالية.
2) كلمة مرور منفصلة لقاعدة المعرفة.

أول مرة:
- افتح admin-knowledge.php من جلسة الإدارة.
- ستظهر شاشة "إعداد كلمة مرور".
- اختر كلمة مرور 10 أحرف على الأقل.
- يحفظ النظام Password Hash فقط في:
  /home/smartev/private/admin-knowledge-password.hash
- لا يتم حفظ كلمة المرور الصريحة.

بعد ذلك:
- كلما كانت جلسة كلمة المرور غير مفتوحة ستظهر شاشة تسجيل الدخول.
- زر "قفل الصفحة" ينهي جلسة قاعدة المعرفة.

لتغيير كلمة المرور لاحقًا:
- احذف الملف:
  /home/smartev/private/admin-knowledge-password.hash
- ثم افتح admin-knowledge.php من جديد وسيظهر إعداد كلمة مرور جديدة.


SMART EV BOOKING V7 - DASHBOARD
===============================
أضيفت لوحة إحصائيات ورسوم بيانية:
- حجوزات اليوم
- حجوزات الشهر
- حجوزات 7 أيام قادمة
- نسبة الإشغال
- قائمة الانتظار
- التنبيهات المعلقة
- خط زمني للحجوزات 14 يومًا
- توزيع الخدمات
- الحجوزات حسب ساعة البداية

الرسوم تستخدم Chart.js عبر cdn.jsdelivr.net.
يكفي استبدال admin-reminders.php للترقية إذا كانت بقية ملفات V6.1 تعمل.


SMART EV BOOKING V7.1 - LAST 7 DAYS STATS
=========================================
تمت إضافة قسم "إحصائيات آخر 7 أيام" ويعرض:
- إجمالي الحجوزات
- الحجوزات المؤكدة
- الحجوزات الملغاة
- نسبة الإلغاء
- متوسط الحجوزات يوميًا
- أكثر خدمة طلبًا
- أكثر يوم ازدحامًا
- عدد الخدمات المختلفة

كما تمت إضافة رسم أعمدة للحجوزات خلال آخر 7 أيام.


SMART EV BOOKING V7.2 - ATTENDANCE / NO-SHOW
============================================
تمت إضافة تسجيل الحضور الفعلي لكل حجز.

في صفحة الإدارة:
- زر "حضر"
- زر "لم يحضر"
- عمود حالة الحضور

إحصائيات:
- عدد المتغيبين آخر 7 أيام
- نسبة التغيب آخر 7 أيام
- عدد الحاضرين آخر 7 أيام
- نسبة الحضور آخر 7 أيام
- عدد الحجوزات غير المحددة
- عدد ونسبة المتغيبين هذا الشهر

طريقة حساب نسبة التغيب:
no_show / (attended + no_show) * 100

الحجوزات غير المحددة لا تدخل في النسبة.
ولا تُحسب الحجوزات المستقبلية؛ فقط المواعيد التي انتهت فعليًا.

مهم:
النظام لا يستطيع معرفة الحضور الفعلي من تلقاء نفسه لأن Google Calendar وWhatsAuto لا يملكان حساس حضور داخل الورشة.
لذلك يجب على موظف الورشة تحديد "حضر" أو "لم يحضر" من لوحة الإدارة.


SMART EV BOOKING V7.3 - WHATSAPP ATTENDANCE
===========================================

تسجيل الحضور عبر واتساب:
يعمل فقط من ADMIN_PHONE.

أمثلة:
حضر أحمد
حضر أحمد 19:00
حضر 96899329990

السلوك:
- يبحث النظام في حجوزات اليوم فقط.
- إذا وجد حجزًا واحدًا مطابقًا يسجله "حضر".
- إذا وجد أكثر من حجز مطابق يطلب الاسم مع الساعة.
- إذا لم يجد حجزًا يعرض تعليمات مختصرة.

تسجيل الغياب:
- الإدارة تحتاج فقط إلى إرسال العملاء الذين حضروا.
- cron.php بعد الساعة 22:15 بتوقيت عمان يضع أي حجز منتهي في نفس اليوم ولم يتم تحديد حضوره كـ "لم يحضر".
- الحجوزات الملغاة لا تدخل في ذلك.

مهم:
ADMIN_PHONE يجب أن يكون رقم الإدارة الصحيح:
96899329990
إذا كان مختلفًا، عدله في webhook.php و booking-lib.php.

للترقية:
استبدل:
webhook.php
booking-lib.php
cron.php

وباقي الملفات يمكن إبقاؤها كما هي إذا كانت تعمل.


SMART EV BOOKING V7.4 - SECURE ADMIN REMINDERS
==============================================

تمت إضافة حماية ثانية خاصة بصفحة:
admin-reminders.php

الحماية الآن بطبقتين:
1) ADMIN_PANEL_TOKEN / جلسة الإدارة الحالية.
2) كلمة مرور منفصلة للوحة admin-reminders.php.

أول مرة:
- افتح admin-reminders.php من جلسة الإدارة المصرح بها.
- ستظهر شاشة إعداد كلمة مرور.
- اختر كلمة مرور 10 أحرف على الأقل.
- يحفظ النظام Password Hash فقط في:
  MySQL table admin_security (password_hash)

بعد ذلك:
- كلما لم تكن جلسة لوحة الإدارة مفتوحة ستظهر شاشة تسجيل دخول.
- زر "قفل لوحة الإدارة" ينهي جلسة كلمة المرور لهذه الصفحة.

لتغيير كلمة المرور لاحقًا:
- احذف الملف:
  MySQL table admin_security (password_hash)
- ثم افتح admin-reminders.php من جديد وسيظهر إعداد كلمة مرور جديدة.

للترقية من V7.3:
يكفي استبدال:
admin-reminders.php


SMART EV BOOKING V7.5 - TOP WHATSAPP CONTACTS
=============================================
تمت إضافة إحصائيات التواصل عبر واتساب.

يتم تسجيل:
- رقم الهاتف
- اسم المرسل كما يصل من WhatsAuto
- إجمالي عدد الرسائل
- عدد المحادثات
- أول تواصل
- آخر تواصل

تعريف المحادثة:
إذا مضى أكثر من 30 دقيقة بين رسالتين من نفس الرقم، تبدأ محادثة جديدة.

صفحة الإدارة تعرض:
- إجمالي أرقام العملاء
- إجمالي الرسائل الواردة
- إجمالي المحادثات
- جدول أكثر 10 زبائن تواصلًا
- رسم أفقي لأكثر 10 زبائن حسب عدد الرسائل

ملاحظة مهمة:
الإحصائيات تبدأ من وقت تركيب هذه النسخة.
الرسائل التاريخية السابقة لا يمكن استعادتها تلقائيًا من WhatsAuto إلا إذا كانت لديك سجلات قديمة يمكن استيرادها.

للترقية:
استبدل:
webhook.php
booking-lib.php
admin-reminders.php


SMART EV BOOKING V8 - MINI CRM
==============================
تمت إضافة CRM مصغر داخل النظام.

ملف جديد:
admin-crm.php

كل رقم واتساب يصبح له ملف عميل يشمل:
- اسم المرسل
- الاسم المفضل
- السيارة
- Tags داخلية
- حالة العميل
- ملاحظات داخلية
- إجمالي الرسائل
- إجمالي المحادثات
- الحجوزات السابقة والمستقبلية
- عدد الحضور
- عدد التغيب
- عدد الإلغاءات
- آخر تواصل
- سجل Timeline كامل

التصنيف التلقائي:
- عميل محتمل
- عميل جديد
- عميل متكرر
- كثير التواصل
- كثير التغيب
- كثير الإلغاء
- VIP

يتم تحديث الـCRM تلقائيًا من:
- رسائل WhatsApp
- إنشاء الحجز
- الإلغاء
- تغيير الموعد
- الحضور / التغيب

الحماية:
admin-crm.php لا يفتح إلا إذا كانت جلسة admin-reminders.php مفتوحة ومصرح بها.

للترقية:
استبدل:
webhook.php
booking-lib.php
admin-reminders.php

وأضف:
admin-crm.php


SMART EV BOOKING V8.1 - GOOGLE REVIEW WHATSAPP
==============================================
تمت إضافة زر إرسال طلب تقييم عبر واتساب.

داخل admin-reminders.php:
- حقل لإدخال رقم العميل.
- زر يفتح واتساب برسالة جاهزة.
- الرسالة تحتوي رابط تقييم Smart EV في خرائط Google.

داخل admin-crm.php:
- عند فتح ملف أي عميل يظهر زر:
  "إرسال طلب تقييم عبر واتساب"
- يستخدم رقم العميل مباشرة بدون إدخاله يدويًا.

رابط التقييم المستخدم:
https://search.google.com/local/writereview?placeid=ChIJn8VSBWThjT4RaQ5cb7J7q6w&source=g.page.m.nd._&laa=nmx-reviews-dialog

للترقية من V8:
يكفي استبدال:
admin-reminders.php
admin-crm.php


SMART EV BOOKING V9 - GROWTH CRM
================================
تمت إضافة جميع وظائف النمو والتسويق المقترحة:

1) Conversion Funnel
واتساب → طلب حجز → حجز مؤكد → حضور → طلب تقييم → تقييم مكتمل.

2) Customer Follow-up
- متابعة تلقائية للعميل الذي تواصل ولم يحجز خلال 24 ساعة.
- متابعة مبيعات / فنية / بعد الخدمة / إعادة تنشيط.
- قائمة متابعات مفتوحة في لوحة الإدارة.

3) Customer Satisfaction
- تقييم داخلي 1 إلى 5.
- ملاحظات رضا.
- متوسط رضا عام وحسب الخدمة.

4) Customer Retention
- نشط خلال 30 يوم.
- غير نشط 30-60.
- غير نشط 60-90.
- غير نشط +90 يوم.

5) Lead Source
Google / Instagram / TikTok / WhatsApp Group / Friend Referral / Walk-in / Other.

6) Multi-Vehicle CRM
يمكن ربط عدة مركبات بكل عميل مع السنة واللوحة والملاحظات.

7) Blacklist
حظر داخلي مع سبب.
الرقم المحظور لا يستطيع إكمال الطلب عبر المساعد الآلي.

8) Revenue
جداول جاهزة للإيراد المتوقع والمدفوع، ويمكن ربط الأسعار لاحقًا.

9) Weekly Admin Report
يجهز النظام تقرير نمو أسبوعي يوم الأحد بعد 4 مساءً في notification_outbox.

10) CSV Export
export-crm.csv.php

11) Follow-up after no booking
بعد 24 ساعة من أول تواصل بدون طلب حجز، ينشئ النظام مهمة متابعة.

للترقية من V8.1:
استبدل:
webhook.php
booking-lib.php
admin-reminders.php
admin-crm.php
cron.php

وأضف:
export-crm.csv.php


SMART EV BOOKING V9.1 - UNIFIED ADMIN ROOM
==========================================
تم دمج إدارة قاعدة المعرفة داخل admin-reminders.php.

أصبحت غرفة الإدارة الواحدة تشمل:
- لوحة المعلومات والإحصائيات
- الحجوزات
- CRM والمتابعة
- قاعدة معرفة المساعد
- التنبيهات
- الرسوم البيانية
- الحضور والتغيب
- تقييمات العملاء
- التصدير

لم يعد من الضروري الدخول إلى admin-knowledge.php بشكل منفصل.
الملف admin-knowledge.php ما زال موجودًا للتوافق، ويمكن حذفه لاحقًا إذا رغبت.

للترقية من V9:
يكفي استبدال:
admin-reminders.php

ويُفضّل أيضًا استبدال:
admin-crm.php
لتحسين رابط الرجوع إلى غرفة الإدارة.


SMART EV BOOKING V9.2 - SINGLE ADMIN ROOM
=========================================
تم حذف الصفحة المستقلة:
admin-knowledge.php

إدارة قاعدة المعرفة أصبحت موجودة بالكامل داخل:
admin-reminders.php

أصبحت غرفة الإدارة هي نقطة الدخول الوحيدة للإدارة اليومية، وتشمل:
- لوحة المعلومات
- الحجوزات
- CRM والمتابعة
- قاعدة المعرفة
- التنبيهات
- الرسوم البيانية
- الحضور والتغيب
- رضا العملاء
- التصدير

ملاحظة:
لا ترفع admin-knowledge.php مرة أخرى بعد الترقية.


SMART EV BOOKING V9.3 - PASSWORD ONLY ADMIN
===========================================
تم إلغاء طبقة:
ADMIN_PANEL_TOKEN / smartev_admin_ok

صفحة admin-reminders.php أصبحت محمية بكلمة مرور واحدة فقط.

الحماية الحالية:
- كلمة مرور لوحة الإدارة.
- Password Hash محفوظ خارج public_html في:
  MySQL table admin_security (password_hash)
- جلسة الدخول:
  smartev_reminders_ok

كما تم تحديث:
- admin-crm.php
- export-crm.csv.php
ليعتمدا على جلسة كلمة مرور لوحة الإدارة فقط.

مهم:
لم نعد بحاجة لاستخدام ?token=... في رابط لوحة الإدارة.
افتح مباشرة:
https://smartev.om/portal/admin-reminders.php


SMART EV BOOKING V9.4 - SESSION TIMEOUT
=======================================
تمت إضافة انتهاء تلقائي للجلسة عند عدم الاستخدام.

الإعداد الحالي:
30 دقيقة

لتغييره إلى 15 دقيقة:
غيّر في:
admin-reminders.php
admin-crm.php
export-crm.csv.php

من:
const ADMIN_SESSION_TIMEOUT_MINUTES = 30;

إلى:
const ADMIN_SESSION_TIMEOUT_MINUTES = 15;

السلوك:
- عند أي استخدام للوحة يتم تحديث وقت النشاط.
- إذا مر أكثر من المدة المحددة بدون استخدام، يتم إنهاء جلسة الإدارة.
- عند العودة إلى admin-reminders.php تظهر رسالة:
  "انتهت الجلسة تلقائيًا بسبب عدم الاستخدام."
- يلزم إدخال كلمة المرور مرة أخرى.


SMART EV BOOKING V10 - WORKSHOP MANAGEMENT
==========================================

تمت إضافة:
1) إدارة الأسعار
- سعر أساسي لكل خدمة.
- سعر عرض.
- تاريخ بداية ونهاية العرض.
- ربط السعر تلقائيًا بالحجز كإيراد متوقع.

2) الإيرادات
- Expected / Paid infrastructure.
- لوحة تعرض الإيراد المتوقع والمدفوع.

3) السجل الفني لكل سيارة
- الخدمة
- التاريخ
- العداد
- نسخة النظام
- تفاصيل فنية
- ربط بمركبة العميل.

4) العروض الذكية
- عنوان ورسالة
- خدمة مستهدفة
- كلمة في موديل السيارة
- سعر
- تاريخ بداية ونهاية.

5) فلاتر CRM متقدمة
- حالة العميل
- السيارة
- Tags
- حد أدنى للتغيب
- عدم النشاط بالأيام.

6) صلاحيات الموظفين
- owner
- manager
- reception
- technician
- viewer
- جداول المستخدمين وأدوارهم جاهزة.
ملاحظة: تبقى كلمة مرور الإدارة الحالية هي بوابة الدخول الأساسية.
الحسابات الجديدة جاهزة للربط ببوابة دخول متعددة المستخدمين دون فقد البيانات.

7) System Health
- OpenAI key
- Service Account
- MySQL
- Knowledge folder
- Backups
- Cron
- Google Calendar
- Disk space

8) Cron health mark
- cron.php يسجل آخر تشغيل في system_marks.

للترقية من V9.4:
استبدل:
webhook.php
booking-lib.php
cron.php
admin-reminders.php
admin-crm.php

واترك بقية الملفات كما هي.


SMART EV BOOKING V10.1 CLEAN
============================
الأرقام المعتمدة:
- رقم واتساب الورشة لاستقبال العملاء: 96876961234
- رقم مدير النظام: 96899329990


SMART EV BOOKING V11 - INVOICE & CUSTOMER STATEMENT
====================================================
تمت إضافة نظام الفواتير الكامل.

الملفات الجديدة:
- admin-invoices.php
- invoice-download.php
- composer.json
- INSTALL_INVOICE_PDF.txt

المزايا:
- رقم فاتورة تلقائي SEV-YYYY-XXXXXX
- تفاصيل الخدمة
- السيارة
- تاريخ ووقت الزيارة
- الخصم
- الضريبة
- الإجمالي
- المبلغ المدفوع
- طريقة الدفع
- Paid / Partial / Unpaid
- PDF فاتورة مفردة
- PDF كشف جميع فواتير العميل
- روابط PDF آمنة مؤقتة لمدة 30 دقيقة
- زر إرسال الفاتورة عبر WhatsApp
- ربط الفواتير بالـCRM
- طلب "فواتيري" عبر WhatsApp يعيد رابط كشف فواتير آمن
- إحصائيات المفوتر والمدفوع والمتبقي

مهم:
نفّذ composer install لتثبيت mPDF كما هو موضح في INSTALL_INVOICE_PDF.txt.


SMART EV BOOKING V12 - ONLINE STORE
===================================
تمت إضافة متجر إلكتروني كامل.

الملفات الجديدة:
- store.php
- store-checkout.php
- admin-store.php

المزايا:
- منتجات + خدمات
- أقسام
- أسعار وعروض
- صور
- SKU
- مخزون
- خدمات تحتاج موعد
- منتجات/خدمات مميزة
- بحث وفلترة
- سلة مشتريات Local Storage
- تعديل الكمية
- حساب الإجمالي
- اسم ورقم العميل وملاحظاته
- إرسال جميع تفاصيل السلة إلى واتساب الورشة:
  96876961234
- حفظ نسخة من الطلب في قاعدة البيانات قبل فتح واتساب
- ربط طلب المتجر بالـCRM إذا أدخل العميل رقم هاتفه
- صفحة إدارة للمنتجات والخدمات
- سجل آخر طلبات المتجر

رابط المتجر:
https://smartev.om/portal/store.php

رابط إدارة المتجر:
https://smartev.om/portal/admin-store.php

مهم:
الشراء لا يتم دفعه إلكترونيًا داخل الموقع.
الطلب ينتقل إلى WhatsApp لإكمال الاتفاق والدفع والتوصيل/الحجز.


SMART EV PORTAL - FOLDER MIGRATION
==================================
تم اعتماد اسم المجلد:
portal

المسار الجديد:
  /home/smartev/public_html/portal/

الرابط الأساسي:
  https://smartev.om/portal/

تم تحديث جميع الروابط والمسارات الثابتة من الاسم القديم إلى portal.

بعد الرفع:
1) ارفع الحزمة إلى public_html.
2) فك الضغط داخل مجلد portal.
3) حدّث WhatsAuto Server URL إلى:
   https://smartev.om/portal/webhook.php
4) حدّث Cron Job إلى:
   /usr/local/bin/php /home/smartev/public_html/portal/cron.php >/dev/null 2>&1
5) إذا كان لديك Composer لـ PDF:
   cd /home/smartev/public_html/portal
   composer install --no-dev --optimize-autoloader


SMART EV PORTAL V13 - MYSQL
===========================
يستخدم النظام MySQL كقاعدة البيانات الرئيسية منذ البداية.
Google Calendar مخصص لإدارة المواعيد فقط.
webhook.php أصبح يستخدم booking-lib.php كمصدر واحد للمنطق والإعدادات،
لمنع تكرار إعدادات قاعدة البيانات في أكثر من ملف.

ملفات V13 الأساسية:
- app-config.example.php
- mysql-check.php
- MYSQL_CLEAN_START_SETUP.txt


V13 CLEAN START
===============
هذه الحزمة مخصصة للتثبيت الجديد فقط.
لا تحتوي على قاعدة بيانات قديمة ولا أداة ترحيل.
سيبدأ Smart EV Portal بقاعدة MySQL فارغة ونظيفة.


SMART EV PORTAL V14 - DATABASE KNOWLEDGE BASE
=============================================
تم نقل قاعدة المعرفة بالكامل إلى MySQL.

الجداول الجديدة:
- knowledge_category
- knowledge_article
- knowledge_revision

المزايا:
- تصنيفات معرفة
- إضافة / تعديل / حذف
- بحث
- كلمات مفتاحية
- أولوية
- تفعيل وتعطيل المقال
- سجل نسخ سابقة لكل تعديل
- المساعد يبحث في MySQL مباشرة
- الأسعار تؤخذ من service_price
- العروض تؤخذ من smart_offer
- المنتجات والخدمات ذات الصلة تؤخذ من store_item
- assistant-system.txt يبقى منفصلًا لقواعد وسلوك المساعد

تم حذف مجلد knowledge/ نهائيًا.

إدارة قاعدة المعرفة:
https://smartev.om/portal/admin-knowledge.php


V14.1 WHATSAPP LINK FIX
=======================
تم تحسين تنسيق أرقام واتساب:
- 76961234 -> 96876961234
- +96876961234 -> 96876961234
- 0096876961234 -> 96876961234

تم تطبيق ذلك على روابط الفواتير وCRM والإشعارات.
صفحة اختبار:
https://smartev.om/portal/whatsapp-test.php


SMART EV PORTAL V15 - ADVANCED ONLINE STORE
===========================================
تمت إضافة جميع تحسينات المتجر المطلوبة:

1) رفع صور المنتجات من لوحة الإدارة
   - JPG / PNG / WEBP
   - حد أقصى 5MB
   - تحفظ في store-media/
   - تم منع تنفيذ ملفات PHP داخل مجلد الصور.

2) صفحة تفاصيل مستقلة لكل منتج أو خدمة:
   store-item.php?slug=...

3) المخزون:
   - متوفر / غير متوفر
   - كمية مخزون اختيارية
   - يمنع إضافة العنصر غير المتوفر إلى الطلب.

4) عروض بتاريخ بداية ونهاية:
   - offer_price
   - offer_start
   - offer_end
   - يعود السعر تلقائيًا للسعر الأساسي بعد انتهاء العرض.

5) اطلب الآن:
   - طلب منتج أو خدمة واحدة بسرعة.

6) الخدمات التي تحتاج موعد:
   - بعد إرسال طلب المتجر يظهر زر حجز موعد عبر WhatsApp
   - يحمل رقم طلب المتجر في رسالة الحجز.

7) تحويل طلب المتجر إلى فاتورة:
   - زر "تحويل إلى فاتورة" في admin-store.php
   - ينشئ فاتورة غير مدفوعة بجميع بنود السلة.
   - يمنع تكرار الفاتورة لنفس الطلب.

8) V15 يحدّث جداول MySQL الحالية تلقائيًا عند أول اتصال:
   - store_item.offer_start
   - store_item.offer_end
   - store_item.stock_status
   - store_checkout.invoice_id
   - store_checkout.updated_at

لا تحتاج إلى حذف قاعدة البيانات أو إعادة إنشائها.


SMART EV PORTAL V15.1 - CENTRAL CONFIG
======================================
تم توحيد إعدادات الخادم والمفاتيح في:

/home/smartev/private/app-config.php

يشمل:
- OpenAI API Key + model
- MySQL connection
- Google Calendar ID
- Google Service Account path
- Workshop WhatsApp
- Admin phone
- Timezone
- Portal base URL
- Admin session timeout/password-hash path
- Google Review URL
- Backup location/retention
- Reminder timing
- Optional outbound webhook
- Optional inbound webhook secret
- Debug log path

لم يعد database.php مطلوبًا.

الملف app-config.example.php هو قالب فقط ولا يحتوي المفتاح الحقيقي.


SMART EV PORTAL V15.2 - ADMIN PASSWORD IN MYSQL
================================================
تم نقل كلمة مرور الإدارة إلى MySQL.

التخزين:
- Table: admin_security
- Key: main_admin_password_hash
- Value: password_hash() output

لا يتم تخزين كلمة المرور كنص صريح.
يستخدم النظام:
- password_hash(..., PASSWORD_DEFAULT)
- password_verify(...)

لم يعد الملف التالي مستخدمًا:
admin-reminders-password.hash

عند أول تشغيل بدون كلمة مرور:
ستسمح صفحة الإدارة بإنشاء كلمة مرور جديدة،
وسيتم حفظ الـHash مباشرة في MySQL.


SMART EV PORTAL V15.3 - SINGLE INFORMATION CENTER
==================================================
تم اعتماد مركز المعلومات في MySQL كمصدر وحيد للمساعد الذكي.

المصدر الوحيد:
- knowledge_category
- knowledge_article
- knowledge_revision

تم حذف:
- assistant-system.txt
- أي مجلد knowledge/
- أي قراءة لملفات TXT كمصدر معرفة
- استخدام service_price / smart_offer / store_item كمصدر مباشر لـ OpenAI

مهم:
الأسعار والعروض والمنتجات لا يعرفها المساعد إلا إذا تمت إضافتها إلى مركز المعلومات.
أما صفحات الإدارة والمتجر نفسها فتستمر باستخدام جداولها التشغيلية بصورة مستقلة.

نوعا المحتوى في مركز المعلومات:
1) instruction
   تعليمات إلزامية تحدد شخصية وسلوك وقواعد المساعد.
2) knowledge
   معلومات فعلية يجيب بها المساعد للعملاء.

الرابط:
https://smartev.om/portal/admin-knowledge.php


SMART EV PORTAL V15.4 - STRICT SINGLE SOURCE OF TRUTH
=====================================================
تم جعل مركز المعلومات في MySQL المصدر الوحيد للمعلومات التي يستخدمها المساعد ومسار WhatsApp.

webhook.php:
- لا يحتوي خدمات.
- لا يحتوي سياسات حجز.
- لا يحتوي ساعات أو أيام عمل.
- لا يحتوي نصوص تجارية للعملاء.
- دوره تقني فقط: استقبال الطلب وتمريره إلى منطق النظام.

تم نقل:
- أسماء الخدمات ومددها -> information_service
- أيام وساعات الحجز -> information_setting
- الفاصل بين المواعيد -> information_setting
- وقت no-show التلقائي -> information_setting
- رسائل الحجز والإلغاء والتوفر والفواتير -> information_message
- تعليمات المساعد -> knowledge_article (instruction)
- معلومات الرد -> knowledge_article (knowledge)

لا توجد قيم أعمال افتراضية داخل PHP.
يجب إدخالها من مركز المعلومات.
