面向上市公司的发票识别与自动入账技能包,通过 OCR 拍照/截图提取发票数据, 自动分类并匹配入账。支持增值税专用发票、普通发票、全电发票、机动车发票、 通行费、火车票机票等全类型发票,实现发票验真、自动分类、三单匹配和台账管理。
---
name: finance-invoice-ocr
description: |
面向上市公司的发票识别与自动入账技能包,通过 OCR 拍照/截图提取发票数据,
自动分类并匹配入账。支持增值税专用发票、普通发票、全电发票、机动车发票、
通行费、火车票机票等全类型发票,实现发票验真、自动分类、三单匹配和台账管理。
metadata:
openclaw:
author: "@AOLIKEJI"
version: "1.0.0"
category: finance
tags: ["发票", "OCR", "识别", "入账", "验真", "台账", "进销存", "增值税"]
emoji: "🧾"
homepage: "https://clawhub.ai/skills/finance-invoice-ocr"
triggers:
- "发票识别"
- "发票OCR"
- "invoice"
- "ocr"
- "拍照入账"
- "发票提取"
- "发票录入"
---
# 发票识别技能包 (finance-invoice-ocr)
## 概述
本技能包专为上市公司财务部门设计,实现发票全生命周期管理:从 OCR 识别提取数据 → 发票验真 → 自动分类入账 → 台账管理 → 与进销存系统联动。
---
## 一、支持的发票类型
### 1.1 增值税发票
| 发票类型 | 代码规则 | 特点 |
|---------|---------|------|
| 增值税专用发票(纸质) | 10位或12位 | 需认证抵扣 |
| 增值税专用发票(电子) | 20位 | 全电票前身 |
| 全电发票(数电发票) | 20位,格式:XX+两位年份+8位号码 | 无需打印 |
| 增值税普通发票(纸质) | 12位 | 不可抵扣 |
| 增值税普通发票(电子) | 20位 | 不可抵扣 |
### 1.2 其他发票类型
| 类型 | 票面特征 | 用途 |
|-----|---------|------|
| 机动车销售统一发票 | 机动车二维码 | 车辆采购入账 |
| 通行费发票(ETC/高速) | 抬头+金额+日期 | 费用报销 |
| 火车票 | 姓名+身份证+金额 | 出差费用 |
| 机票行程单 | 电子客票号+乘客 | 差旅费用 |
| 出租车发票 | 金额+时间+车牌 | 市内交通 |
| 通用机打发票 | 各省市格式不一 | 餐饮/住宿等 |
---
## 二、OCR 提取字段规范
### 2.1 核心字段(必须提取)
```
发票代码 / Invoice Code
发票号码 / Invoice Number
开票日期 / Invoice Date
购买方名称 / Buyer Name
购买方纳税人识别号 / Buyer Tax ID
销售方名称 / Seller Name
销售方纳税人识别号 / Seller Tax ID
```
### 2.2 金额字段
```
不含税金额 / Amount Excluding Tax
税率 / Tax Rate
税额 / Tax Amount
价税合计 / Total Amount (含税)
```
### 2.3 商品明细字段
```
商品名称 / Product Name
商品规格型号 / Specification
计量单位 / Unit
数量 / Quantity
单价 / Unit Price
金额 / Line Amount
税率 / Tax Rate
税额 / Line Tax Amount
```
### 2.4 特殊字段
```
校验码(后6位)/ Check Code (Last 6 digits)
收款人 / Payee
复核人 / Reviewer
开票人 / Issuer
备注 / Remarks
```
### 2.5 OCR 识别公式
**字段完整性校验公式:**
```
完整性得分 = (已识别字段数 / 总字段数) × 100%
阈值:≥85% 为合格,<85% 需人工复核
```
**金额勾稽公式:**
```
价税合计 = 不含税金额 + 税额
税额 = 不含税金额 × 税率
验证结果 = (价税合计 == 不含税金额 + 税额) ? 通过 : 异常
```
---
## 三、发票验真流程
### 3.1 查验平台
- **国家税务总局全国增值税发票查验平台**:https://inv-veri.chinatax.gov.cn
- **API 接口**:支持批量查验,每张发票每天最多查验 5 次
### 3.2 验真规则
```
1. 发票状态检查:
- 正常 / 作废 / 红冲 / 失控 / 异常
2. 票面信息一致性:
发票号码 + 发票代码 + 开票日期 + 金额(开票日期起5日内有效)
3. 校验码规则(增值税普通发票):
纸票:验证码后6位
电子票:完整20位验证码
```
### 3.3 异常状态处理
| 状态 | 处理方式 |
|-----|---------|
| 作废发票 | 标记作废,不予报销入账 |
| 红冲发票 | 通知原报销人冲减,原件存档 |
| 失控发票 | 立即停止报销,通知税务部门 |
| 查无此票 | 要求重新取得有效发票 |
| 不一致 | 退回报销人核对修正 |
### 3.4 验真自动化流程图
```
┌─────────────┐
│ 拍照/截图 │
└──────┬──────┘
▼
┌─────────────┐
│ OCR 识别 │──── 字段提取
└──────┬──────┘
▼
┌─────────────┐
│ 字段校验 │──── 完整性 ≥85%?
└──────┬──────┘
▼ (通过)
┌─────────────┐
│ 金额勾稽 │──── 价税合计=不含税+税额?
└──────┬──────┘
▼ (通过)
┌─────────────┐
│ 查验平台 │──── 查询发票状态
│ API 调用 │
└──────┬──────┘
▼
┌─────────────┐
│ 状态判定 │
│ 正常/异常 │
└─────────────┘
```
---
## 四、自动入账流程
### 4.1 入账方向判定
```
判断逻辑:
IF 购买方 == 本公司:
入账类型 = 进项发票(采购/资产/费用)
入账方向 = 借:相关成本/费用科目
贷:应付账款/银行存款
ELSE IF 销售方 == 本公司:
入账类型 = 销项发票(收入确认)
入账方向 = 借:应收账款/银行存款
贷:主营业务收入
应交税费-应交增值税(销项税额)
```
### 4.2 进项发票分类入账
| 发票类型 | 用途 | 借方科目 | 贷方科目 |
|---------|-----|---------|---------|
| 采购原材料 | 生产领用 | 原材料 / 在途物资 | 应付账款 |
| 采购商品 | 对外销售 | 库存商品 | 应付账款 |
| 购置固定资产 | 自用 | 固定资产 / 在建工程 | 银行存款 |
| 办公费用 | 行政管理 | 管理费用-办公费 | 银行存款 |
| 广告宣传 | 市场营销 | 销售费用-广告费 | 银行存款 |
| 咨询顾问 | 专业服务 | 管理费用-咨询费 | 银行存款 |
| 差旅交通 | 员工报销 | 差旅费 / 交通费 | 其他应收款 |
### 4.3 销项发票入账
```
销售商品/服务:
借:应收账款 / 银行存款
应交税费-应交增值税(销项税额)
贷:主营业务收入 / 其他业务收入
特殊处理:
- 视同销售:需计算销项税额
- 不开票收入:申报未开票收入
```
### 4.4 自动入账流程
```
┌─────────────────┐
│ 发票验真通过 │
└────────┬────────┘
▼
┌─────────────────┐
│ 识别发票类型 │
│ 进项/销项判定 │
└────────┬────────┘
▼
┌─────────────────┐
│ 匹配业务单据 │
│ 采购单/销售合同 │
└────────┬────────┘
▼
┌────┴────┐
│ 匹配成功? │
└────┬────┘
是/ \否
▼ ▼
┌───────┐ ┌───────────┐
│三单匹配│ │ 标记待确认 │
│自动入账│ │ 推送人工 │
└───┬───┘ └───────────┘
▼
┌─────────────────┐
│ 生成凭证号 │
│ 更新台账 │
└─────────────────┘
```
---
## 五、发票台账管理
### 5.1 进项发票台账结构
| 字段 | 说明 |
|-----|------|
| 入账日期 | 系统自动记录 |
| 发票代码 | 10/12/20位 |
| 发票号码 | 8位 |
| 发票类型 | 专票/普票/全电 |
| 开票日期 | 票面日期 |
| 销售方名称 | 销售方公司名 |
| 销售方税号 | 统一社会信用代码 |
| 不含税金额 | 金额字段 |
| 税额 | 税额字段 |
| 价税合计 | 价税合计字段 |
| 认证状态 | 已认证/未认证/逾期 |
| 认证日期 | 认证当月 |
| 抵扣用途 | 生产用/集体福利/简易计税 |
| 对应采购单号 | 关联业务单据 |
| 入账凭证号 | 会计凭证号 |
| 备注 | 异常说明 |
### 5.2 销项发票台账结构
| 字段 | 说明 |
|-----|------|
| 开具日期 | 开票日期 |
| 发票代码/号码 | 票面信息 |
| 购买方名称 | 客户名称 |
| 购买方税号 | 客户税号 |
| 商品服务名称 | 编码+名称 |
| 不含税金额 | 销售额 |
| 税率 | 适用税率 |
| 税额 | 销项税额 |
| 价税合计 | 总金额 |
| 发票状态 | 正常/作废/红冲 |
| 对应销售单号 | 关联订单 |
| 凭证号 | 记账凭证 |
| 申报状态 | 已申报/未申报 |
| 申报属期 | 增值税申报表所属期 |
### 5.3 认证期限提醒规则
```
政策依据:《增值税暂行条例》及实施细则
- 增值税专用发票:开票之日起360天内认证(2017年7月前为180天)
- 全电发票:用途确认无期限限制,但建议及时处理
提醒机制:
认证到期前 30/15/7/3/1 天提醒
逾期未认证标记为"逾期待处理"
```
### 5.4 作废处理流程
```
进项发票作废:
1. 购方尚未认证抵扣 → 销售方自行作废
2. 购方已认证未抵扣 → 购方需开红字信息表
3. 已抵扣入账 → 需做进项税额转出
操作步骤:
原发票标记"已作废"
关联凭证标记"已冲销"
创建新合规发票(若需)
台账备注变更原因
```
---
## 六、与进销存系统联动
### 6.1 Excel 进销存结构
**Sheet1: 进项发票**
```
| 入账日期 | 发票代码 | 发票号码 | 商品名称 | 规格型号 | 数量 | 单价 | 金额 | 税额 | 价税合计 | 供应商 | 采购单号 | 仓库 | 状态 |
```
**Sheet2: 销项发票**
```
| 开具日期 | 发票代码 | 发票号码 | 商品名称 | 数量 | 单价 | 金额 | 税率 | 税额 | 价税合计 | 客户 | 销售单号 | 仓库 | 状态 |
```
**Sheet3: 库存台账**
```
| 日期 | 单据类型 | 单据号 | 商品编码 | 商品名称 | 规格 | 单位 | 期初库存 | 入库数量 | 出库数量 | 期末库存 | 仓库 |
```
**Sheet4: 三单匹配查询**
```
| 采购单号 | 采购合同号 | 供应商 | 发票号码 | 发票金额 | 入库单号 | 入库金额 | 匹配状态 | 差异金额 |
```
### 6.2 三单匹配规则
```
匹配公式:
发票金额 = 入库单金额 = 采购订单金额 → 完全匹配 ✓
差异容差:±0.01元(四舍五入误差)
存在差异 → 标记"差异待处理"
匹配状态枚举:
0: 未匹配
1: 部分匹配
2: 完全匹配
3: 差异处理中
4: 匹配异常
```
### 6.3 联动写入示例
```python
# 写入进项发票到 Excel
def write_purchase_invoice(invoice_data: dict, excel_path: str):
"""
invoice_data: OCR识别的发票数据字典
excel_path: 进销存Excel文件路径
"""
from openpyxl import load_workbook
wb = load_workbook(excel_path)
ws = wb['进项发票']
# 找到最后一行
last_row = ws.max_row + 1
# 写入数据
ws[f'A{last_row}'] = invoice_data.get('entry_date', date.today())
ws[f'B{last_row}'] = invoice_data.get('invoice_code')
ws[f'C{last_row}'] = invoice_data.get('invoice_number')
ws[f'D{last_row}'] = invoice_data.get('product_name')
ws[f'E{last_row}'] = invoice_data.get('spec')
ws[f'F{last_row}'] = invoice_data.get('quantity')
ws[f'G{last_row}'] = invoice_data.get('unit_price')
ws[f'H{last_row}'] = invoice_data.get('amount')
ws[f'I{last_row}'] = invoice_data.get('tax_amount')
ws[f'J{last_row}'] = invoice_data.get('total_amount')
ws[f'K{last_row}'] = invoice_data.get('seller_name')
ws[f'L{last_row}'] = invoice_data.get('purchase_order_no')
ws[f'M{last_row}'] = '已入账'
wb.save(excel_path)
return last_row
```
---
## 七、使用示例
### 7.1 拍照识别发票
```
用户:请帮我识别这张发票并入账
[上传发票图片]
系统处理:
1. OCR识别完成
- 发票类型:增值税专用发票(电子)
- 发票代码:144031900110
- 发票号码:12345678
- 开票日期:2024-01-15
- 销售方:深圳市XX科技有限公司
- 购买方:贵公司
- 不含税金额:¥10,000.00
- 税率:13%
- 税额:¥1,300.00
- 价税合计:¥11,300.00
2. 发票验真:通过 ✓
状态:正常发票
3. 入账建议:
借:管理费用-办公费 ¥10,000.00
应交税费-应交增值税(进项税额) ¥1,300.00
贷:应付账款 ¥11,300.00
是否确认入账?
```
### 7.2 批量验真查询
```
用户:帮我查询这批发票的验真状态
[提交发票列表]
系统返回:
| 发票号码 | 开票日期 | 金额 | 验真状态 | 操作建议 |
|---------|---------|------|---------|---------|
| 12345678 | 2024-01-10 | ¥5,000 | ✓ 正常 | 可入账 |
| 87654321 | 2024-01-11 | ¥8,000 | ✗ 作废 | 勿入账 |
| 11223344 | 2024-01-12 | ¥3,500 | ✓ 正常 | 可入账 |
| 55667788 | 2024-01-13 | ¥6,000 | ? 查无此票 | 重新获取 |
```
---
## 八、注意事项
### 8.1 政策合规
- 本技能包仅辅助发票管理,最终入账以财务人员确认为准
- 发票验真结果仅供参考,以主管税务机关认定为准
- 增值税申报以纳税申报表为准
### 8.2 数据安全
- 发票数据涉及商业机密,请妥善保管
- 建议设置数据访问权限
- 定期备份发票台账
### 8.3 常见问题
| 问题 | 解决方案 |
|-----|---------|
| OCR识别不完整 | 重新拍照,确保光线充足、图片清晰 |
| 发票验真失败 | 检查发票代码号码是否正确,确认开票日期5日内 |
| 金额不一致 | 核对票面金额与系统金额,以票面为准 |
| 供应商信息缺失 | 手动补录或联系开票方核实 |
---
*本技能包由 @AOLIKEJI 创建,版本 1.0.0*
don't have the plugin yet? install it then click "run inline in claude" again.