BR 1.9.2 — Закреплённые и свободные модификаторы

Проблема

Сейчас все модификаторы живут в одном справочнике и привязываются к товару одинаково. Но по факту есть два разных типа:

  • Размер пиццы — неотъемлемая часть товара, определяет рецептуру (разное количество теста, соуса, сыра). Без выбора размера блюдо не существует.
  • Доп. сыр — опциональная добавка, клиент может взять или нет. Фиксированная порция.

Эти два типа модификаторов ведут себя по-разному с точки зрения техкарт, списания и сборки меню. Текущая архитектура не разделяет их явно.

Два типа модификаторов

Закреплённый (структурный)

Определяет вариант товара. Влияет на рецептуру.

  • Живёт внутри товара (вкладка “Техкарта”)
  • Обязателен — клиент должен выбрать (min >= 1)
  • У каждой опции своя техкарта товара (уже реализовано как per-size техкарты в BR 1.9)
  • Примеры: размер пиццы, вид теста, объём напитка

Свободный (дополнительный)

Опциональная добавка. Не влияет на базовую рецептуру товара.

  • Живёт в отдельном справочнике модификаторов (как сейчас)
  • Опционален — клиент может добавить или нет
  • У каждого своя фиксированная техкарта модификатора (BR 1.9.1)
  • Порция фиксированная, не зависит от выбранного размера
  • Примеры: доп. сыр, сироп, соус, сливки

Сборка меню (версия каталога)

При добавлении товара в версию каталога:

  1. Товар приносит с собой свои закреплённые модификаторы (они часть товара)
  2. Свободные модификаторы привязываются отдельно (как сейчас)

Результат: для любой комбинации заказа (Маргарита 30см + доп. сыр + доп. пепперони) система знает полный состав ингредиентов.

Что это даёт

  • Списание со склада — точное, для любой комбинации заказа
  • ГОСТ ТТК — композитная техкарта собирается: базовая (по выбранному варианту) + техкарты добавок
  • КБЖУ — суммируется из всех техкарт выбранной комбинации
  • Себестоимость — точная, складывается из техкарт

Пример: Пицца Маргарита

Товар: Маргарита

  • Закреплённый мод “Размер”:
    • 20см → техкарта: тесто 200г, соус 60г, сыр 100г
    • 30см → техкарта: тесто 350г, соус 100г, сыр 180г

Свободные моды (привязаны к товару в каталоге):

  • Доп. сыр → техкарта: моцарелла 50г
  • Доп. пепперони → техкарта: пепперони 40г

Заказ: Маргарита 30см + доп. сыр

  • Списание: тесто 350г + соус 100г + сыр 180г + моцарелла 50г
  • КБЖУ: сумма всех компонентов

Ограничения MVP

  • Порция свободного модификатора фиксированная — не зависит от выбранного закреплённого модификатора (размера)
  • В будущем можно добавить контекстные техкарты (разная порция доп. сыра для разных размеров)

Затронутые сервисы

  • Catalog Service — разделение типов модификаторов, сборка меню
  • Warehouse Service — композитное списание
  • Admin BFF + Web — UX конструктора товара (закреплённые во вкладке “Техкарта”, свободные во вкладке “Модификаторы”)