# OCR 票据识别架构

## 1. 定位

OCR 票据识别不是一个简单的图片转文字功能。

它在 X-Financial 中承担三件事：

1. 把用户上传的附件变成结构化票据信息。
2. 为规则中心提供可判断的字段。
3. 为 Hermes 和 User Agent 提供可解释的证据。

因此 OCR 应作为独立能力纳入 Capability Registry。

```text
capability_type = mcp | document_processor
capability_code = invoice_ocr
```

## 2. 总体链路

```text
附件上传
  ↓
文件分类
  ↓
OCR 识别
  ↓
字段结构化
  ↓
票据类型归一化
  ↓
发票验真 MCP
  ↓
与报销明细匹配
  ↓
规则中心检查
  ↓
人工修正
  ↓
修正结果沉淀
```

## 3. 阶段拆分

### Phase A：附件接入与文件分类

目标：先识别上传的是什么。

输入：

- 图片。
- PDF。
- Excel。
- Word。
- 压缩包。

输出：

```json
{
  "document_type": "invoice",
  "mime_type": "image/png",
  "page_count": 1,
  "confidence": 0.91
}
```

分类结果：

```text
invoice
itinerary
contract
payment_receipt
approval_screenshot
other
```

### Phase B：OCR 字段提取

目标：从图片或 PDF 中提取票据字段。

结构：

```json
{
  "invoice_code": "",
  "invoice_number": "",
  "seller_name": "",
  "seller_tax_no": "",
  "buyer_name": "",
  "buyer_tax_no": "",
  "issue_date": "",
  "total_amount": 0,
  "tax_amount": 0,
  "currency": "CNY",
  "ocr_confidence": 0.88
}
```

### Phase C：字段归一化

目标：不同 OCR 服务返回不同字段名，必须统一。

示例：

```text
发票号码 / invoiceNo / invoice_number
  -> invoice_number
```

金额统一：

```json
{
  "raw": "￥1,280.00",
  "value": 1280.00,
  "currency": "CNY"
}
```

### Phase D：验真与状态检查

调用发票验真 MCP。

输出：

```json
{
  "verify_status": "verified",
  "voided": false,
  "red_reversed": false,
  "verified_at": ""
}
```

### Phase E：与报销明细匹配

对比：

- 发票金额 vs 报销金额。
- 开票日期 vs 费用日期。
- 销售方 vs 商户。
- 发票类型 vs 费用类型。

输出：

```json
{
  "match_status": "matched",
  "mismatch_fields": [],
  "match_confidence": 0.94
}
```

### Phase F：人工修正与回流

OCR 结果必须允许人工修正。

修正内容进入反馈池：

```json
{
  "field": "invoice_number",
  "before": "12345B",
  "after": "123456",
  "corrected_by": "finance_user",
  "corrected_at": ""
}
```

## 4. 数据模型建议

```text
document_assets
document_ocr_results
invoice_structured_records
invoice_verification_records
document_corrections
```

## 5. 与规则中心关系

OCR 输出供规则使用：

```text
重复报销识别规则
作废发票检查规则
发票抬头异常规则
附件完整性规则
金额不一致规则
```

## 6. 与 Agent 关系

User Agent 使用 OCR：

- 解释发票为什么被拦截。
- 帮用户补充发票信息。
- 提醒上传清晰附件。

Hermes 使用 OCR：

- 夜间批量验真。
- 扫描重复票据。
- 统计发票异常趋势。

## 7. 开发阶段建议

```text
Step 1: 附件上传和文件分类
Step 2: 接入 OCR MCP
Step 3: 结构化字段归一化
Step 4: 人工修正界面
Step 5: 发票验真 MCP
Step 6: 与报销明细匹配
Step 7: 规则中心接入
Step 8: Hermes 夜间批量 OCR 巡检
```

