projects/org/ideal-shop/docs/PROMOTIONS.md

PROMOTIONS — Скидки, бонусы, акции

Версия: 2.1.0
Дата: 2026-03-24


Философия

Простота + прозрачность = доверие клиента

Клиент должен понимать: сколько у него, как получить больше, как потратить.


Типы поощрений

Тип Описание Когда использовать
Скидка % Процент от цены Акции, статус клиента
Скидка ₽ Фиксированная сумма Промокоды, купоны
Бонусы Внутренняя валюта Лояльность, cashback
Бесплатная доставка Доставка = 0₽ Порог суммы, акции
Подарок Товар бесплатно При покупке от X₽

1. СКИДКИ

Виды скидок

Вид Источник Приоритет Суммируется
Акционная Товар/категория 1 Нет
Персональная Статус клиента 2 Нет
Промокод Ввод кода 3 Опционально
Оптовая Количество 4 Да

Правила применения

ПРИОРИТЕТ СКИДОК (применяется ОДНА, максимальная):

1. Проверить акционную скидку на товар
2. Проверить персональную скидку клиента
3. Проверить промокод
4. Выбрать МАКСИМАЛЬНУЮ

Исключение: Оптовая скидка СУММИРУЕТСЯ с выбранной

Пример расчёта

Товар: 1000
Акция на товар: 10% (900)
Персональная скидка: 15% (850)
Промокод: 5% (950)

 Применяется персональная 15% = 850 (максимальная)

Если куплено 10 шт + оптовая 5%:
 850  5% = 807.50 за штуку

2. БОНУСЫ (внутренняя валюта)

Курс

Параметр Значение
1 бонус = 1 рубль
Начисление X% от суммы заказа
Списание До Y% от суммы заказа
Срок действия 365 дней

Начисление бонусов

Событие Бонусы Условие
Покупка 5% от суммы После получения заказа
Регистрация 300₽ Первая регистрация
День рождения 500₽ Раз в год
Отзыв с фото 100₽ Модерация
Приведи друга 500₽ Друг сделал заказ
Подписка на TG 100₽ Первое подключение

Списание бонусов

Параметр Значение
Максимум списания 30% от суммы заказа
Минимум заказа 1000₽
На что нельзя Доставка, акционные товары
Округление До целых рублей

Пример

Заказ: 5000
Бонусов на счету: 2000
Максимум списания: 30% = 1500

Клиент может списать до 1500
К оплате: 5000  1500 = 3500

После получения заказа:
Начислено: 5% от 3500 = 175 бонусов

Статусы бонусов

pending → active → used/expired

pending:  Ожидает (заказ не получен)
active:   Доступен для списания
used:     Списан
expired:  Сгорел (через 365 дней)

UI бонусов

