FlowPOS · tochka
hi-fi · схема L1 · BPMN

E-04 — Возврат

Процесс возврата Волны 1. Пул-дорожка Кассир и внешняя система WebKassa (сторно / реверс чека), пять гейтов решений и danger-ветка «возврат без права → авторизация MSR-картой» + Cross-shift Cash Block (нал на кассе запрещён). Граф 1:1 с Mermaid-каноном front/refund.md.

ДисплейFraunces
ИнтерфейсHanken Grotesk
Цифры / кодыJetBrains Mono
1 · Роль · внешние · danger-оп Контекст процесса Роль-исполнитель, внешняя система и опасные операции возврата. Правила — business-rules §5.
Роль-исполнитель Кассир (право на возврат; нет права → авторизация MSR). Оформляет возврат / сторно чека.
Внешние WebKassa — фискальное сторно / возврат чека (реверс на эквайера / Kaspi проходит фискально через неё).
△ Опасные операции Возврат без права → авторизация MSR-картой. Прошлая смена: Cross-shift Cash Block — нал на кассе запрещён (ящик привязан к смене).
Прошлая (закрытая) смена — по способу исходной оплаты Решение D-03: оплата картой / Kaspi QR → реверс на кассе (эквайер / Kaspi, фискально через WebKassa) под авторизацией менеджера; оплата наличными → нал на кассе запрещён (Cross-shift Refund Block) → безнал (ручной перевод) через бухгалтерию. Альтитуда → слой 4/5: имена полей запроса/ответа WebKassa (механика — business-rules §5); здесь только «сторно / возврат чека».
2 · Пулы-дорожки Дорожки-исполнители Два пула канона: роль-исполнитель и внешняя система. Тип узла = цвет + метка-kicker + значок-форма (не цветом одним).
Кассирроль-исполнитель
◆ задачи + гейты
S1Нажать «Возврат»событие
GRЕсть право на возврат?гейт
AUАвторизация: прокатка MSR-картыdanger·auth
GFФПД валиден? (скан QR / ввод)гейт
ESCБлок на кассе → эскалация в бухгалтериюотказ
GSЧек из текущей смены?гейт
STOСторнировать чекзадача
GPAYИсходная оплата? (прошлая смена)гейт
AUMАвторизация менеджера → реверс на карту (эквайер)danger·auth
XBLKCross-shift Block: нал запрещён → безнал (перевод) через бухгалтериюdanger·block
GSPLСплит-возврат?гейт
PRIOПриоритет — вернуть на карту; бонусы не трогаемзадача
PAYВыдать деньгизадача
D1Возврат оформленсобытие
D2Возврат вне кассысобытие
Внешн. системаsystem
◫ рамка
WKWebKassaсторно чека → подтверждение · возврат чекасистема
3 · BPMN-граф Поток процесса Режим fallback-mermaid (§5/§7): тёплая тема поверх канона. Связи — sequence сплошная, message пунктир.
событие задача / шаг гейт (решение) авторизация MSR / менеджера система (WebKassa) danger / отказ / Cross-shift Block 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 Cash["Кассир"]
        S1(["Нажать «Возврат»"]) --> GR{"Есть право
на возврат?"} GR -->|нет| AU["Авторизация: прокатка MSR-карты"] AU --> GF{"ФПД валиден?
(скан QR / ввод)"} GR -->|да| GF GF -->|"нет / без чека"| ESC["Блок на кассе →
эскалация в бухгалтерию"] GF -->|да| GS{"Чек из текущей
смены?"} GS -->|да| STO["Сторнировать чек"] GS -->|"нет — прошлая смена"| GPAY{"Исходная оплата?"} GPAY -->|"карта / Kaspi QR"| AUM["Авторизация менеджера →
реверс на карту (эквайер)"] GPAY -->|"наличные"| XBLK["Cross-shift Block: нал запрещён →
безнал (перевод) через бухгалтерию"] AUM --> D1 XBLK --> D2 STO --> GSPL{"Сплит-возврат?"} GSPL -->|да| PRIO["Приоритет — вернуть на карту;
бонусы не трогаем"] GSPL -->|нет| PAY["Выдать деньги"] PRIO --> PAY PAY --> D1(["Возврат оформлен"]) ESC --> D2(["Возврат вне кассы"]) end subgraph Ext["Внешн. система"] WK["WebKassa"] end STO -. "сторно чека" .-> WK AUM -. "возврат чека" .-> WK WK -. "подтверждение" .-> STO 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 STO,PRIO,PAY task; class WK ext; class GR,GF,GS,GSPL,GPAY gate; class XBLK,AU,AUM,ESC danger; class S1,D1,D2 event; style Cash fill:#fbf7ef,stroke:#e2d6c1; style Ext fill:#f6efe2,stroke:#d0c1a6;
◍ fallback-mermaid Санкционировано design-system §5/§7 для ВСЕХ L1: swimlane «Кассир» + 5 гейтов + двунаправленный message-flow (STO⇄WebKassa) делают hand-authored CSS-grid хрупким.
Danger-ветки канона. (1) Гейт GR «нет» → AU авторизация прокаткой MSR-карты перед проверкой ФПД. (2) Прошлая смена + оплата картой/Kaspi → AUM авторизация менеджера и реверс на эквайера. (3) Прошлая смена + наличные → XBLK Cross-shift Cash Block: нал на кассе запрещён (ящик привязан к смене), возврат уходит безналом через бухгалтерию. (4) Невалидный ФПД / без чека → ESC блок на кассе и эскалация. Все опасные ветки протоколируются вне обычного flow.