weaver-work-cli 0.1.25 → 0.1.26
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 +30 -30
- package/dist/cmd/root.js +1 -0
- package/dist/core/runtime-agent.js +19 -0
- package/dist/internal/e10/auth/commands.js +47 -27
- package/dist/internal/e10/auth/xiaoe.js +62 -43
- package/dist/internal/e10/context.js +5 -27
- package/dist/shortcuts/archive-oa/constants.js +66 -0
- package/dist/shortcuts/archive-oa/continuation.js +70 -0
- package/dist/shortcuts/archive-oa/errors.js +53 -0
- package/dist/shortcuts/archive-oa/host.js +157 -0
- package/dist/shortcuts/archive-oa/index.js +225 -0
- package/dist/shortcuts/archive-oa/manifest.js +62 -0
- package/dist/shortcuts/archive-oa/operations/borrow-car.js +159 -0
- package/dist/shortcuts/archive-oa/operations/borrow-url.js +108 -0
- package/dist/shortcuts/archive-oa/operations/confirm.js +48 -0
- package/dist/shortcuts/archive-oa/operations/contract.js +120 -0
- package/dist/shortcuts/archive-oa/operations/locate.js +50 -0
- package/dist/shortcuts/archive-oa/operations/registry.js +40 -0
- package/dist/shortcuts/archive-oa/operations/shared.js +181 -0
- package/dist/shortcuts/archive-oa/operations/types.js +45 -0
- package/dist/shortcuts/archive-oa/operations.js +13 -0
- package/dist/shortcuts/index.js +2 -0
- package/dist/shortcuts/invoice/host.js +2 -1
- package/dist/shortcuts/invoice/manifest.js +111 -0
- package/dist/shortcuts/invoice/operations/issuing-qys.js +361 -0
- package/dist/shortcuts/invoice/operations/issuing.js +5 -5
- package/dist/shortcuts/invoice/operations/registry.js +4 -0
- package/dist/shortcuts/workflow/endpoints.js +11 -0
- package/dist/shortcuts/workflow/host.js +2 -2
- package/dist/shortcuts/workflow/index.js +6 -36
- package/dist/shortcuts/workflow/operations/chatscene.js +270 -0
- package/dist/shortcuts/workflow/operations/form.js +899 -158
- package/dist/shortcuts/workflow/operations/read.js +111 -6
- package/dist/shortcuts/workflow/operations/sign-input.js +106 -0
- package/dist/shortcuts/workflow/operations/write.js +9 -1
- package/dist/shortcuts/workflow/stdout-compact.js +9 -1
- package/docs/archive-oa.md +79 -0
- package/docs/e10-auth.md +7 -6
- package/package.json +1 -1
- package/skill-template/business-info.json +16 -0
- package/skill-template/domains/archive-oa.md +19 -0
- package/skill-template/domains/yepiaotong.md +2 -2
- package/skills/weaver-e10-archive-oa/SKILL.md +159 -0
- package/skills/weaver-e10-archive-oa/references/archive-locate.md +49 -0
- package/skills/weaver-e10-archive-oa/references/borrow-car.md +76 -0
- package/skills/weaver-e10-archive-oa/references/borrow-flow.md +53 -0
- package/skills/weaver-e10-archive-oa/references/contract-search.md +63 -0
- package/skills/weaver-e10-archive-oa/references/disabled-capabilities.md +29 -0
- package/skills/weaver-e10-archive-oa/references/qys-contract-search.md +47 -0
- package/skills/weaver-e10-archive-oa/references/source-manifest.json +400 -0
- package/skills/weaver-e10-builder/SKILL.md +22 -0
- package/skills/weaver-e10-caizhilian/SKILL.md +37 -15
- package/skills/weaver-e10-caizhilian/references/agent-entry.md +7 -3
- package/skills/weaver-e10-caizhilian/references/collaboration.md +5 -3
- package/skills/weaver-e10-caizhilian/references/document.md +33 -11
- package/skills/weaver-e10-caizhilian/references/file-collection.md +4 -3
- package/skills/weaver-e10-caizhilian/references/file-upload.md +2 -3
- package/skills/weaver-e10-caizhilian/references/files.md +9 -3
- package/skills/weaver-e10-caizhilian/references/folder.md +48 -16
- package/skills/weaver-e10-caizhilian/references/setting-attach.md +13 -39
- package/skills/weaver-e10-caizhilian/references/setting-backup.md +13 -51
- package/skills/weaver-e10-caizhilian/references/setting-encrypt.md +20 -51
- package/skills/weaver-e10-caizhilian/references/setting-storage.md +82 -147
- package/skills/weaver-e10-caizhilian/references/withheld.md +20 -44
- package/skills/weaver-e10-shared/SKILL.md +22 -20
- package/skills/weaver-e10-shared/references/e10-auth-and-session.md +14 -15
- package/skills/weaver-e10-shared/references/non-interactive-environment.md +10 -10
- package/skills/weaver-e10-workflow/references/source-manifest.json +32 -22
- package/skills/weaver-e10-workflow/references/workflow-create.md +68 -28
- package/skills/weaver-e10-yepiaotong/SKILL.md +10 -7
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-examples.md +49 -1
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-qys-ledger.md +66 -0
- package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +59 -36
- package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +54 -509
- package/skills/weaver-e10-yepiaotong/references/reim-examples.md +182 -345
- package/skills/weaver-e10-yepiaotong/references/reim-expense-subject-rules.md +4 -5
- package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +153 -345
- package/skills/weaver-e10-yepiaotong/references/reim-phone-subsidy-rules.md +5 -5
- package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +182 -154
- package/skills/weaver-e10-yepiaotong/references/source-manifest.json +96 -0
- package/skills/weaver-e10-yepiaotong/references/reim-fast-path.md +0 -119
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# 话费补贴 / 话费报销规范(硬拦截)
|
|
2
2
|
|
|
3
3
|
> **命中「话费补贴标准审批流程」或「话费报销」时必须严格执行本文件,禁止按普通发票金额直接填单。**
|
|
4
|
-
> **材料不齐、岗位标准未确认、或无法拆出可报销账单金额时,禁止调用 `
|
|
4
|
+
> **材料不齐、岗位标准未确认、或无法拆出可报销账单金额时,禁止调用 `workflow.createRequest`。**
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -83,9 +83,9 @@
|
|
|
83
83
|
|
|
84
84
|
| 字段 | 怎么填 |
|
|
85
85
|
|------|--------|
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
| 费用类型(科目) |
|
|
86
|
+
| 明细里 `createForm` 返回的可写金额字段(申请金额等;实报金额、人民币金额不可写,不传) | 填本规范算出的**实报金额**,不要填发票原价 |
|
|
87
|
+
| 主表金额字段(仅当出现在 `createForm` 的 `fields` 里时才传) | 各行实报金额之和 |
|
|
88
|
+
| 费用类型(科目) | 通讯科目,写成 `"{科目名称}(100502270000000010)"`(`invoice.reim.row-info` 的 `subjectId` 已是通讯类时可直接用,名称取 `subjectName`) |
|
|
89
89
|
| 费用说明 | 写清所属月份、可报销账单金额、岗位上限、实报金额,例如 `2026-08话费 账单280 上限200 实报200`(禁止 `*` 号) |
|
|
90
90
|
|
|
91
91
|
> 这是「金额一律填发票 `amount`」的**唯一覆盖规则**,只适用于本规范命中的话费报销。发票原始 `amount` 仍须原样保留在上下文中,不得改写发票数据本身。
|
|
@@ -145,5 +145,5 @@ cusCreateDateEnd = 最晚发票 invoiceDate
|
|
|
145
145
|
4. 按账单构成剔除赠送套餐、家庭宽带,算出可报销账单金额
|
|
146
146
|
5. 按 `min(可报销账单金额, 上限)` 得到实报金额,展示给用户确认
|
|
147
147
|
6. 查询事前申请时使用 **3 年回溯**(`cusCreateDateStart` 往前推 1095 天),用 `requestname="话费"` 缩小范围
|
|
148
|
-
7. 匹配到事前申请后,用户确认,才允许进入
|
|
148
|
+
7. 匹配到事前申请后,用户确认,才允许进入 [reim-workflow.md](reim-workflow.md) Step 5(预览确认 → `workflow.createRequest`)
|
|
149
149
|
8. 材料不齐、岗位未确认、账单构成无法拆分、或用户拒绝 → **结束流程,禁止创建**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# AI 报销单自动填单 — 工作流编排
|
|
2
2
|
|
|
3
3
|
> 本文件是报销自动填单的完整工作流参考。
|
|
4
|
-
>
|
|
5
|
-
>
|
|
4
|
+
> 发票、事前申请、预填信息等数据准备走本技能的 `weaver-work-cli --json invoice run <operation>`;**报销单的创建与修改统一走 `weaver-e10-workflow` 技能**(`workflow.createForm` / `workflow.createRequest` / `workflow.edit*`),命令契约与返回处置见 [`../../weaver-e10-workflow/references/workflow-create.md`](../../weaver-e10-workflow/references/workflow-create.md) 与 [`workflow-edit.md`](../../weaver-e10-workflow/references/workflow-edit.md)。
|
|
5
|
+
> 所有调用都必须通过 CLI 执行,不能直接 curl E10 接口。
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -31,21 +31,19 @@
|
|
|
31
31
|
|
|
32
32
|
## 报销共享常量(所有 reference 统一引用本节)
|
|
33
33
|
|
|
34
|
-
以下常量在报销 reference
|
|
34
|
+
以下常量在报销 reference 中多处出现,**统一以本节为准**,其余文件引用本节不再重复定义。浏览按钮类字段一律写成 `名称(ID)`。
|
|
35
35
|
|
|
36
36
|
| 常量 | 值 | 说明 |
|
|
37
37
|
|------|-----|------|
|
|
38
|
-
| 默认合同编号 | `"20260999"` |
|
|
39
|
-
| 非出差相关客户 | `"100504500000311504"` |
|
|
40
|
-
| 兜底费用科目 | `"100502270000000104"` |
|
|
41
|
-
| 人民币币种
|
|
42
|
-
| 报销方式默认值 |
|
|
38
|
+
| 默认合同编号 | `"20260999"` | 用户当次未给出别的合同号时使用;表单默认值已是它时不必再传。用户给了别的合同号 → 承担主体 / 相关客户 / 相关项目以合同联动为准,见 [reim-form-fill-rules.md](reim-form-fill-rules.md#用户给了合同号以合同联动为准) |
|
|
39
|
+
| 非出差相关客户 | `"泛微上海(100504500000311504)"` | 出差流程必须由用户提供具体客户 |
|
|
40
|
+
| 兜底费用科目 | `"其他-管理费用(100502270000000104)"` | 所有科目匹配策略均未命中时使用 |
|
|
41
|
+
| 人民币币种 | `"人民币(100001050000000001)"` | 明细每行必传(即使表单默认带出),否则字段联动失效,见 [reim-form-fill-rules.md](reim-form-fill-rules.md) |
|
|
42
|
+
| 报销方式默认值 | `"银行(个人报销)"` | Select 传选项名;表单默认带出时不传 |
|
|
43
43
|
| 全额红冲状态值 | `status = 8` | `comm_info.pro.status`;此类发票必须过滤,不允许报销 |
|
|
44
44
|
| 相关凭证 typeCode | 17, 18, 57, 58 | 不能独立成行,必须与发票配对 |
|
|
45
|
-
|
|
|
46
|
-
|
|
|
47
|
-
|
|
48
|
-
> **continuation 过期处理**:`prepare`/`auto-prepare` 签发的 continuation 有 600 秒有效期。中间若用户核对耗时过长导致过期(返回 `validation/continuation_expired`),**重新 `prepare` 后立即 `apply` 即可**(用户已确认过的内容无需重新征询)。不要重放旧 continuation。
|
|
45
|
+
| 直接上级取值 | `directSuperior` | ⚠️ **不是 `allSuperiors[0]`**(后者是上级链最高层) |
|
|
46
|
+
| 总部费用报销 | `总部费用报销(100003460000000060)` | 费用明细 `subFormId` = `100003690000000011`(字段清单以 `createForm` 实际返回为准) |
|
|
49
47
|
|
|
50
48
|
---
|
|
51
49
|
|
|
@@ -100,7 +98,7 @@ CLI 已默认 `sreim="3"`、`bill_type=0`、`page_size=10`。报销查票时只
|
|
|
100
98
|
|
|
101
99
|
### 1. 立即获取数据,展示后确认
|
|
102
100
|
|
|
103
|
-
当用户表达报销意图时(如"帮我报销"、"我要报销"、"报销一下"等),**必须立即调用 `invoice.list`
|
|
101
|
+
当用户表达报销意图时(如"帮我报销"、"我要报销"、"报销一下"等),**必须立即调用 `invoice.list`(或 `invoice.reim.candidates.list`)获取发票数据,展示发票汇总信息后询问用户确认,确认后再自动执行后续填单流程**。禁止反问用户要求提供发票信息、事前申请信息、报销用途等。
|
|
104
102
|
|
|
105
103
|
**禁止的行为:**
|
|
106
104
|
|
|
@@ -117,7 +115,7 @@ CLI 已默认 `sreim="3"`、`bill_type=0`、`page_size=10`。报销查票时只
|
|
|
117
115
|
- 最近一周无结果 → 自动用一个月参数再查
|
|
118
116
|
- 直接调用 `invoice.reim.requests.list` 获取用户的事前申请
|
|
119
117
|
- **获取到发票后,先展示发票汇总信息(张数、基础信息),明确告知用户查询范围,询问用户确认是否报销**
|
|
120
|
-
- 用户确认后,自动执行匹配 →
|
|
118
|
+
- 用户确认后,自动执行匹配 → 载入报销表单 → 组装 `data` → 展示预览、用户确认 → `workflow.createRequest` 生成报销单
|
|
121
119
|
|
|
122
120
|
### 2. 根据用户意图智能构建查询条件
|
|
123
121
|
|
|
@@ -150,7 +148,7 @@ CLI 已默认 `sreim="3"`、`bill_type=0`、`page_size=10`。报销查票时只
|
|
|
150
148
|
|
|
151
149
|
| 用户输入 | 起始步骤 |
|
|
152
150
|
|----------|---------|
|
|
153
|
-
| "帮我报销" | 1A → **1C(发票确认)→ 用户确认** → 1B → 2 → 2.5 → 3 →
|
|
151
|
+
| "帮我报销" | 1A → **1C(发票确认)→ 用户确认** → 1B → 2 → 2.5 → 3 → 4 → 5 |
|
|
154
152
|
| "报销打车费" / "报销上周的" | 1A(加筛选条件)→ **1C → 用户确认** → 后续同上 |
|
|
155
153
|
| 提供 fileId | Step 0 → **1C → 用户确认** → 1B → 后续同上 |
|
|
156
154
|
| 直接给发票数据 | **1C → 用户确认** → 1B → 后续同上 |
|
|
@@ -166,9 +164,9 @@ CLI 已默认 `sreim="3"`、`bill_type=0`、`page_size=10`。报销查票时只
|
|
|
166
164
|
|
|
167
165
|
> **⚠️ 禁止输出内部推理过程**。直接对用户说话,不要解释自己在做什么。
|
|
168
166
|
|
|
169
|
-
####
|
|
167
|
+
#### 报销后修正
|
|
170
168
|
|
|
171
|
-
|
|
169
|
+
用户补充缺失字段、修改字段值 → 通过 `workflow.editLoad` → `workflow.editPrepare` → 用户确认 → `workflow.editApply` 完成(Step 6)。
|
|
172
170
|
|
|
173
171
|
### 4. 自动化决策原则
|
|
174
172
|
|
|
@@ -178,7 +176,7 @@ CLI 已默认 `sreim="3"`、`bill_type=0`、`page_size=10`。报销查票时只
|
|
|
178
176
|
- 事前申请有数据 → 自动匹配,不需要用户确认"是否关联"
|
|
179
177
|
- 事前申请为空 → 跳过匹配,直接用发票数据填单,不需要问用户
|
|
180
178
|
- 匹配到唯一结果 → 直接使用,不需要用户确认
|
|
181
|
-
-
|
|
179
|
+
- **只有在必须用户做选择时才暂停**(如:多候选需要选一个、发票列表为空无法继续、**出差流程必须填写相关客户**、创建前确认报销单内容)
|
|
182
180
|
- **⚠️ 严禁篡改任何原始数据值**
|
|
183
181
|
|
|
184
182
|
---
|
|
@@ -190,31 +188,32 @@ CLI 已默认 `sreim="3"`、`bill_type=0`、`page_size=10`。报销查票时只
|
|
|
190
188
|
↓
|
|
191
189
|
Step 0 (可选): invoice.reim.file-ocr.preview → 识别发票
|
|
192
190
|
↓
|
|
193
|
-
Step 1A: invoice.list (可跳过) ←→ Step 1B: invoice.reim.requests.list
|
|
191
|
+
Step 1A: invoice.list / invoice.reim.candidates.list (可跳过) ←→ Step 1B: invoice.reim.requests.list
|
|
194
192
|
↓
|
|
195
193
|
Step 1C: 展示发票汇总 → 用户确认是否报销
|
|
196
194
|
↓ (用户确认)
|
|
197
195
|
Step 2: 发票 ↔ 事前申请匹配绑定 (reim-matching-rules.md)
|
|
198
196
|
↓
|
|
199
|
-
Step 2.5: invoice.reim.workflow.resolve →
|
|
197
|
+
Step 2.5: invoice.reim.workflow.resolve → 获取报销工作流 ID 与名称
|
|
200
198
|
↓
|
|
201
|
-
Step 2.6:
|
|
199
|
+
Step 2.6: 按工作流分组(多个工作流 → 多组,各组独立执行后续步骤)
|
|
202
200
|
↓ ↓ ↓ (每组)
|
|
203
|
-
|
|
204
|
-
│ ▼ 并行组 A(同时发起)
|
|
205
|
-
│ Step 3:
|
|
206
|
-
│ Step 3.5: invoice.reim.row-info
|
|
207
|
-
│ Step 3.6: invoice.
|
|
208
|
-
│ 交通类额外: invoice.get × M
|
|
209
|
-
|
|
201
|
+
┌──────────────────────────────────────────────┐
|
|
202
|
+
│ ▼ 并行组 A(同时发起) │
|
|
203
|
+
│ Step 3: workflow.createForm(载入报销表单) │
|
|
204
|
+
│ Step 3.5: invoice.reim.row-info-batch │
|
|
205
|
+
│ Step 3.6: invoice.browse-field.data(发票对象) │
|
|
206
|
+
│ 交通类额外: invoice.get × M │
|
|
207
|
+
└──────────────────────────────────────────────┘
|
|
210
208
|
↓ (全部返回后)
|
|
211
|
-
Step 4:
|
|
209
|
+
Step 4: 组装 createRequest 的 data (reim-form-fill-rules.md)
|
|
212
210
|
↓
|
|
213
211
|
Step 4.5: 出差流程 → 提醒用户填写相关客户(未提供则不允许报销)
|
|
212
|
+
Step 4.6: 话费报销 → 核对材料并按标准核算实报金额
|
|
214
213
|
↓
|
|
215
|
-
Step 5:
|
|
214
|
+
Step 5: 展示预览 → 用户确认(存草稿 / 提交审批)→ workflow.createRequest → 原样展示 finalMarkdown
|
|
216
215
|
↓
|
|
217
|
-
Step 6 (可选):
|
|
216
|
+
Step 6 (可选): workflow.editLoad / editPrepare / editApply → 用户修正
|
|
218
217
|
```
|
|
219
218
|
|
|
220
219
|
### ⚡ 并行调用策略(必须遵守)
|
|
@@ -222,11 +221,10 @@ Step 6 (可选): invoice.reim.flow.update.prepare/apply → 用户修正
|
|
|
222
221
|
| 并行组 | 可并行的操作 | 说明 |
|
|
223
222
|
|--------|------------|------|
|
|
224
223
|
| **Step 1 并行** | `invoice.reim.requests.list` 与 Step 1C 发票展示 | 用户确认期间预取事前申请 |
|
|
225
|
-
| **Step 3 并行** | `
|
|
226
|
-
| **多张发票** | 多张发票的 `row-info` | 各发票独立,强制并行 |
|
|
224
|
+
| **Step 3 并行** | `workflow.createForm` + `invoice.reim.row-info-batch` + `invoice.browse-field.data` + `invoice.get` × M | 全部互相独立,**必须同时发起** |
|
|
227
225
|
| **交通类行程** | 多张交通发票的 `invoice.get` | 各发票独立,强制并行 |
|
|
228
226
|
|
|
229
|
-
>
|
|
227
|
+
> **`createForm` 不跨组复用**:它返回的 `continuation` 与本次单据绑定,**每个报销单各调一次 `createForm`**,不能拿上一单的 `continuation` 再发起。
|
|
230
228
|
|
|
231
229
|
---
|
|
232
230
|
|
|
@@ -248,7 +246,12 @@ Step 6 (可选): invoice.reim.flow.update.prepare/apply → 用户修正
|
|
|
248
246
|
|
|
249
247
|
> **如果用户已提供发票数据或已通过 Step 0 获取,则跳过此步骤。**
|
|
250
248
|
|
|
251
|
-
|
|
249
|
+
两种方式任选其一:
|
|
250
|
+
|
|
251
|
+
| 方式 | 适用 | 说明 |
|
|
252
|
+
| --- | --- | --- |
|
|
253
|
+
| `invoice.reim.candidates.list` | 按日期范围批量报销(推荐) | 自动翻页、自动过滤红冲票,并把发票分成 `available`(可报)/ `assigned`(已挂单)两组;**只从 `available` 里选**。见 [reim-api-reference.md](reim-api-reference.md#1b-报销候选发票分类) |
|
|
254
|
+
| `invoice.list` | 按关键词 / 号码 / 类型筛选 | 需自己过滤红冲票 |
|
|
252
255
|
|
|
253
256
|
### 默认查询策略(用户未指定日期时)
|
|
254
257
|
|
|
@@ -266,9 +269,9 @@ Step 6 (可选): invoice.reim.flow.update.prepare/apply → 用户修正
|
|
|
266
269
|
| `create_tm_begin` / `create_tm_end` | 录入/创建日期范围 | 用户明确说"录入日期"/"创建日期"时 |
|
|
267
270
|
|
|
268
271
|
**⚠️ 数据过滤(红冲票排除):**
|
|
269
|
-
-
|
|
270
|
-
-
|
|
271
|
-
-
|
|
272
|
+
- `candidates.list` **自动过滤** `status=8` 的全额红冲发票(过滤张数在 `summary.filteredRedReversedCount` 中报告)。
|
|
273
|
+
- 使用 `invoice.list` 时,**必须在进入任何后续流程前先过滤掉 `info.comm_info.pro.status == 8` 的发票**,并向用户报告:"已自动排除 N 张全额红冲发票"。
|
|
274
|
+
- 全额红冲发票不允许报销,**不能让红冲票进入匹配/组装环节**。
|
|
272
275
|
|
|
273
276
|
关键返回字段映射见 [reim-api-reference.md](reim-api-reference.md#1-获取发票数据)。
|
|
274
277
|
|
|
@@ -334,6 +337,7 @@ Step 6 (可选): invoice.reim.flow.update.prepare/apply → 用户修正
|
|
|
334
337
|
{
|
|
335
338
|
"invoiceId": "INV001",
|
|
336
339
|
"preApprovalId": "1298294241967177729",
|
|
340
|
+
"preApprovalName": "交通费报销-后端开发111-2026-07-25",
|
|
337
341
|
"preApprovalWorkflowId": "1181057526276915214",
|
|
338
342
|
"matchConfidence": "high",
|
|
339
343
|
"matchReasons": ["时间范围匹配", "费用类型一致"]
|
|
@@ -341,6 +345,8 @@ Step 6 (可选): invoice.reim.flow.update.prepare/apply → 用户修正
|
|
|
341
345
|
]
|
|
342
346
|
```
|
|
343
347
|
|
|
348
|
+
> `preApprovalName` 要保留:填「事前申请流程 / 相关流程」字段时写成 `{preApprovalName}({preApprovalId})`。
|
|
349
|
+
|
|
344
350
|
### Step 2 匹配结果展示(推荐)
|
|
345
351
|
|
|
346
352
|
匹配完成后,**建议向用户展示匹配结果**,而不是静默进入下一步。展示格式:
|
|
@@ -364,9 +370,9 @@ Step 6 (可选): invoice.reim.flow.update.prepare/apply → 用户修正
|
|
|
364
370
|
|
|
365
371
|
---
|
|
366
372
|
|
|
367
|
-
## Step 2.5: 获取报销单工作流
|
|
373
|
+
## Step 2.5: 获取报销单工作流
|
|
368
374
|
|
|
369
|
-
通过 `invoice.reim.workflow.resolve`
|
|
375
|
+
通过 `invoice.reim.workflow.resolve` 获取报销工作流的 `workFlowId` 与 `workFlowName`(Step 3 用 `{workFlowName}({workFlowId})` 载入表单)。
|
|
370
376
|
|
|
371
377
|
**⚠️ 核心逻辑:当存在多个工作流时,需要将发票/事前申请按工作流分组,每组各创建一个报销单。**
|
|
372
378
|
|
|
@@ -388,27 +394,42 @@ Step 6 (可选): invoice.reim.flow.update.prepare/apply → 用户修正
|
|
|
388
394
|
|
|
389
395
|
---
|
|
390
396
|
|
|
391
|
-
## Step 3:
|
|
397
|
+
## Step 3: 载入报销表单(`workflow.createForm`)
|
|
392
398
|
|
|
393
|
-
|
|
399
|
+
调用 `weaver-e10-workflow` 的 `workflow.createForm`,`workflow` 传 Step 2.5 得到的 `{workFlowName}({workFlowId})`(带 ID 时 CLI 不查可发起列表,直接载入):
|
|
394
400
|
|
|
395
|
-
|
|
401
|
+
macOS/Linux(bash/zsh):
|
|
396
402
|
|
|
397
|
-
|
|
403
|
+
```bash
|
|
404
|
+
weaver-work-cli --json workflow run workflow.createForm --input-json '{"workflow":["总部费用报销(100003460000000060)"]}'
|
|
405
|
+
```
|
|
398
406
|
|
|
399
|
-
|
|
407
|
+
Windows PowerShell:
|
|
400
408
|
|
|
401
|
-
|
|
409
|
+
```powershell
|
|
410
|
+
weaver-work-cli --json workflow run workflow.createForm --input-json '{"workflow":["总部费用报销(100003460000000060)"]}'
|
|
411
|
+
```
|
|
402
412
|
|
|
403
|
-
|
|
413
|
+
从返回里取:
|
|
404
414
|
|
|
405
|
-
|
|
415
|
+
| 返回键 | 用途 |
|
|
416
|
+
| --- | --- |
|
|
417
|
+
| `continuation`(= `contextId`) | Step 5 `createRequest` 的 `context` |
|
|
418
|
+
| `fields` | **可写字段全集**:按 `name` 找业务字段取 `id`;带 `subFormId` 的是明细字段;带 `initialValue` 的有默认值 |
|
|
419
|
+
| `requestName` | 表单默认标题(报销单标题按 [reim-form-fill-rules.md](reim-form-fill-rules.md#流程标题requestname) 生成后用 `requestName` 参数覆盖) |
|
|
420
|
+
| `historyRequestData` | 只用于本技能规则没覆盖的字段(如费用承担公司),口径见 `workflow-create.md`「历史流程数据参考规则」 |
|
|
421
|
+
|
|
422
|
+
- `NEEDS_CLARIFICATION`(`workflow_not_exist` / `no_create_right`)→ 按 `workflow-create.md` 如实告知用户,停止本组。
|
|
423
|
+
- 大表单超线(stdout 只有一句话 + `resultFile`)→ 按 `workflow-create.md` 读一次 `resultFile`,不要重跑。
|
|
424
|
+
- **不再需要** `invoice.reim.form.structure`、`invoice.reim.field.search`:字段清单由 `createForm` 给出,浏览按钮的名称 → ID 由 `createRequest` 解析。
|
|
425
|
+
|
|
426
|
+
---
|
|
406
427
|
|
|
407
|
-
|
|
428
|
+
## Step 3.5: 获取发票预填信息(`invoice.reim.row-info-batch`)
|
|
408
429
|
|
|
409
|
-
- 入参:`
|
|
410
|
-
- 返回的 `date`、`fysm`、`itinerary`、`subjectId` **在 Step 4 中优先使用**
|
|
411
|
-
-
|
|
430
|
+
- 入参:`invoiceIds`=本组全部**发票**(不含凭证)ID,`requestid`=匹配到的事前申请 ID(无则留空)
|
|
431
|
+
- 返回的 `date`、`fysm`、`itinerary`、`subjectId`、`subjectName` **在 Step 4 中优先使用**
|
|
432
|
+
- 某张失败或字段为空 → 该行回退到 AI 推断逻辑
|
|
412
433
|
|
|
413
434
|
### 交通类发票额外处理
|
|
414
435
|
|
|
@@ -418,45 +439,59 @@ Step 6 (可选): invoice.reim.flow.update.prepare/apply → 用户修正
|
|
|
418
439
|
|
|
419
440
|
---
|
|
420
441
|
|
|
421
|
-
## Step 3.6:
|
|
442
|
+
## Step 3.6: 取发票对象(`invoice.browse-field.data`)
|
|
422
443
|
|
|
423
|
-
|
|
444
|
+
发票字段(`EinvoiceComponent`)只接受发票对象,不接受文本或裸 ID。把本组所有**发票** + 已确定的**配对凭证**的 `fid` 一次传入:
|
|
424
445
|
|
|
425
|
-
|
|
446
|
+
macOS/Linux(bash/zsh):
|
|
426
447
|
|
|
427
|
-
|
|
428
|
-
-
|
|
448
|
+
```bash
|
|
449
|
+
weaver-work-cli --json invoice run invoice.browse-field.data --input-json '{"fids":["1295366637717012482","1298798990831518001"]}'
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
Windows PowerShell:
|
|
453
|
+
|
|
454
|
+
```powershell
|
|
455
|
+
weaver-work-cli --json invoice run invoice.browse-field.data --input-json '{"fids":["1295366637717012482","1298798990831518001"]}'
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
> `row-info` 的 `itinerary` 要等 Step 3.5 返回后才知道。为了不串行,Step 3 并行组里先只传发票 + AI 已配对的凭证;`itinerary` 返回了新的凭证 ID 时再补调一次,只传新增的 `fids`。
|
|
459
|
+
|
|
460
|
+
> 发票都来自用户已确认的票夹,属于 `workflow-create.md` 里"指名从票夹取"的情形,**不需要**上传提醒。
|
|
429
461
|
|
|
430
462
|
---
|
|
431
463
|
|
|
432
|
-
## Step
|
|
464
|
+
## Step 3.7(兜底): 当前人员及上级(`invoice.reim.employee-superiors`)
|
|
433
465
|
|
|
434
|
-
|
|
435
|
-
> **费用科目匹配规则见 [reim-expense-subject-rules.md](reim-expense-subject-rules.md)**
|
|
436
|
-
>
|
|
437
|
-
> **⚠️ 费用类型(科目)字段必须有值。匹配不到时直接填兜底值 `"100502270000000104"`。**
|
|
438
|
-
> **⚠️ 合同编号固定填 `"20260999"`**(除用户当次明确给出别的合同号):主表 `合同号(100003720000001376)` 不能留空、不能放进 `unable_to_fill`;走快速路径 `template.build`/`auto-prepare` 时同样必须显式传 `contractNo`,否则该字段静默缺失。口径见 [reim-form-fill-rules.md](reim-form-fill-rules.md) 主表字段映射。
|
|
439
|
-
> **⚠️ 出差流程相关客户规则见 Step 4.5。**
|
|
440
|
-
> **⚠️ 话费补贴 / 话费报销必须遵守 [reim-phone-subsidy-rules.md](reim-phone-subsidy-rules.md),见 Step 4.6。**
|
|
466
|
+
承担主体、报销人上级等人员字段通常由表单默认值带出,**默认不调用**。只有以下情况才调用一次(同一会话可复用):
|
|
441
467
|
|
|
442
|
-
|
|
468
|
+
- `fields` 里承担主体 / 申请人 / 报销人上级等字段**没有 `initialValue`**;或
|
|
469
|
+
- `createRequest` 的 `missingFields` 列出了这些字段。
|
|
470
|
+
|
|
471
|
+
取值:当前人员 → `{currentEmployee.name}({currentEmployee.id})`;直接上级 → `{directSuperior.name}({directSuperior.id})`(**不是 `allSuperiors[0]`**);所有上级 → `allSuperiors` 每项的 `名称(ID)`。
|
|
472
|
+
|
|
473
|
+
---
|
|
474
|
+
|
|
475
|
+
## Step 4: 组装 `createRequest` 的 `data`
|
|
476
|
+
|
|
477
|
+
> **详细填值规则见 [reim-form-fill-rules.md](reim-form-fill-rules.md)**
|
|
478
|
+
> **费用科目匹配规则见 [reim-expense-subject-rules.md](reim-expense-subject-rules.md)**
|
|
443
479
|
|
|
444
480
|
```json
|
|
445
481
|
{
|
|
446
|
-
"
|
|
447
|
-
"
|
|
448
|
-
"request_name": "流程标题",
|
|
449
|
-
"main_fields": [{"fieldId": "...", "value": "...", "fieldName": "..."}],
|
|
450
|
-
"detail_rows": [{"dataIndex": 1, "subFormId": "...", "invoiceId": "...", "fields": [...]}],
|
|
451
|
-
"need_user_confirm": [],
|
|
452
|
-
"unable_to_fill": []
|
|
482
|
+
"main": {"<主表字段id>": "<值>"},
|
|
483
|
+
"details": {"<费用明细subFormId>": [{"<明细字段id>": "<值>"}]}
|
|
453
484
|
}
|
|
454
485
|
```
|
|
455
486
|
|
|
456
487
|
**关键约束:**
|
|
457
|
-
-
|
|
458
|
-
-
|
|
459
|
-
-
|
|
488
|
+
- 键只取 `createForm` 的 `fields[].id`;`fields` 里没有的字段不传,带默认值且不需改写的字段不传(例外:明细「币种」每行必传)
|
|
489
|
+
- 浏览按钮写 `名称(ID)`;Select 写选项名;发票字段写 `[发票对象]`
|
|
490
|
+
- 一张发票一行;相关凭证(17/18/57/58)放进配对发票那一行,每行最多 1 张
|
|
491
|
+
- **费用类型(科目)每行必须有值**,匹配不到填 `"其他-管理费用(100502270000000104)"`
|
|
492
|
+
- **合同号固定 `"20260999"`**(除用户当次明确给出别的合同号);表单默认值已是它时不必传
|
|
493
|
+
- **用户给了合同号 → 承担主体、相关客户、相关项目都不传,以合同联动为准**(用户口头指定的承担主体也不传);创建后从 `linkageResult` 读出实际带出的值告诉用户
|
|
494
|
+
- **⚠️ 出差流程相关客户规则见 Step 4.5;话费报销规则见 Step 4.6。**
|
|
460
495
|
|
|
461
496
|
---
|
|
462
497
|
|
|
@@ -466,10 +501,11 @@ Step 6 (可选): invoice.reim.flow.update.prepare/apply → 用户修正
|
|
|
466
501
|
> 完整规则见 [reim-form-fill-rules.md - 出差流程相关客户](reim-form-fill-rules.md#出差流程相关客户硬拦截)。
|
|
467
502
|
|
|
468
503
|
简要规则:
|
|
504
|
+
- 用户给了合同号 → 相关客户由合同联动带出,不拦截
|
|
469
505
|
- `workFlowName` 或 `requestname` 含「差旅」「出差」→ 暂停,提醒用户提供具体客户名称
|
|
470
|
-
- 用户给出客户名称 → `
|
|
471
|
-
- 用户拒绝 / 不提供 → **结束报销,禁止调用 `
|
|
472
|
-
- 非出差流程:相关客户固定填 `"100504500000311504"`
|
|
506
|
+
- 用户给出客户名称 → 原样填进「相关客户」,由 `createRequest` 解析;多候选/查不到按 `workflow-create.md` 的浏览按钮口径处理
|
|
507
|
+
- 用户拒绝 / 不提供 → **结束报销,禁止调用 `workflow.createRequest`**
|
|
508
|
+
- 非出差流程:相关客户固定填 `"泛微上海(100504500000311504)"`
|
|
473
509
|
|
|
474
510
|
---
|
|
475
511
|
|
|
@@ -483,103 +519,94 @@ Step 6 (可选): invoice.reim.flow.update.prepare/apply → 用户修正
|
|
|
483
519
|
- 必须提供本人实名制当月手机账单截图及账单构成
|
|
484
520
|
- 必须确认岗位对应月度上限(350 / 200 / 100),禁止猜测岗位
|
|
485
521
|
- 剔除手机设备赠送套餐、家庭宽带套餐后,实报金额 = `min(可报销账单金额, 上限)`
|
|
486
|
-
-
|
|
487
|
-
- 材料不齐 / 岗位未确认 / 用户拒绝 → **结束报销,禁止调用 `invoice.reim.flow.create.prepare`**
|
|
522
|
+
- 材料不齐 / 岗位未确认 / 用户拒绝 → **结束报销,禁止调用 `workflow.createRequest`**
|
|
488
523
|
|
|
489
524
|
---
|
|
490
525
|
|
|
491
|
-
## Step
|
|
492
|
-
|
|
493
|
-
> **向用户展示单据预览、汇总、确认清单时,凡是字典/选择类 ID 值,一律渲染成 `中文名(ID)`,禁止只给裸 ID。**
|
|
494
|
-
> 用户要靠中文名核对金额、科目、上级和客户;裸 ID 无法复核,属于无效展示。
|
|
495
|
-
|
|
496
|
-
### 优先:直接用 CLI 已渲染好的展示字段(快速路径 / `auto-prepare` / `template.build`)
|
|
497
|
-
|
|
498
|
-
`invoice.reim.template.build` 与 `invoice.reim.flow.create.auto-prepare` 的返回已包含渲染完成的展示数据。**返回里有 `preview.mainFields` / `labels` 就直接用,不要再自己调 `field.search` / `row-info` 查名。**
|
|
526
|
+
## Step 5: 预览确认 → `workflow.createRequest`
|
|
499
527
|
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
| `preview.detailRows[]` | `{ dataIndex, invoiceId, invoiceNumber, amount, expenseNote, subject, currency }` | **明细表预览直接读 `subject` / `currency`**,已带中文名 |
|
|
504
|
-
| `labels` | `employees` / `subjects` / `currencies` / `customers` / `selectOptions` / `customer` / `detailSubForm` / `workflow` | 需要自己拼其它展示时取字典 |
|
|
505
|
-
| `labels.unresolved`、`preview.unresolvedLabels` | 未取到中文名的 ID 清单 | 非空时按下方兜底口径如实展示,并放进 `need_user_confirm` 提醒用户核对 |
|
|
506
|
-
|
|
507
|
-
相关客户只给名称也能用:传 `relatedCustomerName`(不传 ID 时 CLI 会自动反查 ID;ID 与名称同时传则不额外请求,只用于渲染)。
|
|
508
|
-
|
|
509
|
-
### 兜底:返回里没有上述字段时(旧版 CLI、或手工组装路径)按来源表自查
|
|
510
|
-
|
|
511
|
-
| 展示项 | 中文名来源 | 兜底 |
|
|
512
|
-
| --- | --- | --- |
|
|
513
|
-
| 费用类型(科目) | `invoice.reim.row-info` 的 `subjectName`(与 `subjectId` 同源,**同一行数据直接取**) | 用 `reim-expense-subject-rules.md` 查找表反查;仍无则保留 `未知科目(ID)` |
|
|
514
|
-
| 币种 | `invoice.reim.row-info` 的 `bz[].name` | `人民币(100001050000000001)` |
|
|
515
|
-
| 申请人 / 提单人员 / 承担主体 | `invoice.reim.employee-superiors` 的 `currentEmployee.name` | — |
|
|
516
|
-
| 报销人上级 / 承担人直接上级 | 同命令 `directSuperior.name` | — |
|
|
517
|
-
| 承担人所有上级 | 同命令 `allSuperiors[].name`,按原顺序逗号拼接,**每个都带 ID** | — |
|
|
518
|
-
| 报销方式等 Select 字段 | `invoice.reim.form.structure` 主表该字段 `options` 里 `optionValue` → `optionName` | 保留 `optionValue=7` |
|
|
519
|
-
| 相关客户 | `invoice.reim.field.search` 返回项的 `name` | 见下方警告 |
|
|
520
|
-
|
|
521
|
-
⚠️ **相关客户无法用 ID 反查**(实测):`invoice.reim.field.search` 把待查的那个 ID 当 `keywords` 传,一律返回 `[]`(例如 `keywords="100504500000311504"` → 空)。必须改用**关键词模糊搜索**再按 `id` 匹配:
|
|
522
|
-
|
|
523
|
-
```text
|
|
524
|
-
keywords="泛微" → 命中 {"name":"泛微上海","id":"100504500000311504"}
|
|
525
|
-
```
|
|
528
|
+
> **⚠️ 报销单涉及金额,创建前必须先给用户看预览并取得明确确认**——这是本技能对 `workflow-create.md`「拼完 data 立即发 createRequest」的唯一加严,其余返回处置照 `workflow-create.md` 执行。
|
|
529
|
+
> **⚠️ 出差流程拦截:相关客户未由用户提供具体信息前,禁止调用。**
|
|
530
|
+
> **⚠️ 话费报销拦截:账单截图、账单构成或岗位标准未确认前,禁止调用。**
|
|
526
531
|
|
|
527
|
-
|
|
532
|
+
### 5.1 预览(创建前)
|
|
528
533
|
|
|
529
|
-
|
|
534
|
+
向用户展示一次,**字典类值一律带中文名 `名称(ID)`**(`data` 里本来就是这种写法,直接照抄):
|
|
530
535
|
|
|
531
536
|
```markdown
|
|
537
|
+
即将创建报销单「交通费报销-龚为明-2026-10-21(共2笔)」,请确认:
|
|
538
|
+
|
|
532
539
|
| 项目 | 值 |
|
|
533
540
|
| --- | --- |
|
|
541
|
+
| 报销工作流 | 总部费用报销 |
|
|
542
|
+
| 报销事由 | 2026-07-30 市内交通 - 滴滴出行 |
|
|
534
543
|
| 相关客户 | 泛微上海(100504500000311504) |
|
|
535
|
-
|
|
|
536
|
-
|
|
|
537
|
-
|
|
538
|
-
|
|
|
544
|
+
| 事前申请 | 交通费报销-后端开发111-2026-07-25(1298294241967177729) |
|
|
545
|
+
| 合计金额 | ¥185.80 |
|
|
546
|
+
|
|
547
|
+
| # | 发票号码 | 金额 | 费用日期 | 费用类型 | 费用说明 | 相关凭证 |
|
|
548
|
+
|---|----------|------|----------|----------|----------|----------|
|
|
549
|
+
| 1 | 36901189 | ¥108.20 | 2026-07-30 | 市内交通费(100502270000000006) | 仁济医院南院-浦江瑞和城 | ✅ 滴滴行程单 |
|
|
550
|
+
| 2 | 36901200 | ¥77.60 | 2026-07-30 | 市内交通费(100502270000000006) | 虹桥机场T2-人民广场 | — |
|
|
551
|
+
|
|
552
|
+
申请人、承担主体、上级、部门、合同号、报销方式由表单按当前登录人默认带出;币种为人民币。
|
|
553
|
+
请回复「存草稿」或「提交审批」;需要修改请直接告诉我。
|
|
539
554
|
```
|
|
540
555
|
|
|
541
|
-
|
|
556
|
+
- 有未挂上的凭证、未配对的凭证、话费核算明细时,在表格下方逐条列出
|
|
557
|
+
- 用户没说清 → 默认按「存草稿」(`action:"draft"`)处理并在回复里说明
|
|
542
558
|
|
|
543
|
-
|
|
559
|
+
### 5.2 创建
|
|
544
560
|
|
|
545
|
-
|
|
561
|
+
macOS/Linux(bash/zsh):
|
|
546
562
|
|
|
547
|
-
|
|
563
|
+
```bash
|
|
564
|
+
weaver-work-cli --json workflow run workflow.createRequest --input ./reim-create-request.json
|
|
565
|
+
```
|
|
548
566
|
|
|
549
|
-
|
|
550
|
-
> **⚠️ 出差流程拦截:相关客户未由用户提供具体信息前,禁止调用。**
|
|
551
|
-
> **⚠️ 话费报销拦截:账单截图、账单构成或岗位标准未确认前,禁止调用。**
|
|
567
|
+
Windows PowerShell:
|
|
552
568
|
|
|
553
|
-
|
|
569
|
+
```powershell
|
|
570
|
+
weaver-work-cli --json workflow run workflow.createRequest --input .\reim-create-request.json
|
|
571
|
+
```
|
|
554
572
|
|
|
555
|
-
|
|
573
|
+
`reim-create-request.json` 的内容:
|
|
556
574
|
|
|
557
|
-
```
|
|
558
|
-
|
|
575
|
+
```json
|
|
576
|
+
{
|
|
577
|
+
"context": "<Step 3 createForm 返回的 continuation>",
|
|
578
|
+
"requestName": "交通费报销-龚为明-2026-10-21(共2笔)",
|
|
579
|
+
"action": "draft",
|
|
580
|
+
"data": {
|
|
581
|
+
"main": {"100003720000000088": "2026-07-30 市内交通 - 滴滴出行", "100003720000000687": "泛微上海(100504500000311504)"},
|
|
582
|
+
"details": {"100003690000000011": [{"100003720000016373": "108.2", "100003720000052200": "人民币(100001050000000001)"}]}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
```
|
|
559
586
|
|
|
560
|
-
|
|
587
|
+
> `data` 含发票对象,体积较大,建议写成 UTF-8 文件用 `--input <path>` 传入。
|
|
561
588
|
|
|
562
|
-
|
|
563
|
-
**报销事由**:2026-07-30 市内交通 - 滴滴出行
|
|
564
|
-
**汇总金额**:¥185.80
|
|
565
|
-
**查看链接**:[点击查看报销单](viewUrl)
|
|
589
|
+
### 5.3 返回处置
|
|
566
590
|
|
|
567
|
-
|
|
568
|
-
|---|----------|----------|----------|----------|----------|
|
|
569
|
-
| 1 | 36901189 | ¥108.20 | 市内交通 | 仁济医院南院→浦江瑞和城 | ✅ 已关联 |
|
|
570
|
-
| 2 | 36901200 | ¥77.60 | 市内交通 | 虹桥机场T2→人民广场 | ❌ 无凭证 |
|
|
591
|
+
**完全按 `workflow-create.md`「createRequest 返回后的处置」执行**:
|
|
571
592
|
|
|
572
|
-
|
|
573
|
-
|
|
593
|
+
| 返回 | 处置 |
|
|
594
|
+
| --- | --- |
|
|
595
|
+
| `CREATED` / `CREATED_SUBMITTED` / `CREATED_SUBMIT_FAILED` | **原样粘贴 `finalMarkdown`**,一字不改;链接只出现在回复文本里 |
|
|
596
|
+
| `NEEDS_INPUT` | 缺的是承担主体、上级、合同号、相关客户、科目等本技能有规则的字段 → 按 [reim-form-fill-rules.md](reim-form-fill-rules.md) 补值后用同一 `context` 重发;其余原样粘贴 `finalMarkdown` 一次问齐用户 |
|
|
597
|
+
| `NEEDS_CONFIRMATION` | 按 `ambiguities` 处理(浏览按钮多候选让用户选;`MULTIPLICITY` 只保留 1 个值) |
|
|
598
|
+
| `partial` / `write_uncertain` | 停止,不重放;只读回查一次后告知用户 |
|
|
599
|
+
|
|
600
|
+
> **⚠️ 禁止重复创建**:同一组发票 `createRequest` 成功后,**不要再次 `createForm` + `createRequest`**;修改一律走 Step 6。
|
|
574
601
|
|
|
575
602
|
---
|
|
576
603
|
|
|
577
|
-
## Step 6(可选):
|
|
604
|
+
## Step 6(可选): 修改已创建的报销单
|
|
578
605
|
|
|
579
|
-
通过 `
|
|
606
|
+
通过 `weaver-e10-workflow` 的 `workflow.editLoad`(传 Step 5 返回的 `requestId`)→ `workflow.editPrepare`(`data` 写法同 Step 4,只传要改的字段)→ 用户确认 → `workflow.editApply`。详见 [`workflow-edit.md`](../../weaver-e10-workflow/references/workflow-edit.md)。
|
|
580
607
|
|
|
581
|
-
-
|
|
582
|
-
-
|
|
608
|
+
- 流程已流转到不可编辑节点时 `editApply` 返回"失去操作权限",如实转述
|
|
609
|
+
- 只读字段会被拒绝(`notEditable`),如实转述,不要换字段 id 绕过
|
|
583
610
|
|
|
584
611
|
---
|
|
585
612
|
|
|
@@ -589,26 +616,27 @@ CLI 返回 `requestId` 和 `viewUrl`,**用结构化汇总信息展示给用户
|
|
|
589
616
|
- 发票列表为空 → 提示"未找到未报销的发票",结束
|
|
590
617
|
- 出差/差旅流程缺少相关客户 → 见 Step 4.5
|
|
591
618
|
- 话费报销缺少账单截图、账单构成或岗位标准 → 见 Step 4.6
|
|
592
|
-
-
|
|
619
|
+
- `createRequest` 返回 `NEEDS_INPUT` / `NEEDS_CONFIRMATION` 且本技能规则补不上 → 按 `workflow-create.md` 问用户
|
|
593
620
|
|
|
594
621
|
**严禁重复调用:**
|
|
595
|
-
- **`
|
|
622
|
+
- **`createRequest` 已成功 → 严禁再次创建,后续修改一律使用 Step 6**
|
|
596
623
|
|
|
597
624
|
**自动继续(不问用户):**
|
|
598
625
|
- 事前申请为空 / 匹配失败 → 跳过事前关联,直接用发票填单
|
|
599
|
-
- 匹配结果唯一
|
|
626
|
+
- 匹配结果唯一 → 直接使用
|
|
600
627
|
|
|
601
628
|
**用户中途取消:**
|
|
602
629
|
- 用户说"取消"/"不报了"/"算了" → 立即停止
|
|
603
|
-
-
|
|
630
|
+
- 已创建成功 → 告知用户可通过链接手动删除
|
|
604
631
|
|
|
605
632
|
---
|
|
606
633
|
|
|
607
634
|
## 参考文档
|
|
608
635
|
|
|
609
|
-
- [reim-api-reference.md](reim-api-reference.md) -
|
|
636
|
+
- [reim-api-reference.md](reim-api-reference.md) - 报销数据准备 CLI operation 入参与返回值
|
|
610
637
|
- [reim-matching-rules.md](reim-matching-rules.md) - 发票与事前申请匹配逻辑
|
|
611
|
-
- [reim-form-fill-rules.md](reim-form-fill-rules.md) -
|
|
612
|
-
- [reim-expense-subject-rules.md](reim-expense-subject-rules.md) -
|
|
638
|
+
- [reim-form-fill-rules.md](reim-form-fill-rules.md) - `createRequest` 的 `data` 填值规则
|
|
639
|
+
- [reim-expense-subject-rules.md](reim-expense-subject-rules.md) - 费用科目自动匹配规则
|
|
613
640
|
- [reim-phone-subsidy-rules.md](reim-phone-subsidy-rules.md) - 话费补贴 / 话费报销月度标准与实报金额
|
|
614
641
|
- [reim-examples.md](reim-examples.md) - 完整端到端示例
|
|
642
|
+
- [`workflow-create.md`](../../weaver-e10-workflow/references/workflow-create.md) / [`workflow-edit.md`](../../weaver-e10-workflow/references/workflow-edit.md) - 发起与修改流程的命令契约
|