Центральный процесс Волны 1. Пулы-дорожки Кассир · Гость · Внешн. системы, три гейта решений и danger-ветка «отмена уже отправленной на кухню позиции → авторизация MSR → Audit Trail» (до отправки — свободно, D-31). Граф 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{"Позиция уже
отправлена на кухню?"}
FREE["Убрать строку свободно
(мисклик — без авторизации)"]
AU["Авторизация: прокатка MSR-карты"]
AT["Запись в Audit Trail
executor + authorized_by"]
K3["Скидки — конвейер:
Zero-Floor → пропорционально (E-14, §1)"]
K4["Нажать «Оплатить»"]
GP{"Тип оплаты?"}
KN["Наличные: округление вниз до 5 ₸
(разница → убытки округления)"]
KB["Открыть денежный ящик
(если автооткрытие вкл., D-32)"]
KC["Провести оплату картой"]
KS["Сплит: Rolling Balance —
пересчёт «К оплате» (нал + карта)"]
KD["Оплата «в долг»: рост долга сотрудника,
блок при лимите по должности (D-21)"]
GF{"Кто печатает
фискальный чек?"}
NF["Никто: чека нет
(сертификат, бонусы)"]
NX["Внешний контур: чек печатает
курьер / сайт / агрегатор"]
GRV{"Признаётся ли
выручка?"}
FISC["Фискализация чека"]
K7["Печать / выдача чека
(НДС включён; ставка — настройка, D-30)"]
K8["Заказ уходит на станции (кухня/бар) → E-06"]
end
subgraph Ext["Внешн. системы"]
WK["WebKassa"]
AQ["Эквайринг (банк-терминал)"]
end
GU1 -.-> K1
K1 --> K2
K2 -.->|"убрать позицию"| GR
GR -->|"нет — не отправлена"| FREE
FREE -.-> K2
GR -->|"да — отправлена"| AU --> AT
AT -.-> K2
K2 --> K3 --> K4 --> GP
GP -->|наличные| KN --> KB --> GF
GP -->|карта| KC --> GF
KC -. "сумма" .-> AQ
AQ -. "результат" .-> KC
GP -->|сплит| KS --> GF
GP -->|в долг| KD --> GF
GF -->|"наша касса"| FISC --> K7
GF -->|"внешний контур"| NX --> GRV
GF -->|никто| NF --> GRV
GRV -->|"да: выручка есть"| K7
GRV -->|"нет: за счёт заведения"| 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,KD,NF,NX,FISC,K7,K8 task;
class WK,AQ ext;
class GR,GP,GF,GRV 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 (executor + authorized_by), затем возврат к K2. Если позиция ещё не отправлена (ветка «нет») — FREE: строку убирают свободно, без авторизации (мисклик, D-31).