# سياسة التوصيل في كابيتانو

**لمن هذه الوثيقة:** فريق العمليات والإسناد ودعم المتاجر والمحاسبة، ومن يدرّب الكباتن.
**ما الذي تحدده:** ما الذي نفعله في كل مرحلة من مراحل الطلب، ومن يقرر، وما الذي يُحاسَب عليه ومَن يتحمل كلفته، ومتى يجوز الإلغاء ومتى لا يجوز.

> **كيف تُقرأ:** كل بند فيه علامة **(النظام)** يطبّقه النظام تلقائيًا ولا يمكن تجاوزه. وكل بند فيه **(قرار تشغيلي)** يعتمد على إنسان في لوحة التحكم، والنظام لا يمنعه ولا يفرضه. الأرقام المذكورة هي القيم الافتراضية الحالية، وبعضها يُعدَّل من إعدادات الإسناد في لوحة التحكم، وبعضها من إعدادات الخادم.
> آخر الوثيقة قسم **«ثغرات يجب إغلاقها»** فيه ما لا يغطيه النظام اليوم.

---

## ١. المصطلحات

| المصطلح | معناه |
|---|---|
| **المتجر** | الجهة التي ترسل الطلب (مثل المتجر الإلكتروني). تدفع أجر التوصيل في حالات محددة أدناه. |
| **العميل** | من يستلم الطلب ويدفع عند الباب. |
| **المورّد** | المكان الذي تُستلَم منه البضاعة. قد يكون للطلب أكثر من مورّد. |
| **محل التغليف** | محل وسيط تُجمَع عنده البضاعة لتُغلَّف قبل أن تُسلَّم للعميل. |
| **الكابتن** | السائق. إما **موظف** (راتبه خارج النظام) أو **مستقل** (يُدفع له عن كل توصيلة). |
| **الاستلام** | أخذ البضاعة من المورّد. |
| **التجميع** | رحلة الكابتن من المورّدين إلى محل التغليف. |
| **التحصيل** | أخذ المال من العميل عند الباب. |
| **أجر التوصيل** | ما يُحمَّل على الطلب مقابل التوصيل. |
| **أجر الكابتن** | ما يُدفع للكابتن مقابل رحلته. هو غير أجر التوصيل. |

---

## ٢. دورة حياة الطلب (النظام)

للطلب ثماني حالات فقط، ولا يمكن القفز بينها:

| الحالة | معناها | الحالات التالية الممكنة |
|---|---|---|
| **قيد الانتظار** | لا كابتن له بعد | تم الإسناد، ملغى |
| **تم الإسناد** | عُرض على كابتن ولم يردّ بعد | تم القبول، عودة إلى الانتظار (رفض أو انتهاء المهلة)، ملغى |
| **تم القبول** | الكابتن وافق وهو في الطريق إلى المورّد | تم الاستلام، عودة إلى الانتظار، ملغى |
| **تم الاستلام** | استلم الكابتن البضاعة من **كل** المورّدين | في الطريق، ملغى |
| **في الطريق** | في الطريق إلى العميل | تم التسليم، فشل التسليم، ملغى |
| **تم التسليم** | انتهى بنجاح | لا شيء (نهائية) |
| **فشل التسليم** | لم يكتمل التسليم | لا شيء (نهائية) |
| **ملغى** | أُنهي الطلب | لا شيء (نهائية) |

**قواعد ثابتة:**
- الحالات الثلاث الأخيرة **نهائية**: لا يُعاد فتح طلب سُلّم أو فشل أو أُلغي. إن لزم، يُنشأ طلب جديد. (النظام)
- **السبب إلزامي** عند الإلغاء وعند فشل التسليم، ويُسجَّل في سجل الطلب مع اسم من نفّذ الإجراء. (النظام)
- كل انتقال بين الحالات يُسجَّل في سجل الطلب باسم الفاعل ووقته. (النظام)
- الكابتن **لا يلغي** الطلب. صلاحياته هي: قبول العرض، رفضه، تأكيد الاستلام، «في الطريق»، «تم التسليم»، «فشل التسليم». (النظام)

---

