Files
shop-server/docs/superpowers/specs/2026-05-15-order-status-simplification-design.md
T
Kirill f855568687 refactor: simplify order status model — remove DELIVERY_FEE_ADJUSTMENT and PAYMENT_VERIFICATION
- Add deliveryFeeLocked field to Order model
- Remove DELIVERY_FEE_ADJUSTMENT and PAYMENT_VERIFICATION statuses (11→8)
- 3 order paths: delivery+online (locked→unlocked→paid), pickup+online (unlocked→paid), pickup+on_pickup (direct to in_progress)
- Update checkout to use PENDING_PAYMENT + deliveryFeeLocked
- Update payment flow to stay in PENDING_PAYMENT until admin confirms
- Update admin UI to use deliveryFeeLocked instead of status check
- Update client payment UI with new deliveryFeeLocked logic
2026-05-15 21:55:14 +05:00

3.5 KiB
Raw Blame History

Дизайн: Упрощение статусной модели заказов (A+B)

Дата: 2026-05-15 Статус: Утверждено

Проблема

Текущая модель заказов содержит 11 статусов, из которых два (DELIVERY_FEE_ADJUSTMENT, PAYMENT_VERIFICATION) являются промежуточными и могут быть заменены флагами/логикой.

Решение

Убрать 2 статуса, добавить флаг deliveryFeeLocked. Итого: 9 → 8 статусов (было 11).

Удалённые статусы

Было Чем заменяется
DELIVERY_FEE_ADJUSTMENT Флаг deliveryFeeLocked: Boolean на заказе
PAYMENT_VERIFICATION Заказ остаётся в PENDING_PAYMENT до ручного подтверждения

Новая статусная модель

DRAFT ──→ PENDING_PAYMENT ──→ PAID ──→ IN_PROGRESS ──┬─→ SHIPPED ──────────┐
                                                     │                      │
                                                     └─→ READY_FOR_PICKUP ──┤
                                                                            ▼
                                                                          DONE

CANCELLED ←── (из любого статуса, кроме DONE и CANCELLED)

Логика deliveryFeeLocked

Значение Админ Клиент
false Может менять deliveryFeeCents Видит "ожидает утверждения доставки", оплата недоступна
true Не может менять доставку Видит кнопку оплаты

Переходы (admin)

Из В
DRAFT PENDING_PAYMENT, CANCELLED
PENDING_PAYMENT PAID, CANCELLED
PAID IN_PROGRESS, CANCELLED
IN_PROGRESS (delivery) SHIPPED, CANCELLED
IN_PROGRESS (pickup) READY_FOR_PICKUP, CANCELLED
SHIPPED (нет)
READY_FOR_PICKUP (нет)
DONE (нет)
CANCELLED (нет)

Миграция данных

Все заказы в статусе DELIVERY_FEE_ADJUSTMENTPENDING_PAYMENT + deliveryFeeLocked: false. Все заказы в статусе PAYMENT_VERIFICATIONPENDING_PAYMENT.

Изменяемые файлы

  1. server/prisma/schema.prisma — добавить deliveryFeeLocked Boolean @default(false)
  2. shared/constants/order-status.js — убрать 2 статуса
  3. shared/constants/order-status.d.ts — убрать 2 статуса
  4. server/src/lib/order-status.js — обновить canTransitionAdminOrderStatus
  5. client/src/shared/constants/order.ts — обновить getAdminNextOrderStatuses
  6. client/src/shared/lib/order-status-labels.ts — убрать подписи
  7. server/src/routes/user-orders.js — убрать DELIVERY_FEE_ADJUSTMENT
  8. server/src/routes/user-payments.js — убрать PAYMENT_VERIFICATION
  9. server/src/routes/api/admin-orders.js — добавить эндпоинт deliveryFeeLocked, убрать проверки
  10. client/src/pages/admin-orders/ui/AdminOrdersPage.tsx — обновить UI
  11. client/src/features/order-payment/ui/OrderPaymentSection.tsx — обновить UI
  12. server/src/lib/__tests__/order-status.test.js — обновить тесты