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
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
name: weaver-e10-yepiaotong
|
|
3
3
|
display_name: 泛微业票通发票
|
|
4
4
|
display_name_en: Weaver Invoice
|
|
5
|
-
description: "泛微 E10 业票通发票管理:查询票夹、OCR
|
|
6
|
-
description_zh: "泛微 E10 业票通发票管理。支持查询个人/企业票夹、查看详情、上传、OCR/查验预览、下载附件、流程表单发票字段数据,通过 prepare/apply
|
|
7
|
-
description_en: "Weaver E10 Yepiaotong invoice skill for folder queries, detail lookup, OCR and validation previews, attachment downloads, workflow invoice field data, reimbursement data preparation (forms are created and edited via weaver-e10-workflow), and
|
|
8
|
-
version: 1.0.
|
|
5
|
+
description: "泛微 E10 业票通发票管理:查询票夹、OCR/查验、附件、流程发票字段、报销填单、按契约锁台账发起开票流程。"
|
|
6
|
+
description_zh: "泛微 E10 业票通发票管理。支持查询个人/企业票夹、查看详情、上传、OCR/查验预览、下载附件、流程表单发票字段数据,通过 prepare/apply 确认链处理导入、新增、编辑、删除;报销填单由本技能准备发票与预填数据,报销单创建/修改调用 weaver-e10-workflow 的发起/修改能力;AI 开票从契约锁合同台账取数,按合同号调用 weaver-e10-workflow 发起开票流程草稿,不支持绕过流程直接开票。"
|
|
7
|
+
description_en: "Weaver E10 Yepiaotong invoice skill for folder queries, detail lookup, OCR and validation previews, attachment downloads, workflow invoice field data, reimbursement data preparation (forms are created and edited via weaver-e10-workflow), and AI invoicing that drafts an invoice-application workflow from the Qiyuesuo contract ledger (direct issuing is not supported)."
|
|
8
|
+
version: 1.0.6
|
|
9
9
|
author: 泛微网络科技股份有限公司
|
|
10
10
|
agent_created: true
|
|
11
11
|
requires:
|
|
@@ -17,7 +17,7 @@ cliHelp: "weaver-work-cli invoice --help"
|
|
|
17
17
|
**`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 `[../weaver-e10-shared/SKILL.md](../weaver-e10-shared/SKILL.md)`。
|
|
18
18
|
|
|
19
19
|
认证和登录态只能按共享规则通过 `weaver-work-cli auth ...` 命令判断;禁止直接读取、列出、打印或解析用户主目录下的旧 `.e10-cli`、auth、config 或 Keychain 数据。
|
|
20
|
-
所有命令通过 `weaver-work-cli --json invoice run <operation>`
|
|
20
|
+
所有命令通过 `weaver-work-cli --json invoice run <operation>` 执行(唯一例外:报销单与开票流程的创建/修改调用 `weaver-e10-workflow` 技能的 `weaver-work-cli --json workflow run workflow.*`,见下方「报销填单」「AI 开票」):简单 JSON 优先传 `--input-json '<json>'`,复杂或多行 JSON 先写入 UTF-8 文件再传 `--input <path>`,只有确认当前 shell 能稳定传管道时才使用 `--input -`。调用前先按需读取 references 下对应的文件,查参数结构,不要猜字段;**references 是第一信息源**,`weaver-work-cli invoice schema` 是 operation、字段和风险等级的合约来源。
|
|
21
21
|
命令示例、提示词和临时说明必须同时兼容 Windows 和 macOS/Linux;涉及 JSON 输入、用户目录、路径分隔符、Python 启动器、文件删除、目录查看或文件比对时,同时给 Windows PowerShell 与 macOS/Linux(bash/zsh)两套示例。Agent 先根据当前系统和 shell 选择对应示例,不确定时用 `node -p "process.platform"` 判断。Windows/PowerShell 下不要使用 `printf`、`$HOME/...`、`~/...`、bash 反斜杠续行、`rm/ls/diff/python3` 等 Unix-only 写法。
|
|
22
22
|
涉及发票附件、图片、本地文件、远程 URL 文件或 OCR/文件解析的操作,执行前必须提醒用户:文件内容可能被上传到 E10 业票通、OCR/查验服务,并可能进入当前大模型上下文用于理解和处理;必须等待用户明确确认后才继续。
|
|
23
23
|
|
|
@@ -53,7 +53,7 @@ cliHelp: "weaver-work-cli invoice --help"
|
|
|
53
53
|
- 发票上传 / OCR 识别 / 查验预览 / 附件下载
|
|
54
54
|
- 导入发票 / 新增发票 / 编辑发票 / 删除发票
|
|
55
55
|
- 发票报销 / 自动填单 / 事前申请报销 / 报销单创建或更新
|
|
56
|
-
- 开票 / 开专票 / 开普票 / 存台账 / 智能开票
|
|
56
|
+
- 开票 / 开专票 / 开普票 / 存台账 / 智能开票 / 按合同开票 / 发起开票流程
|
|
57
57
|
- `fid` / `fileId` / 发票号码 / 发票代码 / 查验状态 / 报销状态
|
|
58
58
|
|
|
59
59
|
**判定规则:** 只要最终动作是对业票通发票做查询、查看、上传、OCR、查验预览、下载、导入、新增、编辑、删除、流程表单发票字段、发票报销填单或开票/存台账,就归 `weaver-e10-yepiaotong`。只有当用户处理的是非发票类 E10 业务、通用工作流或尚未封装的业票通能力时,才不使用本 Skill。
|
|
@@ -98,9 +98,8 @@ cliHelp: "weaver-work-cli invoice --help"
|
|
|
98
98
|
| 报销表单字段填充与 JSON 组装规则 | AI 内部 | `[reim-form-fill-rules.md](references/reim-form-fill-rules.md)` |
|
|
99
99
|
| 话费补贴 / 话费报销硬拦截规则 | AI 内部 | `[reim-phone-subsidy-rules.md](references/reim-phone-subsidy-rules.md)` |
|
|
100
100
|
| 报销端到端示例 | 参考 | `[reim-examples.md](references/reim-examples.md)` |
|
|
101
|
-
|
|
|
102
|
-
|
|
|
103
|
-
| 开票字段提取规则、税率推断、金额计算 | AI 内部 | `[invoice-issuing-field-rules.md](references/invoice-issuing-field-rules.md)` |
|
|
101
|
+
| **开票(默认,唯一链路):按契约锁台账发起开票流程草稿** | `invoice run invoice.issuing.qys.list` -> `workflow run workflow.createForm/createRequest`(`weaver-e10-workflow`) | `[invoice-issuing-workflow.md](references/invoice-issuing-workflow.md)` |
|
|
102
|
+
| 开票流程填单规则(默认值:本次开票金额 = 总金额等) | AI 内部 | `[invoice-issuing-form-fill-rules.md](references/invoice-issuing-form-fill-rules.md)` |
|
|
104
103
|
| 开票端到端示例 | 参考 | `[invoice-issuing-examples.md](references/invoice-issuing-examples.md)` |
|
|
105
104
|
| 共享、转让、标签或 schema 未列出的能力 | 无可用命令 | `[invoice-disabled-capabilities.md](references/invoice-disabled-capabilities.md)` |
|
|
106
105
|
|
|
@@ -118,11 +117,13 @@ cliHelp: "weaver-work-cli invoice --help"
|
|
|
118
117
|
- 编辑发票:`invoice.update.prepare` -> 用户确认 -> `invoice.update.apply`
|
|
119
118
|
- 删除发票:`invoice.delete.prepare` -> 用户确认 -> `invoice.delete.apply`
|
|
120
119
|
- 流程发票字段:已有 `fid` 或详情时,用 `invoice.browse-field.data` 生成浏览按钮对象;不要运行旧源码脚本或直接调接口。
|
|
121
|
-
- 报销填单(完整工作流见 `[reim-workflow.md](references/reim-workflow.md)`):先用 `invoice.reim.candidates.list`(按日期批量)/`invoice.list`/`invoice.get`/`invoice.reim.file-ocr.preview` 获取发票 -> 展示汇总并确认 -> `invoice.reim.requests.list` 匹配事前申请 -> `invoice.reim.workflow.resolve` 得到报销工作流 -> 并行 `workflow.createForm`(`weaver-e10-workflow`,传 `{workFlowName}({workFlowId})`)、`invoice.reim.row-info-batch`、`invoice.browse-field.data`(发票 + 配对凭证)-> 按规则组装 `data
|
|
120
|
+
- 报销填单(完整工作流见 `[reim-workflow.md](references/reim-workflow.md)`):先用 `invoice.reim.candidates.list`(按日期批量)/`invoice.list`/`invoice.get`/`invoice.reim.file-ocr.preview` 获取发票 -> 展示汇总并确认 -> `invoice.reim.requests.list` 匹配事前申请 -> `invoice.reim.workflow.resolve` 得到报销工作流 -> 并行 `workflow.createForm`(`weaver-e10-workflow`,传 `{workFlowName}({workFlowId})`,**不传 `userQuestion`**,也不用 `workflow.createRequestDirect`)、`invoice.reim.row-info-batch`、`invoice.browse-field.data`(发票 + 配对凭证)-> 按规则组装 `data`(**`requestName` 与「报销事由」必传**,按 form-fill-rules 的标题/事由公式生成,禁止留用表单默认标题或留空;匹配规则见 `[reim-matching-rules.md](references/reim-matching-rules.md)`,填单规则见 `[reim-form-fill-rules.md](references/reim-form-fill-rules.md)`,科目匹配见 `[reim-expense-subject-rules.md](references/reim-expense-subject-rules.md)`;命中话费补贴/话费报销时先读 `[reim-phone-subsidy-rules.md](references/reim-phone-subsidy-rules.md)`)-> 直接 `workflow.createRequest` 存草稿(`action` 固定 `"draft"`,**不问用户「存草稿 / 提交审批」**,草稿由用户在 E10 核对后自己提交)-> 原样粘贴 `finalMarkdown`。创建成功后修改只能用 `workflow.editLoad` -> `workflow.editPrepare` -> 用户确认 -> `workflow.editApply`。
|
|
122
121
|
- 报销单创建/修改依赖同级的 `weaver-e10-workflow` 技能(`../weaver-e10-workflow/`);该技能不存在时停止并告知用户需要安装,不要改用其他方式创建报销单。
|
|
123
122
|
- **⚠️ 报销单「合同号」固定为 `20260999`**(除非用户当次明确给出别的合同号):`createForm` 已带出该默认值时不传;没带出或用户给了别的合同号时显式传。**用户给了合同号时,承担主体 / 相关客户 / 相关项目都不传,以合同联动带出的值为准(用户口头指定的承担主体也一样)**。口径见 `[reim-form-fill-rules.md](references/reim-form-fill-rules.md)` 主表字段规则。
|
|
124
|
-
-
|
|
125
|
-
-
|
|
123
|
+
- **⚠️ 明细「费用说明」写精简后的 `起点-终点`**(如 `重庆财经学院-鱼胡路站`):整串最多 1 个 `-`、不含 `|` 和空格;禁止原样填 `from` / `to` / 行程单 `fysm` 的原始地址(如 `大道|重庆财经学院-西门 - 鱼胡路-地铁站`)。精简规则见 `[reim-form-fill-rules.md](references/reim-form-fill-rules.md)`「行程 / 出差费用说明」。
|
|
124
|
+
- **AI 开票(默认主链路,所有开票意图先走这条)**:`invoice.issuing.qys.list`(合同号传 `contractNo`,公司名等传 `keyword`;没有线索只问一句合同号或客户名)-> 按返回的 `groups`(一组 = 合同号 + 购方 = 一张流程)让用户选组 -> **购方无税号却是专票(`specialInvoiceWithoutTaxNo=true`)时硬拦截:没有税号只能开普票,请用户先在台账改为普票,不发起流程** -> 展示确认卡片(明确"只建草稿,不会直接开票";必填的「预计收款时间」在卡片里请用户从本月底 / 下月底 / 30 天后候选里选或直接给日期,不自己定默认值,**用户没给日期就不建草稿**)-> 用户确认 -> `workflow.createForm`(`weaver-e10-workflow`,固定传 `契约锁合同收款发票开具及快递申请(100003460000001852)`,**不传 `userQuestion`**,**不要按宽词“开票”检索**——会误中红冲流程)-> 按 `[invoice-issuing-form-fill-rules.md](references/invoice-issuing-form-fill-rules.md)` 组装 `data`(用户说了就按用户的,没说就按默认值,例如本次开票金额默认 = 总金额、开票事由自动生成、所售产品版本号取明细规格类型(与下拉选项完全一致才填);明细每行只传「金额(含税)」,其余列(货物名称、明细行id、单价、规格类型、税率、总开票金额 / 已开票金额 / 未开票金额等)由合同号联动带出,多传会让总开票金额带不出来;主表「开票内容」、明细「数量」和主表「开户行名称」「开户行银行帐号」创建时不传(开票内容的联动会冲掉合同号带出的明细整行;数量会被联动写成税率选项 id;开户行会被写成名称账号混写串);其余购方信息由合同号联动带出,不传);`requestName` 按 `开票申请-{购方名称}-{合同号}` 必传 -> `workflow.createRequest`(`action` 固定 `"draft"`)-> 原样粘贴 `finalMarkdown`,再用 `linkageResult` 的「是否存在合同明细数据」「总开票金额」和「本次开票总金额」核对明细是否带出、本次填的开票金额是否一致(台账开票金额为含税金额)-> **创建后补正**:`workflow.editLoad` 读草稿。开户行名称 / 账号取分组里 CLI 拆好的 `purchaserBankName` / `purchaserBankAccount`(为空时按「,账号:」拆只读字段「开户行及帐号」),`workflow.editPrepare` **只传主表这两个字段**,用户确认后 `workflow.editApply`。开票内容和明细数量**不经编辑链改**(编辑开票内容会报错,编辑明细会多出一行):在回复末尾提醒用户在 E10 里选开票内容(给出建议选项),并把每行数量改成台账 `items[].quantity`(按「明细行id」对应)。创建成功后修改只走 `workflow.editLoad/editPrepare/editApply`,禁止重复创建。详见 `[invoice-issuing-workflow.md](references/invoice-issuing-workflow.md)`。
|
|
125
|
+
- **开票没有兜底链路(0.1.27 起)**:CLI 已移除 `invoice.issuing.make.prepare/apply`、`invoice.issuing.qys.prepare`、`invoice.issuing.result`,**不存在"直接开票/存待开台账"的接口**。用户说"直接开票""不走流程""存待开台账"时,一律走上面的主链路创建开票流程草稿,并向用户说明:开票必须经「契约锁合同收款发票开具及快递申请」流程审批后由流程侧完成;数据不在契约锁台账时,提示用户先在台账录入商品信息,再按主链路发起。
|
|
126
|
+
- 开票流程的创建/修改依赖同级 `weaver-e10-workflow` 技能;该技能不存在时停止并告知用户需要安装,**不要尝试用其他方式直接开票**。
|
|
126
127
|
|
|
127
128
|
## 执行原则(减少误路由、误重试和无效消耗)
|
|
128
129
|
|
|
@@ -157,9 +158,12 @@ cliHelp: "weaver-work-cli invoice --help"
|
|
|
157
158
|
- **除非错误明确提示可恢复或需要补充参数,否则不要重复刷同一个 operation**
|
|
158
159
|
- 写请求已经发出后,遇到结果不确定必须停止;不要把 `.apply` 当成可重试读操作
|
|
159
160
|
- **错误为 `authentication`(未登录,如 `E10 auth not found`)或 `session_expired`(登录态失效)时:立即停止当前操作,不要用示例占位域名或自行猜域名登录,也不要盲目重试**。
|
|
160
|
-
-
|
|
161
|
-
-
|
|
162
|
-
-
|
|
161
|
+
- 认证失败后先读取共享规则 `../weaver-e10-shared/references/e10-auth-and-session.md`:
|
|
162
|
+
- 登录失效的认证方式必须由 Agent 复用本任务开始时的宿主判定,禁止调用任何其他登录 Skill。
|
|
163
|
+
- 明确为 XiaoE 时,只执行 `weaver-work-cli auth xiaoe`,不得改用 `auth login`。
|
|
164
|
+
- 统一登录返回 `authentication/xiaoe_credential_unavailable` 时停止并反馈宿主凭据不可用,不自动回退浏览器登录。
|
|
165
|
+
- 非 XiaoE 时不得执行 `auth xiaoe`;取得用户确认的真实 E10 登录域名后,执行 `weaver-work-cli auth login --base-url "<用户确认的 E10 登录域名>" --agent_type "<当前智能体名称>"`。环境不能完成本机浏览器回调时停止并反馈,不得改调其他登录 Skill。
|
|
166
|
+
- 登录恢复后读操作可重新执行;写操作不得复用旧 continuation,必须重新 prepare 并重新确认。已返回 `partial/write_uncertain` 时先只读回查,禁止直接重放写入。
|
|
163
167
|
- 登录类命令必须带 timeout 限时(上限 300 秒 / 5 分钟,后台运行 + 限时观察):输出一旦出现 `Open browser login`、`Waiting for E10 authorization callback` 或 `Could not open browser automatically`,即判定已降级到浏览器 OAuth,立即终止该命令并反馈,不得继续等待。登录失败不自动重试。
|
|
164
168
|
- 需要浏览器登录时必须携带发起方标识 `--agent_type "<当前智能体名称>"`(授权确认页展示用;宿主无法确认名称时才可省略,交由 CLI 从环境变量推断)。
|
|
165
169
|
|
|
@@ -194,7 +198,6 @@ weaver-work-cli --json invoice run invoice.import.prepare --input-json '{"file":
|
|
|
194
198
|
weaver-work-cli --json invoice run invoice.import.apply --input-json '{"file":"./invoice.pdf","continuation":"PREPARE_CONTINUATION","confirm":true}'
|
|
195
199
|
weaver-work-cli --json invoice run invoice.browse-field.data --input-json '{"fid":"12345"}'
|
|
196
200
|
weaver-work-cli --json invoice run invoice.reim.requests.list --input-json '{"pageNo":1,"pageSize":20}'
|
|
197
|
-
weaver-work-cli --json invoice run invoice.issuing.make.prepare --input-json '{"mode":"ledger","payload":{"invoiceType":"7","externalDocumentNo":"AI-EXAMPLE-001","purchaserName":"示例个人","totalAmount":100,"taxAmount":6,"totalAmountWithTax":106,"details":[{"goodsName":"信息技术咨询服务","taxRate":0.06,"amount":100,"amountWithTax":106,"taxAmount":6}]}}'
|
|
198
201
|
```
|
|
199
202
|
|
|
200
203
|
macOS/Linux(bash/zsh):
|
|
@@ -208,7 +211,6 @@ weaver-work-cli --json invoice run invoice.import.prepare --input-json '{"file":
|
|
|
208
211
|
weaver-work-cli --json invoice run invoice.import.apply --input-json '{"file":"./invoice.pdf","continuation":"PREPARE_CONTINUATION","confirm":true}'
|
|
209
212
|
weaver-work-cli --json invoice run invoice.browse-field.data --input-json '{"fid":"12345"}'
|
|
210
213
|
weaver-work-cli --json invoice run invoice.reim.requests.list --input-json '{"pageNo":1,"pageSize":20}'
|
|
211
|
-
weaver-work-cli --json invoice run invoice.issuing.make.prepare --input-json '{"mode":"ledger","payload":{"invoiceType":"7","externalDocumentNo":"AI-EXAMPLE-001","purchaserName":"示例个人","totalAmount":100,"taxAmount":6,"totalAmountWithTax":106,"details":[{"goodsName":"信息技术咨询服务","taxRate":0.06,"amount":100,"amountWithTax":106,"taxAmount":6}]}}'
|
|
212
214
|
```
|
|
213
215
|
|
|
214
216
|
## 不在本 skill 范围
|
|
@@ -2,133 +2,127 @@
|
|
|
2
2
|
|
|
3
3
|
## 什么时候读取
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
需要参考开票完整对话流程时读取本文件。全部示例都是**唯一链路**(契约锁台账 → 开票流程草稿,规则见 [invoice-issuing-workflow.md](invoice-issuing-workflow.md))。CLI 已移除直接开票接口(0.1.27 起),用户说"直接开票 / 不走流程 / 存待开台账"时同样走主链路建流程草稿,并向用户说明开票必须经流程审批。
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
# 主链路:按契约锁台账发起开票流程
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
## 示例 1:按合同号开票
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
- 提取:purchaser_name, purchaser_tax_no, goods_name, amount_raw=100000, amount_is_tax_inclusive=true
|
|
16
|
-
- 推断税率:信息技术咨询服务 → 6%
|
|
17
|
-
- 用户确认税率 → "好的"
|
|
18
|
-
- 金额计算:不含税 94339.62,税额 5660.38
|
|
19
|
-
- 预览展示 → 用户"确认开票"
|
|
20
|
-
- 调用 makeInvoice → 展示流水号
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## 示例 2:信息不全需追问
|
|
25
|
-
|
|
26
|
-
**用户**:帮我开票
|
|
13
|
+
**用户**:帮我把南昌我爱我家那份合同开票
|
|
27
14
|
|
|
28
15
|
**AI**:
|
|
29
16
|
|
|
30
|
-
|
|
17
|
+
1. `invoice.issuing.qys.list`,`keyword="南昌我爱我家"` → `groups` 命中 1 组(合同号 20266105541,1 行,技术服务费,6.0%,开票金额合计 20000.00)
|
|
18
|
+
2. 展示确认卡片:
|
|
19
|
+
|
|
20
|
+
> 将为以下合同发起「开票申请」流程(只存草稿,不会直接开票):
|
|
21
|
+
>
|
|
22
|
+
> 合同号:20266105541(南昌我爱我家科技有限公司开放平台续购20000元10000份)
|
|
23
|
+
> 购方:南昌我爱我家科技有限公司 税号:91360125083909438T
|
|
24
|
+
> 发票类型:全电专票
|
|
25
|
+
>
|
|
26
|
+
> | 序号 | 商品 | 税率 | 开票金额(含税) |
|
|
27
|
+
> | --- | --- | --- | --- |
|
|
28
|
+
> | 1 | 技术服务费 | 6.0% | 20000 |
|
|
31
29
|
>
|
|
32
|
-
>
|
|
33
|
-
>
|
|
34
|
-
>
|
|
30
|
+
> 开票金额合计(含税):20000.00(共 1 行)
|
|
31
|
+
>
|
|
32
|
+
> 本次开票金额:20000(默认按总金额开)
|
|
33
|
+
>
|
|
34
|
+
> 开票事由:合同20266105541(南昌我爱我家科技有限公司开放平台续购20000元10000份)技术服务费全额开票,金额20000元
|
|
35
|
+
>
|
|
36
|
+
> 预计收款时间:(必填)请选择:本月底 2026-10-31 / 下月底 2026-11-30 / 30 天后 2026-11-22,或直接给一个日期
|
|
37
|
+
>
|
|
38
|
+
> 请回复预计收款时间并确认发起。
|
|
35
39
|
|
|
36
|
-
|
|
40
|
+
**用户**:确认,下月底收款
|
|
37
41
|
|
|
38
42
|
**AI**:
|
|
39
43
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
44
|
+
3. `workflow.createForm`,`workflow=["契约锁合同收款发票开具及快递申请(100003460000001852)"]`
|
|
45
|
+
4. 按 [invoice-issuing-form-fill-rules.md](invoice-issuing-form-fill-rules.md) 组装 `data`,用户没有特殊说明,全部取默认值:
|
|
46
|
+
- `data.main`:「合同号」`20266105541`;「相关合同审批流程」`南昌我爱我家科技有限公司开放平台续购20000元10000份(1326792548468580636)`;「产品类型」`契约锁`;「开票日期」取当天;「开票备注」`20266105541`;「预计收款时间」按"下月底"换算为 `2026-11-30`;「开票事由」自动生成为 `合同20266105541(南昌我爱我家科技有限公司开放平台续购20000元10000份)技术服务费全额开票,金额20000元`。
|
|
47
|
+
- 明细第 1 行取该组唯一台账行,只传「金额(含税)」`20000`(按总金额开)。货物名称、购买方名称、明细合同号、明细行id、单价、规格类型、单位、税率、总开票金额、已开票金额、未开票金额都由合同号联动带出,不传;开票内容、数量、开户行名称、开户行银行帐号创建时不传;金额(不含税)、税额不传。
|
|
48
|
+
- `requestName="开票申请-南昌我爱我家科技有限公司-20266105541"`。
|
|
48
49
|
|
|
50
|
+
如果用户说"这次先开 1 万",明细「金额(含税)」改填 `10000`,开票事由改为 `合同20266105541(南昌我爱我家科技有限公司开放平台续购20000元10000份)技术服务费开票,本次10000元,合同开票总额20000.00元`,其余不变。
|
|
51
|
+
5. `workflow.createRequest`,`action="draft"` → `CREATED` → 原样粘贴 `finalMarkdown`,再补一句「预计收款时间按『下月底』填为 2026-11-30」
|
|
49
52
|
|
|
50
|
-
|
|
53
|
+
如果用户只回"确认"没给日期:**不建草稿**,只问「预计收款时间填哪天?可以直接回 本月底 / 下月底 / 30 天后,或给一个具体日期。」拿到日期后再执行第 3 步。
|
|
54
|
+
6. `linkageResult` 含「是否存在合同明细数据=存在」「总开票金额=20000.00」「货物名称=技术服务费」,且「本次开票总金额=20000.00」与本次填写的金额一致 → 不额外说明
|
|
55
|
+
7. 补正开户行:`workflow.editLoad` 读草稿。假设台账没有开户行信息、「开户行及帐号」为 `兴业银行股份有限公司深圳西乡支行,账号:338160100100000455`,按「,账号:」拆开。`workflow.editPrepare` 只传主表这两个字段,然后问用户:
|
|
51
56
|
|
|
52
|
-
|
|
57
|
+
> 草稿已建好。开户行名称和账号需要分开补进草稿:
|
|
58
|
+
> - 开户行名称:兴业银行股份有限公司深圳西乡支行
|
|
59
|
+
> - 开户行银行帐号:338160100100000455
|
|
60
|
+
>
|
|
61
|
+
> 要把开户行名称和账号分开补进草稿吗?
|
|
53
62
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
> 是否确认开**个人普票**?(个人票无需税号)
|
|
57
|
-
|
|
58
|
-
**用户**:对,开个人票
|
|
63
|
+
用户确认后 `workflow.editApply`。
|
|
64
|
+
8. 回复末尾提醒用户在 E10 里改的项:同一次 `editLoad` 里,开票内容为空,商品只有「技术服务费」,与选项完全相同;明细第 1 行数量是联动带出的 `1201835186337538063`,台账数量是 `1`。
|
|
59
65
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
66
|
+
> 提交前请在 E10 里改:
|
|
67
|
+
> - 开票内容:请在 E10 里选择「技术服务费」
|
|
68
|
+
> - 明细第 1 行数量:联动带出的是 1201835186337538063,请在 E10 改成 1
|
|
63
69
|
|
|
64
70
|
---
|
|
65
71
|
|
|
72
|
+
## 示例 2:命中多份合同,让用户选
|
|
66
73
|
|
|
74
|
+
**用户**:开一下技术服务费那几单
|
|
67
75
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
**用户**:开专票给北京XX公司,税号 91110000MA01B6BH1K,明细:
|
|
76
|
+
**AI**:`invoice.issuing.qys.list`,`keyword="技术服务费"` → `groups` 4 组。列出每组的合同号、合同审批流程、购方、行数、开票金额合计,请用户选择**一份**合同;**不替用户选**。
|
|
71
77
|
|
|
72
|
-
|
|
73
|
-
2. 技术咨询服务 2万不含税
|
|
74
|
-
3. 服务器硬件 5台每台6000含税
|
|
78
|
+
**用户**:中冶南方那个
|
|
75
79
|
|
|
76
|
-
**AI
|
|
80
|
+
**AI**:按示例 1 的第 2 步起继续,只处理这一组。用户要求多份一起开时,逐组确认、逐组 `createForm` + `createRequest`,`continuation` 不跨组复用。
|
|
77
81
|
|
|
78
82
|
---
|
|
79
83
|
|
|
84
|
+
## 示例 3:同一合同部分行已开票
|
|
80
85
|
|
|
81
|
-
|
|
82
|
-
## 示例 5:Excel 附件开票
|
|
83
|
-
|
|
84
|
-
**用户**:(上传 Excel)帮我按这个表开票,购方杭州XX科技,税号91330100XX,专票,不含税
|
|
86
|
+
**用户**:开一下合同 20266105526 的票
|
|
85
87
|
|
|
86
88
|
**AI**:
|
|
87
89
|
|
|
88
|
-
1.
|
|
89
|
-
2.
|
|
90
|
-
|
|
91
|
-
---
|
|
90
|
+
1. `invoice.issuing.qys.list`,`contractNo="20266105526"` → 1 组,`rowCount=1`,`totalAmount="46292.10"`,`blockedRows=1`,`warnings` 含"同合同另有 1 行已开票、开票中或已废弃…"
|
|
91
|
+
2. 确认卡片只列 1 行可开票明细,末尾追加:
|
|
92
92
|
|
|
93
|
+
> ⚠️ 同合同另有 1 行已开票、开票中或已废弃。流程按合同号联动,可能一并带出这些行,请在 E10 草稿里核对明细。
|
|
93
94
|
|
|
95
|
+
3. 用户确认 → `createForm` → `createRequest(draft)` → 粘贴 `finalMarkdown`
|
|
96
|
+
4. `linkageResult` 里「本次开票总金额」与本次填写的 46292.10 不一致(联动带出的行数与可开票行数不同,金额可能填到了已开票的行上)→ 在 `finalMarkdown` 后只追加一行:
|
|
94
97
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
**用户**:帮我开票给XX公司...(常规流程)
|
|
98
|
-
|
|
99
|
-
预览后用户回复:"**先存台账**"
|
|
100
|
-
|
|
101
|
-
**AI**:调用 makeInvoice 时添加 `"operateType": "5"` → 展示"已存入待开台账"
|
|
98
|
+
> ⚠️ 流程汇总的本次开票总金额为 92584.20,与本次填写的开票金额 46292.10 不一致,请在 E10 核对后再提交。
|
|
102
99
|
|
|
103
100
|
---
|
|
104
101
|
|
|
102
|
+
## 示例 4:线索为空 / 没有可开票的行
|
|
105
103
|
|
|
104
|
+
**用户**:帮我开票
|
|
106
105
|
|
|
107
|
-
|
|
106
|
+
**AI**:要给哪个合同开票?请提供合同号或客户名称。
|
|
108
107
|
|
|
109
|
-
|
|
108
|
+
**用户**:中冶南方
|
|
110
109
|
|
|
111
|
-
**AI
|
|
110
|
+
**AI**:`invoice.issuing.qys.list`,`keyword="中冶南方"` → `groups` 为空 → `includeIssued=true` 再查一次 → 1 组,`rowCount=0`,`blockedRows=1`,`items[0].blockers=["已有发票号码 26312000000012345678"]`
|
|
112
111
|
|
|
113
|
-
|
|
114
|
-
2. `invoice.issuing.qys.prepare`,`formDataId="1328267444527472669"`,`mode="issue"`
|
|
115
|
-
3. 展示预览:
|
|
112
|
+
> 中冶南方工程技术有限公司的合同 20266105521 当前没有可开票的行:已有发票号码 26312000000012345678。
|
|
116
113
|
|
|
117
|
-
|
|
118
|
-
> 购方:南昌我爱我家科技有限公司,税号 91360125083909438T,全电专票
|
|
119
|
-
> 技术服务费,税率 6%,不含税 20000.00,税额 1200.00,价税合计 21200.00
|
|
120
|
-
> 确认开票吗?
|
|
114
|
+
结束,不发起流程。
|
|
121
115
|
|
|
122
|
-
|
|
116
|
+
---
|
|
123
117
|
|
|
124
|
-
|
|
118
|
+
## 示例 4.1:购方没有税号,台账却是专票
|
|
125
119
|
|
|
126
|
-
|
|
120
|
+
**用户**:开一下合同 20266105600 的票
|
|
127
121
|
|
|
122
|
+
**AI**:`invoice.issuing.qys.list`,`contractNo="20266105600"` → 1 组,`purchaserTaxNo=""`,`invoiceTypes=["全电专票"]`,`specialInvoiceWithoutTaxNo=true`
|
|
128
123
|
|
|
124
|
+
> 张三(个人)没有税号,不能开专票,只能开普票。请先把台账里这份合同的发票类型改成普票(如全电普票),再让我发起。
|
|
129
125
|
|
|
130
|
-
|
|
126
|
+
结束,不展示确认卡片、不发起流程;也不在流程里手工改发票类型。
|
|
131
127
|
|
|
132
|
-
**用户**:开一下技术服务费那几单
|
|
133
128
|
|
|
134
|
-
**AI**:`invoice.issuing.qys.list`,`keyword="技术服务费"` → 命中 4 行,列出合同号、合同名称、购方、不含税金额、税率,请用户选择具体哪一行;用户选定后按示例 7 继续,一次只开一行。
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# 开票流程填单规则
|
|
2
|
+
|
|
3
|
+
## 什么时候读取
|
|
4
|
+
|
|
5
|
+
AI 开票组装 `workflow.createRequest` 的 `data` 时读取本文件(流程编排见 [invoice-issuing-workflow.md](invoice-issuing-workflow.md))。适用流程:`契约锁合同收款发票开具及快递申请(100003460000001852)`。
|
|
6
|
+
|
|
7
|
+
## 总原则
|
|
8
|
+
|
|
9
|
+
1. **用户说了就按用户的**:用户本轮对某个字段有特殊说明(金额、日期、事由、收件信息等),一律以用户为准。
|
|
10
|
+
2. **用户没说就按下表默认值填**:下表给了默认值的字段直接填,不再问用户。
|
|
11
|
+
3. **联动字段不传**:填了「合同号」之后,联动会带出主表的购方名称、税号、发票类型,以及明细的整行台账数据(货物名称、购买方名称、明细合同号、明细行id、单价、规格类型、单位、税率、税收分类编码、总开票金额、已开票金额、未开票金额),Agent 不传这些字段。
|
|
12
|
+
4. **创建时不传的三类字段**:
|
|
13
|
+
- 「开票内容」:它自己的联动会把合同号带出的明细整行冲掉。草稿建好后请用户在 E10 里选。
|
|
14
|
+
- 明细「数量」:联动会把它写成错值,Agent 改不了。草稿建好后请用户在 E10 里改。
|
|
15
|
+
- 主表开户行名称与账号:联动会把它们写成混写值。草稿建好后经编辑链补正。
|
|
16
|
+
|
|
17
|
+
详见下文「创建后补正」。
|
|
18
|
+
5. **其余字段留空**:下表没有列出、用户也没说的字段,按 `workflow-create.md`「填值纪律」处理(`initialValue` → 历史一致值 → 留空)。留空的必填项会出现在草稿的 `missingFields` 里,由用户提交前补齐。
|
|
19
|
+
|
|
20
|
+
字段 id 以 `createForm` 返回的 `fields` 按中文名定位为准。下表括号里的 id 是当前版本的实测值,仅供核对。
|
|
21
|
+
|
|
22
|
+
## 主表
|
|
23
|
+
|
|
24
|
+
| 字段 | 用户没说时的默认值 | 来源 |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| 流程标题 `requestName` | `开票申请-{购方名称}-{合同号}` | `group.purchaserName`、`group.contractNo` |
|
|
27
|
+
| 合同号(`100003720000056343`) | 本组合同号原值 | `group.contractNo` |
|
|
28
|
+
| 相关合同审批流程(`100003720000056262`) | `{合同审批流程名称}({流程ID})` | `group.contractFlowName`、`group.contractFlowId`;ID 为空时留空 |
|
|
29
|
+
| 开票内容(`100003720000056243`,必填) | **不传**(实测:创建时传了,明细的货物名称、总开票金额等整行都带不出来)。创建后请用户在 E10 里选:本组只有 1 个商品、且商品名与选项名**完全相同**时,在提醒里给出建议选项(如「技术服务费」);否则只提醒选择 | `group.goodsNames` 对照字段 `options` |
|
|
30
|
+
| 所售产品版本号(`100003720000056244`,下拉) | 取明细「规格类型」:`group.specifications` 只有 1 个值且与选项名**完全相同**(如 `V8.0`)时填该选项;不在选项里(如 `V8`、`8.0`)时留空,**不自行补全或改写**;有多个不同值时在确认卡片里问用户选哪个;为空时留空(不选「空」选项) | `group.specifications`(即台账「规格型号」)对照字段 `options` |
|
|
31
|
+
| 产品类型(`100003720000056342`) | `契约锁` | 数据来自契约锁合同台账 |
|
|
32
|
+
| 开票日期(`100003720000056255`) | 当天日期 | — |
|
|
33
|
+
| 开票备注(`100003720000118915`) | 合同号 | `group.contractNo` |
|
|
34
|
+
| 本次开票总金额、开票金额(本次开具发票金额) | **不传**:由表单按明细「金额(含税)」汇总(实测填 5900 后两者都联动为 5900.00) | 联动 |
|
|
35
|
+
| 开票事由(填写合同第几笔款项)(`100003720000056252`) | **自动生成**,公式见下文「开票事由生成规则」;用户给了原话就用用户的 | `group`、本次开票金额 |
|
|
36
|
+
| 预计收款时间(`100003720000056250`,必填,日期) | **必须问到用户给出日期才建草稿**,不自己定默认值、不留空,规则见下文「预计收款时间」 | 用户 |
|
|
37
|
+
| 快递地址 | **不传**,由联动带出;用户另有指定时才填 | 联动 |
|
|
38
|
+
| 公司名称、税号、开票地址、发票类型 | **不传**,以合同号联动带出的值为准 | 联动 |
|
|
39
|
+
| 开户行名称(请予客户方财务核实)(`1211869454131068975`) | **创建时不传**,创建后补正为 `group.purchaserBankName` | CLI 已从台账拆好 |
|
|
40
|
+
| 开户行银行帐号(请予客户方财务核实)(`1211869454131068976`) | **创建时不传**,创建后补正为 `group.purchaserBankAccount`(**只含账号**) | CLI 已从台账拆好 |
|
|
41
|
+
| 发票类型 × 购方税号 | **购方没有税号只能开普票,不能开专票**。分组 `specialInvoiceWithoutTaxNo=true` 时不发起流程,让用户先在台账改为普票(见 [invoice-issuing-workflow.md](invoice-issuing-workflow.md) Step 2)。不要在 `data` 里改发票类型:联动值优先,会被覆盖 | `group.purchaserTaxNo`、`group.invoiceTypes` |
|
|
42
|
+
| 收件人、联系电话、合同客户、相关合同(文档) | **不传**:填了「相关合同审批流程」后由联动带出;用户另有指定时才覆盖 | 联动 |
|
|
43
|
+
|
|
44
|
+
### 开户行名称与账号
|
|
45
|
+
|
|
46
|
+
是两个字段,**不能混填**:开户行名称只放银行名称(如 `招商银行福田支行`),开户行银行帐号只放账号(如 `8135 8668 8310 001`)。
|
|
47
|
+
|
|
48
|
+
两个字段都在草稿建好后的「创建后补正」里填,取值按下面的先后顺序:
|
|
49
|
+
|
|
50
|
+
1. **台账有开户行信息**:台账常把两者一起写进「购买方开户行账号」,合同号联动会把这串原样带进「开户行银行帐号」(如 `招商银行福田支行 8135 8668 8310 001`)。`invoice.issuing.qys.list` 的分组已经拆好,Agent 直接用 `group.purchaserBankName`、`group.purchaserBankAccount`,**不要自己拆**。拆分时分组 `warnings` 会有一条「已拆分为…」,确认卡片照常列出。
|
|
51
|
+
2. **台账没有开户行信息**:表单会从客户资料带出只读字段「开户行及帐号(请予客户方财务核实)」(`100003720000056248`),格式如 `兴业银行股份有限公司深圳西乡支行,账号:338160100100000455`,但不会自动拆进上面两个字段。按「,账号:」拆成名称和账号。格式不是「{名称},账号:{账号}」时不要猜,告诉用户原值,请其在 E10 里手工拆填。
|
|
52
|
+
3. 两处都为空:这两个字段不补。
|
|
53
|
+
|
|
54
|
+
## 明细(`subFormId` = `100003690000001811`)
|
|
55
|
+
|
|
56
|
+
**一行对应一条台账行**,按 `group.formDataIds` 的顺序逐行填,每行的值取 `items[]` 里同一 `formDataId` 的那条台账行。
|
|
57
|
+
|
|
58
|
+
明细整行由「合同号」联动从台账带出,**创建时 Agent 每行只传「金额(含税)」一列**。实测(合同 20266105492、20266105586):
|
|
59
|
+
|
|
60
|
+
- 只传金额时,联动带出货物名称、购买方名称、明细合同号、明细行id、单价、规格类型、单位、税率、税收分类编码,以及**总开票金额、已开票金额、未开票金额**。
|
|
61
|
+
- 把货物名称、明细行id 等列也一起传时,联动**不再**带出总开票金额、已开票金额、未开票金额,草稿里这三列是空的。所以其余列一律不传。
|
|
62
|
+
- 联动会把税率的选项 id(如 `1201835186337538063`)错写进「数量」,创建时传了台账数量也会被覆盖。所以数量不传,草稿建好后请用户在 E10 里改成台账值。
|
|
63
|
+
|
|
64
|
+
| 字段 | 用户没说时的默认值 | 来源 |
|
|
65
|
+
| --- | --- | --- |
|
|
66
|
+
| 金额(含税)(`100003720000118901`),即本行**本次开票金额** | **按总金额开**:取该台账行的开票金额原值(台账开票金额本身就是含税金额,不再加税) | `items[].amount` |
|
|
67
|
+
| 数量(`100003720000118911`) | **不传**;创建后请用户在 E10 里改成台账原值(用户指定了本次金额时也用台账数量) | `items[].quantity` |
|
|
68
|
+
| 总开票金额、已开票金额、未开票金额 | **不传**:发起节点上是只读字段,传了会被 `createRequest` 以 `notEditable` 拒绝;由联动带出 | 联动 |
|
|
69
|
+
| 货物名称、购买方名称、明细合同号、明细行id、单价、规格类型、单位、税率、税收分类编码 | **不传**,由联动从台账带出 | 联动 |
|
|
70
|
+
| 金额(不含税)、税额、单价(不含税) | **不传、不计算**,留给表单 | — |
|
|
71
|
+
|
|
72
|
+
- `items` 被 `limit` 截断、缺少本组某个 `formDataId` 时,用 `contractNo` 再查一次拿全本组的行,不要凭 `group` 汇总值拼明细。
|
|
73
|
+
|
|
74
|
+
写法:`details` 里按 `group.formDataIds` 的顺序给出 N 行,CLI 会按行序把它们与联动带出的行合并。
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{"details": {"100003690000001811": [{"100003720000118901": "20000"}]}}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## 创建后补正
|
|
81
|
+
|
|
82
|
+
草稿 `CREATED` 后(流程见 [invoice-issuing-workflow.md](invoice-issuing-workflow.md) Step 6 第 5、6 条),分两类处理。
|
|
83
|
+
|
|
84
|
+
**Agent 经编辑链补正(只改主表)**:一次 `editPrepare` 提交,用户确认一次后 `editApply`。
|
|
85
|
+
|
|
86
|
+
| 字段 | 补正值 | 不补的情况 |
|
|
87
|
+
| --- | --- | --- |
|
|
88
|
+
| 开户行名称(`1211869454131068975`)、开户行银行帐号(`1211869454131068976`) | 按上文「开户行名称与账号」的先后顺序取值 | 两处都为空;或「开户行及帐号」格式无法拆分;或草稿里已经是这两个值 |
|
|
89
|
+
|
|
90
|
+
**请用户在 E10 里手工改**:Agent 不经编辑链改这两项。
|
|
91
|
+
|
|
92
|
+
- 「开票内容」:编辑时会触发它自己的联动,`editPrepare` 实测报错。
|
|
93
|
+
- 明细字段:经 `editPrepare` 改明细,保存后会多出一行,而不是改原行(实测)。
|
|
94
|
+
|
|
95
|
+
| 字段 | 回复里怎么提醒 |
|
|
96
|
+
| --- | --- |
|
|
97
|
+
| 开票内容 | `开票内容:请在 E10 里选择「{建议选项}」`;没有建议选项时写 `开票内容:请在 E10 里选择` |
|
|
98
|
+
| 明细「数量」 | 按草稿每行的「明细行id」(`1318645704062197885`)找到 `items[]` 里同一 `formDataId` 的台账行:`明细第 {N} 行数量:联动带出的是 {草稿值},请在 E10 改成 {items[].quantity}`;台账数量为空时写 `请按实际数量改正`;草稿值已经等于台账值时不提 |
|
|
99
|
+
|
|
100
|
+
- 明细行按「明细行id」对应台账行,**不按行序猜**:联动带出的行序不一定等于 `group.formDataIds` 的顺序。
|
|
101
|
+
|
|
102
|
+
## 开票事由生成规则
|
|
103
|
+
|
|
104
|
+
用户没给原话时,Agent 按下面的公式直接生成,**不追问用户**:
|
|
105
|
+
|
|
106
|
+
| 情形 | 公式 |
|
|
107
|
+
| --- | --- |
|
|
108
|
+
| 按总金额开(默认) | `合同{合同号}({合同审批流程名称}){商品}全额开票,金额{本次开票金额}元` |
|
|
109
|
+
| 用户指定了本次金额 | `合同{合同号}({合同审批流程名称}){商品}开票,本次{本次开票金额}元,合同开票总额{group.totalAmount}元` |
|
|
110
|
+
|
|
111
|
+
- `{商品}` 取 `group.goodsNames`,多个时用「、」连接。
|
|
112
|
+
- `{合同审批流程名称}` 为空时,连同括号一起省略。
|
|
113
|
+
- 金额照数据原样写,不自行改格式:本次开票金额用台账 `items[].amount` 或用户原话(如 `5900`、`46292.1`),合同开票总额用 `group.totalAmount`(如 `20000.00`)。
|
|
114
|
+
- 用户说了是第几笔款项(如"第二笔款"),在公式最前面加 `第{N}笔款项:`;用户没说就不加,不要自己推断。
|
|
115
|
+
|
|
116
|
+
示例:`合同20266105586(深圳市康哲药业有限公司2026年度维护)年度维护费全额开票,金额5900元`
|
|
117
|
+
|
|
118
|
+
## 预计收款时间
|
|
119
|
+
|
|
120
|
+
必填字段,由用户决定。**用户没给出日期就不建草稿**:Agent 不推断、不给默认值(不按开票日期、合同条款或历史数据去猜),也不留空先建。
|
|
121
|
+
|
|
122
|
+
- 用户开票时已经说了(如"预计月底收款"),直接用,卡片里展示换算后的日期,不再问。
|
|
123
|
+
- 用户没说:确认卡片里请用户给出,并附上按当天日期算好的三个候选,方便用户直接选(模板见 [invoice-issuing-workflow.md](invoice-issuing-workflow.md) Step 3):
|
|
124
|
+
- `本月底 {YYYY-MM-DD}`
|
|
125
|
+
- `下月底 {YYYY-MM-DD}`
|
|
126
|
+
- `30 天后 {YYYY-MM-DD}`
|
|
127
|
+
|
|
128
|
+
候选只是选项,用户没选之前不能当成默认值填。
|
|
129
|
+
- 用户只回了"确认 / 继续 / 发起"、没给日期:**不建草稿**,只问一句「预计收款时间填哪天?可以直接回 本月底 / 下月底 / 30 天后,或给一个具体日期。」,拿到日期再建。用户回"随便 / 你定"时,同样请他从候选里选一个。
|
|
130
|
+
- 写法:`YYYY-MM-DD`。用户说相对日期("下月底""30 天后""11 月 15 号")时按当天日期换算成具体日期,并在创建后的回复里说明换算结果,如「预计收款时间按『下月底』填为 2026-11-30」。
|
|
131
|
+
|
|
132
|
+
## 用户指定了本次开票金额
|
|
133
|
+
|
|
134
|
+
- **单行合同**:用户说「这次开 1 万」「先开一半」,就把该行「金额(含税)」填成用户给的金额,数量在创建后补正为台账值(单价由联动带出台账值,与金额对不上属正常)。「一半」这类说法按用户原意换算成金额,换算结果写进确认卡片,由用户一并确认。
|
|
135
|
+
- **多行合同**:用户逐行说明了金额,就逐行填;用户只给了一个总数、没说怎么分到各行时,**问一次**怎么分,不要自己平摊。
|
|
136
|
+
- 用户给的金额大于该行台账开票金额时,在确认卡片里提示「超过台账开票金额」,用户确认后照填。
|
|
137
|
+
|
|
138
|
+
## 确认卡片里要体现
|
|
139
|
+
|
|
140
|
+
确认卡片(见 [invoice-issuing-workflow.md](invoice-issuing-workflow.md) Step 3)在明细表后追加三行:
|
|
141
|
+
|
|
142
|
+
- `本次开票金额:{合计}({默认按总金额开 / 按你指定的金额})`
|
|
143
|
+
- `开票事由:{按上面公式生成的文本}`
|
|
144
|
+
- `预计收款时间:{用户已给的日期}`;用户还没给时写 `预计收款时间:(必填)请选择:本月底 {日期} / 下月底 {日期} / 30 天后 {日期},或直接给一个日期`
|
|
145
|
+
|
|
146
|
+
`group.specifications` 非空时再追加一行:
|
|
147
|
+
|
|
148
|
+
- 能填:`所售产品版本号:{选项}(取自规格类型)`
|
|
149
|
+
- 不在选项里:`所售产品版本号:规格类型「{值}」不在下拉选项里,先留空,提交前请在 E10 选择`
|
|
150
|
+
- 多个值:`所售产品版本号:明细规格类型有 {值1}、{值2},请告诉我选哪个`
|
|
151
|
+
|
|
152
|
+
用户在确认时改了金额或事由,以用户的为准,并按公式重新生成事由。
|