FlowPOS · tochka
hi-fi · схема L1 · BPMN

E-13 — Меню, номенклатура, цены и ТТК

Master Data процесс. Пулы-дорожки Финансист · HQ и Франчайзи · точка, гейты «цена ниже себестоимости?» и «Master Data или локальный?», danger-ветка Margin Alert (цена ниже себестоимости → красная ячейка → подтвердить) и read-only-запрет изменения Master Data. Волна 2 — историчность ТТК (FIFO не ломается). Граф 1:1 с Mermaid-каноном menu/menu-ttk-price.md.

ДисплейFraunces
ИнтерфейсHanken Grotesk
Цифры / кодыJetBrains Mono
1 · Роли · пулы · danger-оп Контекст процесса Владелец Master Data, франчайзи-точка и опасная операция цены. Правила расчёта себестоимости — альтитуда слой 4/5.
Роль-владелец Финансист · HQ — заводит карточку каталога на сеть (артикул, единица измерения, тип, категория, варианты), привязывает НКТ/ШК (услуге код НКТ не нужен, D-82), отдаёт приказ цены и состава ассортимента (адресаты — точки, город — фильтр их выбора, D-96), владеет ТТК. Доступность — отдельно: город решает ассортимент, точка правит исключения, касса показывает свои категории. Страна — уровень НКТ/НДС/валюты, объектом не заводится (D-89); печать этикетки ШК и весовой — для любой номенклатуры (D-53).
Внешние / вторая дорожка Франчайзи · точка — Master Data только на чтение; может завести лишь локальный товар (вне Master Data).
△ Опасная операция Margin Alert: цена ниже себестоимости → ячейка красным → требуется явное подтверждение. Плюс read-only-запрет изменения Master Data на точке.
Механика цены и историчность Смена цены = приказ: применяется в 00:00 местного времени; Price Lock — цена корзины замораживается при открытии чека (E-02). Волна 2: изменение ТТК не ломает себестоимость уже закупленных партий — прошлые приготовления остаются по старой версии рецепта (FIFO). Альтитуда → слой 4/5: синхронизация HQ→точки, реализация price_locked_at, пересчёт FIFO.
2 · Пулы-дорожки Дорожки-исполнители Четыре пула (3 в блоке цен: HQ-цены · франчайзи · модерация HQ + 1 в блоке ТТК). Тип узла = цвет + метка-kicker + значок-форма (не цветом одним).
Финансист · HQроль · владелец Master Data
◆ задачи + гейт
S1Нужно завести номенклатуру или сменить ценусобытие
F1Создать / изменить позицию каталога (сеть): наименование + артикул + единица измерения; тип — товар/блюдо/заготовка/модификатор/атрибут/тара/услуга; категориязадача
F2Привязать код НКТ и штрих-код; завести варианты (SKU) — свои цена, ШК, ТТК, тара; задать «Место приготовления» и «Нужен тикет» (умолчание от категории)задача
F3Доступность: ГОРОД — что из каталога продаётся; ТОЧКА — исключения; КАССА — свои категориизадача
F4Приказ: новая цена и состав ассортимента (адресаты — точки, фильтр «Город»)задача
G1Цена ниже себестоимости?гейт
F5Margin Alert: ячейка красным, подтвердить△ danger-оп ценыwarn
F6Приказ сохранён: дата вступления → история цензадача
F700:00 местного времени: применить приказсобытие
F8Price Lock — цена корзины замораживается при открытии чеказадача
D1Меню и цены обновлены на отмеченных точкахсобытие
Франчайзи · точкапредлагает · через аппрув HQ
⌇ пунктир
S2Франчайзи хочет изменить ассортимент или ценусобытие
G2Master Data или своё?гейт
B1Только чтение — прямое изменение запрещено△ владелец — HQзапрет
FR0Скоординированный приказ франчайзи по ценезадача
FR1Завести локальный товар (своя ТТК, вне Master Data)задача
Очередь модерации · HQаппрув правок франчайзи
◆ гейт + решение
Q1Заявка франчайзи на аппрувсобытие
M1HQ одобряет?гейт
M3Отклонить — причина франчайзи△ отказ HQзапрет
D2Локальный товар доступен (одобрено · цена → приказ)событие
Финансист · HQВолна 2 · владелец ТТК
◆ ТТК + гейт
TS1Создать / изменить ТТК (рецепт)событие
TT1Задать нормы закладки: брутто / нетто, % потерьзадача
TG1Меняем существующую ТТК (были приготовления)?гейт
TNEWРецепт применяется к приготовлениямзадача
THISTПрошлые приготовления — по старой версии рецептазадача
TNEW2Новая версия → только новые приготовлениязадача
TD1Себестоимость по ТТК актуальнасобытие
3 · BPMN-граф Поток процесса Режим fallback-mermaid (§5/§7): тёплая тема поверх канона. Два блока: Меню/цены и ТТК/историчность.
событие задача / шаг гейт (решение) Margin Alert (warn) read-only-запрет (danger) франчайзи · точка sequence flow message flow (владелец — HQ)

