Files
Siro/backend/migrations/2026_08_07_complaint_resolution.sql
T

76 lines
4.4 KiB
SQL
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 2026_08_07_complaint_resolution.sql
--
-- ‏دورة الشكوى وأداة التعويض.
--
-- ‏الوضع اليوم: serviceapp/update_complaint.php يقلب الحالة ويكتب نصّ
-- ‏قرار. لا تعويض، لا تصنيف سبب، ولا قياس زمن. والموظف الذي يريد
-- ‏تعويض راكب متضرر لا يملك أي أداة — فيَعِد شفهياً أو لا يفعل شيئاً.
--
-- ‏كلمة "refund" لا ترد إطلاقاً في مسار الرحلات، فقط في وحدة الطعام.
--
-- ‏هذا الترحيل يحوّل الدعم من "استقبال شكاوى" إلى "إغلاق قضايا".
--
-- ⚠️ ‏يُنفَّذ على قاعدة primary (jorSiroDB) وحدها.
-- ══════════════════════════════════════════════════════════════
-- ١) قياس الزمن (SLA)
--
-- ‏date_resolved موجود أصلاً، لكن زمن **أول رد** هو المؤشر الذي يشعر به
-- ‏العميل فعلاً — شكوى تُغلق بعد يومين بردٍّ خلال دقائق أفضل بكثير من
-- ‏شكوى تُغلق بعد ساعة بلا أن يعلم صاحبها شيئاً.
-- ══════════════════════════════════════════════════════════════
ALTER TABLE `complaint`
ADD COLUMN `first_response_at` DATETIME NULL DEFAULT NULL
COMMENT 'لحظة أول رد من الدعم — يُختم مرة واحدة ولا يتغيّر',
ADD COLUMN `assigned_to` VARCHAR(100) NULL DEFAULT NULL
COMMENT 'معرّف الموظف المسؤول عن القضية',
ADD COLUMN `reason_code` VARCHAR(40) NULL DEFAULT NULL
COMMENT 'تصنيف موحّد للسبب — قائمة مغلقة في resolve_complaint.php',
ADD INDEX `idx_status_filed` (`statusComplaint`, `date_filed`),
ADD INDEX `idx_ride` (`ride_id`);
-- ══════════════════════════════════════════════════════════════
-- ٢) سجل التعويضات
--
-- ‏جدول مستقل لا أعمدة في complaint: الشكوى الواحدة قد تُعوَّض أكثر من
-- ‏مرة (استرجاع جزئي ثم رصيد اعتذار)، وكل حركة مالية تحتاج أثراً مستقلاً
-- ‏يُراجَع ويُدقَّق.
-- ══════════════════════════════════════════════════════════════
CREATE TABLE IF NOT EXISTS `complaint_compensations` (
`id` INT NOT NULL AUTO_INCREMENT,
`complaint_id` INT NOT NULL,
`ride_id` VARCHAR(20) NULL DEFAULT NULL,
`beneficiary_type` VARCHAR(20) NOT NULL
COMMENT 'passenger | driver — لمن ذهب التعويض',
`beneficiary_id` VARCHAR(100) NOT NULL,
`kind` VARCHAR(20) NOT NULL
COMMENT 'refund (استرجاع من قيمة الرحلة) | goodwill (رصيد اعتذار)',
`amount` DECIMAL(12,3) NOT NULL,
`currency` VARCHAR(5) NOT NULL DEFAULT 'SYP',
`issued_by` VARCHAR(100) NOT NULL COMMENT 'الموظف الذي صرفه',
`note` VARCHAR(500) NULL DEFAULT NULL,
-- ‏نتيجة نداء المحفظة. الفشل يبقى مسجَّلاً للتسوية اليدوية بدل أن
-- ‏يختفي في اللوجز — العميل وُعد بمبلغ ويجب أن يصله.
`transfer_status` VARCHAR(20) NOT NULL DEFAULT 'pending'
COMMENT 'pending | success | failed',
`transfer_code` SMALLINT NULL DEFAULT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_complaint` (`complaint_id`),
KEY `idx_beneficiary` (`beneficiary_type`, `beneficiary_id`),
KEY `idx_failed` (`transfer_status`, `created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
COMMENT='تعويضات الشكاوى — كل حركة مالية بأثر مستقل قابل للتدقيق';
-- ‏للتراجع:
-- ALTER TABLE `complaint` DROP COLUMN `first_response_at`,
-- DROP COLUMN `assigned_to`, DROP COLUMN `reason_code`,
-- DROP INDEX `idx_status_filed`, DROP INDEX `idx_ride`;
-- DROP TABLE `complaint_compensations`;