دورة حياة الطلب
تتحكم في حالة الطلب آلة حالات صريحة واحدة (order-state-machine.ts): 29 انتقالًا مسموحًا، لكل منها قائمة بمن يحق له تنفيذه والشروط التي تحرسه. لا شيء يكتب الحالة مباشرة. وتتحرك مجموعة طلب كل بائع بين هذه الحالات مستقلة.
قواعد أساسية
- الإلغاء ممكن فقط قبل READY_FOR_PICKUP، وينتهي حق المشتري في الإلغاء بمجرد قبول البائع. بعد الاستلام يصبح طريق المشتري هو الإرجاع.
- التسليم الفاشل يمكن إعادته حتى 3 مرات؛ ثم يُلغى الطلب.
- التسليم يتطلب إثبات تسليم مُتحققًا منه (ما لم يتجاوزه الموظفون).
- الإرجاع متاح لمدة 14 يومًا بعد التسليم.
- حالة COMPLETED ليست نهائية عمدًا: يمكن لاسترجاع بنكي أو مطالبة متأخرة إعادة فتحها كنزاع. الحالتان النهائيتان فقط هما CANCELLED وREFUNDED.
ثلاثة أنواع من الرفض
| رمز الخطأ | المعنى |
|---|---|
order.ILLEGAL_TRANSITION | الانتقال غير موجود (مثل PAID ← DELIVERED). |
auth.FORBIDDEN | الانتقال موجود لكن هذا الطرف لا يحق له تنفيذه (لا يستطيع المشتري تحديد طلبه كمدفوع). |
order.CANCELLATION_WINDOW_CLOSED، order.RETURN_WINDOW_CLOSED، delivery.PROOF_INVALID | الانتقال مسموح مبدئيًا، لكن أحد الشروط لم يتحقق. |
من يحق له تنفيذ كل انتقال
«الموظفون» تعني المسؤولين والمسؤولين الأعلى.
| الانتقال | من يحق له |
|---|---|
PENDING_PAYMENT → PAID / PAYMENT_FAILED | النظام (نتيجة الدفع) |
PAYMENT_FAILED → PENDING_PAYMENT | المشتري، النظام (إعادة المحاولة) |
PAID → CONFIRMED → PROCESSING → READY_FOR_PICKUP | البائع، الموظفون |
… → CANCELLED (before pickup) | المشتري (حتى قبول البائع فقط)، البائع، النظام، الموظفون |
READY_FOR_PICKUP → PICKED_UP → IN_TRANSIT → OUT_FOR_DELIVERY | السائق، النظام، الموظفون |
OUT_FOR_DELIVERY → DELIVERED | السائق (بإثبات مُتحقَّق)، الموظفون |
OUT_FOR_DELIVERY → FAILED_DELIVERY | السائق، النظام، الموظفون |
FAILED_DELIVERY → OUT_FOR_DELIVERY / CANCELLED | المرسِل، النظام، الموظفون |
DELIVERED → COMPLETED | النظام، الموظفون |
DELIVERED → RETURN_REQUESTED | المشتري (خلال 14 يومًا)، الموظفون |
RETURN_REQUESTED → RETURN_APPROVED | البائع، الموظفون |
RETURN_REQUESTED → DISPUTED | البائع، المشتري، الموظفون |
RETURN_APPROVED → RETURN_IN_TRANSIT | المشتري، السائق، النظام، الموظفون |
RETURN_IN_TRANSIT → RETURN_RECEIVED | البائع، الموظفون |
RETURN_RECEIVED → REFUNDED | النظام، الموظفون |
COMPLETED → DISPUTED | المشتري، الموظفون |
DISPUTED → COMPLETED / REFUNDED | الموظفون فقط |
معلومة مهمة
انتقال DELIVERED ← COMPLETED معرّف للنظام، لكن لا توجد مهمة مجدولة في العامل الخلفي تنفّذه اليوم؛ تبقى الطلبات في حالة DELIVERED حتى يكملها الموظفون. وتعامل المرتجعات والتقييمات الحالتين DELIVERED وCOMPLETED بالطريقة نفسها.