## ٣. أجر التوصيل: من يدفعه

يُحسب أجر التوصيل من منطقة العميل وقيمة البضاعة (شرائح قيمة). ومن يتحمله يتحدد هكذا:

| الحالة | من يدفع أجر التوصيل |
|---|---|
| طلب عادي بالدفع عند الاستلام | **العميل**، وهو داخل في المبلغ المطلوب منه عند الباب |
| قيمة البضاعة تقع في شريحة توصيل مجاني | **المتجر** (يُحمَّل أجر المنطقة كاملًا) |
| شريحة تخفيض جزئي | العميل جزء، **المتجر** الباقي |
| طلب مدفوع مسبقًا | **المتجر**، لأن لا شيء يُحصَّل عند الباب |
| فشل التسليم بعد أن ذهب الكابتن إلى العميل | **المتجر** |
| إلغاء بعد أن بدأ الكابتن الاستلام | **المتجر** |
| إلغاء قبل أي استلام | **لا أحد**، لا يُحمَّل شيء |

(النظام) هذه القواعد تُسجَّل تلقائيًا في كشف حساب المتجر. وما يُحمَّل على المتجر لا يتغير بحسب من هو الكابتن.

---

## ٤. الإسناد

**أ. من يستحق العرض**
- يبحث النظام عن الكباتن المتاحين حول نقطة الاستلام بدوائر متدرجة: **٥ ثم ٨ ثم ١٢ كم** حتى يجد **٣ مرشحين**. (النظام، قابل للضبط)
- لا يدخل القائمة كابتن غير موافَق عليه، أو غير متصل، أو في استراحة، أو **ينتظر مركبة** من الشركة ولم تُسلَّم له بعد. (النظام)
- موقع الكابتن يُعتبر قديمًا بعد **١٫٥ دقيقة** (تحذير)، وبعد **٣ دقائق** يُستبعد من الترتيب ويُذكر في القائمة. (النظام)
- الحد الأقصى للطلبات الجارية لكل كابتن: **طلبان**. (النظام، من إعدادات الإسناد)
- الترتيب يعتمد على أقصر وقت وصول معدّل، ثم الأطول انتظارًا من بين المتقاربين. الكابتن الذي يجمع طلبًا آخر من المتجر نفسه يُقدَّم.

**ب. من يقرر**
- الإسناد قرار **الموظف في لوحة التحكم**. القائمة اقتراح، وللموظف أن يختار غير الأول. (قرار تشغيلي)
- **الكابتن الموظف** يمكن أن يُسنَد إليه الطلب مباشرة. **الكابتن المستقل** يُعرض عليه فقط وله أن يرفض. (النظام)

**ج. مهلة العرض ورفض الكابتن**
- للكابتن **٦٠ ثانية** ليردّ على العرض. إن لم يردّ انتهى العرض وعاد الطلب إلى الانتظار. (النظام، قابل للضبط)
- يستطيع الكابتن **الرفض** قبل الاستلام (حتى بعد القبول)، ولا يستطيع بعد أن يستلم. (النظام)
- من رفض الطلب أو انتهت مهلته **يبقى في قائمة المقترحين لهذا الطلب، لكن في آخرها**، ويظهر أمام اسمه «رفض سابقًا» أو «لم يردّ»، حتى لا يُعرض عليه الطلب أول الجميع. (النظام)
- الطلب المرفوض يظهر في **سجل طلبات الكابتن** مع سببه، ويظهر بلا بيانات العميل لأنه لم يعد طلبه. (النظام)

**د. طلب ينتظر كابتنًا طويلًا**
- إن مرّت **٦٠ دقيقة** على طلب بلا كابتن، تصل **لوحة التحكم** رسالة تنبيه برابط الطلب، **مرة كل يوم** لكل طلب حتى لا تتحول إلى ضجيج. لا يُلغى شيء ولا يُسند تلقائيًا؛ القرار للموظف: توسيع البحث، أو الاتصال بالمتجر، أو إلغاء الطلب. (النظام، تُضبط المدة بـ `DISPATCH_PENDING_ALERT_MINUTES`، والصفر يعطّله)
- الطلب المغلَّف يُحسب انتظاره من لحظة وصول بضاعته إلى محل التغليف، وليس من لحظة إنشائه، لأنه قبل ذلك ينتظر المورّدين وهذا هو المطلوب. (النظام)

