# Дизайн: Упрощение статусной модели заказов (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` — обновить тесты