FlowPOS · tochka
hi-fi · схема L1 · BPMN-эталон

E-02 — Приём заказа и оплата

Центральный процесс Волны 1. Пулы-дорожки Кассир · Гость · Внешн. системы, три гейта решений и danger-ветка «отмена без права → авторизация MSR → Audit Trail». Граф 1:1 с Mermaid-каноном front/order-payment.md.

ДисплейFraunces
ИнтерфейсHanken Grotesk
Цифры / кодыJetBrains Mono
1 · Роль · внешние · danger-оп Контекст процесса Роль-исполнитель, внешние акторы/системы и одна опасная операция. Правила расчёта — business-rules §1,§3,§4,§7.
Роль-исполнитель Кассир — открывает чек, добавляет позиции, проводит оплату и печатает чек.
Внешние Гость (актор) · WebKassa (фискализация) · Эквайринг (банк-терминал).
△ Опасная операция Отмена позиции без права → авторизация MSR → запись в Audit Trail (executor + authorized_by).
Совместимость оплат Применённая акция может блокировать несовместимые типы оплаты (матрица акции — E-14, business-rules §2); на шаге «Тип оплаты?» несовместимые кнопки недоступны. Альтитуда → слой 4/5: идемпотентность оплаты, ESC/POS-импульс ящика, формат WebKassa, офлайн-очередь (E-03: лимиты — business-rules §5).
2 · Пулы-дорожки Дорожки-исполнители Три пула канона: внешний актор, роль, внешние системы. Тип узла = цвет + метка-kicker + значок-форма (не цветом одним).
Гостьвнешн. актор
⌇ пунктир
GU1Делает заказсобытие
GU2Получает чексобытие
Внешн. системыsystem
◫ рамка
WKWebKassaфискализация · запрос → ФПДсистема
AQЭквайринг (банк-терминал)сумма → результатсистема
Кассирроль-исполнитель
◆ задачи + гейты
K1Открыть чек-черновик (корзина)Price Lock — цена зафиксирована (E-13)задача
K2Добавить позиции + модификаторыfree_qty — динамическийзадача
GRОтмена позиции — есть право?гейт
AUАвторизация: прокатка MSR-картыdanger·auth
ATЗапись в Audit Trailexecutor + authorized_byaudit
K3Скидки — конвейерZero-Floor → пропорционально (E-14, §1)задача
K4Нажать «Оплатить»задача
GPТип оплаты?гейт
KNНаличные: округление вниз до 5 ₸разница → убытки округлениязадача
KBОткрыть денежный ящикзадача
KCПровести оплату картойзадача
KSСплит: Rolling Balanceпересчёт «К оплате» (нал + карта)задача
GFНефискальный тип оплаты?гейт
NFБез ОФД (нефискальный)задача
FISCФискализация чеказадача
K7Печать / выдача чекаНДС 16% включёнзадача
K8Заказ уходит на кухню → E-06задача
3 · BPMN-граф Поток процесса Режим fallback-mermaid (§5/§7): тёплая тема поверх канона. Связи — sequence сплошная, message пунктир.
событие задача / шаг гейт (решение) авторизация MSR Audit Trail система внешн. актор danger-ветка sequence flow message flow
%%{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;
◍ fallback-mermaid Санкционировано design-system §5/§7 для эталона E-02: swimlanes + 3 гейта + двунаправленные message-flow (KC⇄Эквайринг, FISC⇄WebKassa) делают hand-authored CSS-grid хрупким.
Danger-ветка (гейт GR «нет»): отмена позиции без права ведёт через AU авторизацию MSR-картой к AT Audit Trail, затем возврат к K2. При наличии права (ветка «да») — сразу AT. Опасная операция протоколируется всегда (executor + authorized_by).