-- 2026_08_07_safety_incidents.sql -- -- ‏غرفة عمليات السلامة — أثر يمكن مراجعته لواقعة حقيقية. -- -- ‏الوضع اليوم: زر SOS في تطبيق الراكب ينتهي عند رسالة واتساب لجهة اتصال -- ‏شخصية خزّنها الراكب بنفسه (ui_interactions_controller.dart:145). لا نداء -- ‏API، لا سجل، لا تنبيه لأحد داخل الشركة. لو وقعت حادثة فعلية، الشركة لا -- ‏تعرف بها ولا تملك دليلاً عنها ولا تستطيع التدخل. -- -- ‏هذا الجدول هو الأثر المفقود. رسالة الواتساب تبقى كما هي — تُرسل بالتوازي -- ‏لا بدلاً، لأنها الأسرع وصولاً لمن يهمّه الأمر فعلاً. -- -- ⚠️ ‏يُنفَّذ على قاعدة primary (jorSiroDB) وحدها. CREATE TABLE IF NOT EXISTS `safety_incidents` ( `id` INT NOT NULL AUTO_INCREMENT, -- ‏من أبلغ ولماذا `reporter_type` VARCHAR(20) NOT NULL COMMENT 'passenger | driver — من ضغط الزر', `reporter_id` VARCHAR(100) NOT NULL, `trigger_type` VARCHAR(30) NOT NULL DEFAULT 'sos_button' COMMENT 'sos_button | shake | route_deviation | long_stop | overtime', -- ‏سياق الواقعة `ride_id` VARCHAR(20) NULL DEFAULT NULL, `driver_id` VARCHAR(100) NULL DEFAULT NULL, `passenger_id` VARCHAR(100) NULL DEFAULT NULL, `lat` DECIMAL(10,7) NULL DEFAULT NULL, `lng` DECIMAL(10,7) NULL DEFAULT NULL, `note` VARCHAR(500) NULL DEFAULT NULL, -- ‏لقطة الحالة وقت الواقعة، مجمّدة كما كانت. -- ‏الرحلة تتغيّر بعد الحادثة (تُلغى، تُنهى، يُصفَّر السائق) فقراءتها لاحقاً -- ‏لا تصف اللحظة. هذه اللقطة هي الدليل. `snapshot` JSON NULL DEFAULT NULL, -- ‏دورة المعالجة `status` VARCHAR(20) NOT NULL DEFAULT 'open' COMMENT 'open | acknowledged | resolved | false_alarm', `acknowledged_by` VARCHAR(100) NULL DEFAULT NULL, `acknowledged_at` DATETIME NULL DEFAULT NULL, `resolution_note` VARCHAR(500) NULL DEFAULT NULL, `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_status_created` (`status`, `created_at`), KEY `idx_ride` (`ride_id`), KEY `idx_driver` (`driver_id`, `created_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='بلاغات السلامة — السجل الوحيد القابل للمراجعة لواقعة'; -- ‏تجميد إسناد الرحلات للسائق حتى المراجعة. -- ‏منفصل عن blockedUntil (عقوبة الإلغاءات المتكررة): ذاك مؤقت بساعات -- ‏وينتهي وحده، وهذا يبقى حتى يرفعه إنسان. ALTER TABLE `driver` ADD COLUMN `safetyHoldIncidentId` INT NULL DEFAULT NULL COMMENT 'رقم بلاغ السلامة الذي جمّد هذا السائق. NULL = غير مجمّد'; -- ‏للتراجع: -- DROP TABLE `safety_incidents`; -- ALTER TABLE `driver` DROP COLUMN `safetyHoldIncidentId`;