Разделите события по смыслу
Отмена до отгрузки, невыкуп, возврат в пути, приёмка на складе и возврат в продажу — отдельные этапы. У каждого есть собственное время и вероятность завершения. Одного признака возврата недостаточно, чтобы считать товар доступным покупателю.
Составьте таблицу событий для каждой схемы работы: какой статус уменьшает резерв, какой только создаёт ожидание, какой подтверждает физическое наличие и какой переводит товар в брак или проверку качества. Такая модель убирает догадки из синхронизации.
Храните остаток в нескольких состояниях
Минимальный набор включает доступный остаток, резерв, товар в пути, возврат на проверке и недоступный товар. Для продажи и передачи на другие площадки используется только подтверждённый доступный остаток. Остальные состояния нужны для прогноза, но не должны увеличивать витринное количество.
Если физически одна единица продаётся в нескольких магазинах, добавьте защитный буфер. Пока возврат не принят и не проверен, он не компенсирует заказ на другой площадке. Иначе оптимистичная синхронизация создаст оверселл именно в момент, когда данные наиболее нестабильны.
Защититесь от дублей и неправильного порядка
API и очереди могут повторно доставить одно событие или прислать обновления не по порядку. Обработчик должен узнавать операцию по стабильному идентификатору и безопасно принимать повтор без второго изменения остатка. Записывайте время события на площадке и время получения в вашей системе.
Перед переходом в новое состояние проверяйте допустимую последовательность. Поздний статус не должен вернуть товар из приёмки обратно в путь только потому, что сообщение пришло позже. Спорные случаи лучше отправлять на сверку, сохраняя последнее подтверждённое доступное количество.
Не смешивайте валовые и чистые продажи
Заказ показывает спрос, но не всегда становится выкупом. Для оперативной воронки полезны валовые заказы, для прибыли — продажи после отмен и возвратов, а для прогноза запасов нужны оба ряда с задержкой. Одна метрика не отвечает на все вопросы.
Если возвраты приходят через недели, резкое ухудшение чистых продаж может относиться к прошлому периоду и другой цене. Репрайсеру нельзя трактовать его как мгновенную реакцию рынка. Сопоставляйте возврат с исходным заказом, ценой, акцией и причиной, когда она доступна.
Поставьте предохранители для ценовых решений
При всплеске отмен, массовом возврате или расхождении остатков автоматическое изменение цены лучше приостановить. Система должна дождаться свежей сверки, проверить доступность товара и отделить операционный сбой от реального изменения спроса.
Полезны минимальный объём наблюдений, период охлаждения после аномалии и ограничение шага. Если доступный остаток вырос только за счёт неподтверждённых возвратов, правило распродажи не должно снижать цену. Если чистые продажи временно упали из-за поздней корректировки, AI должен показать низкую уверенность.
Синхронизируйте площадки после подтверждения
Общий остаток пересчитывайте после каждого подтверждённого перехода, а обновления отправляйте через очередь. Для одной операции должен существовать один источник правды, иначе возврат на Ozon и ручная корректировка на Wildberries могут независимо увеличить одно и то же физическое количество.
При недоступности API сохраняйте задачу и повторяйте её без повторного применения бизнес-события. В интерфейсе показывайте, какое количество подтверждено, какое ожидает отправки и какая площадка ещё видит старое значение. Это помогает менеджеру не исправлять задержку вторым ручным изменением.
Проверяйте процесс метриками и журналом
Следите за дублями событий, временем от возврата до приёмки, долей товара после проверки, расхождением доступного остатка и числом приостановленных ценовых действий. Эти показатели быстрее находят слабое место, чем общая сумма возвратов.
ВитринаPro помогает связывать статусы заказов, доступный остаток, очередь синхронизации и решения по цене. Репрайсер получает подтверждённые сигналы, а менеджер видит, почему действие остановлено и какое событие нужно дождаться или проверить.
Частые вопросы
Когда возвращённый товар можно добавить в доступный остаток?
После подтверждённой приёмки и проверки состояния. Статус возврата в пути ещё не означает, что товар можно снова продать.
Чем отмена отличается от возврата для остатков?
Отмена до отгрузки обычно освобождает резерв, а возврат проходит путь, приёмку и иногда проверку качества перед возвратом в продажу.
Как повторное событие не должно менять остаток дважды?
Используйте стабильный идентификатор операции, журнал обработанных событий и идемпотентный переход состояния.
Когда нужно остановить репрайсер из-за возвратов?
При аномальном всплеске, расхождении доступного остатка, нарушении порядка статусов или нехватке свежих данных для уверенного решения.
Считайте возврат доступным остатком только после подтверждённой приёмки, а ценовые решения ставьте на паузу при несогласованных статусах.
Проверить на своих товарах