64 lines
3.2 KiB
SQL
64 lines
3.2 KiB
SQL
-- 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`;
|