# Механика расчёта списания бонусов

Прежде чем приступить к каким-либо расчетам, система проверяет:

  • Включена ли бонусная программа
  • Является ли пользователь участником программы лояльности
  • Есть ли у пользователя доступные бонусные баллы
  • Есть ли хотя бы один товар в корзине, разрешающий списание бонусов Если хотя бы одно условие не выполняется — бонусы не списываются.

Обратите внимание

Лимит на списание бонусов может быть задан вручную с помощью параметра bonuses_amount в API-методе apply или estimate.

Если в запросе указано значение этого параметра, система не сможет списать бонусов больше указанного количества, даже при наличии большего баланса у клиента.

Пример:

На бонусном счёте клиента 500 бонусов, но в запросе передано bonuses_amount = 300. В этом случае в расчётах будет использовано значение 300 бонусов, и списание сверх этого лимита будет недоступно.

# Настройки программы лояльности, влияющие на процесс списания

Бонусная программа лояльности - переключатель, который позволяет включать и выключать начисление и списание бонусных баллов.

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

Исключения - настройка позволяет отключать скидки и бонусы для определённых брендов и категорий. Отдельные товары можно исключить на этапе импорта. Для этого в фиде должны быть заполнены эти поля:

  1. bonuses_accrual_allowed - запрет или разрешение начисления бонусов за покупку товара
  2. bonuses_spending_allowed - запрет или разрешение на списание бонусов при покупке товара
  3. discounts_allowed - запрет или разрешение скидок на товар

Максимальная доля цены товара, доступная для оплаты бонусами - максимальная доля стоимости товара, которую можно оплатить бонусами.

Курс обмена бонусов на валюту - влияет на расчёт количества списываемых бонусов и финальную сумму списания.

# Глоссарий

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

# Бонусы

Бонусы — внутренняя валюта программы лояльности.

# Зачем нужен

Позволяют участнику программы лояльности частично оплатить заказ, снижая итоговую стоимость.

# Как рассчитывается

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

# Где используется

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


# Курс бонусов

Курс бонусов — соотношение одного бонуса к рублю.

# Зачем нужен

Позволяет пересчитывать бонусы в рубли и обратно в рамках всех этапов расчёта.

# Как рассчитывается

Устанавливается в настройках программы лояльности. Например: 1 бонус = 1 рубль или 1 бонус = 0.5 рубля. Это значение используется во всех пересчётах бонусов в денежные единицы и наоборот.

# Где используется

  • В расчёте суммы денег, которую можно списать с заказа
  • В расчёте количества списанных бонусов
  • В определении фактического списания

# Цена товара после скидки

Цена товара после скидки — финальная стоимость товара с учётом всех действующих скидок.

# Зачем нужен

Используется для расчёта лимита списания бонусов по товару.

# Как рассчитывается

Если на товар действует скидка, используется цена после её применения. В противном случае — базовая цена товара.

# Где используется

В формуле:
Цена товара после скидки × (Максимальная доля стоимости, разрешённая к оплате бонусами / 100)


# Максимальная доля стоимости, разрешённая к оплате бонусами

Максимальная доля стоимости, разрешённая к оплате бонусами — процент от цены товара, который разрешено оплатить бонусами.

# Зачем нужен

Ограничивает значение лимита списания бонусов по товару.

# Как рассчитывается

Указывается в настройках программы лояльности — может быть задана на уровне конкретного товара, категории или бренда. Например: 20%, 50%.

# Где используется

Участвует в формуле расчёта лимита списания бонусов по товару.


# Лимит списания бонусов по товару (в денежном выражении)

Лимит списания бонусов по товару — максимальная сумма в рублях, которую можно оплатить бонусами, при расчёте за конкретный товар.

# Зачем нужен

Ограничивает списание бонусов для отдельной товарной позиции.

# Как рассчитывается

Цена товара после скидки × (Максимальная доля стоимости, разрешённая к оплате бонусами / 100)

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

# Где используется

Служит базой для формирования общего лимита списания бонусов по корзине и для дальнейшего расчёта суммы списания по товару.


# Общий лимит списания бонусов по корзине (в денежном выражении)

Общий лимит списания бонусов по корзине — сумма всех лимитов списания бонусов по товарам в корзине в рублях.

# Зачем нужен

Определяет максимально возможную сумму, которую можно заплатить бонусами за все товары заказа.

# Как рассчитывается

Суммируются значения лимита списания бонусов по товару только для тех товаров, у которых разрешено списание. Таким образом определяется верхняя граница списания бонусов по всему заказу.

# Где используется

Участвует в расчёте суммы денег, которую можно списать с заказа и коэффициента списания бонусов.


# Сумма денег, которую можно списать с заказа

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

# Зачем нужен

Определяет максимально возможную оплату бонусами с учётом баланса клиента и настроек товаров.

