Автоматизация процессов

Автоматизация возвратов товара: заявление, обратная доставка и подтверждение оплаты

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

Схема разделяет обращение покупателя, обратную доставку, складскую приёмку и подтверждённый возврат денег

Руководитель интернет-магазина видит одно обращение клиента, но внутри него проходят три разных процесса: регистрация запроса, движение товара и возврат денег. Если свести их к одному статусу «возврат оформлен», система может преждевременно изменить остаток, сообщить о несуществующей выплате или повторно отправить денежную команду.

Автоматизация возвратов товара должна связывать события, не смешивая их. Заявление открывает процесс. Обратная доставка показывает движение отправления. Приёмка подтверждает фактически полученное количество и состояние. Refund фиксирует отдельную денежную операцию.

Какую задачу решает этот процесс

Представим ситуацию руководителя интернет-магазина: покупатель заказал несколько товаров и хочет вернуть один. Сотрудник принял заявление, перевозчик создал номер отправления, склад ещё ничего не получил, а деньги пока не возвращены. Руководителю нужно видеть реальное состояние каждого этапа, а не общий оптимистичный статус.

Целевой результат — возврат проходит от обращения до фактического товарного и денежного события. Для этого процесс хранит три связанные, но независимые сущности:

  1. Обращение фиксирует, что покупатель запросил возврат конкретной строки заказа и количества.
  2. Товар проходит разрешение на возврат, обратную доставку и приёмку.
  3. Деньги проходят согласование суммы и отдельную операцию refund с подтверждением платёжного провайдера.

Граница процесса тоже важна. Рекламация оценивает претензию и основания для решения. Бот статуса только сообщает уже записанное состояние; он не определяет право на возврат и не заменяет решение специалиста. Подробнее о такой информационной роли диалога — в материале про бота статуса заказа.

Какие данные и правила подготовить

До настройки автоматизации определите источник каждого поля, ответственного за него и момент, когда значение становится известным. Обязательные поля нужны для регистрации запроса. Условные появляются только на соответствующем этапе. Неизвестное нельзя заменять догадкой.

Ниже — короткий синтетический образец. Все идентификаторы, названия, количества и статусы условны и не относятся к клиенту Switch On AI.

Поле и условное значениеИсточникОтветственныйТребование
order_id = ORD-1007Система заказовВладелец процесса продажОбязательное
order_line_id = LINE-02Система заказовВладелец процесса продажОбязательное
ordered_qty = 1Строка заказаВладелец процесса продажОбязательное
return_qty = 1Заявление с проверкой по строкеОператор поддержкиОбязательное
reason = не подошёл размерЗаявление покупателяОператор поддержкиОбязательное для процесса, но не юридическая оценка
return_authorization = RMA-204Процесс возвратаОтветственный за возвратыУсловное: после разрешения
tracking_id = TRK-8801Данные перевозчикаЛогистУсловное: после оформления доставки
inspection_result = принят, комплектность подтвержденаСкладская приёмкаСотрудник складаНеизвестное до получения товара
refund_idПлатёжный провайдерФинансовый ответственныйНеизвестное до создания операции

Если таблица не помещается, прокрутите её вправо. С клавиатуры используйте стрелки.

Отдельно согласуйте справочники причин, допустимые переходы статусов, правило расчёта суммы и действия при расхождении. Юридические сроки и обязанности должен задать специалист заказчика на основании применимых норм и условий продажи — автоматизация не выводит их из причины обращения.

Как зарегистрировать возврат по конкретному товару

Заявление нужно связать не только с номером заказа, но и с конкретной строкой. Иначе частичный возврат может закрыть весь заказ или затронуть другой товар.

Для строки полезно хранить заказанное количество, ранее подтверждённые возвраты и новое запрошенное количество. Базовая проверка выглядит так:

return_qty ≤ ordered_qty − returned_qty_before

В синтетическом примере для LINE-02: ordered_qty = 1, returned_qty_before = 0, return_qty = 1. Подстановка даёт 1 ≤ 1 − 0, поэтому количество допустимо. Для двух остальных строк условного заказа return_qty = 0. Возвращается одна из трёх товарных единиц, а заказ целиком не закрывается.