---

## ٥. الاستلام من المورّدين

- الكابتن يؤكد **كل مورّد على حدة** حين يصل إليه. لا ينتقل الطلب إلى «تم الاستلام» إلا بعد تأكيد آخر مورّد. (النظام)
- **الكمية الناقصة:** إن استلم أقل مما في الطلب يسجل السبب (يمكن جعل السبب إلزاميًا من إعدادات الإسناد). يظهر النقص في ملخص الطلب كمسألة مفتوحة تحتاج متابعة، وتُسوَّى الكمية الناقصة من لوحة التحكم فيُعاد حساب إجمالي الطلب وأجر التوصيل. (النظام)
- **ارتفاع السعر:** يدفع الكابتن للمورّد من جيبه ما يطلبه المورّد، ولا يُمنع. إن زاد الدفع عن سعر الطلب بأكثر من **٢٥٪** يُنبَّه المكتب فورًا ليتصل بالمورّد أو العميل. (النظام، قابل للضبط)
- **تأخر المورّد:** إن مرّت **٢٠ دقيقة** على موعد جاهزية البضاعة دون استلام، يُنبَّه المكتب. لا يُلغى شيء ولا يُعاد إسناد تلقائيًا؛ القرار للموظف: الانتظار، أو إرسال الكابتن لاحقًا، أو نقل المورّد لكابتن آخر، أو إلغاء بنده. (قرار تشغيلي)
- **تعذّر الاستلام من مورّد** (مغلق، لا يردّ، البضاعة غير جاهزة): يسجل الكابتن السبب فيخرج المورّد من مساره ويُنبَّه المكتب. إما يعيده المكتب إلى المسار (تُحصى المحاولات)، أو يتابع الطلب دونه. (النظام + قرار تشغيلي)
- **الدفع للمورّد:** المبلغ الذي يدفعه الكابتن يُسجَّل **دَيْنًا له على الشركة** مع الفرق عن المتوقع. لا يُسجَّل دفع للمورّد على رحلة التسليم أبدًا، لأن البضاعة اشتُريت في التجميع. (النظام)

---

## ٦. الطلب المغلَّف (رحلتان)

- يُنفَّذ الطلب المغلَّف كرحلتين بكابتنين مختلفين: **رحلة التجميع** (من المورّدين إلى محل التغليف) و**رحلة التسليم** (من محل التغليف إلى العميل). كل رحلة طلب مستقل ببند وحالة وكابتن.
- **المال يسير في اتجاه واحد على كل رحلة:** (النظام)

| | رحلة التجميع | رحلة التسليم |
|---|---|---|
| دفع للمورّد | **مسموح** | **مرفوض** |
| تحصيل من العميل | **مرفوض** | **مسموح** |
| أجر الكابتن | أجر تجميع (نصف أجر المنطقة افتراضيًا، أو مبلغ ثابت إن حددته الشركة) | أجر المنطقة كاملًا |

- كابتن التجميع يُسلّم في محل التغليف عددًا من القطع يقوله، فإن خالف ما استلمه يُنبَّه المكتب قبل أن يُغلَّف الطرد. (النظام)
- **إلغاء أي رحلة يلغي الرحلتين معًا.** (النظام)
- لا يُعدَّل مورّد الرحلتين ولا بنودهما من الرحلة نفسها؛ يتم ذلك على طلب التسليم. (النظام)

---

## ٧. التسليم والتحصيل

