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

استرداد حجز

نظرة عامة

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

:::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;