# Как рассчитывается

min(Бонусы × Курс бонусов, Общий лимит списания бонусов по корзине)

То есть берётся минимальное значение из двух: сколько клиент может потратить (с учётом баланса) и сколько разрешено потратить (по лимитам корзины).

# Где используется

Участвует в расчёте коэффициента списания бонусов.


# Коэффициент списания бонусов

Коэффициент списания бонусов — переменная, которая вычисляется для расчёта пропорционального списания денег с каждого товара в корзине(в счёт оплаты бонусными баллами)

# Зачем нужен

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

# Как рассчитывается

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

Если бонусов достаточно, коэффициент равен 1. Если бонусов не хватает — коэффициент будет меньше единицы, и списания будут уменьшены пропорционально.

# Где используется

Применяется к каждому лимиту списания бонусов по товару при расчёте суммы списания по товару.


# Сумма списания по товару (в денежном выражении)

Сумма списания по товару — сумма в рублях, которая будет списана бонусами за конкретный товар с учётом коэффициента.

# Зачем нужен

Определяет базу для перевода списания в бонусы.

# Как рассчитывается

Лимит списания бонусов по товару × Коэффициент списания бонусов То есть лимит по товару уменьшается (или остаётся без изменений) в зависимости от того, насколько хватает бонусов по корзине в целом.

# Где используется

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


# Количество списанных бонусов

Количество списанных бонусов — число бонусов, списанное за конкретный товар.

# Зачем нужен

Отражает списание с бонусного счёта клиента.

# Как рассчитывается

Сумма списания по товару / Курс бонусов
Полученное значение округляется вниз до целого числа. То есть итоговое количество бонусов рассчитывается на основе списания в рублях и текущего курса.

# Где используется

Применяется при расчёте фактического списания и вычитается из бонусного баланса.


# Фактическое списание (в денежном выражении)

Фактическое списание — сумма в рублях, которая реально будет списана после округления бонусов.

# Зачем нужен

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

# Как рассчитывается

Количество списанных бонусов × Курс бонусов Итоговая сумма может быть меньше изначально рассчитанной из-за округления количества бонусов.

# Где используется

Для отображения списаний по товарам и в итогах заказа.

# Процесс списания бонусов

Обратите внимание

Лимит на списание бонусов может быть задан вручную с помощью параметра bonuses_amount в API-методе apply или estimate.

Если в запросе указано значение этого параметра, система не сможет списать бонусов больше указанного количества, даже при наличии большего баланса у клиента.

Пример:

На бонусном счёте клиента 500 бонусов, но в запросе передано bonuses_amount = 300. В этом случае в расчётах будет использовано значение 300 бонусов, и списание сверх этого лимита будет недоступно.

  1. Проверка условий для списания
    Проверяется:
    • Включена ли бонусная программа
    • Пользователь участвует в программе лояльности
    • У пользователя есть бонусный баланс
    • В корзине есть хотя бы один товар с разрешённым списанием бонусов Если хотя бы одно из условий не выполняется — списание не производится.
  2. Определение лимита списания бонусов по товару
    Для каждого товара, разрешающего списание, определяется максимально допустимая сумма оплаты бонусами в денежном выражении. Она зависит от цены товара после скидки и максимальной доли стоимости, разрешённой к оплате бонусами.
  3. Расчёт общего лимита списания бонусов по корзине
    Складываются лимиты всех товаров, для которых разрешено списание. Полученное значение — верхняя граница для списания бонусов по заказу в рублях.
  4. Определение суммы денег, которую можно списать с заказа
    Рассчитывается с учётом бонусного баланса пользователя и курса бонусов.
    Используется минимальное значение из двух: сколько денег пользователь может списать и какую сумму разрешено списывать по всей корзине.
  5. Вычисление коэффициента списания бонусов
    Если бонусов достаточно, коэффициент равен 1. Будет списана максимальная сумма в пределах лимита. Если бонусов не хватает — коэффициент < 1. С его помощью определяется сколько денег будет списано от цены каждого товара. Списание распределяется между товарами пропорционально.
  6. Определение суммы списания по товару Для каждого товара применяется коэффициент к его лимиту. Итоговое значение определяет, сколько рублей будет заплачено бонусами за товар.
  7. Определение количества списанных бонусов
    На основе рассчитанной суммы списания по товару и курса бонусов определяется, сколько бонусов нужно списать. Значение округляется вниз до целого числа.
  8. Определение фактического списания
    Рассчитывается итоговая сумма в рублях, которая будет отражена в транзакциях, с учётом округления бонусов.

Важно учитывать

# Пример расчёта списания бонусов

У клиента: 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 ₽/бонус)

Настройки программы лояльности

Товары в корзине

2400.00 ₽
1200.00 ₽
640.00 ₽