- **قبل التسليم:** لا يُسلَّم طلب حالته «مستردّ المبلغ»، ولا يُحصَّل عليه مال. (النظام)
- **الدفع عند الاستلام:** المطلوب من العميل هو المبلغ المسجَّل على الطلب. إن لم يدخل الكابتن مبلغًا يُعتمد المبلغ المطلوب. وإن حصّل أقل أو أكثر يُسجَّل **الفرق** عليه ويحتاج توضيحًا. (النظام)
- **الدفع المسبق:** لا يُحصَّل شيء ولا يظهر للكابتن مبلغ ليأخذه. (النظام)
- **صورة إثبات التسليم:** تُرفع مع «تم التسليم»، وإن فشل الرفع لا يُسجَّل التسليم حتى يُرفع الإثبات. (النظام)
- **تسليم الطلب بين كابتنين** (نقل الطرد وهو في السيارة): يعرضه الكابتن الحامل على كابتن محدد، ولا ينتقل شيء حتى يقبل الآخر. الحالة لا تتغير أثناء النقل، **والمال لا ينتقل مع الطرد**: من دفع للمورّد يبقى دائنًا بما دفع. (النظام)
- **فشل التسليم:** يُسجَّل من حالة «في الطريق» فقط، ويلزم **سبب**. النتيجة: (النظام)
  - **محاولات الاتصال:** يرسل الكابتن مع الفشل عدد المرات التي حاول فيها الوصول إلى العميل (`call_attempts`)، فيُسجَّل على الطلب ويراه المكتب. وإن حدّدت الشركة حدًا أدنى (`DISPATCH_FAILED_DELIVERY_MIN_CALL_ATTEMPTS`) رُفض الفشل بأقل من هذا العدد بخطأ ٤٢٢ وبقي الطلب «في الطريق». **الحد الأدنى معطَّل افتراضيًا** (٠) لأن نسخة تطبيق الكابتن التي لا ترسل العدد بعد ستعجز عن تسجيل أي فشل؛ يُفعَّل حين يصدر التطبيق بالحقل. (النظام)
  1. تُحمَّل أجرة التوصيل على **المتجر**.
  2. يُدفع للكابتن **أجر الرحلة كاملًا** (القيمة قابلة للضبط: ١٫٠ تعني كاملًا، ٠ تعني لا شيء).
  3. تصبح **البضاعة بحاجة إلى إعادة** إلى المورّد حتى يؤكد المكتب أنها عادت.
  4. لا تُعاد محاولة التسليم على الطلب نفسه؛ يُنشأ طلب جديد إن أراد المتجر.

---

## ٨. المال والأجور

| البند | القاعدة |
|---|---|
| الكابتن الموظف | لا أجر عن كل توصيلة (راتبه خارج النظام). تُسجَّل توصيلاته بصفر لتظهر في التقارير. |
| الكابتن المستقل | أجر المنطقة × نسبة المستقل في تلك المنطقة. |
| عميل خارج كل المناطق المسجلة | لا يُحسب أجر، ويُسجَّل التوصيل «بلا منطقة» ليراجعه المحاسب قبل يوم الدفع. |
| ما يحصّله الكابتن من العملاء | دَيْن عليه للشركة حتى يسلّمه في تسليم النقد. |
| ما يدفعه للمورّدين | دَيْن له على الشركة. |
| تسوية الكابتن | تُحسب بالفرق بين ما له وما عليه، وتُسجَّل عبر أمين الصندوق. |

---

## ٩. تعديل الطلب بعد إنشائه

| الجزء | المتجر يستطيع التعديل حتى | المكتب يستطيع التعديل حتى |
|---|---|---|
| اسم العميل ورقمه وملاحظته | دائمًا (قبل أن ينتهي الطلب) | دائمًا |
| ملاحظة العمليات | دائمًا | دائمًا |
| **المورّد (نقطة الاستلام)** | قبل «تم الإسناد» | قبل «تم الإسناد» |
| **البنود** | قبل «تم الاستلام» | قبل «تم الاستلام» |
| **المبلغ المطلوب وأجر التوصيل** | قبل «تم الاستلام» | دائمًا |
| **عنوان التسليم** | قبل «في الطريق» | دائمًا (يلزم سبب بعد الاستلام) |
| وعد التسليم | قبل التسليم | دائمًا |

