@qingflow-tech/qingflow-cli 1.1.2 → 1.1.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/docs/local-agent-install.md +10 -0
- package/package.json +1 -1
- package/pyproject.toml +1 -1
- package/skills/qingflow-cli/SKILL.md +61 -47
- package/skills/qingflow-cli/manifest.yaml +1 -1
- package/skills/qingflow-cli/reference/00-INDEX.md +35 -0
- package/skills/qingflow-cli/reference/QINGFLOW_CLI_BUILDER_APP_DELIVERY_WORKFLOW.md +21 -477
- package/skills/qingflow-cli/reference/QINGFLOW_CLI_BUILDER_VIEWS_WORKFLOW.md +44 -290
- package/skills/qingflow-cli/reference/QINGFLOW_CLI_SCHEMA_APPLY_FIELD_TYPES_AND_SCENARIOS.md +11 -102
- package/skills/qingflow-cli/reference/builder/10-build-single-app.md +57 -0
- package/skills/qingflow-cli/reference/builder/20-build-complete-system.md +84 -0
- package/skills/qingflow-cli/reference/builder/30-schema-fields.md +317 -0
- package/skills/qingflow-cli/reference/builder/40-layout.md +70 -0
- package/skills/qingflow-cli/reference/builder/50-views.md +540 -0
- package/skills/qingflow-cli/reference/builder/60-charts.md +328 -0
- package/skills/qingflow-cli/reference/builder/70-portal.md +372 -0
- package/skills/qingflow-cli/reference/builder/80-buttons-associated-resources.md +148 -0
- package/skills/qingflow-cli/reference/builder/90-workflow.md +35 -0
- package/skills/qingflow-cli/reference/builder/99-publish-verify.md +64 -0
- package/skills/qingflow-cli/reference/builder/README.md +62 -0
- package/skills/qingflow-cli/reference/builder/code-integrations/README.md +130 -0
- package/skills/qingflow-cli/reference/builder/code-integrations/code-block.md +66 -0
- package/skills/qingflow-cli/reference/builder/code-integrations/q-linker.md +77 -0
- package/skills/qingflow-cli/reference/builder/reference/app-delivery-sop.md +508 -0
- package/skills/qingflow-cli/reference/builder/reference/match-rules.md +229 -0
- package/skills/qingflow-cli/reference/builder/reference/workspace-icons.md +89 -0
- package/skills/qingflow-cli/reference/builder/workflow/01-overview.md +48 -0
- package/skills/qingflow-cli/reference/builder/workflow/02-update-mode.md +63 -0
- package/skills/qingflow-cli/reference/builder/workflow/03-flow-patterns.md +59 -0
- package/skills/qingflow-cli/reference/builder/workflow/04-stage1-business-modeling.md +131 -0
- package/skills/qingflow-cli/reference/builder/workflow/05-stage2-members-roles.md +29 -0
- package/skills/qingflow-cli/reference/builder/workflow/06-stage3-build-spec.md +211 -0
- package/skills/qingflow-cli/reference/builder/workflow/07-stage4-validate-spec.md +36 -0
- package/skills/qingflow-cli/reference/builder/workflow/08-stage5-apply-verify.md +66 -0
- package/skills/qingflow-cli/reference/builder/workflow/09-stage6-summary.md +88 -0
- package/skills/qingflow-cli/reference/builder/workflow/10-node-config-reference.md +93 -0
- package/skills/qingflow-cli/reference/builder/workflow/11-troubleshooting.md +18 -0
- package/skills/qingflow-cli/reference/builder/workflow/README.md +88 -0
- package/skills/qingflow-cli/reference/builder/workflow/workflow-schema.json +1754 -0
- package/skills/qingflow-cli/reference/charts_upsert_dashboard_starter.example.json +81 -0
- package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_ADMIN_CHEATSHEET.md +94 -0
- package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_DATA_RETRIEVAL_WORKFLOW.md +139 -0
- package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_EXPLORATION_REPORT.md +84 -0
- package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_FIELD_DATA_TYPES.md +129 -0
- package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_MEMBER_CHEATSHEET.md +195 -0
- package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_ONE_SHOT_CHEATSHEET.md +159 -0
- package/skills/qingflow-cli/reference/examples/README.md +17 -0
- package/skills/qingflow-cli/reference/examples/associated/associated_resources_semantic_full.example.json +50 -0
- package/skills/qingflow-cli/reference/examples/buttons/custom_buttons_advanced.example.json +56 -0
- package/skills/qingflow-cli/reference/examples/charts/charts_remove.example.json +1 -0
- package/skills/qingflow-cli/reference/examples/charts/charts_reorder.example.json +1 -0
- package/skills/qingflow-cli/reference/examples/charts/charts_upsert_bar.example.json +8 -0
- package/skills/qingflow-cli/reference/examples/charts/charts_upsert_dashboard_starter.example.json +118 -0
- package/skills/qingflow-cli/reference/examples/charts/charts_upsert_minimal.example.json +13 -0
- package/skills/qingflow-cli/reference/examples/layout/layout_sections_full.example.json +22 -0
- package/skills/qingflow-cli/reference/examples/portal/portal_sections_all_types.example.json +145 -0
- package/skills/qingflow-cli/reference/examples/portal/portal_sections_five_types.example.json +126 -0
- package/skills/qingflow-cli/reference/examples/portal/portal_sections_standard_workbench.example.json +178 -0
- package/skills/qingflow-cli/reference/examples/record/record_insert_all_field_types.example.json +35 -0
- package/skills/qingflow-cli/reference/examples/schema/_batch_schema_complex.json +18 -0
- package/skills/qingflow-cli/reference/examples/schema/_batch_schema_scalar.json +17 -0
- package/skills/qingflow-cli/reference/examples/schema/schema_add_fields_minimal.example.json +7 -0
- package/skills/qingflow-cli/reference/examples/schema/schema_apply_add_fields_all_types.json +78 -0
- package/skills/qingflow-cli/reference/examples/schema/schema_multi_app_form_relation_layout.example.json +166 -0
- package/skills/qingflow-cli/reference/examples/schema/schema_single_app_form_standard.example.json +95 -0
- package/skills/qingflow-cli/reference/examples/views/views_batch_full.example.json +159 -0
- package/skills/qingflow-cli/reference/examples/views/views_upsert_table_minimal.example.json +42 -0
- package/skills/qingflow-cli/reference/portal_sections_all_types.example.json +18 -4
- package/skills/qingflow-cli/reference/portal_sections_five_types.example.json +3 -3
- package/skills/qingflow-cli/reference/portal_sections_standard_workbench.example.json +57 -7
- package/skills/qingflow-cli/reference/record/QINGFLOW_CLI_RECORD_CREATE_WORKFLOW.md +22 -0
- package/skills/qingflow-cli/reference/record/QINGFLOW_CLI_RECORD_DELETE_WORKFLOW.md +31 -0
- package/skills/qingflow-cli/reference/record/QINGFLOW_CLI_RECORD_IMPORT_WORKFLOW.md +176 -0
- package/skills/qingflow-cli/reference/record/QINGFLOW_CLI_RECORD_UPDATE_WORKFLOW.md +167 -0
- package/skills/qingflow-cli/reference/record/analysis/README.md +130 -0
- package/skills/qingflow-cli/reference/record/analysis/analysis-gotchas.md +91 -0
- package/skills/qingflow-cli/reference/record/analysis/analysis-patterns.md +112 -0
- package/skills/qingflow-cli/reference/record/analysis/business-context.md +74 -0
- package/skills/qingflow-cli/reference/record/analysis/confidence-reporting.md +69 -0
- package/skills/qingflow-cli/reference/record/analysis/data-access-playbook.md +106 -0
- package/skills/qingflow-cli/reference/record/analysis/pandas-recipes.md +172 -0
- package/skills/qingflow-cli/reference/record/analysis/report-format.md +76 -0
- package/skills/qingflow-cli/reference/record/insert/README.md +125 -0
- package/skills/qingflow-cli/reference/schema_apply_add_fields_all_types.json +1 -1
- package/skills/qingflow-cli/reference/task/QINGFLOW_CLI_TASK_CONTEXT_WORKFLOW.md +153 -0
- package/skills/qingflow-cli/reference/task/ops/README.md +134 -0
- package/skills/qingflow-cli/reference/task/ops/environments.md +43 -0
- package/skills/qingflow-cli/reference/task/ops/workflow-usage.md +29 -0
- package/skills/qingflow-cli/reference/views_upsert_table_minimal.example.json +42 -7
- package/skills/qingflow-cli/scripts/validate_system_build_summary.py +124 -0
- package/skills/qingflow-cli/scripts/workflow/diff_flow_spec.py +275 -0
- package/skills/qingflow-cli/scripts/workflow/validate_flow_spec.py +627 -0
- package/src/qingflow_mcp/builder_facade/models.py +413 -119
- package/src/qingflow_mcp/builder_facade/service.py +4238 -666
- package/src/qingflow_mcp/cli/commands/builder.py +232 -75
- package/src/qingflow_mcp/cli/main.py +34 -0
- package/src/qingflow_mcp/public_surface.py +10 -0
- package/src/qingflow_mcp/server_app_builder.py +62 -34
- package/src/qingflow_mcp/solution/compiler/workflow_compiler.py +173 -0
- package/src/qingflow_mcp/solution/executor.py +2 -0
- package/src/qingflow_mcp/tools/ai_builder_tools.py +2649 -457
- package/src/qingflow_mcp/tools/record_tools.py +23 -11
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# Builder 统一筛选 / 条件写法
|
|
2
|
+
|
|
3
|
+
本文适用于 Builder 侧所有给智能体公开的筛选和条件入口:
|
|
4
|
+
|
|
5
|
+
- 视图固定筛选:`builder views apply` 的 `filters`
|
|
6
|
+
- 视图动作按钮显示条件:`action_buttons[].visible_when`
|
|
7
|
+
- QingBI 图表筛选:`builder charts apply` 或 `portal apply sections[].chart.filters`
|
|
8
|
+
- 关联视图 / 关联报表匹配:`builder associated-resource apply` 的 `match_mappings`
|
|
9
|
+
- 新增下游记录传参:`field_mappings` / `default_values`
|
|
10
|
+
|
|
11
|
+
它不是 `record_access` 分析筛选 DSL。数据分析仍走 `record access` 的 `where` 规则。
|
|
12
|
+
流程条件属于 WorkflowSpec 路径:先读 `builder flow schema` / `builder flow get`,再按读回结构修改;不要把 raw workflow `autoJudges/judgeType` 混入视图、报表、关联资源的公共筛选 DSL。
|
|
13
|
+
|
|
14
|
+
公开写法按场景选择,智能体不要混用。**operator 语义完全一致,区别只在字段名键**:
|
|
15
|
+
|
|
16
|
+
- **固定筛选**:`field_name + operator + value/values`
|
|
17
|
+
- **关联资源上下文匹配**:`target_field + operator + source_field/value`
|
|
18
|
+
- **新增数据传参**:`source_field + target_field`;静态默认值写 `default_values`
|
|
19
|
+
|
|
20
|
+
不要直接写 `judgeType`、`judgeValues`、`matchRules`、`beforeAggregationFilterMatrix`。CLI 会按目标协议自动编译,并在读回时还原为业务语义。
|
|
21
|
+
|
|
22
|
+
最短判断:
|
|
23
|
+
|
|
24
|
+
| 你想表达 | 写法 | 示例 |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| 当前视图/图表只显示某类数据 | `filters` | `{"field_name":"状态","operator":"eq","value":"进行中"}` |
|
|
27
|
+
| 关联报表/关联视图只显示“当前记录相关”的数据 | `match_mappings` + `source_field` | `{"target_field":"关联客户","operator":"eq","source_field":"数据ID"}` |
|
|
28
|
+
| 关联报表/关联视图再加一个固定条件 | `match_mappings` + `value/values` | `{"target_field":"状态","operator":"eq","value":"有效"}` |
|
|
29
|
+
| 从当前记录创建下游记录并带值 | `field_mappings` | `{"source_field":"数据ID","target_field":"关联工单"}` |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 1. `operator` / `value` 统一规则
|
|
34
|
+
|
|
35
|
+
| `operator` | 含义 | `value/values` |
|
|
36
|
+
| --- | --- | --- |
|
|
37
|
+
| `eq` | 等于 | 单值用 `value` |
|
|
38
|
+
| `neq` | 不等于 | 单值用 `value` |
|
|
39
|
+
| `in` | 任一匹配 | 多值用 `values` |
|
|
40
|
+
| `contains` | 包含 / 模糊包含 | 单值用 `value` |
|
|
41
|
+
| `gte` | 大于等于 | 单值用 `value` |
|
|
42
|
+
| `lte` | 小于等于 | 单值用 `value` |
|
|
43
|
+
| `is_empty` | 为空 | 不写 `value/values` |
|
|
44
|
+
| `not_empty` | 不为空 | 不写 `value/values` |
|
|
45
|
+
|
|
46
|
+
`operator` 省略时按 `eq` 处理,但主示例必须显式写 `operator`。`value` 是单值主写法;`values` 是多值主写法。CLI 兼容 `value` 传数组、`values` 传单个标量,但不要把兼容形态当主示例。
|
|
47
|
+
|
|
48
|
+
兼容别名:`equal`、`equals`、`=`、`==`、`!=`、`not_equal`、`any_of`、`one_of`、`include`、`like`、`empty`、`is null`、`not empty`、`not null`。主示例只写上表 canonical operator。
|
|
49
|
+
|
|
50
|
+
### 1.1 不同字段类型的值写法
|
|
51
|
+
|
|
52
|
+
默认优先写业务可读值,但要区分字段类型。选项字段(单选/多选/是否)在视图筛选、QingBI 筛选、关联资源静态筛选中均支持选项文本或 option id,CLI 会按目标协议自动转成 id 或文本。成员、部门、关联记录这类实体字段在固定筛选里优先写唯一 id 或 `{id,value}`;只有新增数据默认值、record 写入、候选解析类路径才先写名称,解析失败后再按候选改成 id。
|
|
53
|
+
|
|
54
|
+
| 字段类型 | 推荐值写法 | 示例 |
|
|
55
|
+
| --- | --- | --- |
|
|
56
|
+
| 文本 / 长文本 / 手机 / 邮箱 | 字符串;模糊匹配用 `contains` | `{"field_name":"客户名称","operator":"contains","value":"上海"}` |
|
|
57
|
+
| 数字 / 金额 | JSON 数字;范围用 `gte` / `lte` | `{"field_name":"金额","operator":"gte","value":10000}` |
|
|
58
|
+
| 日期 / 日期时间 | 字符串;优先 `YYYY-MM-DD` 或 `YYYY-MM-DD HH:mm:ss` | `{"field_name":"计划日期","operator":"lte","value":"2026-06-30"}` |
|
|
59
|
+
| 单选 | 选项文本或 option id;优先写文本;对象可写 `{id,value}` / `{optId,optValue}` | `{"field_name":"状态","operator":"eq","value":"进行中"}` 或 `{"field_name":"状态","operator":"eq","value":"160712876"}` |
|
|
60
|
+
| 多选 | 多值用 `values`;每一项可写选项文本、option id 或选项对象 | `{"field_name":"标签","operator":"in","values":["重点","续约"]}` |
|
|
61
|
+
| 布尔 / 是否 | 按字段实际选项文本写,通常是 `是` / `否` | `{"field_name":"是否逾期","operator":"eq","value":"是"}` |
|
|
62
|
+
| 成员 / 部门 | 固定筛选写唯一 id 或 `{id,value}`;候选解析类写入路径可先写名称 | `{"field_name":"负责人","operator":"eq","value":{"id":123,"value":"沈嘉慧"}}` |
|
|
63
|
+
| 关联记录 / relation | 固定筛选写目标记录真实 `record_id/apply_id`;当前记录跨应用匹配用 `source_field:"数据ID"` | `{"field_name":"关联客户","operator":"eq","value":"535734615263924225"}` |
|
|
64
|
+
| 引用 / 数据填充字段 | 按读回展示类型写值;若本质来自选项字段,仍优先写展示文本 | `{"field_name":"客户等级","operator":"eq","value":"A"}` |
|
|
65
|
+
|
|
66
|
+
字段值选择原则:
|
|
67
|
+
|
|
68
|
+
- 选项字段:优先写选项文本,例如 `"正常"`;如果文本不唯一或来自读回,也可写 option id,例如 `"160712876"`。
|
|
69
|
+
- 成员/部门:固定筛选优先写 id 或 `{id,value}`;record 写入、默认值等候选解析路径可先写名称,若返回 `needs_confirmation` 再按候选改成 id。
|
|
70
|
+
- 关联/relation:固定筛选写目标记录真实 `record_id/apply_id`;跨应用当前记录匹配写 `source_field:"数据ID"`,不要写前端编号。
|
|
71
|
+
- 引用/数据填充字段:按前端展示的业务值写;如果引用来源是选项字段,仍优先写选项文本。
|
|
72
|
+
- 读回口径:`builder view/chart/associated-resource get` 优先返回业务文本和 canonical `operator`,不把后端数字 `judgeType`、option id、`matchRules` 作为智能体主输出。raw `config` 只用于诊断。
|
|
73
|
+
|
|
74
|
+
空值判断示例:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{"field_name": "完工日期", "operator": "is_empty"}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
读回示例:
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{"field_name":"使用状态","operator":"eq","value":"正常"}
|
|
84
|
+
{"target_field":"状态","operator":"in","values":["有效","待提交"]}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## 2. 当前记录上下文匹配
|
|
90
|
+
|
|
91
|
+
优先使用语义化映射,不手写后端 raw `que_relation` / `match_rules`。
|
|
92
|
+
|
|
93
|
+
心智模型:**同一个 operator,同一套 value 规则;只是当前记录匹配要把 `field_name` 改成 `target_field`,并用 `source_field` 表示当前记录字段。**
|
|
94
|
+
|
|
95
|
+
- 固定筛选当前资源自己的数据:`field_name + operator + value/values`
|
|
96
|
+
- 用当前记录过滤另一个资源:`target_field + operator + source_field`
|
|
97
|
+
- 给另一个资源加静态筛选:`target_field + operator + value/values`
|
|
98
|
+
- 从当前记录创建下游记录时传值:`source_field + target_field`,不写 `operator`
|
|
99
|
+
|
|
100
|
+
`operator` 和 `value/values` 的含义与 §1 完全一致。`operator` 省略时默认为 `eq`,但为了可读性,主配置仍推荐显式写出。
|
|
101
|
+
不要把跨应用“当前记录匹配”写成 `filters`:`filters` 只筛当前视图/报表自己的数据;`match_mappings` 才表示“拿当前记录的某个字段去匹配另一个资源”。
|
|
102
|
+
|
|
103
|
+
### 2.1 新增数据按钮
|
|
104
|
+
|
|
105
|
+
```json
|
|
106
|
+
[
|
|
107
|
+
{
|
|
108
|
+
"client_key": "add_worklog",
|
|
109
|
+
"button_text": "快捷添加工时",
|
|
110
|
+
"trigger_action": "addData",
|
|
111
|
+
"trigger_add_data_config": {
|
|
112
|
+
"target_app_key": "WORKLOG_APP",
|
|
113
|
+
"field_mappings": [
|
|
114
|
+
{"source_field": "数据ID", "target_field": "关联员工"},
|
|
115
|
+
{"source_field": "员工名称", "target_field": "员工姓名"}
|
|
116
|
+
],
|
|
117
|
+
"default_values": {
|
|
118
|
+
"状态": "待提交"
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
`field_mappings` 表示从当前记录动态带值,不需要 `operator`;`default_values` 只表示静态默认值。
|
|
126
|
+
|
|
127
|
+
### 2.2 关联视图 / 报表
|
|
128
|
+
|
|
129
|
+
跨应用关联必须显式传 `target_app_key`。若关联的是当前应用自己的视图或报表,可以省略 `target_app_key`,CLI 会默认使用命令里的 `--app-key`。
|
|
130
|
+
|
|
131
|
+
```json
|
|
132
|
+
[
|
|
133
|
+
{
|
|
134
|
+
"client_key": "employee_worklogs",
|
|
135
|
+
"graph_type": "view",
|
|
136
|
+
"target_app_key": "WORKLOG_APP",
|
|
137
|
+
"view_key": "WORKLOG_VIEW",
|
|
138
|
+
"match_mappings": [
|
|
139
|
+
{"target_field": "关联员工", "source_field": "数据ID"},
|
|
140
|
+
{"target_field": "状态", "value": "待提交"}
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
]
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
动态条件用 `source_field`;静态条件用 `value/values`。如果一个条件写了 `source_field`,就不要再写 `value/values`。
|
|
147
|
+
|
|
148
|
+
`field_name` / `field` 可作为 `target_field` 别名;静态单值写 `value`,多值写 `values`,空值类 operator 不写值。
|
|
149
|
+
|
|
150
|
+
跨应用 relation 最常见写法是把当前记录的数据 ID 匹配到目标应用的引用字段:
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{"target_field": "关联客户", "operator": "eq", "source_field": "数据ID"}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
这里 `target_field` 是被关联资源所在应用里的字段,`source_field` 是当前详情页这条记录里的字段。不要把它写成视图/报表 `filters`,也不要手写 `matchRules`。
|
|
157
|
+
|
|
158
|
+
如果 `target_field` 是目标应用中的引用 / relation 字段,最稳妥的当前记录匹配值是 `source_field: "数据ID"`,因为它表示当前记录真实 `record_id/apply_id`。不要用前端可见 `编号` 代替,除非目标字段本身就是文本/编号字段。
|
|
159
|
+
|
|
160
|
+
示例:
|
|
161
|
+
|
|
162
|
+
```json
|
|
163
|
+
{"target_field": "客户ID", "operator": "eq", "source_field": "数据ID"}
|
|
164
|
+
{"target_field": "状态", "operator": "eq", "value": "有效"}
|
|
165
|
+
{"target_field": "状态", "operator": "in", "values": ["有效", "待提交"]}
|
|
166
|
+
{"target_field": "归档说明", "operator": "is_empty"}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## 3. 系统字段
|
|
172
|
+
|
|
173
|
+
系统字段可以参与匹配:
|
|
174
|
+
|
|
175
|
+
| 写法 | field_id | 含义 |
|
|
176
|
+
| --- | --- | --- |
|
|
177
|
+
| `数据ID` / `row_record_id` / `apply_id` / `_id` | `-17` | 当前记录真实 record/apply ID |
|
|
178
|
+
| `编号` / `数据编号` / `record_number` | `0` | 前端可见数据编号,可能是自定义编号 |
|
|
179
|
+
|
|
180
|
+
也可以显式写:
|
|
181
|
+
|
|
182
|
+
```json
|
|
183
|
+
{"source_field": {"field_id": -17}, "target_field": "关联员工"}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
注意:`数据ID` 和 `编号` 不是同一个东西。要把当前记录填入目标引用字段时,用 `数据ID`。
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## 4. 类型兼容规则
|
|
191
|
+
|
|
192
|
+
| 目标 / 源字段类型 | 可匹配对象 |
|
|
193
|
+
| --- | --- |
|
|
194
|
+
| 引用字段 | 同目标应用的引用字段,或当前源应用记录的 `数据ID(-17)` |
|
|
195
|
+
| `数据ID(-17)` | 指向当前源应用的目标引用字段;也可匹配 ID 兼容的文本/数字字段 |
|
|
196
|
+
| `编号(0)` | 文本、长文本、数字、金额、编号类字段 |
|
|
197
|
+
| 成员字段 | 成员字段 |
|
|
198
|
+
| 部门字段 | 部门字段 |
|
|
199
|
+
| 单选 / 多选 / 布尔 | 选项类字段或静态选项值 |
|
|
200
|
+
| 日期 / 日期时间 | 日期类字段互通 |
|
|
201
|
+
| 文本 / 长文本 / 电话 / 邮箱 | 文本类字段互通 |
|
|
202
|
+
| 数字 / 金额 | 数值类字段互通 |
|
|
203
|
+
|
|
204
|
+
附件、子表、代码块、Q-Linker、地址字段默认不作为匹配字段。
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## 5. 常见错误处理
|
|
209
|
+
|
|
210
|
+
| 错误场景 | 下一步 |
|
|
211
|
+
| --- | --- |
|
|
212
|
+
| 字段不存在 | 重新 `builder app get --app-key APP_KEY fields` / `builder app get --app-key APP_KEY`,用准确字段标题或 `field_id` |
|
|
213
|
+
| 类型不兼容 | 按上表换兼容的源字段 / 目标字段 |
|
|
214
|
+
| 引用来源不一致 | 目标引用字段指向了别的应用;换成指向当前源应用的引用字段 |
|
|
215
|
+
| 同时传 semantic 与 raw | 同一项里只能二选一:`field_mappings/match_mappings` 或 raw `que_relation/match_rules` |
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## 6. 关联资源 ID 口径
|
|
220
|
+
|
|
221
|
+
`associated_item_id` 是应用级关联资源池里的 `form_asos_chart.id`,最终口径来自:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
qingflow --json builder app get --app-key APP_KEY
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
或同等 `app_get.associated_resources[].associated_item_id`。
|
|
228
|
+
|
|
229
|
+
它不是 `chart_id`、`chart_key`、`view_key`。但新版 `builder associated-resource apply` 在部分入口可接受 `chart_id` / `chart_key` / `view_key` 作为 selector,并自动解析成后端需要的 `associated_item_id`;写 view config 或排障时仍以读回的 `associated_item_id` 为准。
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Builder 工作区图标规则
|
|
2
|
+
|
|
3
|
+
用于应用包、应用、门户的新建与改名改图标场景。
|
|
4
|
+
|
|
5
|
+
## 默认链路
|
|
6
|
+
|
|
7
|
+
1. 先读取候选目录:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
qingflow --json builder icon catalog
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
2. 新建应用包、应用、门户时,显式填写 `icon` 和 `color`。
|
|
14
|
+
|
|
15
|
+
3. 不要使用 `template`;这是通用图标,新建资源会被 CLI 阻断。
|
|
16
|
+
|
|
17
|
+
## 关键规则
|
|
18
|
+
|
|
19
|
+
- CLI 不会根据业务名称自动猜图标。
|
|
20
|
+
- 智能体必须自己选择业务贴合的图标和颜色;主写法只有 `icon + color`,例如 `"icon": "table", "color": "blue"`。
|
|
21
|
+
- CLI/MCP 继续兼容 `icon_name + icon_color`、`icon_config` 或 `icon: {name, color}`,但这些只用于历史载荷和读回适配,不作为新提示词示例。
|
|
22
|
+
- 创建应用包、应用、门户时缺少 `icon` 或 `color` 会失败。
|
|
23
|
+
- 同批多应用创建时,每个新应用应使用不同 `icon`。
|
|
24
|
+
- 编辑已有资源时,不传 `icon/color` 会保留现状;显式传入时仍会校验合法性。
|
|
25
|
+
- 读取结果里的 `icon_config` 是给 UI/agent 展示用的解构结果,包含 `icon_name`、`icon_color`、`icon_text`、`raw`。
|
|
26
|
+
|
|
27
|
+
## 示例选择
|
|
28
|
+
|
|
29
|
+
这些只是候选思路,不是 CLI 默认映射:
|
|
30
|
+
|
|
31
|
+
| 场景 | 可选 icon |
|
|
32
|
+
|---|---|
|
|
33
|
+
| 员工 / 花名册 | `business-personalcard`、`user-group` |
|
|
34
|
+
| 任务 / 待办 | `clipboard-check`、`action-work` |
|
|
35
|
+
| 工时 / 时间 | `clock`、`action-hourglass-full` |
|
|
36
|
+
| 商机 / 增长 | `business-graph`、`business-trend-up` |
|
|
37
|
+
| 订单 / 交付 | `delivery-box-1`、`shopping-bag` |
|
|
38
|
+
| 回款 / 收款 | `money-receipt-2-1`、`money-wallet-1` |
|
|
39
|
+
| 门户 / 数据大屏 | `view-grid`、`chart-square-bar` |
|
|
40
|
+
|
|
41
|
+
常见安全选择:
|
|
42
|
+
|
|
43
|
+
| 场景 | 推荐 icon | 推荐颜色 |
|
|
44
|
+
|---|---|---|
|
|
45
|
+
| 应用包 / 门户 | `view-grid`、`chart-square-bar` | `blue`、`indigo`、`qing-purple` |
|
|
46
|
+
| 表单 / 台账 | `table`、`database`、`document` | `blue`、`azure` |
|
|
47
|
+
| 流程 / 任务 / 审批 | `clipboard-check`、`clipboard-list`、`action-work` | `emerald`、`green` |
|
|
48
|
+
| 时间 / 计划 | `clock`、`calendar` | `orange`、`yellow` |
|
|
49
|
+
| 设备 / 资产 | `server`、`comp-devices`、`cog`、`wrench-f` | `azure`、`indigo` |
|
|
50
|
+
| 风险 / 异常 | `exclamation-circle`、`shield-exclamation`、`bug-f` | `red`、`orange` |
|
|
51
|
+
| 财务 / 收付款 | `currency-yen`、`money-wallet-1`、`money-receipt-2-1` | `orange`、`qing-orange` |
|
|
52
|
+
| 人员 / 组织 | `user`、`user-group`、`business-personalcard` | `emerald`、`blue` |
|
|
53
|
+
|
|
54
|
+
不要写不存在的泛化图标名,例如 `warning`、`approval`、`asset`。需要警告类图标时用 `exclamation-circle` 或 `shield-exclamation`;需要审批类图标时用 `clipboard-check`。
|
|
55
|
+
|
|
56
|
+
## 当前 catalog 快照
|
|
57
|
+
|
|
58
|
+
以下清单来自当前 CLI 的 `builder icon catalog`。如果本机 CLI 返回的 catalog 与这里不同,以命令返回为准。
|
|
59
|
+
|
|
60
|
+
颜色:
|
|
61
|
+
|
|
62
|
+
`qing-orange`, `yellow`, `green`, `emerald`, `blue`, `azure`, `indigo`, `qing-purple`, `purple`, `pink`, `red`, `orange`
|
|
63
|
+
|
|
64
|
+
图标:
|
|
65
|
+
|
|
66
|
+
- `user`, `user-group`, `user-remove`, `user-add`, `user-circle`, `base-camera`, `view-grid`, `inbox`
|
|
67
|
+
- `inbox-in`, `share`, `sitemap`, `airplane`, `template`, `music-note`, `movie-play`, `clock`
|
|
68
|
+
- `document`, `document-search`, `clipboard-check`, `document-download`, `document-text`, `clipboard-copy`, `presentation-chart-bar`, `chart-square-bar`
|
|
69
|
+
- `database`, `server`, `calendar`, `mail`, `annotation`, `chat`, `bell`, `key`
|
|
70
|
+
- `shopping-bag`, `download`, `eye`, `eye-off`, `emoji-happy`, `emoji-sad`, `sun`, `moon`
|
|
71
|
+
- `cloud`, `lightning-bolt`, `fire`, `star`, `sparkles`, `heart`, `cake`, `gift`
|
|
72
|
+
- `light-bulb`, `exclamation`, `cog`, `thumb-up`, `thumb-down`, `cloud-download`, `cloud-upload`, `printer`
|
|
73
|
+
- `phone-incoming`, `phone-missed-call`, `terminal`, `search-circle`, `x-circle`, `check-circle`, `exclamation-circle`, `question-mark-circle`
|
|
74
|
+
- `information-circle`, `academic-cap`, `briefcase`, `home`, `phone`, `photograph`, `puzzle`, `color-swatch`
|
|
75
|
+
- `lock-open`, `lock-closed`, `shield-check`, `shield-exclamation`, `currency-dollar`, `currency-yen`, `globe`, `at-symbol`
|
|
76
|
+
- `slack`, `microphone`, `speakerphone`, `trash`, `book-open`, `truck`, `filter`, `essetional-filter-search`
|
|
77
|
+
- `essetional-filter-tick`, `table`, `calculator`, `location-radar`, `essetional-weight`, `school-award`, `comp-cloud-connection`, `comp-cloud-remove`
|
|
78
|
+
- `comp-cpu-charge`, `comp-cpu-setting`, `comp-cpu`, `comp-devices`, `comp-driver-2`, `comp-driver-refresh`, `location-global`, `location-location`
|
|
79
|
+
- `location-map`, `location-gps`, `essetional-ranking`, `chart-bar`, `business-graph`, `business-status-up`, `business-trend-down`, `business-trend-up`
|
|
80
|
+
- `business-presention-chart`, `business-favorite-chart`, `business-health`, `receipt-refund`, `receipt-tax`, `money-receipt-2-1`, `money-transaction-minus`, `action-hourglass-full`
|
|
81
|
+
- `action-work`, `bug-f`, `essetional-pet`, `files-folder`, `badge-check`, `money-wallet-1`, `money-ticket`, `money-money`
|
|
82
|
+
- `money-tag`, `money-wallet-2`, `business-personalcard`, `car-airplane`, `car-bus`, `car-car`, `car-driving`, `car-gas-station`
|
|
83
|
+
- `car-smart-car`, `car-ship`, `location-map-1`, `location-route-square`, `cone`, `design-brush-4`, `paint-roll`, `wrench-f`
|
|
84
|
+
- `essetional-reserve`, `essetional-broom`, `design-brush-2`, `essetional-judge`, `design-bucket`, `palette`, `comp-electricity`, `vial`
|
|
85
|
+
- `beaker`, `leaf-f`, `cursor-click`, `solid-search-alt-2`, `md-library`, `building-3`, `office-building`, `building-hospital`
|
|
86
|
+
- `school`, `store`, `video-camera-vintage-f`, `comp-monitor`, `delivery-truck`, `delivery-box-1`, `delivery-box-add`, `delivery-box-remove`
|
|
87
|
+
- `settings-setting-3`, `document-duplicate`, `essetional-flag-2`, `flag`, `icon-currency-dollar`, `clipboard-list`, `save-as`, `wifi`
|
|
88
|
+
- `status-online`, `scissors`, `globe-alt`, `ban`, `finger-print`, `qrcode`, `paper-clip`, `translate`
|
|
89
|
+
- `cube-transparent`, `variable`, `switch-vertical`, `sports-baseball`, `sports-basketball`, `sports-soccer`, `sports-football`, `sports-volleyball`
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# 轻流工作流搭建:概览与依赖
|
|
2
|
+
|
|
3
|
+
## 关联文件
|
|
4
|
+
|
|
5
|
+
| 文件 | 说明 |
|
|
6
|
+
|------|------|
|
|
7
|
+
| `manifest.yaml` | 技能清单 |
|
|
8
|
+
| `SKILL.md` | 主流程入口 |
|
|
9
|
+
| `scripts/workflow/validate_flow_spec.py` | 工作流 Spec 验证脚本,基于 JSON Schema + 自定义约束 |
|
|
10
|
+
| `scripts/workflow/diff_flow_spec.py` | 新旧 Spec 差异分析脚本,辅助更新模式下最小修改原则判断 |
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 依赖声明
|
|
15
|
+
|
|
16
|
+
本 Skill 关键依赖 **qingflow CLI**(已安装于 PATH,详见主入口 `qingflow-cli` Skill)。以下 qingflow 命令为核心操作:
|
|
17
|
+
|
|
18
|
+
| 命令 | 用途 |
|
|
19
|
+
|------|------|
|
|
20
|
+
| `qingflow builder flow schema --json` | 获取最新 WorkflowSpecDTO JSON Schema |
|
|
21
|
+
| `qingflow builder flow get --app-key <KEY>` | 读取当前工作流 spec |
|
|
22
|
+
| `qingflow --json builder flow apply --app-key <KEY> --spec-file <FILE>` | 主链路:部署/更新 WorkflowSpec |
|
|
23
|
+
| `qingflow --json builder flow apply --app-key <KEY> --patch-nodes-file <PATCH>` | 局部修改现有节点 |
|
|
24
|
+
| `qingflow builder member search --query <关键词>` | 搜索成员 |
|
|
25
|
+
| `qingflow builder role search --keyword <关键词>` | 搜索角色 |
|
|
26
|
+
| `qingflow --json app get --app-key <KEY>` | 获取应用信息(字段列表等) |
|
|
27
|
+
| `qingflow --json builder app get --app-key <KEY> fields` | 获取应用可搭建字段详情 |
|
|
28
|
+
| `qingflow --json builder app get --app-key <KEY> flow` | 获取流程摘要(是否启用等) |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 能力边界
|
|
33
|
+
|
|
34
|
+
| 在范围内 | 超出范围 |
|
|
35
|
+
|----------|----------|
|
|
36
|
+
| 基于已有应用搭建工作流 | 从零创建应用 |
|
|
37
|
+
| WorkflowSpec 生成与 apply;`patch_nodes` 仅用于已有节点局部维护 | 操作复杂命令拼接 |
|
|
38
|
+
| 审批/填写/抄送/分支条件等 WorkflowSpec 支持的流程 | 不读 schema/spec 就猜 raw 后端字段 |
|
|
39
|
+
| 审批/填写/抄送/自动化节点配置 | 修改字段定义 |
|
|
40
|
+
| 成员/角色搜索用于节点负责人 | 组织架构管理 |
|
|
41
|
+
| 验证 → apply → 校验循环 | 前端 UI 拖拽操作 |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
无论线性、分支、Q-Robot、审批、填写还是抄送流程,新建和替换都使用 WorkflowSpec `--spec-file`;已有节点的小修改才使用 `--patch-nodes-file`。不要在技能主链路使用 `--nodes-file` + `--transitions-file`。
|
|
46
|
+
|
|
47
|
+
← 返回主流程:[../SKILL.md](../../../SKILL.md)
|
|
48
|
+
→ 下一步:[02-update-mode.md](02-update-mode.md)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# 更新模式与最小修改原则
|
|
2
|
+
|
|
3
|
+
当应用已有工作流时,进入**更新模式**。核心原则是**最小修改**——只改动必要的部分,保持其他结构不变。
|
|
4
|
+
|
|
5
|
+
## 为什么要保持节点 ID 稳定
|
|
6
|
+
|
|
7
|
+
后端可能存储了 spec 中不支持的运行时配置(如审批策略、超时规则、高级权限等),这些配置与节点 ID 绑定。一旦修改节点 ID,后端会将其视为「删除旧节点 + 创建新节点」,导致不支持的配置全部丢失。
|
|
8
|
+
|
|
9
|
+
**因此:修改已有节点时,只改 attrs/name,绝不改 id。**
|
|
10
|
+
|
|
11
|
+
## 最小修改原则速查
|
|
12
|
+
|
|
13
|
+
| 操作 | ✅ 正确做法 | ❌ 错误做法 |
|
|
14
|
+
|------|-----------|-----------|
|
|
15
|
+
| 添加节点 | 使用新 ID,追加到 nodes 末尾 | 重排已有节点 ID |
|
|
16
|
+
| 删除节点 | 删除对应 node 和关联边 | 不删关联边导致孤立边 |
|
|
17
|
+
| 修改节点配置 | 同一 ID 下只改 attrs/name | 改 ID 导致节点重建 |
|
|
18
|
+
| 添加边 | 追加到 edges 数组 | 修改已有边的 from/to |
|
|
19
|
+
| 修改条件 | 同一条边内改 condition | 删除边再新建 |
|
|
20
|
+
| 调整流转 | 修改边的 from/to | 改节点 ID 来适配 |
|
|
21
|
+
|
|
22
|
+
## 使用 patch_nodes 优先
|
|
23
|
+
|
|
24
|
+
如果只是改节点名称、负责人、局部 attrs,优先使用 `patch_nodes[]`,节点 id 从 `builder flow get` 的 `spec.nodes[]` 读取:
|
|
25
|
+
|
|
26
|
+
```json
|
|
27
|
+
[
|
|
28
|
+
{"id": "89160906", "set": {"name": "需求评审(局部改)"}}
|
|
29
|
+
]
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## WorkflowSpec 更新时使用 diff 脚本辅助判断
|
|
33
|
+
|
|
34
|
+
需要提交完整 `--spec-file` 时,在 apply 前使用 diff 脚本对比新旧 spec:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
python3 scripts/diff_flow_spec.py tmp/current_flow.json tmp/flow_spec.json
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
输出会显示删除的节点/边、新增的节点/边、修改的节点/边,并自动评估是否符合最小修改原则。
|
|
41
|
+
|
|
42
|
+
验证脚本也支持在 WorkflowSpec 更新模式下进行最小修改原则校验:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
python3 scripts/validate_flow_spec.py \
|
|
46
|
+
tmp/flow_spec.json \
|
|
47
|
+
--schema tmp/flow_schema.json \
|
|
48
|
+
--previous tmp/current_flow.json
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## 更新模式 SOP 调整
|
|
52
|
+
|
|
53
|
+
在更新模式下,阶段 3.2 变为**必须执行**(读取现有 spec),阶段 5.2 的对比验证增加最小修改原则检查:
|
|
54
|
+
|
|
55
|
+
- 节点 ID 不应无故变更
|
|
56
|
+
- 删除的节点/边应为业务需要,而非误删
|
|
57
|
+
- 修改范围应仅限于业务建模中变更的部分
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
← 上一步:[01-overview.md](01-overview.md)
|
|
62
|
+
← 返回主流程:[../SKILL.md](../../../SKILL.md)
|
|
63
|
+
→ 下一步:[03-flow-patterns.md](03-flow-patterns.md)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# 流程模式速查
|
|
2
|
+
|
|
3
|
+
在构建 spec 前,先判断当前流程属于哪种模式,避免用错节点类型或边结构。
|
|
4
|
+
|
|
5
|
+
## 线性流程
|
|
6
|
+
|
|
7
|
+
最简单的流程模式:节点首尾相连,无分支、无条件。
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
n1 → n2 → n3 → n4
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
- 边不带 `condition`,按顺序流转即可
|
|
14
|
+
- 无需 gateway 节点
|
|
15
|
+
- 适用于:简单的提交→审批→结束
|
|
16
|
+
|
|
17
|
+
## 分支流程
|
|
18
|
+
|
|
19
|
+
分支流程属于 WorkflowSpec 主路径。需要分支时先读 `builder flow schema` / `builder flow get`,再用 `--spec-file` 提交完整 WorkflowSpec。
|
|
20
|
+
|
|
21
|
+
轻流的分支采用**并行分支**模型——通过 `gateway` 节点(`mode: parallel`)分发,所有出边指向的分支**都会进入**,通过每条边上的条件(`condition.autoJudges`)控制分支内的节点逻辑是否执行。
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
┌──[条件A成立]→ n3 → n4
|
|
25
|
+
n1 → n2 → g1 ──┤
|
|
26
|
+
└──[条件B成立]→ n5
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**关键点**:
|
|
30
|
+
- 分支起点必须是 `gateway`(`mode: parallel`),终点必须是 `gateway`(`mode: join`)
|
|
31
|
+
- 每条分支边都需要配置 `condition`,其中至少一条为 `kind: rules` 带 `autoJudges`
|
|
32
|
+
- 没有条件的边使用 `kind: default` 作为兜底
|
|
33
|
+
- 所有分支并行进入,条件只决定分支内逻辑是否执行,不存在"条件匹配就跳过其他分支"的互斥语义
|
|
34
|
+
|
|
35
|
+
## 循环/回退
|
|
36
|
+
|
|
37
|
+
**轻流工作流引擎不支持循环结构**。不要通过 gateway 或其他方式构建回到前序节点的环。
|
|
38
|
+
|
|
39
|
+
如需回退到前序节点重新处理,应使用审批节点的回退开关:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"type": "approval",
|
|
44
|
+
"attrs": {
|
|
45
|
+
"revert": true,
|
|
46
|
+
"revertScope": "all"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- `revert: true` 开启驳回/回退能力
|
|
52
|
+
- `revertScope` 控制回退范围:`all` 可回退到任意前序节点
|
|
53
|
+
- 这是引擎原生支持的回退机制,无需在 spec 中构建回退边
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
← 上一步:[02-update-mode.md](02-update-mode.md)
|
|
58
|
+
← 返回主流程:[../SKILL.md](../../../SKILL.md)
|
|
59
|
+
→ 下一步:[04-stage1-business-modeling.md](04-stage1-business-modeling.md)
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# 阶段 1:提取业务建模
|
|
2
|
+
|
|
3
|
+
从用户上下文(对话文本、上传的流程图图片、需求描述等)中提取业务建模。
|
|
4
|
+
|
|
5
|
+
## 若上下文包含流程图图片
|
|
6
|
+
|
|
7
|
+
1. 优先使用当前客户端已暴露的图片理解能力读取流程图;不要假定某个跨插件工具名一定存在
|
|
8
|
+
2. 如果当前环境没有图片理解能力,要求用户补充流程文字说明或节点/分支清单
|
|
9
|
+
3. 从图片理解结果或用户补充中提取:节点名称、节点类型、流转顺序、分支条件(字段→选项→目标)
|
|
10
|
+
|
|
11
|
+
## 建模输出格式
|
|
12
|
+
|
|
13
|
+
保存到 `tmp/业务建模_<应用名>.md`:
|
|
14
|
+
|
|
15
|
+
```markdown
|
|
16
|
+
# 业务建模:<流程名称>
|
|
17
|
+
|
|
18
|
+
## 应用信息
|
|
19
|
+
- APP_KEY: <xxx>
|
|
20
|
+
- 应用名称: <xxx>
|
|
21
|
+
|
|
22
|
+
## 节点清单
|
|
23
|
+
| id | 名称 | 类型 | 审批人/处理人 | 说明 |
|
|
24
|
+
|----|------|------|--------------|------|
|
|
25
|
+
| n1 | 员工提交申请 | applicant | — | 工作流入门 |
|
|
26
|
+
| n2 | 部门经理审批 | approval | 部门经理 | 或签 |
|
|
27
|
+
| ... | ... | ... | ... | ... |
|
|
28
|
+
|
|
29
|
+
## 流转路径
|
|
30
|
+
n1 → n2 → [分支:字段=选项]
|
|
31
|
+
├─ 选项A → n3
|
|
32
|
+
└─ 选项B → n4
|
|
33
|
+
...
|
|
34
|
+
|
|
35
|
+
## 分支条件明细
|
|
36
|
+
| 分支来源 | 条件字段 | 判断符 | 选项值 | 目标节点 |
|
|
37
|
+
|----------|---------|--------|--------|----------|
|
|
38
|
+
| 服务类型 | 服务类型(单选) | equals | 客诉 | 质量部负责人接单 |
|
|
39
|
+
| ... | ... | ... | ... | ... |
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**无法提取时**:明确告知用户缺少哪些信息(节点、角色、条件等),要求补充,**禁止臆测**。
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 业务完整性自检(建模完成后必须逐项确认)
|
|
47
|
+
|
|
48
|
+
> ⚠️ **用户指令优先**:如果用户给出了明确的流程设计指令,以用户指令为准,本自检仅作为补充建议。与用户指令冲突的项标记为「用户已明确」并跳过。
|
|
49
|
+
>
|
|
50
|
+
> 当用户未给出明确指令时,本自检从以下七个维度引导思考。回答「否」的项需在建模文件中说明理由。**禁止为了通过自检而添加无业务意义的节点。**
|
|
51
|
+
|
|
52
|
+
### 一、审批强度与风险匹配
|
|
53
|
+
- 审批层数是否与业务风险匹配?
|
|
54
|
+
- 低风险场景是否走了简化路径?
|
|
55
|
+
- 是否存在冗余审批节点?
|
|
56
|
+
|
|
57
|
+
### 二、角色策略与审批人指派
|
|
58
|
+
- 审批人是否基于角色而非个人?
|
|
59
|
+
- 不同审批层级是否代表不同能力或权限?
|
|
60
|
+
- 关键节点是否需要多人会签?审批人缺席时是否有替代方案?
|
|
61
|
+
|
|
62
|
+
### 三、执行顺序与效率
|
|
63
|
+
- 互不依赖的审批是否并行?
|
|
64
|
+
- 是否存在可合并的冗余环节?
|
|
65
|
+
- 串行审批链是否过长?
|
|
66
|
+
|
|
67
|
+
### 四、条件路由与分支设计
|
|
68
|
+
- 是否需要根据业务数据动态路由?
|
|
69
|
+
- 分支条件是否覆盖所有可能?是否有默认兜底?
|
|
70
|
+
|
|
71
|
+
### 五、异常处理与纠错机制
|
|
72
|
+
- 审批不通过时是否可以修正重提?
|
|
73
|
+
- 驳回后回到哪个节点?
|
|
74
|
+
- 是否考虑了审批超时?
|
|
75
|
+
- 异常升级是否有终态?
|
|
76
|
+
|
|
77
|
+
### 六、信息透明与闭环
|
|
78
|
+
- 关键决策节点完成后是否需要抄送?
|
|
79
|
+
- 流程结束后提交人是否能明确知道结果?
|
|
80
|
+
- 是否需要自动化节点更新状态字段?
|
|
81
|
+
|
|
82
|
+
### 七、流程嵌入与业务衔接
|
|
83
|
+
- 审批通过后是否有后续业务动作?
|
|
84
|
+
- 是否有前置校验需求?
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 自检结果格式
|
|
89
|
+
|
|
90
|
+
追加到建模文件末尾:
|
|
91
|
+
|
|
92
|
+
```markdown
|
|
93
|
+
## 业务完整性自检
|
|
94
|
+
|
|
95
|
+
| 维度 | 检查项 | 结果 | 说明 |
|
|
96
|
+
|------|--------|:----:|------|
|
|
97
|
+
| 一、审批强度 | 审批层数是否与风险匹配? | ✅/❌ | |
|
|
98
|
+
| 一、审批强度 | 低风险是否简化路径? | ✅/❌ | |
|
|
99
|
+
| 一、审批强度 | 是否存在冗余审批节点? | ✅/❌ | |
|
|
100
|
+
| 二、角色策略 | 审批人是否基于角色? | ✅/❌ | |
|
|
101
|
+
| 二、角色策略 | 不同层级是否代表不同能力? | ✅/❌ | |
|
|
102
|
+
| 二、角色策略 | 是否考虑缺席替代方案? | ✅/❌ | |
|
|
103
|
+
| 三、执行效率 | 独立审批是否并行化? | ✅/❌ | |
|
|
104
|
+
| 三、执行效率 | 串行链是否过长? | ✅/❌ | |
|
|
105
|
+
| 三、执行效率 | 是否存在可合并环节? | ✅/❌ | |
|
|
106
|
+
| 四、条件路由 | 是否需要动态路由? | ✅/❌ | |
|
|
107
|
+
| 四、条件路由 | 分支条件是否全覆盖? | ✅/❌ | |
|
|
108
|
+
| 四、条件路由 | 是否有默认兜底? | ✅/❌ | |
|
|
109
|
+
| 五、异常处理 | 驳回后是否可修正重提? | ✅/❌ | |
|
|
110
|
+
| 五、异常处理 | 是否考虑审批超时? | ✅/❌ | |
|
|
111
|
+
| 五、异常处理 | 异常升级是否有终态? | ✅/❌ | |
|
|
112
|
+
| 六、信息透明 | 关键节点是否抄送? | ✅/❌ | |
|
|
113
|
+
| 六、信息透明 | 提交人能否明确结果? | ✅/❌ | |
|
|
114
|
+
| 六、信息透明 | 状态字段是否自动更新? | ✅/❌ | |
|
|
115
|
+
| 七、业务衔接 | 是否有前置校验? | ✅/❌ | |
|
|
116
|
+
| 七、业务衔接 | 审批后是否有后续动作? | ✅/❌ | |
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## 自检不通过时的处理
|
|
120
|
+
|
|
121
|
+
- 某个维度确实需要但设计中遗漏了 → 回到建模环节补充
|
|
122
|
+
- 某个维度在业务上确实不需要 → 在「说明」列记录理由后放行
|
|
123
|
+
- 与用户明确指令冲突 → 标记「用户已明确」,以用户指令为准
|
|
124
|
+
|
|
125
|
+
**无法提取时**:明确告知用户缺少哪些信息,要求补充,**禁止臆测**。
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
← 上一步:[03-flow-patterns.md](03-flow-patterns.md)
|
|
130
|
+
← 返回主流程:[../SKILL.md](../../../SKILL.md)
|
|
131
|
+
→ 下一步:[05-stage2-members-roles.md](05-stage2-members-roles.md)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# 阶段 2:获取成员/角色信息
|
|
2
|
+
|
|
3
|
+
在配置节点负责人(`responsible`)前,需要搜索可用成员与角色:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
# 搜索成员
|
|
7
|
+
qingflow --json builder member search --query "<姓名/关键词>" --page-size 20
|
|
8
|
+
# 搜索角色
|
|
9
|
+
qingflow --json builder role search --keyword "<角色名>" --page-size 20
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## 注意事项
|
|
13
|
+
|
|
14
|
+
- `responsible` 是 **MemberRefDTO 数组**,不是单值对象
|
|
15
|
+
- `type` 字段可取:
|
|
16
|
+
- `user`(指定人)
|
|
17
|
+
- `role`(角色)
|
|
18
|
+
- `dept`(部门)
|
|
19
|
+
- `applicant` / `leader` / `formEmail` / `formMember` / `formDept` / `nodeLeader`
|
|
20
|
+
- 指定人时使用 `uid` 传入成员 UID(整数)
|
|
21
|
+
- 角色时使用 `roleId` 传入角色 ID(整数)
|
|
22
|
+
- 部门时使用 `deptId` 传入部门 ID(整数),可选 `havingSubDept`
|
|
23
|
+
- 避免硬编码 UID/角色 ID/部门 ID,始终从搜索结果中提取
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
← 上一步:[04-stage1-business-modeling.md](04-stage1-business-modeling.md)
|
|
28
|
+
← 返回主流程:[../SKILL.md](../../../SKILL.md)
|
|
29
|
+
→ 下一步:[06-stage3-build-spec.md](06-stage3-build-spec.md)
|