最小可运行子集:骨架 / Dict / Lane / W 行 / 连线 / 属性
子流程 / 并行 / 回边 / vh 链 / DOC 泳道 / 轴标题
声明序 / Location 三层语义 / 18 条校验 / 高频坑
简单 → 一般 → 复杂;六大使用场景 + 决策树
基础语法 让你能画出图,扩展语法 让图能表达复杂业务,技巧语法 让图不踩坑,示例 提供可直接改写的模板,场景 告诉你何时用哪种。04_示例 对照改一张自己的流程,动手比听讲有效十倍。一套面向企业非技术员工、同时具备强机器可读性的流程图语言,语义定界为 BPMN 2.0 子集,渲染为自研 SVG(零新增第三方依赖)。
可变内容集中在 Dict 字典,结构层只写索引引用 D[0]/P[1]——一处定义、多处引用、修改全局生效。
索引稳定可校验;渲染时全部展开为字典值(图上显示"信息中心"而非 D[0])。
普通节点按声明顺序自动连线,省约 80% 显式书写;判断/并行出口必须显式声明。
DSL → 解析(FlowParser)→ canonical JSON(校验/图谱)→ BPMN 2.0 XML(交换)→ 自研 SVG(渲染)
flow),语义是 BPMN 2.0 子集,渲染用自研 SVG——零新增第三方依赖,可审计、可机器回读。Dict,图上只写索引——改一处字典,全图文字跟着变,这是体系文件"一处定义、多处引用"的刚需。D[0] 是稳定引用、越界可校验;渲染时展开为"信息中心"——机器读索引、人读文字,两全。| 语法块 | 作用 |
|---|---|
Dict: | 数据字典(先定义后使用) |
Lane from | 泳道(H 行 / V 列) |
W: 行 | 节点(Type/Location/属性) |
Type[S/E/?/+/SUB/N/DATA] | 8 类节点 |
→ / End | 连线与分支闭合 |
SOP() Role() Lv()… | 六属性 |
Title/Layout → Dict → Lane → Axis → Attr → W 节点 → 分支/连线。按这个顺序从上往下写,天然符合解析器的依赖要求。Dict 是"原料"、Lane 是"画布"、W 是"内容"、连线 是"逻辑"。可运行的最小子集 —— 先写出第一张能跑的流程图
Title: 整图标题(可选)Layout: H|V 主推进方向(可选)Dict 必须先于 Lane/W/Location 引用//Title / Layout 都可省:缺省分别是"流程图"和横向 H;Layout 只在无泳道时决定排布方向,有泳道时被 Lane 覆盖。Dict 必须出现在 Lane from / W / Location 之前,否则报"未定义字典"——这是新手第一道坎。//;结构分隔符用半角逗号 ,;标签内的标点请用中文全角,避免与结构符冲突。D=部门 · P=阶段 · R=岗位;语义固定,不可作自定义名(error)
D[0] = 第一个值;名[i,j,k] 列表;名[*] 全部
字典引用 worker[0] 或字面量 提交申请,并存可用
D=部门、P=阶段、R=岗位——语义固定,自定义字典不能撞名(校验 error)。D[0] 是第一个值;三种引用 名[i](单)、名[i,j,k](列表,Lane 批量用)、名[*](全部)。worker[0] 与字面量 提交申请 并存——规范场景用字典(可审计),草稿用字面量(快)。,),否则会被当成数组分隔。一条 Layout H + 一条 Layout V → 行×列交叉成格(最常用)
仅一条 Lane from → 行或列单向泳道
无 Lane from → 纯流程图,按 Layout 方向排布
每个格子由各轴索引组合唯一确定:(D[0],P[1]) = 部门 0 行 × 阶段 1 列;一个动作节点只归属一个格子,跨泳道流转用连线表达。
Layout H + 一条 Layout V):行=部门 × 列=阶段,交叉成格——体系文件审批图的主形态,最常用。Layout 方向单轨排,适合快速草稿。D[0,2,5];格子由各轴索引组合唯一确定,一个节点只属一格。| 类型 | 写法 | 视觉 | 默认顺序流 |
|---|---|---|---|
| 开始 / 结束 | Type[S] / Type[E] | ○ 细圆 / ● 粗圆 | ✅ |
| 任务 | 缺省 或 Type[T] | 圆角矩形 | ✅ |
| 判断 | Type[?] | ◇ 菱形 | ❌ 必须分支 |
| 并行 | Type[+] | ◇+ | ❌ 必须分支 |
| 子流程 | Type[SUB] | 圆角矩形+(内嵌子图) | ✅ |
| 文本标注 / 数据对象 | Type[N] / Type[DATA] | 折角纸 / 纸带(不占格) | ✅ |
W: + [可选 id:] + 标签 + [Type] + [Location] + [属性];省略 id 自动编号 w1,w2,...(稳定可审计)。Type[S] 开始 / Type[E] 结束必须各 ≥1(error);Type[?] 判断与 Type[+] 并行必须显式分支,不参与默认流。Type[N] 文本标注与 Type[DATA] 数据对象不占业务格,依附主节点显示(详见扩展章)。Type[DATA] 而非 Type[D](避免与部门字典 D 混淆)。引用与 Lane from 对齐的字典索引
单维却写二维坐标 → warn,自动丢弃未定义维度
按声明顺序填充,canonical 输出实际坐标可审计
⚠️ 数据对象用 Type[DATA],不是 Type[D](避免与部门字典名 D 混淆)。
Location(D[0],P[1]) 二维 / Location(D[0]) 单维;索引必须与 Lane from 使用的字典对齐。End否则 → 默认出口(带斜杠)→ #w2, #w4 自动扇出w5 → #w6 [标签]标签 → #目标,可带 (出口名)(稳定 id)、[条件](BPMN condition)、多目标 → #w2, #w4(扇出);End 必须闭合。否则 → 是默认出口(每节点至多一条),渲染带斜杠;显式边 w5 → #w6 [标签] 用于回边/补边。| 键 | 含义 | 企业管理落点 | 示例 |
|---|---|---|---|
SOP | 依据标准 | 绑定 GF/CX/GW 标准编号 | SOP(XX-CX-04) |
Role | 责任人/岗位 | 节点右下角小字 + 岗位图例栏 | Role(R[1]) |
Lv | 管控程度/风险 | 重大/重要/一般 或 1/2/3 | Lv(重要) |
Time | 时效/SLA | 完成时限 | Time(24h) |
KPI | 成效度量 | 质量目标/指标 | KPI(≤1‰) |
M | 管理成熟度 | BPA/BPM/BPI 或 1-4 | M(BPM) |
使用强度阶梯:SOP / Role / Lv 高优先(体系文件每步标)→ Time / KPI 中优先(程序文件)→ M 低优先(改进场景)。
SOP(依据)、Role(责任人)、Lv(重要度)、Time(时限)、KPI(指标)、M(成熟度)。Role(部门经理) 与 Role(R[1]) 等价,规范场景用引用、可审计。SOP/Role/Lv;程序文件加 Time/KPI;改进场景用 M。键大小写不敏感,canonical 统一小驼峰(sop/role/lv/time/kpi/m)。Lane from D[...] H + Lane from P[...] V 形成 2×3 交叉格;w1 在 (D0,P0)、w2 在 (D1,P1)——位置即业务语义。子流程 · 并行 · 回边 · vh 链 · DOC 泳道 · 轴标题 · 属性边栏
End 闭合,深度 ≤ 1parent 字段;框内渲染迷你小图📌 "按《XX程序》执行" 由子流程在 DSL 内闭环表达。
Type[SUB] 把被引用的程序内嵌为子图,DSL 内闭环、不跳文件。End 与分支块一样必须闭合;内部节点 id 全局唯一(自动编号顺延全局序);canonical 中内部节点带 parent 字段归属子流程。k×140 / mm×48),与相邻泳道无缝对齐。+(区别于判断 ◇)Type[+] 是并行网关——多个分支同时进行(区别于判断的互斥分支);视觉菱形内画 +。不合格 → #q2, #w8 自动拆为多条并行边。写二维坐标会被自动清洗(warn);单维虚拟轴长 = 各泳道最大链长。
无 Lane from → ROOT 占位,按 Layout 方向单轨排布;适合快速草稿与脚本生成。
Location(D[0]),若误写二维会被自动清洗(warn)。Layout 方向单轨排;适合快速草稿、脚本/AI 生成——节点可完全不写 Location。| 标识 | 相对上一节点 | 效果 |
|---|---|---|
V(默认) | 下方 gy+1 | 纵向堆叠 |
H | 右侧 gx+1 | 横向并排 |
D | 对角右下 gx+1,gy+1 | 对角扩展格(A6 算子) |
首节点恒在格内原点 (0,0),其 vh 作为整串方向种子;缺省 vh 由引擎按格内拓扑序自动推导。
vh 标识控制相对方向:V 下方(默认)、H 右侧、D 对角右下(A6 扩展格算子,gx+1 且 gy+1)。不占业务格;Attach(#id) 依附目标节点,与依附节点行对齐。
(依附行, DOC列)Type[N](文本标注)与 Type[DATA](数据对象)不占业务格,表达"依据某标准 / 产生某记录"等依附信息。Attach(#id) 依附目标节点;出现顶层 N/DATA 时引擎在最右追加 DOC 列(文档信息泳道),N/DATA 落格 (依附行, DOC列)——与依附节点行对齐。AxisX: 横轴标题(上方)AxisY: 纵轴标题(保持水平)Axis: 整图标题(AxisX 通栏 / AxisY 竖带)Align L/R/C 对齐
文档级指令:从全部节点聚合六属性面板——Role/SOP 计数排序、Lv 评分色卡、Time 时长公式、KPI 清单、M 档位。例:Attr active [Role,SOP,Lv,Time]
BPMN default flow,渲染带斜杠实线箭头;每节点至多一条;引擎将其作为业务主干候选参与关键路径排序。
AxisX 横轴标题(上方)、AxisY 纵轴标题(保持水平,不旋转——真正旋转 -90° 的是各 Y 泳道行标签)、Axis 整图标题(AxisX 顶部通栏 / AxisY 左侧竖向带);Align L/R/C 对齐。Role/SOP 计数排序(次数定字号)、Lv 区间评分 + RAG 色卡、Time 关键路径最小时长 + 公式、KPI 清单、M 档位色卡。理解布局机制,规避常见错误 —— 来自工程代码行为与 154 项断言实测
w1→w2→w3w1,w2,...显式 Location 决定节点在哪个泳道格(部门×阶段)。引擎不会为连线好看而重排——跨格长边是语义必然。
引擎只在两处优化:无 Location 节点的落格顺序、同格多节点顺序(格内拓扑序 + 主干序)。
主干流程节点按流程先后顺序书写,即使分属不同泳道格——默认流直接成立,自动落格成顺滑链。判断/并行节点中断默认流,务必显式分支。
w1,w2...)、无 Location 时的自动落格。Location 决定节点在哪个泳道格(部门×阶段)。引擎不会为连线好看而重排跨格位置——跨格长边(阶段跳转/跨角色推进)是语义必然,不是 bug。vh 是相对所在格顺序的上一节点的方位,不是绝对位置vh 表达的是"相对所在格顺序的上一节点"的方位,不是绝对位置——写 V 意为"排在上一节点下方"。computeCellOrder 会对格内多节点做拓扑排序(流向相邻的排一起);重排只改变"相对谁",不改变 vh 值——作者写 H 就永远横向意图。H/D。| 级别 | 要点 |
|---|---|
| error | 字典名唯一 / 必须先定义 |
| 索引越界 / id 重复 | |
| 网关必须分支 / End 配对 / 深度 ≤ 1 | |
| 开始≥1 结束≥1 / 无孤立节点 | |
| 保留字 D/P/R 冲突 / Attr 键合法 | |
| warn | 分支标签唯一 / 环含判断 / 维度清洗 |
Type[S]/Type[E])🛠 排错口诀:先补 S/E → 再查字典顺序 → 再查网关分支 → 最后查 End。
npm run test:flow 有 154 项断言护栏。简单 → 一般 → 复杂,覆盖 DSL 全部语法点
w1/w2/q1/w3)、字典引用标签、默认顺序流(w1→w2)、分支块(q1 是→结束 / 否→回处理)、经网关的回边。worker 字典换成你的动作词,5 分钟跑通第一张自建图。覆盖:二维泳道、轴标题、六属性、双网关、回边、显式边、属性边栏 —— 覆盖 90% 日常场景。
w1→w2→q1→w4→q2→w6→w7 沿泳道格推进;驳回→w2 为逆向流走外侧走廊;w5→w6 跨格推进。全要素:4×5 双泳道、三网关回边、N 标注 + Attach(DOC 列)、五项属性边栏 —— 工程真实默认图(示例已实证可解析)。
constants.tsx),14 节点 = 11 主节点 + 3 文本标注,覆盖 DSL 全部核心语法点。Attach(#w3/#w4/#w6)、Role 全覆盖(岗位图例 4 岗)、属性边栏 5 项、三级轴标题。什么时候用 · 怎么写最有效 · 如何验证
Type[SUB]Type[N]/Type[DATA] + AttachAttr active否则 →(默认出口)二维 + 六属性 + 回边(高频主场景)
单维 + 子流程 + Attr 全项
Role 岗位 + Time + 默认出口
无泳道 + 字面量标签
Type[SUB];标注依据/文档 → Type[N]/DATA + Attach;岗位/重要度可视化 → 六属性 + Attr active;返工/驳回 → 回边(经网关);常规路径 → 否则 →。| 文件 | 学语法看哪 |
|---|---|
FlowParser.ts | 解析正则 + 校验 |
flowToSVG.ts | 落格 / 扩展格 / 格内排序 |
AlgebraicFlowRouter.ts | 正交连线 / 避障 |
CellOrder.ts | 格内拓扑序 |
assert_flow_*.ts | 行为契约(好样例库) |
npm run test:flow(154 项断言:parser 60 + svg 61 + bpmn 17 + mainline 8 + cell_order 8)、npx tsc --noEmit(类型 0 错)、npm run build(全链)。FlowParser.ts(解析正则+校验)、flowToSVG.ts(落格/扩展格/格内排序)、AlgebraicFlowRouter.ts(正交连线/避障)、CellOrder.ts(格内拓扑序)、MainlineOrder.ts(主干序)、assert_flow_*.ts(行为契约=好样例库)。flowToDsl 会回写 Location + vh,保证往返稳定。IQS-Flow DSL —— 让体系文件流程图"谁 × 做什么 × 怎么流转"一目了然