# Механика расчёта списания бонусов
Прежде чем приступить к каким-либо расчетам, система проверяет:
- Включена ли бонусная программа
- Является ли пользователь участником программы лояльности
- Есть ли у пользователя доступные бонусные баллы
- Есть ли хотя бы один товар в корзине, разрешающий списание бонусов Если хотя бы одно условие не выполняется — бонусы не списываются.
Обратите внимание
Лимит на списание бонусов может быть задан вручную с помощью параметра bonuses_amount в API-методе apply или estimate.
Если в запросе указано значение этого параметра, система не сможет списать бонусов больше указанного количества, даже при наличии большего баланса у клиента.
Пример:
На бонусном счёте клиента 500 бонусов, но в запросе передано bonuses_amount = 300. В этом случае в расчётах будет использовано значение 300 бонусов, и списание сверх этого лимита будет недоступно.
# Настройки программы лояльности, влияющие на процесс списания
Бонусная программа лояльности - переключатель, который позволяет включать и выключать начисление и списание бонусных баллов.
Разрешение скидок - от этого показателя зависит какая цена будет использоваться в расчётах: базовая или со скидкой. Если скидки не разрешены, будет использоваться исключительно базовая цена товара.
Исключения - настройка позволяет отключать скидки и бонусы для определённых брендов и категорий. Отдельные товары можно исключить на этапе импорта. Для этого в фиде должны быть заполнены эти поля:
bonuses_accrual_allowed- запрет или разрешение начисления бонусов за покупку товараbonuses_spending_allowed- запрет или разрешение на списание бонусов при покупке товараdiscounts_allowed- запрет или разрешение скидок на товар
Максимальная доля цены товара, доступная для оплаты бонусами - максимальная доля стоимости товара, которую можно оплатить бонусами.
Курс обмена бонусов на валюту - влияет на расчёт количества списываемых бонусов и финальную сумму списания.
# Глоссарий
Пожалуйста, ознакомьтесь со списком терминов, которые будут использованы в описании механики списания бонусов.
# Бонусы
Бонусы — внутренняя валюта программы лояльности.
# Зачем нужен
Позволяют участнику программы лояльности частично оплатить заказ, снижая итоговую стоимость.
# Как рассчитывается
Начальное количество бонусов берётся из бонусного баланса клиента. При проведении расчётов бонусы переводятся в рубли с использованием установленного курса бонусов.
# Где используется
Используются для определения суммы денег, которую можно списать с заказа, и при расчёте количества списанных бонусов и фактического списания.
# Курс бонусов
Курс бонусов — соотношение одного бонуса к рублю.
# Зачем нужен
Позволяет пересчитывать бонусы в рубли и обратно в рамках всех этапов расчёта.
# Как рассчитывается
Устанавливается в настройках программы лояльности. Например: 1 бонус = 1 рубль или 1 бонус = 0.5 рубля. Это значение используется во всех пересчётах бонусов в денежные единицы и наоборот.
# Где используется
- В расчёте суммы денег, которую можно списать с заказа
- В расчёте количества списанных бонусов
- В определении фактического списания
# Цена товара после скидки
Цена товара после скидки — финальная стоимость товара с учётом всех действующих скидок.
# Зачем нужен
Используется для расчёта лимита списания бонусов по товару.
# Как рассчитывается
Если на товар действует скидка, используется цена после её применения. В противном случае — базовая цена товара.
# Где используется
В формуле:
Цена товара после скидки × (Максимальная доля стоимости, разрешённая к оплате бонусами / 100)
# Максимальная доля стоимости, разрешённая к оплате бонусами
Максимальная доля стоимости, разрешённая к оплате бонусами — процент от цены товара, который разрешено оплатить бонусами.
# Зачем нужен
Ограничивает значение лимита списания бонусов по товару.
# Как рассчитывается
Указывается в настройках программы лояльности — может быть задана на уровне конкретного товара, категории или бренда. Например: 20%, 50%.
# Где используется
Участвует в формуле расчёта лимита списания бонусов по товару.
# Лимит списания бонусов по товару (в денежном выражении)
Лимит списания бонусов по товару — максимальная сумма в рублях, которую можно оплатить бонусами, при расчёте за конкретный товар.
# Зачем нужен
Ограничивает списание бонусов для отдельной товарной позиции.
# Как рассчитывается
Цена товара после скидки × (Максимальная доля стоимости, разрешённая к оплате бонусами / 100)
Это означает, что из полной стоимости товара сначала вычитается скидка, а затем применяется установленный процент, разрешённый для оплаты бонусами.
# Где используется
Служит базой для формирования общего лимита списания бонусов по корзине и для дальнейшего расчёта суммы списания по товару.
# Общий лимит списания бонусов по корзине (в денежном выражении)
Общий лимит списания бонусов по корзине — сумма всех лимитов списания бонусов по товарам в корзине в рублях.
# Зачем нужен
Определяет максимально возможную сумму, которую можно заплатить бонусами за все товары заказа.
# Как рассчитывается
Суммируются значения лимита списания бонусов по товару только для тех товаров, у которых разрешено списание. Таким образом определяется верхняя граница списания бонусов по всему заказу.
# Где используется
Участвует в расчёте суммы денег, которую можно списать с заказа и коэффициента списания бонусов.
# Сумма денег, которую можно списать с заказа
Сумма денег, которую можно списать с заказа — максимальная сумма в рублях, её можно оплатить бонусами с учётом текущего бонусного баланса клиента и лимитов по товарам.
# Зачем нужен
Определяет максимально возможную оплату бонусами с учётом баланса клиента и настроек товаров.
# Как рассчитывается
min(Бонусы × Курс бонусов, Общий лимит списания бонусов по корзине)
То есть берётся минимальное значение из двух: сколько клиент может потратить (с учётом баланса) и сколько разрешено потратить (по лимитам корзины).
# Где используется
Участвует в расчёте коэффициента списания бонусов.
# Коэффициент списания бонусов
Коэффициент списания бонусов — переменная, которая вычисляется для расчёта пропорционального списания денег с каждого товара в корзине(в счёт оплаты бонусными баллами)
# Зачем нужен
Позволяет пропорционально уменьшить списание бонусов с каждого товара, если бонусов недостаточно.
# Как рассчитывается
Сумма денег, которую можно списать с заказа / Общий лимит списания бонусов по корзине
Если бонусов достаточно, коэффициент равен 1. Если бонусов не хватает — коэффициент будет меньше единицы, и списания будут уменьшены пропорционально.
# Где используется
Применяется к каждому лимиту списания бонусов по товару при расчёте суммы списания по товару.
# Сумма списания по товару (в денежном выражении)
Сумма списания по товару — сумма в рублях, которая будет списана бонусами за конкретный товар с учётом коэффициента.
# Зачем нужен
Определяет базу для перевода списания в бонусы.
# Как рассчитывается
Лимит списания бонусов по товару × Коэффициент списания бонусов
То есть лимит по товару уменьшается (или остаётся без изменений) в зависимости от того, насколько хватает бонусов по корзине в целом.
# Где используется
Используется для расчёта количества списанных бонусов.
# Количество списанных бонусов
Количество списанных бонусов — число бонусов, списанное за конкретный товар.
# Зачем нужен
Отражает списание с бонусного счёта клиента.
# Как рассчитывается
Сумма списания по товару / Курс бонусов
Полученное значение округляется вниз до целого числа.
То есть итоговое количество бонусов рассчитывается на основе списания в рублях и текущего курса.
# Где используется
Применяется при расчёте фактического списания и вычитается из бонусного баланса.
# Фактическое списание (в денежном выражении)
Фактическое списание — сумма в рублях, которая реально будет списана после округления бонусов.
# Зачем нужен
Отражает итоговую сумму списания с учётом округлений, используется в транзакциях и отчётах.
# Как рассчитывается
Количество списанных бонусов × Курс бонусов
Итоговая сумма может быть меньше изначально рассчитанной из-за округления количества бонусов.
# Где используется
Для отображения списаний по товарам и в итогах заказа.
# Процесс списания бонусов
Обратите внимание
Лимит на списание бонусов может быть задан вручную с помощью параметра bonuses_amount в API-методе apply или estimate.
Если в запросе указано значение этого параметра, система не сможет списать бонусов больше указанного количества, даже при наличии большего баланса у клиента.
Пример:
На бонусном счёте клиента 500 бонусов, но в запросе передано bonuses_amount = 300. В этом случае в расчётах будет использовано значение 300 бонусов, и списание сверх этого лимита будет недоступно.
- Проверка условий для списания
Проверяется:- Включена ли бонусная программа
- Пользователь участвует в программе лояльности
- У пользователя есть бонусный баланс
- В корзине есть хотя бы один товар с разрешённым списанием бонусов Если хотя бы одно из условий не выполняется — списание не производится.
- Определение лимита списания бонусов по товару
Для каждого товара, разрешающего списание, определяется максимально допустимая сумма оплаты бонусами в денежном выражении. Она зависит от цены товара после скидки и максимальной доли стоимости, разрешённой к оплате бонусами. - Расчёт общего лимита списания бонусов по корзине
Складываются лимиты всех товаров, для которых разрешено списание. Полученное значение — верхняя граница для списания бонусов по заказу в рублях. - Определение суммы денег, которую можно списать с заказа
Рассчитывается с учётом бонусного баланса пользователя и курса бонусов.
Используется минимальное значение из двух: сколько денег пользователь может списать и какую сумму разрешено списывать по всей корзине. - Вычисление коэффициента списания бонусов
Если бонусов достаточно, коэффициент равен 1. Будет списана максимальная сумма в пределах лимита. Если бонусов не хватает — коэффициент < 1. С его помощью определяется сколько денег будет списано от цены каждого товара. Списание распределяется между товарами пропорционально. - Определение суммы списания по товару Для каждого товара применяется коэффициент к его лимиту. Итоговое значение определяет, сколько рублей будет заплачено бонусами за товар.
- Определение количества списанных бонусов
На основе рассчитанной суммы списания по товару и курса бонусов определяется, сколько бонусов нужно списать. Значение округляется вниз до целого числа. - Определение фактического списания
Рассчитывается итоговая сумма в рублях, которая будет отражена в транзакциях, с учётом округления бонусов.
Важно учитывать
- Количество списанных бонусов всегда округляется вниз
- Списание ограничено:
- Лимитом списания по товару
- Общим лимитом по корзине
- Доступным бонусным балансом клиента
# Пример расчёта списания бонусов
У клиента: 200 бонусов
В данном примере 1 бонус соответствует 0.5 рубля.
Это означает, что с текущим бонусным балансом клиент может оплатить 100 рублей от стоимости заказа.
# Настройки программы лояльности
- Курс бонусов: 1 бонус = 0.5 рубля
- Максимальная доля стоимости, разрешённая к оплате бонусами: 30%
Это значение задано на уровне программы лояльности и применяется ко всем товарам, за исключением тех, у которых списание бонусов запрещено (например, индивидуально через полеbonuses_spending_allowed=falseв фиде или по категории/бренду заданным в настройках программы лояльности).
# Данные из корзины
| Товар | Базовая цена | Скидка | Цена товара после скидки |
|---|---|---|---|
| Джинсы | 3000 рублей | 1000 рублей | 2000 рублей |
| Футболка | 1500 рублей | 0 рублей | 1500 рублей |
| Кепка | 800 рублей | 0 рублей | 800 рублей |
# Этап 1. Определение лимита списания бонусов по товару
Для каждого товара определим сумму в рублях, которую можно оплатить бонусами. Она рассчитывается как процент от цены товара после скидки.
- Джинсы: можно оплатить не более 30% от 2000 рублей, то есть 600 рублей
- Футболка: не более 30% от 1500 рублей, то есть 450 рублей
- Кепка: не более 30% от 800 рублей, то есть 240 рублей
# Этап 2. Расчёт общего лимита списания бонусов по корзине
Складываем лимиты списания бонусов по всем товарам в корзине:
600 рублей (джинсы) + 450 рублей (футболка) + 240 рублей (кепка) = 1290 рублей
# Этап 3. Определение суммы денег, которую можно списать с заказа
Сравниваем:
- сколько клиент может оплатить с учётом бонусного баланса — это 100 рублей
- и сколько максимально разрешено потратить бонусами по корзине — это 1290 рублей Берём минимальное значение: 100 рублей
# Этап 4. Определение коэффициента списания бонусов
Определим долю от лимитов, которая может быть реально использована.
Для этого делим сумму, которую можно списать с заказа (100 рублей), на общий лимит (1290 рублей).
Получается коэффициент примерно 0.0775.
# Этап 5. Расчёт суммы списания по товару
Применяем коэффициент списания бонусов к каждому лимиту:
- Джинсы: 600 рублей × 0.0775 = 46.5 рублей
- Футболка: 450 рублей × 0.0775 = 34.875 рублей
- Кепка: 240 рублей × 0.0775 = 18.6 рублей
# Этап 6. Определение количества списанных бонусов
Переводим сумму списания по каждому товару в бонусы, делением на курс бонусов, и округляем вниз:
- Джинсы: 46.5 / 0.5 = 93 (после округления - 93 бонуса)
- Футболка: 34.875 / 0.5 = 69.75 (после округления - 69 бонусов)
- Кепка: 18.6 / 0.5 = 37.2 (после округления - 37 бонусов)
# Этап 7. Определение фактического списания
Переводим количество списанных бонусов обратно в рубли:
- Джинсы: 93 бонуса × 0.5 = 46.5 рублей
- Футболка: 69 бонусов × 0.5 = 34.5 рублей
- Кепка: 37 бонусов × 0.5 = 18.5 рублей
# Итог
- Списано бонусов: 93 + 69 + 37 = 199 бонусов
- Фактическое списание: 46.5 + 34.5 + 18.5 = 99.5 рублей
- Оставшийся бонусный баланс: 200 – 199 = 1 бонус
# Расчёты
В этом разделе собраны все формулы, используемые в механике расчёта списания бонусов.
# Лимит списания бонусов по товару
Цена товара после скидки × (Максимальная доля стоимости, разрешённая к оплате бонусами / 100)
# Пример
Цена товара после скидки — 2000 Максимальная доля стоимости, разрешённая к оплате бонусами — 25% 2000 × (25 / 100) = 500
# Общий лимит списания бонусов по корзине (в денежном выражении)
Общий лимит списания бонусов по корзине = Сумма всех лимитов списания бонусов по товарам в корзине
# Пример
Рубашка: лимит 300 рублей Джинсы: лимит 500 рублей Футболка: лимит 200 рублей Шарф: списание запрещено Общий лимит списания бонусов по корзине: 300 + 500 + 200 = 1000 рублей
# Сумма денег, которую можно списать с заказа
Сумма денег, которую можно списать с заказа = min(Бонусы × Курс бонусов, Общий лимит списания бонусов по корзине)
# Пример
Бонусы: 150 Курс бонусов: 1 бонус = 1 рубль Общий лимит списания бонусов по корзине: 1000 рублей Сумма списания = min(150 × 1, 1000) = 150 рублей
# Коэффициент списания бонусов
Коэффициент списания бонусов = Сумма денег, которую можно списать с заказа / Общий лимит списания бонусов по корзине
# Пример
Сумма списания: 150 рублей Общий лимит по корзине: 1000 рублей Коэффициент = 150 / 1000 = 0.15
# Сумма списания по товару
Сумма списания по товару = Лимит списания бонусов по товару × Коэффициент списания бонусов
# Пример
Лимит по джинсам: 500 рублей Коэффициент: 0.15 Списание с товара Джинсы: 500 × 0.15 = 75 рублей
# Количество списанных бонусов
Количество списанных бонусов = Сумма списания по товару / Курс бонусов
Значение округляется вниз до целого# Пример
Сумма списания по джинсам: 75 рублей Курс: 1 бонус = 1 рубль 75 / 1 = 75 бонусов
# Фактическое списание
Фактическое списание = Количество списанных бонусов × Курс бонусов
# Пример
Количество списанных бонусов: 75 Курс: 1 бонус = 1 рублей Фактическое списание: 75 рублей
Воспользуйтесь калькулятором бонусов, чтобы получить подробные объяснения на примере.
Калькулятор списания бонусов
Бонусный баланс клиента
Доступно для списания: 100.00 ₽ (200 бонусов × курс 0.5 ₽/бонус)