Центральный процесс Волны 1. Пулы-дорожки Кассир · Гость · Внешн. системы, три гейта решений и danger-ветка «отмена без права → авторизация MSR → Audit Trail». Граф 1:1 с Mermaid-каноном front/order-payment.md.
business-rules §1,§3,§4,§7.
%%{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 Guest["Гость · внешн. актор"]
GU1(["Делает заказ"])
GU2(["Получает чек"])
end
subgraph Cash["Кассир"]
K1["Открыть чек-черновик (корзина)
Price Lock — цена зафиксирована (E-13)"]
K2["Добавить позиции + модификаторы
(free_qty — динамический)"]
GR{"Отмена позиции —
есть право?"}
AU["Авторизация: прокатка MSR-карты"]
AT["Запись в Audit Trail
executor + authorized_by"]
K3["Скидки — конвейер:
Zero-Floor → пропорционально (E-14, §1)"]
K4["Нажать «Оплатить»"]
GP{"Тип оплаты?"}
KN["Наличные: округление вниз до 5 ₸
(разница → убытки округления)"]
KB["Открыть денежный ящик"]
KC["Провести оплату картой"]
KS["Сплит: Rolling Balance —
пересчёт «К оплате» (нал + карта)"]
GF{"Нефискальный
тип оплаты?"}
NF["Без ОФД (нефискальный)"]
FISC["Фискализация чека"]
K7["Печать / выдача чека
(НДС 16% включён)"]
K8["Заказ уходит на кухню → E-06"]
end
subgraph Ext["Внешн. системы"]
WK["WebKassa"]
AQ["Эквайринг (банк-терминал)"]
end
GU1 -.-> K1
K1 --> K2
K2 -.->|"отмена позиции"| GR
GR -->|нет| AU --> AT
GR -->|да| AT
AT -.-> K2
K2 --> K3 --> K4 --> GP
GP -->|наличные| KN --> KB --> GF
GP -->|карта| KC --> GF
KC -. "сумма" .-> AQ
AQ -. "результат" .-> KC
GP -->|сплит| KS --> GF
GF -->|да| NF --> K7
GF -->|нет| FISC --> K7
FISC -. "запрос" .-> WK
WK -. "ФПД" .-> FISC
K7 --> K8
K7 -.-> GU2
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 auth fill:#ede7f6,stroke:#7e57c2,color:#4527a0;
classDef audit fill:#d6efec,stroke:#26a69a,color:#0f5c56;
class K1,K2,K3,K4,KN,KB,KC,KS,NF,FISC,K7,K8 task;
class WK,AQ ext;
class GR,GP,GF gate;
class GU1,GU2 event;
class AU auth;
class AT audit;
style Guest fill:#faf5ea,stroke:#d0c1a6;
style Cash fill:#fbf7ef,stroke:#e2d6c1;
style Ext fill:#f6efe2,stroke:#d0c1a6;
AU авторизацию MSR-картой к AT Audit Trail, затем возврат к K2. При наличии права (ветка «да») — сразу AT. Опасная операция протоколируется всегда (executor + authorized_by).