Update: 2026-08-07 04:35:28
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
-- 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`;
|
||||
Reference in New Issue
Block a user