@qingflow-tech/qingflow-cli 1.1.49 → 1.1.50-beta.2
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 +4 -4
- package/npm/lib/runtime.mjs +29 -13
- package/package.json +1 -1
- package/pyproject.toml +2 -1
- package/skills/qingflow-cli/SKILL.md +92 -410
- package/skills/qingflow-cli/manifest.yaml +1 -1
- package/skills/qingflow-cli/reference/00-INDEX.md +4 -4
- package/skills/qingflow-cli/reference/QINGFLOW_CLI_ADMIN_CHEATSHEET.md +1 -1
- package/skills/qingflow-cli/reference/QINGFLOW_CLI_DATA_RETRIEVAL_WORKFLOW.md +3 -137
- package/skills/qingflow-cli/reference/QINGFLOW_CLI_EXPLORATION_REPORT.md +6 -4
- package/skills/qingflow-cli/reference/QINGFLOW_CLI_FIELD_DATA_TYPES.md +14 -14
- package/skills/qingflow-cli/reference/QINGFLOW_CLI_MEMBER_CHEATSHEET.md +20 -19
- package/skills/qingflow-cli/reference/QINGFLOW_CLI_ONE_SHOT_CHEATSHEET.md +18 -14
- package/skills/qingflow-cli/reference/QINGFLOW_CLI_RECORD_CREATE_WORKFLOW.md +7 -12
- package/skills/qingflow-cli/reference/QINGFLOW_CLI_RECORD_UPDATE_WORKFLOW.md +2 -1
- package/skills/qingflow-cli/reference/builder/20-build-complete-system.md +2 -2
- package/skills/qingflow-cli/reference/builder/30-schema-fields.md +9 -5
- package/skills/qingflow-cli/reference/builder/reference/app-delivery-sop.md +3 -3
- package/skills/qingflow-cli/reference/builder/workflow/03-flow-patterns.md +13 -5
- package/skills/qingflow-cli/reference/builder/workflow/07-stage4-validate-spec.md +5 -3
- package/skills/qingflow-cli/reference/builder/workflow/08-stage5-apply-verify.md +1 -1
- package/skills/qingflow-cli/reference/builder/workflow/11-troubleshooting.md +1 -1
- package/skills/qingflow-cli/reference/builder/workflow/workflow-schema.json +1665 -1738
- package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_ADMIN_CHEATSHEET.md +1 -1
- package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_DATA_RETRIEVAL_WORKFLOW.md +76 -95
- package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_EXPLORATION_REPORT.md +6 -4
- package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_FIELD_DATA_TYPES.md +13 -13
- package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_MEMBER_CHEATSHEET.md +20 -19
- package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_ONE_SHOT_CHEATSHEET.md +18 -14
- package/skills/qingflow-cli/reference/data/README.md +32 -0
- package/skills/qingflow-cli/reference/record/QINGFLOW_CLI_RECORD_SPECIALIZED_WORKFLOW.md +50 -0
- package/skills/qingflow-cli/reference/record/QINGFLOW_CLI_RECORD_UPDATE_WORKFLOW.md +2 -1
- package/skills/qingflow-cli/reference/record/analysis/README.md +21 -113
- package/skills/qingflow-cli/reference/record/analysis/analysis-gotchas.md +10 -10
- package/skills/qingflow-cli/reference/record/analysis/analysis-patterns.md +9 -9
- package/skills/qingflow-cli/reference/record/analysis/business-context.md +1 -1
- package/skills/qingflow-cli/reference/record/analysis/confidence-reporting.md +10 -10
- package/skills/qingflow-cli/reference/record/analysis/data-access-playbook.md +52 -80
- package/skills/qingflow-cli/reference/record/analysis/pandas-recipes.md +2 -2
- package/skills/qingflow-cli/scripts/workflow/validate_flow_spec.py +48 -46
- package/skills/qingflow-common/SKILL.md +10 -17
- package/src/qingflow_mcp/app_form_compat.py +3 -0
- package/src/qingflow_mcp/app_form_validator.py +16 -3
- package/src/qingflow_mcp/backend_client.py +142 -12
- package/src/qingflow_mcp/builder_facade/app_form.py +360 -68
- package/src/qingflow_mcp/builder_facade/flow_validation.py +569 -0
- package/src/qingflow_mcp/builder_facade/schemas/app_form/manifest.json +1 -0
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/complete.json +61 -27
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/address.json +3 -7
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/amount.json +3 -7
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/attachment.json +5 -9
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/code_block.json +3 -7
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/data_relation.json +8 -15
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/date.json +3 -7
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/datetime.json +3 -7
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/department.json +3 -7
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/email.json +3 -7
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/link.json +3 -7
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/long_text.json +3 -7
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/member.json +3 -7
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/multi_select.json +3 -7
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/number.json +3 -7
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/phone.json +3 -7
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/q_linker.json +3 -7
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/relation.json +43 -12
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/rich_text.json +146 -0
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/single_choice.json +3 -7
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/single_select.json +3 -7
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/subtable.json +58 -24
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/text.json +3 -7
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/formula.json +8 -0
- package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/summary.json +5 -10
- package/src/qingflow_mcp/builder_facade/service.py +749 -6
- package/src/qingflow_mcp/builder_facade/workflow_spec.py +154 -2
- package/src/qingflow_mcp/cli/commands/__init__.py +2 -1
- package/src/qingflow_mcp/cli/commands/auth.py +1 -1
- package/src/qingflow_mcp/cli/commands/builder.py +57 -41
- package/src/qingflow_mcp/cli/commands/data.py +134 -0
- package/src/qingflow_mcp/cli/commands/record.py +1 -1
- package/src/qingflow_mcp/cli/context.py +4 -1
- package/src/qingflow_mcp/cli/formatters.py +159 -4
- package/src/qingflow_mcp/cli/main.py +4 -1
- package/src/qingflow_mcp/config.py +60 -0
- package/src/qingflow_mcp/public_surface.py +9 -0
- package/src/qingflow_mcp/resource_uri.py +241 -0
- package/src/qingflow_mcp/response_trim.py +53 -5
- package/src/qingflow_mcp/server.py +2 -0
- package/src/qingflow_mcp/server_app_builder.py +57 -2
- package/src/qingflow_mcp/server_app_user.py +10 -3
- package/src/qingflow_mcp/tools/ai_builder_tools.py +374 -41
- package/src/qingflow_mcp/tools/app_tools.py +52 -13
- package/src/qingflow_mcp/tools/csv_export.py +168 -0
- package/src/qingflow_mcp/tools/data_tools.py +284 -0
- package/src/qingflow_mcp/tools/login_link_tools.py +34 -6
- package/src/qingflow_mcp/tools/record_tools.py +11 -46
- package/src/qingflow_mcp/tools/resource_read_tools.py +13 -0
|
@@ -1,1754 +1,1681 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
15
|
-
|
|
16
|
-
|
|
2
|
+
"type" : "object",
|
|
3
|
+
"title" : "WorkflowSpecDTO",
|
|
4
|
+
"description" : null,
|
|
5
|
+
"properties" : {
|
|
6
|
+
"edges" : {
|
|
7
|
+
"$ref" : "#/$defs/WorkflowEdgesDTO",
|
|
8
|
+
"description" : "边容器(edges.edges[]):显式 from/to 列表;fork 出边≥2 且 from=gateway.id;须保持 DAG"
|
|
9
|
+
},
|
|
10
|
+
"nodes" : {
|
|
11
|
+
"type" : "array",
|
|
12
|
+
"minItems" : 1,
|
|
13
|
+
"items" : {
|
|
14
|
+
"$ref" : "#/$defs/WorkflowNodeDTO"
|
|
15
|
+
},
|
|
16
|
+
"description" : "工作流节点列表(nodes)。须有且仅有一个 type=applicant;分支用 type=gateway(mode=parallel);汇合用 gateway(mode=join)。patterns.md#P03"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"required" : [ "edges", "nodes" ],
|
|
20
|
+
"$schema" : "https://json-schema.org/draft/2020-12/schema",
|
|
21
|
+
"x-schema-levels" : {
|
|
22
|
+
"levels" : [ {
|
|
23
|
+
"name" : "workflow-level",
|
|
24
|
+
"scope" : "root schema",
|
|
25
|
+
"handles" : "top-level orchestration fields such as nodes/edges"
|
|
26
|
+
}, {
|
|
27
|
+
"name" : "node-type-level",
|
|
28
|
+
"scope" : "$defs node entries",
|
|
29
|
+
"handles" : "node-specific fields, polymorphism, and node constraints"
|
|
30
|
+
}, {
|
|
31
|
+
"name" : "shared-definitions-level",
|
|
32
|
+
"scope" : "$defs reusable types",
|
|
33
|
+
"handles" : "shared structures, reusable constraints, and common resource metadata"
|
|
34
|
+
} ],
|
|
35
|
+
"description" : "Schema is organized into three levels for readability and stable evolution"
|
|
36
|
+
},
|
|
37
|
+
"$defs" : {
|
|
38
|
+
"FilterRuleDTO" : {
|
|
39
|
+
"type" : "object",
|
|
40
|
+
"description" : "单条筛选规则(FilterRule)。FilterRule 上下文:condition.autoJudges→fieldId 源应用、仅 literal;targetFilterRules→fieldId 目标应用、literal|field_ref;tableFilterRules.filterRules→fieldId 源子表子字段、仅 literal。 条件节点 autoJudges 仅 literal;Q-Robot targetFilterRules 可用 field_ref。",
|
|
41
|
+
"properties" : {
|
|
42
|
+
"fieldId" : {
|
|
43
|
+
"type" : "integer",
|
|
44
|
+
"description" : "被比较字段 id(fieldId)"
|
|
45
|
+
},
|
|
46
|
+
"fieldType" : {
|
|
47
|
+
"type" : "string",
|
|
48
|
+
"description" : "字段类型(fieldType),决定可用 judgeType 与 values 形态。枚举与引擎 QUE_TYPE 全集一一对应(含 text/single_select/amount 等草案简称);子表字段(table)的筛选见 tableFilterRules;附件/富文本/引用等此前未登记类型读面按原样回传",
|
|
49
|
+
"enum" : [ "single_line_text", "multi_line_text", "date", "member", "email", "mobile", "number", "link", "single_option", "dropdown", "multi_option", "date_range", "image_select", "relation", "address", "dept", "encrypted_text", "text", "single_select", "amount", "description_text", "attachment", "rich_text", "location", "table", "remote_lookup", "ocr", "section", "reference", "code_block", "embed_field" ]
|
|
50
|
+
},
|
|
51
|
+
"judgeType" : {
|
|
52
|
+
"type" : "string",
|
|
53
|
+
"description" : "判断符(judgeType)。单值比较(equals/includes/greater_than 等)通常 values 仅 1 项;equals_any/include_any 允许多项;dynamic_range 用于日期;range 用于数字区间 values[0]='min,max'",
|
|
54
|
+
"enum" : [ "equals", "not_equals", "includes", "not_includes", "greater_than", "greater_than_or_equals", "less_than", "less_than_or_equals", "dynamic_range", "equals_any", "not_equals_any", "belong_to", "not_belong_to", "subordinate_to", "not_subordinate_to", "subordinate_included", "subordinate_not_included", "fuzzy_match", "include_any", "include_all", "range" ]
|
|
55
|
+
},
|
|
56
|
+
"matchType" : {
|
|
57
|
+
"type" : "string",
|
|
58
|
+
"description" : "比较侧来源(matchType):literal=与 values 字面量比较;field_ref=values[0] 为源 fieldId 字符串,用于 Q-Robot 定位目标记录。variable/alias 及 jsonpath/xmlpath/reg 属引擎内部或外部触发侧形态(pathValue 驱动、不在 FilterRuleDTO 契约内),读面遇到会降级为逐字段告警",
|
|
59
|
+
"enum" : [ "literal", "field_ref" ]
|
|
60
|
+
},
|
|
61
|
+
"values" : {
|
|
62
|
+
"type" : "array",
|
|
63
|
+
"minItems" : 1,
|
|
64
|
+
"items" : {
|
|
65
|
+
"type" : "string"
|
|
66
|
+
},
|
|
67
|
+
"description" : "比较值(values),string 数组。个数与格式依 fieldType+judgeType:单值 judge 填 1 项;选项类可填展示文案或 optId;field_ref 时填源 fieldId 如 [\"343283769\"]",
|
|
68
|
+
"comment" : "条件示例:{\"fieldId\":343283771,\"fieldType\":\"single_select\",\"matchType\":\"literal\",\"judgeType\":\"equals\",\"values\":[\"A级\"]}; 更新定位示例:{\"matchType\":\"field_ref\",\"judgeType\":\"equals\",\"values\":[\"343283769\"]}"
|
|
17
69
|
}
|
|
70
|
+
},
|
|
71
|
+
"required" : [ "fieldId", "fieldType", "judgeType", "matchType" ],
|
|
72
|
+
"x-constraints" : [ {
|
|
73
|
+
"description" : "按使用场景区分 fieldId 归属:targetFilterRules→目标应用(appKey);tableFilterRules.filterRules→源应用子表子字段;field_ref 仅用于 targetFilterRules。"
|
|
74
|
+
} ]
|
|
18
75
|
},
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
"name": "workflow-level",
|
|
28
|
-
"scope": "root schema",
|
|
29
|
-
"handles": "top-level orchestration fields such as nodes/edges"
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
"name": "node-type-level",
|
|
33
|
-
"scope": "$defs node entries",
|
|
34
|
-
"handles": "node-specific fields, polymorphism, and node constraints"
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
"name": "shared-definitions-level",
|
|
38
|
-
"scope": "$defs reusable types",
|
|
39
|
-
"handles": "shared structures, reusable constraints, and common resource metadata"
|
|
40
|
-
}
|
|
41
|
-
],
|
|
42
|
-
"description": "Schema is organized into three levels for readability and stable evolution"
|
|
76
|
+
"FilterRuleGroupDTO" : {
|
|
77
|
+
"type" : "array",
|
|
78
|
+
"minItems" : 1,
|
|
79
|
+
"x-json-value" : "rules",
|
|
80
|
+
"items" : {
|
|
81
|
+
"$ref" : "#/$defs/FilterRuleDTO"
|
|
82
|
+
},
|
|
83
|
+
"description" : "筛选规则组(FilterRuleGroup)。JSON 线格式为 @JsonValue 数组(非 {rules:[]} 对象):组内 FilterRuleDTO 为 AND;多个 FilterRuleGroup 之间为 OR(用于条件节点、Q-Robot 更新定位等)"
|
|
43
84
|
},
|
|
44
|
-
"
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
"$ref": "#/$defs/ApplicantAttrsDTO"
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
"$ref": "#/$defs/AutomationAttrsDTO"
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
"$ref": "#/$defs/ApprovalAttrsDTO"
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
"$ref": "#/$defs/GatewayAttrsDTO"
|
|
67
|
-
}
|
|
68
|
-
],
|
|
69
|
-
"discriminator": {
|
|
70
|
-
"propertyName": "type",
|
|
71
|
-
"mapping": {
|
|
72
|
-
"cc": "#/$defs/CCAttrsDTO",
|
|
73
|
-
"filling": "#/$defs/FillingAttrsDTO",
|
|
74
|
-
"applicant": "#/$defs/ApplicantAttrsDTO",
|
|
75
|
-
"approval": "#/$defs/ApprovalAttrsDTO",
|
|
76
|
-
"gateway": "#/$defs/GatewayAttrsDTO"
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
"x-polymorphic-base": "com.qflow.backend.workflow.spec.dto.common.WorkflowSpecNodes$NodeAttrsDTO"
|
|
80
|
-
},
|
|
81
|
-
"WorkflowNodeDTO": {
|
|
82
|
-
"type": "object",
|
|
83
|
-
"description": "工作流节点。type 决定业务类型与 attrs 结构:applicant、filling、approval、gateway、cc、automation(按 subType 细分)",
|
|
84
|
-
"properties": {
|
|
85
|
-
"id": {
|
|
86
|
-
"type": "string",
|
|
87
|
-
"description": "节点唯一 id,在 nodes 中唯一",
|
|
88
|
-
"minLength": 1
|
|
89
|
-
},
|
|
90
|
-
"type": {
|
|
91
|
-
"type": "string",
|
|
92
|
-
"description": "节点类型(type)。gateway=并行 fork/join;automation 见 *AttrsDTO",
|
|
93
|
-
"comment": "applicant | filling | approval | gateway | automation | cc",
|
|
94
|
-
"enum": [
|
|
95
|
-
"applicant",
|
|
96
|
-
"filling",
|
|
97
|
-
"approval",
|
|
98
|
-
"gateway",
|
|
99
|
-
"cc",
|
|
100
|
-
"automation"
|
|
101
|
-
]
|
|
102
|
-
},
|
|
103
|
-
"name": {
|
|
104
|
-
"type": "string",
|
|
105
|
-
"description": "节点显示名称,流程图中展示",
|
|
106
|
-
"minLength": 1
|
|
107
|
-
},
|
|
108
|
-
"sync": {
|
|
109
|
-
"type": "boolean",
|
|
110
|
-
"description": "是否同步执行(sync)。true 时下游须等本节点完成"
|
|
111
|
-
},
|
|
112
|
-
"enabled": {
|
|
113
|
-
"type": "boolean",
|
|
114
|
-
"description": "是否启用(enabled)。false 时节点跳过"
|
|
115
|
-
},
|
|
116
|
-
"role": {
|
|
117
|
-
"type": "string",
|
|
118
|
-
"description": "语义角色标记(role),可选,用于扩展标识"
|
|
119
|
-
},
|
|
120
|
-
"attrs": {
|
|
121
|
-
"oneOf": [
|
|
122
|
-
{
|
|
123
|
-
"$ref": "#/$defs/CCAttrsDTO"
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
"$ref": "#/$defs/FillingAttrsDTO"
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
"$ref": "#/$defs/ApplicantAttrsDTO"
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
"$ref": "#/$defs/AutomationAttrsDTO"
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
"$ref": "#/$defs/ApprovalAttrsDTO"
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
"$ref": "#/$defs/GatewayAttrsDTO"
|
|
139
|
-
}
|
|
140
|
-
],
|
|
141
|
-
"discriminator": {
|
|
142
|
-
"propertyName": "type",
|
|
143
|
-
"mapping": {
|
|
144
|
-
"cc": "#/$defs/CCAttrsDTO",
|
|
145
|
-
"filling": "#/$defs/FillingAttrsDTO",
|
|
146
|
-
"applicant": "#/$defs/ApplicantAttrsDTO",
|
|
147
|
-
"approval": "#/$defs/ApprovalAttrsDTO",
|
|
148
|
-
"gateway": "#/$defs/GatewayAttrsDTO"
|
|
149
|
-
}
|
|
150
|
-
},
|
|
151
|
-
"x-polymorphic-base": "com.qflow.backend.workflow.spec.dto.common.WorkflowSpecNodes$NodeAttrsDTO",
|
|
152
|
-
"description": "节点专属属性(attrs),随 type 多态为各 *AttrsDTO"
|
|
153
|
-
}
|
|
154
|
-
},
|
|
155
|
-
"required": [
|
|
156
|
-
"id",
|
|
157
|
-
"type",
|
|
158
|
-
"name",
|
|
159
|
-
"attrs"
|
|
160
|
-
]
|
|
161
|
-
},
|
|
162
|
-
"FilterRuleDTO": {
|
|
163
|
-
"type": "object",
|
|
164
|
-
"description": "单条筛选规则(FilterRule)。FilterRule 上下文:condition.autoJudges→fieldId 源应用、仅 literal;targetFilterRules→fieldId 目标应用、literal|field_ref;tableFilterRules.filterRules→fieldId 源子表子字段、仅 literal。 条件节点 autoJudges 仅 literal;Q-Robot targetFilterRules 可用 field_ref。",
|
|
165
|
-
"properties": {
|
|
166
|
-
"fieldId": {
|
|
167
|
-
"type": "integer",
|
|
168
|
-
"description": "被比较字段 id(fieldId)"
|
|
169
|
-
},
|
|
170
|
-
"fieldType": {
|
|
171
|
-
"type": "string",
|
|
172
|
-
"description": "字段类型(fieldType),决定可用 judgeType 与 values 形态。完整枚举见 single_line_text 等;草案常用简称 text/single_select/amount 与引擎字段类型对应",
|
|
173
|
-
"enum": [
|
|
174
|
-
"single_line_text",
|
|
175
|
-
"multi_line_text",
|
|
176
|
-
"date",
|
|
177
|
-
"member",
|
|
178
|
-
"email",
|
|
179
|
-
"mobile",
|
|
180
|
-
"number",
|
|
181
|
-
"link",
|
|
182
|
-
"single_option",
|
|
183
|
-
"dropdown",
|
|
184
|
-
"multi_option",
|
|
185
|
-
"date_range",
|
|
186
|
-
"image_select",
|
|
187
|
-
"relation",
|
|
188
|
-
"address",
|
|
189
|
-
"dept",
|
|
190
|
-
"encrypted_text",
|
|
191
|
-
"text",
|
|
192
|
-
"single_select",
|
|
193
|
-
"amount"
|
|
194
|
-
]
|
|
195
|
-
},
|
|
196
|
-
"matchType": {
|
|
197
|
-
"type": "string",
|
|
198
|
-
"description": "比较侧来源(matchType):literal=与 values 字面量比较;field_ref=values[0] 为源 fieldId 字符串,用于 Q-Robot 定位目标记录",
|
|
199
|
-
"enum": [
|
|
200
|
-
"literal",
|
|
201
|
-
"field_ref"
|
|
202
|
-
]
|
|
203
|
-
},
|
|
204
|
-
"judgeType": {
|
|
205
|
-
"type": "string",
|
|
206
|
-
"description": "判断符(judgeType)。单值比较(equals/includes/greater_than 等)通常 values 仅 1 项;equals_any/include_any 允许多项;dynamic_range 用于日期;range 用于数字区间 values[0]='min,max'",
|
|
207
|
-
"enum": [
|
|
208
|
-
"equals",
|
|
209
|
-
"not_equals",
|
|
210
|
-
"includes",
|
|
211
|
-
"not_includes",
|
|
212
|
-
"greater_than",
|
|
213
|
-
"greater_than_or_equals",
|
|
214
|
-
"less_than",
|
|
215
|
-
"less_than_or_equals",
|
|
216
|
-
"dynamic_range",
|
|
217
|
-
"equals_any",
|
|
218
|
-
"not_equals_any",
|
|
219
|
-
"belong_to",
|
|
220
|
-
"not_belong_to",
|
|
221
|
-
"subordinate_to",
|
|
222
|
-
"not_subordinate_to",
|
|
223
|
-
"subordinate_included",
|
|
224
|
-
"subordinate_not_included",
|
|
225
|
-
"fuzzy_match",
|
|
226
|
-
"include_any",
|
|
227
|
-
"include_all",
|
|
228
|
-
"range"
|
|
229
|
-
]
|
|
230
|
-
},
|
|
231
|
-
"values": {
|
|
232
|
-
"type": "array",
|
|
233
|
-
"minItems": 1,
|
|
234
|
-
"items": {
|
|
235
|
-
"type": "string"
|
|
236
|
-
},
|
|
237
|
-
"description": "比较值(values),string 数组。个数与格式依 fieldType+judgeType:单值 judge 填 1 项;选项类可填展示文案或 optId;field_ref 时填源 fieldId 如 [\"343283769\"]",
|
|
238
|
-
"comment": "条件示例:{\"fieldId\":343283771,\"fieldType\":\"single_select\",\"matchType\":\"literal\",\"judgeType\":\"equals\",\"values\":[\"A级\"]}; 更新定位示例:{\"matchType\":\"field_ref\",\"judgeType\":\"equals\",\"values\":[\"343283769\"]}"
|
|
239
|
-
}
|
|
240
|
-
},
|
|
241
|
-
"required": [
|
|
242
|
-
"fieldId",
|
|
243
|
-
"fieldType",
|
|
244
|
-
"matchType",
|
|
245
|
-
"judgeType"
|
|
246
|
-
],
|
|
247
|
-
"x-constraints": [
|
|
248
|
-
{
|
|
249
|
-
"description": "按使用场景区分 fieldId 归属:targetFilterRules→目标应用(appKey);tableFilterRules.filterRules→源应用子表子字段;field_ref 仅用于 targetFilterRules。"
|
|
250
|
-
}
|
|
251
|
-
]
|
|
252
|
-
},
|
|
253
|
-
"FilterRuleGroupDTO": {
|
|
254
|
-
"type": "array",
|
|
255
|
-
"minItems": 1,
|
|
256
|
-
"x-json-value": "rules",
|
|
257
|
-
"items": {
|
|
258
|
-
"$ref": "#/$defs/FilterRuleDTO"
|
|
259
|
-
},
|
|
260
|
-
"description": "筛选规则组(FilterRuleGroup)。JSON 线格式为 @JsonValue 数组(非 {rules:[]} 对象):组内 FilterRuleDTO 为 AND;多个 FilterRuleGroup 之间为 OR(用于条件节点、Q-Robot 更新定位等)"
|
|
261
|
-
},
|
|
262
|
-
"EdgeConditionDTO": {
|
|
263
|
-
"type": "object",
|
|
264
|
-
"description": "边条件(condition)。kind=rules:autoJudges 命中时激活本边,同一 fork 点多条 rules 边构成互斥选路(P03a)。kind=default:兜底边(P03a)或并行激活边(P03b);parallel fork 允许多条 default。省略 condition=无条件线性边。autoJudges 选项值须与表单 label 一致(patterns.md#P05)。",
|
|
265
|
-
"properties": {
|
|
266
|
-
"kind": {
|
|
267
|
-
"type": "string",
|
|
268
|
-
"description": "条件类型(kind)。rules=按 autoJudges 互斥选路(P03a);default=兜底或并行激活(P03b)",
|
|
269
|
-
"enum": [
|
|
270
|
-
"default",
|
|
271
|
-
"rules"
|
|
272
|
-
]
|
|
273
|
-
},
|
|
274
|
-
"autoJudges": {
|
|
275
|
-
"type": "array",
|
|
276
|
-
"minItems": 1,
|
|
277
|
-
"items": {
|
|
278
|
-
"$ref": "#/$defs/FilterRuleGroupDTO"
|
|
279
|
-
},
|
|
280
|
-
"description": "规则组(autoJudges),kind=rules 时必填;OR 组间、组内 AND。 values 须与表单选项 label 完全一致(patterns.md#P05)"
|
|
281
|
-
}
|
|
282
|
-
},
|
|
283
|
-
"required": [
|
|
284
|
-
"kind"
|
|
285
|
-
],
|
|
286
|
-
"x-constraints": [
|
|
287
|
-
{
|
|
288
|
-
"if": "properties.kind.const='rules'",
|
|
289
|
-
"then": "required=['autoJudges']",
|
|
290
|
-
"description": "rules kind requires non-empty autoJudges"
|
|
291
|
-
}
|
|
292
|
-
],
|
|
293
|
-
"x-condition-constraints": [
|
|
294
|
-
"autoJudges follows OR-of-AND grouping",
|
|
295
|
-
"judgeType and fieldType must be semantically compatible"
|
|
296
|
-
]
|
|
297
|
-
},
|
|
298
|
-
"WorkflowEdgeDTO": {
|
|
299
|
-
"type": "object",
|
|
300
|
-
"description": "工作流边(edge):from/to 引用 nodes[].id。 分支出边见 分支出边:from 须为 type=gateway 且 attrs.mode=parallel 的节点 id;to 为该分支首节点。条件选路(P03a)用 condition.kind=rules;兜底或并行(P03b)用 default 或省略 condition。 省略 condition=无条件线性边。",
|
|
301
|
-
"properties": {
|
|
302
|
-
"from": {
|
|
303
|
-
"type": "string",
|
|
304
|
-
"description": "源节点 id(from)。parallel fork 时为本 gateway.id;线性边为上游业务节点 id",
|
|
305
|
-
"minLength": 1
|
|
306
|
-
},
|
|
307
|
-
"to": {
|
|
308
|
-
"type": "string",
|
|
309
|
-
"description": "目标节点 id(to)。须存在于 nodes[].id,且不得形成环(DAG)",
|
|
310
|
-
"minLength": 1
|
|
311
|
-
},
|
|
312
|
-
"label": {
|
|
313
|
-
"type": "string",
|
|
314
|
-
"description": "边展示标签(label)"
|
|
315
|
-
},
|
|
316
|
-
"priority": {
|
|
317
|
-
"type": "integer",
|
|
318
|
-
"description": "优先级(priority),多条规则边同时命中时数值小者优先"
|
|
319
|
-
},
|
|
320
|
-
"condition": {
|
|
321
|
-
"$ref": "#/$defs/EdgeConditionDTO",
|
|
322
|
-
"description": "边条件(condition);省略=无条件边。kind/rules/default 语义见 EdgeConditionDTO"
|
|
323
|
-
}
|
|
324
|
-
},
|
|
325
|
-
"required": [
|
|
326
|
-
"from",
|
|
327
|
-
"to"
|
|
328
|
-
]
|
|
329
|
-
},
|
|
330
|
-
"WorkflowEdgesDTO": {
|
|
331
|
-
"type": "object",
|
|
332
|
-
"description": "边容器(edges):主字段 edges 为 WorkflowEdgeDTO 列表",
|
|
333
|
-
"properties": {
|
|
334
|
-
"edges": {
|
|
335
|
-
"type": "array",
|
|
336
|
-
"minItems": 1,
|
|
337
|
-
"items": {
|
|
338
|
-
"$ref": "#/$defs/WorkflowEdgeDTO"
|
|
339
|
-
},
|
|
340
|
-
"description": "显式边列表(edges):每项 from/to 引用 nodes[].id"
|
|
341
|
-
}
|
|
342
|
-
},
|
|
343
|
-
"required": [
|
|
344
|
-
"edges"
|
|
345
|
-
]
|
|
346
|
-
},
|
|
347
|
-
"TimeoutDurationDTO": {
|
|
348
|
-
"type": "object",
|
|
349
|
-
"description": "超时时长(duration):数值 + 单位,对应 legacy timeoutValue + timeoutType(单位)",
|
|
350
|
-
"properties": {
|
|
351
|
-
"value": {
|
|
352
|
-
"type": "integer",
|
|
353
|
-
"description": "时长数值(value),对应 legacy compareValue / timeoutValue 整数部分"
|
|
354
|
-
},
|
|
355
|
-
"unit": {
|
|
356
|
-
"type": "string",
|
|
357
|
-
"description": "时间单位(unit):day|hour|minute|workday|national_workday",
|
|
358
|
-
"enum": [
|
|
359
|
-
"day",
|
|
360
|
-
"hour",
|
|
361
|
-
"minute",
|
|
362
|
-
"workday",
|
|
363
|
-
"national_workday"
|
|
364
|
-
]
|
|
365
|
-
}
|
|
366
|
-
},
|
|
367
|
-
"required": [
|
|
368
|
-
"value",
|
|
369
|
-
"unit"
|
|
370
|
-
]
|
|
371
|
-
},
|
|
372
|
-
"TableRowOperationsDTO": {
|
|
373
|
-
"type": "object",
|
|
374
|
-
"description": "子表行操作策略(tableRowOperations):仅当 fieldMappings.fieldId 为目标子表时使用。add_rows=追加行;replace_table=整表覆盖;update_rows=更新已有行(前置:targetFilterRules 须含该目标子表子字段筛选)。",
|
|
375
|
-
"properties": {
|
|
376
|
-
"strategy": {
|
|
377
|
-
"type": "string",
|
|
378
|
-
"description": "策略(strategy):add_rows=向目标子表追加行;update_rows=更新目标子表已有行(须 targetFilterRules 含该目标子表子字段筛选);replace_table=整表覆盖",
|
|
379
|
-
"enum": [
|
|
380
|
-
"add_rows",
|
|
381
|
-
"update_rows",
|
|
382
|
-
"replace_table"
|
|
383
|
-
]
|
|
384
|
-
},
|
|
385
|
-
"fieldMappings": {
|
|
386
|
-
"type": "array",
|
|
387
|
-
"minItems": 1,
|
|
388
|
-
"items": {
|
|
389
|
-
"$ref": "#/$defs/QRobotRelationRuleDTO"
|
|
390
|
-
},
|
|
391
|
-
"description": "子表内子字段映射(fieldMappings),结构与 QRobotRelationRuleDTO 相同"
|
|
392
|
-
},
|
|
393
|
-
"addWhenNoMatch": {
|
|
394
|
-
"type": "boolean",
|
|
395
|
-
"description": "update_rows 专用:目标子表按 targetFilterRules 无匹配行时是否新增行(addWhenNoMatch)"
|
|
396
|
-
},
|
|
397
|
-
"addRule": {
|
|
398
|
-
"type": "string",
|
|
399
|
-
"description": "addWhenNoMatch=true 时的新增行规则(addRule),如 copy_row/new_default_row"
|
|
400
|
-
}
|
|
401
|
-
},
|
|
402
|
-
"required": [
|
|
403
|
-
"strategy"
|
|
404
|
-
]
|
|
405
|
-
},
|
|
406
|
-
"QRobotRelationRuleDTO": {
|
|
407
|
-
"type": "object",
|
|
408
|
-
"description": "Q-Robot 字段映射(fieldMappings):将源表单或字面量写入目标应用 fieldId",
|
|
409
|
-
"properties": {
|
|
410
|
-
"fieldId": {
|
|
411
|
-
"type": "integer",
|
|
412
|
-
"description": "目标应用中的字段 id(fieldId)"
|
|
413
|
-
},
|
|
414
|
-
"matchType": {
|
|
415
|
-
"type": "string",
|
|
416
|
-
"description": "赋值来源(matchType):literal=常量/结构化字面量;field_ref=引用当前流程表单字段 id",
|
|
417
|
-
"enum": [
|
|
418
|
-
"literal",
|
|
419
|
-
"field_ref"
|
|
420
|
-
]
|
|
421
|
-
},
|
|
422
|
-
"values": {
|
|
423
|
-
"type": "array",
|
|
424
|
-
"minItems": 1,
|
|
425
|
-
"items": {
|
|
426
|
-
"oneOf": [
|
|
427
|
-
{
|
|
428
|
-
"type": "string",
|
|
429
|
-
"description": "简单字面量或 matchType=field_ref 时的源 fieldId 字符串"
|
|
430
|
-
},
|
|
431
|
-
{
|
|
432
|
-
"type": "number"
|
|
433
|
-
},
|
|
434
|
-
{
|
|
435
|
-
"type": "boolean"
|
|
436
|
-
},
|
|
437
|
-
{
|
|
438
|
-
"$ref": "#/$defs/LiteralAssignmentValueDTO"
|
|
439
|
-
}
|
|
440
|
-
]
|
|
441
|
-
},
|
|
442
|
-
"description": "赋值载荷(values)。literal:string/number/boolean、{\"value\":\"已审核\"} 或 LiteralAssignmentValueDTO;field_ref:源 fieldId 字符串数组",
|
|
443
|
-
"comment": "literal简写:[{\"value\":\"已审核\"}]; field_ref:[\"343283769\"]; 复杂字面量:[{\"valueType\":\"option\",\"value\":\"123\"}]"
|
|
444
|
-
},
|
|
445
|
-
"tableRowOperations": {
|
|
446
|
-
"$ref": "#/$defs/TableRowOperationsDTO",
|
|
447
|
-
"description": "目标子表行操作策略(tableRowOperations):fieldId 为目标子表(QUE_TYPE_TABLE)时使用。 子表行操作策略(tableRowOperations):仅当 fieldMappings.fieldId 为目标子表时使用。add_rows=追加行;replace_table=整表覆盖;update_rows=更新已有行(前置:targetFilterRules 须含该目标子表子字段筛选)。"
|
|
448
|
-
}
|
|
449
|
-
},
|
|
450
|
-
"required": [
|
|
451
|
-
"fieldId",
|
|
452
|
-
"matchType",
|
|
453
|
-
"values"
|
|
454
|
-
]
|
|
455
|
-
},
|
|
456
|
-
"MissAddConfigDTO": {
|
|
457
|
-
"type": "object",
|
|
458
|
-
"properties": {}
|
|
459
|
-
},
|
|
460
|
-
"AutomationTableFilterRuleDTO": {
|
|
461
|
-
"type": "object",
|
|
462
|
-
"description": "源应用单个子表的行筛选:对应编辑器「表格筛选条件」中的一条子表配置",
|
|
463
|
-
"properties": {
|
|
464
|
-
"tableFieldId": {
|
|
465
|
-
"type": "integer",
|
|
466
|
-
"description": "源应用(当前流程)子表 fieldId(tableFieldId)。不是 attrs.appKey 目标应用的子表",
|
|
467
|
-
"comment": "示例:源流程订单明细子表 queId;勿填目标应用子表 id"
|
|
468
|
-
},
|
|
469
|
-
"filterRules": {
|
|
470
|
-
"type": "array",
|
|
471
|
-
"minItems": 1,
|
|
472
|
-
"items": {
|
|
473
|
-
"$ref": "#/$defs/FilterRuleGroupDTO"
|
|
474
|
-
},
|
|
475
|
-
"description": "对该源子表行的筛选组(filterRules):OR 组内 AND。 FilterRuleDTO.fieldId 必须是 tableFieldId 下子字段(源应用),仅 matchType=literal。 FilterRule 上下文:condition.autoJudges→fieldId 源应用、仅 literal;targetFilterRules→fieldId 目标应用、literal|field_ref;tableFilterRules.filterRules→fieldId 源子表子字段、仅 literal。"
|
|
476
|
-
}
|
|
477
|
-
},
|
|
478
|
-
"required": [
|
|
479
|
-
"tableFieldId",
|
|
480
|
-
"filterRules"
|
|
481
|
-
]
|
|
482
|
-
},
|
|
483
|
-
"AutomationUpdateAttrsDTO": {
|
|
484
|
-
"type": "object",
|
|
485
|
-
"description": "Q-Robot 更新(subType=update):targetFilterRules 定位目标行,fieldMappings 写字段。【Q-Robot 三层筛选】① tableFilterRules=编辑器「表格筛选条件」,筛源应用(当前流程)子表行,legacy tableFilterCondition;② targetFilterRules=编辑器「更新哪些数据」,筛目标应用(appKey)主记录/目标子表行,legacy qrobotQueFilterFormula/filterCondition;③ fieldMappings[].tableRowOperations=「表格更新规则」,写目标子表行内容。目标子表行定位写在 targetFilterRules,不要写在 tableFilterRules。",
|
|
486
|
-
"properties": {
|
|
487
|
-
"appKey": {
|
|
488
|
-
"type": "string",
|
|
489
|
-
"description": "目标应用 appKey",
|
|
490
|
-
"minLength": 1,
|
|
491
|
-
"x-resource-ref": {
|
|
492
|
-
"resourceType": "application",
|
|
493
|
-
"guidance": "Select an application to update"
|
|
494
|
-
}
|
|
495
|
-
},
|
|
496
|
-
"targetFilterRules": {
|
|
497
|
-
"type": "array",
|
|
498
|
-
"minItems": 1,
|
|
499
|
-
"items": {
|
|
500
|
-
"$ref": "#/$defs/FilterRuleGroupDTO"
|
|
501
|
-
},
|
|
502
|
-
"description": "更新哪些数据(targetFilterRules):编辑器「更新哪些数据/+筛选数据」。fieldId 属于目标应用(appKey);matchType=field_ref 时 values[0] 为源应用 fieldId 字符串。若按目标子表某行定位主记录,在此对目标子表的子字段写筛选(非 tableFilterRules)。Legacy qrobotQueFilterFormula / filterCondition。"
|
|
503
|
-
},
|
|
504
|
-
"fieldMappings": {
|
|
505
|
-
"type": "array",
|
|
506
|
-
"minItems": 1,
|
|
507
|
-
"items": {
|
|
508
|
-
"$ref": "#/$defs/QRobotRelationRuleDTO"
|
|
509
|
-
},
|
|
510
|
-
"description": "字段映射(fieldMappings):更新哪些字段及取值"
|
|
511
|
-
},
|
|
512
|
-
"missAdd": {
|
|
513
|
-
"$ref": "#/$defs/MissAddConfigDTO",
|
|
514
|
-
"description": "未匹配到记录时是否新增(missAdd)"
|
|
515
|
-
},
|
|
516
|
-
"tableFilterRules": {
|
|
517
|
-
"type": "array",
|
|
518
|
-
"items": {
|
|
519
|
-
"$ref": "#/$defs/AutomationTableFilterRuleDTO"
|
|
520
|
-
},
|
|
521
|
-
"description": "源应用表格筛选(tableFilterRules):编辑器「表格筛选条件」。在映射写入目标应用前,限定当前流程(源应用)子表参与操作的行。tableFieldId 为源子表 fieldId;filterRules 内 fieldId 须为该源子表下的子字段,仅 matchType=literal。Legacy tableFilterCondition。与 targetFilterRules 无关。"
|
|
522
|
-
}
|
|
523
|
-
},
|
|
524
|
-
"required": [
|
|
525
|
-
"appKey",
|
|
526
|
-
"targetFilterRules",
|
|
527
|
-
"fieldMappings"
|
|
528
|
-
]
|
|
529
|
-
},
|
|
530
|
-
"MemberRefDTO": {
|
|
531
|
-
"type": "object",
|
|
532
|
-
"description": "成员引用(MemberRef):对应设计器节点负责人(成员/部门/角色/动态 Tab)",
|
|
533
|
-
"properties": {
|
|
534
|
-
"type": {
|
|
535
|
-
"type": "string",
|
|
536
|
-
"description": "负责人来源(type)。静态:user(uid)、dept(deptId)、role(roleId)。动态:applicant;leader(queId=5 申请人部门主管,否则 queId 须为 fieldType=dept 的字段);nodeLeader(当前节点负责人,无需 id);formEmail(queId 须 fieldType=email);formMember(queId 须 fieldType=member,含表格子字段);formDept(queId 须 fieldType=dept)。",
|
|
537
|
-
"comment": "{\"type\":\"user\",\"uid\":1001} | {\"type\":\"leader\",\"queId\":5} | {\"type\":\"formEmail\",\"queId\":343283769} | {\"type\":\"formMember\",\"queId\":343283769}",
|
|
538
|
-
"enum": [
|
|
539
|
-
"user",
|
|
540
|
-
"dept",
|
|
541
|
-
"role",
|
|
542
|
-
"applicant",
|
|
543
|
-
"leader",
|
|
544
|
-
"formEmail",
|
|
545
|
-
"formMember",
|
|
546
|
-
"formDept",
|
|
547
|
-
"nodeLeader"
|
|
548
|
-
]
|
|
549
|
-
},
|
|
550
|
-
"uid": {
|
|
551
|
-
"type": "integer",
|
|
552
|
-
"description": "用户 id(uid),type=user 时必填",
|
|
553
|
-
"x-resource-ref": {
|
|
554
|
-
"resourceType": "member",
|
|
555
|
-
"guidance": "Search workspace users when type=user"
|
|
556
|
-
}
|
|
557
|
-
},
|
|
558
|
-
"deptId": {
|
|
559
|
-
"type": "integer",
|
|
560
|
-
"description": "部门 id(deptId),type=dept 时必填",
|
|
561
|
-
"x-resource-ref": {
|
|
562
|
-
"resourceType": "member",
|
|
563
|
-
"guidance": "Search workspace departments when type=dept"
|
|
564
|
-
}
|
|
565
|
-
},
|
|
566
|
-
"roleId": {
|
|
567
|
-
"type": "integer",
|
|
568
|
-
"description": "角色 id(roleId),type=role 时必填",
|
|
569
|
-
"x-resource-ref": {
|
|
570
|
-
"resourceType": "member",
|
|
571
|
-
"guidance": "Search workspace roles when type=role"
|
|
572
|
-
}
|
|
573
|
-
},
|
|
574
|
-
"queId": {
|
|
575
|
-
"type": "integer",
|
|
576
|
-
"description": "表单字段 id(queId)。leader/formEmail/formMember/formDept 时必填。选字段时按 fieldType 过滤:formEmail→email,formMember→member,formDept→dept,leader(非5)→dept;与 qingflow CLI 应用字段类型、FilterRuleDTO.fieldType 同名。",
|
|
577
|
-
"x-resource-ref": {
|
|
578
|
-
"resourceType": "formField",
|
|
579
|
-
"guidance": "Resolve field by title/id from current app; filter by fieldType: formEmail=email, formMember=member, formDept=dept, leader(dept field)=dept, leader(applicant)=queId 5"
|
|
580
|
-
}
|
|
581
|
-
},
|
|
582
|
-
"havingSubDept": {
|
|
583
|
-
"type": "boolean",
|
|
584
|
-
"description": "是否包含子部门(havingSubDept),type=dept 时可选"
|
|
585
|
-
}
|
|
586
|
-
},
|
|
587
|
-
"required": [
|
|
588
|
-
"type"
|
|
589
|
-
],
|
|
590
|
-
"x-constraints": [
|
|
591
|
-
{
|
|
592
|
-
"description": "type 决定必填字段与 queId 字段类型(filter):user→uid;dept→deptId;role→roleId;applicant 无 id;leader→queId(5 或 fieldType=dept);formEmail→fieldType=email;formMember→fieldType=member;formDept→fieldType=dept。fieldType 与 CLI/FilterRuleDTO 一致(email/member/dept 等)"
|
|
593
|
-
}
|
|
594
|
-
]
|
|
595
|
-
},
|
|
596
|
-
"PreTimeoutConfigDTO": {
|
|
597
|
-
"type": "object",
|
|
598
|
-
"description": "超时预警(preTimeout):超时到达前的提醒配置",
|
|
599
|
-
"properties": {
|
|
600
|
-
"enabled": {
|
|
601
|
-
"type": "boolean",
|
|
602
|
-
"description": "是否开启预警(enabled)"
|
|
603
|
-
},
|
|
604
|
-
"duration": {
|
|
605
|
-
"$ref": "#/$defs/TimeoutDurationDTO",
|
|
606
|
-
"description": "预警提前量(duration)"
|
|
607
|
-
},
|
|
608
|
-
"notifiers": {
|
|
609
|
-
"type": "array",
|
|
610
|
-
"items": {
|
|
611
|
-
"$ref": "#/$defs/MemberRefDTO"
|
|
612
|
-
},
|
|
613
|
-
"description": "预警通知人(notifiers)"
|
|
614
|
-
},
|
|
615
|
-
"notifyCurrentAuditor": {
|
|
616
|
-
"type": "boolean",
|
|
617
|
-
"description": "是否通知当前节点负责人(notifyCurrentAuditor),默认 true"
|
|
618
|
-
}
|
|
619
|
-
},
|
|
620
|
-
"required": [
|
|
621
|
-
"enabled",
|
|
622
|
-
"duration"
|
|
623
|
-
]
|
|
624
|
-
},
|
|
625
|
-
"TimeoutConfigDTO": {
|
|
626
|
-
"type": "object",
|
|
627
|
-
"description": "超时与预警(timeoutConfig):用于审批/填写节点,控制超时提醒、通知人与自动处理",
|
|
628
|
-
"properties": {
|
|
629
|
-
"type": {
|
|
630
|
-
"type": "string",
|
|
631
|
-
"description": "超时来源(type/mode):custom=固定时长;form=取自表单日期字段",
|
|
632
|
-
"enum": [
|
|
633
|
-
"custom",
|
|
634
|
-
"form"
|
|
635
|
-
]
|
|
636
|
-
},
|
|
637
|
-
"duration": {
|
|
638
|
-
"$ref": "#/$defs/TimeoutDurationDTO",
|
|
639
|
-
"description": "自定义超时时长(duration),type=custom 时必填"
|
|
640
|
-
},
|
|
641
|
-
"timeoutQueId": {
|
|
642
|
-
"type": "integer",
|
|
643
|
-
"description": "表单字段 id(timeoutQueId),type=form 时必填"
|
|
644
|
-
},
|
|
645
|
-
"timeoutCompareType": {
|
|
646
|
-
"type": "string",
|
|
647
|
-
"description": "与字段日期的比较方式(timeoutCompareType),type=form 时使用",
|
|
648
|
-
"enum": [
|
|
649
|
-
"current",
|
|
650
|
-
"before",
|
|
651
|
-
"after"
|
|
652
|
-
]
|
|
653
|
-
},
|
|
654
|
-
"offset": {
|
|
655
|
-
"$ref": "#/$defs/TimeoutDurationDTO",
|
|
656
|
-
"description": "相对字段日期的偏移量(offset),type=form 且 before/after 时必填"
|
|
657
|
-
},
|
|
658
|
-
"timeOfDay": {
|
|
659
|
-
"type": "string",
|
|
660
|
-
"description": "表单日期当天的具体时刻(timeOfDay),格式 HH:mm,type=form 且 compare=current 时可选"
|
|
661
|
-
},
|
|
662
|
-
"autoDeal": {
|
|
663
|
-
"type": "boolean",
|
|
664
|
-
"description": "超时后自动处理(autoDeal)"
|
|
665
|
-
},
|
|
666
|
-
"notifyCurrentAuditor": {
|
|
667
|
-
"type": "boolean",
|
|
668
|
-
"description": "是否通知当前节点负责人(notifyCurrentAuditor),默认 true"
|
|
669
|
-
},
|
|
670
|
-
"notifiers": {
|
|
671
|
-
"type": "array",
|
|
672
|
-
"items": {
|
|
673
|
-
"$ref": "#/$defs/MemberRefDTO"
|
|
674
|
-
},
|
|
675
|
-
"description": "超时通知人(notifiers),可含 nodeLeader/user/role 等"
|
|
676
|
-
},
|
|
677
|
-
"remindType": {
|
|
678
|
-
"type": "string",
|
|
679
|
-
"description": "提醒类型(remindType):immediate=立即;fixed_time=指定时间",
|
|
680
|
-
"enum": [
|
|
681
|
-
"immediate",
|
|
682
|
-
"fixed_time"
|
|
683
|
-
]
|
|
684
|
-
},
|
|
685
|
-
"preTimeout": {
|
|
686
|
-
"$ref": "#/$defs/PreTimeoutConfigDTO",
|
|
687
|
-
"description": "超时预警(preTimeout)"
|
|
688
|
-
},
|
|
689
|
-
"timeoutValue": {
|
|
690
|
-
"type": "string",
|
|
691
|
-
"description": "已废弃:请使用 duration;兼容旧草案如 2d/3h"
|
|
692
|
-
},
|
|
693
|
-
"timeoutWarning": {
|
|
694
|
-
"type": "boolean",
|
|
695
|
-
"description": "已废弃:请使用 preTimeout.enabled"
|
|
696
|
-
},
|
|
697
|
-
"timeoutWarningType": {
|
|
698
|
-
"type": "integer",
|
|
699
|
-
"description": "已废弃:请使用 preTimeout.duration"
|
|
700
|
-
},
|
|
701
|
-
"timeoutWarningValue": {
|
|
702
|
-
"type": "string",
|
|
703
|
-
"description": "已废弃:请使用 preTimeout.duration"
|
|
704
|
-
}
|
|
705
|
-
},
|
|
706
|
-
"required": [
|
|
707
|
-
"type"
|
|
708
|
-
],
|
|
709
|
-
"x-constraints": [
|
|
710
|
-
{
|
|
711
|
-
"if": "properties.type.const='custom'",
|
|
712
|
-
"then": "required=['duration']",
|
|
713
|
-
"else": "required=['timeoutQueId']",
|
|
714
|
-
"description": "Custom timeout requires duration; form timeout requires timeoutQueId"
|
|
715
|
-
}
|
|
716
|
-
]
|
|
717
|
-
},
|
|
718
|
-
"MailFileDTO": {
|
|
719
|
-
"type": "object",
|
|
720
|
-
"description": "邮件附件来源(mailFiles 项)",
|
|
721
|
-
"properties": {
|
|
722
|
-
"type": {
|
|
723
|
-
"type": "integer",
|
|
724
|
-
"description": "附件来源类型(type):决定使用 fieldId(表单附件字段) 或 printKey(打印模板)"
|
|
725
|
-
},
|
|
726
|
-
"printKey": {
|
|
727
|
-
"type": "string",
|
|
728
|
-
"description": "打印模板 key(printKey),type 为打印模板时使用"
|
|
729
|
-
},
|
|
730
|
-
"fieldId": {
|
|
731
|
-
"type": "integer",
|
|
732
|
-
"description": "表单附件字段 id(fieldId),type 为字段附件时使用"
|
|
733
|
-
}
|
|
734
|
-
}
|
|
85
|
+
"EdgeConditionDTO" : {
|
|
86
|
+
"type" : "object",
|
|
87
|
+
"description" : "边条件(condition)。kind=rules:autoJudges 命中时激活本边,同一 fork 点多条 rules 边构成互斥选路(P03a)。kind=default:兜底边(P03a)或并行激活边(P03b);parallel fork 允许多条 default。省略 condition=无条件线性边。autoJudges 选项值须与表单 label 一致(patterns.md#P05)。",
|
|
88
|
+
"properties" : {
|
|
89
|
+
"autoJudges" : {
|
|
90
|
+
"type" : "array",
|
|
91
|
+
"minItems" : 1,
|
|
92
|
+
"items" : {
|
|
93
|
+
"$ref" : "#/$defs/FilterRuleGroupDTO"
|
|
94
|
+
},
|
|
95
|
+
"description" : "规则组(autoJudges),kind=rules 时必填;OR 组间、组内 AND。 values 须与表单选项 label 完全一致(patterns.md#P05)"
|
|
735
96
|
},
|
|
736
|
-
"
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
"$ref": "#/$defs/MailFileDTO"
|
|
758
|
-
},
|
|
759
|
-
"description": "附件列表(mailFiles)"
|
|
760
|
-
}
|
|
761
|
-
}
|
|
97
|
+
"kind" : {
|
|
98
|
+
"type" : "string",
|
|
99
|
+
"description" : "条件类型(kind)。rules=按 autoJudges 互斥选路(P03a);default=兜底或并行激活(P03b)",
|
|
100
|
+
"enum" : [ "default", "rules" ]
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
"required" : [ "kind" ],
|
|
104
|
+
"x-constraints" : [ {
|
|
105
|
+
"if" : "properties.kind.const='rules'",
|
|
106
|
+
"then" : "required=['autoJudges']",
|
|
107
|
+
"description" : "rules kind requires non-empty autoJudges"
|
|
108
|
+
} ],
|
|
109
|
+
"x-condition-constraints" : [ "autoJudges follows OR-of-AND grouping", "judgeType and fieldType must be semantically compatible" ]
|
|
110
|
+
},
|
|
111
|
+
"WorkflowEdgeDTO" : {
|
|
112
|
+
"type" : "object",
|
|
113
|
+
"description" : "工作流边(edge):from/to 引用 nodes[].id。 分支出边见 分支出边:from 须为 type=gateway 且 attrs.mode=parallel 的节点 id;to 为该分支首节点。条件选路(P03a)用 condition.kind=rules;兜底或并行(P03b)用 default 或省略 condition;写向合成的 judge 路径终点均设置 being_branch_end=true。 省略 condition=无条件线性边。",
|
|
114
|
+
"properties" : {
|
|
115
|
+
"condition" : {
|
|
116
|
+
"$ref" : "#/$defs/EdgeConditionDTO",
|
|
117
|
+
"description" : "边条件(condition);省略=无条件边。kind/rules/default 语义见 EdgeConditionDTO"
|
|
762
118
|
},
|
|
763
|
-
"
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
"mailConfig": {
|
|
768
|
-
"$ref": "#/$defs/QRobotMailConfigDTO",
|
|
769
|
-
"description": "邮件配置(mailConfig):发件人、主题、正文与附件"
|
|
770
|
-
},
|
|
771
|
-
"mailReceivers": {
|
|
772
|
-
"type": "array",
|
|
773
|
-
"minItems": 1,
|
|
774
|
-
"items": {
|
|
775
|
-
"$ref": "#/$defs/MemberRefDTO"
|
|
776
|
-
},
|
|
777
|
-
"description": "邮件收件人(mailReceivers):用户/部门/角色/字段,至少一人"
|
|
778
|
-
}
|
|
779
|
-
},
|
|
780
|
-
"required": [
|
|
781
|
-
"mailConfig",
|
|
782
|
-
"mailReceivers"
|
|
783
|
-
]
|
|
784
|
-
},
|
|
785
|
-
"WebhookExtractorDTO": {
|
|
786
|
-
"type": "object",
|
|
787
|
-
"description": "Webhook 入站解析提取器:按 type 填写 path/pattern/value 等",
|
|
788
|
-
"properties": {
|
|
789
|
-
"type": {
|
|
790
|
-
"type": "string",
|
|
791
|
-
"description": "提取类型(type):literal=固定 value;jsonpath/xpath=用 path 从 body 提取;regex=用 pattern+group 从文本提取",
|
|
792
|
-
"enum": [
|
|
793
|
-
"literal",
|
|
794
|
-
"jsonpath",
|
|
795
|
-
"xpath",
|
|
796
|
-
"regex"
|
|
797
|
-
]
|
|
798
|
-
},
|
|
799
|
-
"path": {
|
|
800
|
-
"type": "string",
|
|
801
|
-
"description": "JSONPath/XPath 路径(path),type=jsonpath 或 xpath 时必填"
|
|
802
|
-
},
|
|
803
|
-
"pattern": {
|
|
804
|
-
"type": "string",
|
|
805
|
-
"description": "正则表达式(pattern),type=regex 时必填"
|
|
806
|
-
},
|
|
807
|
-
"group": {
|
|
808
|
-
"type": "integer",
|
|
809
|
-
"description": "正则捕获组索引(group),type=regex 时使用,默认 0"
|
|
810
|
-
},
|
|
811
|
-
"value": {
|
|
812
|
-
"type": "string",
|
|
813
|
-
"description": "字面量(value),type=literal 时必填"
|
|
814
|
-
},
|
|
815
|
-
"allowWholeBody": {
|
|
816
|
-
"type": "boolean",
|
|
817
|
-
"description": "是否允许整包 body 提取(allowWholeBody)"
|
|
818
|
-
}
|
|
819
|
-
},
|
|
820
|
-
"required": [
|
|
821
|
-
"type"
|
|
822
|
-
]
|
|
823
|
-
},
|
|
824
|
-
"WebhookParseRuleDTO": {
|
|
825
|
-
"type": "object",
|
|
826
|
-
"description": "Webhook 响应解析规则:将 HTTP 响应映射到当前应用字段",
|
|
827
|
-
"properties": {
|
|
828
|
-
"targetFieldId": {
|
|
829
|
-
"type": "integer",
|
|
830
|
-
"description": "目标字段 id(targetFieldId):当前应用字段 queId"
|
|
831
|
-
},
|
|
832
|
-
"valueShape": {
|
|
833
|
-
"type": "string",
|
|
834
|
-
"description": "值形态(valueShape):scalar 或 table 子行"
|
|
835
|
-
},
|
|
836
|
-
"extractor": {
|
|
837
|
-
"$ref": "#/$defs/WebhookExtractorDTO",
|
|
838
|
-
"description": "提取器(extractor):jsonpath/xpath/regex/literal"
|
|
839
|
-
},
|
|
840
|
-
"tableRules": {
|
|
841
|
-
"type": "array",
|
|
842
|
-
"items": {
|
|
843
|
-
"$ref": "#/$defs/WebhookParseRuleDTO"
|
|
844
|
-
},
|
|
845
|
-
"description": "子表字段解析规则(tableRules)"
|
|
846
|
-
}
|
|
847
|
-
},
|
|
848
|
-
"required": [
|
|
849
|
-
"targetFieldId",
|
|
850
|
-
"extractor"
|
|
851
|
-
]
|
|
852
|
-
},
|
|
853
|
-
"RemoteHttpRequestConfigDTO": {
|
|
854
|
-
"type": "object",
|
|
855
|
-
"description": "远程 HTTP 请求配置(remoteRequestConfig):Q-Robot http_request 子类型使用",
|
|
856
|
-
"properties": {
|
|
857
|
-
"url": {
|
|
858
|
-
"type": "string",
|
|
859
|
-
"description": "请求 URL(url)"
|
|
860
|
-
},
|
|
861
|
-
"method": {
|
|
862
|
-
"type": "string",
|
|
863
|
-
"description": "HTTP 方法(method),如 GET/POST"
|
|
864
|
-
},
|
|
865
|
-
"triggerType": {
|
|
866
|
-
"type": "integer",
|
|
867
|
-
"description": "触发模式(triggerType):1=默认(发送整单 ApplyDetailInfo);2=自定义(使用 jsonValue/xmlValue 模板)。有 jsonValue/xmlValue 且未显式传值时 Apply 推断为 2",
|
|
868
|
-
"enum": [
|
|
869
|
-
"1",
|
|
870
|
-
"2"
|
|
871
|
-
]
|
|
872
|
-
},
|
|
873
|
-
"bodyType": {
|
|
874
|
-
"type": "integer",
|
|
875
|
-
"description": "请求体格式(bodyType):决定使用 jsonValue 还是 xmlValue"
|
|
876
|
-
},
|
|
877
|
-
"jsonValue": {
|
|
878
|
-
"type": "string",
|
|
879
|
-
"description": "JSON 请求体模板(jsonValue):合法 JSON 字符串;bodyType 为 JSON 时使用。可静态如 {\"event\":\"customer.approved\"},也可含字段占位符",
|
|
880
|
-
"comment": "示例:\"{\\\"event\\\":\\\"customer.approved\\\"}\""
|
|
881
|
-
},
|
|
882
|
-
"xmlValue": {
|
|
883
|
-
"type": "string",
|
|
884
|
-
"description": "XML 请求体模板(xmlValue):bodyType 为 XML 时使用"
|
|
885
|
-
},
|
|
886
|
-
"resultType": {
|
|
887
|
-
"type": "integer",
|
|
888
|
-
"description": "期望响应类型(resultType)"
|
|
889
|
-
},
|
|
890
|
-
"updateStatus": {
|
|
891
|
-
"type": "boolean",
|
|
892
|
-
"description": "是否用响应更新表单字段(updateStatus)"
|
|
893
|
-
},
|
|
894
|
-
"globalWebhookConfigId": {
|
|
895
|
-
"type": "integer",
|
|
896
|
-
"description": "引用的全局 Webhook 配置 id(globalWebhookConfigId)"
|
|
897
|
-
},
|
|
898
|
-
"globalAuthId": {
|
|
899
|
-
"type": "integer",
|
|
900
|
-
"description": "引用的全局鉴权 id(globalAuthId)"
|
|
901
|
-
},
|
|
902
|
-
"configMode": {
|
|
903
|
-
"type": "integer",
|
|
904
|
-
"description": "配置模式(configMode)"
|
|
905
|
-
},
|
|
906
|
-
"wingsAgentId": {
|
|
907
|
-
"type": "integer",
|
|
908
|
-
"description": "Wings Agent id(wingsAgentId)"
|
|
909
|
-
},
|
|
910
|
-
"wingsSkillId": {
|
|
911
|
-
"type": "integer",
|
|
912
|
-
"description": "Wings Skill id(wingsSkillId)"
|
|
913
|
-
},
|
|
914
|
-
"beingInsertValueDirectly": {
|
|
915
|
-
"type": "boolean",
|
|
916
|
-
"description": "是否直接将原始响应写入字段(beingInsertValueDirectly)"
|
|
917
|
-
},
|
|
918
|
-
"parseRules": {
|
|
919
|
-
"type": "array",
|
|
920
|
-
"items": {
|
|
921
|
-
"$ref": "#/$defs/WebhookParseRuleDTO"
|
|
922
|
-
},
|
|
923
|
-
"description": "响应解析规则(parseRules):updateStatus=true 时写入 draft_webhook_parse"
|
|
924
|
-
}
|
|
925
|
-
},
|
|
926
|
-
"required": [
|
|
927
|
-
"url"
|
|
928
|
-
]
|
|
929
|
-
},
|
|
930
|
-
"AutomationHttpRequestAttrsDTO": {
|
|
931
|
-
"type": "object",
|
|
932
|
-
"description": "Q-Robot 远程请求(subType=http_request):调用外部 HTTP 接口",
|
|
933
|
-
"properties": {
|
|
934
|
-
"remoteRequestConfig": {
|
|
935
|
-
"$ref": "#/$defs/RemoteHttpRequestConfigDTO",
|
|
936
|
-
"description": "远程请求配置(remoteRequestConfig):URL、方法、参数与响应解析"
|
|
937
|
-
}
|
|
938
|
-
},
|
|
939
|
-
"required": [
|
|
940
|
-
"remoteRequestConfig"
|
|
941
|
-
]
|
|
942
|
-
},
|
|
943
|
-
"FieldPermissionDTO": {
|
|
944
|
-
"type": "object",
|
|
945
|
-
"description": "字段权限项(FieldPermissionDTO):绑定 fieldId(queId) 与 fieldAuth。设计器三种状态:可编辑(edit)、隐藏(hide)、仅可见(readonly)。",
|
|
946
|
-
"properties": {
|
|
947
|
-
"fieldId": {
|
|
948
|
-
"type": "integer",
|
|
949
|
-
"description": "表单字段 id(fieldId/queId),须为当前应用 questionIndex 中存在的字段;与 qingflow CLI fields 的 que_id 一致。"
|
|
950
|
-
},
|
|
951
|
-
"fieldAuth": {
|
|
952
|
-
"type": "string",
|
|
953
|
-
"description": "字段权限级别(fieldAuth)。edit=可编辑(设计器可编辑,queAuth=1);hide=隐藏(queAuth=2);readonly=仅可见(queAuth=3,填写/审批节点缺省值)。",
|
|
954
|
-
"comment": "edit | hide | readonly",
|
|
955
|
-
"enum": [
|
|
956
|
-
"edit",
|
|
957
|
-
"hide",
|
|
958
|
-
"readonly"
|
|
959
|
-
]
|
|
960
|
-
},
|
|
961
|
-
"addRow": {
|
|
962
|
-
"type": "boolean",
|
|
963
|
-
"description": "表格字段:是否允许新增行(addRow),非表格字段忽略"
|
|
964
|
-
},
|
|
965
|
-
"deleteRow": {
|
|
966
|
-
"type": "boolean",
|
|
967
|
-
"description": "表格字段:是否允许删除行(deleteRow),非表格字段忽略"
|
|
968
|
-
},
|
|
969
|
-
"editRow": {
|
|
970
|
-
"type": "boolean",
|
|
971
|
-
"description": "表格字段:是否允许编辑行(editRow),非表格字段忽略"
|
|
972
|
-
},
|
|
973
|
-
"beingFold": {
|
|
974
|
-
"type": "boolean",
|
|
975
|
-
"description": "是否在节点表单中折叠显示该字段(beingFold)"
|
|
976
|
-
}
|
|
977
|
-
},
|
|
978
|
-
"required": [
|
|
979
|
-
"fieldId",
|
|
980
|
-
"fieldAuth"
|
|
981
|
-
],
|
|
982
|
-
"x-constraints": [
|
|
983
|
-
{
|
|
984
|
-
"description": "缺省补齐(Spec→Legacy):可只写需特殊处理的字段;Apply 时按应用字段全集(questionIndex)展开。applicant 未列出→edit;filling/approval/cc 未列出→readonly(仅可见)。已显式列出的 fieldId(含 hide)不被覆盖。表格字段可配 addRow/deleteRow/editRow。"
|
|
985
|
-
}
|
|
986
|
-
]
|
|
987
|
-
},
|
|
988
|
-
"CCAttrsDTO": {
|
|
989
|
-
"type": "object",
|
|
990
|
-
"description": "【WHAT】抄送节点(cc):通知成员查看流程与数据,通常不阻塞主路径、不产生必须处理的审批待办。【WHY】让相关人知情(财务抄送、管理层知会);可限制可见字段与是否查看审批记录。【HOW】配置 receivers、auditRecordVisible、fieldPermissions;未列出字段默认 readonly。",
|
|
991
|
-
"properties": {
|
|
992
|
-
"receivers": {
|
|
993
|
-
"type": "array",
|
|
994
|
-
"minItems": 1,
|
|
995
|
-
"items": {
|
|
996
|
-
"$ref": "#/$defs/MemberRefDTO"
|
|
997
|
-
},
|
|
998
|
-
"description": "抄送对象(receivers):用户/部门/角色,至少一人"
|
|
999
|
-
},
|
|
1000
|
-
"auditRecordVisible": {
|
|
1001
|
-
"type": "boolean",
|
|
1002
|
-
"description": "抄送人是否可查看审批记录(auditRecordVisible)"
|
|
1003
|
-
},
|
|
1004
|
-
"fieldPermissions": {
|
|
1005
|
-
"type": "array",
|
|
1006
|
-
"items": {
|
|
1007
|
-
"$ref": "#/$defs/FieldPermissionDTO"
|
|
1008
|
-
},
|
|
1009
|
-
"description": "字段权限(fieldPermissions)【抄送节点】 WHAT:抄送人查看流程数据时可见哪些字段。 WHY:知会场景通常只读,避免泄露或误改敏感字段。 HOW:未列出字段默认 readonly;隐藏用 hide。 缺省补齐(Spec→Legacy):可只写需特殊处理的字段;Apply 时按应用字段全集(questionIndex)展开。applicant 未列出→edit;filling/approval/cc 未列出→readonly(仅可见)。已显式列出的 fieldId(含 hide)不被覆盖。表格字段可配 addRow/deleteRow/editRow。"
|
|
1010
|
-
}
|
|
1011
|
-
},
|
|
1012
|
-
"required": [
|
|
1013
|
-
"receivers"
|
|
1014
|
-
]
|
|
1015
|
-
},
|
|
1016
|
-
"AutomationAIOutputFieldDTO": {
|
|
1017
|
-
"type": "object",
|
|
1018
|
-
"description": "AI output field mapping",
|
|
1019
|
-
"properties": {
|
|
1020
|
-
"fieldId": {
|
|
1021
|
-
"type": "integer",
|
|
1022
|
-
"description": "Output field id"
|
|
1023
|
-
},
|
|
1024
|
-
"fieldDesc": {
|
|
1025
|
-
"type": "string",
|
|
1026
|
-
"description": "Output field description"
|
|
1027
|
-
}
|
|
1028
|
-
},
|
|
1029
|
-
"required": [
|
|
1030
|
-
"fieldId"
|
|
1031
|
-
]
|
|
1032
|
-
},
|
|
1033
|
-
"AutomationAIConfigDTO": {
|
|
1034
|
-
"type": "object",
|
|
1035
|
-
"description": "AI 配置(aiConfig) 按 subType 必填字段(Legacy aiNodeSettingCheck 对齐):A) ai_text_summary|ai_content_extraction|ai_content_classification|ai_image_recognition|ai_document_parsing → inputFieldIds + outputFields;B) ai_content_generation|ai_image_generation → promptWords + outputFields;C) ai_machine_translation → inputFieldIds + outputFields + language。 inputFieldIds/outputFields.fieldId 须为当前流程(源应用) questionIndex 中的 queId。",
|
|
1036
|
-
"properties": {
|
|
1037
|
-
"example": {
|
|
1038
|
-
"type": "string",
|
|
1039
|
-
"description": "参考示例(example),可选,辅助模型理解场景"
|
|
1040
|
-
},
|
|
1041
|
-
"promptWords": {
|
|
1042
|
-
"type": "string",
|
|
1043
|
-
"description": "提示词(promptWords)。B 组 subType(ai_content_generation|ai_image_generation)必填;描述 AI 要完成的任务"
|
|
1044
|
-
},
|
|
1045
|
-
"language": {
|
|
1046
|
-
"type": "string",
|
|
1047
|
-
"description": "目标语言(language)。C 组 subType(ai_machine_translation)必填;如 en、ja、zh-CN"
|
|
1048
|
-
},
|
|
1049
|
-
"inputFieldIds": {
|
|
1050
|
-
"type": "array",
|
|
1051
|
-
"minItems": 1,
|
|
1052
|
-
"items": {
|
|
1053
|
-
"type": "integer"
|
|
1054
|
-
},
|
|
1055
|
-
"description": "输入字段 id 列表(inputFieldIds)。A/C 组 subType 必填;须为当前流程(源应用)表单字段 queId",
|
|
1056
|
-
"comment": "示例:[343283769,343283777]"
|
|
1057
|
-
},
|
|
1058
|
-
"outputFields": {
|
|
1059
|
-
"type": "array",
|
|
1060
|
-
"minItems": 1,
|
|
1061
|
-
"items": {
|
|
1062
|
-
"$ref": "#/$defs/AutomationAIOutputFieldDTO"
|
|
1063
|
-
},
|
|
1064
|
-
"description": "输出字段映射(outputFields):AI 结果写入哪些字段;所有 AI subType 必填",
|
|
1065
|
-
"comment": "示例:[{\"fieldId\":343283775,\"fieldDesc\":\"摘要\"}]"
|
|
1066
|
-
},
|
|
1067
|
-
"customButtonText": {
|
|
1068
|
-
"type": "string",
|
|
1069
|
-
"description": "自定义按钮文案(customButtonText),仅 spec 快照,不落 legacy 表"
|
|
1070
|
-
},
|
|
1071
|
-
"customButtonEnabled": {
|
|
1072
|
-
"type": "boolean",
|
|
1073
|
-
"description": "是否启用自定义按钮(customButtonEnabled),仅 spec 快照,不落 legacy 表"
|
|
1074
|
-
}
|
|
1075
|
-
},
|
|
1076
|
-
"required": [
|
|
1077
|
-
"inputFieldIds",
|
|
1078
|
-
"outputFields"
|
|
1079
|
-
]
|
|
1080
|
-
},
|
|
1081
|
-
"AutomationAIAttrsDTO": {
|
|
1082
|
-
"type": "object",
|
|
1083
|
-
"description": "【WHAT】Q-Robot AI 节点(automation + ai_* subType):流程到达后调用 AI 能力处理表单字段并写回结果,无人工待办。【WHY】文本总结、内容生成/提取/分类、图像识别/生成、文档解析、机器翻译等自动化智能处理。【HOW】type=automation,attrs.subType 选具体 AI 能力(见 AUTOMATION_AI_CONFIG);attrs.aiConfig 配置 inputFieldIds/outputFields/promptWords/language;subType 与 legacy dealType 11~18 一一对应;`ai` 等价于 `ai_text_summary`。【NOT】禁止 fieldPermissions;customButtonText 仅 preservedAttrsJson 快照,不落 legacy 表。",
|
|
1084
|
-
"properties": {
|
|
1085
|
-
"aiConfig": {
|
|
1086
|
-
"$ref": "#/$defs/AutomationAIConfigDTO",
|
|
1087
|
-
"description": "AI 配置(aiConfig) 按 subType 必填字段(Legacy aiNodeSettingCheck 对齐):A) ai_text_summary|ai_content_extraction|ai_content_classification|ai_image_recognition|ai_document_parsing → inputFieldIds + outputFields;B) ai_content_generation|ai_image_generation → promptWords + outputFields;C) ai_machine_translation → inputFieldIds + outputFields + language。 inputFieldIds/outputFields.fieldId 须为当前流程(源应用) questionIndex 中的 queId。"
|
|
1088
|
-
}
|
|
1089
|
-
},
|
|
1090
|
-
"required": [
|
|
1091
|
-
"aiConfig"
|
|
1092
|
-
],
|
|
1093
|
-
"x-constraints": [
|
|
1094
|
-
{
|
|
1095
|
-
"if": "properties.subType.const='ai_machine_translation'",
|
|
1096
|
-
"then": "properties.aiConfig.required=['inputFieldIds','outputFields','language']",
|
|
1097
|
-
"description": "机器翻译须配置源字段、输出字段与目标 language"
|
|
1098
|
-
}
|
|
1099
|
-
]
|
|
1100
|
-
},
|
|
1101
|
-
"FillingAttrsDTO": {
|
|
1102
|
-
"type": "object",
|
|
1103
|
-
"description": "【WHAT】填写节点(filling):指派处理人补充或修改表单中的少量字段,完成后流转下游;会产生待办(任务中心)。【WHY】当信息需由非申请人(销售助理、主管、财务等)补录时使用;区别于审批节点不做通过/驳回决策。【HOW】配置 responsible(至少一人)、auditFeedback、timeoutConfig、fieldPermissions;典型场景:补全客户资料、上传附件、核对金额;fieldPermissions 须显式列出需 edit 的 fieldId,否则未列出字段在 Apply 后均为 readonly(设计器「仅可见」)。",
|
|
1104
|
-
"properties": {
|
|
1105
|
-
"responsible": {
|
|
1106
|
-
"type": "array",
|
|
1107
|
-
"minItems": 1,
|
|
1108
|
-
"items": {
|
|
1109
|
-
"$ref": "#/$defs/MemberRefDTO"
|
|
1110
|
-
},
|
|
1111
|
-
"description": "填写处理人(responsible):用户/部门/角色引用,至少一人"
|
|
1112
|
-
},
|
|
1113
|
-
"auditFeedback": {
|
|
1114
|
-
"type": "boolean",
|
|
1115
|
-
"description": "是否开启处理反馈(auditFeedback)"
|
|
1116
|
-
},
|
|
1117
|
-
"timeoutConfig": {
|
|
1118
|
-
"$ref": "#/$defs/TimeoutConfigDTO",
|
|
1119
|
-
"description": "超时策略(timeoutConfig):超时提醒、自动处理等"
|
|
1120
|
-
},
|
|
1121
|
-
"fieldPermissions": {
|
|
1122
|
-
"type": "array",
|
|
1123
|
-
"items": {
|
|
1124
|
-
"$ref": "#/$defs/FieldPermissionDTO"
|
|
1125
|
-
},
|
|
1126
|
-
"description": "字段权限(fieldPermissions)【填写节点】 WHAT:控制填写人打开待办时能改哪些字段;其余字段仅可见或隐藏。 WHY:填写节点通常只补少量字段,默认其余只读以防误改。 HOW:须为每个需要可编辑的 fieldId 写 fieldAuth=edit;只写 1~2 项会导致其余全部仅可见。 缺省补齐(Spec→Legacy):可只写需特殊处理的字段;Apply 时按应用字段全集(questionIndex)展开。applicant 未列出→edit;filling/approval/cc 未列出→readonly(仅可见)。已显式列出的 fieldId(含 hide)不被覆盖。表格字段可配 addRow/deleteRow/editRow。 示例:[{fieldId:343283775,fieldAuth:\"edit\"},{fieldId:343283769,fieldAuth:\"edit\"}]",
|
|
1127
|
-
"comment": "[{\"fieldId\":343283775,\"fieldAuth\":\"edit\"},{\"fieldId\":343283769,\"fieldAuth\":\"edit\"}]"
|
|
1128
|
-
}
|
|
1129
|
-
},
|
|
1130
|
-
"required": [
|
|
1131
|
-
"responsible"
|
|
1132
|
-
],
|
|
1133
|
-
"x-capability-boundaries": [
|
|
1134
|
-
{
|
|
1135
|
-
"capability": "human_task_filling",
|
|
1136
|
-
"description": "Assignee supplements few form fields; creates task-center todo",
|
|
1137
|
-
"level": "core",
|
|
1138
|
-
"constraints": [
|
|
1139
|
-
"requires responsible (>=1)",
|
|
1140
|
-
"fieldPermissions: omitted fields default readonly (visible only)",
|
|
1141
|
-
"explicit edit required per fieldId that must be editable"
|
|
1142
|
-
]
|
|
1143
|
-
}
|
|
1144
|
-
]
|
|
1145
|
-
},
|
|
1146
|
-
"WebhookParamDTO": {
|
|
1147
|
-
"type": "object",
|
|
1148
|
-
"properties": {}
|
|
1149
|
-
},
|
|
1150
|
-
"WebhookEndpointDTO": {
|
|
1151
|
-
"type": "object",
|
|
1152
|
-
"properties": {}
|
|
1153
|
-
},
|
|
1154
|
-
"WebhookRequestDTO": {
|
|
1155
|
-
"type": "object",
|
|
1156
|
-
"properties": {}
|
|
1157
|
-
},
|
|
1158
|
-
"WebhookUpdatePolicyDTO": {
|
|
1159
|
-
"type": "object",
|
|
1160
|
-
"description": "Webhook update policy",
|
|
1161
|
-
"properties": {
|
|
1162
|
-
"enabled": {
|
|
1163
|
-
"type": "boolean",
|
|
1164
|
-
"description": "Enable update policy"
|
|
1165
|
-
},
|
|
1166
|
-
"strategy": {
|
|
1167
|
-
"type": "string",
|
|
1168
|
-
"description": "Update strategy",
|
|
1169
|
-
"enum": [
|
|
1170
|
-
"insertOnly",
|
|
1171
|
-
"updateOnly",
|
|
1172
|
-
"upsert"
|
|
1173
|
-
]
|
|
1174
|
-
},
|
|
1175
|
-
"maxUpdateRows": {
|
|
1176
|
-
"type": "integer",
|
|
1177
|
-
"description": "Maximum rows to update"
|
|
1178
|
-
},
|
|
1179
|
-
"matchGroups": {
|
|
1180
|
-
"type": "array",
|
|
1181
|
-
"items": {
|
|
1182
|
-
"type": "array",
|
|
1183
|
-
"items": {
|
|
1184
|
-
"type": "object"
|
|
1185
|
-
}
|
|
1186
|
-
},
|
|
1187
|
-
"description": "OR-of-AND matcher groups"
|
|
1188
|
-
}
|
|
1189
|
-
},
|
|
1190
|
-
"required": [
|
|
1191
|
-
"enabled"
|
|
1192
|
-
]
|
|
1193
|
-
},
|
|
1194
|
-
"WebhookResponseDTO": {
|
|
1195
|
-
"type": "object",
|
|
1196
|
-
"properties": {}
|
|
1197
|
-
},
|
|
1198
|
-
"ApplicantWebhookConfigDTO": {
|
|
1199
|
-
"type": "object",
|
|
1200
|
-
"description": "Applicant webhook config",
|
|
1201
|
-
"properties": {
|
|
1202
|
-
"id": {
|
|
1203
|
-
"type": "integer",
|
|
1204
|
-
"description": "Webhook config id"
|
|
1205
|
-
},
|
|
1206
|
-
"name": {
|
|
1207
|
-
"type": "string",
|
|
1208
|
-
"description": "Webhook config name",
|
|
1209
|
-
"minLength": 1
|
|
1210
|
-
},
|
|
1211
|
-
"enabled": {
|
|
1212
|
-
"type": "boolean",
|
|
1213
|
-
"description": "Whether webhook is enabled"
|
|
1214
|
-
},
|
|
1215
|
-
"authToken": {
|
|
1216
|
-
"type": "string",
|
|
1217
|
-
"description": "Auth token"
|
|
1218
|
-
},
|
|
1219
|
-
"endpoint": {
|
|
1220
|
-
"$ref": "#/$defs/WebhookEndpointDTO",
|
|
1221
|
-
"description": "Webhook endpoint"
|
|
1222
|
-
},
|
|
1223
|
-
"request": {
|
|
1224
|
-
"$ref": "#/$defs/WebhookRequestDTO",
|
|
1225
|
-
"description": "Request payload metadata"
|
|
1226
|
-
},
|
|
1227
|
-
"parseRules": {
|
|
1228
|
-
"type": "array",
|
|
1229
|
-
"minItems": 1,
|
|
1230
|
-
"items": {
|
|
1231
|
-
"$ref": "#/$defs/WebhookParseRuleDTO"
|
|
1232
|
-
},
|
|
1233
|
-
"description": "Parse rules"
|
|
1234
|
-
},
|
|
1235
|
-
"updatePolicy": {
|
|
1236
|
-
"$ref": "#/$defs/WebhookUpdatePolicyDTO",
|
|
1237
|
-
"description": "Update policy"
|
|
1238
|
-
},
|
|
1239
|
-
"response": {
|
|
1240
|
-
"$ref": "#/$defs/WebhookResponseDTO",
|
|
1241
|
-
"description": "Custom response config"
|
|
1242
|
-
}
|
|
1243
|
-
},
|
|
1244
|
-
"required": [
|
|
1245
|
-
"name",
|
|
1246
|
-
"endpoint",
|
|
1247
|
-
"parseRules",
|
|
1248
|
-
"updatePolicy"
|
|
1249
|
-
]
|
|
1250
|
-
},
|
|
1251
|
-
"ApplicantAttrsDTO": {
|
|
1252
|
-
"type": "object",
|
|
1253
|
-
"description": "【WHAT】申请人节点(applicant):工作流唯一入口,流程图起点;申请人填写表单并提交后进入下游。【WHY】承载「谁发起、填哪些字段、如何提交」;对应 legacy dealType=申请、产生首条流程实例。【HOW】每个工作流必须有且仅有一个 applicant;配置 submitText/commentStatus/fieldPermissions/webhook;fieldPermissions 控制发起人可见/可编辑字段;未列出字段 Apply 时默认 edit。",
|
|
1254
|
-
"properties": {
|
|
1255
|
-
"commentStatus": {
|
|
1256
|
-
"type": "boolean",
|
|
1257
|
-
"description": "是否允许发起人填写备注(commentStatus)"
|
|
1258
|
-
},
|
|
1259
|
-
"submitText": {
|
|
1260
|
-
"type": "string",
|
|
1261
|
-
"description": "自定义提交按钮文案(submitText)"
|
|
1262
|
-
},
|
|
1263
|
-
"fieldPermissions": {
|
|
1264
|
-
"type": "array",
|
|
1265
|
-
"items": {
|
|
1266
|
-
"$ref": "#/$defs/FieldPermissionDTO"
|
|
1267
|
-
},
|
|
1268
|
-
"description": "字段权限(fieldPermissions)【申请人节点】 WHAT:控制发起人在提交前对各字段的可编辑/仅可见/隐藏。 WHY:限制申请人只能改业务字段、系统字段只读或隐藏。 HOW:列出例外项;未列出的应用字段 Apply 时自动补齐为 edit。 缺省补齐(Spec→Legacy):可只写需特殊处理的字段;Apply 时按应用字段全集(questionIndex)展开。applicant 未列出→edit;filling/approval/cc 未列出→readonly(仅可见)。已显式列出的 fieldId(含 hide)不被覆盖。表格字段可配 addRow/deleteRow/editRow。",
|
|
1269
|
-
"comment": "[{\"fieldId\":343283769,\"fieldAuth\":\"edit\"},{\"fieldId\":343283777,\"fieldAuth\":\"readonly\"}]"
|
|
1270
|
-
},
|
|
1271
|
-
"webhook": {
|
|
1272
|
-
"$ref": "#/$defs/ApplicantWebhookConfigDTO",
|
|
1273
|
-
"description": "入站 Webhook(webhook):外部系统触发发起时的解析与更新策略"
|
|
1274
|
-
}
|
|
1275
|
-
},
|
|
1276
|
-
"x-capability-boundaries": [
|
|
1277
|
-
{
|
|
1278
|
-
"capability": "human_task_applicant",
|
|
1279
|
-
"description": "Workflow start node; exactly one per spec",
|
|
1280
|
-
"level": "core",
|
|
1281
|
-
"constraints": [
|
|
1282
|
-
"required in every workflow",
|
|
1283
|
-
"supports fieldPermissions with default-expand edit",
|
|
1284
|
-
"produces apply/submit, not approval todo"
|
|
1285
|
-
]
|
|
1286
|
-
}
|
|
1287
|
-
]
|
|
1288
|
-
},
|
|
1289
|
-
"AutomationAddAttrsDTO": {
|
|
1290
|
-
"type": "object",
|
|
1291
|
-
"description": "Q-Robot 新增(subType=add):向目标 appKey 插入数据。【Q-Robot 三层筛选】① tableFilterRules=编辑器「表格筛选条件」,筛源应用(当前流程)子表行,legacy tableFilterCondition;② targetFilterRules=编辑器「更新哪些数据」,筛目标应用(appKey)主记录/目标子表行,legacy qrobotQueFilterFormula/filterCondition;③ fieldMappings[].tableRowOperations=「表格更新规则」,写目标子表行内容。目标子表行定位写在 targetFilterRules,不要写在 tableFilterRules。",
|
|
1292
|
-
"properties": {
|
|
1293
|
-
"appKey": {
|
|
1294
|
-
"type": "string",
|
|
1295
|
-
"description": "目标应用 appKey,数据写入该应用",
|
|
1296
|
-
"minLength": 1,
|
|
1297
|
-
"x-resource-ref": {
|
|
1298
|
-
"resourceType": "application",
|
|
1299
|
-
"guidance": "Select an application to operate on"
|
|
1300
|
-
}
|
|
1301
|
-
},
|
|
1302
|
-
"fieldMappings": {
|
|
1303
|
-
"type": "array",
|
|
1304
|
-
"minItems": 1,
|
|
1305
|
-
"items": {
|
|
1306
|
-
"$ref": "#/$defs/QRobotRelationRuleDTO"
|
|
1307
|
-
},
|
|
1308
|
-
"description": "字段映射(fieldMappings):目标字段与来源值/字段引用的对应关系"
|
|
1309
|
-
},
|
|
1310
|
-
"tableFilterRules": {
|
|
1311
|
-
"type": "array",
|
|
1312
|
-
"items": {
|
|
1313
|
-
"$ref": "#/$defs/AutomationTableFilterRuleDTO"
|
|
1314
|
-
},
|
|
1315
|
-
"description": "源应用表格筛选(tableFilterRules):编辑器「表格筛选条件」。在映射写入目标应用前,限定当前流程(源应用)子表参与操作的行。tableFieldId 为源子表 fieldId;filterRules 内 fieldId 须为该源子表下的子字段,仅 matchType=literal。Legacy tableFilterCondition。与 targetFilterRules 无关。"
|
|
1316
|
-
}
|
|
1317
|
-
},
|
|
1318
|
-
"required": [
|
|
1319
|
-
"appKey",
|
|
1320
|
-
"fieldMappings"
|
|
1321
|
-
]
|
|
1322
|
-
},
|
|
1323
|
-
"AutomationSendSmsAttrsDTO": {
|
|
1324
|
-
"type": "object",
|
|
1325
|
-
"description": "Q-Robot 发短信(subType=send_sms):Legacy 占位节点,模板与收件人由设计器管理,Spec Apply 不可变更配置",
|
|
1326
|
-
"properties": {
|
|
1327
|
-
"managedByLegacy": {
|
|
1328
|
-
"type": "boolean",
|
|
1329
|
-
"description": "占位标记(managedByLegacy):true 表示短信配置由 legacy/设计器管理"
|
|
1330
|
-
},
|
|
1331
|
-
"smsTemplateKey": {
|
|
1332
|
-
"type": "string",
|
|
1333
|
-
"description": "短信模板 key(smsTemplateKey),Legacy→Spec GET 只读展示,Apply 不可变更",
|
|
1334
|
-
"minLength": 1,
|
|
1335
|
-
"x-resource-ref": {
|
|
1336
|
-
"resourceType": "smsTemplate",
|
|
1337
|
-
"guidance": "Select an SMS template"
|
|
1338
|
-
}
|
|
1339
|
-
},
|
|
1340
|
-
"smsTemplateName": {
|
|
1341
|
-
"type": "string",
|
|
1342
|
-
"description": "短信模板显示名(smsTemplateName),Legacy→Spec GET 只读展示"
|
|
1343
|
-
}
|
|
1344
|
-
},
|
|
1345
|
-
"required": [
|
|
1346
|
-
"managedByLegacy"
|
|
1347
|
-
]
|
|
1348
|
-
},
|
|
1349
|
-
"GradedAuditConfigDTO": {
|
|
1350
|
-
"type": "object",
|
|
1351
|
-
"description": "逐级审批配置(gradedAuditConfig):auditUserType=graded 时必填,含审批起点与终点规则",
|
|
1352
|
-
"properties": {
|
|
1353
|
-
"gradedType": {
|
|
1354
|
-
"type": "string",
|
|
1355
|
-
"description": "逐级类型(gradedType):dept=部门层级;report=汇报层级",
|
|
1356
|
-
"enum": [
|
|
1357
|
-
"dept",
|
|
1358
|
-
"report"
|
|
1359
|
-
]
|
|
1360
|
-
},
|
|
1361
|
-
"endType": {
|
|
1362
|
-
"type": "string",
|
|
1363
|
-
"description": "终点类型(endType):dynamicUp=连续多级主管向上;specifiedLevel=指定层级主管",
|
|
1364
|
-
"enum": [
|
|
1365
|
-
"dynamicUp",
|
|
1366
|
-
"specifiedLevel"
|
|
1367
|
-
]
|
|
1368
|
-
},
|
|
1369
|
-
"dynamicEndLevelNum": {
|
|
1370
|
-
"type": "integer",
|
|
1371
|
-
"description": "动态向上层级数(dynamicEndLevelNum),endType=dynamicUp 时使用"
|
|
1372
|
-
},
|
|
1373
|
-
"specifiedEndLevelNum": {
|
|
1374
|
-
"type": "integer",
|
|
1375
|
-
"description": "指定层级数(specifiedEndLevelNum),endType=specifiedLevel 时使用"
|
|
1376
|
-
},
|
|
1377
|
-
"gradedApproveType": {
|
|
1378
|
-
"type": "string",
|
|
1379
|
-
"description": "同层级多人时通过模式(gradedApproveType):and=须全部通过;or=一人通过即可",
|
|
1380
|
-
"enum": [
|
|
1381
|
-
"and",
|
|
1382
|
-
"or"
|
|
1383
|
-
]
|
|
1384
|
-
},
|
|
1385
|
-
"removeDup": {
|
|
1386
|
-
"type": "boolean",
|
|
1387
|
-
"description": "层级负责人去重(removeDup)"
|
|
1388
|
-
},
|
|
1389
|
-
"startResponsible": {
|
|
1390
|
-
"type": "array",
|
|
1391
|
-
"minItems": 1,
|
|
1392
|
-
"items": {
|
|
1393
|
-
"$ref": "#/$defs/MemberRefDTO"
|
|
1394
|
-
},
|
|
1395
|
-
"description": "审批起点(startResponsible):逐级审批从何处开始向上,语义同 MemberRef"
|
|
1396
|
-
}
|
|
1397
|
-
},
|
|
1398
|
-
"required": [
|
|
1399
|
-
"startResponsible"
|
|
1400
|
-
]
|
|
1401
|
-
},
|
|
1402
|
-
"AutomationAttrsDTO": {
|
|
1403
|
-
"type": "object",
|
|
1404
|
-
"description": "【WHAT】自动化节点(automation/Q-Robot):无人工待办,流程到达后后台自动执行动作(增删改他表、发邮件/短信、HTTP、AI 等)。【WHY】扩展审批流能力:同步 CRM、通知外部系统、按规则更新关联应用,减少人工重复操作。【HOW】type=automation,attrs.subType 决定 payload:add|update|ai|http_request|send_email|send_sms;禁止 fieldPermissions;配置目标 appKey、fieldMappings、filterRules 等子类型字段。",
|
|
1405
|
-
"properties": {
|
|
1406
|
-
"subType": {
|
|
1407
|
-
"type": "string",
|
|
1408
|
-
"description": "自动化子类型(subType):add|update|send_email|send_sms|http_request|ai|ai_text_summary|ai_content_generation|ai_machine_translation|ai_content_extraction|ai_content_classification|ai_image_recognition|ai_image_generation|ai_document_parsing;决定 payload 结构"
|
|
1409
|
-
}
|
|
1410
|
-
},
|
|
1411
|
-
"required": [
|
|
1412
|
-
"subType"
|
|
1413
|
-
],
|
|
1414
|
-
"oneOf": [
|
|
1415
|
-
{
|
|
1416
|
-
"$ref": "#/$defs/AutomationUpdateAttrsDTO"
|
|
1417
|
-
},
|
|
1418
|
-
{
|
|
1419
|
-
"$ref": "#/$defs/AutomationSendEmailAttrsDTO"
|
|
1420
|
-
},
|
|
1421
|
-
{
|
|
1422
|
-
"$ref": "#/$defs/AutomationHttpRequestAttrsDTO"
|
|
1423
|
-
},
|
|
1424
|
-
{
|
|
1425
|
-
"$ref": "#/$defs/AutomationAIAttrsDTO"
|
|
1426
|
-
},
|
|
1427
|
-
{
|
|
1428
|
-
"$ref": "#/$defs/AutomationAddAttrsDTO"
|
|
1429
|
-
},
|
|
1430
|
-
{
|
|
1431
|
-
"$ref": "#/$defs/AutomationSendSmsAttrsDTO"
|
|
1432
|
-
}
|
|
1433
|
-
],
|
|
1434
|
-
"discriminator": {
|
|
1435
|
-
"propertyName": "subType",
|
|
1436
|
-
"mapping": {
|
|
1437
|
-
"update": "#/$defs/AutomationUpdateAttrsDTO",
|
|
1438
|
-
"send_email": "#/$defs/AutomationSendEmailAttrsDTO",
|
|
1439
|
-
"http_request": "#/$defs/AutomationHttpRequestAttrsDTO",
|
|
1440
|
-
"ai": "#/$defs/AutomationAIAttrsDTO",
|
|
1441
|
-
"add": "#/$defs/AutomationAddAttrsDTO",
|
|
1442
|
-
"send_sms": "#/$defs/AutomationSendSmsAttrsDTO"
|
|
1443
|
-
}
|
|
1444
|
-
},
|
|
1445
|
-
"x-polymorphic-base": "com.qflow.backend.workflow.spec.dto.attrs.AutomationAttrsDTO",
|
|
1446
|
-
"x-capability-boundaries": [
|
|
1447
|
-
{
|
|
1448
|
-
"capability": "automation_qrobot",
|
|
1449
|
-
"description": "Background Q-Robot; no human todo",
|
|
1450
|
-
"level": "core",
|
|
1451
|
-
"constraints": [
|
|
1452
|
-
"no fieldPermissions",
|
|
1453
|
-
"subType selects payload: add|update|ai|http_request|send_email|send_sms"
|
|
1454
|
-
]
|
|
1455
|
-
}
|
|
1456
|
-
]
|
|
1457
|
-
},
|
|
1458
|
-
"CountersignConfigDTO": {
|
|
1459
|
-
"type": "object",
|
|
1460
|
-
"properties": {
|
|
1461
|
-
"enabled": {
|
|
1462
|
-
"type": "boolean",
|
|
1463
|
-
"description": "是否开启加签(enabled):节点负责人可加签其他成员共同审批"
|
|
1464
|
-
},
|
|
1465
|
-
"scope": {
|
|
1466
|
-
"type": "string",
|
|
1467
|
-
"description": "加签人员范围(scope):workspaceMember=工作区可见成员;assignMember=指定成员(成员列表暂未纳入 Spec)",
|
|
1468
|
-
"enum": [
|
|
1469
|
-
"workspaceMember",
|
|
1470
|
-
"assignMember"
|
|
1471
|
-
]
|
|
1472
|
-
}
|
|
1473
|
-
}
|
|
119
|
+
"from" : {
|
|
120
|
+
"type" : "string",
|
|
121
|
+
"description" : "源节点 id(from)。parallel fork 时为本 gateway.id;线性边为上游业务节点 id",
|
|
122
|
+
"minLength" : 1
|
|
1474
123
|
},
|
|
1475
|
-
"
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
"enabled": {
|
|
1479
|
-
"type": "boolean",
|
|
1480
|
-
"description": "是否允许结束流程(enabled):负责人可手动结束流程,状态变为已结束"
|
|
1481
|
-
},
|
|
1482
|
-
"buttonText": {
|
|
1483
|
-
"type": "string",
|
|
1484
|
-
"description": "结束流程按钮文案(buttonText)"
|
|
1485
|
-
}
|
|
1486
|
-
}
|
|
124
|
+
"label" : {
|
|
125
|
+
"type" : "string",
|
|
126
|
+
"description" : "边展示标签(label)"
|
|
1487
127
|
},
|
|
1488
|
-
"
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
"eSign": {
|
|
1492
|
-
"type": "boolean",
|
|
1493
|
-
"description": "是否启用电子签章(eSign)"
|
|
1494
|
-
},
|
|
1495
|
-
"handSign": {
|
|
1496
|
-
"type": "boolean",
|
|
1497
|
-
"description": "是否启用手写签名(handSign)"
|
|
1498
|
-
}
|
|
1499
|
-
}
|
|
128
|
+
"priority" : {
|
|
129
|
+
"type" : "integer",
|
|
130
|
+
"description" : "优先级(priority),多条规则边同时命中时数值小者优先"
|
|
1500
131
|
},
|
|
1501
|
-
"
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
132
|
+
"to" : {
|
|
133
|
+
"type" : "string",
|
|
134
|
+
"description" : "目标节点 id(to)。须存在于 nodes[].id,且不得形成环(DAG)",
|
|
135
|
+
"minLength" : 1
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"required" : [ "from", "to" ]
|
|
139
|
+
},
|
|
140
|
+
"WorkflowEdgesDTO" : {
|
|
141
|
+
"type" : "object",
|
|
142
|
+
"description" : "边容器(edges):主字段 edges 为 WorkflowEdgeDTO 列表",
|
|
143
|
+
"properties" : {
|
|
144
|
+
"edges" : {
|
|
145
|
+
"type" : "array",
|
|
146
|
+
"items" : {
|
|
147
|
+
"$ref" : "#/$defs/WorkflowEdgeDTO"
|
|
148
|
+
},
|
|
149
|
+
"description" : "显式边列表(edges):每项 from/to 引用 nodes[].id;单节点流程(仅 applicant)可为空数组"
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"required" : [ "edges" ]
|
|
153
|
+
},
|
|
154
|
+
"NodeAttrsDTO" : {
|
|
155
|
+
"type" : "object",
|
|
156
|
+
"description" : "节点属性基类(attrs),按 type 多态为各节点 *AttrsDTO",
|
|
157
|
+
"properties" : { },
|
|
158
|
+
"oneOf" : [ {
|
|
159
|
+
"$ref" : "#/$defs/AdminAttrsDTO"
|
|
160
|
+
}, {
|
|
161
|
+
"$ref" : "#/$defs/ApplicantAttrsDTO"
|
|
162
|
+
}, {
|
|
163
|
+
"$ref" : "#/$defs/ApprovalAttrsDTO"
|
|
164
|
+
}, {
|
|
165
|
+
"$ref" : "#/$defs/AutomationAttrsDTO"
|
|
166
|
+
}, {
|
|
167
|
+
"$ref" : "#/$defs/CCAttrsDTO"
|
|
168
|
+
}, {
|
|
169
|
+
"$ref" : "#/$defs/FillingAttrsDTO"
|
|
170
|
+
}, {
|
|
171
|
+
"$ref" : "#/$defs/GatewayAttrsDTO"
|
|
172
|
+
}, {
|
|
173
|
+
"$ref" : "#/$defs/SharerAttrsDTO"
|
|
174
|
+
} ],
|
|
175
|
+
"discriminator" : {
|
|
176
|
+
"propertyName" : "type",
|
|
177
|
+
"mapping" : {
|
|
178
|
+
"admin" : "#/$defs/AdminAttrsDTO",
|
|
179
|
+
"applicant" : "#/$defs/ApplicantAttrsDTO",
|
|
180
|
+
"approval" : "#/$defs/ApprovalAttrsDTO",
|
|
181
|
+
"cc" : "#/$defs/CCAttrsDTO",
|
|
182
|
+
"filling" : "#/$defs/FillingAttrsDTO",
|
|
183
|
+
"gateway" : "#/$defs/GatewayAttrsDTO",
|
|
184
|
+
"sharer" : "#/$defs/SharerAttrsDTO"
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
"x-polymorphic-base" : "com.qflow.backend.workflow.spec.dto.common.WorkflowSpecNodes$NodeAttrsDTO"
|
|
188
|
+
},
|
|
189
|
+
"WorkflowNodeDTO" : {
|
|
190
|
+
"type" : "object",
|
|
191
|
+
"description" : "工作流节点。type 决定业务类型与 attrs 结构:applicant、filling、approval、gateway、cc、automation(按 subType 细分)、admin、sharer(legacy-only)",
|
|
192
|
+
"properties" : {
|
|
193
|
+
"attrs" : {
|
|
194
|
+
"oneOf" : [ {
|
|
195
|
+
"$ref" : "#/$defs/AdminAttrsDTO"
|
|
196
|
+
}, {
|
|
197
|
+
"$ref" : "#/$defs/ApplicantAttrsDTO"
|
|
198
|
+
}, {
|
|
199
|
+
"$ref" : "#/$defs/ApprovalAttrsDTO"
|
|
200
|
+
}, {
|
|
201
|
+
"$ref" : "#/$defs/AutomationAttrsDTO"
|
|
202
|
+
}, {
|
|
203
|
+
"$ref" : "#/$defs/CCAttrsDTO"
|
|
204
|
+
}, {
|
|
205
|
+
"$ref" : "#/$defs/FillingAttrsDTO"
|
|
206
|
+
}, {
|
|
207
|
+
"$ref" : "#/$defs/GatewayAttrsDTO"
|
|
208
|
+
}, {
|
|
209
|
+
"$ref" : "#/$defs/SharerAttrsDTO"
|
|
210
|
+
} ],
|
|
211
|
+
"discriminator" : {
|
|
212
|
+
"propertyName" : "type",
|
|
213
|
+
"mapping" : {
|
|
214
|
+
"admin" : "#/$defs/AdminAttrsDTO",
|
|
215
|
+
"applicant" : "#/$defs/ApplicantAttrsDTO",
|
|
216
|
+
"approval" : "#/$defs/ApprovalAttrsDTO",
|
|
217
|
+
"cc" : "#/$defs/CCAttrsDTO",
|
|
218
|
+
"filling" : "#/$defs/FillingAttrsDTO",
|
|
219
|
+
"gateway" : "#/$defs/GatewayAttrsDTO",
|
|
220
|
+
"sharer" : "#/$defs/SharerAttrsDTO"
|
|
1524
221
|
}
|
|
222
|
+
},
|
|
223
|
+
"x-polymorphic-base" : "com.qflow.backend.workflow.spec.dto.common.WorkflowSpecNodes$NodeAttrsDTO",
|
|
224
|
+
"description" : "节点专属属性(attrs),随 type 多态为各 *AttrsDTO"
|
|
225
|
+
},
|
|
226
|
+
"enabled" : {
|
|
227
|
+
"type" : "boolean",
|
|
228
|
+
"description" : "是否启用(enabled)。false 时节点跳过"
|
|
229
|
+
},
|
|
230
|
+
"id" : {
|
|
231
|
+
"type" : "string",
|
|
232
|
+
"description" : "节点唯一 id,在 nodes 中唯一。更新已有工作流时必须回传 GET 返回的原 id(= audit_node_id 数字字符串,详见 ID 契约);自造 id 触发 CREATE 且存量节点遭删除时需走 CONFIRMATION_REQUIRED 两段式确认。",
|
|
233
|
+
"minLength" : 1
|
|
234
|
+
},
|
|
235
|
+
"name" : {
|
|
236
|
+
"type" : "string",
|
|
237
|
+
"description" : "节点显示名称,流程图中展示",
|
|
238
|
+
"minLength" : 1
|
|
239
|
+
},
|
|
240
|
+
"role" : {
|
|
241
|
+
"type" : "string",
|
|
242
|
+
"description" : "语义角色标记(role),可选,用于扩展标识"
|
|
243
|
+
},
|
|
244
|
+
"sync" : {
|
|
245
|
+
"type" : "boolean",
|
|
246
|
+
"description" : "是否同步执行(sync)。true 时下游须等本节点完成"
|
|
247
|
+
},
|
|
248
|
+
"type" : {
|
|
249
|
+
"type" : "string",
|
|
250
|
+
"description" : "节点类型(type)。gateway=并行 fork/join;automation 见 *AttrsDTO;admin/sharer=legacy-only 人工节点,仅存量流程 round-trip,agent 不应创建",
|
|
251
|
+
"comment" : "applicant | filling | approval | gateway | automation | cc | admin | sharer",
|
|
252
|
+
"enum" : [ "applicant", "filling", "approval", "gateway", "cc", "automation", "admin", "sharer" ]
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
"required" : [ "attrs", "id", "name", "type" ]
|
|
256
|
+
},
|
|
257
|
+
"MemberRefDTO" : {
|
|
258
|
+
"type" : "object",
|
|
259
|
+
"description" : "成员引用(MemberRef):对应设计器节点负责人(成员/部门/角色/动态 Tab)",
|
|
260
|
+
"properties" : {
|
|
261
|
+
"deptId" : {
|
|
262
|
+
"type" : "integer",
|
|
263
|
+
"description" : "部门 id(deptId),type=dept 时必填",
|
|
264
|
+
"x-resource-ref" : {
|
|
265
|
+
"resourceType" : "member",
|
|
266
|
+
"guidance" : "Search workspace departments when type=dept"
|
|
267
|
+
}
|
|
268
|
+
},
|
|
269
|
+
"havingSubDept" : {
|
|
270
|
+
"type" : "boolean",
|
|
271
|
+
"description" : "是否包含子部门(havingSubDept),type=dept 时可选"
|
|
272
|
+
},
|
|
273
|
+
"queId" : {
|
|
274
|
+
"type" : "integer",
|
|
275
|
+
"description" : "表单字段 id(queId)。leader/formEmail/formMember/formMobile/formDept 时必填。选字段时按 fieldType 过滤:formEmail→email,formMember→member,formMobile→mobile,formDept→dept,leader(非5)→dept;与 qingflow CLI 应用字段类型、FilterRuleDTO.fieldType 同名。",
|
|
276
|
+
"x-resource-ref" : {
|
|
277
|
+
"resourceType" : "formField",
|
|
278
|
+
"guidance" : "Resolve field by title/id from current app; filter by fieldType: formEmail=email, formMember=member, formMobile=mobile, formDept=dept, leader(dept field)=dept, leader(applicant)=queId 5"
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
"roleId" : {
|
|
282
|
+
"type" : "integer",
|
|
283
|
+
"description" : "角色 id(roleId),type=role 时必填",
|
|
284
|
+
"x-resource-ref" : {
|
|
285
|
+
"resourceType" : "member",
|
|
286
|
+
"guidance" : "Search workspace roles when type=role"
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
"type" : {
|
|
290
|
+
"type" : "string",
|
|
291
|
+
"description" : "负责人来源(type)。静态:user(uid)、dept(deptId)、role(roleId)。动态:applicant;leader(queId=5 申请人部门主管,否则 queId 须为 fieldType=dept 的字段);nodeLeader(当前节点负责人,无需 id);formEmail(queId 须 fieldType=email);formMember(queId 须 fieldType=member,含表格子字段);formMobile(queId 须 fieldType=mobile,按表单手机号字段取收件人——send_sms 常用);formDept(queId 须 fieldType=dept)。",
|
|
292
|
+
"comment" : "{\"type\":\"user\",\"uid\":1001} | {\"type\":\"leader\",\"queId\":5} | {\"type\":\"formEmail\",\"queId\":343283769} | {\"type\":\"formMember\",\"queId\":343283769} | {\"type\":\"formMobile\",\"queId\":9073582}",
|
|
293
|
+
"enum" : [ "user", "dept", "role", "applicant", "leader", "formEmail", "formMember", "formMobile", "formDept", "nodeLeader" ]
|
|
1525
294
|
},
|
|
1526
|
-
"
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
295
|
+
"uid" : {
|
|
296
|
+
"type" : "integer",
|
|
297
|
+
"description" : "用户 id(uid),type=user 时必填",
|
|
298
|
+
"x-resource-ref" : {
|
|
299
|
+
"resourceType" : "member",
|
|
300
|
+
"guidance" : "Search workspace users when type=user"
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
},
|
|
304
|
+
"required" : [ "type" ],
|
|
305
|
+
"x-constraints" : [ {
|
|
306
|
+
"description" : "type 决定必填字段与 queId 字段类型(filter):user→uid;dept→deptId;role→roleId;applicant 无 id;leader→queId(5 或 fieldType=dept);formEmail→fieldType=email;formMember→fieldType=member;formMobile→fieldType=mobile;formDept→fieldType=dept。fieldType 与 CLI/FilterRuleDTO 一致(email/member/mobile/dept 等)"
|
|
307
|
+
} ]
|
|
308
|
+
},
|
|
309
|
+
"AdminAttrsDTO" : {
|
|
310
|
+
"type" : "object",
|
|
311
|
+
"description" : "【WHAT】工作区管理员节点(admin):legacy 人工节点,处理人为工作区管理员(动态解析),由历史编辑器创建。【WHY】存量流程兼容:spec 读面必须能表达并 round-trip 保真,否则含 admin 节点的流程整包不可读。【HOW】type=admin,attrs.responsible 为节点人员快照(负责人员 round-trip 保真)。【NOT】legacy-only 形态:agent 不应创建 admin 节点;spec:apply 也不应把其他类型改写为 admin。",
|
|
312
|
+
"properties" : {
|
|
313
|
+
"responsible" : {
|
|
314
|
+
"type" : "array",
|
|
315
|
+
"items" : {
|
|
316
|
+
"$ref" : "#/$defs/MemberRefDTO"
|
|
317
|
+
},
|
|
318
|
+
"description" : "节点负责人(responsible):工作区管理员节点的人员快照;legacy-only 形态,用于存量流程 round-trip 保真,agent 不应创建 admin 节点"
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
"required" : [ "responsible" ]
|
|
322
|
+
},
|
|
323
|
+
"FieldPermissionDTO" : {
|
|
324
|
+
"type" : "object",
|
|
325
|
+
"description" : "字段权限项(FieldPermissionDTO):绑定 fieldId(queId) 与 fieldAuth。设计器三种状态:可编辑(edit)、隐藏(hide)、仅可见(readonly)。",
|
|
326
|
+
"properties" : {
|
|
327
|
+
"addRow" : {
|
|
328
|
+
"type" : "boolean",
|
|
329
|
+
"description" : "表格字段:是否允许新增行(addRow),非表格字段忽略"
|
|
330
|
+
},
|
|
331
|
+
"beingFold" : {
|
|
332
|
+
"type" : "boolean",
|
|
333
|
+
"description" : "是否在节点表单中折叠显示该字段(beingFold)"
|
|
334
|
+
},
|
|
335
|
+
"deleteRow" : {
|
|
336
|
+
"type" : "boolean",
|
|
337
|
+
"description" : "表格字段:是否允许删除行(deleteRow),非表格字段忽略"
|
|
338
|
+
},
|
|
339
|
+
"editRow" : {
|
|
340
|
+
"type" : "boolean",
|
|
341
|
+
"description" : "表格字段:是否允许编辑行(editRow),非表格字段忽略"
|
|
342
|
+
},
|
|
343
|
+
"fieldAuth" : {
|
|
344
|
+
"type" : "string",
|
|
345
|
+
"description" : "字段权限级别(fieldAuth)。edit=可编辑(设计器可编辑,queAuth=1);hide=隐藏(queAuth=2);readonly=仅可见(queAuth=3,填写/审批节点缺省值)。",
|
|
346
|
+
"comment" : "edit | hide | readonly",
|
|
347
|
+
"enum" : [ "edit", "hide", "readonly" ]
|
|
348
|
+
},
|
|
349
|
+
"fieldId" : {
|
|
350
|
+
"type" : "integer",
|
|
351
|
+
"description" : "表单字段 id(fieldId/queId),须为当前应用 questionIndex 中存在的字段;与 qingflow CLI fields 的 que_id 一致。"
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
"required" : [ "fieldAuth", "fieldId" ],
|
|
355
|
+
"x-constraints" : [ {
|
|
356
|
+
"description" : "缺省补齐(Spec→Legacy):可只写需特殊处理的字段;Apply 时按应用字段全集(questionIndex)展开。applicant 未列出→edit;filling/approval/cc 未列出→readonly(仅可见)。已显式列出的 fieldId(含 hide)不被覆盖。表格字段可配 addRow/deleteRow/editRow。"
|
|
357
|
+
} ]
|
|
358
|
+
},
|
|
359
|
+
"WebhookParamDTO" : {
|
|
360
|
+
"type" : "object",
|
|
361
|
+
"properties" : { }
|
|
362
|
+
},
|
|
363
|
+
"WebhookEndpointDTO" : {
|
|
364
|
+
"type" : "object",
|
|
365
|
+
"properties" : { }
|
|
366
|
+
},
|
|
367
|
+
"WebhookExtractorDTO" : {
|
|
368
|
+
"type" : "object",
|
|
369
|
+
"description" : "Webhook 入站解析提取器:按 type 填写 path/pattern/value 等",
|
|
370
|
+
"properties" : {
|
|
371
|
+
"allowWholeBody" : {
|
|
372
|
+
"type" : "boolean",
|
|
373
|
+
"description" : "是否允许整包 body 提取(allowWholeBody)"
|
|
374
|
+
},
|
|
375
|
+
"group" : {
|
|
376
|
+
"type" : "integer",
|
|
377
|
+
"description" : "正则捕获组索引(group),type=regex 时使用,默认 0"
|
|
378
|
+
},
|
|
379
|
+
"path" : {
|
|
380
|
+
"type" : "string",
|
|
381
|
+
"description" : "JSONPath/XPath 路径(path),type=jsonpath 或 xpath 时必填"
|
|
382
|
+
},
|
|
383
|
+
"pattern" : {
|
|
384
|
+
"type" : "string",
|
|
385
|
+
"description" : "正则表达式(pattern),type=regex 时必填"
|
|
386
|
+
},
|
|
387
|
+
"type" : {
|
|
388
|
+
"type" : "string",
|
|
389
|
+
"description" : "提取类型(type):literal=固定 value;jsonpath/xpath=用 path 从 body 提取;regex=用 pattern+group 从文本提取",
|
|
390
|
+
"enum" : [ "literal", "jsonpath", "xpath", "regex" ]
|
|
391
|
+
},
|
|
392
|
+
"value" : {
|
|
393
|
+
"type" : "string",
|
|
394
|
+
"description" : "字面量(value),type=literal 时必填"
|
|
395
|
+
}
|
|
396
|
+
},
|
|
397
|
+
"required" : [ "type" ]
|
|
398
|
+
},
|
|
399
|
+
"WebhookParseRuleDTO" : {
|
|
400
|
+
"type" : "object",
|
|
401
|
+
"description" : "Webhook 响应解析规则:将 HTTP 响应映射到当前应用字段",
|
|
402
|
+
"properties" : {
|
|
403
|
+
"extractor" : {
|
|
404
|
+
"$ref" : "#/$defs/WebhookExtractorDTO",
|
|
405
|
+
"description" : "提取器(extractor):jsonpath/xpath/regex/literal"
|
|
406
|
+
},
|
|
407
|
+
"tableRules" : {
|
|
408
|
+
"type" : "array",
|
|
409
|
+
"items" : {
|
|
410
|
+
"$ref" : "#/$defs/WebhookParseRuleDTO"
|
|
411
|
+
},
|
|
412
|
+
"description" : "子表字段解析规则(tableRules)"
|
|
413
|
+
},
|
|
414
|
+
"targetFieldId" : {
|
|
415
|
+
"type" : "integer",
|
|
416
|
+
"description" : "目标字段 id(targetFieldId):当前应用字段 queId"
|
|
417
|
+
},
|
|
418
|
+
"valueShape" : {
|
|
419
|
+
"type" : "string",
|
|
420
|
+
"description" : "值形态(valueShape):scalar 或 table 子行"
|
|
421
|
+
}
|
|
422
|
+
},
|
|
423
|
+
"required" : [ "extractor", "targetFieldId" ]
|
|
424
|
+
},
|
|
425
|
+
"WebhookRequestDTO" : {
|
|
426
|
+
"type" : "object",
|
|
427
|
+
"properties" : { }
|
|
428
|
+
},
|
|
429
|
+
"WebhookResponseDTO" : {
|
|
430
|
+
"type" : "object",
|
|
431
|
+
"properties" : { }
|
|
432
|
+
},
|
|
433
|
+
"WebhookUpdatePolicyDTO" : {
|
|
434
|
+
"type" : "object",
|
|
435
|
+
"description" : "Webhook update policy",
|
|
436
|
+
"properties" : {
|
|
437
|
+
"enabled" : {
|
|
438
|
+
"type" : "boolean",
|
|
439
|
+
"description" : "Enable update policy"
|
|
440
|
+
},
|
|
441
|
+
"matchGroups" : {
|
|
442
|
+
"type" : "array",
|
|
443
|
+
"items" : {
|
|
444
|
+
"type" : "array",
|
|
445
|
+
"items" : {
|
|
446
|
+
"type" : "object"
|
|
1553
447
|
}
|
|
448
|
+
},
|
|
449
|
+
"description" : "OR-of-AND matcher groups"
|
|
450
|
+
},
|
|
451
|
+
"maxUpdateRows" : {
|
|
452
|
+
"type" : "integer",
|
|
453
|
+
"description" : "Maximum rows to update"
|
|
454
|
+
},
|
|
455
|
+
"strategy" : {
|
|
456
|
+
"type" : "string",
|
|
457
|
+
"description" : "Update strategy",
|
|
458
|
+
"enum" : [ "insertOnly", "updateOnly", "upsert" ]
|
|
459
|
+
}
|
|
460
|
+
},
|
|
461
|
+
"required" : [ "enabled" ]
|
|
462
|
+
},
|
|
463
|
+
"ApplicantWebhookConfigDTO" : {
|
|
464
|
+
"type" : "object",
|
|
465
|
+
"description" : "Applicant webhook config",
|
|
466
|
+
"properties" : {
|
|
467
|
+
"authToken" : {
|
|
468
|
+
"type" : "string",
|
|
469
|
+
"description" : "Auth token"
|
|
470
|
+
},
|
|
471
|
+
"enabled" : {
|
|
472
|
+
"type" : "boolean",
|
|
473
|
+
"description" : "Whether webhook is enabled"
|
|
474
|
+
},
|
|
475
|
+
"endpoint" : {
|
|
476
|
+
"$ref" : "#/$defs/WebhookEndpointDTO",
|
|
477
|
+
"description" : "Webhook endpoint"
|
|
478
|
+
},
|
|
479
|
+
"id" : {
|
|
480
|
+
"type" : "integer",
|
|
481
|
+
"description" : "Webhook config id"
|
|
482
|
+
},
|
|
483
|
+
"name" : {
|
|
484
|
+
"type" : "string",
|
|
485
|
+
"description" : "Webhook config name",
|
|
486
|
+
"minLength" : 1
|
|
487
|
+
},
|
|
488
|
+
"parseRules" : {
|
|
489
|
+
"type" : "array",
|
|
490
|
+
"minItems" : 1,
|
|
491
|
+
"items" : {
|
|
492
|
+
"$ref" : "#/$defs/WebhookParseRuleDTO"
|
|
493
|
+
},
|
|
494
|
+
"description" : "Parse rules"
|
|
495
|
+
},
|
|
496
|
+
"request" : {
|
|
497
|
+
"$ref" : "#/$defs/WebhookRequestDTO",
|
|
498
|
+
"description" : "Request payload metadata"
|
|
499
|
+
},
|
|
500
|
+
"response" : {
|
|
501
|
+
"$ref" : "#/$defs/WebhookResponseDTO",
|
|
502
|
+
"description" : "Custom response config"
|
|
503
|
+
},
|
|
504
|
+
"updatePolicy" : {
|
|
505
|
+
"$ref" : "#/$defs/WebhookUpdatePolicyDTO",
|
|
506
|
+
"description" : "Update policy"
|
|
507
|
+
}
|
|
508
|
+
},
|
|
509
|
+
"required" : [ "endpoint", "name", "parseRules", "updatePolicy" ]
|
|
510
|
+
},
|
|
511
|
+
"ApplicantAttrsDTO" : {
|
|
512
|
+
"type" : "object",
|
|
513
|
+
"description" : "【WHAT】申请人节点(applicant):工作流唯一入口,流程图起点;申请人填写表单并提交后进入下游。【WHY】承载「谁发起、填哪些字段、如何提交」;对应 legacy dealType=申请、产生首条流程实例。【HOW】每个工作流必须有且仅有一个 applicant;配置 submitText/commentStatus/fieldPermissions/webhook;fieldPermissions 控制发起人可见/可编辑字段;未列出字段 Apply 时默认 edit。",
|
|
514
|
+
"properties" : {
|
|
515
|
+
"commentStatus" : {
|
|
516
|
+
"type" : "boolean",
|
|
517
|
+
"description" : "是否允许发起人填写备注(commentStatus)"
|
|
518
|
+
},
|
|
519
|
+
"fieldPermissions" : {
|
|
520
|
+
"type" : "array",
|
|
521
|
+
"items" : {
|
|
522
|
+
"$ref" : "#/$defs/FieldPermissionDTO"
|
|
523
|
+
},
|
|
524
|
+
"description" : "字段权限(fieldPermissions)【申请人节点】 WHAT:控制发起人在提交前对各字段的可编辑/仅可见/隐藏。 WHY:限制申请人只能改业务字段、系统字段只读或隐藏。 HOW:列出例外项;未列出的应用字段 Apply 时自动补齐为 edit。 缺省补齐(Spec→Legacy):可只写需特殊处理的字段;Apply 时按应用字段全集(questionIndex)展开。applicant 未列出→edit;filling/approval/cc 未列出→readonly(仅可见)。已显式列出的 fieldId(含 hide)不被覆盖。表格字段可配 addRow/deleteRow/editRow。",
|
|
525
|
+
"comment" : "[{\"fieldId\":343283769,\"fieldAuth\":\"edit\"},{\"fieldId\":343283777,\"fieldAuth\":\"readonly\"}]"
|
|
526
|
+
},
|
|
527
|
+
"submitText" : {
|
|
528
|
+
"type" : "string",
|
|
529
|
+
"description" : "自定义提交按钮文案(submitText)"
|
|
530
|
+
},
|
|
531
|
+
"webhook" : {
|
|
532
|
+
"$ref" : "#/$defs/ApplicantWebhookConfigDTO",
|
|
533
|
+
"description" : "入站 Webhook(webhook):外部系统触发发起时的解析与更新策略"
|
|
534
|
+
}
|
|
535
|
+
},
|
|
536
|
+
"x-capability-boundaries" : [ {
|
|
537
|
+
"capability" : "human_task_applicant",
|
|
538
|
+
"description" : "Workflow start node; exactly one per spec",
|
|
539
|
+
"level" : "core",
|
|
540
|
+
"constraints" : [ "required in every workflow", "supports fieldPermissions with default-expand edit", "produces apply/submit, not approval todo" ]
|
|
541
|
+
} ]
|
|
542
|
+
},
|
|
543
|
+
"ButtonTextConfigDTO" : {
|
|
544
|
+
"type" : "object",
|
|
545
|
+
"properties" : {
|
|
546
|
+
"approve" : {
|
|
547
|
+
"type" : "string",
|
|
548
|
+
"description" : "通过按钮文案(approve)"
|
|
549
|
+
},
|
|
550
|
+
"reject" : {
|
|
551
|
+
"type" : "string",
|
|
552
|
+
"description" : "驳回按钮文案(reject)"
|
|
553
|
+
},
|
|
554
|
+
"revert" : {
|
|
555
|
+
"type" : "string",
|
|
556
|
+
"description" : "退回按钮文案(revert)"
|
|
557
|
+
},
|
|
558
|
+
"submit" : {
|
|
559
|
+
"type" : "string",
|
|
560
|
+
"description" : "提交按钮文案(submit)"
|
|
561
|
+
},
|
|
562
|
+
"transfer" : {
|
|
563
|
+
"type" : "string",
|
|
564
|
+
"description" : "转交按钮文案(transfer)"
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
},
|
|
568
|
+
"CountersignConfigDTO" : {
|
|
569
|
+
"type" : "object",
|
|
570
|
+
"properties" : {
|
|
571
|
+
"enabled" : {
|
|
572
|
+
"type" : "boolean",
|
|
573
|
+
"description" : "是否开启加签(enabled):节点负责人可加签其他成员共同审批"
|
|
574
|
+
},
|
|
575
|
+
"scope" : {
|
|
576
|
+
"type" : "string",
|
|
577
|
+
"description" : "加签人员范围(scope):workspaceMember=工作区可见成员;assignMember=指定成员(成员列表暂未纳入 Spec)",
|
|
578
|
+
"enum" : [ "workspaceMember", "assignMember" ]
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
},
|
|
582
|
+
"EndWorkflowConfigDTO" : {
|
|
583
|
+
"type" : "object",
|
|
584
|
+
"properties" : {
|
|
585
|
+
"buttonText" : {
|
|
586
|
+
"type" : "string",
|
|
587
|
+
"description" : "结束流程按钮文案(buttonText)"
|
|
588
|
+
},
|
|
589
|
+
"enabled" : {
|
|
590
|
+
"type" : "boolean",
|
|
591
|
+
"description" : "是否允许结束流程(enabled):负责人可手动结束流程,状态变为已结束"
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
},
|
|
595
|
+
"FeedbackConfigDTO" : {
|
|
596
|
+
"type" : "object",
|
|
597
|
+
"properties" : {
|
|
598
|
+
"operationType" : {
|
|
599
|
+
"type" : "string",
|
|
600
|
+
"description" : "必填留言的操作类型(operationType):approve=通过/reject=拒绝/transfer=转交/rollback=回退/countersign=加签/end=结束流程;仅 auditFeedback=true 时生效",
|
|
601
|
+
"comment" : "[{\"operationType\":\"approve\"}]",
|
|
602
|
+
"enum" : [ "approve", "reject", "transfer", "rollback", "countersign", "end" ]
|
|
603
|
+
}
|
|
604
|
+
},
|
|
605
|
+
"required" : [ "operationType" ]
|
|
606
|
+
},
|
|
607
|
+
"GradedAuditConfigDTO" : {
|
|
608
|
+
"type" : "object",
|
|
609
|
+
"description" : "逐级审批配置(gradedAuditConfig):auditUserType=graded 时必填,含审批起点与终点规则",
|
|
610
|
+
"properties" : {
|
|
611
|
+
"dynamicEndLevelNum" : {
|
|
612
|
+
"type" : "integer",
|
|
613
|
+
"description" : "动态向上层级数(dynamicEndLevelNum),endType=dynamicUp 时使用"
|
|
614
|
+
},
|
|
615
|
+
"endType" : {
|
|
616
|
+
"type" : "string",
|
|
617
|
+
"description" : "终点类型(endType):dynamicUp=连续多级主管向上;specifiedLevel=指定层级主管",
|
|
618
|
+
"enum" : [ "dynamicUp", "specifiedLevel" ]
|
|
619
|
+
},
|
|
620
|
+
"gradedApproveType" : {
|
|
621
|
+
"type" : "string",
|
|
622
|
+
"description" : "同层级多人时通过模式(gradedApproveType):and=须全部通过;or=一人通过即可",
|
|
623
|
+
"enum" : [ "and", "or" ]
|
|
624
|
+
},
|
|
625
|
+
"gradedType" : {
|
|
626
|
+
"type" : "string",
|
|
627
|
+
"description" : "逐级类型(gradedType):dept=部门层级;report=汇报层级",
|
|
628
|
+
"enum" : [ "dept", "report" ]
|
|
629
|
+
},
|
|
630
|
+
"removeDup" : {
|
|
631
|
+
"type" : "boolean",
|
|
632
|
+
"description" : "层级负责人去重(removeDup)"
|
|
633
|
+
},
|
|
634
|
+
"specifiedEndLevelNum" : {
|
|
635
|
+
"type" : "integer",
|
|
636
|
+
"description" : "指定层级数(specifiedEndLevelNum),endType=specifiedLevel 时使用"
|
|
637
|
+
},
|
|
638
|
+
"startResponsible" : {
|
|
639
|
+
"type" : "array",
|
|
640
|
+
"minItems" : 1,
|
|
641
|
+
"items" : {
|
|
642
|
+
"$ref" : "#/$defs/MemberRefDTO"
|
|
643
|
+
},
|
|
644
|
+
"description" : "审批起点(startResponsible):逐级审批从何处开始向上,语义同 MemberRef"
|
|
645
|
+
}
|
|
646
|
+
},
|
|
647
|
+
"required" : [ "startResponsible" ]
|
|
648
|
+
},
|
|
649
|
+
"SignConfigDTO" : {
|
|
650
|
+
"type" : "object",
|
|
651
|
+
"properties" : {
|
|
652
|
+
"eSign" : {
|
|
653
|
+
"type" : "boolean",
|
|
654
|
+
"description" : "是否启用电子签章(eSign)"
|
|
655
|
+
},
|
|
656
|
+
"handSign" : {
|
|
657
|
+
"type" : "boolean",
|
|
658
|
+
"description" : "是否启用手写签名(handSign)"
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
},
|
|
662
|
+
"SwitchConfigDTO" : {
|
|
663
|
+
"type" : "object",
|
|
664
|
+
"properties" : {
|
|
665
|
+
"batchOperateStatus" : {
|
|
666
|
+
"type" : "boolean",
|
|
667
|
+
"description" : "是否允许批量操作(batchOperateStatus)"
|
|
668
|
+
},
|
|
669
|
+
"beingSubmitCheck" : {
|
|
670
|
+
"type" : "boolean",
|
|
671
|
+
"description" : "提交时是否校验(beingSubmitCheck)"
|
|
672
|
+
},
|
|
673
|
+
"commentStatus" : {
|
|
674
|
+
"type" : "boolean",
|
|
675
|
+
"description" : "是否允许评论(commentStatus):缺省 true(legacy 列默认 1,读面省略回显);关闭评论须显式 false。r6-03/#194 扩建模(applicant attrs 同名字段维持不变)"
|
|
676
|
+
},
|
|
677
|
+
"dataImportStatus" : {
|
|
678
|
+
"type" : "boolean",
|
|
679
|
+
"description" : "是否允许数据导入(dataImportStatus)"
|
|
680
|
+
},
|
|
681
|
+
"rejectBtnStatus" : {
|
|
682
|
+
"type" : "boolean",
|
|
683
|
+
"description" : "是否显示/启用驳回按钮(rejectBtnStatus),对应设计器「流程拒绝」"
|
|
684
|
+
},
|
|
685
|
+
"revert" : {
|
|
686
|
+
"type" : "boolean",
|
|
687
|
+
"description" : "是否允许审批人回退/退回(revert):缺省 true(legacy 列默认 1,读面省略回显);关闭回退须显式 false。r6-03/#194 扩建模,此前仅 guide 声明 legacy-only"
|
|
688
|
+
},
|
|
689
|
+
"revokeStatus" : {
|
|
690
|
+
"type" : "boolean",
|
|
691
|
+
"description" : "是否允许流程撤回(revokeStatus),对应设计器「流程撤回」"
|
|
692
|
+
},
|
|
693
|
+
"submitRecalcStatus" : {
|
|
694
|
+
"type" : "boolean",
|
|
695
|
+
"description" : "提交时是否重算(submitRecalcStatus)"
|
|
696
|
+
},
|
|
697
|
+
"transfer" : {
|
|
698
|
+
"type" : "boolean",
|
|
699
|
+
"description" : "是否允许审批人转交(transfer):缺省 true(legacy 列默认 1,读面省略回显);关闭转交须显式 false。r6-03/#194 扩建模,此前仅 guide 声明 legacy-only"
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
},
|
|
703
|
+
"TimeoutDurationDTO" : {
|
|
704
|
+
"type" : "object",
|
|
705
|
+
"description" : "超时时长(duration):数值 + 单位,对应 legacy timeoutValue + timeoutType(单位)",
|
|
706
|
+
"properties" : {
|
|
707
|
+
"unit" : {
|
|
708
|
+
"type" : "string",
|
|
709
|
+
"description" : "时间单位(unit):day|hour|minute|workday|national_workday",
|
|
710
|
+
"enum" : [ "day", "hour", "minute", "workday", "national_workday" ]
|
|
711
|
+
},
|
|
712
|
+
"value" : {
|
|
713
|
+
"type" : "integer",
|
|
714
|
+
"description" : "时长数值(value),对应 legacy compareValue / timeoutValue 整数部分"
|
|
715
|
+
}
|
|
716
|
+
},
|
|
717
|
+
"required" : [ "unit", "value" ]
|
|
718
|
+
},
|
|
719
|
+
"PreTimeoutConfigDTO" : {
|
|
720
|
+
"type" : "object",
|
|
721
|
+
"description" : "超时预警(preTimeout):超时到达前的提醒配置",
|
|
722
|
+
"properties" : {
|
|
723
|
+
"duration" : {
|
|
724
|
+
"$ref" : "#/$defs/TimeoutDurationDTO",
|
|
725
|
+
"description" : "预警提前量(duration)"
|
|
726
|
+
},
|
|
727
|
+
"enabled" : {
|
|
728
|
+
"type" : "boolean",
|
|
729
|
+
"description" : "是否开启预警(enabled)"
|
|
730
|
+
},
|
|
731
|
+
"notifiers" : {
|
|
732
|
+
"type" : "array",
|
|
733
|
+
"items" : {
|
|
734
|
+
"$ref" : "#/$defs/MemberRefDTO"
|
|
735
|
+
},
|
|
736
|
+
"description" : "预警通知人(notifiers)"
|
|
737
|
+
},
|
|
738
|
+
"notifyCurrentAuditor" : {
|
|
739
|
+
"type" : "boolean",
|
|
740
|
+
"description" : "是否通知当前节点负责人(notifyCurrentAuditor),默认 true"
|
|
741
|
+
}
|
|
742
|
+
},
|
|
743
|
+
"required" : [ "duration", "enabled" ]
|
|
744
|
+
},
|
|
745
|
+
"TimeoutConfigDTO" : {
|
|
746
|
+
"type" : "object",
|
|
747
|
+
"description" : "超时与预警(timeoutConfig):用于审批/填写节点,控制超时提醒、通知人与自动处理",
|
|
748
|
+
"properties" : {
|
|
749
|
+
"autoDeal" : {
|
|
750
|
+
"type" : "boolean",
|
|
751
|
+
"description" : "超时后自动处理(autoDeal)"
|
|
752
|
+
},
|
|
753
|
+
"duration" : {
|
|
754
|
+
"$ref" : "#/$defs/TimeoutDurationDTO",
|
|
755
|
+
"description" : "自定义超时时长(duration),type=custom 时必填"
|
|
756
|
+
},
|
|
757
|
+
"notifiers" : {
|
|
758
|
+
"type" : "array",
|
|
759
|
+
"items" : {
|
|
760
|
+
"$ref" : "#/$defs/MemberRefDTO"
|
|
761
|
+
},
|
|
762
|
+
"description" : "超时通知人(notifiers),可含 nodeLeader/user/role 等"
|
|
763
|
+
},
|
|
764
|
+
"notifyCurrentAuditor" : {
|
|
765
|
+
"type" : "boolean",
|
|
766
|
+
"description" : "是否通知当前节点负责人(notifyCurrentAuditor),默认 true"
|
|
767
|
+
},
|
|
768
|
+
"offset" : {
|
|
769
|
+
"$ref" : "#/$defs/TimeoutDurationDTO",
|
|
770
|
+
"description" : "相对字段日期的偏移量(offset),type=form 且 before/after 时必填"
|
|
771
|
+
},
|
|
772
|
+
"preTimeout" : {
|
|
773
|
+
"$ref" : "#/$defs/PreTimeoutConfigDTO",
|
|
774
|
+
"description" : "超时预警(preTimeout)"
|
|
775
|
+
},
|
|
776
|
+
"remindType" : {
|
|
777
|
+
"type" : "string",
|
|
778
|
+
"description" : "提醒类型(remindType):immediate=立即(超时到达即提醒);fixed_time=指定时间(到达日按 timeOfDay 时刻提醒);缺省=未指定。读面:缺省(库值 0/null)不回显该字段;写面:缺省且无加签/结束流程声明时不建 setting 行,行存在则仅 UPDATE",
|
|
779
|
+
"enum" : [ "immediate", "fixed_time" ]
|
|
780
|
+
},
|
|
781
|
+
"timeOfDay" : {
|
|
782
|
+
"type" : "string",
|
|
783
|
+
"description" : "表单日期当天的具体时刻(timeOfDay),格式 HH:mm,type=form 时可选;任何 compareType 均可携带(与存量并存形态对齐,before/after 下引擎仅按天单位参与计算)"
|
|
784
|
+
},
|
|
785
|
+
"timeoutCompareType" : {
|
|
786
|
+
"type" : "string",
|
|
787
|
+
"description" : "与字段日期的比较方式(timeoutCompareType),type=form 时使用",
|
|
788
|
+
"enum" : [ "current", "before", "after" ]
|
|
789
|
+
},
|
|
790
|
+
"timeoutQueId" : {
|
|
791
|
+
"type" : "integer",
|
|
792
|
+
"description" : "表单字段 id(timeoutQueId),type=form 时必填"
|
|
793
|
+
},
|
|
794
|
+
"timeoutValue" : {
|
|
795
|
+
"type" : "string",
|
|
796
|
+
"description" : "已废弃:请使用 duration;兼容旧草案如 2d/3h"
|
|
797
|
+
},
|
|
798
|
+
"timeoutWarning" : {
|
|
799
|
+
"type" : "boolean",
|
|
800
|
+
"description" : "已废弃:请使用 preTimeout.enabled"
|
|
801
|
+
},
|
|
802
|
+
"timeoutWarningType" : {
|
|
803
|
+
"type" : "integer",
|
|
804
|
+
"description" : "已废弃:请使用 preTimeout.duration"
|
|
805
|
+
},
|
|
806
|
+
"timeoutWarningValue" : {
|
|
807
|
+
"type" : "string",
|
|
808
|
+
"description" : "已废弃:请使用 preTimeout.duration"
|
|
809
|
+
},
|
|
810
|
+
"type" : {
|
|
811
|
+
"type" : "string",
|
|
812
|
+
"description" : "超时来源(type/mode):custom=固定时长;form=取自表单日期字段",
|
|
813
|
+
"enum" : [ "custom", "form" ]
|
|
814
|
+
}
|
|
815
|
+
},
|
|
816
|
+
"required" : [ "type" ],
|
|
817
|
+
"x-constraints" : [ {
|
|
818
|
+
"if" : "properties.type.const='custom'",
|
|
819
|
+
"then" : "required=['duration']",
|
|
820
|
+
"else" : "required=['timeoutQueId']",
|
|
821
|
+
"description" : "Custom timeout requires duration; form timeout requires timeoutQueId"
|
|
822
|
+
} ]
|
|
823
|
+
},
|
|
824
|
+
"ApprovalAttrsDTO" : {
|
|
825
|
+
"type" : "object",
|
|
826
|
+
"description" : "【WHAT】审批节点(approval):指派审批人对当前数据做通过/驳回/转交/退回;产生待办,是审批流最常见的人工节点。【WHY】用于权责确认、合规把关;支持或签/会签、逐级审批(graded)、超时自动处理、加签与字段只读查看。【HOW】配置 responsible、approveType(or|and)、auditUserType(normal|graded)、auditFeedback、commentStatus/revert/transfer(r6-03/#194 建模进 switches:缺省 true 省略回显、关闭须显式 false)、revertScope/transferScope、auditRecordVisible、recommitType(重提方式 1/2/3)、timeoutConfig、buttonText、switches、signConfig、countersignConfig、endWorkflowConfig、fieldPermissions;graded 时填 gradedAuditConfig.startResponsible;fieldPermissions 未列出字段默认 readonly(仅可见)。",
|
|
827
|
+
"properties" : {
|
|
828
|
+
"approveType" : {
|
|
829
|
+
"type" : "string",
|
|
830
|
+
"description" : "审批方式(approveType):or=或签(一人通过即可);and=会签(须全部通过)",
|
|
831
|
+
"enum" : [ "or", "and" ]
|
|
832
|
+
},
|
|
833
|
+
"auditFeedback" : {
|
|
834
|
+
"type" : "boolean",
|
|
835
|
+
"description" : "是否开启审批意见(auditFeedback)"
|
|
836
|
+
},
|
|
837
|
+
"auditRecordVisible" : {
|
|
838
|
+
"type" : "boolean",
|
|
839
|
+
"description" : "审批记录是否对提交人可见(auditRecordVisible):true=提交人可见审批明细;未提供(缺省)时 apply 保留库中现值,但节点删除重建会回退 true(引擎默认可见)"
|
|
840
|
+
},
|
|
841
|
+
"auditUserType" : {
|
|
842
|
+
"type" : "string",
|
|
843
|
+
"description" : "审批人类型(auditUserType):normal=普通;graded=逐级审批",
|
|
844
|
+
"enum" : [ "normal", "graded" ]
|
|
845
|
+
},
|
|
846
|
+
"buttonText" : {
|
|
847
|
+
"$ref" : "#/$defs/ButtonTextConfigDTO",
|
|
848
|
+
"description" : "按钮文案(buttonText):通过/驳回等按钮显示文字"
|
|
849
|
+
},
|
|
850
|
+
"commentStatus" : {
|
|
851
|
+
"type" : "boolean",
|
|
852
|
+
"description" : "是否开启留言(commentStatus):负责人可留言并查看历史留言"
|
|
853
|
+
},
|
|
854
|
+
"countersignConfig" : {
|
|
855
|
+
"$ref" : "#/$defs/CountersignConfigDTO",
|
|
856
|
+
"description" : "加签配置(countersignConfig):负责人加签其他成员共同审批。读面:全默认(未开启且 scope 为空/workspaceMember)时省略该字段,仅声明非默认值才输出"
|
|
857
|
+
},
|
|
858
|
+
"designatedMembers" : {
|
|
859
|
+
"type" : "array",
|
|
860
|
+
"items" : {
|
|
861
|
+
"$ref" : "#/$defs/MemberRefDTO"
|
|
862
|
+
},
|
|
863
|
+
"description" : "节点无负责人时的指定处理人(designatedMembers):type=user + uid;仅常规负责人解析为空时生效,与负责人独立配置"
|
|
864
|
+
},
|
|
865
|
+
"endWorkflowConfig" : {
|
|
866
|
+
"$ref" : "#/$defs/EndWorkflowConfigDTO",
|
|
867
|
+
"description" : "结束流程配置(endWorkflowConfig):负责人手动结束流程。读面:全默认(未开启且 buttonText 为空)时省略该字段,仅声明非默认值才输出"
|
|
868
|
+
},
|
|
869
|
+
"feedbackConfigs" : {
|
|
870
|
+
"type" : "array",
|
|
871
|
+
"items" : {
|
|
872
|
+
"$ref" : "#/$defs/FeedbackConfigDTO"
|
|
873
|
+
},
|
|
874
|
+
"description" : "反馈配置(feedbackConfigs)"
|
|
875
|
+
},
|
|
876
|
+
"fieldPermissions" : {
|
|
877
|
+
"type" : "array",
|
|
878
|
+
"items" : {
|
|
879
|
+
"$ref" : "#/$defs/FieldPermissionDTO"
|
|
880
|
+
},
|
|
881
|
+
"description" : "字段权限(fieldPermissions)【审批节点】 WHAT:审批人处理待办时对字段的可见/可编辑/隐藏。 WHY:审批人多数场景只读查看,少数场景允许改指定字段。 HOW:未列出字段默认 readonly;需可编辑时显式 edit。 缺省补齐(Spec→Legacy):可只写需特殊处理的字段;Apply 时按应用字段全集(questionIndex)展开。applicant 未列出→edit;filling/approval/cc 未列出→readonly(仅可见)。已显式列出的 fieldId(含 hide)不被覆盖。表格字段可配 addRow/deleteRow/editRow。",
|
|
882
|
+
"comment" : "[{\"fieldId\":343283769,\"fieldAuth\":\"readonly\"}]"
|
|
883
|
+
},
|
|
884
|
+
"gradedAuditConfig" : {
|
|
885
|
+
"$ref" : "#/$defs/GradedAuditConfigDTO",
|
|
886
|
+
"description" : "逐级审批配置(gradedAuditConfig),auditUserType=graded 时必填;startResponsible 为审批起点"
|
|
887
|
+
},
|
|
888
|
+
"recommitType" : {
|
|
889
|
+
"type" : "integer",
|
|
890
|
+
"description" : "重提方式(recommitType):审批驳回/撤回后申请人重新提交的流转方式。1=重新提交重走流程(COMMIT_TYPE_NORMAL);2=直达撤回前节点(JUMP_TO_ROLLBACK_NODE);3=由审批人决定(DECIDED_BY_AUDITOR)。存 draft_audit_node_extra_attr 表;未提供(缺省)时 UPDATE 保留库中现值,CREATE 回退 1(重走流程,COMMIT_TYPE_NORMAL);读面:库值 1(引擎默认语义)或无行时不回显该字段——引擎对无行≡null≡1 三态归一,仅非默认值(2/3)才输出"
|
|
891
|
+
},
|
|
892
|
+
"responsible" : {
|
|
893
|
+
"type" : "array",
|
|
894
|
+
"items" : {
|
|
895
|
+
"$ref" : "#/$defs/MemberRefDTO"
|
|
896
|
+
},
|
|
897
|
+
"description" : "审批人(responsible):auditUserType=normal 时用户/部门/角色,至少一人;graded 时为空数组(负责人在 gradedAuditConfig)"
|
|
898
|
+
},
|
|
899
|
+
"revert" : {
|
|
900
|
+
"type" : "boolean",
|
|
901
|
+
"description" : "是否允许流程回退(revert):true 时配合 revertScope 启用退回上一节点等能力"
|
|
902
|
+
},
|
|
903
|
+
"revertScope" : {
|
|
904
|
+
"type" : "string",
|
|
905
|
+
"description" : "退回范围(revertScope):可退回到哪些历史节点"
|
|
906
|
+
},
|
|
907
|
+
"signConfig" : {
|
|
908
|
+
"$ref" : "#/$defs/SignConfigDTO",
|
|
909
|
+
"description" : "加签配置(signConfig)"
|
|
910
|
+
},
|
|
911
|
+
"switches" : {
|
|
912
|
+
"$ref" : "#/$defs/SwitchConfigDTO",
|
|
913
|
+
"description" : "功能开关(switches):如允许暂存、批量审批等"
|
|
914
|
+
},
|
|
915
|
+
"timeoutConfig" : {
|
|
916
|
+
"$ref" : "#/$defs/TimeoutConfigDTO",
|
|
917
|
+
"description" : "超时配置(timeoutConfig):超时提醒、自动通过/驳回等"
|
|
918
|
+
},
|
|
919
|
+
"transfer" : {
|
|
920
|
+
"type" : "boolean",
|
|
921
|
+
"description" : "是否允许转交(transfer):true 时审批人可将待办转交他人,配合 transferScope 限定范围;未提供(缺省)时 apply 保留库中现值,但节点删除重建会回退 false(引擎默认)"
|
|
922
|
+
},
|
|
923
|
+
"transferScope" : {
|
|
924
|
+
"type" : "string",
|
|
925
|
+
"description" : "转交范围(transferScope):允许转交给谁"
|
|
926
|
+
}
|
|
927
|
+
},
|
|
928
|
+
"required" : [ "approveType", "auditUserType", "responsible" ],
|
|
929
|
+
"x-capability-boundaries" : [ {
|
|
930
|
+
"capability" : "human_task_approval",
|
|
931
|
+
"description" : "Approver pass/reject/transfer/revert; creates task-center todo",
|
|
932
|
+
"level" : "core",
|
|
933
|
+
"constraints" : [ "requires responsible unless auditUserType=graded (use gradedAuditConfig)", "approveType or|and; auditUserType normal|graded", "fieldPermissions: omitted fields default readonly" ]
|
|
934
|
+
} ]
|
|
935
|
+
},
|
|
936
|
+
"AutomationAIOutputFieldDTO" : {
|
|
937
|
+
"type" : "object",
|
|
938
|
+
"description" : "AI output field mapping",
|
|
939
|
+
"properties" : {
|
|
940
|
+
"fieldDesc" : {
|
|
941
|
+
"type" : "string",
|
|
942
|
+
"description" : "Output field description"
|
|
943
|
+
},
|
|
944
|
+
"fieldId" : {
|
|
945
|
+
"type" : "integer",
|
|
946
|
+
"description" : "Output field id"
|
|
947
|
+
}
|
|
948
|
+
},
|
|
949
|
+
"required" : [ "fieldId" ]
|
|
950
|
+
},
|
|
951
|
+
"AutomationAIConfigDTO" : {
|
|
952
|
+
"type" : "object",
|
|
953
|
+
"description" : "AI 配置(aiConfig) 按 subType 必填字段(Legacy aiNodeSettingCheck 对齐):A) ai_text_summary|ai_content_extraction|ai_content_classification|ai_image_recognition|ai_document_parsing → inputFieldIds + outputFields;B) ai_content_generation|ai_image_generation → promptWords + outputFields;C) ai_machine_translation → inputFieldIds + outputFields + language。 inputFieldIds/outputFields.fieldId 须为当前流程(源应用) questionIndex 中的 queId。",
|
|
954
|
+
"properties" : {
|
|
955
|
+
"customButtonEnabled" : {
|
|
956
|
+
"type" : "boolean",
|
|
957
|
+
"description" : "是否启用自定义按钮(customButtonEnabled),仅 spec 快照,不落 legacy 表"
|
|
958
|
+
},
|
|
959
|
+
"customButtonText" : {
|
|
960
|
+
"type" : "string",
|
|
961
|
+
"description" : "自定义按钮文案(customButtonText),仅 spec 快照,不落 legacy 表"
|
|
962
|
+
},
|
|
963
|
+
"example" : {
|
|
964
|
+
"type" : "string",
|
|
965
|
+
"description" : "参考示例(example),可选,辅助模型理解场景"
|
|
966
|
+
},
|
|
967
|
+
"inputFieldIds" : {
|
|
968
|
+
"type" : "array",
|
|
969
|
+
"minItems" : 1,
|
|
970
|
+
"items" : {
|
|
971
|
+
"type" : "integer"
|
|
972
|
+
},
|
|
973
|
+
"description" : "输入字段 id 列表(inputFieldIds)。A/C 组 subType 必填;须为当前流程(源应用)表单字段 queId",
|
|
974
|
+
"comment" : "示例:[343283769,343283777]"
|
|
975
|
+
},
|
|
976
|
+
"language" : {
|
|
977
|
+
"type" : "string",
|
|
978
|
+
"description" : "目标语言(language)。C 组 subType(ai_machine_translation)必填;如 en、ja、zh-CN"
|
|
979
|
+
},
|
|
980
|
+
"outputFields" : {
|
|
981
|
+
"type" : "array",
|
|
982
|
+
"minItems" : 1,
|
|
983
|
+
"items" : {
|
|
984
|
+
"$ref" : "#/$defs/AutomationAIOutputFieldDTO"
|
|
985
|
+
},
|
|
986
|
+
"description" : "输出字段映射(outputFields):AI 结果写入哪些字段;所有 AI subType 必填",
|
|
987
|
+
"comment" : "示例:[{\"fieldId\":343283775,\"fieldDesc\":\"摘要\"}]"
|
|
988
|
+
},
|
|
989
|
+
"promptWords" : {
|
|
990
|
+
"type" : "string",
|
|
991
|
+
"description" : "提示词(promptWords)。B 组 subType(ai_content_generation|ai_image_generation)必填;描述 AI 要完成的任务"
|
|
992
|
+
}
|
|
993
|
+
},
|
|
994
|
+
"required" : [ "inputFieldIds", "outputFields" ]
|
|
995
|
+
},
|
|
996
|
+
"AutomationAIAttrsDTO" : {
|
|
997
|
+
"type" : "object",
|
|
998
|
+
"description" : "【WHAT】Q-Robot AI 节点(automation + ai_* subType):流程到达后调用 AI 能力处理表单字段并写回结果,无人工待办。【WHY】文本总结、内容生成/提取/分类、图像识别/生成、文档解析、机器翻译等自动化智能处理。【HOW】type=automation,attrs.subType 选具体 AI 能力(见 AUTOMATION_AI_CONFIG);attrs.aiConfig 配置 inputFieldIds/outputFields/promptWords/language;subType 与 legacy dealType 11~18 一一对应;`ai` 等价于 `ai_text_summary`。【NOT】禁止 fieldPermissions;customButtonText 仅 preservedAttrsJson 快照,不落 legacy 表。",
|
|
999
|
+
"properties" : {
|
|
1000
|
+
"aiConfig" : {
|
|
1001
|
+
"$ref" : "#/$defs/AutomationAIConfigDTO",
|
|
1002
|
+
"description" : "AI 配置(aiConfig) 按 subType 必填字段(Legacy aiNodeSettingCheck 对齐):A) ai_text_summary|ai_content_extraction|ai_content_classification|ai_image_recognition|ai_document_parsing → inputFieldIds + outputFields;B) ai_content_generation|ai_image_generation → promptWords + outputFields;C) ai_machine_translation → inputFieldIds + outputFields + language。 inputFieldIds/outputFields.fieldId 须为当前流程(源应用) questionIndex 中的 queId。"
|
|
1003
|
+
}
|
|
1004
|
+
},
|
|
1005
|
+
"required" : [ "aiConfig" ],
|
|
1006
|
+
"x-constraints" : [ {
|
|
1007
|
+
"if" : "properties.subType.const='ai_machine_translation'",
|
|
1008
|
+
"then" : "properties.aiConfig.required=['inputFieldIds','outputFields','language']",
|
|
1009
|
+
"description" : "机器翻译须配置源字段、输出字段与目标 language"
|
|
1010
|
+
} ]
|
|
1011
|
+
},
|
|
1012
|
+
"TableRowOperationsDTO" : {
|
|
1013
|
+
"type" : "object",
|
|
1014
|
+
"description" : "子表行操作策略(tableRowOperations):仅当 fieldMappings.fieldId 为目标子表时使用。add_rows=追加行;replace_table=整表覆盖;update_rows=更新已有行(前置:targetFilterRules 须含该目标子表子字段筛选)。strategy 可省略(r6-03/#195):省略=legacy table_update_type NULL 存量形态(如 miss-add 漏加映射树),写面回写 NULL 保真;agent 新建时应显式声明。",
|
|
1015
|
+
"properties" : {
|
|
1016
|
+
"addRule" : {
|
|
1017
|
+
"type" : "string",
|
|
1018
|
+
"description" : "addWhenNoMatch=true 时的新增行规则(addRule)。唯一合法值 copy_row;new_default_row 已 deprecated、等价 copy_row(读回归一为 copy_row,写面降级记 COMPAT 告警)"
|
|
1019
|
+
},
|
|
1020
|
+
"addWhenNoMatch" : {
|
|
1021
|
+
"type" : "boolean",
|
|
1022
|
+
"description" : "update_rows 专用:目标子表按 targetFilterRules 无匹配行时是否新增行(addWhenNoMatch)"
|
|
1023
|
+
},
|
|
1024
|
+
"fieldMappings" : {
|
|
1025
|
+
"type" : "array",
|
|
1026
|
+
"minItems" : 1,
|
|
1027
|
+
"items" : {
|
|
1028
|
+
"$ref" : "#/$defs/QRobotRelationRuleDTO"
|
|
1029
|
+
},
|
|
1030
|
+
"description" : "子表内子字段映射(fieldMappings),结构与 QRobotRelationRuleDTO 相同"
|
|
1031
|
+
},
|
|
1032
|
+
"strategy" : {
|
|
1033
|
+
"type" : "string",
|
|
1034
|
+
"description" : "策略(strategy):add_rows=向目标子表追加行;update_rows=更新目标子表已有行(须 targetFilterRules 含该目标子表子字段筛选);replace_table=整表覆盖。r6-03/#195 起可省略——省略=legacy table_update_type NULL 存量形态(如 miss-add 漏加映射树),写面回写 NULL 保持行形态;agent 新建时应显式声明",
|
|
1035
|
+
"enum" : [ "add_rows", "update_rows", "replace_table" ]
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
},
|
|
1039
|
+
"QRobotRelationRuleDTO" : {
|
|
1040
|
+
"type" : "object",
|
|
1041
|
+
"description" : "Q-Robot 字段映射(fieldMappings):将源表单或字面量写入目标应用 fieldId",
|
|
1042
|
+
"properties" : {
|
|
1043
|
+
"fieldId" : {
|
|
1044
|
+
"type" : "integer",
|
|
1045
|
+
"description" : "目标应用中的字段 id(fieldId)"
|
|
1046
|
+
},
|
|
1047
|
+
"matchType" : {
|
|
1048
|
+
"type" : "string",
|
|
1049
|
+
"description" : "赋值来源(matchType):literal=常量/结构化字面量;field_ref=引用当前流程表单字段 id。variable/alias 属引擎内部或外部触发侧形态(pathValue 驱动、不在本契约内),读面遇到会降级为逐字段告警",
|
|
1050
|
+
"enum" : [ "literal", "field_ref" ]
|
|
1051
|
+
},
|
|
1052
|
+
"tableRowOperations" : {
|
|
1053
|
+
"$ref" : "#/$defs/TableRowOperationsDTO",
|
|
1054
|
+
"description" : "目标子表行操作策略(tableRowOperations):fieldId 为目标子表(QUE_TYPE_TABLE)时使用。 子表行操作策略(tableRowOperations):仅当 fieldMappings.fieldId 为目标子表时使用。add_rows=追加行;replace_table=整表覆盖;update_rows=更新已有行(前置:targetFilterRules 须含该目标子表子字段筛选)。strategy 可省略(r6-03/#195):省略=legacy table_update_type NULL 存量形态(如 miss-add 漏加映射树),写面回写 NULL 保真;agent 新建时应显式声明。"
|
|
1055
|
+
},
|
|
1056
|
+
"values" : {
|
|
1057
|
+
"type" : "array",
|
|
1058
|
+
"minItems" : 1,
|
|
1059
|
+
"items" : {
|
|
1060
|
+
"oneOf" : [ {
|
|
1061
|
+
"type" : "string",
|
|
1062
|
+
"description" : "简单字面量或 matchType=field_ref 时的源 fieldId 字符串"
|
|
1063
|
+
}, {
|
|
1064
|
+
"type" : "number"
|
|
1065
|
+
}, {
|
|
1066
|
+
"type" : "boolean"
|
|
1067
|
+
}, {
|
|
1068
|
+
"$ref" : "#/$defs/LiteralAssignmentValueDTO"
|
|
1069
|
+
} ]
|
|
1070
|
+
},
|
|
1071
|
+
"description" : "赋值载荷(values)。literal:string/number/boolean、{\"value\":\"已审核\"} 或 LiteralAssignmentValueDTO;field_ref:源 fieldId 字符串数组",
|
|
1072
|
+
"comment" : "literal简写:[{\"value\":\"已审核\"}]; field_ref:[\"343283769\"]; 复杂字面量:[{\"valueType\":\"option\",\"value\":\"123\"}]"
|
|
1073
|
+
}
|
|
1074
|
+
},
|
|
1075
|
+
"required" : [ "fieldId", "matchType", "values" ]
|
|
1076
|
+
},
|
|
1077
|
+
"AutomationTableFilterRuleDTO" : {
|
|
1078
|
+
"type" : "object",
|
|
1079
|
+
"description" : "源应用单个子表的行筛选:对应编辑器「表格筛选条件」中的一条子表配置",
|
|
1080
|
+
"properties" : {
|
|
1081
|
+
"filterRules" : {
|
|
1082
|
+
"type" : "array",
|
|
1083
|
+
"minItems" : 1,
|
|
1084
|
+
"items" : {
|
|
1085
|
+
"$ref" : "#/$defs/FilterRuleGroupDTO"
|
|
1086
|
+
},
|
|
1087
|
+
"description" : "对该源子表行的筛选组(filterRules):OR 组内 AND。 FilterRuleDTO.fieldId 必须是 tableFieldId 下子字段(源应用),仅 matchType=literal。 FilterRule 上下文:condition.autoJudges→fieldId 源应用、仅 literal;targetFilterRules→fieldId 目标应用、literal|field_ref;tableFilterRules.filterRules→fieldId 源子表子字段、仅 literal。"
|
|
1088
|
+
},
|
|
1089
|
+
"tableFieldId" : {
|
|
1090
|
+
"type" : "integer",
|
|
1091
|
+
"description" : "源应用(当前流程)子表 fieldId(tableFieldId)。不是 attrs.appKey 目标应用的子表",
|
|
1092
|
+
"comment" : "示例:源流程订单明细子表 queId;勿填目标应用子表 id"
|
|
1093
|
+
}
|
|
1094
|
+
},
|
|
1095
|
+
"required" : [ "filterRules", "tableFieldId" ]
|
|
1096
|
+
},
|
|
1097
|
+
"AutomationAddAttrsDTO" : {
|
|
1098
|
+
"type" : "object",
|
|
1099
|
+
"description" : "Q-Robot 新增(subType=add):向目标 appKey 插入数据。【Q-Robot 三层筛选】① tableFilterRules=编辑器「表格筛选条件」,筛源应用(当前流程)子表行,legacy tableFilterCondition;② targetFilterRules=编辑器「更新哪些数据」,筛目标应用(appKey)主记录/目标子表行,legacy qrobotQueFilterFormula/filterCondition;③ fieldMappings[].tableRowOperations=「表格更新规则」,写目标子表行内容。目标子表行定位写在 targetFilterRules,不要写在 tableFilterRules。",
|
|
1100
|
+
"properties" : {
|
|
1101
|
+
"appKey" : {
|
|
1102
|
+
"type" : "string",
|
|
1103
|
+
"description" : "目标应用 appKey,数据写入该应用",
|
|
1104
|
+
"minLength" : 1,
|
|
1105
|
+
"x-resource-ref" : {
|
|
1106
|
+
"resourceType" : "application",
|
|
1107
|
+
"guidance" : "Select an application to operate on"
|
|
1108
|
+
}
|
|
1109
|
+
},
|
|
1110
|
+
"fieldMappings" : {
|
|
1111
|
+
"type" : "array",
|
|
1112
|
+
"minItems" : 1,
|
|
1113
|
+
"items" : {
|
|
1114
|
+
"$ref" : "#/$defs/QRobotRelationRuleDTO"
|
|
1115
|
+
},
|
|
1116
|
+
"description" : "字段映射(fieldMappings):目标字段与来源值/字段引用的对应关系"
|
|
1117
|
+
},
|
|
1118
|
+
"tableFilterRules" : {
|
|
1119
|
+
"type" : "array",
|
|
1120
|
+
"items" : {
|
|
1121
|
+
"$ref" : "#/$defs/AutomationTableFilterRuleDTO"
|
|
1122
|
+
},
|
|
1123
|
+
"description" : "源应用表格筛选(tableFilterRules):编辑器「表格筛选条件」。在映射写入目标应用前,限定当前流程(源应用)子表参与操作的行。tableFieldId 为源子表 fieldId;filterRules 内 fieldId 须为该源子表下的子字段,仅 matchType=literal。Legacy tableFilterCondition。与 targetFilterRules 无关。"
|
|
1124
|
+
}
|
|
1125
|
+
},
|
|
1126
|
+
"required" : [ "appKey", "fieldMappings" ]
|
|
1127
|
+
},
|
|
1128
|
+
"AutomationAttrsDTO" : {
|
|
1129
|
+
"type" : "object",
|
|
1130
|
+
"description" : "【WHAT】自动化节点(automation/Q-Robot):无人工待办,流程到达后后台自动执行动作(增删改他表、发邮件/短信、HTTP、AI 等)。【WHY】扩展审批流能力:同步 CRM、通知外部系统、按规则更新关联应用,减少人工重复操作。【HOW】type=automation,attrs.subType 决定 payload:add|update|ai|http_request|send_email|send_sms|send_reminder;禁止 fieldPermissions;配置目标 appKey、fieldMappings、filterRules 等子类型字段。",
|
|
1131
|
+
"properties" : {
|
|
1132
|
+
"subType" : {
|
|
1133
|
+
"type" : "string",
|
|
1134
|
+
"description" : "自动化子类型(subType):add|update|send_email|send_sms|http_request|send_reminder|ai|ai_text_summary|ai_content_generation|ai_machine_translation|ai_content_extraction|ai_content_classification|ai_image_recognition|ai_image_generation|ai_document_parsing;决定 payload 结构。send_reminder 与 ai_text_summary 共用 legacy dealType=11,读向按 AI 配置形状消歧"
|
|
1135
|
+
}
|
|
1136
|
+
},
|
|
1137
|
+
"required" : [ "subType" ],
|
|
1138
|
+
"oneOf" : [ {
|
|
1139
|
+
"$ref" : "#/$defs/AutomationAIAttrsDTO"
|
|
1140
|
+
}, {
|
|
1141
|
+
"$ref" : "#/$defs/AutomationAddAttrsDTO"
|
|
1142
|
+
}, {
|
|
1143
|
+
"$ref" : "#/$defs/AutomationHttpRequestAttrsDTO"
|
|
1144
|
+
}, {
|
|
1145
|
+
"$ref" : "#/$defs/AutomationSendEmailAttrsDTO"
|
|
1146
|
+
}, {
|
|
1147
|
+
"$ref" : "#/$defs/AutomationSendReminderAttrsDTO"
|
|
1148
|
+
}, {
|
|
1149
|
+
"$ref" : "#/$defs/AutomationSendSmsAttrsDTO"
|
|
1150
|
+
}, {
|
|
1151
|
+
"$ref" : "#/$defs/AutomationUpdateAttrsDTO"
|
|
1152
|
+
} ],
|
|
1153
|
+
"discriminator" : {
|
|
1154
|
+
"propertyName" : "subType",
|
|
1155
|
+
"mapping" : {
|
|
1156
|
+
"ai" : "#/$defs/AutomationAIAttrsDTO",
|
|
1157
|
+
"add" : "#/$defs/AutomationAddAttrsDTO",
|
|
1158
|
+
"http_request" : "#/$defs/AutomationHttpRequestAttrsDTO",
|
|
1159
|
+
"send_email" : "#/$defs/AutomationSendEmailAttrsDTO",
|
|
1160
|
+
"send_reminder" : "#/$defs/AutomationSendReminderAttrsDTO",
|
|
1161
|
+
"send_sms" : "#/$defs/AutomationSendSmsAttrsDTO",
|
|
1162
|
+
"update" : "#/$defs/AutomationUpdateAttrsDTO"
|
|
1163
|
+
}
|
|
1164
|
+
},
|
|
1165
|
+
"x-polymorphic-base" : "com.qflow.backend.workflow.spec.dto.attrs.AutomationAttrsDTO",
|
|
1166
|
+
"x-capability-boundaries" : [ {
|
|
1167
|
+
"capability" : "automation_qrobot",
|
|
1168
|
+
"description" : "Background Q-Robot; no human todo",
|
|
1169
|
+
"level" : "core",
|
|
1170
|
+
"constraints" : [ "no fieldPermissions", "subType selects payload: add|update|ai|http_request|send_email|send_sms|send_reminder" ]
|
|
1171
|
+
} ]
|
|
1172
|
+
},
|
|
1173
|
+
"WebhookAliasBindingDTO" : {
|
|
1174
|
+
"type" : "object",
|
|
1175
|
+
"description" : "Webhook 别名绑定(aliasBindings):模板/连接中心/轻翼模式下响应别名与当前应用字段的绑定,对应 draft_webhook_global_config_alias_binding 行",
|
|
1176
|
+
"properties" : {
|
|
1177
|
+
"aliasId" : {
|
|
1178
|
+
"type" : "integer",
|
|
1179
|
+
"description" : "模板侧别名 id(aliasId ↔ alias_id):引用的模板/连接/轻翼技能响应别名 id"
|
|
1180
|
+
},
|
|
1181
|
+
"aliasType" : {
|
|
1182
|
+
"type" : "integer",
|
|
1183
|
+
"description" : "别名类型(aliasType ↔ alias_type):1=BASIC(基础字段);2=TABLE(表格字段,含子别名)",
|
|
1184
|
+
"enum" : [ 1, 2 ]
|
|
1185
|
+
},
|
|
1186
|
+
"parentAliasId" : {
|
|
1187
|
+
"type" : "integer",
|
|
1188
|
+
"description" : "父别名 id(parentAliasId ↔ parent_alias_id):缺省=顶层别名;子别名=父别名 id(表格字段子字段)"
|
|
1189
|
+
},
|
|
1190
|
+
"queId" : {
|
|
1191
|
+
"type" : "integer",
|
|
1192
|
+
"description" : "绑定字段 id(queId):当前应用字段 queId"
|
|
1193
|
+
}
|
|
1194
|
+
},
|
|
1195
|
+
"required" : [ "aliasId", "queId" ]
|
|
1196
|
+
},
|
|
1197
|
+
"WebhookVariableBindingDTO" : {
|
|
1198
|
+
"type" : "object",
|
|
1199
|
+
"description" : "Webhook 变量绑定(variableBindings):模板/连接中心/轻翼模式下请求参数与当前应用字段(或自定义值)的绑定,对应 draft_webhook_global_config_variable_binding 行",
|
|
1200
|
+
"properties" : {
|
|
1201
|
+
"paramsQueId" : {
|
|
1202
|
+
"type" : "integer",
|
|
1203
|
+
"description" : "绑定字段 id(paramsQueId ↔ params_que_id):type=2 时为当前应用字段 queId"
|
|
1204
|
+
},
|
|
1205
|
+
"paramsValue" : {
|
|
1206
|
+
"type" : "string",
|
|
1207
|
+
"description" : "自定义值(paramsValue ↔ params_value):type=1 时使用"
|
|
1208
|
+
},
|
|
1209
|
+
"parentVariableId" : {
|
|
1210
|
+
"type" : "integer",
|
|
1211
|
+
"description" : "父变量 id(parentVariableId ↔ parent_variable_id):0=顶层变量;子变量=父变量 id"
|
|
1212
|
+
},
|
|
1213
|
+
"type" : {
|
|
1214
|
+
"type" : "integer",
|
|
1215
|
+
"description" : "绑定类型(type):1=自定义值(paramsValue);2=字段(paramsQueId)",
|
|
1216
|
+
"enum" : [ 1, 2 ]
|
|
1217
|
+
},
|
|
1218
|
+
"variableId" : {
|
|
1219
|
+
"type" : "integer",
|
|
1220
|
+
"description" : "模板侧变量 id(variableId ↔ variable_id):引用的模板/连接/轻翼技能变量 id;轻翼模式下为技能变量序"
|
|
1221
|
+
},
|
|
1222
|
+
"variableType" : {
|
|
1223
|
+
"type" : "string",
|
|
1224
|
+
"description" : "变量类型(variableType ↔ variable_type):TEXT/NUMBER/OBJECT_ARRAY/FILE,引用的模板/连接变量本体类型(设计器读回需要)"
|
|
1225
|
+
},
|
|
1226
|
+
"wingsSkillId" : {
|
|
1227
|
+
"type" : "integer",
|
|
1228
|
+
"description" : "轻翼技能 id(wingsSkillId ↔ wings_skill_id):仅 configMode=4 轻翼模式携带"
|
|
1229
|
+
},
|
|
1230
|
+
"wingsVarKey" : {
|
|
1231
|
+
"type" : "string",
|
|
1232
|
+
"description" : "轻翼技能变量 key(wingsVarKey ↔ wings_var_key):configMode=4 时使用"
|
|
1233
|
+
},
|
|
1234
|
+
"wingsVarName" : {
|
|
1235
|
+
"type" : "string",
|
|
1236
|
+
"description" : "轻翼技能变量名(wingsVarName ↔ wings_var_name):configMode=4 时使用"
|
|
1237
|
+
}
|
|
1238
|
+
},
|
|
1239
|
+
"required" : [ "type", "variableId" ]
|
|
1240
|
+
},
|
|
1241
|
+
"RemoteHttpRequestConfigDTO" : {
|
|
1242
|
+
"type" : "object",
|
|
1243
|
+
"description" : "远程 HTTP 请求配置(remoteRequestConfig):Q-Robot http_request 子类型使用",
|
|
1244
|
+
"properties" : {
|
|
1245
|
+
"aliasBindings" : {
|
|
1246
|
+
"type" : "array",
|
|
1247
|
+
"items" : {
|
|
1248
|
+
"$ref" : "#/$defs/WebhookAliasBindingDTO"
|
|
1249
|
+
},
|
|
1250
|
+
"description" : "别名绑定列表(aliasBindings):configMode=2/3/4 时响应别名与当前应用字段的绑定,写面落 draft_webhook_global_config_alias_binding(拍平行列表,parentAliasId 缺省=顶层)。引擎按绑定生成 parse 链(绑定空 → 节点不执行);UPDATE 不携带 = 显式清空"
|
|
1251
|
+
},
|
|
1252
|
+
"beingInsertValueDirectly" : {
|
|
1253
|
+
"type" : "boolean",
|
|
1254
|
+
"description" : "是否直接将原始响应写入字段(beingInsertValueDirectly)"
|
|
1255
|
+
},
|
|
1256
|
+
"bodyType" : {
|
|
1257
|
+
"type" : "integer",
|
|
1258
|
+
"description" : "请求体格式(bodyType):决定使用 jsonValue 还是 xmlValue"
|
|
1259
|
+
},
|
|
1260
|
+
"configMode" : {
|
|
1261
|
+
"type" : "integer",
|
|
1262
|
+
"description" : "配置模式(configMode):1=自定义;2=工作区插件模板;3=连接中心模板;4=轻翼智能体技能。四种模式均支持声明式 CREATE/UPDATE",
|
|
1263
|
+
"enum" : [ 1, 2, 3, 4 ]
|
|
1264
|
+
},
|
|
1265
|
+
"globalAuthId" : {
|
|
1266
|
+
"type" : "integer",
|
|
1267
|
+
"description" : "引用的全局鉴权 id(globalAuthId)"
|
|
1268
|
+
},
|
|
1269
|
+
"globalWebhookConfigId" : {
|
|
1270
|
+
"type" : "integer",
|
|
1271
|
+
"description" : "引用的全局 Webhook/连接中心事件配置 id(globalWebhookConfigId):configMode=2/3 时语义必填"
|
|
1272
|
+
},
|
|
1273
|
+
"jsonValue" : {
|
|
1274
|
+
"type" : "string",
|
|
1275
|
+
"description" : "JSON 请求体模板(jsonValue):合法 JSON 字符串;bodyType 为 JSON 时使用。可静态如 {\"event\":\"customer.approved\"},也可含字段占位符",
|
|
1276
|
+
"comment" : "示例:\"{\\\"event\\\":\\\"customer.approved\\\"}\""
|
|
1277
|
+
},
|
|
1278
|
+
"method" : {
|
|
1279
|
+
"type" : "string",
|
|
1280
|
+
"description" : "HTTP 方法(method),如 GET/POST"
|
|
1281
|
+
},
|
|
1282
|
+
"parseRules" : {
|
|
1283
|
+
"type" : "array",
|
|
1284
|
+
"items" : {
|
|
1285
|
+
"$ref" : "#/$defs/WebhookParseRuleDTO"
|
|
1286
|
+
},
|
|
1287
|
+
"description" : "响应解析规则(parseRules):updateStatus=true 时写入 draft_webhook_parse"
|
|
1288
|
+
},
|
|
1289
|
+
"resultType" : {
|
|
1290
|
+
"type" : "integer",
|
|
1291
|
+
"description" : "期望响应类型(resultType)"
|
|
1292
|
+
},
|
|
1293
|
+
"triggerType" : {
|
|
1294
|
+
"type" : "integer",
|
|
1295
|
+
"description" : "触发模式(triggerType):1=默认(发送整单 ApplyDetailInfo);2=自定义(使用 jsonValue/xmlValue 模板)。有 jsonValue/xmlValue 且未显式传值时 Apply 推断为 2",
|
|
1296
|
+
"enum" : [ 1, 2 ]
|
|
1297
|
+
},
|
|
1298
|
+
"updateStatus" : {
|
|
1299
|
+
"type" : "boolean",
|
|
1300
|
+
"description" : "是否用响应更新表单字段(updateStatus)"
|
|
1301
|
+
},
|
|
1302
|
+
"url" : {
|
|
1303
|
+
"type" : "string",
|
|
1304
|
+
"description" : "请求 URL(url):configMode 缺省/1(自定义模式)时语义必填;模板/连接中心/轻翼模式由引用配置提供 URL"
|
|
1305
|
+
},
|
|
1306
|
+
"variableBindings" : {
|
|
1307
|
+
"type" : "array",
|
|
1308
|
+
"items" : {
|
|
1309
|
+
"$ref" : "#/$defs/WebhookVariableBindingDTO"
|
|
1310
|
+
},
|
|
1311
|
+
"description" : "变量绑定列表(variableBindings):configMode=2/3/4 时请求参数与当前应用字段的绑定,写面落 draft_webhook_global_config_variable_binding(拍平行列表,parentVariableId=0 顶层)。引擎执行强消费(绑定空 → 节点不执行);UPDATE 不携带 = 显式清空(remoteRequestConfig 整体即全量覆写语义)"
|
|
1312
|
+
},
|
|
1313
|
+
"wingsAgentId" : {
|
|
1314
|
+
"type" : "integer",
|
|
1315
|
+
"description" : "Wings Agent id(wingsAgentId):configMode=4 时语义必填"
|
|
1316
|
+
},
|
|
1317
|
+
"wingsSkillId" : {
|
|
1318
|
+
"type" : "integer",
|
|
1319
|
+
"description" : "Wings Skill id(wingsSkillId):configMode=4 时语义必填"
|
|
1320
|
+
},
|
|
1321
|
+
"xmlValue" : {
|
|
1322
|
+
"type" : "string",
|
|
1323
|
+
"description" : "XML 请求体模板(xmlValue):bodyType 为 XML 时使用"
|
|
1324
|
+
}
|
|
1325
|
+
}
|
|
1326
|
+
},
|
|
1327
|
+
"AutomationHttpRequestAttrsDTO" : {
|
|
1328
|
+
"type" : "object",
|
|
1329
|
+
"description" : "Q-Robot 远程请求(subType=http_request):调用外部 HTTP 接口",
|
|
1330
|
+
"properties" : {
|
|
1331
|
+
"remoteRequestConfig" : {
|
|
1332
|
+
"$ref" : "#/$defs/RemoteHttpRequestConfigDTO",
|
|
1333
|
+
"description" : "远程请求配置(remoteRequestConfig):URL、方法、参数与响应解析"
|
|
1334
|
+
}
|
|
1335
|
+
},
|
|
1336
|
+
"required" : [ "remoteRequestConfig" ]
|
|
1337
|
+
},
|
|
1338
|
+
"MailFileDTO" : {
|
|
1339
|
+
"type" : "object",
|
|
1340
|
+
"description" : "邮件附件来源(mailFiles 项)",
|
|
1341
|
+
"properties" : {
|
|
1342
|
+
"fieldId" : {
|
|
1343
|
+
"type" : "integer",
|
|
1344
|
+
"description" : "表单附件字段 id(fieldId),type 为字段附件时使用"
|
|
1345
|
+
},
|
|
1346
|
+
"printKey" : {
|
|
1347
|
+
"type" : "string",
|
|
1348
|
+
"description" : "打印模板 key(printKey),type 为打印模板时使用"
|
|
1349
|
+
},
|
|
1350
|
+
"type" : {
|
|
1351
|
+
"type" : "integer",
|
|
1352
|
+
"description" : "附件来源类型(type):决定使用 fieldId(表单附件字段) 或 printKey(打印模板)"
|
|
1353
|
+
}
|
|
1354
|
+
}
|
|
1355
|
+
},
|
|
1356
|
+
"QRobotMailConfigDTO" : {
|
|
1357
|
+
"type" : "object",
|
|
1358
|
+
"description" : "Q-Robot 发邮件配置(mailConfig):发件人、主题、正文与附件;收件人见 AutomationSendEmailAttrsDTO.mailReceivers",
|
|
1359
|
+
"properties" : {
|
|
1360
|
+
"content" : {
|
|
1361
|
+
"type" : "string",
|
|
1362
|
+
"description" : "邮件正文(content):纯文本或 HTML;可插入当前流程表单字段值(占位符由 CustomPushContentConverter 解析)",
|
|
1363
|
+
"comment" : "示例:\"客户已通过审核,请安排首次跟进。\""
|
|
1364
|
+
},
|
|
1365
|
+
"mailFiles" : {
|
|
1366
|
+
"type" : "array",
|
|
1367
|
+
"items" : {
|
|
1368
|
+
"$ref" : "#/$defs/MailFileDTO"
|
|
1369
|
+
},
|
|
1370
|
+
"description" : "附件列表(mailFiles)"
|
|
1371
|
+
},
|
|
1372
|
+
"mailSender" : {
|
|
1373
|
+
"$ref" : "#/$defs/MemberRefDTO",
|
|
1374
|
+
"description" : "发件人(mailSender),MemberRef 指定用户/部门/角色/申请人"
|
|
1375
|
+
},
|
|
1376
|
+
"title" : {
|
|
1377
|
+
"type" : "string",
|
|
1378
|
+
"description" : "邮件主题(title):纯文本或 HTML;可含字段占位符(通常由 UI 生成 {$$...$$} 编码),CLI 可先填静态文案",
|
|
1379
|
+
"comment" : "示例:\"【CRM】新客户审核通过\""
|
|
1380
|
+
}
|
|
1381
|
+
}
|
|
1382
|
+
},
|
|
1383
|
+
"AutomationSendEmailAttrsDTO" : {
|
|
1384
|
+
"type" : "object",
|
|
1385
|
+
"description" : "Q-Robot 发邮件(subType=send_email):按 mailConfig 与 mailReceivers 发送邮件通知",
|
|
1386
|
+
"properties" : {
|
|
1387
|
+
"mailConfig" : {
|
|
1388
|
+
"$ref" : "#/$defs/QRobotMailConfigDTO",
|
|
1389
|
+
"description" : "邮件配置(mailConfig):发件人、主题、正文与附件"
|
|
1390
|
+
},
|
|
1391
|
+
"mailReceivers" : {
|
|
1392
|
+
"type" : "array",
|
|
1393
|
+
"minItems" : 1,
|
|
1394
|
+
"items" : {
|
|
1395
|
+
"$ref" : "#/$defs/MemberRefDTO"
|
|
1396
|
+
},
|
|
1397
|
+
"description" : "邮件收件人(mailReceivers):用户/部门/角色/字段,至少一人"
|
|
1398
|
+
}
|
|
1399
|
+
},
|
|
1400
|
+
"required" : [ "mailConfig", "mailReceivers" ]
|
|
1401
|
+
},
|
|
1402
|
+
"AutomationSendReminderAttrsDTO" : {
|
|
1403
|
+
"type" : "object",
|
|
1404
|
+
"description" : "【WHAT】发送提醒节点(automation + send_reminder):流程到达后向指定成员发送站内/消息提醒,无人工待办、不写表数据。【WHY】与 AI 文本总结共用 legacy dealType=11(spec-11 双语义):读向按 AI 配置形状消歧——sidecar 无 AI 配置(aiNodeSetting/aiNodeInputOutputSettings/aiConfigJson 全空)即为 send_reminder;spec 显式写 subType=send_reminder 时始终按本类型处理。【HOW】type=automation,attrs.subType=send_reminder,attrs.receivers 指定接收人(可空=沿用 legacy)。【NOT】禁止 fieldPermissions;不要带 aiConfig;不得把存量 AI 节点误改写为 send_reminder(语义变更)。",
|
|
1405
|
+
"properties" : {
|
|
1406
|
+
"receivers" : {
|
|
1407
|
+
"type" : "array",
|
|
1408
|
+
"items" : {
|
|
1409
|
+
"$ref" : "#/$defs/MemberRefDTO"
|
|
1410
|
+
},
|
|
1411
|
+
"description" : "提醒接收人(receivers):用户/部门/角色;留空表示沿用 legacy 编辑器配置(默认无收件人)"
|
|
1412
|
+
}
|
|
1413
|
+
}
|
|
1414
|
+
},
|
|
1415
|
+
"AutomationSendSmsAttrsDTO" : {
|
|
1416
|
+
"type" : "object",
|
|
1417
|
+
"description" : "Q-Robot 发短信(subType=send_sms):按 receivers 与短信模板配置发送短信通知",
|
|
1418
|
+
"properties" : {
|
|
1419
|
+
"content" : {
|
|
1420
|
+
"type" : "string",
|
|
1421
|
+
"description" : "短信正文(content ↔ draft_sms_message.content,自写模式)"
|
|
1422
|
+
},
|
|
1423
|
+
"managedByLegacy" : {
|
|
1424
|
+
"type" : "boolean",
|
|
1425
|
+
"description" : "占位标记(managedByLegacy):true 表示短信配置由 legacy/设计器管理,spec apply 仅占位不动配置(旧 spec 兼容);缺省/false 为声明式全量读写"
|
|
1426
|
+
},
|
|
1427
|
+
"params" : {
|
|
1428
|
+
"type" : "string",
|
|
1429
|
+
"description" : "占位参数顺序(params ↔ draft_sms_message.params):填充参数为 {1},{2} 时,逗号分割的 queId 顺序"
|
|
1430
|
+
},
|
|
1431
|
+
"platformTemplateContent" : {
|
|
1432
|
+
"type" : "string",
|
|
1433
|
+
"description" : "平台模板转换后正文(platformTemplateContent ↔ draft_sms_message.platform_template_content)"
|
|
1434
|
+
},
|
|
1435
|
+
"platformTemplateId" : {
|
|
1436
|
+
"type" : "string",
|
|
1437
|
+
"description" : "平台模板 id(platformTemplateId ↔ draft_sms_message.platform_template_id,平台模板模式:供应商侧模板回执)"
|
|
1438
|
+
},
|
|
1439
|
+
"platformTemplateName" : {
|
|
1440
|
+
"type" : "string",
|
|
1441
|
+
"description" : "平台模板名字(platformTemplateName ↔ draft_sms_message.platform_template_name)"
|
|
1442
|
+
},
|
|
1443
|
+
"receivers" : {
|
|
1444
|
+
"type" : "array",
|
|
1445
|
+
"minItems" : 1,
|
|
1446
|
+
"items" : {
|
|
1447
|
+
"$ref" : "#/$defs/MemberRefDTO"
|
|
1448
|
+
},
|
|
1449
|
+
"description" : "短信收件人(receivers):用户/部门/角色/字段,至少一人(draft_audit_node_user MemberRef 通道,与 send_email 同构)。schema 层非必填(legacy 占位旧 spec 无此字段);声明式必填由 SendSmsApplyGuard 语义层把关。注意:缺省不展开 applicant 默认(NodeOwnerDefaults 幻影提醒防御已排除 send_sms)"
|
|
1450
|
+
},
|
|
1451
|
+
"scene" : {
|
|
1452
|
+
"type" : "string",
|
|
1453
|
+
"description" : "场景描述(scene ↔ draft_sms_message.scene_description),模板审核用"
|
|
1454
|
+
},
|
|
1455
|
+
"signPosition" : {
|
|
1456
|
+
"type" : "string",
|
|
1457
|
+
"description" : "签名位置(signPosition ↔ draft_sms_message.sign_position,SendCloudSignPositionEnum)"
|
|
1458
|
+
},
|
|
1459
|
+
"smsTemplateKey" : {
|
|
1460
|
+
"type" : "string",
|
|
1461
|
+
"description" : "短信模板 key(smsTemplateKey ↔ draft_sms_message.message_key),模板行的自然键;声明式 apply 按此 key upsert 模板行。schema 层非必填(legacy 占位旧 spec 无此字段);声明式 CREATE 的必填由 SendSmsApplyGuard 语义层把关",
|
|
1462
|
+
"minLength" : 1,
|
|
1463
|
+
"x-resource-ref" : {
|
|
1464
|
+
"resourceType" : "smsTemplate",
|
|
1465
|
+
"guidance" : "Select an SMS template"
|
|
1466
|
+
}
|
|
1467
|
+
},
|
|
1468
|
+
"smsTemplateName" : {
|
|
1469
|
+
"type" : "string",
|
|
1470
|
+
"description" : "短信模板名字(smsTemplateName ↔ draft_sms_message.name)"
|
|
1471
|
+
},
|
|
1472
|
+
"smsType" : {
|
|
1473
|
+
"type" : "string",
|
|
1474
|
+
"description" : "短信类型(smsType ↔ draft_sms_message.sms_type,SendCloudSmsTypeEnum)"
|
|
1475
|
+
},
|
|
1476
|
+
"status" : {
|
|
1477
|
+
"type" : "integer",
|
|
1478
|
+
"description" : "模板审核状态(status ↔ draft_sms_message.status,SmsMessageStatusEnum):读向携带(round-trip 保真);声明式建行缺省 AUDITING(1)——spec 未携带且新建行时置 AUDITING,宁可拒发不可误发(执行面非 JA 环境 status≠PASS 拒发);JA 私有化存量可显式携带 PASS(2)"
|
|
1479
|
+
}
|
|
1480
|
+
}
|
|
1481
|
+
},
|
|
1482
|
+
"MissAddConfigDTO" : {
|
|
1483
|
+
"type" : "object",
|
|
1484
|
+
"properties" : { }
|
|
1485
|
+
},
|
|
1486
|
+
"AutomationUpdateAttrsDTO" : {
|
|
1487
|
+
"type" : "object",
|
|
1488
|
+
"description" : "Q-Robot 更新(subType=update):targetFilterRules 定位目标行,fieldMappings 写字段。【Q-Robot 三层筛选】① tableFilterRules=编辑器「表格筛选条件」,筛源应用(当前流程)子表行,legacy tableFilterCondition;② targetFilterRules=编辑器「更新哪些数据」,筛目标应用(appKey)主记录/目标子表行,legacy qrobotQueFilterFormula/filterCondition;③ fieldMappings[].tableRowOperations=「表格更新规则」,写目标子表行内容。目标子表行定位写在 targetFilterRules,不要写在 tableFilterRules。",
|
|
1489
|
+
"properties" : {
|
|
1490
|
+
"appKey" : {
|
|
1491
|
+
"type" : "string",
|
|
1492
|
+
"description" : "目标应用 appKey",
|
|
1493
|
+
"minLength" : 1,
|
|
1494
|
+
"x-resource-ref" : {
|
|
1495
|
+
"resourceType" : "application",
|
|
1496
|
+
"guidance" : "Select an application to update"
|
|
1497
|
+
}
|
|
1498
|
+
},
|
|
1499
|
+
"fieldMappings" : {
|
|
1500
|
+
"type" : "array",
|
|
1501
|
+
"minItems" : 1,
|
|
1502
|
+
"items" : {
|
|
1503
|
+
"$ref" : "#/$defs/QRobotRelationRuleDTO"
|
|
1504
|
+
},
|
|
1505
|
+
"description" : "字段映射(fieldMappings):更新哪些字段及取值"
|
|
1506
|
+
},
|
|
1507
|
+
"missAdd" : {
|
|
1508
|
+
"$ref" : "#/$defs/MissAddConfigDTO",
|
|
1509
|
+
"description" : "未匹配到记录时是否新增(missAdd)"
|
|
1510
|
+
},
|
|
1511
|
+
"tableFilterRules" : {
|
|
1512
|
+
"type" : "array",
|
|
1513
|
+
"items" : {
|
|
1514
|
+
"$ref" : "#/$defs/AutomationTableFilterRuleDTO"
|
|
1515
|
+
},
|
|
1516
|
+
"description" : "源应用表格筛选(tableFilterRules):编辑器「表格筛选条件」。在映射写入目标应用前,限定当前流程(源应用)子表参与操作的行。tableFieldId 为源子表 fieldId;filterRules 内 fieldId 须为该源子表下的子字段,仅 matchType=literal。Legacy tableFilterCondition。与 targetFilterRules 无关。"
|
|
1517
|
+
},
|
|
1518
|
+
"targetFilterRules" : {
|
|
1519
|
+
"type" : "array",
|
|
1520
|
+
"minItems" : 1,
|
|
1521
|
+
"items" : {
|
|
1522
|
+
"$ref" : "#/$defs/FilterRuleGroupDTO"
|
|
1523
|
+
},
|
|
1524
|
+
"description" : "更新哪些数据(targetFilterRules):编辑器「更新哪些数据/+筛选数据」。fieldId 属于目标应用(appKey);matchType=field_ref 时 values[0] 为源应用 fieldId 字符串。若按目标子表某行定位主记录,在此对目标子表的子字段写筛选(非 tableFilterRules)。Legacy qrobotQueFilterFormula / filterCondition。"
|
|
1525
|
+
}
|
|
1526
|
+
},
|
|
1527
|
+
"required" : [ "appKey", "fieldMappings", "targetFilterRules" ]
|
|
1528
|
+
},
|
|
1529
|
+
"CCAttrsDTO" : {
|
|
1530
|
+
"type" : "object",
|
|
1531
|
+
"description" : "【WHAT】抄送节点(cc):通知成员查看流程与数据,通常不阻塞主路径、不产生必须处理的审批待办。【WHY】让相关人知情(财务抄送、管理层知会);可限制可见字段与是否查看审批记录。【HOW】配置 receivers、auditRecordVisible、fieldPermissions;未列出字段默认 readonly。",
|
|
1532
|
+
"properties" : {
|
|
1533
|
+
"auditRecordVisible" : {
|
|
1534
|
+
"type" : "boolean",
|
|
1535
|
+
"description" : "抄送人是否可查看审批记录(auditRecordVisible)"
|
|
1536
|
+
},
|
|
1537
|
+
"fieldPermissions" : {
|
|
1538
|
+
"type" : "array",
|
|
1539
|
+
"items" : {
|
|
1540
|
+
"$ref" : "#/$defs/FieldPermissionDTO"
|
|
1541
|
+
},
|
|
1542
|
+
"description" : "字段权限(fieldPermissions)【抄送节点】 WHAT:抄送人查看流程数据时可见哪些字段。 WHY:知会场景通常只读,避免泄露或误改敏感字段。 HOW:未列出字段默认 readonly;隐藏用 hide。 缺省补齐(Spec→Legacy):可只写需特殊处理的字段;Apply 时按应用字段全集(questionIndex)展开。applicant 未列出→edit;filling/approval/cc 未列出→readonly(仅可见)。已显式列出的 fieldId(含 hide)不被覆盖。表格字段可配 addRow/deleteRow/editRow。"
|
|
1543
|
+
},
|
|
1544
|
+
"receivers" : {
|
|
1545
|
+
"type" : "array",
|
|
1546
|
+
"minItems" : 1,
|
|
1547
|
+
"items" : {
|
|
1548
|
+
"$ref" : "#/$defs/MemberRefDTO"
|
|
1549
|
+
},
|
|
1550
|
+
"description" : "抄送对象(receivers):用户/部门/角色,至少一人"
|
|
1551
|
+
}
|
|
1552
|
+
},
|
|
1553
|
+
"required" : [ "receivers" ]
|
|
1554
|
+
},
|
|
1555
|
+
"FillingAttrsDTO" : {
|
|
1556
|
+
"type" : "object",
|
|
1557
|
+
"description" : "【WHAT】填写节点(filling):指派处理人补充或修改表单中的少量字段,完成后流转下游;会产生待办(任务中心)。【WHY】当信息需由非申请人(销售助理、主管、财务等)补录时使用;区别于审批节点不做通过/驳回决策。【HOW】配置 responsible(至少一人)、auditFeedback、auditRecordVisible(审批记录可见性)、timeoutConfig、fieldPermissions;典型场景:补全客户资料、上传附件、核对金额;fieldPermissions 须显式列出需 edit 的 fieldId,否则未列出字段在 Apply 后均为 readonly(设计器「仅可见」)。",
|
|
1558
|
+
"properties" : {
|
|
1559
|
+
"auditFeedback" : {
|
|
1560
|
+
"type" : "boolean",
|
|
1561
|
+
"description" : "是否开启处理反馈(auditFeedback)"
|
|
1562
|
+
},
|
|
1563
|
+
"auditRecordVisible" : {
|
|
1564
|
+
"type" : "boolean",
|
|
1565
|
+
"description" : "审批记录是否对提交人可见(auditRecordVisible):true=提交人可见审批明细;未提供(缺省)时 apply 保留库中现值,但节点删除重建会回退 true(引擎默认可见)"
|
|
1566
|
+
},
|
|
1567
|
+
"designatedMembers" : {
|
|
1568
|
+
"type" : "array",
|
|
1569
|
+
"items" : {
|
|
1570
|
+
"$ref" : "#/$defs/MemberRefDTO"
|
|
1571
|
+
},
|
|
1572
|
+
"description" : "节点无负责人时的指定处理人(designatedMembers):type=user + uid;仅常规负责人解析为空时生效,与负责人独立配置"
|
|
1573
|
+
},
|
|
1574
|
+
"fieldPermissions" : {
|
|
1575
|
+
"type" : "array",
|
|
1576
|
+
"items" : {
|
|
1577
|
+
"$ref" : "#/$defs/FieldPermissionDTO"
|
|
1578
|
+
},
|
|
1579
|
+
"description" : "字段权限(fieldPermissions)【填写节点】 WHAT:控制填写人打开待办时能改哪些字段;其余字段仅可见或隐藏。 WHY:填写节点通常只补少量字段,默认其余只读以防误改。 HOW:须为每个需要可编辑的 fieldId 写 fieldAuth=edit;只写 1~2 项会导致其余全部仅可见。 缺省补齐(Spec→Legacy):可只写需特殊处理的字段;Apply 时按应用字段全集(questionIndex)展开。applicant 未列出→edit;filling/approval/cc 未列出→readonly(仅可见)。已显式列出的 fieldId(含 hide)不被覆盖。表格字段可配 addRow/deleteRow/editRow。 示例:[{fieldId:343283775,fieldAuth:\"edit\"},{fieldId:343283769,fieldAuth:\"edit\"}]",
|
|
1580
|
+
"comment" : "[{\"fieldId\":343283775,\"fieldAuth\":\"edit\"},{\"fieldId\":343283769,\"fieldAuth\":\"edit\"}]"
|
|
1581
|
+
},
|
|
1582
|
+
"responsible" : {
|
|
1583
|
+
"type" : "array",
|
|
1584
|
+
"minItems" : 1,
|
|
1585
|
+
"items" : {
|
|
1586
|
+
"$ref" : "#/$defs/MemberRefDTO"
|
|
1587
|
+
},
|
|
1588
|
+
"description" : "填写处理人(responsible):用户/部门/角色引用,至少一人"
|
|
1589
|
+
},
|
|
1590
|
+
"timeoutConfig" : {
|
|
1591
|
+
"$ref" : "#/$defs/TimeoutConfigDTO",
|
|
1592
|
+
"description" : "超时策略(timeoutConfig):超时提醒、自动处理等"
|
|
1593
|
+
}
|
|
1594
|
+
},
|
|
1595
|
+
"required" : [ "responsible" ],
|
|
1596
|
+
"x-capability-boundaries" : [ {
|
|
1597
|
+
"capability" : "human_task_filling",
|
|
1598
|
+
"description" : "Assignee supplements few form fields; creates task-center todo",
|
|
1599
|
+
"level" : "core",
|
|
1600
|
+
"constraints" : [ "requires responsible (>=1)", "fieldPermissions: omitted fields default readonly (visible only)", "explicit edit required per fieldId that must be editable" ]
|
|
1601
|
+
} ]
|
|
1602
|
+
},
|
|
1603
|
+
"GatewayAttrsDTO" : {
|
|
1604
|
+
"type" : "object",
|
|
1605
|
+
"description" : "【WHAT】网关节点(gateway):在 edges.edges[] 中作为多条边的共同端点,表达分叉或汇合。【WHY】parallel 映射 legacy type=1 分叉壳;join 由多条 branch_end 路径共享目标的拓扑推导。【HOW】mode=parallel 作 fork(出边≥2);mode=join 作汇合(入边≥2、出边恰1)。join 写向折叠消失,不生成 legacy 节点;目标节点 sync 表达等待语义。详见 patterns.md#P03、#P02。",
|
|
1606
|
+
"properties" : {
|
|
1607
|
+
"mode" : {
|
|
1608
|
+
"type" : "string",
|
|
1609
|
+
"description" : "网关模式(mode)。parallel:legacy 分叉壳映射,edges 中 ≥2 条出边 from=本节点 id(P03a 条件选路 / P03b 多路同时)。join:legacy 汇合拓扑合成,≥2 入边 to=本节点 id、出边恰1(P02);apply 时折叠为路径终点 branch_end 标记,不建独立 legacy 行。省略→parallel。",
|
|
1610
|
+
"enum" : [ "parallel", "join" ]
|
|
1611
|
+
}
|
|
1612
|
+
},
|
|
1613
|
+
"x-gateway-constraints" : [ "mode omitted or parallel: node must have >= 2 outgoing edges in spec.edges.edges", "mode=join: topology-derived convergence marker; node must have >= 2 incoming and exactly 1 outgoing edge", "parallel fork allows multiple default condition edges (no single-default limit)" ]
|
|
1614
|
+
},
|
|
1615
|
+
"SharerAttrsDTO" : {
|
|
1616
|
+
"type" : "object",
|
|
1617
|
+
"description" : "【WHAT】分享者节点(sharer):legacy 人工节点,处理人为数据分享者(动态解析),由历史编辑器创建。【WHY】存量流程兼容:spec 读面必须能表达并 round-trip 保真,否则含 sharer 节点的流程整包不可读。【HOW】type=sharer,attrs.responsible 为节点人员快照(负责人员 round-trip 保真)。【NOT】legacy-only 形态:agent 不应创建 sharer 节点;spec:apply 也不应把其他类型改写为 sharer。",
|
|
1618
|
+
"properties" : {
|
|
1619
|
+
"responsible" : {
|
|
1620
|
+
"type" : "array",
|
|
1621
|
+
"items" : {
|
|
1622
|
+
"$ref" : "#/$defs/MemberRefDTO"
|
|
1623
|
+
},
|
|
1624
|
+
"description" : "节点负责人(responsible):分享者节点的人员快照;legacy-only 形态,用于存量流程 round-trip 保真,agent 不应创建 sharer 节点"
|
|
1625
|
+
}
|
|
1626
|
+
},
|
|
1627
|
+
"required" : [ "responsible" ]
|
|
1628
|
+
},
|
|
1629
|
+
"WorkflowSpecNodes" : {
|
|
1630
|
+
"type" : "object",
|
|
1631
|
+
"description" : "轻流工作流核心结构:nodes 为节点列表,edges.edges 为显式 from/to 边列表",
|
|
1632
|
+
"properties" : {
|
|
1633
|
+
"edges" : {
|
|
1634
|
+
"$ref" : "#/$defs/WorkflowEdgesDTO",
|
|
1635
|
+
"description" : "工作流边容器(edges):edges 为显式边列表"
|
|
1636
|
+
},
|
|
1637
|
+
"nodes" : {
|
|
1638
|
+
"type" : "array",
|
|
1639
|
+
"minItems" : 1,
|
|
1640
|
+
"items" : {
|
|
1641
|
+
"$ref" : "#/$defs/WorkflowNodeDTO"
|
|
1642
|
+
},
|
|
1643
|
+
"description" : "工作流节点列表。type 决定业务角色:applicant(发起)、filling(填写)、approval(审批)、gateway(并行 fork/join)、cc(抄送)、automation(Q-Robot)、admin(工作区管理员,legacy-only)、sharer(分享者,legacy-only)"
|
|
1644
|
+
}
|
|
1645
|
+
},
|
|
1646
|
+
"required" : [ "edges", "nodes" ]
|
|
1647
|
+
},
|
|
1648
|
+
"LiteralAssignmentValueDTO" : {
|
|
1649
|
+
"type" : "object",
|
|
1650
|
+
"description" : "Q-Robot 结构化字面量赋值:matchType=literal 且目标字段为日期/选项/成员等复杂类型时使用;简单字段可直接用 string/number 或 {\"value\":\"...\"}",
|
|
1651
|
+
"properties" : {
|
|
1652
|
+
"end" : {
|
|
1653
|
+
"type" : "string",
|
|
1654
|
+
"description" : "日期区间结束(end),valueType=date_range 时必填"
|
|
1655
|
+
},
|
|
1656
|
+
"start" : {
|
|
1657
|
+
"type" : "string",
|
|
1658
|
+
"description" : "日期区间起始(start),valueType=date_range 时必填"
|
|
1659
|
+
},
|
|
1660
|
+
"value" : {
|
|
1661
|
+
"type" : "string",
|
|
1662
|
+
"description" : "单值 payload(value):日期、选项 id、成员 id、JSON 字符串等"
|
|
1663
|
+
},
|
|
1664
|
+
"valueType" : {
|
|
1665
|
+
"type" : "string",
|
|
1666
|
+
"description" : "字面量类型(valueType):date/option/member 等用 value;options/members 用 values 数组;date_range 用 start+end",
|
|
1667
|
+
"enum" : [ "date", "date_range", "option", "options", "member", "members", "reference", "json" ]
|
|
1554
1668
|
},
|
|
1555
|
-
"
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
"properties": {
|
|
1563
|
-
"responsible": {
|
|
1564
|
-
"type": "array",
|
|
1565
|
-
"minItems": 1,
|
|
1566
|
-
"items": {
|
|
1567
|
-
"$ref": "#/$defs/MemberRefDTO"
|
|
1568
|
-
},
|
|
1569
|
-
"description": "审批人(responsible):用户/部门/角色,至少一人"
|
|
1570
|
-
},
|
|
1571
|
-
"approveType": {
|
|
1572
|
-
"type": "string",
|
|
1573
|
-
"description": "审批方式(approveType):or=或签(一人通过即可);and=会签(须全部通过)",
|
|
1574
|
-
"enum": [
|
|
1575
|
-
"or",
|
|
1576
|
-
"and"
|
|
1577
|
-
]
|
|
1578
|
-
},
|
|
1579
|
-
"auditUserType": {
|
|
1580
|
-
"type": "string",
|
|
1581
|
-
"description": "审批人类型(auditUserType):normal=普通;graded=逐级审批",
|
|
1582
|
-
"enum": [
|
|
1583
|
-
"normal",
|
|
1584
|
-
"graded"
|
|
1585
|
-
]
|
|
1586
|
-
},
|
|
1587
|
-
"revertScope": {
|
|
1588
|
-
"type": "string",
|
|
1589
|
-
"description": "退回范围(revertScope):可退回到哪些历史节点"
|
|
1590
|
-
},
|
|
1591
|
-
"transferScope": {
|
|
1592
|
-
"type": "string",
|
|
1593
|
-
"description": "转交范围(transferScope):允许转交给谁"
|
|
1594
|
-
},
|
|
1595
|
-
"auditFeedback": {
|
|
1596
|
-
"type": "boolean",
|
|
1597
|
-
"description": "是否开启审批意见(auditFeedback)"
|
|
1598
|
-
},
|
|
1599
|
-
"commentStatus": {
|
|
1600
|
-
"type": "boolean",
|
|
1601
|
-
"description": "是否开启留言(commentStatus):负责人可留言并查看历史留言"
|
|
1602
|
-
},
|
|
1603
|
-
"revert": {
|
|
1604
|
-
"type": "boolean",
|
|
1605
|
-
"description": "是否允许流程回退(revert):true 时配合 revertScope 启用退回上一节点等能力"
|
|
1606
|
-
},
|
|
1607
|
-
"countersignConfig": {
|
|
1608
|
-
"$ref": "#/$defs/CountersignConfigDTO",
|
|
1609
|
-
"description": "加签配置(countersignConfig):负责人加签其他成员共同审批"
|
|
1610
|
-
},
|
|
1611
|
-
"endWorkflowConfig": {
|
|
1612
|
-
"$ref": "#/$defs/EndWorkflowConfigDTO",
|
|
1613
|
-
"description": "结束流程配置(endWorkflowConfig):负责人手动结束流程"
|
|
1614
|
-
},
|
|
1615
|
-
"timeoutConfig": {
|
|
1616
|
-
"$ref": "#/$defs/TimeoutConfigDTO",
|
|
1617
|
-
"description": "超时配置(timeoutConfig):超时提醒、自动通过/驳回等"
|
|
1618
|
-
},
|
|
1619
|
-
"gradedAuditConfig": {
|
|
1620
|
-
"$ref": "#/$defs/GradedAuditConfigDTO",
|
|
1621
|
-
"description": "逐级审批配置(gradedAuditConfig),auditUserType=graded 时必填;startResponsible 为审批起点"
|
|
1622
|
-
},
|
|
1623
|
-
"signConfig": {
|
|
1624
|
-
"$ref": "#/$defs/SignConfigDTO",
|
|
1625
|
-
"description": "加签配置(signConfig)"
|
|
1626
|
-
},
|
|
1627
|
-
"buttonText": {
|
|
1628
|
-
"$ref": "#/$defs/ButtonTextConfigDTO",
|
|
1629
|
-
"description": "按钮文案(buttonText):通过/驳回等按钮显示文字"
|
|
1630
|
-
},
|
|
1631
|
-
"switches": {
|
|
1632
|
-
"$ref": "#/$defs/SwitchConfigDTO",
|
|
1633
|
-
"description": "功能开关(switches):如允许暂存、批量审批等"
|
|
1634
|
-
},
|
|
1635
|
-
"fieldPermissions": {
|
|
1636
|
-
"type": "array",
|
|
1637
|
-
"items": {
|
|
1638
|
-
"$ref": "#/$defs/FieldPermissionDTO"
|
|
1639
|
-
},
|
|
1640
|
-
"description": "字段权限(fieldPermissions)【审批节点】 WHAT:审批人处理待办时对字段的可见/可编辑/隐藏。 WHY:审批人多数场景只读查看,少数场景允许改指定字段。 HOW:未列出字段默认 readonly;需可编辑时显式 edit。 缺省补齐(Spec→Legacy):可只写需特殊处理的字段;Apply 时按应用字段全集(questionIndex)展开。applicant 未列出→edit;filling/approval/cc 未列出→readonly(仅可见)。已显式列出的 fieldId(含 hide)不被覆盖。表格字段可配 addRow/deleteRow/editRow。",
|
|
1641
|
-
"comment": "[{\"fieldId\":343283769,\"fieldAuth\":\"readonly\"}]"
|
|
1642
|
-
},
|
|
1643
|
-
"feedbackConfigs": {
|
|
1644
|
-
"type": "array",
|
|
1645
|
-
"items": {
|
|
1646
|
-
"$ref": "#/$defs/FeedbackConfigDTO"
|
|
1647
|
-
},
|
|
1648
|
-
"description": "反馈配置(feedbackConfigs)"
|
|
1649
|
-
}
|
|
1650
|
-
},
|
|
1651
|
-
"required": [
|
|
1652
|
-
"responsible",
|
|
1653
|
-
"approveType",
|
|
1654
|
-
"auditUserType"
|
|
1655
|
-
],
|
|
1656
|
-
"x-capability-boundaries": [
|
|
1657
|
-
{
|
|
1658
|
-
"capability": "human_task_approval",
|
|
1659
|
-
"description": "Approver pass/reject/transfer/revert; creates task-center todo",
|
|
1660
|
-
"level": "core",
|
|
1661
|
-
"constraints": [
|
|
1662
|
-
"requires responsible unless auditUserType=graded (use gradedAuditConfig)",
|
|
1663
|
-
"approveType or|and; auditUserType normal|graded",
|
|
1664
|
-
"fieldPermissions: omitted fields default readonly"
|
|
1665
|
-
]
|
|
1666
|
-
}
|
|
1667
|
-
]
|
|
1668
|
-
},
|
|
1669
|
-
"GatewayAttrsDTO": {
|
|
1670
|
-
"type": "object",
|
|
1671
|
-
"description": "【WHAT】网关节点(gateway):在 edges.edges[] 中作为多条边的共同端点,表达分叉或汇合。【WHY】分支逻辑挂在出边 condition 上,不再使用 branch/condition 节点。【HOW】mode=parallel 作 fork(出边≥2);mode=join 作汇合(入边≥2、出边≤1)。详见 patterns.md#P03、#P02。",
|
|
1672
|
-
"properties": {
|
|
1673
|
-
"mode": {
|
|
1674
|
-
"type": "string",
|
|
1675
|
-
"description": "网关模式(mode)。parallel:fork,edges 中 ≥2 条出边 from=本节点 id(P03a 条件选路 / P03b 多路同时)。join:汇合,≥2 入边 to=本节点 id、出边≤1(P02)。省略→parallel。",
|
|
1676
|
-
"enum": [
|
|
1677
|
-
"parallel",
|
|
1678
|
-
"join"
|
|
1679
|
-
]
|
|
1680
|
-
}
|
|
1681
|
-
},
|
|
1682
|
-
"x-gateway-constraints": [
|
|
1683
|
-
"mode omitted or parallel: node must have >= 2 outgoing edges in spec.edges.edges",
|
|
1684
|
-
"mode=join: node must have >= 2 incoming and <= 1 outgoing edges",
|
|
1685
|
-
"parallel fork allows multiple default condition edges (no single-default limit)"
|
|
1686
|
-
]
|
|
1687
|
-
},
|
|
1688
|
-
"WorkflowSpecNodes": {
|
|
1689
|
-
"type": "object",
|
|
1690
|
-
"description": "轻流工作流核心结构:nodes 为节点列表,edges.edges 为显式 from/to 边列表",
|
|
1691
|
-
"properties": {
|
|
1692
|
-
"nodes": {
|
|
1693
|
-
"type": "array",
|
|
1694
|
-
"minItems": 1,
|
|
1695
|
-
"items": {
|
|
1696
|
-
"$ref": "#/$defs/WorkflowNodeDTO"
|
|
1697
|
-
},
|
|
1698
|
-
"description": "工作流节点列表。type 决定业务角色:applicant(发起)、filling(填写)、approval(审批)、gateway(并行 fork/join)、cc(抄送)、automation(Q-Robot)"
|
|
1699
|
-
},
|
|
1700
|
-
"edges": {
|
|
1701
|
-
"$ref": "#/$defs/WorkflowEdgesDTO",
|
|
1702
|
-
"description": "工作流边容器(edges):edges 为显式边列表"
|
|
1703
|
-
}
|
|
1704
|
-
},
|
|
1705
|
-
"required": [
|
|
1706
|
-
"nodes",
|
|
1707
|
-
"edges"
|
|
1708
|
-
]
|
|
1709
|
-
},
|
|
1710
|
-
"LiteralAssignmentValueDTO": {
|
|
1711
|
-
"type": "object",
|
|
1712
|
-
"description": "Q-Robot 结构化字面量赋值:matchType=literal 且目标字段为日期/选项/成员等复杂类型时使用;简单字段可直接用 string/number 或 {\"value\":\"...\"}",
|
|
1713
|
-
"properties": {
|
|
1714
|
-
"valueType": {
|
|
1715
|
-
"type": "string",
|
|
1716
|
-
"description": "字面量类型(valueType):date/option/member 等用 value;options/members 用 values 数组;date_range 用 start+end",
|
|
1717
|
-
"enum": [
|
|
1718
|
-
"date",
|
|
1719
|
-
"date_range",
|
|
1720
|
-
"option",
|
|
1721
|
-
"options",
|
|
1722
|
-
"member",
|
|
1723
|
-
"members",
|
|
1724
|
-
"reference",
|
|
1725
|
-
"json"
|
|
1726
|
-
]
|
|
1727
|
-
},
|
|
1728
|
-
"value": {
|
|
1729
|
-
"type": "string",
|
|
1730
|
-
"description": "单值 payload(value):日期、选项 id、成员 id、JSON 字符串等"
|
|
1731
|
-
},
|
|
1732
|
-
"values": {
|
|
1733
|
-
"type": "array",
|
|
1734
|
-
"minItems": 1,
|
|
1735
|
-
"items": {
|
|
1736
|
-
"type": "string"
|
|
1737
|
-
},
|
|
1738
|
-
"description": "多值 payload(values):多选选项、多成员等"
|
|
1739
|
-
},
|
|
1740
|
-
"start": {
|
|
1741
|
-
"type": "string",
|
|
1742
|
-
"description": "日期区间起始(start),valueType=date_range 时必填"
|
|
1743
|
-
},
|
|
1744
|
-
"end": {
|
|
1745
|
-
"type": "string",
|
|
1746
|
-
"description": "日期区间结束(end),valueType=date_range 时必填"
|
|
1747
|
-
}
|
|
1748
|
-
},
|
|
1749
|
-
"required": [
|
|
1750
|
-
"valueType"
|
|
1751
|
-
]
|
|
1669
|
+
"values" : {
|
|
1670
|
+
"type" : "array",
|
|
1671
|
+
"minItems" : 1,
|
|
1672
|
+
"items" : {
|
|
1673
|
+
"type" : "string"
|
|
1674
|
+
},
|
|
1675
|
+
"description" : "多值 payload(values):多选选项、多成员等"
|
|
1752
1676
|
}
|
|
1677
|
+
},
|
|
1678
|
+
"required" : [ "valueType" ]
|
|
1753
1679
|
}
|
|
1680
|
+
}
|
|
1754
1681
|
}
|