weaver-work-cli 0.1.26 → 0.1.28
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 +7 -2
- package/dist/cmd/setup/index.js +1 -1
- package/dist/internal/e10/auth/commands.js +1 -6
- package/dist/internal/e10/auth/messages.js +3 -0
- package/dist/internal/e10/auth/session.js +8 -0
- package/dist/internal/e10/auth-recovery.js +148 -0
- package/dist/internal/e10/client.js +47 -15
- package/dist/internal/e10/context.js +8 -8
- package/dist/internal/e10/index.js +1 -0
- package/dist/internal/e10/request-runtime.js +51 -9
- package/dist/shortcuts/archive/host.js +3 -2
- package/dist/shortcuts/archive/manifest.js +1 -1
- package/dist/shortcuts/archive-oa/host.js +2 -1
- package/dist/shortcuts/archive-oa/manifest.js +1 -1
- package/dist/shortcuts/asset/host.js +7 -6
- package/dist/shortcuts/blog/host.js +4 -3
- package/dist/shortcuts/caizhilian/host.js +3 -2
- package/dist/shortcuts/caizhilian/manifest.js +1 -1
- package/dist/shortcuts/calendar/host.js +2 -1
- package/dist/shortcuts/contract/host.js +34 -59
- package/dist/shortcuts/ehr/host.js +2 -1
- package/dist/shortcuts/esb/host.js +2 -1
- package/dist/shortcuts/fna/host.js +6 -3
- package/dist/shortcuts/fna/manifest.js +10 -5
- package/dist/shortcuts/fna/operations/expense-chart.js +162 -0
- package/dist/shortcuts/fna/operations/registry.js +2 -0
- package/dist/shortcuts/hrm/host.js +2 -1
- package/dist/shortcuts/im/host.js +3 -2
- package/dist/shortcuts/invoice/host.js +7 -6
- package/dist/shortcuts/invoice/manifest.js +21 -141
- package/dist/shortcuts/invoice/operations/issuing-qys.js +134 -167
- package/dist/shortcuts/invoice/operations/registry.js +1 -6
- package/dist/shortcuts/jiuchuanhui/host.js +2 -1
- package/dist/shortcuts/mail/host.js +2 -1
- package/dist/shortcuts/meeting/host.js +2 -1
- package/dist/shortcuts/meeting/operations/eb/conflict.js +78 -12
- package/dist/shortcuts/okr/host.js +2 -1
- package/dist/shortcuts/plan/host.js +2 -1
- package/dist/shortcuts/project/host.js +2 -1
- package/dist/shortcuts/workflow/host.js +3 -5
- package/dist/shortcuts/workflow/index.js +1 -1
- package/dist/shortcuts/workflow/operations/chatscene.js +4 -22
- package/dist/shortcuts/workflow/operations/form.js +281 -166
- package/dist/shortcuts/workflow/operations/read.js +26 -2
- package/dist/shortcuts/workflow/stdout-compact.js +7 -0
- package/docs/SKILL.md +1 -1
- package/docs/_catalog.md +1 -1
- package/docs/agent-invoice.md +1 -1
- package/docs/caizhilian.md +1 -1
- package/docs/e10-auth.md +1 -1
- package/docs/fna.md +7 -3
- package/docs/invoice.md +4 -6
- package/package.json +1 -1
- package/skill-template/business-info.json +4 -1
- package/skill-template/domains/caizhilian.md +2 -1
- package/skill-template/domains/qiyecheng.md +1 -0
- package/skill-template/domains/yepiaotong.md +6 -2
- package/skill-template/skill-template.md +1 -0
- package/skills/weaver-e10-blog/SKILL.md +6 -1
- package/skills/weaver-e10-blog/references/blog-query.md +3 -1
- package/skills/weaver-e10-caizhilian/SKILL.md +18 -9
- package/skills/weaver-e10-caizhilian/references/action-flow.md +70 -0
- package/skills/weaver-e10-caizhilian/references/agent-entry.md +6 -2
- package/skills/weaver-e10-caizhilian/references/auth-and-install.md +207 -0
- package/skills/weaver-e10-caizhilian/references/file-collection.md +56 -54
- package/skills/weaver-e10-caizhilian/references/file-upload.md +4 -4
- package/skills/weaver-e10-caizhilian/references/host-executor-prompt.md +32 -0
- package/skills/weaver-e10-caizhilian/references/host-platform-integration.md +46 -0
- package/skills/weaver-e10-caizhilian/references/rule-index.md +56 -0
- package/skills/weaver-e10-caizhilian/references/setting-attach.md +5 -16
- package/skills/weaver-e10-caizhilian/references/setting-backup.md +4 -13
- package/skills/weaver-e10-caizhilian/references/setting-encrypt.md +6 -15
- package/skills/weaver-e10-caizhilian/references/setting-storage-docs-summary.md +126 -0
- package/skills/weaver-e10-caizhilian/references/setting-storage-field-map.md +57 -0
- package/skills/weaver-e10-caizhilian/references/setting-storage.md +142 -482
- package/skills/weaver-e10-caizhilian/references/source-manifest.json +7 -7
- package/skills/weaver-e10-caizhilian/references/task-workflow.md +87 -0
- package/skills/weaver-e10-caizhilian/references/withheld.md +2 -2
- package/skills/weaver-e10-caizhilian/references/write-protocol.md +7 -0
- package/skills/weaver-e10-calendar/SKILL.md +6 -1
- package/skills/weaver-e10-esb/SKILL.md +8 -0
- package/skills/weaver-e10-esb/references/input-format.md +3 -1
- package/skills/weaver-e10-esb/references/source-manifest.json +5 -5
- package/skills/weaver-e10-hrm/SKILL.md +6 -1
- package/skills/weaver-e10-hrm/references/employee.md +1 -1
- package/skills/weaver-e10-hrm/references/org.md +1 -1
- package/skills/weaver-e10-hrm/references/position.md +1 -1
- package/skills/weaver-e10-jinchengda/SKILL.md +2 -1
- package/skills/weaver-e10-jinchengda/references/contract-agent-entry.md +1 -1
- package/skills/weaver-e10-jiuchuanhui/SKILL.md +6 -1
- package/skills/weaver-e10-jucailin/SKILL.md +6 -1
- package/skills/weaver-e10-jucailin/references/hr-contact.md +1 -1
- package/skills/weaver-e10-jucailin/references/salary.md +1 -1
- package/skills/weaver-e10-mail/SKILL.md +6 -1
- package/skills/weaver-e10-meeting/SKILL.md +11 -6
- package/skills/weaver-e10-meeting/references/meeting-eb.md +7 -3
- package/skills/weaver-e10-meeting/references/meeting-queries.md +3 -1
- package/skills/weaver-e10-meeting/references/meeting-verification.md +4 -2
- package/skills/weaver-e10-okr/SKILL.md +6 -1
- package/skills/weaver-e10-okr/references/source-manifest.json +5 -5
- package/skills/weaver-e10-plan/SKILL.md +6 -1
- package/skills/weaver-e10-plan/references/plan-overview-and-routing.md +3 -1
- package/skills/weaver-e10-plan/references/plan-report-query.md +3 -1
- package/skills/weaver-e10-plan/references/source-manifest.json +7 -7
- package/skills/weaver-e10-qiyecheng/SKILL.md +16 -6
- package/skills/weaver-e10-qiyecheng/references/catalog.md +6 -3
- package/skills/weaver-e10-qiyecheng/references/expense-center.md +2 -0
- package/skills/weaver-e10-qiyecheng/references/expense-chart.md +78 -0
- package/skills/weaver-e10-qiyecheng/references/source-manifest.json +87 -33
- package/skills/weaver-e10-shared/SKILL.md +37 -14
- package/skills/weaver-e10-shared/references/e10-auth-and-session.md +11 -8
- package/skills/weaver-e10-shared/references/non-interactive-environment.md +4 -4
- package/skills/weaver-e10-shared/references/weaver-e10-installation.md +3 -1
- package/skills/weaver-e10-wenshuding/SKILL.md +6 -1
- package/skills/weaver-e10-wenshuding/references/source-manifest.json +3 -3
- package/skills/weaver-e10-workflow/references/source-manifest.json +1 -2
- package/skills/weaver-e10-workflow/references/workflow-create.md +30 -55
- package/skills/weaver-e10-yepiaotong/SKILL.md +19 -17
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-examples.md +72 -78
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-form-fill-rules.md +152 -0
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-workflow.md +210 -0
- package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +7 -7
- package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +11 -5
- package/skills/weaver-e10-yepiaotong/references/reim-examples.md +55 -33
- package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +102 -23
- package/skills/weaver-e10-yepiaotong/references/reim-phone-subsidy-rules.md +1 -1
- package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +53 -42
- package/skills/weaver-e10-yepiaotong/references/source-manifest.json +93 -213
- package/skills/weaver-e10-yimiaoban/SKILL.md +9 -2
- package/skills/weaver-e10-yimiaoban/references/file-user-i18n.md +1 -1
- package/skills/weaver-e10-yimiaoban/references/msg-read.md +1 -1
- package/skills/weaver-e10-yimiaoban/references/source-manifest.json +9 -9
- package/skills/weaver-e10-ziguanjia/SKILL.md +6 -1
- package/dist/shortcuts/invoice/operations/issuing.js +0 -198
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-field-rules.md +0 -161
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-qys-ledger.md +0 -66
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing.md +0 -107
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# AI 开票:契约锁台账 → 开票流程草稿(主链路)
|
|
2
|
+
|
|
3
|
+
## 什么时候读取
|
|
4
|
+
|
|
5
|
+
用户说"开票""开一下合同 XX 的票""把 XX 公司那份合同开票""按台账开票""发起开票流程"等开票意图时,**默认读取本文件**。
|
|
6
|
+
|
|
7
|
+
**本文件是唯一开票链路(0.1.27 起)**:CLI 已移除 `invoice.issuing.make.prepare/apply`、`invoice.issuing.qys.prepare`、`invoice.issuing.result`,不再存在"直接开票""存待开台账"的接口。用户说"直接开票""不走流程""先存台账"时,一律按本链路发起开票流程草稿,并说明开票必须经「契约锁合同收款发票开具及快递申请」流程审批后由流程侧完成;数据不在契约锁台账时,提示用户先在台账录入商品信息。
|
|
8
|
+
|
|
9
|
+
## 链路概览
|
|
10
|
+
|
|
11
|
+
本链路**不直接开票**:Agent 只负责从契约锁合同商品台账找到要开票的合同,在 E10 按合同号发起「开票申请」流程并**存为草稿**;用户在 E10 核对后自己提交,审批通过后由流程侧完成开票。
|
|
12
|
+
|
|
13
|
+
| 步 | 命令 | 所属技能 | 风险 |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| 1 | `invoice.issuing.qys.list` | 本技能 | read |
|
|
16
|
+
| 2 | `workflow.createForm` | `weaver-e10-workflow` | read |
|
|
17
|
+
| 3 | `workflow.createRequest`(`action` 固定 `draft`) | `weaver-e10-workflow` | high-risk-write |
|
|
18
|
+
| 修改 | `workflow.editLoad` → `workflow.editPrepare` → 用户确认 → `workflow.editApply` | `weaver-e10-workflow` | high-risk-write |
|
|
19
|
+
|
|
20
|
+
流程的创建与修改依赖同级的 `weaver-e10-workflow` 技能(`../weaver-e10-workflow/`),命令契约与返回处置以 [`workflow-create.md`](../../weaver-e10-workflow/references/workflow-create.md)、[`workflow-edit.md`](../../weaver-e10-workflow/references/workflow-edit.md) 为准。该技能不存在时停止并告知用户需要安装,不要改用直接开票或其他方式代替。
|
|
21
|
+
|
|
22
|
+
## 开票流程常量
|
|
23
|
+
|
|
24
|
+
| 常量 | 值 |
|
|
25
|
+
| --- | --- |
|
|
26
|
+
| 开票流程 | `契约锁合同收款发票开具及快递申请(100003460000001852)` |
|
|
27
|
+
| 关联字段 | 主表「合同号」(文本,字段 id `100003720000056343`);以 `createForm` 返回的 `fields` 按中文名「合同号」定位为准 |
|
|
28
|
+
| 流程标题 `requestName` | `开票申请-{购方名称}-{合同号}` |
|
|
29
|
+
| `action` | 固定 `draft` |
|
|
30
|
+
|
|
31
|
+
`workflow.createForm` 一律传上表的 `名称(ID)`。**不要按宽词 `开票` 检索**:实测会唯一命中「合同开票冲红流程」(红冲流程,只有「业务红冲原因」「相关开票流程」两个字段)并直接载入表单;「合同开票申请」「发票开具」等同名候选也不是本链路的流程。
|
|
32
|
+
|
|
33
|
+
载入后必须核对,**两条都满足才往下填**,否则停止并请用户确认开票流程:
|
|
34
|
+
|
|
35
|
+
- `workflow.id` 等于上表 ID,或名称含「开票」且**不含**「冲红」「红冲」「作废」「退票」;
|
|
36
|
+
- `fields` 里能按中文名找到主表「合同号」字段。
|
|
37
|
+
|
|
38
|
+
## 对话流程
|
|
39
|
+
|
|
40
|
+
### Step 1:找台账(`invoice.issuing.qys.list`)
|
|
41
|
+
|
|
42
|
+
- 用户给了合同号 → 传 `contractNo`;给了公司名、合同名或商品名 → 传 `keyword`。
|
|
43
|
+
- 用户什么线索都没给(只说"帮我开票")→ **只问一句**:"要给哪个合同开票?请提供合同号或客户名称。"不要追问购方、金额、税率——这些都由台账和流程联动带出。
|
|
44
|
+
- 不要传 `limit` 去翻全量;分组看 `groups`,逐行明细才看 `items`。
|
|
45
|
+
- 台账查询返回 `api/business_error`「系统错误」(code 500)时,多半是当前登录租户里没有契约锁合同商品台账页面:如实告知并请用户确认登录的 E10 租户,不要重试、不要换关键词再查。
|
|
46
|
+
|
|
47
|
+
### Step 2:按分组展示(`data.groups`)
|
|
48
|
+
|
|
49
|
+
`groups` 已按「合同号 + 购方」分好组,**一组 = 一张开票流程**;`totalAmount` 是 CLI 按分累加的开票金额合计(台账开票金额为**含税**金额),**Agent 不做任何金额计算**。
|
|
50
|
+
|
|
51
|
+
| `groups` 条数 | 处置 |
|
|
52
|
+
| --- | --- |
|
|
53
|
+
| 0 | 用 `includeIssued=true` 再查**一次**,按组展示 `blockedRows` 与对应 `items[].blockers`(已开票 / 已关联开票流程 / 开票中 / 已废弃),说明这份合同当前没有可开票的行,**结束**。 |
|
|
54
|
+
| 1 | 直接进 Step 3 确认卡片。 |
|
|
55
|
+
| 多条 | 列出分组让用户选(合同号、合同审批流程、购方、行数、商品、开票金额合计),**不要替用户选**;一次只处理一组。 |
|
|
56
|
+
|
|
57
|
+
`scanComplete=false` 时提醒用户:台账超过扫描上限,结果可能不全。
|
|
58
|
+
|
|
59
|
+
**税号与发票类型硬拦截**:选定的分组 `specialInvoiceWithoutTaxNo=true`(购方没有税号,台账发票类型却是专票)时,**不展示确认卡片、不发起流程**。只告诉用户:「{购方名称} 没有税号,不能开专票,只能开普票。请先把台账里这份合同的发票类型改成普票(如全电普票),再让我发起。」用户改完台账后从 Step 1 重新查。
|
|
60
|
+
|
|
61
|
+
- 不要在流程里把「发票类型」改成普票来绕过:发票类型由合同号联动带出,联动值优先,Agent 传的值会被覆盖。
|
|
62
|
+
- 用户坚持要开专票时,说明专票必须有购方税号,请先在台账补全税号。
|
|
63
|
+
|
|
64
|
+
### Step 3:确认卡片(创建前唯一一次确认)
|
|
65
|
+
|
|
66
|
+
按下面模板展示,等用户明确回复"确认""发起""好的"等同义确认后再往下走:
|
|
67
|
+
|
|
68
|
+
```text
|
|
69
|
+
将为以下合同发起「开票申请」流程(只存草稿,不会直接开票):
|
|
70
|
+
|
|
71
|
+
合同号:20266105541(南昌我爱我家科技有限公司开放平台续购20000元10000份)
|
|
72
|
+
购方:南昌我爱我家科技有限公司 税号:91360125083909438T
|
|
73
|
+
发票类型:全电专票
|
|
74
|
+
| 序号 | 商品 | 税率 | 开票金额(含税) |
|
|
75
|
+
| 1 | 技术服务费 | 6.0% | 20000 |
|
|
76
|
+
开票金额合计(含税):20000.00(共 1 行)
|
|
77
|
+
|
|
78
|
+
本次开票金额:20000(默认按总金额开)
|
|
79
|
+
开票事由:合同20266105541(南昌我爱我家科技有限公司开放平台续购20000元10000份)技术服务费全额开票,金额20000元
|
|
80
|
+
预计收款时间:(必填)请选择:本月底 2026-10-31 / 下月底 2026-11-30 / 30 天后 2026-11-22,或直接给一个日期
|
|
81
|
+
请回复预计收款时间并确认发起。
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
- `group.purchaserBankName` 或 `group.purchaserBankAccount` 非空时,在「购方」行下加一行 `开户行:{purchaserBankName} 账号:{purchaserBankAccount}`,两个值分开写,不要用台账原始的混写串。
|
|
85
|
+
- 明细表的行取该组 `formDataIds` 对应的 `items[]`:商品取「开票名称」,为空取「商品名称」;金额取 `amount` 原值,不改写。
|
|
86
|
+
- 「开票事由」按填单规则自动生成并展示在卡片里,不问用户;「预计收款时间」由用户决定,卡片里附上按当天日期算好的本月底、下月底、30 天后三个候选日期。**用户没给出日期就不建草稿**:只回"确认 / 继续"时再问一句,拿到日期再往下走;不要自己定默认日期,也不要留空先建(详见填单规则「预计收款时间」)。用户开票时已说了收款时间,卡片里直接展示换算后的日期,末行改为"确认发起吗?"。
|
|
87
|
+
- `warnings` 非空时在卡片末尾逐条列出。命中"同合同另有 N 行已开票…"时追加一句:"流程按合同号联动,可能一并带出这些行,请在 E10 草稿里核对明细。"
|
|
88
|
+
- 用户要改购方、金额、税率或商品 → 告知需先在台账修改,再重新从 Step 1 开始;**不要在流程里手工覆盖这些值**。
|
|
89
|
+
|
|
90
|
+
### Step 4:载入开票流程表单(`workflow.createForm`)
|
|
91
|
+
|
|
92
|
+
- `workflow` 传「开票流程常量」里的 `名称(ID)`;**不传 `userQuestion`**,也不用 `workflow.createRequestDirect`。
|
|
93
|
+
- 载入后按「开票流程常量」里的两条核对规则检查 `workflow.name` 与「合同号」字段;不满足就停止,不往下填,也不要换别的流程凑。
|
|
94
|
+
- `createForm` 返回 OA 业务错误(如表单布局接口报错)时如实转述并停止,不重试、不换流程。
|
|
95
|
+
|
|
96
|
+
### Step 5:组装 `data` 并存草稿(`workflow.createRequest`)
|
|
97
|
+
|
|
98
|
+
`data` 按 [invoice-issuing-form-fill-rules.md](invoice-issuing-form-fill-rules.md) 组装,一句话概括:**用户说了就按用户的,没说就按默认值**。创建时的默认值包括:合同号、相关合同审批流程、产品类型「契约锁」、开票日期取当天、开票备注填合同号、所售产品版本号取明细规格类型(须与下拉选项完全一致)、开票事由按公式自动生成;预计收款时间填用户在卡片环节给的日期(必须有,没有就回到 Step 3 问)。明细每行**只传**「金额(含税)」(按总金额开);货物名称、购买方名称、明细合同号、明细行id、单价、规格类型、单位、税率、总开票金额、已开票金额、未开票金额都由合同号联动带出,**传了反而会让总开票金额等三列带不出来**。
|
|
99
|
+
|
|
100
|
+
主表「开票内容」、明细「数量」、主表「开户行名称」「开户行银行帐号」创建时**不传**,原因各不相同:
|
|
101
|
+
- 「开票内容」自己的联动会把合同号带出的明细整行冲掉。
|
|
102
|
+
- 联动会把数量写成税率选项 id。
|
|
103
|
+
- 联动会把开户行写成名称账号混写串。
|
|
104
|
+
|
|
105
|
+
开户行两个字段在 Step 6 第 5 条经编辑链补正;开票内容、数量在 Step 6 第 6 条提醒用户在 E10 里改。其余购方信息不传;金额(不含税)、税额不传、不计算。
|
|
106
|
+
|
|
107
|
+
- `requestName` **必传**:`开票申请-{购方名称}-{合同号}`,不留用表单默认标题。
|
|
108
|
+
- `action` 固定 `"draft"`:用户说"直接提交"也只建草稿,并告诉用户去 E10 核对后提交。
|
|
109
|
+
|
|
110
|
+
`data` 较大时写成 UTF-8 JSON 文件用 `--input <path>` 传入。
|
|
111
|
+
|
|
112
|
+
### Step 6:回显与核对
|
|
113
|
+
|
|
114
|
+
1. 按 `workflow-create.md`「createRequest 返回后的处置」处理:`CREATED` / `NEEDS_INPUT` / `BROWSER_FILL` 有 `finalMarkdown` 就**原样粘贴**;`NEEDS_CONFIRMATION` 按 `ambiguities` 处理;`partial` / `write_uncertain` 停止,只读回查一次。
|
|
115
|
+
2. `CREATED` 后用返回的 `linkageResult`(一段「字段联动带出:字段=值、…」文本)核对联动结果。明细其余列由联动写入,`previewDetails` 里只有 Agent 自己填的金额,属正常。只核对三项:
|
|
116
|
+
- 含「是否存在合同明细数据=存在」;
|
|
117
|
+
- 含「总开票金额=」和「货物名称=」(明细整行已从台账带出);
|
|
118
|
+
- 「本次开票总金额」等于本次填入各行「金额(含税)」之和;按默认值开时,它等于 `group.totalAmount`。数值比较时 `5900.00` 与 `5900` 视为相等。
|
|
119
|
+
|
|
120
|
+
三项都满足时**不额外说明**。任一不满足时,在 `finalMarkdown` 之后**只追加一行**:`⚠️ 流程汇总的本次开票总金额为 X,与本次填写的开票金额 Y 不一致(或未带出合同明细),请在 E10 核对后再提交。`
|
|
121
|
+
3. `missingFields` 非空时原样转述(提交前需补齐);`finalMarkdown` 末尾已有这段提示时不要重复。
|
|
122
|
+
4. `BROWSER_FILL`(小e 环境)只输出那段 `<browsertool>` 标签块,不做第 2 步核对。
|
|
123
|
+
5. **补正开户行名称与账号**(`CREATED` 后都要做,取值规则见填单规则「创建后补正」):
|
|
124
|
+
- `workflow.editLoad` 读草稿(`requestId` 取创建返回值),从 `currentValues` 取主表「开户行名称」「开户行银行帐号」「开户行及帐号」,以及每行「明细行id」「数量」(第 6 条要用)。
|
|
125
|
+
- 算出补正值:取 `group.purchaserBankName` / `group.purchaserBankAccount`,为空时拆「开户行及帐号」。已经相同就不提交。
|
|
126
|
+
- 有要补的:`workflow.editPrepare` **只传主表这两个字段**,不传任何明细、不传开票内容。然后向用户列出补正项,并问「要把开户行名称和账号分开补进草稿吗?」,用户确认后 `workflow.editApply`。
|
|
127
|
+
- 「开户行及帐号」格式无法拆分时不补这两项,告诉用户原值,请其在 E10 里手工拆填。
|
|
128
|
+
- `editPrepare` / `editApply` 报错时原样转述,不重试;草稿本身已建好,不受影响。
|
|
129
|
+
6. **提醒用户在 E10 里改的项**:在本轮回复末尾加一段「提交前请在 E10 里改」,按填单规则「创建后补正」的提醒写法列出开票内容和需要改正的明细数量,如:
|
|
130
|
+
|
|
131
|
+
```text
|
|
132
|
+
提交前请在 E10 里改:
|
|
133
|
+
- 开票内容:请在 E10 里选择「技术服务费」
|
|
134
|
+
- 明细第 1 行数量:联动带出的是 1201835186337538063,请在 E10 改成 1
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
不要为了这两项调用 `editPrepare`。
|
|
138
|
+
|
|
139
|
+
### Step 7:之后的操作
|
|
140
|
+
|
|
141
|
+
- **禁止重复创建**:同一合同 `createRequest` 成功后,不要再次 `createForm` + `createRequest`;修改一律走 `workflow.editLoad` → `workflow.editPrepare` → 用户确认 → `workflow.editApply`。
|
|
142
|
+
- 用户问"开出来了吗 / 发票号是多少":说明开票在流程审批通过后由流程侧完成,请在 E10 查看该流程;CLI 已无 `invoice.issuing.result`,不要尝试用 `QYS-{formDataId}` 查开票结果。
|
|
143
|
+
- 用户中途说"取消 / 不开了" → 立即停止;草稿已创建时告知可在 E10 通过链接删除。
|
|
144
|
+
|
|
145
|
+
## 命令
|
|
146
|
+
|
|
147
|
+
macOS/Linux(bash/zsh):
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
weaver-work-cli --json invoice run invoice.issuing.qys.list --input-json '{"contractNo":"20266105586"}'
|
|
151
|
+
weaver-work-cli --json workflow run workflow.createForm --input-json '{"workflow":["契约锁合同收款发票开具及快递申请(100003460000001852)"]}'
|
|
152
|
+
cat > ./issuing-request.json <<'JSON'
|
|
153
|
+
{
|
|
154
|
+
"context": "<createForm 返回的 continuation>",
|
|
155
|
+
"requestName": "开票申请-深圳市康哲药业有限公司-20266105586",
|
|
156
|
+
"action": "draft",
|
|
157
|
+
"data": {
|
|
158
|
+
"main": {
|
|
159
|
+
"100003720000056343": "20266105586",
|
|
160
|
+
"100003720000056262": "深圳市康哲药业有限公司2026年度维护(1327967410806063252)",
|
|
161
|
+
"100003720000056342": "契约锁",
|
|
162
|
+
"100003720000056255": "2026-10-23",
|
|
163
|
+
"100003720000056250": "2026-11-30",
|
|
164
|
+
"100003720000118915": "20266105586",
|
|
165
|
+
"100003720000056252": "合同20266105586(深圳市康哲药业有限公司2026年度维护)年度维护费全额开票,金额5900元"
|
|
166
|
+
},
|
|
167
|
+
"details": {"100003690000001811": [{
|
|
168
|
+
"100003720000118901": "5900"
|
|
169
|
+
}]}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
JSON
|
|
173
|
+
weaver-work-cli --json workflow run workflow.createRequest --input ./issuing-request.json
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Windows PowerShell:
|
|
177
|
+
|
|
178
|
+
```powershell
|
|
179
|
+
weaver-work-cli --json invoice run invoice.issuing.qys.list --input-json '{"contractNo":"20266105586"}'
|
|
180
|
+
weaver-work-cli --json workflow run workflow.createForm --input-json '{"workflow":["契约锁合同收款发票开具及快递申请(100003460000001852)"]}'
|
|
181
|
+
Set-Content -Encoding utf8 -LiteralPath .\issuing-request.json -Value @'
|
|
182
|
+
{
|
|
183
|
+
"context": "<createForm 返回的 continuation>",
|
|
184
|
+
"requestName": "开票申请-深圳市康哲药业有限公司-20266105586",
|
|
185
|
+
"action": "draft",
|
|
186
|
+
"data": {
|
|
187
|
+
"main": {
|
|
188
|
+
"100003720000056343": "20266105586",
|
|
189
|
+
"100003720000056262": "深圳市康哲药业有限公司2026年度维护(1327967410806063252)",
|
|
190
|
+
"100003720000056342": "契约锁",
|
|
191
|
+
"100003720000056255": "2026-10-23",
|
|
192
|
+
"100003720000056250": "2026-11-30",
|
|
193
|
+
"100003720000118915": "20266105586",
|
|
194
|
+
"100003720000056252": "合同20266105586(深圳市康哲药业有限公司2026年度维护)年度维护费全额开票,金额5900元"
|
|
195
|
+
},
|
|
196
|
+
"details": {"100003690000001811": [{
|
|
197
|
+
"100003720000118901": "5900"
|
|
198
|
+
}]}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
'@
|
|
202
|
+
weaver-work-cli --json workflow run workflow.createRequest --input .\issuing-request.json
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## 注意
|
|
206
|
+
|
|
207
|
+
- 台账里的合同号、购方、税号、金额、税率按原值使用,**不改写、不补位、不格式化**。
|
|
208
|
+
- 本链路不读取、不上传任何附件或图片;用户另外提供文件要求"按文件开票"时,说明当前只支持按契约锁台账发起开票流程,需先把数据录入台账。
|
|
209
|
+
- 一次只发起一组(一张流程);用户要求多份合同一起开时,逐组走 Step 3~6,每组各调一次 `createForm`,`continuation` 不跨组复用。
|
|
210
|
+
- 写请求已发出但结果不确定时按 SKILL.md「写操作失败处理」处理,**禁止重放 `createRequest`**。
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
| 取发票字段对象 | `invoice.browse-field.data` | yepiaotong | read |
|
|
19
19
|
| 获取当前人员及上级(兜底) | `invoice.reim.employee-superiors` | yepiaotong | read |
|
|
20
20
|
| 载入报销表单 | `workflow.createForm` | workflow | read |
|
|
21
|
-
|
|
|
21
|
+
| 创建报销单(固定存草稿) | `workflow.createRequest` | workflow | high-risk-write |
|
|
22
22
|
| 修改已创建的报销单 | `workflow.editLoad` / `workflow.editPrepare` / `workflow.editApply` | workflow | read / read-before-write / high-risk-write |
|
|
23
23
|
|
|
24
24
|
> workflow 侧命令的入参、返回处置以 [`../../weaver-e10-workflow/references/workflow-create.md`](../../weaver-e10-workflow/references/workflow-create.md)、[`workflow-edit.md`](../../weaver-e10-workflow/references/workflow-edit.md) 为准。`weaver-e10-workflow` 技能不可用时停止并告知用户需要安装该技能,不要改用其他方式创建报销单。
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
3. 用 `invoice.reim.requests.list` 获取事前申请,再按时间、费用类型和标题做匹配;原始 ID、日期、金额必须逐字符保留。
|
|
31
31
|
4. 用 `invoice.reim.workflow.resolve` 得到报销工作流,必要时按工作流分组。
|
|
32
32
|
5. 对每组并行调用 `workflow.createForm`(`workflow` 传 `{workFlowName}({workFlowId})`)、`invoice.reim.row-info-batch`、`invoice.browse-field.data`(发票 + 配对凭证的 `fid`)。
|
|
33
|
-
6. 按 [`reim-form-fill-rules.md`](reim-form-fill-rules.md) 组装 `createRequest` 的 `data
|
|
33
|
+
6. 按 [`reim-form-fill-rules.md`](reim-form-fill-rules.md) 组装 `createRequest` 的 `data`,直接调用 `workflow.createRequest` 存草稿(`action` 固定 `"draft"`,不问用户),结果原样粘贴 `finalMarkdown`。命中「话费补贴标准审批流程」或「话费报销」时,必须先读 [`reim-phone-subsidy-rules.md`](reim-phone-subsidy-rules.md),按月度标准核算实报金额,不能直接用发票金额填单。
|
|
34
34
|
7. 报销单创建成功后,后续修正使用 `workflow.editLoad` → `workflow.editPrepare` → 用户确认 → `workflow.editApply`,不要重复创建同一组发票的报销单。
|
|
35
35
|
|
|
36
36
|
完整编排见 [`reim-workflow.md`](reim-workflow.md)。
|
|
@@ -73,10 +73,10 @@ Windows PowerShell:
|
|
|
73
73
|
Set-Content -Encoding utf8 -LiteralPath .\reim-create-request.json -Value @'
|
|
74
74
|
{
|
|
75
75
|
"context": "<createForm 返回的 continuation>",
|
|
76
|
-
"requestName": "
|
|
76
|
+
"requestName": "示例7月上海交通费报销",
|
|
77
77
|
"action": "draft",
|
|
78
78
|
"data": {
|
|
79
|
-
"main": {"100003720000000088": "
|
|
79
|
+
"main": {"100003720000000088": "上海市内交通费(滴滴出行)"},
|
|
80
80
|
"details": {"100003690000000011": [{"100003720000016373": "108.2", "100003720000052200": "人民币(100001050000000001)"}]}
|
|
81
81
|
}
|
|
82
82
|
}
|
|
@@ -90,10 +90,10 @@ macOS/Linux(bash/zsh):
|
|
|
90
90
|
cat > ./reim-create-request.json <<'JSON'
|
|
91
91
|
{
|
|
92
92
|
"context": "<createForm 返回的 continuation>",
|
|
93
|
-
"requestName": "
|
|
93
|
+
"requestName": "示例7月上海交通费报销",
|
|
94
94
|
"action": "draft",
|
|
95
95
|
"data": {
|
|
96
|
-
"main": {"100003720000000088": "
|
|
96
|
+
"main": {"100003720000000088": "上海市内交通费(滴滴出行)"},
|
|
97
97
|
"details": {"100003690000000011": [{"100003720000016373": "108.2", "100003720000052200": "人民币(100001050000000001)"}]}
|
|
98
98
|
}
|
|
99
99
|
}
|
|
@@ -109,7 +109,7 @@ weaver-work-cli --json workflow run workflow.createRequest --input ./reim-create
|
|
|
109
109
|
|
|
110
110
|
## 注意
|
|
111
111
|
|
|
112
|
-
|
|
112
|
+
载入表单的 `workflow.createForm` **不传 `userQuestion`**、也不用 `workflow.createRequestDirect`:报销的 `data` 由本技能规则组装,不用流程侧智能填参。AI 报销**一律存草稿**(`action:"draft"`),组装完直接调用 `workflow.createRequest`,不让用户选「存草稿 / 提交审批」;草稿由用户在 E10 里核对后自己提交。同一组发票创建成功后禁止再次创建,修改只能走 `workflow.edit*`。
|
|
113
113
|
|
|
114
114
|
出差/差旅流程需要具体相关客户。未拿到用户提供的客户前,不要调用 `workflow.createRequest`。
|
|
115
115
|
|
|
@@ -67,7 +67,7 @@ weaver-work-cli --json invoice run invoice.reim.file-ocr.preview --input-json '{
|
|
|
67
67
|
| `invoiceId` | 发票唯一ID(后续匹配和填单使用) |
|
|
68
68
|
| `invoiceType` | 发票类型名称 |
|
|
69
69
|
| `invoiceTypeCode` | 发票类型编码 |
|
|
70
|
-
| `amount` |
|
|
70
|
+
| `amount` | 发票金额(价税合计) |
|
|
71
71
|
| `consumeContent` | 消费内容/商品名称 |
|
|
72
72
|
| `invoiceDate` | 开票日期(yyyy-MM-dd) |
|
|
73
73
|
| `invoiceNumber` | 发票号码 |
|
|
@@ -227,8 +227,10 @@ CLI 信封中列表在 `data.items`。下面是单条发票的票面结构(对
|
|
|
227
227
|
| `info.comm_info.pro.type` | `invoiceTypeCode` | 发票类型编码(见下方分类说明) |
|
|
228
228
|
| `info.comm_info.pro.date` | `invoiceDate` | 开票日期(yyyy-MM-dd) |
|
|
229
229
|
| `info.comm_info.pro.status` | — | 发票状态(**8=全额红冲,必须过滤掉**) |
|
|
230
|
-
| `info.comm_info.price.total` | `amount` |
|
|
231
|
-
| `info.comm_info.price.amount` | — |
|
|
230
|
+
| `info.comm_info.price.total` | `amount` | **价税合计(发票金额)**——报销金额一律用它 |
|
|
231
|
+
| `info.comm_info.price.amount` | — | 不含税金额,**不要拿来填报销金额**(字段名虽叫 `amount`) |
|
|
232
|
+
|
|
233
|
+
> ⚠️ 原始返回里叫 `amount` 的字段**不一定是价税合计**:`invoice.list` / `invoice.get` 的 `price.amount`、`invoice.get` 里的 `amount` 都是**不含税**金额(实测滴滴票 `price.amount=48.61`、`price.total=50.07`)。本技能文档里说的「发票 `amount`」专指上表映射后的**价税合计 `price.total`**。
|
|
232
234
|
| `info.comm_info.buyer.company` | `buyerName` | 购方公司名称 |
|
|
233
235
|
| `info.comm_info.payer.company` | `sellerName` | 销方公司名称 |
|
|
234
236
|
| `info.fylx` | — | 费用类型 ID(需根据 ID 查找对应 `expenseType` 名称) |
|
|
@@ -743,6 +745,9 @@ weaver-work-cli --json invoice run invoice.reim.row-info --input-json '{"invoice
|
|
|
743
745
|
| `itinerary` | 关联凭证 ID(多个用逗号拼接) | 相关凭证(`EinvoiceComponent`,每行最多 1 张) |
|
|
744
746
|
| `subjectId` | 费用科目 ID | 费用类型(科目) |
|
|
745
747
|
| `subjectName` | 费用科目名称 | 与 `subjectId` 拼成 `名称(ID)` |
|
|
748
|
+
| `sqje` / `sbje` | 整张发票的申请金额 | 仅参考;金额字段填发票价税合计(`price.total`) |
|
|
749
|
+
| `containsItinerary` | 是否关联了行程单 | — |
|
|
750
|
+
| `itineraryData` | **行程单逐段明细**数组,每段含 `date`、`sqje`(该段金额)、`fysm`(`{起点} - {终点}`)、`subjectId` / `subjectName`、`itinerary`(凭证 ID)、`invoiceId` | **暂不拆行**;只在 `invoice.get` 取不到起止点时给费用说明兜底,见 [reim-form-fill-rules.md](reim-form-fill-rules.md#4-行程单多段行程暂不拆行) |
|
|
746
751
|
|
|
747
752
|
|
|
748
753
|
### 返回示例
|
|
@@ -766,6 +771,7 @@ weaver-work-cli --json invoice run invoice.reim.row-info --input-json '{"invoice
|
|
|
766
771
|
- **优先级**:此 CLI 返回的 `date`、`fysm`、`itinerary`、`subjectId` 四个值**优先于 AI 自行推断的值**
|
|
767
772
|
- **容错**:如果某个字段为空/null,则回退到 AI 推断逻辑
|
|
768
773
|
- **itinerary 处理**:如果 `itinerary` 有值,直接作为该行的配对凭证,**替代原有的凭证配对逻辑**;先用 `invoice.browse-field.data` 取凭证对象再填入「相关凭证」。逗号分隔返回多个时,每行只挂最匹配的 1 张(规则见 [reim-form-fill-rules.md](reim-form-fill-rules.md#3-凭证与发票配对))
|
|
774
|
+
- **itineraryData 处理**:暂不拆行,不管几段都是一张发票一行;只用来给费用说明兜底(第一段起点 - 最后一段终点)
|
|
769
775
|
|
|
770
776
|
---
|
|
771
777
|
|
|
@@ -958,7 +964,7 @@ weaver-work-cli --json invoice run invoice.browse-field.data --input-json '{"fid
|
|
|
958
964
|
| 动作 | 命令 | 契约 |
|
|
959
965
|
| --- | --- | --- |
|
|
960
966
|
| 载入报销表单 | `workflow.createForm`(`workflow` 传 `{workFlowName}({workFlowId})`) | [`workflow-create.md`](../../weaver-e10-workflow/references/workflow-create.md) |
|
|
961
|
-
|
|
|
967
|
+
| 创建报销单(固定存草稿) | `workflow.createRequest`(`context` + `data` + `action` + `requestName`) | 同上 |
|
|
962
968
|
| 修改已创建的报销单 | `workflow.editLoad` → `workflow.editPrepare` → `workflow.editApply` | [`workflow-edit.md`](../../weaver-e10-workflow/references/workflow-edit.md) |
|
|
963
969
|
|
|
964
|
-
`data` 的组装规则见 [reim-form-fill-rules.md](reim-form-fill-rules.md)
|
|
970
|
+
`data` 的组装规则见 [reim-form-fill-rules.md](reim-form-fill-rules.md),编排顺序见 [reim-workflow.md](reim-workflow.md) Step 3 ~ Step 6。
|
|
@@ -375,7 +375,7 @@ weaver-work-cli --json invoice run invoice.browse-field.data --input-json '{"fid
|
|
|
375
375
|
{
|
|
376
376
|
"main": {
|
|
377
377
|
"1256786432515129369": "交通费报销-后端开发111-2026-07-25(1298294241967177729)",
|
|
378
|
-
"100003720000000088": "
|
|
378
|
+
"100003720000000088": "上海市内交通费(滴滴出行)",
|
|
379
379
|
"100003720000000687": "泛微上海(100504500000311504)"
|
|
380
380
|
},
|
|
381
381
|
"details": {
|
|
@@ -395,36 +395,15 @@ weaver-work-cli --json invoice run invoice.browse-field.data --input-json '{"fid
|
|
|
395
395
|
}
|
|
396
396
|
```
|
|
397
397
|
|
|
398
|
-
### Step 5:
|
|
398
|
+
### Step 5: 直接存草稿
|
|
399
399
|
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
```markdown
|
|
403
|
-
即将创建报销单「交通费报销-后端开发111-2026-08-04」,请确认:
|
|
404
|
-
|
|
405
|
-
| 项目 | 值 |
|
|
406
|
-
| --- | --- |
|
|
407
|
-
| 报销工作流 | 总部费用报销 |
|
|
408
|
-
| 报销事由 | 2026-07-30 市内交通 - 滴滴出行 |
|
|
409
|
-
| 相关客户 | 泛微上海(100504500000311504) |
|
|
410
|
-
| 事前申请 | 交通费报销-后端开发111-2026-07-25(1298294241967177729) |
|
|
411
|
-
| 合计金额 | ¥108.20 |
|
|
412
|
-
|
|
413
|
-
| # | 发票号码 | 金额 | 费用日期 | 费用类型 | 费用说明 | 相关凭证 |
|
|
414
|
-
|---|----------|------|----------|----------|----------|----------|
|
|
415
|
-
| 1 | 36901189 | ¥108.20 | 2026-07-30 | 市内交通费(100502270000000006) | 仁济医院南院-浦江瑞和城 | ✅ 滴滴行程单 |
|
|
416
|
-
|
|
417
|
-
申请人、承担主体、上级、部门、合同号、报销方式由表单按当前登录人默认带出;币种为人民币。
|
|
418
|
-
请回复「存草稿」或「提交审批」;需要修改请直接告诉我。
|
|
419
|
-
```
|
|
420
|
-
|
|
421
|
-
用户回复「提交审批」→ 写入 `reim-create-request.json` 并调用:
|
|
400
|
+
组装完直接写入 `reim-create-request.json` 并调用,**不展示预览、不问「存草稿 / 提交审批」**:
|
|
422
401
|
|
|
423
402
|
```json
|
|
424
403
|
{
|
|
425
404
|
"context": "wc-9834fa828b86aed3",
|
|
426
|
-
"requestName": "
|
|
427
|
-
"action": "
|
|
405
|
+
"requestName": "后端开发111 7月上海交通费报销",
|
|
406
|
+
"action": "draft",
|
|
428
407
|
"data": {"main": {"...": "Step 4 的 main"}, "details": {"...": "Step 4 的 details"}}
|
|
429
408
|
}
|
|
430
409
|
```
|
|
@@ -441,7 +420,7 @@ macOS/Linux(bash/zsh):
|
|
|
441
420
|
weaver-work-cli --json workflow run workflow.createRequest --input ./reim-create-request.json
|
|
442
421
|
```
|
|
443
422
|
|
|
444
|
-
**返回 `
|
|
423
|
+
**返回 `CREATED`** → 把返回的 `finalMarkdown` **原样粘贴**作为回复(已含流程编号、链接、已填内容、明细表),不要自己重拼。
|
|
445
424
|
|
|
446
425
|
---
|
|
447
426
|
|
|
@@ -478,7 +457,7 @@ weaver-work-cli --json workflow run workflow.createRequest --input ./reim-create
|
|
|
478
457
|
```
|
|
479
458
|
|
|
480
459
|
**要点**:
|
|
481
|
-
-
|
|
460
|
+
- 一张发票一行,数组顺序就是明细行顺序(行程单有多段行程也不拆,见示例13)
|
|
482
461
|
- 两行都绑定同一个事前申请(明细「相关流程」同值)
|
|
483
462
|
- 每行「相关发票」只放该行发票的 1 个对象
|
|
484
463
|
|
|
@@ -651,30 +630,73 @@ AI 操作:
|
|
|
651
630
|
|
|
652
631
|
用户说:"帮我报销一下去重庆的发票,承担主体:边宝,合同编号:20250104933"
|
|
653
632
|
|
|
654
|
-
-
|
|
633
|
+
- 流程标题:`"龚为明8月去重庆交通费报销"`(「去重庆」取用户原话,没说从哪出发就不写出发城市;月份取发票费用日期 2026-08-19)
|
|
634
|
+
- 合同号传 `"20250104933"`;**承担主体、相关客户、相关项目都不传**(「边宝」也不传),直接存草稿
|
|
655
635
|
- 创建后 `linkageResult` 返回(2026-10-21 真机):`字段联动带出:…实报金额=50.07、承担主体=朱洪磊、相关客户=中国航空集团有限公司、合同号=20250104933、相关项目=中航集团办公平台改造及升级项目。`
|
|
656
636
|
- 原样粘贴 `finalMarkdown` 后补一句:「承担主体、相关客户、相关项目已按合同 20250104933 联动带出:朱洪磊 / 中国航空集团有限公司 / 中航集团办公平台改造及升级项目;你提到的承担主体「边宝」与合同不一致,已按合同联动为准。」
|
|
657
637
|
|
|
658
638
|
---
|
|
659
639
|
|
|
640
|
+
## 示例13:行程单有多段行程(不拆行)
|
|
641
|
+
|
|
642
|
+
还是示例12那张滴滴发票(¥50.07,发票 ID `1328381858116714513`,行程单 `1328381883894906889`)。`row-info-batch` 返回(2026-10-21 真机):
|
|
643
|
+
|
|
644
|
+
```json
|
|
645
|
+
{
|
|
646
|
+
"date": "2026-08-19", "sqje": "50.07", "fysm": "交通运输服务",
|
|
647
|
+
"itinerary": "1328381883894906889", "containsItinerary": true,
|
|
648
|
+
"itineraryData": [
|
|
649
|
+
{"date": "2025-12-31", "sqje": "14.67", "fysm": "大道|重庆财经学院-西门 - 鱼胡路-地铁站", "subjectName": "5301滴滴车票", "subjectId": "100502270000000177", "itinerary": "1328381883894906889"},
|
|
650
|
+
{"date": "2026-01-22", "sqje": "10.40", "fysm": "大道|重庆财经学院-西门 - 鱼胡路-地铁站", "subjectName": "5301滴滴车票", "subjectId": "100502270000000177", "itinerary": "1328381883894906889"},
|
|
651
|
+
{"date": "2026-04-09", "sqje": "25.00", "fysm": "大道|重庆财经学院-西门 - 大渡口区|重庆工业博物馆", "subjectName": "5301滴滴车票", "subjectId": "100502270000000177", "itinerary": "1328381883894906889"}
|
|
652
|
+
]
|
|
653
|
+
}
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
`itineraryData` 有 3 段,**仍然只填 1 行**:费用日期取外层 `date`,金额取发票金额,费用说明取 `invoice.get` 的起止点(from=`大道|重庆财经学院-西门`,to=`鱼胡路-地铁站`),取不到时才用 `itineraryData` 第一段起点 - 最后一段终点。
|
|
657
|
+
|
|
658
|
+
```json
|
|
659
|
+
"100003690000000011": [
|
|
660
|
+
{"100003720000000419": "2026-08-19", "100003720000016373": "50.07", "100003720000000360": "5301滴滴车票(100502270000000177)", "100003720000000361": "重庆财经学院-鱼胡路站", "100003720000052200": "人民币(100001050000000001)", "100003720000077896": [<发票对象>], "100003720000079682": [<行程单对象>]}
|
|
661
|
+
]
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
- 流程标题:`龚为明8月去重庆交通费报销`
|
|
665
|
+
|
|
666
|
+
---
|
|
667
|
+
|
|
668
|
+
## 示例14:按出差时间 + 城市查票(「报销上周去北京的费用」)
|
|
669
|
+
|
|
670
|
+
今天 2026-10-21,用户说"帮我报销上周去北京的费用"(2026-10-21 真机):
|
|
671
|
+
|
|
672
|
+
1. 出差时间 = 上周 2026-10-12 ~ 10-18 → 开票日期查 **2026-10-12 ~ 今天**
|
|
673
|
+
2. 查到 1 张火车票(10-19,¥166):`invoice.get` 起止站 杭州东 → 全椒,与北京无关
|
|
674
|
+
3. 没有与北京相关的票 → 回复用户:
|
|
675
|
+
|
|
676
|
+
> 你的票夹里没找到上周去北京的发票,所以没有往下建报销单。我按开票日期 2026-10-12 到今天查的,只有 1 张火车票(10-19,¥166),但它是杭州东 → 全椒,跟北京无关。可能是北京的发票还没导进票夹,或者日期不在上周。
|
|
677
|
+
|
|
678
|
+
- 不要因为这期间有票就拿来报;也不要自己把时间放宽到几个月前
|
|
679
|
+
|
|
680
|
+
---
|
|
681
|
+
|
|
660
682
|
## 关键检查清单
|
|
661
683
|
|
|
662
684
|
调用 `workflow.createRequest` 前确认:
|
|
663
685
|
|
|
664
686
|
1. [ ] `context` 是本组 `workflow.createForm` 返回的 `continuation`,没有复用别的报销单的句柄
|
|
665
|
-
2. [ ] `workflow.createForm` 传的是 Step 2.5 得到的 `{workFlowName}({workFlowId})`
|
|
666
|
-
3. [ ] `requestName`
|
|
687
|
+
2. [ ] `workflow.createForm` 传的是 Step 2.5 得到的 `{workFlowName}({workFlowId})`,**没有传 `userQuestion`**,也没用 `workflow.createRequestDirect`
|
|
688
|
+
3. [ ] `requestName` 是 `{申请人}{月份}{行程}{费用类型}报销`(如 `严玥宸10月上海去北京费用报销`):月份取费用日期(不是今天),出发城市没有凭猜,没有「(共N笔)」、金额、具体日期,不超过30字
|
|
667
689
|
4. [ ] `data` 的键全部来自本次 `createForm` 的 `fields[].id`,没有 `fields` 之外的字段(实报金额、附件数、承担人所有上级等不传)
|
|
668
690
|
5. [ ] 带 `initialValue` 且不需改写的字段没有重复传;**例外:每行明细都显式传了「币种」`人民币(100001050000000001)`**(不传会让「申请金额」联动失效)
|
|
669
691
|
6. [ ] 浏览按钮写 `名称(ID)`,没有裸 ID;Select 写选项名,不是 optionValue
|
|
670
692
|
7. [ ] 每行「相关发票」是 `invoice.browse-field.data` 返回的 1 个发票对象;有凭证时「相关凭证」也是 1 个对象,无凭证不传
|
|
671
|
-
8. [ ] 相关凭证(17/18/57/58
|
|
693
|
+
8. [ ] 相关凭证(17/18/57/58)没有单独成行;行程单有多段行程也是一张发票一行;**有行程单 / 交通类 / 出差报销的明细,费用说明是精简后的 `起点-终点`:**整串最多 1 个 `-`、没有 `|` 和空格**,不是原样抄的 `from` / `to` / `fysm`
|
|
672
694
|
9. [ ] 每行「费用类型(科目)」有值,匹配不到填 `其他-管理费用(100502270000000104)`
|
|
673
695
|
10. [ ] 文本字段没有 `*` 号
|
|
674
696
|
11. [ ] **出差/差旅流程:相关客户已由用户提供具体名称;未提供则不允许调用 `workflow.createRequest`**
|
|
675
697
|
12. [ ] 非出差流程:相关客户填 `泛微上海(100504500000311504)`;**用户给了合同号时承担主体 / 相关客户 / 相关项目都不传,以合同联动为准**
|
|
676
698
|
13. [ ] 话费报销:金额字段填的是核算后的实报金额
|
|
677
|
-
14. [ ]
|
|
699
|
+
14. [ ] `action` 是 `"draft"`,没有问用户「存草稿 / 提交审批」,也没有传 `"submit"`
|
|
678
700
|
|
|
679
701
|
修改报销单前确认:
|
|
680
702
|
|