-- 2026_08_07_passenger_cancel_policy.sql -- -- ‏رسوم إلغاء الراكب بعد قبول السائق. -- -- ‏متماثلة مع تعويض عدم الحضور (ترحيل 2026_08_07_driver_cancel_compensation): -- ‏نفس المبدأ — من تسبب بضياع وقت الآخر يعوّضه، والمال يذهب **للسائق** لا -- ‏للشركة. الفرق أن الزمن المحتسب هنا يبدأ من لحظة القبول لا من لحظة الوصول، -- ‏لأن السائق يكون في طريقه لا واقفاً ينتظر. -- -- ‏ثلاثة إعفاءات مبنية عمداً، لأن رسماً بلا إعفاء يعاقب الراكب على أخطاء -- ‏ليست خطأه ويطرده من التطبيق: -- ١. لا سائق قُبِل بعد → مجاني دائماً -- ٢. خلال أول دقائق من القبول → مجاني (passengerCancelFreeMinutes) -- ٣. السائق تأخّر ولم يصل → مجاني (driverLateExemptMinutes) -- -- ⚠️ ‏يُنفَّذ على قاعدة primary (jorSiroDB) وحدها — kazan يُقرأ عبر $con. ALTER TABLE `kazan` ADD COLUMN `passengerCancelCap` VARCHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT 'سقف رسم إلغاء الراكب بعملة الدولة. 0 = الرسم معطّل بالكامل' AFTER `cancelMinWaitMinutes`, ADD COLUMN `passengerCancelFreeMinutes` TINYINT UNSIGNED NOT NULL DEFAULT 2 COMMENT 'دقائق الإلغاء المجاني بعد قبول السائق' AFTER `passengerCancelCap`, ADD COLUMN `driverLateExemptMinutes` TINYINT UNSIGNED NOT NULL DEFAULT 10 COMMENT 'إن مرّت هذه الدقائق على القبول ولم يصل السائق، الإلغاء مجاني'; -- ‏عدّاد عدم الحضور للراكب — سجل دائم للمراجعة الإدارية. -- ‏(الفحص السريع يتم من Redis، وهذا العمود للتقارير وقرارات الحظر اليدوية.) ALTER TABLE `passengers` ADD COLUMN `noShowCount` SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'مرات إلغاء الراكب بعد قبول السائق ودفعه رسماً'; -- ‏للتراجع: -- ALTER TABLE `kazan` DROP COLUMN `passengerCancelCap`, -- DROP COLUMN `passengerCancelFreeMinutes`, DROP COLUMN `driverLateExemptMinutes`; -- ALTER TABLE `passengers` DROP COLUMN `noShowCount`;