- الطلب المنتهي لا يُعدَّل. (النظام)
- **بعد «تم الاستلام»** أي تعديل غير بيانات العميل البسيطة يلزمه **سبب**. (النظام)
- يُبلَّغ الكابتن بالإشعار حين يتغير ما يخصه: العنوان، المبلغ المطلوب، رقم العميل، طريقة الدفع، وعد التسليم. وإن تغير العنوان تُحسب مسار الكابتن من جديد. (النظام)
- الطلب المغلَّف: لا يُعدَّل مورّده ولا بنوده من الرحلة نفسها. (النظام)

---

## ١٠. الإلغاء

### ١٠٫١ القاعدة العامة

- **من يلغي:** موظف لوحة التحكم الذي يملك صلاحية **إلغاء الطلبات** (صلاحية منفصلة عن الإسناد). والمتجر عبر واجهة الاستدعاءات، ضمن حدود في الجدول أدناه. الكابتن لا يلغي. (النظام)
- **السبب إلزامي** دائمًا. (النظام)
- **لا يُلغى** طلب سُلّم أو فشل أو أُلغي أصلًا. (النظام)
- **ما يحدد الكلفة** هو سؤال واحد: **هل ذهب كابتن واستلم شيئًا قبل الإلغاء؟** الجواب «نعم» يعني أن رحلة حدثت، فيدفع المتجر. الجواب «لا» يعني لا كلفة.

### ١٠٫٢ الإلغاء بحسب مرحلة الطلب

| المرحلة وقت الإلغاء | من يستطيع الإلغاء | أجر التوصيل | أجر الكابتن | البضاعة | الإشعار |
|---|---|---|---|---|---|
| **قيد الانتظار** | المكتب، المتجر | لا يُحمَّل | لا شيء | لا شيء | لا كابتن ليُبلَّغ |
| **تم الإسناد** (العرض قائم) | المكتب، المتجر | لا يُحمَّل | لا شيء | لا شيء | إشعار «أُلغي الطلب» للكابتن؛ تُحرَّر سعته ويخرج الطلب من مساره |
| **تم القبول، ولم يُستلَم شيء** | المكتب، المتجر | لا يُحمَّل | لا شيء | لا شيء | كما سبق |
| **تم القبول، واستُلم من بعض المورّدين فقط** | **المكتب فقط** (يُمنع المتجر بخطأ ٤٠٩) | **يُحمَّل على المتجر** | أجر رحلة للكابتن | **تعود إلى المورّدين الذين استلم منهم** | إشعار «أعد البضاعة» يسمّي المورّدين الذين وصلهم فقط؛ تنبيه للمكتب؛ الطلب يحمل «بضاعة بانتظار الإعادة» |
| **تم الاستلام** (كل المورّدين) | **المكتب فقط** | يُحمَّل على المتجر | أجر رحلة للكابتن | تعود إلى المورّدين | كما سبق |
| **في الطريق** | **المكتب فقط** | يُحمَّل على المتجر | أجر رحلة للكابتن | تعود إلى المورّدين | كما سبق |
| **تم التسليم / فشل / ملغى** | **لا أحد** | — | — | — | رفض بخطأ ٤٢٢ |

**لماذا يُمنع المتجر بعد أول استلام؟** لأن إخراج بضاعة من سيارة قرار تشغيلي، والمكتب هو من يقرره. يُمنع المتجر بمجرد أن يستلم الكابتن من أي مورّد، أو أن تصل رحلة تجميع إلى محل التغليف، حتى لو بقيت حالة الطلب «تم القبول». (النظام)

### ١٠٫٣ ما يحدث عند أي إلغاء (النظام)

1. حالة الطلب «ملغى» وسجل فيه: من ألغى، متى، ولماذا.
2. تُحرَّر **سعة الكابتن** فورًا ليتلقى طلبات جديدة.
3. يخرج الطلب من **مسار الكابتن** ويُعاد حسابه.
4. يصل **تحديد للمتجر** بالإلغاء، وتصل **إشعارات** لموظفي لوحة التحكم.
5. إن كانت هناك رحلة بُذلت: تُسجَّل أجرة التوصيل على حساب المتجر وأجر الكابتن، **مرة واحدة** لكل طلب.
6. إن كان الطلب **معروضًا للتسليم بين كابتنين** وقت الإلغاء (أو التسليم أو الفشل): يُلغى العرض فورًا ويخرج الطلب من صندوق الكابتن المستلم، ويصله إشعار «أُلغي الطلب» إن كان الإنهاء إلغاءً.

