Files
Auto-Finance/README.md
2026-05-25 12:00:06 +08:00

5.2 KiB
Raw Blame History

财务报销自动化

自动从 PDF 发票提取信息OCR 识别支付记录截图,然后在财务系统中自动填报报销单。

项目结构

├── run.py                 # CLI 入口
├── config.json            # 配置文件(登录凭据、系统 URL 等)
├── app/
│   ├── config.py          # 配置加载
│   ├── extractor.py       # PDF 发票信息提取
│   ├── ocr.py             # OCR 刷卡信息识别
│   ├── bot.py             # 浏览器自动填报
│   └── pipeline.py        # 流程编排(数据在内存中流转)
├── web/
│   ├── app.py             # Web 服务入口
│   ├── templates/
│   │   ├── index.html     # Web 前端页面
│   │   └── mobile_upload.html  # 移动端扫码上传页面
│   └── uploads/           # 用户上传文件目录
├── *.pdf                  # 发票 PDF按需放置
├── *.png / *.jpg          # 与 PDF 同名的支付截图
├── invoice_summary.csv    # 中间产物 — 发票汇总表
└── images/                # 调试截图

数据流

PDF 文件 ──► extractor 提取 ──► 发票列表
                                   │
支付截图 ──► OCR 识别 ────────────► 回填刷卡信息
                                   │
                          invoice_summary.csv
                                   │
                          bot 打开浏览器 ──► 自动填报

环境要求

  • Python 3.10+
  • 依赖见下方安装步骤

快速开始

1. 安装依赖

以下依赖需在 MinerU 虚拟环境中安装:

conda activate MinerU
pip install pdfplumber==0.11.9 paddleocr==2.8.1 playwright==1.60.0 flask==3.0.3
playwright install chromium

2. 准备数据

将发票 PDF 和对应的支付截图放在项目根目录下。脚本会自动匹配 PDF 与截图:

  1. 优先文件名匹配 — PDF 与截图同名(如 发票.pdf发票.png
  2. 金额近邻匹配 — 文件名不同时,自动提取 PDF 的价税合计和截图的刷卡金额进行配对

截图支持格式:.png.jpg.jpeg.bmp.webp


### 3. 配置

编辑 `config.json`,填写登录凭据和默认值:

```json
{
    "username": "你的工号",
    "password": "你的密码",
    "default_name": "默认报销人姓名",
    "default_card_no": "默认公务卡号",
    "default_person_id": "默认人员编号"
}

未填写的字段将使用默认值URL 类配置一般无需修改。

4. 运行

# 全流程(发票提取 → OCR 识别 → 浏览器填报)
python run.py

# 仅执行某一步
python run.py --step invoice    # 仅发票提取
python run.py --step ocr        # 仅 OCR 识别
python run.py --step submit     # 仅浏览器填报

# 覆盖配置中的登录凭据
python run.py -u 工号 -p 密码

执行步骤说明

步骤 命令 说明
发票提取 --step invoice 扫描根目录 PDF提取发票号码、金额、销售方等信息生成 invoice_summary.csv.md
OCR 识别 --step ocr 对支付截图执行 OCR识别刷卡日期、刷卡金额、持卡人姓名回填到 CSV
浏览器填报 --step submit 打开浏览器,登录信息门户 → 进入报销系统 → 自动填单、录入明细、上传附件

分步执行时,上一步的 CSV 产物会自动成为下一步的输入。

Web 服务

提供浏览器界面,上传文件即可自动处理:

python web/app.py

访问 http://localhost:5000,上传文件并填写配置后点击「开始处理」。

两种处理模式

模式 入口 说明
PDF 模式 上传 PDF + 截图 自动提取发票信息 → OCR 识别刷卡记录 → 生成 CSV → 可选浏览器填报
CSV 快捷模式 上传已有 CSV 文件 跳过提取和 OCR直接使用 CSV 数据进行浏览器填报

功能说明

功能 说明
发票提取 + OCR 上传 PDF 后自动完成,无需手动操作
CSV 快捷上传 已有发票数据 CSV 可直接上传,跳过前面的步骤
浏览器填报 勾选「同时提交到财务系统」后自动运行
实时日志 处理进度通过 SSE 实时推送
下载 CSV 处理后下载发票汇总表
配置上传 可上传 config.json 自动填充表单
手机扫码上传 支付截图区域显示二维码,手机端扫码后可拍照/选图上传PC 端实时同步接收

Web 模式下浏览器以无头模式运行,不会弹出窗口。 若未上传 PDF 附件,浏览器填报阶段将自动跳过附件上传步骤。

注意事项

  • 第三步会打开浏览器窗口,请勿关闭或切换标签页
  • 首次运行可能需要手动处理 SSO 登录(如已保存会话则跳过)
  • 调试截图保存在 images/ 目录,出错时可查看
  • invoice_summary.csv 中空白的字段会在 OCR 步骤自动回填,不会覆盖已有数据
  • 提交按钮默认未启用,确认数据无误后可在 app/bot.py 中取消注释 bot.submit()