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

E-14 — Скидки, надбавки и служебное питание

Процесс Волны 1. Два графа канона: применение на кассе (пулы Кассир · Внешн. система, три гейта Тип скидки? / Есть право? / Комбинируется?, две danger-ветки — авторизация менеджера и служебное питание 100% через MSR) и настройка акции в бэк-офисе. Граф 1:1 с Mermaid-каноном menu/discounts.md.

ДисплейFraunces
ИнтерфейсHanken Grotesk
Цифры / кодыJetBrains Mono
1 · Роль · внешние · danger-оп Контекст процесса Роли-исполнители, внешняя система и опасные операции. Правила расчёта и модель акции — business-rules §1–2.
Роли-исполнители Кассир — применяет скидку/акцию на кассе. Финансист / менеджер — настраивает акцию в бэк-офисе.
Внешние WebKassa — фискализация ФПД для штатных скидок с НДС. Служебное питание закрывается нефискально.
△ Опасные операции Скидка без права → авторизация картой менеджера. Служебное питание 100% → прокатка MSR (executor + authorized_by) → авто-акт списания в убыток → E-12.
Связки Служебное питание (100%) закрывается нефискально и создаёт акт списания (E-12); совместимость оплат проверяется на шаге оплаты (E-02). UI-мастер (4 экрана, дашборд-реестр, матрица) → слой 2. Альтитуда → бизнес-правила: комбинирование, база полная/каскад, Zero-Floor, пропорционально до НДС, %/фикс, надбавка — business-rules §1–2.
2 · Пулы-дорожки Дорожки-исполнители Пулы двух графов канона: роль-кассир + внешняя система (применение) и роль-финансист (настройка). Тип узла = цвет + метка-kicker + значок-форма.
Внешн. системаsystem
◫ рамка
WKWebKassaфискализация ФПД (штатная скидка с НДС)система
Финансист / менеджерроль · back-office
◆ настройка акции
AS1Создать акциюсобытие
AA1Базовое: название + пречек, типДисконт / Скидки-надбавки / Флаерзадача
AA2Условия: сумма ОТ–ДО, период, филиалы, режимзадача
AA3Назначение: вручную / карта / авто; права пер-блюдо; матрица оплатзадача
AA4Механика: база (полная/каскад), вектор, % / фикс (Zero-Floor)задача
AA5Активировать (флаг «Активна» — по всей сети)задача
AD1Акция доступна на кассесобытие
Кассирроль-исполнитель · применение
◆ задачи + гейты + danger
S1Применить скидку / акциюсобытие
G0Тип скидки?гейт
GPЕсть право на скидку (для этого блюда)?гейт
AUPАвторизация: карта менеджераdanger·auth
G1Комбинируется с уже применёнными?гейт
B1Вторую скидку добавить нельзястоп
F2Применить по базе акции: полная сумма или каскадзадача
F3Zero-Floor: итог не ниже 0, остаток сгораетзадача
F4Распределить пропорционально по позициям до НДС (§1)задача
E1По карте сотрудника (прокатка) — 10%задача
E2Пропорциональный пересчётзадача
AUАвторизация: прокатка MSR-картыexecutor + authorized_bydanger·auth
SM1Скидка 100%danger
SM2Чек закрывается НЕфискальноdanger
SM3Авто-акт списания еды в убыток → E-12danger
FISЧек фискализируется штатно, с НДСзадача
D1Скидка применена, чек рассчитансобытие
D2Служебное питание оформленособытие
D3Действует одна скидкасобытие
3 · BPMN-граф Применение на кассе Режим fallback-mermaid (§5/§7): тёплая тема поверх канона. Связи — sequence сплошная, message пунктир.
событие задача / шаг гейт (решение) 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 Cash["Кассир (применение)"]
        S1(["Применить скидку / акцию"]) --> G0{"Тип скидки?"}

        G0 -->|"обычная / акция"| GP{"Есть право на скидку
(для этого блюда)?"} GP -->|нет| AUP["Авторизация: карта менеджера"] AUP --> G1 GP -->|да| G1{"Комбинируется
с уже применёнными?"} G1 -->|"нет (флаг off)"| B1["Вторую скидку
добавить нельзя"] G1 -->|"да (флаг on)"| F2["Применить по базе акции:
полная сумма или каскад"] F2 --> F3["Zero-Floor: итог не ниже 0,
остаток скидки сгорает"] F3 --> F4["Распределить пропорционально
по позициям до НДС (§1)"] F4 --> FIS["Чек фискализируется
штатно, с НДС"] G0 -->|"сотрудник 10%"| E1["По карте сотрудника (прокатка)"] E1 --> E2["Пропорциональный пересчёт"] E2 --> FIS G0 -->|"служебное питание (100%)"| AU["Авторизация: прокатка MSR-карты
executor + authorized_by"] AU --> SM1["Скидка 100%"] SM1 --> SM2["Чек закрывается НЕфискально"] SM2 --> SM3["Авто-акт списания еды
в убыток → E-12"] FIS --> D1(["Скидка применена,
чек рассчитан"]) SM3 --> D2(["Служебное питание оформлено"]) B1 --> D3(["Действует одна скидка"]) end subgraph Ext["Внешн. система"] WK["WebKassa"] end FIS -. "фискализация ФПД" .-> WK 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 F2,F3,F4,FIS,E1,E2 task; class WK ext; class G0,GP,G1 gate; class AUP,AU,SM1,SM2,SM3,B1 danger; class S1,D1,D2,D3 event; style Cash fill:#fbf7ef,stroke:#e2d6c1; style Ext fill:#f6efe2,stroke:#d0c1a6;
◍ fallback-mermaid Санкционировано design-system §5/§7 для всех L1: swimlanes + 3 гейта + двойная danger-развилка (авторизация менеджера, MSR служебного питания) + message-flow (FIS⇢WebKassa) делают hand-authored CSS-grid хрупким.
Две danger-ветки канона. (1) Гейт GP «нет» — скидка без права → AUP авторизация картой менеджера, затем возврат в поток комбинирования G1. (2) Гейт G0 «служебное питание (100%)» → AU прокатка MSR-карты (executor + authorized_by) → SM1 скидка 100% → SM2 чек закрывается НЕфискальноSM3 авто-акт списания еды в убыток → E-12. Обе операции протоколируются; служебное питание не проходит фискализацию.
4 · BPMN-граф Настройка акции (back-office) Мастер создания акции (4 экрана «Назад/Далее» — это UI, слой 2); здесь — бизнес-логика линейного визарда. Роль — Финансист / менеджер.
событие задача / шаг sequence 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 Adm["Финансист / менеджер"]
        AS1(["Создать акцию"]) --> AA1["Базовое: название + название в пречеке,
тип (Дисконт / Скидки-надбавки / Флаер)"] AA1 --> AA2["Условия: сумма ОТ–ДО, период,
филиалы, режим обслуживания"] AA2 --> AA3["Назначение: вручную / по карте / авто;
права пер-блюдо; матрица совместимости оплат"] AA3 --> AA4["Механика: база (полная / каскад),
вектор (скидка / надбавка), % или фикс (Zero-Floor)"] AA4 --> AA5["Активировать (флаг «Активна» —
вкл/выкл по всей сети)"] AA5 --> AD1(["Акция доступна на кассе (см. выше)"]) end classDef task fill:#f6e6cd,stroke:#d5842a,color:#241b12; classDef event fill:#dcefe1,stroke:#3c8a5b,color:#1c4a30; class AA1,AA2,AA3,AA4,AA5 task; class AS1,AD1 event; style Adm fill:#fbf7ef,stroke:#e2d6c1;
◍ fallback-mermaid Линейный визард (5 шагов) — единый язык L1. Danger-опов нет; выход AD1 питает граф «применение на кассе» выше (акция доступна на кассе).