Путь роли по экранам (user-flow). Узлы — экраны S-NN, события и решения; тип кодируется цветом (словарь §5). Внешние системы — пунктиром. Граф 1:1 с Mermaid-каноном hr-timesheet-punch.md.
user-flows/hr-timesheet-punch.md.
%%{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"},"flowchart":{"curve":"basis","nodeSpacing":40,"rankSpacing":52,"htmlLabels":true,"useMaxWidth":false,"padding":16}}}%%
flowchart TD
Start(["Сотрудник: отметить приход / уход"]) --> S01["S-01 · Логин / блокировка POS
(MSR-считыватель)"]
S01 --> MSR["Приложить MSR-карту сотрудника"]
MSR --> STATE{"Сотрудник уже
на личной смене?"}
STATE -->|"нет"| PUNCHIN["Punch In — запись «Открыта»"]
STATE -->|"да"| DEBT{"Есть непогашенный
долг сотрудника?"}
DEBT -->|"нет"| PUNCHOUT["Punch Out — запись «Закрыта»,
часы посчитаны"]
DEBT -->|"да"| AUTH["Подтверждение уполномоченной ролью
(право из RBAC, S-19)"]
AUTH --> PUNCHOUT
PUNCHIN --> TAB(["Табель обновлён"])
PUNCHOUT --> TAB
TAB -. "запись видна в бэк-офисе" .-> S20["S-20 · Табель УРВ
(бэк-офис, просмотр)"]
S20 --> FIXQ{"Нужна ручная правка?
(пропущен Punch, сбой карты)"}
FIXQ -->|"да"| FIX["«Скорректировать» / «+ Ручная запись»
(авториз-шлюз, Audit Trail)"]
FIX --> S20
FIXQ -->|"нет"| ZUP(["Часы выгружаются в 1С:ЗУП
по табельному номеру (🟡 Этап 2)"])
classDef screen fill:#e5ecf6,stroke:#5b7bb0,color:#243a5f;
classDef gate fill:#f8e8cf,stroke:#c9791f,color:#7a4a10;
classDef event fill:#dcefe1,stroke:#3c8a5b,color:#1c4a30;
classDef auth fill:#ede7f6,stroke:#7e57c2,color:#4527a0;
class S01,S20,PUNCHIN,PUNCHOUT screen;
class STATE,DEBT,FIXQ gate;
class Start,TAB,ZUP event;
class MSR,AUTH,FIX auth;