Деньги вернулись, а бонусный баланс остался прежним
После возврата покупатель может получить деньги и одновременно сохранить баллы, начисленные за уже отменённую покупку. Бывает и обратная ошибка: использованные баллы исчезли, хотя правила магазина обещают их восстановить. Для магазина с бонусной программой разберём отдельный учёт денег, расхода баллов и начисления за заказ, чтобы возврат менял каждую часть по принятому правилу.
Баланс не объясняет историю. Если сотрудник видит только итоговое число, он не сможет понять, какие баллы были потрачены при покупке и какие появились благодаря ей. Это две разные операции. Возврат требует связи с исходным заказом. Иначе ручная прибавка баллов может скрыть ошибку на время, а следующая отмена восстановит их повторно или оставит лишнее начисление после завершённого возврата. При обращении клиенту полезнее получить объяснение конкретной покупки и её отмены, чем заверение о правильности текущего числа, которое не раскрывает происхождение доступных баллов.
Я бы начинал исправление с истории операций по одному заказу, поскольку изменение текущего остатка без основания не раскрывает причину и усложняет следующий разбор, когда покупатель уже успел использовать полученные баллы в другой покупке. Оператору нужны исходные суммы и состояние каждой операции. Итоговый баланс затем получится из этой истории.
Скидка не отменяет обычные основания возврата
Акционная цена не превращает товар в невозвратный. Основание возврата оценивают по виду покупки и причине обращения. Сам факт скидки не закрывает требования покупателя.
В разъяснении Роспотребнадзора указано, что товары по акции возвращают на общих основаниях. Для технического задания это означает необходимость обработать принятый возврат, даже если покупка содержала скидку. Юридическую допустимость конкретного требования определяет ответственный сотрудник. Разработчику передают уже выбранный порядок и данные операции, а не поручают автоматически отклонять всякий акционный товар.
Баллы нельзя автоматически обналичивать. Как поясняет Роспотребнадзор, денежный возврат относится к фактически внесённой денежной части; восстановление списанных баллов определяется правилами магазина. Эти правила требуется записать до доработки программы.
Лучше назвать денежную часть и баллы отдельными строками, чем показывать единое обещание вернуть всю стоимость, потому что клиент читает его как сумму денег, а сотрудник может иметь в виду восстановление скидочного права внутри программы лояльности. Если ситуация требует иного расчёта по основаниям закона, её передают ответственному специалисту. Пример ниже относится к сверке исходной покупки и её обратных операций.
Какие сведения восстановить из исходного заказа
Для расчёта нужен тот заказ, который оплатил покупатель. Нынешняя цена каталога и текущие условия акции могут уже отличаться от первоначальных.
В описании заказов Битрикс поле «Величина скидки на товар» выделено отдельно. Поле «Купоны заказа» хранит использованные купоны. Они помогают найти исходные условия покупки, но не создают автоматически историю вашей бонусной программы. Её связь с заказом специалист показывает отдельно. Покупатель и сотрудник видят понятное распределение по возвращаемым позициям.
Исходную покупку сохраняют целиком. Для частичного возврата записывают исходную стоимость каждой позиции, её фактическую скидку и распределённую денежную часть, чтобы сотрудник мог связать возвращаемое количество с первоначальным расчётом и объяснить сумму по выбранному товару.
| Поле | Что объясняет |
|---|---|
| Исходный заказ | Связь с оплаченной покупкой |
| Возвращаемая позиция | Товар и количество |
| Денежная часть | Что относится к возврату денег |
| Использованные баллы | Что восстанавливается по правилам программы |
| Начисленные баллы | Какое начисление пересматривают |
| Основание операции | Какой возврат вызвал изменение |
| Повторная обработка | Почему то же событие не меняет баланс дважды |
В лист включают и направление обмена с учётной системой, если баланс ведётся вне сайта, потому что локальная запись об успешном восстановлении не поможет покупателю, когда следующий обмен снова принесёт прежнее значение и перепишет видимый остаток. За одно движение отвечает выбранный источник. Сайт сообщает человеку итог этого движения без создания конкурирующей копии баланса.
Расчёт показывает три независимых изменения
Простой пример полезнее общей команды пересчитать бонусы. Возьмём полный возврат покупки без дополнительных оснований для изменения денежного расчёта и заранее примем правило восстановления использованных баллов.
В расчётном примере цена после обычной скидки равна 2 000 рублям. Покупатель использовал 300 баллов по принятому в примере равенству балла и рубля скидки. Остальные 1 700 рублей оплачены деньгами. После покупки программа начислила ещё 100 баллов. При полном возврате денежная и бонусная части отражаются раздельно.
При выбранных правилах денежная обратная операция относится к 1 700 рублям. Использованные баллы восстанавливают отдельной записью. Начисление за возвращённую покупку отменяют. Это три направления движения, и сумма одного из них не подменяет другое. Пример описывает выбранный порядок программы, а не универсальное правило всех магазинов.
Для автоматизации лучше передать исполнителю такой расчёт вместе с условиями программы, потому что фраза о возврате бонусов может означать и восстановление прежнего расхода, и отмену нового начисления, а одинаковое слово скрывает противоположные изменения баланса. Потом по этому же заказу показывают результат в кабинете. Человек понимает, какие деньги возвращены и почему число баллов изменилось именно так.
Возврат расходится на разные операции
Деньги
Возвращаемая денежная часть исходной покупки.
Использованные баллы
Восстановление по принятому правилу программы.
Начисление
Пересмотр баллов за возвращённую покупку.
Частичный возврат не равен отмене всего заказа
Возвращённая позиция затрагивает только часть покупки. Общая скидка могла распределяться между товарами, поэтому нельзя просто взять текущую цену карточки и вычесть её из итога.
Для частичного возврата сохраните распределение на момент покупки, затем примените утверждённые правила к возвращаемому количеству, чтобы сотрудник мог объяснить денежную часть и бонусное изменение без пересчёта по новой акции, которой покупатель не пользовался. Если скидка зависела от набора товаров, спорный пересмотр оставшейся покупки требует отдельного правового и коммерческого решения. Его нельзя молча встроить в код как универсальную формулу. В программе описывают именно принятый компанией порядок. Основание выбора остаётся доступным сотруднику.
В списке сведений заказа Битрикс «Оплаты» и «Отгрузки» представлены раздельно. Эти сущности полезно различать и при приёмке возврата: движение денег и состав возвращаемого товара относятся к одному обращению, но завершаются разными действиями.
Предпочтительнее сохранить исходную скидку позиции в истории, чем заново запускать актуальные правила корзины над старым заказом, потому что новая кампания может дать другую сумму и сотрудник потеряет возможность восстановить договорённость на дату покупки. Повторный расчёт допустим только как специально описанное действие. Его результат виден до подтверждения возврата.
Что делать с уже использованным начислением?
Покупатель мог потратить новые баллы до возврата товара. Простое вычитание начисления тогда приводит к отрицательному остатку или исчезновению скидки в другой покупке. Это нужно решить заранее.
Правило выбирает владелец программы. Возможны разные способы учёта задолженности по баллам и будущих начислений, но интерфейс не может обещать один результат, пока фактическая система делает другой. Сначала опишите последствия для покупателя обычными словами. Затем юрист и ответственный за программу оценивают допустимость условий. Разработчик показывает, как эти условия действуют на связанную историю операций.
Не стирайте прежний расход ради красивого баланса, поскольку он уже повлиял на другую покупку и его удаление разорвёт историю обеих операций, после чего сотрудник будет вручную объяснять расхождение денег и скидки между несколькими заказами. Лучше отдельная запись с причиной. Она позволяет разобрать вопрос, не придумывая задним числом новое содержание совершённых покупок.
Связь между двумя покупками
Первая покупка
Создала начисление баллов.
Следующая покупка
Использовала часть этого начисления.
Возврат первой
Требует принятого правила пересмотра, сохраняя историю второй.
Повторное сообщение не создаёт второй возврат
Обмен может передать одно событие ещё раз. Если обработка каждый раз прибавляет баллы, повтор связи превратит возврат в новое начисление.
У обратной операции нужен узнаваемый источник: исходный заказ и конкретный возврат, чтобы система отличала повтор доставки сведений от нового обращения по другой позиции того же заказа. Это требование к поведению, а технический идентификатор подбирают специалисты. В испытании сначала проводят возврат. Затем повторяют то же сообщение или разрешённое действие в тестовой среде. История сохраняет одну обратную операцию с прежней суммой.
В Битрикс поле «Комментарии покупателя» отделено от служебных сведений заказа. Его назначение указано в документации. Не стоит использовать свободный комментарий как единственный признак уже выполненного возврата: сотрудник может изменить текст, а программе нужна устойчивая связь операций.
Образец задания: «Возврат хранит ссылку на исходный расход и начисление. Повтор события не меняет суммы повторно. Частичный возврат использует сохранённое распределение. Оператор видит деньги и баллы отдельными строками». После согласования правил этот текст превращается в сценарии испытания.
Случайная правка баланса вернётся следующим спором
Необъяснимый остаток подрывает доверие к программе. Покупатель перестаёт понимать ценность баллов, а сотрудник тратит время на ручные исключения.
Исправление завершено, когда история объясняет исходную покупку и каждое обратное движение, включая повтор и частичный возврат, потому что текущий баланс может случайно совпасть с ожидаемым, хотя следующая загрузка данных снова разрушит это совпадение. Для приёмки нужны полный возврат и отдельный частичный. Затем испытывают уже потраченное начисление. Ожидаемые результаты записаны по утверждённым правилам. Денежные операции и бонусные изменения не смешиваются в одной необъяснимой сумме. В кабинете остаётся понятное описание изменения, по которому человек узнаёт возвращённую покупку.
Если подходящего порядка пока нет, сначала опишите его вместе с ответственным за программу. Передать на доработку магазина готовую арифметику и таблицу операций надёжнее, чем просить просто починить бонусы: исполнитель понимает, какой результат принять и по какой истории его воспроизвести.
Источники и полезные ссылки
Интерфейсы и возможности сервисов могут меняться. Перед настройкой сверяйтесь с актуальной документацией.


