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-оп Контекст процесса Роль-исполнитель, внешний актор и одна опасная операция. Правила приёмки, сроков и себестоимости — business-rules §8.
Роль-исполнитель Завсклад — на точке-отправителе (расходная накладная перемещения) и точке-получателе (приёмка, оприходование, провод).
Внешние Поставщик (актор) — поставка товара по заказу; брак/пересорт → возвратная накладная поставщику.
△ Опасная операция Отмена проведения иммутабельной накладной → откат остатков + ретро-пересчёт средневзвешенной себестоимости → слой 5.
Полный цикл закупки Заказ поставщику → приёмка (срок годности партии) → оприходование; брак → возвратная накладная. Перемещение между точками: расходная (DRAFT → SENT, документ блокируется, остаток отправителя списан) → приходная по перемещению у получателя. Альтитуда → слой 5: механизм FIFO-слоёв и ретро-пересчёт себестоимости при отмене проведения.
Печать этикетки Две этикетки, обе Этап 1 (D-53). Этикетка позиции — штрих-код для любой номенклатуры, включая покупную. Весовая этикетка печатается при фасовке и кодирует вес и цену конкретной упаковки; касса умеет её прочитать. Фасуют в основном заранее, поэтому весовая этикетка — основной сценарий, а не дополнение. Количество может быть дробным (D-48), вес вводится вручную; интеграция с весами — слой 4. Списание фасованного — со склада станции, указанной в «Месте приготовления» (D-94).
2 · Пулы-дорожки Дорожки-исполнители Три пула канона: внешний актор + две дорожки роли (отправитель, получатель). Тип узла = цвет + метка-kicker + значок-форма (не цветом одним).
Поставщиквнешн. актор
⌇ пунктир
SUPПоставка товарапо заказу поставщикусобытие
Завсклад · отправительроль · перемещение
◆ задачи
A1Расходная накладная (передача): DRAFTзадача
ALОдно юрлицо?ось «движение или сделка» · D-150гейт
AMДвижение: цена = себестоимостьдолга нет · внутри юрлицазадача
ASСделка: договорная цена по приказудолг настоящий · между юрлицамизадача
A2«Отправить» → статус SENTдокумент блокируетсязадача
A3Остаток отправителя списанзадача
Завсклад · получательроль · приёмка / оприходование
◆ задачи + гейты + события
R0Начатьсобытие
R1Источник?поставщик / перемещениегейт
SUPПоставщик привозит товар + накладную (заказ — вне программы, D-70)задача
RPПриходная накладная от поставщиказадача
RTПриходная накладная по перемещениюзадача
RFВвести факт прихода+ срок годности партиизадача
GQБрак / пересорт?гейт
RETВозвратная накладная поставщику → вернутьвозврат
GFФакт vs документ?точно / излишек / недопоставкагейт
PROVПровести накладнуюзадача
LOSSПотеря при перевозкесобытие + ссылка на перевозку, количество и стоимостьвозврат
BATCHСоздан слой партиисебестоимость — средневзвешеннаязадача
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"] AL{"Одно юрлицо?"} AM["Движение: цена =
себестоимость, долга нет"] AS["Сделка: договорная цена
по приказу, долг настоящий"] A2["«Отправить» → статус SENT
(документ блокируется)"] A3["Остаток отправителя списан"] end subgraph WB["Завсклад · точка-получатель"] R0(["Начать"]) --> R1{"Источник?"} R1 -->|поставщик| RP["Приходная накладная
от поставщика"] R1 -->|перемещение| RT["Приходная накладная
по перемещению"] RP --> RF["Ввести факт прихода
+ срок годности партии"] RT --> RF RF --> GQ{"Брак / пересорт?"} GQ -->|да| RET["Возвратная накладная
поставщику → вернуть"] GQ -->|нет| GF{"Факт vs документ?"} GF -->|точно| PROV["Провести накладную"] GF -->|"излишек / недопоставка"| PROV GF -->|"недовоз по передаче"| LOSS["Потеря при перевозке:
событие + ссылка на перевозку,
количество и стоимость"] LOSS --> PROV PROV --> BATCH["Создан слой партии
(себестоимость — средневзвешенная)"] BATCH --> D1(["Склад пополнен по факту"]) PROV --> IMM["Проведённая накладная —
ReadOnly (иммутабельна)"] IMM --> GC{"Отменить
проведение?"} GC -->|да| ROLL["Откат остатков +
ретро-пересчёт → слой 5"] GC -->|нет| D1 RET --> D2(["Возврат поставщику оформлен"]) end SUP -. "товар + накладная" .-> RP A1 --> AL AL -->|да| AM AL -->|нет| AS AM --> A2 AS --> A2 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,AM,AS,RP,RT,RF,PROV,BATCH,IMM task; class SUP event; class R1,GQ,GF,GC,AL gate; class R0,D1,D2 event; class RET,ROLL,LOSS 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.