BR 1.9.1: Техкарты модификаторов
Зависит от:
Контекст
В BR 1.9 техкарта добавки-модификатора привязана к товару через modifier_option_id в таблице tech_cards. Это создаёт проблему: если “Доп. сыр” привязан к 20 товарам — нужно 20 одинаковых техкарт (50г моцареллы в каждой).
Решение: техкарта живёт на уровне опции модификатора в справочнике. При привязке модификатора к товару — техкарта подцепляется автоматически.
Как работает
Было (BR 1.9)
Техкарта добавки привязана к товару:
tech_cards:
product: Маргарита, version: v2, modifier_option: Доп.сыр → [Моцарелла 50г]
product: Пепперони, version: v1, modifier_option: Доп.сыр → [Моцарелла 50г] ← дубль
Будет (BR 1.9.1)
Техкарта добавки привязана к модификатору (один раз):
modifier_tech_cards:
modifier_option: Доп.сыр, group_version: v1 → [Моцарелла 50г]
При привязке "Добавки@v1" к любому товару →
техкарта "Доп. сыр" автоматически применяется
Per-size техкарты — без изменений
Size-модификаторы (25/30/35 см) по-прежнему создают техкарты через tech_cards.modifier_option_id — потому что рецептура зависит от товара (пицца 30 см ≠ бургер 30 см). Это НЕ дублирование.
Разделение:
- Size-модификатор (min=1, max=1) → техкарта на уровне товара (
tech_cards.modifier_option_id) - Добавка (min=0, max=N) → техкарта на уровне модификатора (
modifier_tech_cards)
Данные
Новая таблица: modifier_tech_cards (Warehouse Service)
| Поле | Описание |
|---|---|
| id | PK |
| franchise_id | ID франшизы |
| modifier_option_id | UUID опции (→ Catalog Service modifier_options.id) |
| modifier_group_version | Версия группы модификаторов |
| output_weight | Выход (вес/объём) |
| output_unit | Единица |
| cooking_description | Технология приготовления |
| status | active / inactive |
UNIQUE: (modifier_option_id, modifier_group_version)
Новая таблица: modifier_tech_card_items
Аналогично recipe_items — строки рецепта с ингредиентами, брутто, нетто, % потерь.
Фронт
Где редактировать
В справочнике модификаторов — карточка группы → таблица опций → колонка “Техкарта”:
- Если есть техкарта → бейдж “Есть” (кликабельный)
- Если нет → кнопка “Создать”
- Клик → модалка или inline-раскрытие с таблицей ингредиентов (аналогично табу Техкарта в товаре, но без per-size)
В конструкторе товара
На MVP — без изменений. При просмотре модификаторов товара можно видеть “Доп. сыр — техкарта: есть” (read-only). Кнопка перехода к редактированию техкарты модификатора — Phase 2.
Заморозка published
Модификатор версионный (modifier_group_version). Техкарта привязана к modifier_option_id + modifier_group_version.
Если в published каталоге товар использует Добавки@v1 → техкарта для v1 заморожена. Редактировать можно только техкарту для v2 (новой версии группы).
API должен проверять published перед мутацией (аналог BUG-026).
При продаже (авто-списание)
Заказ: Маргарита 30 см + 2x Доп. сыр
1. tech_cards (product=Маргарита, version=v2, modifier_option=30см)
→ Тесто 300г, Соус 120г, Моцарелла 180г
2. modifier_tech_cards (modifier_option=Доп.сыр, group_version=v1)
→ Моцарелла 50г × 2 = 100г
Итого: Тесто 300г, Соус 120г, Моцарелла 280г
Ролевой доступ
| Роль | Что может |
|---|---|
| Франшиза | CRUD техкарт модификаторов (в справочнике) |
| Франчайзи | Просмотр |
| Менеджер | Просмотр |
| Кассир | Нет доступа |
Что входит
- Новые таблицы
modifier_tech_cards+modifier_tech_card_itemsв Warehouse Service - API: CRUD техкарт модификаторов (аналог tech-cards, но по modifier_option_id)
- Фронт: в справочнике модификаторов — редактирование техкарт опций
- Защита published
Что НЕ входит
- Кнопка перехода из конструктора товара к техкарте модификатора — Phase 2
- Переопределение техкарты модификатора per-товар — Phase 2
- Себестоимость с учётом модификаторов (суммирование техкарт товара + модификаторов) — Phase 2