Files
Auto-Finance/README.md
wandering a72c4ffaab feat: Web 表格编辑、易耗品出库单自动生成与文档完善
- 新增 fill_consumable_doc,根据 CSV 填写 Word 出库单(宋体五号)
- Web 处理完成后自动生成出库单并提供下载
- 前端拆分为 static 资源,支持在线编辑 CSV 与分步提交财务系统
- 补充 API.md、README(含 Mermaid 数据流)及 config.example.json

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-26 14:17:26 +08:00

7.7 KiB
Raw Blame History

财务报销自动化

自动从 PDF 发票提取信息OCR 识别支付记录截图,生成发票汇总表与易耗品出库单,并可选在财务系统中自动填报报销单。

项目结构

├── run.py                      # CLI 入口(发票提取 → OCR → 浏览器填报)
├── config.json                 # 配置文件(登录凭据、默认值、存放地点等)
├── 易耗品、出库单.doc           # 易耗品出库单 Word 模板Web/CLI 填写用)
├── app/
│   ├── config.py               # 配置加载
│   ├── extractor.py            # PDF 发票信息提取
│   ├── ocr.py                  # OCR 刷卡信息识别
│   ├── bot.py                  # 浏览器自动填报
│   ├── pipeline.py             # CLI 流程编排
│   └── fill_consumable_doc.py  # 将 CSV 填入易耗品出库单Word COM
├── web/
│   ├── app.py                  # Web 服务入口
│   ├── templates/
│   │   ├── index.html          # PC 端主页
│   │   └── mobile_upload.html  # 移动端扫码上传
│   ├── static/                 # 前端 CSS / JS
│   └── uploads/                # 按会话隔离的上传与产物目录
├── *.pdf                       # 发票 PDFCLI 模式,放在项目根目录)
├── *.png / *.jpg               # 与 PDF 配对的支付截图
├── invoice_summary.csv         # 发票汇总表CLI 产物)
└── images/                     # 浏览器调试截图

数据流

flowchart TB
    PDF[PDF 发票] --> Extract[extractor 提取]
    Extract --> List[发票列表]
    Img[支付截图] --> OCR[OCR 识别]
    List --> OCR
    OCR --> CSV[(invoice_summary.csv)]
    CSV --> Fill[fill_consumable_doc]
    Fill --> Doc[易耗品、出库单.doc]
    CSV --> Bot[bot 浏览器自动化]
    Bot --> Submit[财务系统填报<br/>可选]

环境要求

  • Python 3.10+
  • Windows易耗品出库单填写依赖 Microsoft Word + COM仅 Windows 可用)
  • 主要依赖见下方安装步骤

快速开始

1. 安装依赖

OCR 相关依赖建议在已有 PaddleOCR 的环境中安装(如 MinerU 虚拟环境)。

pip install pdfplumber==0.11.9 paddleocr==2.8.1 playwright==1.60.0 flask==3.0.3 pywin32
playwright install chromium
依赖 用途
pdfplumber PDF 发票文本提取
paddleocr 支付截图 OCR
playwright 财务系统浏览器自动化
flask Web 服务
pywin32 填写 Word 出库单(fill_consumable_doc

2. 准备数据CLI 模式)

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

  1. 优先文件名匹配 — PDF 与截图同名(如 发票.pdf发票.png
  2. 金额近邻匹配 — 文件名不同时,按价税合计与刷卡金额就近配对

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

3. 配置

编辑 config.json

{
    "username": "你的工号",
    "password": "你的密码",
    "default_name": "默认报销人姓名",
    "default_card_no": "默认公务卡号",
    "default_person_id": "默认人员编号",
    "consumable_storage": "躬行楼 C205"
}
字段 说明
username / password 信息门户登录凭据
default_name 默认报销人姓名
default_card_no 默认公务卡号
default_person_id 默认人员编号(工号)
consumable_storage 出库单「存放地点」列默认值
sso_login_url 系统 URL一般无需修改

4. 运行CLI

# 全流程(发票提取 → 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 密码

5. 填写易耗品出库单CLI

需已生成 invoice_summary.csv,且本机已安装 Microsoft Word

python -m app.fill_consumable_doc
python -m app.fill_consumable_doc --csv invoice_summary.csv --doc "易耗品、出库单.doc"
python -m app.fill_consumable_doc --no-backup   # 不生成 .doc.bak 备份

填写规则概要:

  • 规格型号 解析品名、规格、单位、数量、单价;价税合计 写入金额列
  • 单价/金额保留两位小数;表格内统一为 宋体五号10.5 磅)
  • 存放地点取自 consumable_storage;购货人/领用人签字、备注保持空白

执行步骤说明

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

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

CSV 字段说明

列名 说明
序号 行号
发票号码 电子发票号码
开票日期 开票日期
项目名称 / 规格型号 货物或应税劳务信息
价税合计 发票含税金额
销售方名称 销方名称
人员姓名 / 刷卡日期 / 公务卡号 / 刷卡金额 OCR 自支付截图回填
备注 / 工号 可手工或 Web 端编辑补充

Web 服务

提供浏览器界面:上传文件 → 自动处理 → 在线编辑 → 下载产物 → 可选提交财务系统。

python web/app.py

访问 http://localhost:5000

推荐使用流程

  1. 上传 PDF + 支付截图(或上传已有 CSV
  2. 填写配置(账号、密码、姓名、公务卡号、存放地点等),可上传 config.json 一键填充
  3. 点击 开始处理 — 完成发票提取、OCR、生成 CSV并自动填写 易耗品、出库单.doc
  4. 下载文件 区域下载 CSV / Markdown / 出库单 Word
  5. 在表格中核对、修改发票数据(提交财务系统前会自动保存)
  6. 确认无误后点击 提交到财务系统

处理模式

模式 入口 说明
PDF 模式 上传 PDF + 截图 提取发票 → OCR → 生成 CSV + 出库单
CSV 快捷模式 仅上传 CSV 跳过提取与 OCR直接生成出库单并进入编辑/提交

功能一览

功能 说明
发票提取 + OCR 上传 PDF 后自动完成
易耗品出库单 处理完成后自动生成 Word可下载
表格在线编辑 处理完成后可修改 CSV 各字段;保存后重新生成出库单
财务系统填报 单独按钮触发,处理阶段不会自动提交
实时日志 SSE 推送处理进度
配置上传 支持上传 config.json 填充表单
手机扫码上传 二维码打开移动端页面拍照上传支付截图PC 端轮询同步

Web 端浏览器填报以无头模式运行。未上传 PDF 时,填报阶段会跳过附件上传。
出库单生成需要 Windows + Word + pywin32若失败页面会显示具体原因CSV 等其它产物仍可正常使用。

接口说明见 API.md

注意事项

  • 浏览器填报时会打开或使用 Chromium请勿手动干扰自动化流程
  • 首次运行可能需要处理 SSO 登录(已保存会话时可跳过)
  • 调试截图保存在 images/ 目录
  • OCR 不会覆盖 CSV 中已有非空字段
  • 项目根目录需保留 易耗品、出库单.doc 模板Web 每次从模板复制到会话目录再填写,不修改原模板
  • config.json 含敏感信息,请勿提交到公开仓库