### ١٠٫٤ الإلغاء بعد استلام جزء من البضاعة (حالة كثيرة الحدوث)

حين يستلم الكابتن من المورّد (أ) ولا يستلم من المورّد (ب) ثم يُلغى الطلب: (النظام)

1. **كلفة الرحلة على المتجر**، لأن الكابتن وصل إلى مورّد وأنفق وقتًا. وتُحسب الرحلة «تمّت» من أي مورّد استُلم منه، لا من تأكيد آخر مورّد فقط.
2. يصل الكابتن إشعار **«أعد البضاعة»** باسم المورّد (أ) فقط، لأن (ب) لم يستلم منه شيئًا.
3. تظهر على الطلب علامة **«بضاعة بانتظار الإعادة»** مع قائمة الأماكن التي تعود إليها البضاعة، وتبقى حتى يؤكد المكتب أنها عادت.
4. ما دفعه الكابتن للمورّد (أ) يبقى **دَينًا له على الشركة** إلى أن يعيد المورّد المبلغ. عندها يسجّل المكتب من الطلب **«مبلغ أعاده المورّد»** مقابل الدفعة نفسها (صلاحية إلغاء الطلبات): ينقص رصيد الكابتن بقدر ما صار في يده، وتظهر كلفة البضاعة على الطلب بما كانت فعلًا. يجوز أن يعود المبلغ على دفعات، **لكن مجموعه لا يتجاوز ما دُفع**. ولا يُسجَّل إلا بعد أن يكون الطلب قد انتهى (ملغى أو فاشلًا)، ويلزمه سبب يقول من أين جاء المبلغ.
5. يؤكد المكتب «عادت البضاعة» ومعه ملاحظة، فتُغلق المسألة.

### ١٠٫٥ الطلب المغلَّف عند الإلغاء

- إلغاء أي رحلة يلغي الرحلتين معًا. (النظام)
- لو أُلغي والبضاعة في سيارة كابتن التجميع: تُطبَّق خطوات ١٠٫٤ على رحلة التجميع. (النظام)
- لو أُلغي بعد أن وصلت البضاعة إلى **محل التغليف**: لا يحملها كابتن، فلا إشعار على هاتف. يضع النظام على طلب التسليم علامة **«بضاعة بانتظار الإعادة» عند محل التغليف** مع اسم المحل وعنوانه، ويصل المكتب تنبيه بأنها هناك بانتظار توصيل لن يتم، ويرتّب المكتب استلامها وإعادتها ثم يؤكد. وإن كان كابتن التسليم قد استلم الطرد من المحل فعلًا فالبضاعة **عند الكابتن** وتُطبَّق خطوات ١٠٫٤. (النظام)
- كابتن تسليم لم يستلم شيئًا بعد يصله إشعار «أُلغي الطلب» العادي، لا «أعد البضاعة». (النظام)

### ١٠٫٦ إلغاء بند واحد دون إلغاء الطلب (النظام)

- يُلغى البند من لوحة التحكم مع سبب، **قبل «تم الاستلام» فقط**.
- يُعاد حساب إجمالي الطلب وأجر التوصيل (قد تتغير شريحة القيمة).
- إن كان الكابتن قد أتمّ كل ما بقي له من المورّدين، ينتقل الطلب إلى «تم الاستلام» كأنه استلم.
- **لا يُلغى** بند استُلم فعلًا (تُقبل الكمية الناقصة بدلًا من ذلك)، ولا **آخر بند** (يُلغى الطلب كله)، ولا بند على رحلة تجميع مباشرة (يُلغى من طلب التسليم).
- حين تُلغى **كل بنود مورّد** يظهر المورّد في الطلب بحالة **«ملغى»** باللون الأحمر ولا يُنتظر منه شيء.

### ١٠٫٧ حالات لا تُعدّ إلغاءً