После проверки система может зарегистрировать заявление и присвоить ему RMA — идентификатор разрешения или заказа на возврат. Официальная документация Microsoft Dynamics 365 Supply Chain Management описывает RMA как опорный идентификатор процесса и связывает строку возврата со строкой исходного заказа. Там же разделены физический возврат и операция без физического возврата. Это пример документированной модели конкретной платформы, а не подтверждение её использования или совместимости с магазином читателя.

Регистрация RMA организует работу, но не доказывает право покупателя на возврат. Такое решение принимает уполномоченный специалист заказчика по установленным правилам.

Как пройти путь от обратной доставки до приёмки

События движения товара должны идти последовательно:

  1. Создано разрешение RMA-204.
  2. Зарегистрирован номер отправления TRK-8801.
  3. Отправление передано перевозчику.
  4. Товар фактически получен складом.
  5. Склад проверил количество, комплектность и состояние.

Созданная накладная означает только подготовку обратной доставки. Даже переданное перевозчику отправление остаётся товаром «в пути», а не «принято». Результат приёмки появляется после фактического получения и проверки.

Если склад обнаружил недостачу или расхождение состояния, интеграция создаёт отдельную задачу ответственному и сохраняет исходные данные проверки. Она не должна принимать решение только по статусу накладной. Дальнейшее действие — принять товар, отклонить его, вернуть покупателю или применить другой согласованный вариант — определяет специалист заказчика.

Момент изменения учётного остатка тоже задаётся правилами используемой системы. Статус «принят» сам по себе не позволяет утверждать, что остаток уже увеличен.

Как подтвердить возврат денег

Перед денежной операцией финансовый ответственный или согласованное правило подтверждает количество, сумму и метод возврата. Система сохраняет основание расчёта, идентификатор операции и финальный статус провайдера.

Для защиты от повтора денежной команде нужен стабильный ключ, составленный из данных процесса. В синтетическом примере это ORD-1007:LINE-02:RMA-204. Повторное обращение с тем же ключом не должно создавать новый refund.

Если провайдер принял операцию, процесс сохраняет refund_id и ожидает финального состояния. Полученный статус succeeded подтверждает завершение именно этой операции. Если провайдер отвечает отказом или не возвращает финальный статус, автоматизация создаёт отдельную задачу финансовому ответственному. Она не запускает бесконтрольный новый возврат денег.

Повтор webhook тоже обрабатывается идемпотентно: уже известное событие обновляет или подтверждает сохранённое состояние, но не создаёт вторую денежную операцию.

Учебный пример: путь от входных данных до результата

Ниже — полностью синтетический учебный пример, а не клиентский кейс, файл проверки или результат внедрения Switch On AI. Все названия, идентификаторы, суммы, количества и статусы условны.

В ORD-1007 находятся три товарные единицы в трёх строках. Покупатель возвращает только LINE-02: одна заказанная единица, ранее подтверждённых возвратов нет, запрошена одна единица. Остальные две строки не меняются.

Условная цена LINE-02 — 2400 ₽. Склад принял одну единицу, согласованная корректировка — 0 ₽. Поэтому учебный расчёт воспроизводится так:

refund_amount = unit_price × accepted_qty − agreed_adjustment

2400 × 1 − 0 = 2400 ₽

В расчёт не входят два других товара. Возврат стоимости доставки не предполагается: для него понадобилось бы отдельное правило заказчика.

ЭтапДокумент или событиеОтветственныйСтатус товараСтатус денег
ЗаявлениеУсловный запрос по LINE-02, return_qty = 1ОператорУ покупателяНе начат
РазрешениеУсловный RMA-204Ответственный за возвратыОжидает отправкиНе начат
Обратная доставкаУсловный TRK-8801ЛогистВ путиНе начат
ПриёмкаУсловный accepted_qty = 1Сотрудник складаПринятСумма подтверждена: 2400 ₽
RefundУсловный RF-501Финансовый ответственный и провайдерПринятsucceeded
Повтор webhookУсловный EV-900 получен повторноИнтеграцияБез измененияsucceeded, новая операция не создана

