BR 1.8: Модификаторы товаров
Зависит от BR 1.7 — Каталог и BR 1.7.2 — Конструктор
Контекст
Модификаторы позволяют кастомизировать товар при заказе: выбрать размер пиццы, добавить соус, убрать ингредиент.
Ключевое решение: модификатор = как товар. Самостоятельная сущность в справочнике, версионируется, привязывается к товару в каталоге (не в справочнике).
Архитектура
Справочник (sidebar: "Модификаторы"):
Группа модификаторов (версионная, самостоятельная)
└── Опции (название, цена, min/max количества)
Каталог (конструктор черновика):
Товар@version
└── Привязанные группы модификаторов (group@version + per-product override min/max)
Аналогия с товарами:
- Товар живёт в справочнике → привязывается к категории в каталоге
- Группа модификаторов живёт в справочнике → привязывается к товару в каталоге
Что нужно
1. Группа модификаторов (справочник)
Самостоятельная сущность. Создаётся один раз, переиспользуется между товарами.
Поля группы:
- Название (обязательное, например “Выберите размер”, “Добавки”, “Соусы”)
- Тип: групповой (выбор из нескольких опций) / простой (одиночный модификатор)
minAmount/maxAmount— сколько опций можно выбрать из группы- min=1, max=1 → обязательный единственный выбор (размер пиццы)
- min=0, max=3 → необязательный, до 3 добавок
- min=0, max=1 → необязательный, одна опция (простой модификатор)
- Версия (автоинкремент)
- Статус: active / inactive
Опции внутри группы:
- Название (обязательное, например “25 см”, “Доп. сыр”, “Без лука”)
- Базовая цена (>= 0₽, 0 = бесплатная опция). Прейскурант может перекрыть — BR 1.10
minAmount/maxAmount/defaultAmount— количество этой опции- Пример: “Доп. сыр” (min 0, max 3, default 0, +50₽/шт)
- Порядок отображения
2. Версионность групп
Как товары: редактирование → новая версия группы. Старая версия сохраняется.
Группа "Размер пиццы":
v1: [25 см, 30 см, 35 см]
v2: [25 см, 30 см, 35 см, 40 см] ← добавили новый размер
Каталог ссылается на конкретную версию группы (как на версию товара).
3. Переиспользование
Группа создаётся один раз и привязывается к нескольким товарам в каталоге:
Каталог v3 (draft):
Маргарита@v2 + [Размер@v1 (min=1,max=1), Добавки@v2 (min=0,max=3)]
Пепперони@v1 + [Размер@v1 (min=1,max=1), Добавки@v2 (min=0,max=3)]
Бургер@v1 + [Добавки@v2 (min=0,max=2)] ← другой override max
Капучино@v1 + [Молоко@v1 (min=1,max=1)] ← другая группа
Per-product override: при привязке группы к товару можно переопределить min/max на уровне привязки (не группы). Группа “Добавки” глобально max=3, но для бургера max=2.
4. Ценообразование
Цена опции модификатора — через прейскурант (BR 1.9), как и цена товара. Базовая цена в опции, прейскурант может перекрыть per-ТТ.
Структура фронта
Sidebar
├── Каталог
│ ├── Товары ← справочник товаров
│ ├── Модификаторы ← справочник групп модификаторов
│ └── Версии ← конструктор (категории + товары + модификаторы)
Раздел “Модификаторы” (/catalog/modifiers)
Справочник групп:
┌─────────────────────────────────────────────────────────────┐
│ Модификаторы [+ Создать группу] │
├───────────────────┬───────────┬──────┬──────────┬──────────┤
│ Название │ Тип │Опций │ Версия │ Действия │
├───────────────────┼───────────┼──────┼──────────┼──────────┤
│ 🔗 Размер пиццы │ Групповой │ 4 │ v2 │ ⋮ │
│ 🔗 Добавки │ Групповой │ 5 │ v2 │ ⋮ │
│ 🔗 Тип молока │ Групповой │ 3 │ v1 │ ⋮ │
│ 🔗 Без лука │ Простой │ 1 │ v1 │ ⋮ │
└───────────────────┴───────────┴──────┴──────────┴──────────┘
Карточка группы: название, тип, min/max, список опций (название, цена, количество), история версий.
Создание/редактирование: форма с полями группы + inline-таблица опций (добавить/убрать/изменить).
Конструктор черновика — привязка модификаторов
В конструкторе каталога (BR 1.7.2), при клике на товар — показать привязанные модификаторы:
┌────────────────┬────────────────────────────────────────────┐
│ Категории │ Товары в "Пицца" │
│ │ │
│ ▾ Еда │ Маргарита v2 [v1▾v2▾] [Убрать] │
│ ▸ Пицца ← │ └ Модификаторы: │
│ ▸ Бургеры │ ├ Размер@v1 (1-1) [Убрать] │
│ ▾ Напитки │ ├ Добавки@v2 (0-3) [Убрать] │
│ │ └ [+ Добавить модификатор] │
│ │ │
│ │ Пепперони v1 [v1▾] [Убрать] │
│ │ └ Модификаторы: │
│ │ ├ Размер@v1 (1-1) [Убрать] │
│ │ └ [+ Добавить модификатор] │
└────────────────┴────────────────────────────────────────────┘
“Добавить модификатор” → модалка:
- Выбрать группу из справочника
- Выбрать версию группы
- Override min/max (опционально)
- Добавить → привязка создана
Ролевой доступ
| Роль | Справочник модификаторов | Привязка в каталоге |
|---|---|---|
| Франшиза | CRUD групп и опций | Привязка/отвязка в конструкторе |
| Франчайзи | Просмотр (published) | Нет доступа |
| Менеджер | Просмотр (published) | Нет доступа |
| Кассир | Нет доступа | Нет доступа |
Техкарты и модификаторы (связь с BR 1.9)
Три типа поведения модификатора при списании:
| Тип | Пример | Что делает при списании |
|---|---|---|
| Размер | 25/30/35 см | Выбирает вариант техкарты товара (per-size) |
| Добавка | Доп. сыр, халапеньо | Добавляет ингредиент к списанию (рецептура модификатора) |
| Замена | Овсяное молоко | Заменяет ингредиент в техкарте товара |
Рецептура модификатора — в Warehouse Service (BR 1.9), не в Catalog Service.
Что НЕ входит (отложено)
- Отображение модификаторов на POS — Phase 2
- Фото опций модификаторов — Phase 2
- Составные модификаторы (модификатор из модификаторов) — Phase 2+
Решения
- Группа модификаторов = самостоятельная версионная сущность в справочнике (как товар)
- Привязка к товару = в каталоге (per-version), не в справочнике
- Per-product override min/max при привязке
- Переиспользование — одна группа привязывается к нескольким товарам
- Ценообразование — через прейскурант (BR 1.9)
- Sidebar — отдельный пункт “Модификаторы” в разделе “Каталог”