-- 2026_08_07_leak_detection.sql -- -- ‏كشف التسرب خارج المنصة — سجل خادمي مستقل عن بلاغ التطبيق. -- -- ‏الموجود اليوم: جدول driver_ride_scam يملؤه **تطبيق السائق عن نفسه** -- ‏(map_driver_controller.dart:823). نسخة معدّلة من التطبيق ببساطة لا -- ‏ترسل البلاغ، فالكشف يعتمد على تعاون من نريد كشفه. ويبقى مفيداً كإشارة -- ‏إضافية، لذلك لا نلمسه. -- -- ‏الجديد: الخادم يستنتج النمط بنفسه من بيانات لا يملك السائق تزويرها — -- ‏قَبِل، ثم أُلغيت، ولم تبدأ الرحلة قط. وتكرار نفس زوج (سائق، راكب) هو -- ‏الإشارة عالية الثقة: صدفةً مرة، ونمطاً مرتين. -- -- ⚠️ ‏يُنفَّذ على قاعدة primary (jorSiroDB) وحدها. CREATE TABLE IF NOT EXISTS `driver_leak_events` ( `id` INT NOT NULL AUTO_INCREMENT, `driver_id` VARCHAR(100) NOT NULL, `passenger_id` VARCHAR(100) NOT NULL, `ride_id` VARCHAR(20) NOT NULL, `cancel_status` VARCHAR(40) NOT NULL COMMENT 'الحالة التي انتهت بها الرحلة (CancelFromDriverAfterApply / cancelled_by_passenger)', `pair_repeat` SMALLINT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'كم مرة تكرر نفس زوج (سائق، راكب) بهذا النمط خلال النافذة', `app_reported` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'هل بلّغ تطبيق السائق أيضاً (driver_ride_scam)؟ تطابقهما يرفع الثقة', `confidence` DECIMAL(4,3) NOT NULL DEFAULT 0 COMMENT 'درجة الثقة 0..1 — يحسبها bot/cron_leak_detection.php', `reviewed_by` VARCHAR(100) NULL DEFAULT NULL COMMENT 'معرّف الإداري الذي راجع الحالة. NULL = لم تُراجع بعد', `review_note` VARCHAR(255) NULL DEFAULT NULL, `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), -- ‏يمنع الكرون من تسجيل نفس الرحلة مرتين عند كل مرور UNIQUE KEY `uniq_ride` (`ride_id`), KEY `idx_driver` (`driver_id`, `created_at`), KEY `idx_pair` (`driver_id`, `passenger_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='أحداث تسرب مشتبهة يستنتجها الخادم — لا يبلّغ عنها التطبيق'; -- ‏driver_orders يُقرأ في هذا الكشف بالانضمام على order_id و driver_id، -- ‏وهو اليوم بلا أي فهرس غير المفتاح الأساسي (id). الفحص كان سيمسح -- ‏الجدول كاملاً عند كل مرور. ALTER TABLE `driver_orders` ADD INDEX `idx_order` (`order_id`), ADD INDEX `idx_driver_created` (`driver_id`, `created_at`); -- ‏للتراجع: -- DROP TABLE `driver_leak_events`; -- ALTER TABLE `driver_orders` DROP INDEX `idx_order`, DROP INDEX `idx_driver_created`;