Если таблица не помещается, прокрутите её вправо. С клавиатуры используйте стрелки.

Первый webhook EV-900 переводит RF-501 в succeeded. Повтор того же EV-900 только подтверждает сохранённый статус. Итог учебного сценария: принят один товар, создана одна операция на 2400 ₽, refund_count = 1.

Главный вывод: принятие заявления ещё не меняет остаток и не означает выплату. Эти результаты появляются только после соответствующих товарных и денежных событий.

Учебная схема частичного возврата с отдельными статусами обращения, товара и денег и защитой от повторного webhook

Как проверить результат перед запуском

Проверка должна отдельно наблюдать обращение, товар и деньги. Частичный возврат не закрывает весь заказ, а сроки и обязанности не задаются без решения специалиста и применимого юридического основания.

СценарийОжидаемый результатСигнал ошибкиДействие человека
Нормальный путьУсловные accepted_qty = 1, refund_amount = 2400 ₽, refund_count = 1; две остальные строки заказа не измененыНет refund_id или финального статусаФинансовый ответственный сверяет операцию у провайдера и фиксирует решение
Недостача или товар не принятaccepted_qty = 0, автоматический refund не создаётсяreturn_qty не совпадает с accepted_qtyОтветственный изучает результат приёмки и выбирает дальнейшее действие
Повтор событияСохраняется один RF-501, новая выплата не создаётсяrefund_count стал больше 1Интеграцию останавливают для этой операции, финансовый ответственный сверяет платежи
Отказ провайдераСтатус отказа сохранён, создана отдельная задачаПроцесс показывает успех без финального подтвержденияФинансовый ответственный выясняет причину и отдельно разрешает следующее действие

Если таблица не помещается, прокрутите её вправо. С клавиатуры используйте стрелки.

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

Что согласовать для внедрения

Готовый инструмент может хранить заказы, RMA, складские события или платежи, но наличие таких сущностей не доказывает, что они уже связаны в нужной последовательности. До разработки нужно проверить конкретную версию системы, API, права доступа, доступные события и правила повторной обработки. Совместимость и тарифы подтверждаются отдельно.

Собственная интеграция может связывать строку заказа, обратную доставку, приёмку и refund, вести независимые статусы и передавать исключения человеку. ИИ-помощник уместен там, где нужно разобрать неструктурированное обращение и подготовить данные для проверки. Бот может принять заявление или показать сохранённый статус. Детерминированная интеграция выполняет согласованные проверки и обмен данными. Эти форматы не взаимозаменяемы.

Switch On AI разрабатывает ИИ-помощника, бота или интеграцию для описанной операции после проверки данных и API. Цель такого проекта — провести возврат от обращения до фактического товарного и денежного события, сохранив решения специалистов на предусмотренных этапах. Правила юридического, бухгалтерского и отраслевого учёта задаёт и проверяет специалист заказчика.

Следующий шаг — разобрать одну операцию возврата и согласовать прототип без замены учётной системы. Для разговора достаточно условного примера заказа, перечня систем и правил, по которым сотрудники сейчас принимают товар и подтверждают сумму. Прототип проверяет согласованный фрагмент сценария и не равен полноценному внедрению; состав, сроки и ожидаемый эффект без изучения процесса не определяются.

Вопросы по этой задаче

Чем возврат отличается от претензии?

Претензия требует оценки обстоятельств и решения уполномоченного специалиста. Процесс возврата организует связанный товарный и денежный поток после такого решения: заявление, обратную доставку, приёмку и refund. Бот статуса может сообщить записанное состояние, но не оценивает претензию.

Как учесть частичный возврат?

Заявление связывают с конкретной строкой заказа и количеством. Проверяют, что новое количество не превышает заказанное за вычетом уже подтверждённых возвратов. Остальные строки сохраняют свои статусы, поэтому возврат одной позиции не закрывает весь заказ.

Почему заявление не означает возврат денег?

Заявление только запускает процесс. Оно не подтверждает передачу товара перевозчику, складскую приёмку или денежную операцию. Выплату подтверждают отдельные данные: согласованная сумма, refund_id и финальный статус платёжного провайдера.