-- 2026_08_07_driver_cancel_compensation.sql -- -- ‏تعويض السائق عند عدم حضور الراكب (إلغاء السائق بعد الوصول والانتظار). -- ‏النموذج: التعويض = مسافة الاقتراب إلى الراكب × سعر الكيلومتر لنوع السيارة -- ‏ + دقائق الانتظار الفعلية × سعر الدقيقة حسب وقت اليوم. -- ‏يُخصم من محفظة الراكب ويُضاف لمحفظة السائق. الأسعار من kazan نفسه الذي -- ‏تُسعَّر به الرحلة، عبر ride/pricing/pricing_helper.php. -- -- ‏يستبدل هذا الملف مقاربة "الرسم الثابت" السابقة: المبلغ لم يعد يُقرأ من -- ‏طلب العميل (كان filterRequest("penalty_fee") بلا سقف ولا تحقق)، ولم يعد -- ‏رقماً ثابتاً — صار محسوباً من بيانات مسجَّلة على الخادم. -- -- ⚠️ ‏هذا الملف لقاعدة ride (intaleq-ridesDB) حصراً. جدول kazan لا يُمسّ هنا: بنيته في قاعدة الرحلات أقدم ومختلفة الأعمدة، ولا يُقرأ في هذا المسار. -- ══════════════════════════════════════════════════════════════ -- ٢) بيانات الوصول والاقتراب (قاعدتا primary و ride) -- -- ‏هذان العمودان للتوثيق النهائي فقط ولا يُكتبان أثناء الرحلة: القيمتان -- ‏تعيشان في هاش Redis نفسه الذي يستخدمه السوكِت لحالة الرحلة -- ‏(ride:$id:state، الحقول pickup_approach_km و driver_arrived_at)، -- ‏وتُثبَّتان هنا كتابةً واحدة مدمجة في جملة تحديث الحالة عند الإلغاء. -- ‏أي: صفر كتابات إضافية على المسار الحار (القبول والوصول). -- ══════════════════════════════════════════════════════════════ ALTER TABLE `ride` ADD COLUMN `driverArrivedAt` DATETIME NULL DEFAULT NULL COMMENT 'لحظة تأكيد وصول السائق لنقطة الالتقاط — يختمها الخادم بعد تحقق الموقع', ADD COLUMN `pickupApproachKm` FLOAT NOT NULL DEFAULT 0 COMMENT 'المسافة من موقع السائق لحظة القبول إلى نقطة الالتقاط (كم)'; -- ══════════════════════════════════════════════════════════════ -- ٣) تطبيق الإيقاف على الخادم (قاعدتا primary و ride) -- ‏كان الإيقاف يُكتب في تخزين تطبيق السائق وحده، فيُفكّ بإعادة التثبيت. -- -- ‏مسار الفحص في acceptRide.php هو مفتاح Redis بـ TTL (driver:$id:blocked) -- ‏فينتهي الإيقاف تلقائياً بلا كرون تنظيف وبلا استعلام على كل قبول. -- ‏هذا العمود سجل دائم للمراجعة الإدارية، يُكتب في الإلغاء الثالث فقط. -- ══════════════════════════════════════════════════════════════ ALTER TABLE `driver` ADD COLUMN `blockedUntil` DATETIME NULL DEFAULT NULL COMMENT 'إيقاف استقبال الرحلات حتى هذا الوقت (إلغاءات متكررة). NULL = غير موقوف'; -- ‏للتراجع: -- ALTER TABLE `ride` DROP COLUMN `driverArrivedAt`, DROP COLUMN `pickupApproachKm`; -- ALTER TABLE `driver` DROP COLUMN `blockedUntil`;