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