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

73 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Дизайн: Упрощение статусной модели заказов (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_ADJUSTMENT``PENDING_PAYMENT` + `deliveryFeeLocked: false`.
Все заказы в статусе `PAYMENT_VERIFICATION``PENDING_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` — обновить тесты