BR 1.8: Модификаторы товаров

Контекст

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

Ключевое решение: модификатор = как товар. Самостоятельная сущность в справочнике, версионируется, привязывается к товару в каталоге (не в справочнике).

Архитектура

Справочник (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-ТТ.


Структура фронта

├── Каталог
│     ├── Товары           ← справочник товаров
│     ├── Модификаторы     ← справочник групп модификаторов
│     └── Версии           ← конструктор (категории + товары + модификаторы)

Раздел “Модификаторы” (/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)        [Убрать]     │
│                │     └ [+ Добавить модификатор]              │
└────────────────┴────────────────────────────────────────────┘

“Добавить модификатор” → модалка:

  1. Выбрать группу из справочника
  2. Выбрать версию группы
  3. Override min/max (опционально)
  4. Добавить → привязка создана

Ролевой доступ

РольСправочник модификаторовПривязка в каталоге
Франшиза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+

Решения

  1. Группа модификаторов = самостоятельная версионная сущность в справочнике (как товар)
  2. Привязка к товару = в каталоге (per-version), не в справочнике
  3. Per-product override min/max при привязке
  4. Переиспользование — одна группа привязывается к нескольким товарам
  5. Ценообразование — через прейскурант (BR 1.9)
  6. Sidebar — отдельный пункт “Модификаторы” в разделе “Каталог”

Ссылки