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