RIDERSRUN

Заказ, который хранит свою историю

Самостоятельный состав, индивидуальные цены, версии и корректировки.

Каталог меняется. Заказ сохраняется

У каждой позиции собственный постоянный ID, название, артикул, цвет, размер, количество и цена в копейках. Каталог используется для выбора новой позиции; последующие изменения каталога не переписывают согласованный состав. Ручной товар или услуга не создают складских движений.

Распределение по складам хранится отдельно внутри строки. Покупатель видит одну позицию, даже когда ее собирают в двух местах.

Создать заказ

Открыть состояние целиком

Вкладка «Версии» содержит неизменяемые снимки: состав, цены, контакты, доставка, источник и комментарий, автор и время. Сравнение сопоставляет строки по ID. Восстановление создает новую версию, не стирая платежи, отправки и складские факты.

Сохранение требует expectedVersion и idempotencyKey. Конфликт возвращает 409; повтор того же запроса не создает вторую правку. После отгрузки состав изменяется отдельным возвратом или новым заказом.

GET /api/v1/admin/orders/{id}/versions
POST /api/v1/admin/orders/{id}/edit
POST /api/v1/admin/orders/{id}/versions/{revision}/restore

Индивидуальная цена и доплата

Для изменения цены нужно отдельное право и причина. После оплаты подтверждается корректировка: повышение оставляет сумму доплаты, снижение создает отдельный возврат. Прайс-лист магазина не меняется. После частичного возврата коммерческое редактирование заблокировано: оставшаяся покупка и возвраты должны сохранять точный учет.

В публичном стенде финансовые операции тестовые. Корректировки внешнего платежа требуют сверки с провайдером; они не выдаются за выполненный банковский возврат.

POST /api/v1/admin/orders/{id}/refund-lines
{"generationId":"FROM_SESSION","expectedVersion":"FROM_ORDER","idempotencyKey":"UNIQUE","reason":"Возврат одной пары","lines":[{"lineId":"FROM_ORDER","quantity":1}]}