┌─────────────────────────────────────┐
│ 💰 Ваши бонусы: 1 250 ₽             │
│                                     │
│ Доступно: 1 050 ₽                   │
│ Ожидает:    200 ₽ (заказ #1234)     │
│                                     │
│ Сгорят 15.03: 150 ₽                 │
│                                     │
│ [История бонусов]                   │
└─────────────────────────────────────┘

3. НАКОПИТЕЛЬНАЯ СКИДКА (статус)

Уровни

Уровень Сумма покупок Скидка Бонусы
Новичок 0 ₽ 0% 3%
Постоянный 5 000 ₽ 5% 5%
VIP 20 000 ₽ 10% 7%
Premium 50 000 ₽ 15% 10%

Правила

Параметр Значение
Период накопления Бессрочно
Понижение статуса Нет
Учитываются Оплаченные заказы
Не учитываются Отменённые, возвраты

UI статуса

┌─────────────────────────────────────┐
│ 💎 Ваш статус: VIP                  │
│                                     │
│ Скидка: 10% на всё                  │
│ Бонусы: 7% с покупок                │
│                                     │
│ Сумма покупок: 23 450 ₽             │
│ ████████████░░░░░░ 47%              │
│ До Premium: 26 550 ₽                │
│                                     │
└─────────────────────────────────────┘

4. ПРОМОКОДЫ

Типы промокодов

Тип Пример Описание
Процент SALE10 −10% на заказ
Фиксированный BONUS500 −500₽ от заказа
Бесплатная доставка FREEDEL Доставка 0₽
Подарок GIFT2025 Товар в подарок
Комбо NEWYEAR −15% + подарок

Параметры промокода

Параметр Описание
Код Уникальный текст (латиница, цифры)
Тип скидки %, ₽, доставка, подарок
Значение Размер скидки
Мин. сумма От какой суммы работает
Макс. скидка Потолок (для %)
Дата начала Когда активируется
Дата окончания Когда истекает
Лимит общий Сколько раз всего
Лимит на клиента Сколько раз один клиент
Категории На какие категории
Товары На какие товары
Исключения Что не участвует
Для новых Только новые клиенты
Одноразовый Только первый заказ

Валидация

1. Код существует?
2. Дата действия актуальна?
3. Лимит не исчерпан?
4. Клиент не использовал (если лимит)?
5. Сумма заказа >= минимума?
6. Товары подходят под условия?
7. Клиент новый (если требуется)?

Все ДА  Применить
Любое НЕТ  Показать причину

UI промокода

┌─────────────────────────────────────┐
 Промокод: [SALE10_________] [OK]    
                                     
  Промокод применён: 10%          
 Скидка: 1 250                     
                                     
 [✕ Удалить промокод]                
└─────────────────────────────────────┘

Ошибки:

❌ Промокод не найден
❌ Промокод истёк
❌ Минимальная сумма заказа: 3000₽
❌ Промокод уже использован
❌ Промокод только для новых клиентов

5. АКЦИИ

Типы акций

Тип Механика Пример
Скидка на товар Цена снижена −20% на салюты
Скидка на категорию Вся категория −15% на петарды
N+1 Купи N, получи 1 2+1 на фонтаны
Комплект Набор дешевле Набор −25%
Порог От суммы −10% от 5000₽
Подарок Товар бесплатно Зажигалка от 3000₽
Бесплатная доставка Доставка 0₽ От 3000₽
Cashback Повышенные бонусы x2 бонусы
Флеш-сейл Ограничено время −30% до 18:00
Колесо фортуны Геймификация Крути — выигрывай

Параметры акции

Параметр Описание
Название Заголовок акции
Описание Условия
Тип См. выше
Значение Размер выгоды
Дата начала Когда старт
Дата окончания Когда финиш
Товары/категории Что участвует
Исключения Что не участвует
Лимит Сколько раз (всего/на клиента)
Приоритет При пересечении
Баннер Изображение
Лендинг URL страницы акции

Отображение акции

На карточке товара:

┌─────────────────┐
│ [−20%]          │ ← Бейдж
│    [ФОТО]       │
├─────────────────┤
│ Название        │
│ 1 990 ₽         │ ← Новая цена (красная)
│ 2 490 ₽         │ ← Старая (зачёркнуто)
└─────────────────┘

На странице товара:

┌─────────────────────────────────────┐
│ 🔥 АКЦИЯ: −20% до 31 декабря        │
│                                     │
│ 1 990 ₽  (экономия 500₽)            │
│ 2 490 ₽                             │
│                                     │
│ ⏰ До конца акции: 5 дней 12:34:56  │
└─────────────────────────────────────┘

6. ПРАВИЛА СОВМЕЩЕНИЯ

Матрица совместимости

Акция Статус Промокод Бонусы Опт
Акция
Статус
Промокод
Бонусы
Опт

Правило: Скидки НЕ суммируются (выбирается макс.), бонусы и опт — СУММИРУЮТСЯ.

Порядок расчёта

1. Базовая цена товара
2. Применить скидку (макс. из: акция / статус / промокод)
3. Применить оптовую скидку (если есть)
4. Рассчитать сумму заказа
5. Списать бонусы (до 30%)
6. Добавить доставку
7. Итого к оплате

Пример полного расчёта

Товар: 2000 × 3 шт = 6000
Акция на товар: 20%
Статус клиента: VIP 10%
Промокод: SALE15 15%
Оптовая (от 3 шт): 5%
Бонусы: 1000

РАСЧЁТ:
1. Базовая: 6000
2. Скидка (макс): 20% (акция) = 4800
3. Оптовая: 5% = 4560
4. Сумма заказа: 4560
5. Макс. бонусов: 30% = 1368
6. Списать бонусов: 1000
7. Доставка: 0 (от 3000 бесплатно)
8. ИТОГО: 3560

Начислится бонусов: 7% от 3560 = 249

7. UI В КОРЗИНЕ

Блок скидок

┌─────────────────────────────────────────────────┐
 ВАША ВЫГОДА                                     
├─────────────────────────────────────────────────┤
 Товары (3 шт):                         6 000   
                                                 
 🏷️ Акция "−20% на салюты":            1 200   
 📦 Оптовая скидка (3+ шт):              240   
                                                 
 Промокод: [____________] [Применить]            
                                                 
 💰 Списать бонусы: [1000] из 1250              
    Максимум: 1368 (30%)                        
                                                 
├─────────────────────────────────────────────────┤
 Доставка:                                  0   
 (бесплатно от 3000)                            
├─────────────────────────────────────────────────┤
 ИТОГО:                                 3 560   
 Экономия:                              2 440   
                                                 
 💎 Будет начислено: +249 бонусов (VIP ×7%)      
└─────────────────────────────────────────────────┘

8. АДМИНИСТРИРОВАНИЕ

Создание промокода

Поле Тип Обязательно
Код Text Да
Тип Select Да
Значение Number Да
Мин. сумма Number Нет
Макс. скидка Number Нет
Даты Date range Да
Лимит общий Number Нет
Лимит на клиента Number Нет
Категории Multi-select Нет
Только новые Checkbox Нет
Активен Checkbox Да

Создание акции

Поле Тип Обязательно
Название Text Да
Тип Select Да
Условия Form Да
Даты Date range Да
Товары/категории Multi-select Да
Баннер Image Нет
Приоритет Number Нет
Активна Checkbox Да

Отчёты

Отчёт Метрики
Промокоды Использования, выручка, средний чек
Акции Продажи, конверсия, выручка
Бонусы Начислено, списано, сгорело
Статусы Распределение клиентов

9. ЗАЩИТА ОТ ЗЛОУПОТРЕБЛЕНИЙ

Риск Защита
Множественные аккаунты Телефон = ID, 1 телефон = 1 аккаунт
Передача промокода Лимит на клиента, привязка к email/телефону
Накрутка бонусов Начисление после получения заказа
Фрод с возвратами Списание бонусов при возврате
Перепродажа Лимит на заказ

10. РЕАЛИЗАЦИЯ (Drupal Commerce)

Модули

Модуль Описание
commerce_promotion Акции, промокоды
commerce_cart Корзина
userpoints / commerce_points Бонусная система

Сущности

Promotion (Акция)
├── Conditions (Условия)
│   ├── Order total >= X
│   ├── Product category in [...]
│   └── Customer role = [...]
└── Offers (Предложения)
    ├── Percentage off
    ├── Fixed amount off
    └── Free shipping

Coupon (Промокод)
├── Code
├── Usage limit
└── → Promotion (ссылка)

Points (Бонусы)
├── User
├── Amount
├── Type (earned/spent/expired)
└── Order reference

Чеклист


Версия: 2.1.0