# 报销自动填单

## 什么时候读取

用户提到报销、发票报销、自动填单、提交报销单、事前申请报销，或需要把已选发票生成 E10 报销流程时读取本文件。纯查发票仍优先读个人/企业票夹 reference。

## Operation

本技能负责报销的**数据准备**；报销单的**创建与修改**统一调用 `weaver-e10-workflow` 技能的发起/修改能力。

| 意图 | Operation | 所属技能 | 风险 |
| --- | --- | --- | --- |
| E10 fileId 转发票识别结果 | `invoice.reim.file-ocr.preview` | yepiaotong | read-with-upload |
| 报销候选发票分类（可报 / 已挂单 / 红冲） | `invoice.reim.candidates.list` | yepiaotong | read |
| 查询事前申请 | `invoice.reim.requests.list` | yepiaotong | read |
| 获取报销工作流 ID 与名称 | `invoice.reim.workflow.resolve` | yepiaotong | read |
| 获取发票明细行预填信息 | `invoice.reim.row-info` / `invoice.reim.row-info-batch` | yepiaotong | read |
| 取发票字段对象 | `invoice.browse-field.data` | yepiaotong | read |
| 获取当前人员及上级（兜底） | `invoice.reim.employee-superiors` | yepiaotong | read |
| 载入报销表单 | `workflow.createForm` | workflow | read |
| 创建报销单（存草稿 / 提交审批） | `workflow.createRequest` | workflow | high-risk-write |
| 修改已创建的报销单 | `workflow.editLoad` / `workflow.editPrepare` / `workflow.editApply` | workflow | read / read-before-write / high-risk-write |

> 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` 技能不可用时停止并告知用户需要安装该技能，不要改用其他方式创建报销单。

## 处理链

1. 获取发票：已有 `fid` 时可用 `invoice.get`；已有 E10 `fileId` 时用 `invoice.reim.file-ocr.preview`；按日期批量报销用 `invoice.reim.candidates.list`（只取 `available`），按关键词/号码筛选用 `invoice.list`，默认未报销发票。
2. 展示发票汇总，让用户确认哪些发票进入报销。
3. 用 `invoice.reim.requests.list` 获取事前申请，再按时间、费用类型和标题做匹配；原始 ID、日期、金额必须逐字符保留。
4. 用 `invoice.reim.workflow.resolve` 得到报销工作流，必要时按工作流分组。
5. 对每组并行调用 `workflow.createForm`（`workflow` 传 `{workFlowName}({workFlowId})`）、`invoice.reim.row-info-batch`、`invoice.browse-field.data`（发票 + 配对凭证的 `fid`）。
6. 按 [`reim-form-fill-rules.md`](reim-form-fill-rules.md) 组装 `createRequest` 的 `data`，向用户展示预览并确认「存草稿 / 提交审批」后调用 `workflow.createRequest`，结果原样粘贴 `finalMarkdown`。命中「话费补贴标准审批流程」或「话费报销」时，必须先读 [`reim-phone-subsidy-rules.md`](reim-phone-subsidy-rules.md)，按月度标准核算实报金额，不能直接用发票金额填单。
7. 报销单创建成功后，后续修正使用 `workflow.editLoad` → `workflow.editPrepare` → 用户确认 → `workflow.editApply`，不要重复创建同一组发票的报销单。

完整编排见 [`reim-workflow.md`](reim-workflow.md)。

## 命令

查询事前申请：

Windows PowerShell：

```powershell
weaver-work-cli --json invoice run invoice.reim.requests.list --input-json '{"pageNo":1,"pageSize":20,"requestname":"交通","cusCreateDateStart":"2026-07-01","cusCreateDateEnd":"2026-07-31"}'
```

macOS/Linux（bash/zsh）：

```bash
weaver-work-cli --json invoice run invoice.reim.requests.list --input-json '{"pageNo":1,"pageSize":20,"requestname":"交通","cusCreateDateStart":"2026-07-01","cusCreateDateEnd":"2026-07-31"}'
```

载入报销表单（拿 `continuation` 与可写字段 `fields`）：

Windows PowerShell：

```powershell
weaver-work-cli --json workflow run workflow.createForm --input-json '{"workflow":["总部费用报销(100003460000000060)"]}'
```

macOS/Linux（bash/zsh）：

```bash
weaver-work-cli --json workflow run workflow.createForm --input-json '{"workflow":["总部费用报销(100003460000000060)"]}'
```

创建报销单：`data` 含发票对象、体积较大，先写入 UTF-8 JSON 文件再传入。

Windows PowerShell：

```powershell
Set-Content -Encoding utf8 -LiteralPath .\reim-create-request.json -Value @'
{
  "context": "<createForm 返回的 continuation>",
  "requestName": "交通费报销-示例-2026-08-04",
  "action": "draft",
  "data": {
    "main": {"100003720000000088": "2026-07-30 市内交通 - 滴滴出行"},
    "details": {"100003690000000011": [{"100003720000016373": "108.2", "100003720000052200": "人民币(100001050000000001)"}]}
  }
}
'@
weaver-work-cli --json workflow run workflow.createRequest --input .\reim-create-request.json
```

macOS/Linux（bash/zsh）：

```bash
cat > ./reim-create-request.json <<'JSON'
{
  "context": "<createForm 返回的 continuation>",
  "requestName": "交通费报销-示例-2026-08-04",
  "action": "draft",
  "data": {
    "main": {"100003720000000088": "2026-07-30 市内交通 - 滴滴出行"},
    "details": {"100003690000000011": [{"100003720000016373": "108.2", "100003720000052200": "人民币(100001050000000001)"}]}
  }
}
JSON
weaver-work-cli --json workflow run workflow.createRequest --input ./reim-create-request.json
```

示例里的字段 id 来自「总部费用报销」，实际一律以本次 `createForm` 返回的 `fields` 为准；明细行的「相关发票」「相关凭证」要放 `invoice.browse-field.data` 返回的发票对象数组。

## 输出处理

`workflow.createRequest` 在成功（`CREATED` / `CREATED_SUBMITTED`）、提交失败（`CREATED_SUBMIT_FAILED`）和缺必填（`NEEDS_INPUT`）时返回 `finalMarkdown`，**原样粘贴给用户**，不要自己重拼表格；链接只出现在回复文本里，不要主动打开。若返回 `partial/write_uncertain`，停止，不要重放；最多做一次只读查询或请用户在 E10 页面核对。

## 注意

报销单创建涉及金额，**调用 `workflow.createRequest` 前必须先展示预览并取得用户明确确认**；同一组发票创建成功后禁止再次创建，修改只能走 `workflow.edit*`。

出差/差旅流程需要具体相关客户。未拿到用户提供的客户前，不要调用 `workflow.createRequest`。

`invoice.reim.file-ocr.preview` 会让 E10 侧文件进入发票识别流程；如果 fileId 来自用户新上传或附件解析，先提醒用户文件内容可能进入大模型上下文，也可能发送到 E10/OCR 服务，并等待明确确认。
