إنتقل إلى المحتوى الرئيسي

استرداد حجز

نظرة عامة​

يوضح هذا الدليل كيفية التعامل مع طلبات إلغاء الحجوزات واسترداد المبالغ.

:::info نموذج الدفع شام باص يعمل بنظام الدفع النقدي فقط. لا توجد مدفوعات إلكترونية حالياً. :::

حالات الحجز​

الحالةالوصفقابل للإلغاء
pendingبانتظار التأكيدنعم
confirmedمؤكدنعم (بشروط)
cancelledملغيلا
completedمكتمللا
no_showلم يحضرلا

سياسة الإلغاء​

الإلغاء قبل 24 ساعة​

  • استرداد كامل المبلغ
  • لا رسوم إلغاء

الإلغاء قبل 12 ساعة​

  • استرداد 75% من المبلغ
  • 25% رسوم إلغاء

الإلغاء قبل 6 ساعات​

  • استرداد 50% من المبلغ
  • 50% رسوم إلغاء

الإلغاء قبل أقل من 6 ساعات​

  • لا استرداد
  • 100% رسوم إلغاء

خطوات الإلغاء​

1. البحث عن الحجز​

SELECT
b.*,
t.departure_time,
t.origin_city_name,
t.destination_city_name,
p.phone as passenger_phone
FROM bookings b
JOIN trips t ON t.id = b.trip_id
JOIN passengers p ON p.id = b.passenger_id
WHERE b.booking_code = 'SB-XXXXXX';

2. حساب مبلغ الاسترداد​

SELECT
b.total_amount,
t.departure_time,
EXTRACT(EPOCH FROM (t.departure_time - NOW())) / 3600 as hours_until_departure,
CASE
WHEN EXTRACT(EPOCH FROM (t.departure_time - NOW())) / 3600 >= 24 THEN b.total_amount
WHEN EXTRACT(EPOCH FROM (t.departure_time - NOW())) / 3600 >= 12 THEN b.total_amount * 0.75
WHEN EXTRACT(EPOCH FROM (t.departure_time - NOW())) / 3600 >= 6 THEN b.total_amount * 0.50
ELSE 0
END as refund_amount
FROM bookings b
JOIN trips t ON t.id = b.trip_id
WHERE b.booking_code = 'SB-XXXXXX';

3. تنفيذ الإلغاء​

UPDATE bookings
SET
status = 'cancelled',
cancelled_at = NOW(),
cancellation_reason = 'سبب الإلغاء',
refund_amount = calculated_refund,
cancelled_by = 'user_type' -- 'passenger', 'company', 'admin'
WHERE booking_code = 'SB-XXXXXX';

4. تحديث المقاعد​

UPDATE seats
SET
status = 'available',
booking_id = NULL
WHERE booking_id = 'booking_id';

5. إشعار العميل​

يتم إرسال إشعار تلقائي عبر WhatsApp يتضمن:

  • تأكيد الإلغاء
  • مبلغ الاسترداد
  • طريقة استلام المبلغ

حالات خاصة​

إلغاء بسبب الشركة​

إذا ألغت الشركة الرحلة:

  • استرداد كامل 100%
  • لا رسوم على العميل
UPDATE bookings
SET
status = 'cancelled',
cancelled_at = NOW(),
cancellation_reason = 'إلغاء الرحلة من قبل الشركة',
refund_amount = total_amount,
cancelled_by = 'company'
WHERE trip_id = 'cancelled_trip_id';

إلغاء جماعي​

لإلغاء جميع حجوزات رحلة:

UPDATE bookings
SET
status = 'cancelled',
cancelled_at = NOW(),
cancellation_reason = 'إلغاء الرحلة',
refund_amount = total_amount,
cancelled_by = 'admin'
WHERE trip_id = 'trip_id'
AND status IN ('pending', 'confirmed');

التحقق والتدقيق​

التحقق من الإلغاء​

SELECT * FROM bookings
WHERE booking_code = 'SB-XXXXXX';

سجل التدقيق​

SELECT * FROM audit_log
WHERE entity_type = 'booking'
AND action = 'cancel'
ORDER BY created_at DESC
LIMIT 10;