146 lines
7.8 KiB
Markdown
146 lines
7.8 KiB
Markdown
# سياسة الإلغاء والتعويض — سيرو
|
|
|
|
> **الغرض:** مرجع واحد لخدمة العملاء، وأساس صفحة ويب عامة تُشرح للمستخدمين.
|
|
> **آخر تحديث:** 2026-08-07
|
|
> **الحالة:** مبنية في الكود، **معطّلة افتراضياً** حتى تضبط الإدارة السقوف.
|
|
|
|
---
|
|
|
|
## المبدأ الحاكم
|
|
|
|
**من ضيّع وقت الآخر يعوّضه، والمال يذهب للطرف المتضرر لا للشركة.**
|
|
|
|
هذا يفرّق سيرو عن نموذج "غرامة تذهب للمنصة". السائق الذي انتظر يُعوَّض، والراكب الذي انتظر سائقاً متأخراً لا يُغرَّم.
|
|
|
|
---
|
|
|
|
## أولاً: إلغاء الراكب بعد قبول السائق
|
|
|
|
### متى يكون الإلغاء مجانياً؟
|
|
|
|
| الحالة | الشرح للمستخدم |
|
|
|---|---|
|
|
| **لم يقبل أي سائق بعد** | لم يتحرك أحد نحوك، فلا أحد يستحق تعويضاً. وهذه أغلب حالات الإلغاء. |
|
|
| **خلال أول دقيقتين من قبول السائق** | مهلة لتصحيح خطأ في الوجهة أو تغيير الرأي. |
|
|
| **مرّت 10 دقائق ولم يصل السائق** | التأخير من السائق لا منك — الإلغاء مجاني. |
|
|
| **الرسم معطّل في بلدك** | الإدارة لم تفعّل السياسة بعد. |
|
|
|
|
### متى يُحتسب رسم؟
|
|
|
|
عندما يكون السائق قد **قَبِل الرحلة وتحرّك نحوك**، ومضت مهلة الدقيقتين، ولم يتأخر عليك.
|
|
|
|
### كيف يُحسب؟
|
|
|
|
```
|
|
الرسم = المسافة التي قطعها السائق نحوك × سعر الكيلومتر لنوع السيارة
|
|
+ الدقائق منذ قبوله × سعر الدقيقة حسب وقت اليوم
|
|
```
|
|
|
|
- الأسعار هي **نفسها** المستخدمة في تسعير الرحلات (جدول `kazan` لكل دولة).
|
|
- **العملة:** بعملة بلد التشغيل — ليرة سورية (SYP)، دينار أردني (JOD)، جنيه مصري (EGP)…
|
|
- **حد أقصى للدقائق المحتسبة: 20 دقيقة.** سائق قَبِل ونسي الرحلة ساعة لا يتحول نسيانه إلى فاتورة عليك.
|
|
- **سقف أعلى** يحدده كل بلد (`passengerCancelCap`)، وفوقه سقف صلب في الكود يمنع أي خطأ إداري من خصم كارثي.
|
|
|
|
### ماذا يحدث بعد الإلغاء؟
|
|
|
|
1. يُخصم المبلغ من محفظتك كدَين.
|
|
2. **يُضاف نفس المبلغ لمحفظة السائق** — ليس إيراداً للشركة.
|
|
3. يزيد عدّاد "عدم الحضور" في حسابك (للمراجعة الإدارية فقط، لا عقوبة آلية).
|
|
|
|
### التحذير المسبق
|
|
|
|
التطبيق **يعرض المبلغ ويطلب تأكيدك قبل الإلغاء**. لا خصم صامت. إن تعذّر الاتصال بالخادم لحظتها، يمضي الإلغاء بلا تحذير — لأن حبسك في رحلة بسبب عطل تقني أسوأ.
|
|
|
|
---
|
|
|
|
## ثانياً: تعويض السائق عند عدم حضور الراكب
|
|
|
|
### متى يستحق السائق تعويضاً؟
|
|
|
|
عندما يصل نقطة الالتقاط، **ينتظر 5 دقائق على الأقل**، ولا يحضر الراكب، فيلغي الرحلة.
|
|
|
|
### كيف يُحسب؟
|
|
|
|
```
|
|
التعويض = مسافة الاقتراب إلى الراكب × سعر الكيلومتر
|
|
+ دقائق الانتظار × سعر الدقيقة
|
|
```
|
|
|
|
نفس المعادلة والأسعار. الحد الأقصى للدقائق المحتسبة 20 دقيقة أيضاً.
|
|
|
|
### شروط مهمة
|
|
|
|
- **الوصول يتحقق منه الخادم** من موقع السائق الفعلي (ضمن 300 متر من نقطة الالتقاط). لا يكفي أن يضغط السائق "وصلت".
|
|
- **إن تعذّر إثبات الوصول** (خدمة الموقع معطّلة مثلاً) فلا تعويض — لا يُصرف مال لا يمكن إثبات استحقاقه.
|
|
- إلغاء السائق **قبل** الوصول: لا تعويض إطلاقاً.
|
|
|
|
---
|
|
|
|
## ثالثاً: عقوبة السائق كثير الإلغاء
|
|
|
|
منفصلة تماماً عن المال. **لا غرامة على السائق أبداً.**
|
|
|
|
| الشرط | العقوبة |
|
|
|---|---|
|
|
| 3 إلغاءات بعد القبول خلال 24 ساعة | إيقاف استقبال الطلبات **4 ساعات** |
|
|
|
|
الإيقاف مطبَّق على الخادم: السائق الموقوف لا يستطيع قبول أي رحلة حتى لو أعاد تثبيت التطبيق.
|
|
|
|
---
|
|
|
|
## رابعاً: التسرب خارج المنصة
|
|
|
|
سلوك يتكرر فيه: قَبِل السائق ← أُلغيت الرحلة ← ولم تبدأ قط، مع **نفس الراكب مراراً**.
|
|
|
|
| التكرار | درجة الاشتباه |
|
|
|---|---|
|
|
| مرة واحدة | منخفضة (للإلغاء أسباب مشروعة كثيرة) |
|
|
| مرتان | متوسطة |
|
|
| ثلاث فأكثر | مرتفعة → **مراجعة بشرية** |
|
|
|
|
**العقوبة:** خفض أولوية السائق في توزيع الرحلات — يخسر الطلبات الخاصة والقريبة تدريجياً. **لا حظر ولا خصم مالي.** وتزول العقوبة تلقائياً حين ينظف سجله خلال 30 يوماً.
|
|
|
|
---
|
|
|
|
## المعاملات القابلة للضبط (لكل دولة، جدول `kazan`)
|
|
|
|
| المعامل | الافتراضي | المعنى |
|
|
|---|---|---|
|
|
| `passengerCancelCap` | `0` (معطّل) | سقف رسم إلغاء الراكب |
|
|
| `passengerCancelFreeMinutes` | `2` | دقائق الإلغاء المجاني بعد القبول |
|
|
| `driverLateExemptMinutes` | `10` | بعدها يصير الإلغاء مجانياً لتأخر السائق |
|
|
| `cancelCompensationCap` | `0` (معطّل) | سقف تعويض عدم حضور الراكب |
|
|
| `cancelMinWaitMinutes` | `5` | أقل انتظار يستحق السائق بعده تعويضاً |
|
|
|
|
> ⚠️ القيمة `0` في السقوف تعني **تعطيلاً كاملاً**. لا يُخصم ولا يُصرف شيء حتى تضبطها الإدارة صراحةً.
|
|
|
|
---
|
|
|
|
## أسئلة متوقعة من العملاء
|
|
|
|
**«ألغيت لأن السائق لم يتحرك من مكانه — لماذا خُصم مني؟»**
|
|
إن مرّت 10 دقائق ولم يصل، الإلغاء مجاني تلقائياً. إن خُصم رغم ذلك فالرحلة تحتاج مراجعة — ارفعها للفريق التقني بمعرّف الرحلة.
|
|
|
|
**«لماذا الرسم مختلف كل مرة؟»**
|
|
لأنه ليس رقماً ثابتاً — يعتمد على المسافة التي قطعها السائق فعلاً وعلى الوقت المنقضي. رحلة ألغيت بعد 3 دقائق تختلف عن أخرى بعد 12.
|
|
|
|
**«هل تأخذ الشركة هذا المبلغ؟»**
|
|
لا. يذهب كاملاً لمحفظة السائق.
|
|
|
|
**«ألغى السائق عليّ — هل أُعوَّض؟»**
|
|
لا يوجد تعويض للراكب حالياً عند إلغاء السائق. لكن السائق كثير الإلغاء يُوقَف 4 ساعات آلياً.
|
|
|
|
---
|
|
|
|
## مراجع تقنية
|
|
|
|
| الموضوع | الملف |
|
|
|---|---|
|
|
| رسم إلغاء الراكب | `backend/ride/rides/cancel_fee_helper.php` |
|
|
| معاينة الرسم قبل الإلغاء | `backend/ride/rides/preview_cancel_fee.php` |
|
|
| تعويض عدم الحضور + الإيقاف | `backend/ride/rides/cancel_ride_by_driver.php` |
|
|
| إثبات الوصول | `backend/ride/rides/arrive_ride.php` |
|
|
| كشف التسرب | `backend/bot/cron_leak_detection.php` |
|
|
| الأسعار المشتركة | `backend/ride/pricing/pricing_helper.php` |
|
|
| الترحيلات | `backend/migrations/2026_08_07_*.sql` |
|