weaver-work-cli 0.1.0
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/LICENSE +21 -0
- package/README.md +422 -0
- package/dist/cmd/action.js +35 -0
- package/dist/cmd/commands/index.js +15 -0
- package/dist/cmd/config/index.js +64 -0
- package/dist/cmd/docs/index.js +56 -0
- package/dist/cmd/doctor/index.js +45 -0
- package/dist/cmd/e10/index.js +25 -0
- package/dist/cmd/index.js +18 -0
- package/dist/cmd/register.js +19 -0
- package/dist/cmd/root.js +36 -0
- package/dist/cmd/run/index.js +38 -0
- package/dist/cmd/setup/index.js +77 -0
- package/dist/cmd/skills/index.js +72 -0
- package/dist/core/config-store.js +43 -0
- package/dist/core/context.js +31 -0
- package/dist/core/errors.js +60 -0
- package/dist/core/hooks.js +41 -0
- package/dist/core/logger.js +27 -0
- package/dist/core/output.js +25 -0
- package/dist/core/write-with-retry.js +21 -0
- package/dist/index.js +11 -0
- package/dist/internal/e10/auth/commands.js +594 -0
- package/dist/internal/e10/auth/crypto.js +126 -0
- package/dist/internal/e10/auth/paths.js +12 -0
- package/dist/internal/e10/auth/session.js +449 -0
- package/dist/internal/e10/client.js +104 -0
- package/dist/internal/e10/context.js +20 -0
- package/dist/internal/e10/index.js +2 -0
- package/dist/internal/e10/types.js +1 -0
- package/dist/internal/skills/install.js +99 -0
- package/dist/internal/skills/reader.js +119 -0
- package/dist/services/command-runner.js +44 -0
- package/dist/shortcuts/index.js +4 -0
- package/dist/shortcuts/invoice/continuation.js +70 -0
- package/dist/shortcuts/invoice/errors.js +59 -0
- package/dist/shortcuts/invoice/host.js +337 -0
- package/dist/shortcuts/invoice/index.js +301 -0
- package/dist/shortcuts/invoice/manifest.js +288 -0
- package/dist/shortcuts/invoice/operations/add.js +106 -0
- package/dist/shortcuts/invoice/operations/delete.js +92 -0
- package/dist/shortcuts/invoice/operations/download.js +16 -0
- package/dist/shortcuts/invoice/operations/get.js +7 -0
- package/dist/shortcuts/invoice/operations/import.js +128 -0
- package/dist/shortcuts/invoice/operations/list.js +12 -0
- package/dist/shortcuts/invoice/operations/ocr-preview.js +40 -0
- package/dist/shortcuts/invoice/operations/registry.js +50 -0
- package/dist/shortcuts/invoice/operations/shared.js +640 -0
- package/dist/shortcuts/invoice/operations/types.js +1 -0
- package/dist/shortcuts/invoice/operations/update.js +109 -0
- package/dist/shortcuts/invoice/operations/upload.js +8 -0
- package/dist/shortcuts/invoice/operations/validate-preview.js +39 -0
- package/dist/shortcuts/invoice/operations.js +8 -0
- package/dist/types.js +1 -0
- package/docs/SKILL.md +36 -0
- package/docs/_catalog.md +12 -0
- package/docs/agent-invoice.md +53 -0
- package/docs/e10-auth.md +51 -0
- package/docs/invoice.md +99 -0
- package/package.json +51 -0
- package/scripts/clean.mjs +4 -0
- package/scripts/package-skill.mjs +164 -0
- package/scripts/sync-docs.mjs +17 -0
- package/skill-template/business-info.json +4 -0
- package/skill-template/domains/invoice.md +23 -0
- package/skill-template/domains/shared.md +8 -0
- package/skill-template/master-skill-template.md +29 -0
- package/skill-template/skill-template.md +60 -0
- package/skills/weaver-work-cli-invoice/SKILL.md +103 -0
- package/skills/weaver-work-cli-invoice/product.json +8 -0
- package/skills/weaver-work-cli-invoice/references/invoice-add.md +18 -0
- package/skills/weaver-work-cli-invoice/references/invoice-agent-entry.md +38 -0
- package/skills/weaver-work-cli-invoice/references/invoice-delete.md +20 -0
- package/skills/weaver-work-cli-invoice/references/invoice-detail.md +29 -0
- package/skills/weaver-work-cli-invoice/references/invoice-disabled-capabilities.md +26 -0
- package/skills/weaver-work-cli-invoice/references/invoice-download.md +22 -0
- package/skills/weaver-work-cli-invoice/references/invoice-enterprise-list.md +35 -0
- package/skills/weaver-work-cli-invoice/references/invoice-file-upload.md +28 -0
- package/skills/weaver-work-cli-invoice/references/invoice-import.md +28 -0
- package/skills/weaver-work-cli-invoice/references/invoice-ocr-preview.md +33 -0
- package/skills/weaver-work-cli-invoice/references/invoice-personal-list.md +47 -0
- package/skills/weaver-work-cli-invoice/references/invoice-update.md +38 -0
- package/skills/weaver-work-cli-invoice/references/invoice-validation-preview.md +26 -0
- package/skills/weaver-work-cli-shared/SKILL.md +53 -0
- package/skills/weaver-work-cli-shared/references/e10-auth-and-session.md +83 -0
- package/skills/weaver-work-cli-shared/references/high-risk-write.md +36 -0
- package/skills/weaver-work-cli-shared/references/json-output-contract.md +61 -0
- package/skills/weaver-work-cli-shared/references/weaver-work-cli-installation.md +61 -0
- package/templates/shortcut/index.ts.tpl +19 -0
- package/templates/shortcut/operations/ping.ts.tpl +7 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
本业务域用于 E10 业票通发票管理。入口 `SKILL.md` 按飞书 `lark-approval` 风格组织:CRITICAL 共享前置、路由优先级、高优先级语义、逐 operation 命令表、处理链、执行原则、写操作失败决策树和“不在范围”。具体用法拆到 `references/`:
|
|
2
|
+
|
|
3
|
+
- `invoice-agent-entry.md`:schema、统一 `invoice run` 入口、stdin JSON 调用方式。
|
|
4
|
+
- `invoice-personal-list.md`:个人票夹查询,默认筛选未报销发票。
|
|
5
|
+
- `invoice-enterprise-list.md`:企业票夹查询,默认筛选未报销发票。
|
|
6
|
+
- `invoice-detail.md`:按 `fid` 或 `number` 查看详情。
|
|
7
|
+
- `invoice-file-upload.md`:上传发票文件。
|
|
8
|
+
- `invoice-ocr-preview.md`:OCR 预览,不描述为已入票夹。
|
|
9
|
+
- `invoice-validation-preview.md`:查验预览,不回写票夹。
|
|
10
|
+
- `invoice-download.md`:下载发票附件。
|
|
11
|
+
- `invoice-import.md`:导入发票文件的 `prepare -> apply` 写入协议。
|
|
12
|
+
- `invoice-add.md`:手工新增发票的 `prepare -> apply` 写入协议。
|
|
13
|
+
- `invoice-update.md`:编辑发票的 `prepare -> apply` 写入协议。
|
|
14
|
+
- `invoice-delete.md`:删除发票的 `prepare -> apply` 写入协议。
|
|
15
|
+
- `invoice-disabled-capabilities.md`:共享、转让、标签等暂未暴露能力的处理边界。
|
|
16
|
+
|
|
17
|
+
Agent 调优重点:
|
|
18
|
+
|
|
19
|
+
- `weaver-work-cli invoice schema` 是 operation 合约第一信息源。
|
|
20
|
+
- 业务输入不得包含 Cookie、ETEAMSID、Token 或内部控制字段。
|
|
21
|
+
- 写操作只接受 CLI 生成的 continuation,不手工构造或复用。
|
|
22
|
+
- `validate=false` 只能说明跳过查验,不能描述为查验通过。
|
|
23
|
+
- 结果为 `partial/write_uncertain` 时停止,不自动重放写请求。
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
共享底座用于所有 `weaver-work-cli-*` 业务 Skill。入口 `SKILL.md` 保留安装检查、E10 认证、JSON 输出、高风险写入和安全边界的强触发索引;细节拆到 `references/`:
|
|
2
|
+
|
|
3
|
+
- `weaver-work-cli-installation.md`:安装、构建、全局 link、当前 skill 列表。
|
|
4
|
+
- `e10-auth-and-session.md`:登录、profile、auth 文件、E10 会话和 `WEAVER_*` 环境变量。
|
|
5
|
+
- `json-output-contract.md`:stdout/stderr、JSON envelope、退出码和脚本判断规则。
|
|
6
|
+
- `high-risk-write.md`:`prepare -> apply`、用户确认、continuation 和停止条件。
|
|
7
|
+
|
|
8
|
+
业务 Skill 只链接共享底座,不复制共享规则正文,避免多处规则漂移。
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: weaver-work-cli
|
|
3
|
+
description: "泛微工作 CLI 聚合能力入口:{{meta_description}}"
|
|
4
|
+
metadata:
|
|
5
|
+
requires:
|
|
6
|
+
bins: ["weaver-work-cli"]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# weaver-work-cli 聚合 Skill
|
|
10
|
+
|
|
11
|
+
你是 `weaver-work-cli` 的聚合路由层。你的职责是先判断用户要使用哪个 `weaver-work-cli-*` 子能力,再读取并遵循对应子能力的说明。
|
|
12
|
+
|
|
13
|
+
聚合 Skill 不直接承载具体 API 操作步骤。除非对应子能力已被读取,否则不要仅根据本文件拼命令、猜参数或执行复杂操作。
|
|
14
|
+
|
|
15
|
+
所有子能力统一收纳在当前 Skill 的 `references/` 目录。选择 `weaver-work-cli-foo` 后,直接读取 `references/weaver-work-cli-foo/SKILL.md`;不要再次调用独立 Skill,也不要遍历整个 references 目录。
|
|
16
|
+
|
|
17
|
+
{{shared_body}}
|
|
18
|
+
|
|
19
|
+
## 使用流程
|
|
20
|
+
|
|
21
|
+
1. 根据用户意图从路由表选择一个或多个子能力。
|
|
22
|
+
2. 直接读取 `references/<skill-name>/SKILL.md` 加载所选子能力。
|
|
23
|
+
3. 仅使用本文件列出的路由与对应子能力入口;目标能力未列出时明确说明无法路由。
|
|
24
|
+
4. 仅读取当前已选子能力明确要求的前置文件和 reference。
|
|
25
|
+
5. 按目标子能力说明执行;安装、E10 认证、JSON 输出和高风险写入优先遵循 `weaver-work-cli-shared`。
|
|
26
|
+
|
|
27
|
+
## 能力路由
|
|
28
|
+
|
|
29
|
+
{{domain_entries}}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: weaver-work-cli-{{module}}
|
|
3
|
+
description: "{{meta_description}}"
|
|
4
|
+
metadata:
|
|
5
|
+
requires:
|
|
6
|
+
bins: ["weaver-work-cli"]
|
|
7
|
+
cliHelp: "weaver-work-cli {{command}} --help"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-work-cli-shared/SKILL.md`](../weaver-work-cli-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。**
|
|
11
|
+
所有命令通过 `weaver-work-cli --json {{command}} run <operation> --input -` 执行。调用前先按需读取 references 下对应的文件,查参数结构,不要猜字段;**references 是第一信息源**,`weaver-work-cli {{command}} schema` 是 operation、字段和风险等级的合约来源。
|
|
12
|
+
|
|
13
|
+
## 路由优先级(先判断是不是 {{title}},再选 operation)
|
|
14
|
+
|
|
15
|
+
{{routing_priority}}
|
|
16
|
+
|
|
17
|
+
### 明确归 `weaver-work-cli-{{module}}` 的高优先级语义
|
|
18
|
+
|
|
19
|
+
{{intent_bullets}}
|
|
20
|
+
|
|
21
|
+
**判定规则:** {{routing_rule}}
|
|
22
|
+
|
|
23
|
+
## 选哪个命令
|
|
24
|
+
|
|
25
|
+
| 想做什么 | 命令 | 按需读取 reference |
|
|
26
|
+
| --- | --- | --- |
|
|
27
|
+
{{reference_rows}}
|
|
28
|
+
|
|
29
|
+
处理链:
|
|
30
|
+
|
|
31
|
+
{{workflow_chains}}
|
|
32
|
+
|
|
33
|
+
## 执行原则(减少误路由、误重试和无效消耗)
|
|
34
|
+
|
|
35
|
+
### 1) 先拿最小必要信息,再执行
|
|
36
|
+
|
|
37
|
+
{{minimum_info_rules}}
|
|
38
|
+
|
|
39
|
+
### 2) 已知对象时直达动作
|
|
40
|
+
|
|
41
|
+
{{direct_action_rules}}
|
|
42
|
+
|
|
43
|
+
### 3) 错误语义驱动,而不是盲目重试
|
|
44
|
+
|
|
45
|
+
- 失败后先看进程退出码、`error.type`、`error.subtype` 和 `error.message`
|
|
46
|
+
- **除非错误明确提示可恢复或需要补充参数,否则不要重复刷同一个 operation**
|
|
47
|
+
- 写请求已经发出后,遇到结果不确定必须停止;不要把 `.apply` 当成可重试读操作
|
|
48
|
+
|
|
49
|
+
## 写操作失败处理:{{write_uncertain_label}} 决策树
|
|
50
|
+
|
|
51
|
+
{{write_uncertain_tree}}
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
weaver-work-cli {{command}} schema
|
|
55
|
+
weaver-work-cli --json {{command}} run <operation> --input -
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## 不在本 skill 范围
|
|
59
|
+
|
|
60
|
+
{{out_of_scope}}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: weaver-work-cli-invoice
|
|
3
|
+
description: "泛微 E10 业票通发票:查询个人/企业票夹、查看详情、上传/OCR/查验预览/下载附件,并通过 prepare/apply 导入、新增、编辑、删除发票。当用户要处理业票通、发票、票夹、OCR、查验或发票附件时使用。共享、转让、标签当前不在范围。"
|
|
4
|
+
metadata:
|
|
5
|
+
requires:
|
|
6
|
+
bins: ["weaver-work-cli"]
|
|
7
|
+
cliHelp: "weaver-work-cli invoice --help"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-work-cli-shared/SKILL.md`](../weaver-work-cli-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。**
|
|
11
|
+
所有命令通过 `weaver-work-cli --json invoice run <operation> --input -` 执行。调用前先按需读取 references 下对应的文件,查参数结构,不要猜字段;**references 是第一信息源**,`weaver-work-cli invoice schema` 是 operation、字段和风险等级的合约来源。
|
|
12
|
+
|
|
13
|
+
## 路由优先级(先判断是不是业票通发票,再选 operation)
|
|
14
|
+
|
|
15
|
+
业票通发票不是通用 E10 对象。**只要用户的核心对象是业票通发票、个人/企业票夹、发票 OCR、发票查验或发票附件,就优先使用 `weaver-work-cli-invoice`。**
|
|
16
|
+
|
|
17
|
+
### 明确归 `weaver-work-cli-invoice` 的高优先级语义
|
|
18
|
+
|
|
19
|
+
出现以下任一语义时,优先走本 Skill:
|
|
20
|
+
|
|
21
|
+
- 业票通 / 发票 / 票夹 / 个人票夹 / 企业票夹 / 发票详情
|
|
22
|
+
- 发票上传 / OCR 识别 / 查验预览 / 附件下载
|
|
23
|
+
- 导入发票 / 新增发票 / 编辑发票 / 删除发票
|
|
24
|
+
- `fid` / `fileId` / 发票号码 / 发票代码 / 查验状态 / 报销状态
|
|
25
|
+
|
|
26
|
+
**判定规则:** 只要最终动作是对业票通发票做查询、查看、上传、OCR、查验预览、下载、导入、新增、编辑或删除,就归 `weaver-work-cli-invoice`。只有当用户处理的是非发票类 E10 业务、通用工作流或尚未封装的业票通能力时,才不使用本 Skill。
|
|
27
|
+
|
|
28
|
+
## 选哪个命令
|
|
29
|
+
| 想做什么 | 命令 | 按需读取 reference |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| 查看可用 operation、字段和风险等级 | `invoice schema` | [`invoice-agent-entry.md`](references/invoice-agent-entry.md) |
|
|
32
|
+
| 查询个人票夹 | `invoice run invoice.list` | [`invoice-personal-list.md`](references/invoice-personal-list.md) |
|
|
33
|
+
| 查询企业票夹 | `invoice run invoice.enterprise.list` | [`invoice-enterprise-list.md`](references/invoice-enterprise-list.md) |
|
|
34
|
+
| 按 `fid` 或 `number` 查看详情 | `invoice run invoice.get` | [`invoice-detail.md`](references/invoice-detail.md) |
|
|
35
|
+
| 上传发票文件 | `invoice run invoice.upload` | [`invoice-file-upload.md`](references/invoice-file-upload.md) |
|
|
36
|
+
| OCR 预览,不保存到票夹 | `invoice run invoice.ocr.preview` | [`invoice-ocr-preview.md`](references/invoice-ocr-preview.md) |
|
|
37
|
+
| 查验预览,不回写查验结果 | `invoice run invoice.validate.preview` | [`invoice-validation-preview.md`](references/invoice-validation-preview.md) |
|
|
38
|
+
| 下载发票附件 | `invoice run invoice.download` | [`invoice-download.md`](references/invoice-download.md) |
|
|
39
|
+
| 准备/确认导入发票文件 | `invoice run invoice.import.prepare/apply` | [`invoice-import.md`](references/invoice-import.md) |
|
|
40
|
+
| 准备/确认手工新增发票 | `invoice run invoice.add.prepare/apply` | [`invoice-add.md`](references/invoice-add.md) |
|
|
41
|
+
| 准备/确认编辑发票 | `invoice run invoice.update.prepare/apply` | [`invoice-update.md`](references/invoice-update.md) |
|
|
42
|
+
| 准备/确认删除发票 | `invoice run invoice.delete.prepare/apply` | [`invoice-delete.md`](references/invoice-delete.md) |
|
|
43
|
+
| 共享、转让、标签或 schema 未列出的能力 | 无可用命令 | [`invoice-disabled-capabilities.md`](references/invoice-disabled-capabilities.md) |
|
|
44
|
+
|
|
45
|
+
处理链:
|
|
46
|
+
|
|
47
|
+
- 查票夹/详情:`invoice.list` 或 `invoice.enterprise.list` -> 必要时 `invoice.get`
|
|
48
|
+
- OCR 识别预览:`invoice.ocr.preview`;如果先上传,可复用 `invoice.upload` 返回的 `upload`
|
|
49
|
+
- 导入文件:`invoice.import.prepare` -> 用户确认 -> `invoice.import.apply` -> 按返回 `fid` 回查/报告
|
|
50
|
+
- 手工新增:`invoice.add.prepare` -> 用户确认 -> `invoice.add.apply`
|
|
51
|
+
- 编辑发票:`invoice.update.prepare` -> 用户确认 -> `invoice.update.apply`
|
|
52
|
+
- 删除发票:`invoice.delete.prepare` -> 用户确认 -> `invoice.delete.apply`
|
|
53
|
+
|
|
54
|
+
## 执行原则(减少误路由、误重试和无效消耗)
|
|
55
|
+
|
|
56
|
+
### 1) 先拿最小必要信息,再执行
|
|
57
|
+
|
|
58
|
+
- 只是查票夹时,优先直接用 `invoice.list` 或 `invoice.enterprise.list`
|
|
59
|
+
- 用户已经给出 `fid` 时,不要先查列表再过滤,直接用 `invoice.get` 或对应 prepare
|
|
60
|
+
- 只有需要附件归属、可编辑/可删除状态或完整票面时,才补 `invoice.get`
|
|
61
|
+
|
|
62
|
+
### 2) 已知对象时直达动作
|
|
63
|
+
|
|
64
|
+
- 已拿到 `fid`、`fileId`、本地文件路径或完整 `info` 时,优先调用对应 operation
|
|
65
|
+
- 同一轮里如果已有足够的新鲜查询结果,不要重复查询同一票夹或同一详情
|
|
66
|
+
- 不要默认走 `list -> filter -> get -> prepare -> apply` 全链路;对象已明确时应压缩步骤
|
|
67
|
+
|
|
68
|
+
### 3) 错误语义驱动,而不是盲目重试
|
|
69
|
+
|
|
70
|
+
- 失败后先看进程退出码、`error.type`、`error.subtype` 和 `error.message`
|
|
71
|
+
- **除非错误明确提示可恢复或需要补充参数,否则不要重复刷同一个 operation**
|
|
72
|
+
- 写请求已经发出后,遇到结果不确定必须停止;不要把 `.apply` 当成可重试读操作
|
|
73
|
+
- **错误为 `authentication`(未登录,如 `E10 auth not found`)或 `session_expired`(登录态失效)时:立即停止当前操作,不要用示例占位域名或自行猜域名登录,也不要盲目重试**。先读取共享规则 `../weaver-work-cli-shared/references/e10-auth-and-session.md`,按其中流程用宿主提问/弹框让用户输入 E10 登录域名或选择已有 profile,完成登录后再继续原操作。
|
|
74
|
+
|
|
75
|
+
## 写操作失败处理:`partial/write_uncertain` 决策树
|
|
76
|
+
|
|
77
|
+
当导入 / 新增 / 编辑 / 删除等写操作返回 `partial/write_uncertain`,或提示网络中断、部分成功、回查失败、回查字段不一致时,按下面规则处理:
|
|
78
|
+
|
|
79
|
+
1. **先停止盲目重试**,不要连续重复提交相同 `.apply`
|
|
80
|
+
2. 优先从以下角度解释:
|
|
81
|
+
- 写请求可能已经到达服务端,但连接在结果确认前中断
|
|
82
|
+
- 服务端可能只处理了部分发票
|
|
83
|
+
- 写接口已返回成功,但详情回查失败或与预期不一致
|
|
84
|
+
- continuation、目标文件、目标发票或登录上下文可能已经变化
|
|
85
|
+
3. 如需确认,只补 **一次** 只读查询(例如 `invoice.get` 或列表查询),不要陷入 query/write 循环
|
|
86
|
+
4. 最终给用户明确结论、已知 `workflow.state`、成功/失败项和下一步人工确认建议,而不是继续无意义重试
|
|
87
|
+
|
|
88
|
+
**特别注意:** 对导入、删除和编辑场景更要严格执行上述规则;这些场景最容易因重复提交造成重复入账、误删或覆盖用户刚修改的数据。
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
weaver-work-cli invoice schema
|
|
92
|
+
printf '%s\n' '{"page_size":10,"start_pos":0}' | weaver-work-cli --json invoice run invoice.list --input -
|
|
93
|
+
printf '%s\n' '{"fid":"12345"}' | weaver-work-cli --json invoice run invoice.get --input -
|
|
94
|
+
printf '%s\n' '{"file":"./invoice.pdf","validate":false,"syncToOa":false}' | weaver-work-cli --json invoice run invoice.import.prepare --input -
|
|
95
|
+
printf '%s\n' '{"file":"./invoice.pdf","continuation":"<prepare返回值>","confirm":true}' | weaver-work-cli --json invoice run invoice.import.apply --input -
|
|
96
|
+
```
|
|
97
|
+
## 不在本 skill 范围
|
|
98
|
+
|
|
99
|
+
- 禁止加载原始 `weaver-e10-yepiaotong` Skill 代替 CLI。
|
|
100
|
+
- 禁止 curl、fetch、浏览器自动化或直接访问 E10 `/api/inc/*`。
|
|
101
|
+
- 禁止读取或复制 CLI runtime 内部 Token、Cookie、ETEAMSID。
|
|
102
|
+
- 共享、转让和标签当前未纳入 CLI manifest;需要先补稳定 ID 来源、输入 schema、prepare/apply、写后回查和测试后再开放。
|
|
103
|
+
- 非发票类 E10 能力、通用流程编排、表单/审批/组织等业务不由本 Skill 承载。
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# 手工新增发票
|
|
2
|
+
|
|
3
|
+
## 什么时候读取
|
|
4
|
+
|
|
5
|
+
用户要手工录入一张发票,且已经提供或可以整理出完整 `info` 对象时读取本文件。开始前也读取共享高风险协议:`../../weaver-work-cli-shared/references/high-risk-write.md`。
|
|
6
|
+
|
|
7
|
+
## Operation
|
|
8
|
+
|
|
9
|
+
| 阶段 | Operation | 必填输入 |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| 准备新增 | `invoice.add.prepare` | `info`、`scope` |
|
|
12
|
+
| 确认新增 | `invoice.add.apply` | `info`、`continuation`、`confirm=true` |
|
|
13
|
+
|
|
14
|
+
## 注意
|
|
15
|
+
|
|
16
|
+
`scope` 必须是 `personal` 或 `enterprise`。CLI 会做票面字段校验和号码重复检查;不要在业务输入中放认证字段或内部控制字段。
|
|
17
|
+
|
|
18
|
+
`.prepare` 返回 `preview`、`continuation`、`expiresInSeconds` 和 `workflow.state="AWAITING_CONFIRMATION"`。展示风险后等待用户明确确认,再调用 `.apply`。
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Agent 入口与 Schema
|
|
2
|
+
|
|
3
|
+
## 什么时候读取
|
|
4
|
+
|
|
5
|
+
使用 `weaver-work-cli invoice` 前、编写自动化调用、选择 operation 或确认字段结构时读取本文件。
|
|
6
|
+
|
|
7
|
+
## 准备命令
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
weaver-work-cli --version
|
|
11
|
+
weaver-work-cli doctor --e10
|
|
12
|
+
weaver-work-cli invoice schema
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
如未登录,按共享规则读取 `../../weaver-work-cli-shared/references/e10-auth-and-session.md` 后处理。
|
|
16
|
+
|
|
17
|
+
## 固定入口
|
|
18
|
+
|
|
19
|
+
Agent 优先调用统一 operation 入口:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
weaver-work-cli --json invoice run <operation> --input -
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
JSON 通过 stdin 传入,避免 shell 转义和路径注入问题:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
printf '%s\n' '{"page_size":10,"start_pos":0}' \
|
|
29
|
+
| weaver-work-cli --json invoice run invoice.list --input -
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
`weaver-work-cli invoice schema` 是可用 operation、输入字段、固定参数和风险等级的第一信息源。不要用未出现在 schema 中的 operation,也不要把原始 `weaver-e10-yepiaotong` reference 当作可直接调用的 CLI 合约。
|
|
33
|
+
|
|
34
|
+
## 输出处理
|
|
35
|
+
|
|
36
|
+
成功结果在 stdout,失败结果在 stderr。判断规则读取共享 reference:`../../weaver-work-cli-shared/references/json-output-contract.md`。
|
|
37
|
+
|
|
38
|
+
高风险写入读取共享 reference:`../../weaver-work-cli-shared/references/high-risk-write.md`。
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# 删除发票
|
|
2
|
+
|
|
3
|
+
## 什么时候读取
|
|
4
|
+
|
|
5
|
+
用户要删除已有发票时读取本文件。开始前也读取共享高风险协议:`../../weaver-work-cli-shared/references/high-risk-write.md`。
|
|
6
|
+
|
|
7
|
+
## Operation
|
|
8
|
+
|
|
9
|
+
| 阶段 | Operation | 必填输入 |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| 准备删除 | `invoice.delete.prepare` | `fid`,可选 `scope` |
|
|
12
|
+
| 确认删除 | `invoice.delete.apply` | `continuation`、`confirm=true` |
|
|
13
|
+
|
|
14
|
+
## 注意
|
|
15
|
+
|
|
16
|
+
删除固定为软删除 `flag=0`。CLI 会确认当前状态允许删除,并在删除后回查目标不再可见。
|
|
17
|
+
|
|
18
|
+
`.prepare` 返回 `preview`、`continuation`、`expiresInSeconds` 和 `workflow.state="AWAITING_CONFIRMATION"`。展示风险后等待用户明确确认,再调用 `.apply`。
|
|
19
|
+
|
|
20
|
+
如果返回 `partial/write_uncertain`,停止自动重跑 apply;向用户报告 `data` 中的目标 `fid`、`workflow.state` 和需要人工确认的内容。
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# 查看发票详情
|
|
2
|
+
|
|
3
|
+
## 什么时候读取
|
|
4
|
+
|
|
5
|
+
用户给出 `fid`、发票号码,或需要查看完整票面、附件、可编辑状态、可删除状态时读取本文件。
|
|
6
|
+
|
|
7
|
+
## Operation
|
|
8
|
+
|
|
9
|
+
| Operation | 固定规则 |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `invoice.get` | 优先用 `fid`;没有 `fid` 时可用 `number` 查询 |
|
|
12
|
+
|
|
13
|
+
## 示例
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
printf '%s\n' '{"fid":"12345"}' \
|
|
17
|
+
| weaver-work-cli --json invoice run invoice.get --input -
|
|
18
|
+
|
|
19
|
+
printf '%s\n' '{"number":"00188205"}' \
|
|
20
|
+
| weaver-work-cli --json invoice run invoice.get --input -
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 返回
|
|
24
|
+
|
|
25
|
+
`invoice.get` 返回服务端详情响应本身。常见字段包括 `infos[].info.fid`、`code`、`number`、`comm_info.pro`、`comm_info.price`、`comm_info.buyer`、`comm_info.payer`、`flist` 和 `modify_info`。
|
|
26
|
+
|
|
27
|
+
## 注意
|
|
28
|
+
|
|
29
|
+
用户已经给出 `fid` 时不要先查列表再过滤。找不到或无权查看时按失败 envelope 处理,不要自动扩大数据范围。
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# 暂不暴露的能力
|
|
2
|
+
|
|
3
|
+
## 什么时候读取
|
|
4
|
+
|
|
5
|
+
用户要求共享发票、转让发票、打标签、移除标签,或要求调用 `weaver-work-cli invoice schema` 中不存在的业票通接口时读取本文件。
|
|
6
|
+
|
|
7
|
+
## 当前不暴露
|
|
8
|
+
|
|
9
|
+
以下原始接口文档存在,但当前没有纳入 `weaver-work-cli invoice` manifest,Agent 不能绕过 CLI 直接调用:
|
|
10
|
+
|
|
11
|
+
- 共享发票
|
|
12
|
+
- 转让发票
|
|
13
|
+
- 标记发票或移除标签
|
|
14
|
+
|
|
15
|
+
## 原因
|
|
16
|
+
|
|
17
|
+
这些能力缺少稳定的 Agent 合约:
|
|
18
|
+
|
|
19
|
+
- 共享和转让需要接收人的稳定 `appid/cid/uid` 解析来源
|
|
20
|
+
- 转让会改变发票持有人,缺少接收人侧归属回查契约
|
|
21
|
+
- 标签缺少标签定义来源、当前标签关系查询和移除/替换语义
|
|
22
|
+
- 写操作后的读回验证边界不完整
|
|
23
|
+
|
|
24
|
+
## Agent 行为
|
|
25
|
+
|
|
26
|
+
遇到这类请求时,明确说明当前 CLI 未暴露该 operation,不能通过 `curl`、`fetch`、浏览器自动化或原始 E10 `/api/inc/*` 绕过。可以建议用户先由 CLI 维护者补齐 manifest、输入 schema、prepare/apply、回查和测试后再开放。
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# 下载发票附件
|
|
2
|
+
|
|
3
|
+
## 什么时候读取
|
|
4
|
+
|
|
5
|
+
用户要把发票附件下载到本地文件,或已经给出 `fid` 和 `fileId` 时读取本文件。
|
|
6
|
+
|
|
7
|
+
## Operation
|
|
8
|
+
|
|
9
|
+
| Operation | 固定规则 |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `invoice.download` | 先校验 `fileId` 属于目标 `fid`,拒绝覆盖输出文件 |
|
|
12
|
+
|
|
13
|
+
## 示例
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
printf '%s\n' '{"fid":"12345","fileId":"67890","output":"./invoice-12345.pdf"}' \
|
|
17
|
+
| weaver-work-cli --json invoice run invoice.download --input -
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## 注意
|
|
21
|
+
|
|
22
|
+
如果用户没有 `fileId`,先用 `invoice.get` 查看详情里的 `flist`。`output` 已存在时 CLI 会失败,不要自动覆盖用户文件。
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# 查询企业票夹
|
|
2
|
+
|
|
3
|
+
## 什么时候读取
|
|
4
|
+
|
|
5
|
+
用户要查询企业票夹、搜索企业范围发票,或按报销状态筛选企业发票时读取本文件。
|
|
6
|
+
|
|
7
|
+
## Operation
|
|
8
|
+
|
|
9
|
+
| Operation | 固定规则 |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `invoice.enterprise.list` | 固定 `flag=6`;默认 `sreim=3`,只查未报销发票 |
|
|
12
|
+
|
|
13
|
+
## 输入
|
|
14
|
+
|
|
15
|
+
列表字段以 `weaver-work-cli invoice schema` 为准,字段语义与个人票夹一致。常用字段包括 `page_size`、`start_pos`、`content`、购销方、日期、金额、票种、查验状态、来源、排序和 `sreim`。
|
|
16
|
+
|
|
17
|
+
`sreim` 是查询筛选参数:`0` 获取全部发票,`1` 发票报销中,`2` 报销完成,`3` 获取未报销发票,`4` 获取不可报销。省略时 CLI 默认传 `3`。
|
|
18
|
+
|
|
19
|
+
## 示例
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
printf '%s\n' '{"page_size":10,"start_pos":0,"buyer_company":"泛微"}' \
|
|
23
|
+
| weaver-work-cli --json invoice run invoice.enterprise.list --input -
|
|
24
|
+
|
|
25
|
+
printf '%s\n' '{"page_size":10,"start_pos":0,"sreim":2}' \
|
|
26
|
+
| weaver-work-cli --json invoice run invoice.enterprise.list --input -
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 返回
|
|
30
|
+
|
|
31
|
+
返回 `items`、`total`、`totalAmount`、`totalAmountExcludingTax`、`hasMore` 和 `scope="enterprise"`。
|
|
32
|
+
|
|
33
|
+
## 注意
|
|
34
|
+
|
|
35
|
+
企业票夹权限失败时不要自动降级查询个人票夹,除非用户明确要求改查个人票夹。不要在输入里传 `flag`;CLI 会固定为企业票夹。
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# 上传发票文件
|
|
2
|
+
|
|
3
|
+
## 什么时候读取
|
|
4
|
+
|
|
5
|
+
用户只要求上传发票文件、获取上传文件 ID,或后续 OCR 需要先取得 `upload` 对象时读取本文件。
|
|
6
|
+
|
|
7
|
+
## Operation
|
|
8
|
+
|
|
9
|
+
| Operation | 固定规则 |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `invoice.upload` | 固定上传 `ocr=1` |
|
|
12
|
+
|
|
13
|
+
## 文件来源
|
|
14
|
+
|
|
15
|
+
支持本地 `file` 或服务端可访问的 `url`,两者只能选一个。支持扩展名:`pdf`、`ofd`、`xml`、`png`、`jpg`、`jpeg`。
|
|
16
|
+
|
|
17
|
+
本地文件必须存在、非空且不超过 25 MiB。URL 只允许 `http/https`,不能包含账号密码。
|
|
18
|
+
|
|
19
|
+
## 示例
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
printf '%s\n' '{"file":"./invoice.pdf"}' \
|
|
23
|
+
| weaver-work-cli --json invoice run invoice.upload --input -
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 返回
|
|
27
|
+
|
|
28
|
+
返回规范化后的 `upload` 对象,包含 `id`、`ids`、`fileType`、`fileName`、`totalPages`、`hasFanWei`、`ocrMap` 和 `fail=false`。后续 `invoice.ocr.preview` 可以直接复用这个对象。
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# 导入发票文件
|
|
2
|
+
|
|
3
|
+
## 什么时候读取
|
|
4
|
+
|
|
5
|
+
用户要把本地发票文件导入票夹时读取本文件。开始前也读取共享高风险协议:`../../weaver-work-cli-shared/references/high-risk-write.md`。
|
|
6
|
+
|
|
7
|
+
## Operation
|
|
8
|
+
|
|
9
|
+
| 阶段 | Operation | 必填输入 |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| 准备导入 | `invoice.import.prepare` | `file`、`validate`、`syncToOa` |
|
|
12
|
+
| 确认导入 | `invoice.import.apply` | `file`、`continuation`、`confirm=true` |
|
|
13
|
+
|
|
14
|
+
## 示例
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
printf '%s\n' '{"file":"./invoice.pdf","validate":false,"syncToOa":false}' \
|
|
18
|
+
| weaver-work-cli --json invoice run invoice.import.prepare --input -
|
|
19
|
+
|
|
20
|
+
printf '%s\n' '{"file":"./invoice.pdf","continuation":"<prepare返回值>","confirm":true}' \
|
|
21
|
+
| weaver-work-cli --json invoice run invoice.import.apply --input -
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 注意
|
|
25
|
+
|
|
26
|
+
`validate` 和 `syncToOa` 必须显式传布尔值。`validate=true` 分支由服务端固定同步 OA,不能设置 `syncToOa=false`。`validate=false` 表示跳过查验,不能描述为“查验通过”。
|
|
27
|
+
|
|
28
|
+
`.prepare` 返回 `preview`、`continuation`、`expiresInSeconds` 和 `workflow.state="AWAITING_CONFIRMATION"`。展示风险后等待用户明确确认,再调用 `.apply`。
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# OCR 预览
|
|
2
|
+
|
|
3
|
+
## 什么时候读取
|
|
4
|
+
|
|
5
|
+
用户要识别发票文件内容,但没有明确要求入票夹或保存发票时读取本文件。
|
|
6
|
+
|
|
7
|
+
## Operation
|
|
8
|
+
|
|
9
|
+
| Operation | 固定规则 |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `invoice.ocr.preview` | 固定 `flag=13`、`is_sync=1`、`is_save=1`、`operate_type=0`;CLI 返回 `saved=false` |
|
|
12
|
+
|
|
13
|
+
## 输入
|
|
14
|
+
|
|
15
|
+
支持 `file`、`url` 或 `upload` 三种来源,三者选一个。`upload` 必须是 `invoice.upload` 返回的对象。
|
|
16
|
+
|
|
17
|
+
## 示例
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
printf '%s\n' '{"file":"./invoice.pdf"}' \
|
|
21
|
+
| weaver-work-cli --json invoice run invoice.ocr.preview --input -
|
|
22
|
+
|
|
23
|
+
printf '%s\n' '{"upload":{...}}' \
|
|
24
|
+
| weaver-work-cli --json invoice run invoice.ocr.preview --input -
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 失败后的处理
|
|
28
|
+
|
|
29
|
+
如果上传已成功但 OCR 失败,CLI 会返回 `partial/artifact_uploaded`,其中包含 `data.upload`。不要自动重复上传同一个文件;若用户要求继续 OCR,复用返回的 `upload` 对象。
|
|
30
|
+
|
|
31
|
+
## 注意
|
|
32
|
+
|
|
33
|
+
`saved=false` 表示 CLI 不把 OCR 预览描述为已入票夹。用户要导入时走 `invoice.import.prepare -> invoice.import.apply`。
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# 查询个人票夹
|
|
2
|
+
|
|
3
|
+
## 什么时候读取
|
|
4
|
+
|
|
5
|
+
用户要查询个人票夹、搜索自己的发票,或按报销状态筛选个人发票时读取本文件。
|
|
6
|
+
|
|
7
|
+
## Operation
|
|
8
|
+
|
|
9
|
+
| Operation | 固定规则 |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `invoice.list` | 固定 `flag=0`;默认 `sreim=3`,只查未报销发票 |
|
|
12
|
+
|
|
13
|
+
## 输入
|
|
14
|
+
|
|
15
|
+
列表字段以 `weaver-work-cli invoice schema` 为准。常用字段:
|
|
16
|
+
|
|
17
|
+
- `page_size`、`start_pos`
|
|
18
|
+
- `content`
|
|
19
|
+
- `date_begin`、`date_end`
|
|
20
|
+
- `create_tm_begin`、`create_tm_end`
|
|
21
|
+
- `payer_company`、`buyer_company`
|
|
22
|
+
- `payer_taxno`、`buyer_taxno`
|
|
23
|
+
- `code`、`number`
|
|
24
|
+
- `total_begin`、`total_end`
|
|
25
|
+
- `valids`、`sources`、`types`
|
|
26
|
+
- `sorts`
|
|
27
|
+
- `sreim`
|
|
28
|
+
|
|
29
|
+
`sreim` 是查询筛选参数:`0` 获取全部发票,`1` 发票报销中,`2` 报销完成,`3` 获取未报销发票,`4` 获取不可报销。省略时 CLI 默认传 `3`。
|
|
30
|
+
|
|
31
|
+
## 示例
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
printf '%s\n' '{"page_size":10,"start_pos":0,"content":"滴滴"}' \
|
|
35
|
+
| weaver-work-cli --json invoice run invoice.list --input -
|
|
36
|
+
|
|
37
|
+
printf '%s\n' '{"page_size":10,"start_pos":0,"sreim":0}' \
|
|
38
|
+
| weaver-work-cli --json invoice run invoice.list --input -
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## 返回
|
|
42
|
+
|
|
43
|
+
返回 `items`、`total`、`totalAmount`、`totalAmountExcludingTax`、`hasMore` 和 `scope="personal"`。分页时递增 `start_pos`,保持筛选条件和排序不变。
|
|
44
|
+
|
|
45
|
+
## 注意
|
|
46
|
+
|
|
47
|
+
不要在输入里传 `flag`;即使传入也会被 CLI 忽略并固定为个人票夹。空筛选条件直接省略,不要把空字符串传给 integer 字段。
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 编辑发票
|
|
2
|
+
|
|
3
|
+
## 什么时候读取
|
|
4
|
+
|
|
5
|
+
用户要修改已有发票字段时读取本文件。开始前也读取共享高风险协议:`../../weaver-work-cli-shared/references/high-risk-write.md`。
|
|
6
|
+
|
|
7
|
+
## Operation
|
|
8
|
+
|
|
9
|
+
| 阶段 | Operation | 必填输入 |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| 准备编辑 | `invoice.update.prepare` | `fid`、`scope`、`changes` |
|
|
12
|
+
| 确认编辑 | `invoice.update.apply` | `continuation`、`confirm=true` |
|
|
13
|
+
|
|
14
|
+
## 允许修改字段
|
|
15
|
+
|
|
16
|
+
以 `weaver-work-cli invoice schema` 为准,当前包括:
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
code
|
|
20
|
+
number
|
|
21
|
+
comm_info.pro.date
|
|
22
|
+
comm_info.price.amount
|
|
23
|
+
comm_info.price.total
|
|
24
|
+
comm_info.price.dtax
|
|
25
|
+
comm_info.buyer.company
|
|
26
|
+
comm_info.buyer.tcode
|
|
27
|
+
comm_info.payer.company
|
|
28
|
+
comm_info.payer.tcode
|
|
29
|
+
fylx
|
|
30
|
+
currency
|
|
31
|
+
currencyName
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 注意
|
|
35
|
+
|
|
36
|
+
CLI 会先取完整详情、确认可编辑、生成变更预览,再在 apply 时校验目标未变化并保留附件关联。禁止修改 `fid/id`、附件关联、`sedit`、Dubbo 字段、认证字段、`skipFlag=1` 等内部字段。
|
|
37
|
+
|
|
38
|
+
`.prepare` 返回 `preview`、`continuation`、`expiresInSeconds` 和 `workflow.state="AWAITING_CONFIRMATION"`。展示风险后等待用户明确确认,再调用 `.apply`。
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# 查验预览
|
|
2
|
+
|
|
3
|
+
## 什么时候读取
|
|
4
|
+
|
|
5
|
+
用户要查验已有发票,但没有明确要求把查验结果回写票夹时读取本文件。
|
|
6
|
+
|
|
7
|
+
## Operation
|
|
8
|
+
|
|
9
|
+
| Operation | 固定规则 |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `invoice.validate.preview` | 先取详情,固定 `flag=100`、`is_save=1`、`needLog=false`,不回写查验结果 |
|
|
12
|
+
|
|
13
|
+
## 输入
|
|
14
|
+
|
|
15
|
+
必须提供 `fid` 和 `scope`。`scope` 只能是 `personal` 或 `enterprise`。
|
|
16
|
+
|
|
17
|
+
## 示例
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
printf '%s\n' '{"fid":"12345","scope":"personal"}' \
|
|
21
|
+
| weaver-work-cli --json invoice run invoice.validate.preview --input -
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 注意
|
|
25
|
+
|
|
26
|
+
`invoice.validate.preview` 只做预览。`saved=false` 表示没有回写票夹;不要把预览结果描述为已更新发票。
|