Начисление и списание бонусов при изменении заказа
Текущая функциональность позволяет производить изменения в заказе при наличии списания и начисления бонусов на этапе создания заказа. При регистрации запроса изменения заказа происходит создание «нового» заказа по карте запроса, а все баллы начисления из первоначального заказа переносятся на техническую карту. Впоследствии в офлайн режиме происходит удаление изменяемых заказов.
Если к созданному заказу применялись бонусные правила начисления, то на этапе изменения заказа происходит пересчёт начисленных баллов. Для этого в бонусном правиле предусмотрено поле для признака пересчитываемого правила, аналогично как в дисконтном правиле, настройки с таким признаком подробно описаны в разделе Пересчет скидок на этапе изменения оформленного заказа.
При изменении заказа обработке подлежат как бонусные чековые, так и позиционные пересчитываемые правила, и не пересчитываемые правила. При этом чековое правило может быть правилом с параметром «Учитывать состав» (без распределения по позициям) и накопительным правилом, а позиционное может быть с распределением по позициям, но не может быть накопительным.
По не пересчитываемому чековому правилу порция баллов, относящая к заказу в целом, не изменяется, а переносится целиком на изменённый заказ, с сохранением сроков действия.
В случае начисления бонусов по не пересчитываемому позиционному правилу, при замене позиции в заказе, вне зависимости от стоимости заменяющей позиций, на нее начисляется бонус в том же размере, который был начислен по правилу на заменяемую позицию при создании заказа. Если происходит замена позиции на несколько позиций, то порция баллов пропорционально распределяется на каждую позицию. Основанием для распределения баллов по позициям является сумма со скидкой.
Например, в заказе была позиция товара, за которую должно было быть начислено 300 бонусов по не пересчитываемому правилу. Данная позиция заменяется на 3 позиции:
Позиция 1 Сумма=100, Сумма со скидкой=100
Позиция 2 Сумма=100, Сумма со скидкой=60
Позиция 3 Сумма=100, Сумма со скидкой=40
При обработке запроса изменения заказа создаются 3 порции баллов:
Порция 1 = 300* (100/(100+60+40)) = 150 баллов
Порция 2 = 300* (60/(100+60+40)) = 90 баллов
Порция 3 = 300* (40/(100+60+40)) = 60 баллов
Если при распределении получилось так, что сумма распределённых величин в точности не совпадет с распределяемой величиной – разница переносится на позицию с самой большой суммой со скидкой.
На новые добавленные в заказ позиции бонусы не пересчитываемому правилу не предоставляются. Также если позиция заказа удаляется, то вместе с позицией удаляется и поощрение. На заменяемые позиции бонусы должны распределяться пропорционально сумме по позициям.
В случае пересчитываемых позиционных правил, состав заказа по запросу изменения (с учётом текущих параметров) заново обрабатывается пересчитываемыми позиционными правилами. Создаются новые порции баллов, связанные с позициями замещающего заказа. Сроки действия данных порций вычисляются на основании параметров правил относительно даты/времени редактирования заказа по каждой позиции заказа.
Начисление происходит по всем позициям, включая добавленные, если на них распространяется пересчитываемое правило начисления. Если позиция заказа удаляется, то вместе с позицией удаляется и поощрение.
В случае пересчитываемых чековых правил, весь состав заказа по запросу изменения заново обрабатывается каждым из пересчитываемыми чековыми правилами (с условиями фильтрации заказа запроса изменения). Создаются новые порции баллов, привязанные к изменённому заказу. Сроки действия этих порций вычисляются на основании параметров правила, и относительно даты/времени запроса изменения заказа (не процессинга).
Бонусы к начислению рассчитываются по финальной сумме заказа после применения всех скидок и фактически начисляются на баланс участника после оплаты заказа. Для чековых правил - пропорционально оплаченной сумме заказа, для позиционных - пропорционально оплаченному количеству в позициях. Сроки действия начисляемых бонусов устанавливаются относительно даты/времени запроса оплаты заказа.
Если начисления баллов ограничены общими лимитами Loyalty.Processing.Limits.Bonus.Contact.ChargeableMonth и Loyalty.Processing.Limits.Contact.ChequeChargeableDay для заказов и чеков, счётчик начислений корректируется на величину начисления по заказу так, чтобы общая сумма начислений не превосходила лимит (и для пересчитываемых правил, и для не пересчитываемых правил). Если имеющиеся на счётчике начисления + начисления по изменённому заказу превосходят лимит – все порции баллов пропорционально уменьшаются. После этого счётчик лимита увеличивается на величину общих начислений по изменённому заказу.
При применении ограниченного по количеству применений правила при обработке изменения заказа – счётчик количества применений не обновляется, какое бы количество замен заказа не было бы сделано.
Для корректного взаимодействия заказов и купонов обязательно должна быть включена настройка Loyalty.Processing.CouponApplication.TurnOn. Если при обработке изменения заказа получилось так, что купон для начисления баллов не может быть применен по условиям фильтрации, но применялся при создании заказа, то купон восстанавливается к использованию.
Списание бонусов в изменяемом заказе.
Изменённый заказ можно оплачивать только тем количеством баллов, которым был оплачен изначальный заказ. Параметр PaidByBonus берётся из старого заказа. Доплачивать баллами изменённый заказ – запрещается. Если условиям правила списания невозможно по изменённому заказу использовать все те баллы, которые были потрачены на оплату первичного заказа – избыточные баллы возвращаются на баланс карт контакта (мастер-счёта) с теми же самыми сроками действия.
Правила списания всегда пересчитываемые.
Например, в заказе было 2 позиции по 100 руб. Баллами можно оплатить не более 50% от стоимости товара. Списано 100 бонусов по 50 на каждую позицию. При изменении заказа 1-ая позиция была заменена, 2-ая удалена, добавлена 3-яя позиция, на которую списание запрещено, и 4 –ая позиция стоимостью по 25 руб. Сумма заказа уменьшилась до 150 р.
Порции баллов в измененном заказе распределились следующим образом:
1 позиция –100 руб., списано 50 баллов,
3 позиция – 25 руб.. списано 0
4 позиция – 25 руб., списано 12,50 баллов.
37,5 баллов возвращаются на баланс, как остаток от порции баллов, потраченной на оплату первичного заказа.
После расчёта всех скидок и образования нового состава заказа к нему применяются правила списания с фильтрацией уже по товарному составу запроса изменения заказа. Для нового списания отбираются положительные порции баллов без условий по срокам действия и остатков, поскольку положительные порции баллов, используемые при создании заказа, на момент изменения могут быть погашены. В первую очередь списываются именно погашенные порции баллов.
В ситуации, когда между созданием заказа и его заменой положительные порции баллов, из которых случилось списание по первичному заказу, закончили своё действие, происходит корректировка порции гашения. Порция баллов, необходимая для списания в измененном заказе становится доступной для гашения, а остаток от порции баллов, потраченной на оплату первичного заказа, в случае окончания их действия, погашается без возврата на баланс.