Install
openclaw skills install @fyniujin/tax-receipt-complianceopenclaw skills install @fyniujin/tax-receipt-compliance⚠️ 使用必读:本Skill所有功能在本地运行,发票数据绝不外传,但绝不提供税务咨询。使用前请先阅读【限制说明】和【风险声明】。
本Skill提供从发票识别到审批提交的全链路财税合规能力。
| 模块 | 功能 | 状态 | 输入 | 输出 |
|---|---|---|---|---|
| 1. 发票OCR识别 | Tesseract本地识别增值税发票 | ✅ 直接可用 | 发票图片 | 结构化JSON |
| 2. 真伪查验 | 对接查验平台,自动获取结果 | ⚠️ 需配置密钥 | 发票代码/号码 | 查验结果 |
| 3. 报销单填充 | 自适应学习模板,一键填充 | ✅ 直接可用 | 发票数据+模板 | Excel文件 |
| 4. 审批对接 | 对接钉钉/企微/飞书审批 | ⚠️ 需配置密钥 | 报销单+配置 | 审批结果 |
✅ = 装即用 | ⚠️ = 需在 config.yaml 中配置对应API密钥
| 意图 | 触发词 |
|---|---|
| 识别发票 | "识别这张发票"、"OCR发票"、"扫描发票" |
| 查验真伪 | "查验这张发票"、"查发票真伪" |
| 生成报销单 | "用XX模板生成报销单"、"填报销单" |
| 提交审批 | "提交报销审批"、"发起审批"、"报销审批" |
| 批量处理 | "批量识别"、"批量报销" |
本Skill支持通过自然语言对话方式使用,无需记忆复杂命令。
用户:请帮我识别这张发票 D:\invoices\20260628_001.png
AI:正在识别发票...
✓ 发票类型: 增值税专用发票
✓ 发票代码: 3100204130
✓ 发票号码: 00564189
✓ 开票日期: 2026年06月28日
✓ 金额: 10,000.00 元
✓ 税额: 1,300.00 元
识别完成,已保存到 receipt.json
用户:把文件夹里所有发票都识别出来
AI:正在批量识别 D:\invoices\ 中的发票...
共发现 15 个图片文件
✓ 20260628_001.png - 识别成功
✓ 20260628_002.png - 识别成功
⚠ 20260628_003.png - 识别失败(图片模糊)
...
处理完成:成功 12 张,失败 3 张
结果已保存到 batch_result.json
用户:帮我查验这张发票的真伪
AI:正在查验发票...
发票代码:3100204130
发票号码:00564189
✓ 查验平台:国税总局
✓ 发票状态:正常
✓ 查验时间:2026-06-29 10:30:00
用户:用公司模板生成报销单
AI:正在生成报销单...
✓ 识别到 6 个字段映射
✓ 已填充:开票日期、销方名称、金额、税额、价税合计、费用说明
报销单已生成:D:\output\expense_report.xlsx
from scripts.ocr_engine import OCREngine
# 初始化引擎
engine = OCREngine()
# 识别单张发票
result = engine.extract_structured_data("invoice.png")
print(f"发票代码: {result['invoice_code']}")
print(f"金额: {result['amount']}")
# 批量处理
import glob
for file in glob.glob("invoices/*.png"):
result = engine.extract_structured_data(file)
print(f"{file}: {result['success']}")
# 启动API服务(需安装flask)
python scripts/api_server.py
# 识别发票
curl -X POST http://localhost:8080/api/ocr \
-F "file=@invoice.png"
# 批量识别
curl -X POST http://localhost:8080/api/ocr/batch \
-F "files=@invoice1.png" \
-F "files=@invoice2.png"
新手推荐:运行以下命令自动检测环境并推荐最优配置:
python scripts/config_wizard.py
向导会自动完成:
config.yaml 文件手动快速配置(3步完成):
# 1. 复制配置模板
cp templates/config_template.yaml config.yaml
# 2. 编辑配置(只需填写必填项)
# 用编辑器打开 config.yaml,填写:
# - verify_engine: "tax_bureau" (默认,免费)
# - approval.platform: "none" (暂不配置审批)
# 3. 验证配置
python scripts/check_env.py
💡 提示:基础功能(发票识别、报销单生成)只需完成环境安装即可使用,无需配置API密钥。查验和审批功能才需要配置API密钥。
Windows用户(一键安装):
# 自动下载并安装Tesseract(使用国内镜像,速度快)
.\scripts\install_tesseract.ps1
Linux/macOS用户:
bash ./scripts/install_tesseract.sh
安装Python依赖:
pip install Pillow pytesseract openpyxl pyyaml
安装完成后运行预检脚本检查环境:
bash python scripts/check_env.py
# 复制配置模板
cp templates/config_template.yaml config.yaml
💡 新手提示:不编辑
config.yaml也能使用基础功能(发票识别、报销单生成)。只有查验真伪和提交审批才需要配置对应API密钥。
# 识别单张发票(直接可用,无需配置)
python scripts/ocr_engine.py --input path/to/invoice.png --output receipt.json
# 生成报销单(直接可用,无需配置)
python scripts/template_matcher.py fill --config config.yaml --receipt receipt.json --template templates/expense_basic.xlsx
# 查验发票真伪(需先配置查验引擎)
python scripts/verify_engine.py --invoice-code 3100204130 --invoice-number 00564189 --date "2026年06月28日" --amount 10000
# 提交审批(需先配置审批平台)
python scripts/approval_engine.py --config config.yaml --expense expense_output.xlsx
# 环境预检
python scripts/check_env.py
见 references/setup-guide.md
输入:
识别发票 D:\invoices\20260628_001.png
输出:
{
"success": true,
"invoice_type": "增值税专用发票",
"invoice_code": "3100204130",
"invoice_number": "00564189",
"invoice_date": "2026年06月28日",
"seller_name": "上海某某科技有限公司",
"amount": 10000.00,
"tax_rate": 0.13,
"tax_amount": 1300.00,
"total": 11300.00,
"remark": "*信息技术服务费*",
"confidence": 0.96
}
输入:
查验发票 代码:3100204130 号码:00564189 日期:2026-06-28 金额:10000.00
输出:
{
"engine": "国税总局查验平台",
"status": "ready",
"verify_url": "https://inv-veri.chinatax.gov.cn/index.html?fpdm=3100204130&fphm=00564189",
"message": "已为您生成查验链接,点击即可查验",
"params": {
"invoice_code": "3100204130",
"invoice_number": "00564189",
"billing_date": "2026-06-28",
"amount": 10000.00
}
}
如配置了百望云/诺诺API Key,会自动调用第三方API获取查验结果。
输入:
用模板 D:\templates\公司报销单.xlsx 生成报销单,数据来自 D:\invoices\receipt.json
输出:
模板分析完成:识别到 6 个字段映射,置信度 0.8+
报销单已生成:D:\output\expense_report_20260629.xlsx
已填充 6 个字段:开票日期、销方名称、金额、税额、价税合计、费用说明
python scripts/batch_process.py --input D:\invoices\ --template D:\templates\公司报销单.xlsx --output D:\output\合并报销单.xlsx
python scripts/approval_engine.py --config config.yaml --expense D:\output\报销单.xlsx --user-id manager123 --amount 11300 --expense-type 信息技术服务
⚠️ 重要提醒:Tesseract OCR识别效果高度依赖图片质量。模糊、反光、低分辨率的图片会导致识别率显著下降。
| 质量等级 | 分辨率 | 光线 | 平整度 | 预期准确率 |
|---|---|---|---|---|
| 优秀 | ≥300DPI | 均匀 | 无褶皱 | 95%+ |
| 良好 | 200-300DPI | 较均匀 | 轻微褶皱 | 85-95% |
| 可用 | 150-200DPI | 一般 | 有褶皱 | 70-85% |
| 较差 | <150DPI | 反光/阴影 | 严重褶皱 | <70%,建议重新拍摄 |
图片质量自检清单:
提高识别率的小技巧:
- 用手机相机拍摄时,开启"文档模式"或"扫描模式"
- 避免强光直射,减少反光
- 发票平整放置,不要弯曲
- 确保发票代码、号码区域清晰可见
- 如果无法识别,请检查图片中是否有手写涂改
- 推荐使用扫描件,比拍照效果更好
- 可使用手机扫描APP(如"扫描全能王")预处理图片
| 限制项 | 具体说明 |
|---|---|
| OCR识别 | 仅支持增值税发票(专票/普票/电子票) |
| 暂不支持 | 手写发票、定额发票、机动车发票、二手车发票 |
| 查验功能 | 需企业自行申请API密钥,Skill不代为申请 |
| 审批功能 | 需企业管理员在对应平台开通审批API权限 |
| 限制项 | 具体说明 |
|---|---|
| 运行环境 | Python 3.8+ |
| 必须安装 | Tesseract OCR + 中文语言包 |
| 图片格式 | PNG/JPG/TIFF/PDF(PDF需要poppler) |
| 语言 | 中文简体,其他语言准确率显著下降 |
| 并发 | 单线程处理,一次一张 |
| 限制项 | 具体说明 |
|---|---|
| 数据上传 | 绝不将发票图片上传到任何第三方服务器 |
| API调用 | 仅在用户明确授权后执行,且仅调用用户配置的平台 |
| 日志 | 仅记录操作元数据(文件名、时间、状态),不记录发票内容 |
| 临时文件 | 识别完成后自动清理,保留不超过24小时 |
| 错误代码 | 问题描述 | 解决方案 |
|---|---|---|
Tesseract not found | Tesseract未安装或未加入PATH | 运行 install_tesseract.ps1 并重启终端 |
chi_sim not found | 中文语言包未安装 | 重新安装Tesseract,勾选Chinese语言包 |
PIL not found | Pillow未安装 | pip install Pillow |
pytesseract not found | pytesseract未安装 | pip install pytesseract |
openpyxl not found | openpyxl未安装 | pip install openpyxl |
pdf2image not found | PDF转图片工具未安装 | pip install pdf2image + 安装poppler |
empty result | OCR未识别到文字 | 检查图片质量、光线、平整度 |
low confidence | 识别置信度低于0.7 | 建议重新拍摄,或手动输入发票信息 |
verify_engine not configured | 查验引擎未配置 | 编辑config.yaml,填写对应API Key |
approval_engine not configured | 审批引擎未配置 | 编辑config.yaml,选择并填写审批平台 |
token_failed | 获取AccessToken失败 | 检查API Key/Secret是否正确 |
template_not_found | 模板文件不存在 | 检查template路径是否正确 |
🔴 使用本Skill前,请务必仔细阅读以下条款:
使用本Skill,用户不得:
使用前,请确认您已决定以下事项:
# config.yaml - 企业自主配置
# 本文件为示例模板,企业需根据实际情况填写
# 未配置的功能模块将提示手动操作
# ==================== 查验引擎配置 ====================
verify_engine: "tax_bureau"
# 可选值:
# - "tax_bureau": 国税总局查验平台(免费,无需API Key)
# - "bairong": 百望云API(需API Key+Secret)
# - "nuonuo": 诺诺发票API(需API Key+Secret)
# - "custom": 企业自建接口(需接口地址)
# 百望云(如选择bairong)
bairong:
api_key: "在此填写您的百望云API Key"
api_secret: "在此填写您的百望云Secret"
# 诺诺发票(如选择nuonuo)
nuonuo:
api_key: "在此填写您的诺诺发票API Key"
api_secret: "在此填写您的诺诺发票Secret"
# 自建查验接口(如选择custom)
custom:
endpoint: "https://your-company.com/api/verify"
method: "POST"
headers:
Authorization: "Bearer YOUR_TOKEN"
# ==================== 审批平台配置 ====================
approval:
platform: "none" # dingtalk / wecom / feishu / none
# 钉钉审批
dingtalk:
app_key: ""
app_secret: ""
process_code: ""
# 企业微信审批
wecom:
corp_id: ""
secret: ""
template_id: ""
# 飞书审批
feishu:
app_id: ""
app_secret: ""
approval_code: ""
# 自建审批系统
custom:
endpoint: ""
method: "POST"
headers: {}
timeout: 30
# ==================== 模板映射配置 ====================
template:
path: "templates/expense_basic.xlsx" # 报销单模板路径
field_mapping:
invoice_date: "开票日期"
seller_name: "销方名称"
amount: "金额(不含税)"
tax_amount: "税额"
total: "价税合计"
remark: "费用说明"
invoice_code: "发票代码"
invoice_number: "发票号码"
Q1: 安装Tesseract后仍然提示 Tesseract not found
A: 通常是PATH环境变量未生效。
refreshenvsource ~/.bashrc 或 source ~/.zshrc--tesseract 参数指定完整路径:
python ocr_engine.py --tesseract "C:\Program Files\Tesseract-OCR\tesseract.exe" --input 发票.png
Q2: 识别结果为空或仅识别到少量内容
A: 按顺序排查:
tesseract --list-langs 检查是否有 chi_sim)Q3: 提示 PermissionError 或 Occupied
A: 文件被其他程序关闭。请关闭所有占用目标文件的程序后重试。
Q4: 查验接口返回失败
A: 排查顺序:
logs/verify_engine.log 了解详细错误Q5: 模板匹配失败
A: 检查以下几点:
common_mappings)Q6: 如何减小识别结果文件体积?
A: 处理完成后,删除 output/ 目录下的中间文件(.json、.xlsx),仅保留最终需要的文件。Skill会自动清理临时文件。
Q7: 支持哪些审批平台?
A: 钉钉、企业微信、飞书、自建系统(需实现接口)。
Q8: 如果审批平台不在列表中怎么办?
A: 使用 custom 选项,填写企业自建审批系统的接口地址和鉴权方式。
Q9: OCR识别率低,很多字段识别错误
A: 识别效果主要取决于图片质量,请尝试以下方法:
template_matcher.py analyze 分析模板结构Q10: 批量处理时部分文件失败
A: 正常现象,不影响其他文件。失败的文件会记录在JSON输出的 failed_files 字段中,包含:
file:文件路径error:错误原因tip:建议操作suggestions:具体改进建议Q11: 审批Token获取失败
A: 排查步骤:
Q12: 如何选择合适的查验引擎?
A: 根据企业需求选择:
Q13: 金额勾稽关系不匹配怎么办?
A: 可能原因:
Q14: 环境预检通过但OCR仍失败
A: 可能原因:
如果以上方案均无法解决问题,请查看日志文件获取详细信息:
logs/
├── ocr_engine.log # OCR识别详情
├── verify_engine.log # 查验详情
├── template_matcher.log # 模板匹配详情
├── approval_engine.log # 审批详情
└── error.log # 错误日志(优先查看)
scripts/check_env.pyverify_engine.py,真正对接国税总局/第三方平台approval_engine.py,真正获取Token并调用API本工具仅提供发票识别和报销单生成的技术支持,不提供任何税务咨询或财务建议。所有财务决策应由专业财务人员做出。使用者需确保符合当地法律法规。使用本工具即表示接受《风险声明》中的全部条款。