Skip to content

Арбитраж акций

Не все доступные клиенту акции совместимы. Несовместимость с другими акциями настраивается при создании:

Несовместимость акций

Если среди всех доступных акций имеются несовместимые, они разделяются на группы.

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

Алгоритм создания комбинации акций

  1. Система берёт все акции, применимые к корзине/чеку
  2. Смотрит, какие акции помечены как несовместимые
  3. Создаёт минимальный набор комбинаций (групп), в которых несовместимые акции не пересекаются

Оценка комбинаций (метод checkout/estimate)

Для каждой группы акций система считает финальную сумму к оплате клиента с учётом:

  • Скидок по акциям
  • Бонусов клиента
  • Сертификатов

Важно

Порядок зафиксирован — сначала скидки, потом бонусы и сертификаты

Выбор победившей группы

  1. Сначала выбирается комбинация с наименьшей суммой к оплате живыми деньгами
  2. Если суммы равны, выбирается группа, которая даёт максимальное начисление бонусов

Схема работы арбитража

Схема работы арбитража

  1. Checkout-controller получает запрос (checkout/estimate)
  2. Читает все акции и их несовместимости
  3. Строит все возможные комбинации акций без конфликтов
  4. Для каждой группы считает сумму к оплате деньгами (с учётом скидок, потом бонусов, потом сертификатов)
  5. Выбирает комбинацию с минимальной суммой
  6. Если суммы равны — выбирает комбинацию с максимальным начислением бонусов
  7. Применяет выбранную комбинацию к чеку

Пример работы арбитража акций

Исходные данные

Корзина клиента: 5 000 ₽

Доступные акции:

АкцияУсловиеСкидкаНачисление бонусовНесовместима с
Aот 3 000 ₽20% (1 000 ₽)100B
Bот 2 000 ₽Фиксированная 300 ₽200A, C
Cот 4 000 ₽15% (750 ₽)300B

Бонусы клиента: 500 бонусов (1 ₽ = 1 бонус)


Сценарий 1: Клиент не хочет списывать бонусы

Допустимые комбинации

КомбинацияСостав
1Только A
2Только B
3Только C
4A + C

Расчёт суммы к оплате

КомбинацияСкидкаБонусы к списаниюСумма к оплате деньгами
A1 000 ₽0 ₽4 000 ₽
B300 ₽0 ₽4 700 ₽
C750 ₽0 ₽4 250 ₽
A + C1 750 ₽0 ₽3 250 ₽

Выбор победителя

КомбинацияСумма к оплате
A + C3 250 ₽ ← минимум
A4 000 ₽
C4 250 ₽
B4 700 ₽

Победитель: A + C

Результат

  • Сумма к оплате деньгами: 3 250 ₽
  • Скидка: 1 750 ₽
  • Списано бонусов: 0 ₽
  • Начислено бонусов: 400

Сценарий 2: Клиент ХОЧЕТ списать бонусы

Расчёт суммы к оплате

КомбинацияСкидкаБонусы к списаниюСумма к оплате деньгами
A1 000 ₽500 ₽3 500 ₽
B300 ₽500 ₽4 200 ₽
C750 ₽500 ₽3 750 ₽
A + C1 750 ₽500 ₽2 750 ₽

Выбор победителя

КомбинацияСумма к оплате
A + C2 750 ₽ ← минимум
A3 500 ₽
C3 750 ₽
B4 200 ₽

Победитель: A + C

Результат

  • Сумма к оплате деньгами: 2 750 ₽
  • Скидка: 1 750 ₽
  • Списано бонусов: 500 ₽
  • Начислено бонусов: 400

Сравнение сценариев

ПараметрБез списания бонусовСо списанием бонусов
Выбранная комбинацияA + CA + C
Скидка1 750 ₽1 750 ₽
Списано бонусов0 ₽500 ₽
Сумма к оплате деньгами3 250 ₽2 750 ₽
Начислено бонусов400400