| الحالة | ما نفعله |
|---|---|
| العميل رفض الاستلام عند الباب، أو لا يردّ، أو العنوان خاطئ | **فشل تسليم** بسبب، لا إلغاء. يُحمَّل المتجر، ويُدفع للكابتن، وتعود البضاعة. |
| الكابتن لا يريد الطلب قبل الاستلام | **رفض**، يعود الطلب للانتظار. |
| مورّد لا يسلّم | **تعذّر استلام من مورّد**، لا إلغاء. |
| المتجر أراد تغيير العنوان | **تعديل** وفق القسم ٩. |
| طلب مدفوع مسبقًا وطلب العميل استرداد ماله | يحوّل المتجر الدفع إلى «مستردّ». بعدها **لا يُسلَّم** الطلب ولا يُحصَّل عليه مال. |

---

## ١١. الإشعارات التي تصل الكابتن

| الحدث | الإشعار |
|---|---|
| إسناد طلب | «طلب جديد» ويبيّن أنه مُكلَّف به إن كان موظفًا |
| إلغاء قبل أي استلام | «أُلغي الطلب» مع السبب |
| إلغاء بعد استلام جزء أو الكل | «أعد البضاعة» مع أسماء المورّدين الذين وصلهم |
| تعديل ما يخصه | «تغيّر الطلب» مع ذكر ما تغيّر |
| قبول تسليم من كابتن آخر | عبر صندوق التسليمات |

---

## ١٢. ما أُغلق من الثغرات وما بقي

القائمة التي كُتبت أول مرة (ثماني ثغرات) نُفِّذ منها ما يلي، وكل بند له اختبارات تغطيه:

| # | الثغرة | الحال |
|---|---|---|
| ١ | كلفة الإلغاء بعد استلام جزء | **أُغلقت:** تُحسب الرحلة من أي مورّد استُلم منه (المتجر يدفع، والكابتن يُدفع له) |
| ٢ | منع المتجر بعد الاستلام الجزئي | **أُغلقت:** خطأ ٤٠٩ بمجرد أول استلام، أو وصول تجميع إلى محل التغليف |
| ٣ | إعادة البضاعة من محل التغليف | **أُغلقت:** علامة وتنبيه للمكتب مع مكان البضاعة |
| ٤ | استرداد ما دفعه الكابتن للمورّد | **أُغلقت:** قيد «مبلغ أعاده المورّد» مقابل الدفعة، بسقف ما دُفع |
| ٥ | إلغاء أثناء تسليم معلّق بين كابتنين | **أُغلقت:** يُلغى العرض ويُبلَّغ الكابتن المستلم |
| ٦ | متى يُعدّ التسليم فاشلًا | **أُغلقت جزئيًا:** عدد محاولات الاتصال يُسجَّل ويمكن إلزامه، **لكنه معطَّل افتراضيًا** إلى أن يصدر التطبيق به. لا يوجد بعد حدّ زمني للانتظار عند العميل |
| ٧ | طلب بلا كابتن لساعات | **أُغلقت:** تنبيه بعد ٦٠ دقيقة، مرة كل يوم |
| ٨ | صياغة أجر رحلة التجميع | **أُغلقت:** تكسب أجر تجميع لا أجر توصيل |

**ما بقي بحاجة إلى قرار أو عمل:**

1. **تفعيل شرط محاولات الاتصال:** يحتاج أن يرسل تطبيق الكابتن `call_attempts` مع «فشل التسليم». وإلى ذلك لا يُفرض.
2. **حدّ زمني للانتظار عند العميل** قبل تسجيل الفشل: لا يعرف النظام وقت وصول الكابتن إلى الباب. يحتاج حدث «وصلت» من التطبيق.
3. **عرض عدد محاولات الاتصال في لوحة التحكم:** مُسجَّل ويصل في الواجهة، لكنه غير معروض على شاشة الطلب بعد.
4. **لم يُجرَّب إشعار فعلي على جهاز حقيقي:** كل الاختبارات تتحقق من أن الإشعار يُرسَل إلى الكابتن بمحتواه الصحيح، لا من وصوله عبر الخدمة إلى الهاتف.
