Процесс Волны 1. Два графа канона: применение на кассе (пулы Кассир · Внешн. система, три гейта Тип скидки? / Есть право «может выдавать скидки»? / Комбинируется?, danger-ветка — авторизация уполномоченного) и настройка акции в бэк-офисе. Граф 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
FIS --> D1(["Скидка применена,
чек рассчитан"])
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,B1 danger;
class S1,D1,D3 event;
style Cash fill:#fbf7ef,stroke:#e2d6c1;
style Ext fill:#f6efe2,stroke:#d0c1a6;
GP «нет» — скидка без права → AUP авторизация картой уполномоченного (executor + authorized_by, Audit Trail), затем возврат в поток комбинирования G1. Вторая ветка удалена (D-99): служебное питание оказалось счётом списания, а не кассовой операцией — скидки 100%, MSR-прокатки и нефискального чека по нему не существует. Еда приходит на склад и списывается актом на этот счёт → E-12. Скидка сотрудника 10% (D-02) — другая вещь и остаётся: карта, фискальный чек с НДС.
%%{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 --> GFR{"Создаёт франчайзи?"}
GFR -->|"да"| APP["Аппрув HQ
(очередь модерации, D-13)"]
GFR -->|"нет (HQ)"| AA5["Активировать (флаг «Активна» —
вкл/выкл по всей сети)"]
APP --> AA5
AA5 --> AD1(["Акция доступна на кассе (см. выше)"])
end
classDef task fill:#f6e6cd,stroke:#d5842a,color:#241b12;
classDef event fill:#dcefe1,stroke:#3c8a5b,color:#1c4a30;
classDef gate fill:#f8e8cf,stroke:#c9791f,color:#7a4a10;
classDef hq fill:#f1e9db,stroke:#cbb48f,color:#5a4a2e;
class AA1,AA2,AA3,AA4,AA5 task;
class GFR gate;
class APP hq;
class AS1,AD1 event;
style Adm fill:#fbf7ef,stroke:#e2d6c1;
AD1 питает граф «применение на кассе» выше (акция доступна на кассе).