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

E-10 — Приёмка, накладные и перемещения

Процесс Волны 2 (warehouse/receiving). Пулы-дорожки Поставщик · Завсклад-отправитель · Завсклад-получатель, четыре гейта решений (источник · брак/пересорт · факт vs документ · отмена проведения) и danger-ветка «отмена проведения иммутабельной накладной → откат остатков + ретро-пересчёт → слой 5». Граф 1:1 с Mermaid-каноном warehouse/receiving.md.

ДисплейFraunces
ИнтерфейсHanken Grotesk
Цифры / кодыJetBrains Mono
1 · Роль · внешние · danger-оп Контекст процесса Роль-исполнитель, внешний актор и одна опасная операция. Правила приёмки/FEFO/себестоимости — business-rules §8.
Роль-исполнитель Завсклад — на точке-отправителе (расходная накладная перемещения) и точке-получателе (приёмка, оприходование, провод).
Внешние Поставщик (актор) — поставка товара по заказу; брак/пересорт → возвратная накладная поставщику.
△ Опасная операция Отмена проведения иммутабельной накладной → откат остатков + ретро-пересчёт себестоимости FIFO-слоёв → слой 5.
Полный цикл закупки Заказ поставщику → приёмка (срок годности партии, FEFO) → оприходование; брак → возвратная накладная. Перемещение между точками: расходная (DRAFT → SENT, документ блокируется, остаток отправителя списан) → приходная по перемещению у получателя. Альтитуда → слой 5: механизм FIFO-слоёв и ретро-пересчёт себестоимости при отмене проведения.
2 · Пулы-дорожки Дорожки-исполнители Три пула канона: внешний актор + две дорожки роли (отправитель, получатель). Тип узла = цвет + метка-kicker + значок-форма (не цветом одним).
Поставщиквнешн. актор
⌇ пунктир
SUPПоставка товарапо заказу поставщикусобытие
Завсклад · отправительроль · перемещение
◆ задачи
A1Расходная накладная (перемещение): DRAFTзадача
A2«Отправить» → статус SENTдокумент блокируетсязадача
A3Остаток отправителя списанзадача
Завсклад · получательроль · приёмка / оприходование
◆ задачи + гейты + события
R0Начатьсобытие
R1Источник?поставщик / перемещениегейт
ORDЗаказ поставщикузадача
RPПриходная накладная от поставщиказадача
RTПриходная накладная по перемещениюзадача
RFВвести факт прихода+ срок годности партии (FEFO)задача
GQБрак / пересорт?гейт
RETВозвратная накладная поставщику → вернутьвозврат
GFФакт vs документ?точно / излишек / недопоставкагейт
PROVПровести накладнуюзадача
FIFOСоздан FIFO-слой партиисебестоимость = цена закупазадача
IMMПроведённая накладная — ReadOnly (иммутабельна)задача
GCОтменить проведение?гейт
ROLLОткат остатков + ретро-пересчёт → слой 5danger-оп
D1Склад пополнен по фактусобытие
D2Возврат поставщику оформленсобытие
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 Sup["Поставщик · внешн."]
        SUP(["Поставка товара"])
    end

    subgraph WA["Завсклад · точка-отправитель"]
        A1["Расходная накладная
(перемещение): DRAFT"] A2["«Отправить» → статус SENT
(документ блокируется)"] A3["Остаток отправителя списан"] end subgraph WB["Завсклад · точка-получатель"] R0(["Начать"]) --> R1{"Источник?"} R1 -->|поставщик| ORD["Заказ поставщику"] ORD --> RP["Приходная накладная
от поставщика"] R1 -->|перемещение| RT["Приходная накладная
по перемещению"] RP --> RF["Ввести факт прихода
+ срок годности партии (FEFO)"] RT --> RF RF --> GQ{"Брак / пересорт?"} GQ -->|да| RET["Возвратная накладная
поставщику → вернуть"] GQ -->|нет| GF{"Факт vs документ?"} GF -->|точно| PROV["Провести накладную"] GF -->|"излишек / недопоставка"| PROV PROV --> FIFO["Создан FIFO-слой партии
(себестоимость = цена закупа)"] FIFO --> D1(["Склад пополнен по факту"]) PROV --> IMM["Проведённая накладная —
ReadOnly (иммутабельна)"] IMM --> GC{"Отменить
проведение?"} GC -->|да| ROLL["Откат остатков +
ретро-пересчёт → слой 5"] GC -->|нет| D1 RET --> D2(["Возврат поставщику оформлен"]) end ORD -. "заказ" .-> SUP SUP -.-> RP A1 --> A2 --> A3 A3 -.-> RT 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:#7a1f12; class A1,A2,A3,ORD,RP,RT,RF,PROV,FIFO,IMM task; class SUP event; class R1,GQ,GF,GC gate; class R0,D1,D2 event; class RET,ROLL danger; style Sup fill:#faf5ea,stroke:#d0c1a6; style WA fill:#f6efe2,stroke:#d0c1a6; style WB fill:#fbf7ef,stroke:#e2d6c1;
◍ fallback-mermaid Утверждён для всех L1 (design-system §5/§7): swimlanes (3 пула) + 4 гейта + message-flow между дорожками (ORD→Поставщик→RP, A3→RT перемещение) делают hand-authored CSS-grid хрупким.
Danger-ветка (гейт GC «да»): проведённая накладная IMM — ReadOnly / иммутабельна. Её отмена ведёт к ROLL — откату остатков и ретро-пересчёту себестоимости FIFO-слоёв (альтитуда → слой 5). При «нет» — финиш D1 «Склад пополнен по факту». Смежная опасная ветка — гейт GQ «да»: брак/пересорт → возвратная накладная RET → возврат поставщику D2.