Процесс Волны 1. Два графа канона: применение на кассе (пулы Кассир · Внешн. система, три гейта Тип скидки? / Есть право? / Комбинируется?, две danger-ветки — авторизация менеджера и служебное питание 100% через MSR) и настройка акции в бэк-офисе. Граф 1:1 с Mermaid-каноном menu/discounts.md.
business-rules §1–2.
%%{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 Cash["Кассир (применение)"]
S1(["Применить скидку / акцию"]) --> G0{"Тип скидки?"}
G0 -->|"обычная / акция"| GP{"Есть право на скидку
(для этого блюда)?"}
GP -->|нет| AUP["Авторизация: карта менеджера"]
AUP --> G1
GP -->|да| G1{"Комбинируется
с уже применёнными?"}
G1 -->|"нет (флаг off)"| B1["Вторую скидку
добавить нельзя"]
G1 -->|"да (флаг on)"| F2["Применить по базе акции:
полная сумма или каскад"]
F2 --> F3["Zero-Floor: итог не ниже 0,
остаток скидки сгорает"]
F3 --> F4["Распределить пропорционально
по позициям до НДС (§1)"]
F4 --> FIS["Чек фискализируется
штатно, с НДС"]
G0 -->|"сотрудник 10%"| E1["По карте сотрудника (прокатка)"]
E1 --> E2["Пропорциональный пересчёт"]
E2 --> FIS
G0 -->|"служебное питание (100%)"| AU["Авторизация: прокатка MSR-карты
executor + authorized_by"]
AU --> SM1["Скидка 100%"]
SM1 --> SM2["Чек закрывается НЕфискально"]
SM2 --> SM3["Авто-акт списания еды
в убыток → E-12"]
FIS --> D1(["Скидка применена,
чек рассчитан"])
SM3 --> D2(["Служебное питание оформлено"])
B1 --> D3(["Действует одна скидка"])
end
subgraph Ext["Внешн. система"]
WK["WebKassa"]
end
FIS -. "фискализация ФПД" .-> WK
classDef actor fill:#fbf7ef,stroke:#94866f,color:#241b12,stroke-dasharray:5 3;
classDef ext fill:#e5ecf6,stroke:#5b7bb0,color:#243a5f;
classDef gate fill:#f8e8cf,stroke:#c9791f,color:#7a4a10;
classDef event fill:#dcefe1,stroke:#3c8a5b,color:#1c4a30;
classDef task fill:#f6e6cd,stroke:#d5842a,color:#241b12;
classDef danger fill:#f6dcd5,stroke:#bc3f2b,color:#7a241c;
class F2,F3,F4,FIS,E1,E2 task;
class WK ext;
class G0,GP,G1 gate;
class AUP,AU,SM1,SM2,SM3,B1 danger;
class S1,D1,D2,D3 event;
style Cash fill:#fbf7ef,stroke:#e2d6c1;
style Ext fill:#f6efe2,stroke:#d0c1a6;
GP «нет» — скидка без права → AUP авторизация картой менеджера, затем возврат в поток комбинирования G1. (2) Гейт G0 «служебное питание (100%)» → AU прокатка MSR-карты (executor + authorized_by) → SM1 скидка 100% → SM2 чек закрывается НЕфискально → SM3 авто-акт списания еды в убыток → E-12. Обе операции протоколируются; служебное питание не проходит фискализацию.
%%{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 Adm["Финансист / менеджер"]
AS1(["Создать акцию"]) --> AA1["Базовое: название + название в пречеке,
тип (Дисконт / Скидки-надбавки / Флаер)"]
AA1 --> AA2["Условия: сумма ОТ–ДО, период,
филиалы, режим обслуживания"]
AA2 --> AA3["Назначение: вручную / по карте / авто;
права пер-блюдо; матрица совместимости оплат"]
AA3 --> AA4["Механика: база (полная / каскад),
вектор (скидка / надбавка), % или фикс (Zero-Floor)"]
AA4 --> AA5["Активировать (флаг «Активна» —
вкл/выкл по всей сети)"]
AA5 --> AD1(["Акция доступна на кассе (см. выше)"])
end
classDef task fill:#f6e6cd,stroke:#d5842a,color:#241b12;
classDef event fill:#dcefe1,stroke:#3c8a5b,color:#1c4a30;
class AA1,AA2,AA3,AA4,AA5 task;
class AS1,AD1 event;
style Adm fill:#fbf7ef,stroke:#e2d6c1;
AD1 питает граф «применение на кассе» выше (акция доступна на кассе).