Блок 1 · E-13 Меню и цены (Волна 1) — источник: ответ E-13, G1, G2 + схемы 04, 45

%%{init:{
  "theme":"base",
  "themeVariables":{
    "fontFamily":"Hanken Grotesk, ui-sans-serif, sans-serif",
    "fontSize":"14px",
    "lineColor":"#5a4d3d",
    "primaryColor":"#f6e6cd",
    "primaryBorderColor":"#d5842a",
    "primaryTextColor":"#241b12",
    "clusterBkg":"#fbf7ef",
    "clusterBorder":"#d0c1a6",
    "edgeLabelBackground":"#fbf7ef",
    "tertiaryColor":"#f6efe2"
  },
  "flowchart":{"curve":"basis","nodeSpacing":42,"rankSpacing":52,"htmlLabels":true}
}}%%
flowchart TD
    subgraph Fin["Финансист · HQ (владелец Master Data)"]
        S1(["Нужно завести номенклатуру
или сменить цену"]) --> F1["Создать / изменить позицию каталога (сеть):
наименование + артикул + единица измерения;
тип — товар/блюдо/заготовка/модификатор/
атрибут/тара/услуга; категория"] F1 --> F2["Привязать код НКТ и штрих-код;
завести варианты (SKU) — свои цена, ШК, ТТК, тара;
задать «Место приготовления» и «Нужен тикет»
(умолчание от категории)"] F2 --> F3["Доступность:
ГОРОД — что из каталога продаётся;
ТОЧКА — исключения; КАССА — свои категории"] F3 --> F4["Приказ: новая цена
и состав ассортимента
(адресаты — точки, фильтр «Город»)"] F4 --> G1{"Цена ниже
себестоимости?"} G1 -->|да| F5["Margin Alert:
ячейка красным, подтвердить"] G1 -->|нет| F6["Приказ сохранён:
дата вступления → история цен"] F5 --> F6 F6 --> F7(["00:00 местного времени:
применить приказ"]) F7 --> F8["Price Lock — цена корзины
замораживается при открытии чека"] F8 --> D1(["Меню и цены обновлены
на отмеченных точках"]) end subgraph Fra["Франчайзи · точка (предлагает, не проводит)"] S2(["Франчайзи хочет изменить
ассортимент или цену"]) --> G2{"Master Data
или своё?"} G2 -->|"Master Data / рецепт"| B1["Только чтение —
прямое изменение запрещено"] G2 -->|"цена товара MD"| FR0["Скоординированный приказ
франчайзи по цене"] G2 -->|"локальный товар"| FR1["Завести локальный товар
(своя ТТК, вне Master Data)"] FR0 --> Q1 FR1 --> Q1 end subgraph Mod["Очередь модерации · HQ"] Q1(["Заявка франчайзи
на аппрув"]) --> M1{"HQ одобряет?"} M1 -->|"отклонено"| M3["Отклонить —
причина франчайзи"] M1 -->|"одобрено · цена"| F4 M1 -->|"одобрено · локальный"| D2(["Локальный товар доступен"]) end B1 -. "владелец — HQ" .-> F3 classDef event fill:#dcefe1,stroke:#3c8a5b,color:#1c4a30; classDef task fill:#f6e6cd,stroke:#d5842a,color:#241b12; classDef gate fill:#f8e8cf,stroke:#c9791f,color:#7a4a10; classDef actor fill:#fbf7ef,stroke:#94866f,color:#241b12,stroke-dasharray:5 3; classDef ext fill:#e5ecf6,stroke:#5b7bb0,color:#243a5f; classDef warn fill:#f8e8cf,stroke:#c9791f,color:#7a4a10; classDef danger fill:#f6dcd5,stroke:#bc3f2b,color:#7a241c; class F1,F2,F3,F4,F6,F8 task; class FR0,FR1 task; class G1,G2,M1 gate; class S1,F7,D1,S2,D2,Q1 event; class F5 warn; class B1,M3 danger; style Fin fill:#fbf7ef,stroke:#e2d6c1; style Fra fill:#faf5ea,stroke:#d0c1a6; style Mod fill:#f1e9db,stroke:#cbb48f;

Блок 2 · ТТК и историчность себестоимости (Этап 1) — источник: схема 03 · себестоимость закупленных партий не ломается

%%{init:{
  "theme":"base",
  "themeVariables":{
    "fontFamily":"Hanken Grotesk, ui-sans-serif, sans-serif",
    "fontSize":"14px",
    "lineColor":"#5a4d3d",
    "primaryColor":"#f6e6cd",
    "primaryBorderColor":"#d5842a",
    "primaryTextColor":"#241b12",
    "clusterBkg":"#fbf7ef",
    "clusterBorder":"#d0c1a6",
    "edgeLabelBackground":"#fbf7ef",
    "tertiaryColor":"#f6efe2"
  },
  "flowchart":{"curve":"basis","nodeSpacing":42,"rankSpacing":52,"htmlLabels":true}
}}%%
flowchart TD
    subgraph FinT["Финансист · HQ (владелец ТТК)"]
        TS1(["Создать / изменить ТТК (рецепт)"]) --> TT1["Задать нормы закладки:
брутто / нетто, % потерь"] TT1 --> TG1{"Меняем существующую ТТК
(были приготовления)?"} TG1 -->|"новая ТТК"| TNEW["Рецепт применяется
к приготовлениям"] TG1 -->|"изменение существующей"| THIST["Прошлые приготовления остаются
по старой версии рецепта"] THIST --> TNEW2["Новая версия →
только новые приготовления"] TNEW --> TD1(["Себестоимость по ТТК актуальна"]) TNEW2 --> TD1 end classDef actor fill:#fbf7ef,stroke:#94866f,color:#241b12,stroke-dasharray:5 3; classDef task fill:#f6e6cd,stroke:#d5842a,color:#241b12; classDef gate fill:#f8e8cf,stroke:#c9791f,color:#7a4a10; classDef event fill:#dcefe1,stroke:#3c8a5b,color:#1c4a30; class TT1,TNEW,THIST,TNEW2 task; class TG1 gate; class TS1,TD1 event; style FinT fill:#fbf7ef,stroke:#e2d6c1;
◍ fallback-mermaid Санкционировано design-system §5/§7 для ВСЕХ L1: swimlanes (Финансист·HQ / Франчайзи·точка) + гейты + cross-pool message-flow (B1 «владелец — HQ» → F3) делают hand-authored CSS-grid хрупким.
Danger / warn-ветки канона: гейт G1 «да» → F5 Margin Alert (цена ниже себестоимости: ячейка красным, требуется подтверждение) → F6. Гейт G2 «Master Data» → B1 «изменение запрещено» (read-only): владелец Master Data — HQ, message-flow B1 → F3. Локальный товар (ветка «локальный товар») франчайзи заводит через очередь модерации HQ — как показано графом выше; прямого права завести в обход аппрува нет (D-13 — без исключений). Волна 2: изменение ТТК не ломает историчность — прошлые приготовления по старой версии рецепта (FIFO).