Master Data процесс. Пулы-дорожки Финансист · HQ и Франчайзи · точка, гейты «цена ниже себестоимости?» и «Master Data или локальный?», danger-ветка Margin Alert (цена ниже себестоимости → красная ячейка → подтвердить) и read-only-запрет изменения Master Data. Волна 2 — историчность ТТК (FIFO не ломается). Граф 1:1 с Mermaid-каноном menu/menu-ttk-price.md.
альтитуда слой 4/5.
Блок 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;
G1 «да» → F5 Margin Alert (цена ниже себестоимости: ячейка красным, требуется подтверждение) → F6. Гейт G2 «Master Data» → B1 «изменение запрещено» (read-only): владелец Master Data — HQ, message-flow B1 → F3. Локальный товар (ветка «локальный товар») франчайзи заводит через очередь модерации HQ — как показано графом выше; прямого права завести в обход аппрува нет (D-13 — без исключений). Волна 2: изменение ТТК не ломает историчность — прошлые приготовления по старой версии рецепта (FIFO).