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

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

Центральный процесс Волны 1. Пулы-дорожки Кассир · Гость · Внешн. системы, три гейта решений и danger-ветка «отмена уже отправленной на кухню позиции → авторизация MSR → Audit Trail» (до отправки — свободно, D-31). Граф 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); до отправки — свободно (D-31).
Совместимость оплат Применённая акция может блокировать несовместимые типы оплаты (матрица акции — E-14, business-rules §2); на шаге «Тип оплаты?» несовместимые кнопки недоступны. Альтитуда → слой 4/5: идемпотентность оплаты, ESC/POS-импульс ящика, формат WebKassa, офлайн-очередь (E-03: лимиты — business-rules §5). Слой 1 (город/таксономия/кредит): способ подачи (здесь/с собой) + упаковка (D-18/D-19); park-orders — несколько draft-заказов на кассе, переживают закрытие смены + таймер-пинг (D-20); оплата «в долг» — фискальная, долг сотрудника с лимитом (D-21).
2 · Пулы-дорожки Дорожки-исполнители Три пула канона: внешний актор, роль, внешние системы. Тип узла = цвет + метка-kicker + значок-форма (не цветом одним).
Гостьвнешн. актор
⌇ пунктир
GU1Делает заказсобытие
GU2Получает чексобытие
Внешн. системыsystem
◫ рамка
WKWebKassaфискализация · запрос → ФПДсистема
AQЭквайринг (банк-терминал)сумма → результатсистема
Кассирроль-исполнитель
◆ задачи + гейты
K1Открыть чек-черновик (корзина)Price Lock (E-13) · подача по умолчанию: здесь/с собойзадача
K2Позиции + модификаторы + атрибутыfree_qty · способ подачи — у позициизадача
GRПозиция уже отправлена на кухню?гейт
FREEУбрать строку свободномисклик — без авторизации (до отправки, D-31)задача
AUАвторизация: прокатка MSR-картыdanger·auth
ATЗапись в Audit Trailexecutor + authorized_byaudit
K3Скидки — конвейерZero-Floor → пропорционально (E-14, §1)задача
K4Нажать «Оплатить»задача
GPТип оплаты?гейт
KNНаличные: округление вниз до 5 ₸разница → убытки округлениязадача
KBОткрыть денежный ящикесли автооткрытие вкл. (D-32)задача
KCПровести оплату картойзадача
KSСплит: Rolling Balanceпересчёт «К оплате» (нал + карта)задача
KDОплата «в долг»: рост долга сотрудникаблок при лимите по должности (D-21)задача
GFКто печатает фискальный чек?признак 1 из трёх · D-155гейт
NFНикто: чека нетсертификат, бонусы — выручка при этом естьзадача
NXВнешний контур: чек печатает курьер / сайт / агрегаторчек есть, но не нашзадача
GRVПризнаётся ли выручка?признак 2 · независим от первогогейт
FISCФискализация чеказадача
K7Печать / выдача чекаНДС включён; ставка — настройка (D-30)задача
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{"Позиция уже
отправлена на кухню?"} 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;
◍ 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 (executor + authorized_by), затем возврат к K2. Если позиция ещё не отправлена (ветка «нет») — FREE: строку убирают свободно, без авторизации (мисклик, D-31).