Skip to content

bearsio/fapiao

Repository files navigation

发票批量命名工具

GitHub stars License

一款基于 Electron + React 的桌面应用程序,通过百度 OCR 智能识别发票信息,支持批量重命名文件;内置 AI 发票助手,可按预设整理规则扫描目录、比价复核,并通过 OpenAI 兼容大模型生成风险分析。

✨ 功能特点

  • 🔍 智能识别:自动识别发票的物品名称、金额
  • 📄 多格式支持:支持 PDF、JPG、PNG、OFD 格式
  • 📝 批量处理:一次性处理多个发票文件
  • ✏️ 手动调整:支持手动修改识别结果
  • 🔢 序号自增:输入起始序号,自动递增
  • 🤖 AI 发票助手:右侧可收起侧边栏,输入发票目录即可执行整理与比价流程
  • 💰 价格合理性检查:基于 data/price-book.csv 的本地价格证据判断合理、略高、明显偏高或需人工确认
  • 🧠 LLM 分析:支持 OpenAI-compatible /chat/completions 接口,结合预设 skill、OCR 和价格证据输出复核建议
  • 🛡️ 安全预览:AI 只生成整理建议和报告,不会自动重命名;必须先载入表格并人工确认

📸 界面预览

┌────────────────────────────────────────────────┐
│  发票批量命名工具                    [⚙️ 设置]  │  [AI助手]
├────────────────────────────────────────────────┤
│     ┌──────────────────────────────┐          │
│     │    拖入发票文件或文件夹       │          │
│     │         或 点击选择          │          │
│     └──────────────────────────────┘          │
├────────────────────────────────────────────────┤
│  待处理文件: 5个                               │
├────┬──────┬──────────────┬────────┬────┬──────┤
│ √  │ 序号 │ 原文件名      │ 物品名称│张数│ 金额 │
├────┼──────┼──────────────┼────────┼────┼──────┤
│ ✓  │ 200  │ invoice.pdf  │ 电子模块│ 1  │14.50 │
│ ✓  │ 201  │ receipt.pdf  │ 元器件  │ 1  │10.09 │
│ ✓  │ 202  │ fapiao.pdf   │ LoRa模块│ 1  │369.00│
└────┴──────┴──────────────┴────────┴────┴──────┘
              [取消]  [批量重命名 (3)]

右侧「AI 助手」按钮可展开侧边栏:输入类似 整理 "D:\发票\1月" 并检查价格是否合理,系统会扫描该目录、OCR 识别、匹配本地价格证据,并在侧栏中展示 LLM 分析和整理建议。

📦 命名格式

{序号}_{物品名称}_{张数}_{金额}.{扩展名}

示例:

  • 200_电子模块_1张_14.50元.pdf
  • 201_元器件_1张_10.09元.pdf
  • 202_LoRa模组_1张_369.00元.pdf

🚀 快速开始

方式一:下载安装包(推荐)

  1. 前往 Releases 页面
  2. 下载最新版本的 发票批量命名工具-x.x.x-Setup.exe
  3. 双击安装,按提示完成安装
  4. 从桌面或开始菜单启动

方式二:从源码运行

环境要求:

  • Node.js 18+
  • npm 或 yarn

步骤:

# 克隆项目
git clone https://github.com/bearsio/fapiao.git
cd fapiao

# 安装依赖
npm install

# 启动应用
npm run dev

⚙️ 配置

百度 OCR

本工具使用百度 OCR API 识别发票,需要配置 API 密钥。

获取密钥

  1. 访问 百度智能云
  2. 注册/登录账号
  3. 进入 OCR 控制台
  4. 点击「创建应用」
  5. 勾选「通用文字识别」和「增值税发票识别」
  6. 获取 API KeySecret Key

在应用中配置

  1. 首次启动会自动弹出配置窗口
  2. 填入 API Key 和 Secret Key
  3. 点击保存

💡 免费额度:每月 1000 次调用,个人使用完全够用

LLM 大模型(可选)

AI 助手可以接入任何兼容 OpenAI Chat Completions 的服务:OpenAI、DeepSeek、通义千问兼容接口、OneAPI、Ollama 等。

在「设置」中启用并填写:

字段 示例 说明
Base URL https://api.openai.com/v1 兼容接口地址,系统会调用 /chat/completions
Model gpt-4o-mini / deepseek-chat / qwen-plus 模型名称
API Key sk-... 本地 Ollama 可留空

LLM 只负责总结和复核建议;价格判断仍必须基于 OCR 和价格证据,不允许编造市场价格。

📖 使用教程

基本流程

手动流程:添加文件 → 自动识别 → 调整信息 → 批量重命名
AI 流程:输入目录 → 扫描识别 → 本地价格表比价 → LLM 复核建议 → 载入表格 → 人工确认重命名

详细步骤

1️⃣ 添加文件

点击上传区域,选择发票文件或文件夹:

  • 支持单个文件
  • 支持多个文件
  • 支持整个文件夹

2️⃣ 自动识别

应用会自动调用百度 OCR 识别:

  • 🟡 黄色:识别中
  • 🟢 绿色:识别成功
  • 🔴 红色:识别失败

3️⃣ 调整信息

在表格中可以修改:

  • 序号:输入起始序号,后续自动递增
  • 物品名称:OCR 识别结果
  • 张数:PDF 页数或手动修改
  • 金额:OCR 识别结果

4️⃣ 批量重命名

确认信息后,点击「批量重命名」完成操作。

AI 发票助手流程

  1. 点击右侧「AI 助手」展开侧边栏。
  2. 输入任务,例如:整理 "C:\Users\bear\Desktop\发票\1月" 并检查价格是否合理
  3. 按 Enter 或点击「发送运行」。
  4. 查看:识别物品、发票金额、市场价范围、价格判断、证据来源、建议文件名和 LLM 分析。
  5. 如结果可用,点击「载入到重命名表格」,再在主表格中人工确认并执行批量重命名。

价格证据来自 data/price-book.csv,格式如下:

keyword,normalizedName,source,title,price,unit,url,capturedAt
STM32,STM32模块,内部价格表,STM32模块常用采购价,18.50,,,2026-04-29

如果没有匹配证据,系统会标记为「无价格证据」或「需人工确认」,不会让模型凭空估价。

🛠️ 技术栈

技术 用途
Electron 跨平台桌面框架
React UI 库
TypeScript 类型安全
Zustand 状态管理
Tailwind CSS 样式框架
Vite 构建工具
百度 OCR 发票识别
OpenAI-compatible API LLM 发票复核分析
本地 CSV 价格表 价格证据来源

📁 项目结构

fapiao/
├── electron/              # Electron 主进程
│   ├── main.ts            # 入口文件
│   ├── preload.cjs        # 预加载脚本
│   └── services/          # 服务层
│       ├── ocrService.ts  # OCR 识别
│       ├── fileService.ts # 文件操作
│       ├── agentService.ts # AI 发票助手编排
│       ├── llmService.ts  # OpenAI-compatible 大模型调用
│       ├── priceService.ts # 本地价格证据比价
│       └── configService.ts # 配置管理
├── src/                   # React 前端
│   ├── components/        # UI 组件
│   ├── stores/            # 状态管理
│   ├── utils/             # 工具函数
│   └── App.tsx            # 主应用
├── skills/                # AI 助手默认整理 skill
├── data/                  # 本地价格表
├── docs/                  # 文档
├── package.json
└── vite.config.ts

🔨 开发指南

启动开发服务器

npm run dev

构建生产版本

npm run build

打包成安装程序

npm run dist

❓ 常见问题

Q: 识别结果不准确?

A: 可能原因:

  • 图片不清晰
  • 发票格式不标准
  • 建议使用扫描件而非照片

Q: API Key 配置错误?

A: 检查:

  • Key 是否正确复制(无多余空格)
  • 百度云账号是否正常
  • OCR 应用是否启用

Q: 请求频率限制?

A: 百度免费版限制 2次/秒,应用已自动处理限流和重试。

Q: AI 会自动修改文件吗?

A: 不会。AI 助手只生成整理建议、比价报告和 LLM 分析;必须点击「载入到重命名表格」并人工确认后,才会执行原有批量重命名流程。

Q: 没有价格证据时会怎么判断?

A: 系统会标记为「无价格证据」或「需人工确认」,不会让大模型编造价格。请在 data/price-book.csv 中补充对应物品的价格证据。

📝 更新日志

Unreleased

  • ✅ 新增右侧可收起 AI 发票助手侧边栏
  • ✅ 新增按目录扫描并载入重命名表格的整理流程
  • ✅ 新增本地价格表比价复核
  • ✅ 新增 OpenAI 兼容 LLM 分析配置
  • ✅ 新增预览式 Agent 报告,避免自动修改文件

v1.0.0 (2026-03-19)

  • 🎉 首次发布
  • ✅ 支持 PDF/JPG/PNG/OFD 格式
  • ✅ 百度 OCR 智能识别
  • ✅ 批量重命名
  • ✅ 序号自动递增
  • ✅ 可编辑识别结果

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📄 许可证

MIT License

💬 联系方式

如有问题或建议,请通过 GitHub Issues 反馈。


如果这个项目对你有帮助,请给个 ⭐ Star 支持一下!

About

发票助手带有百度ocr自动修改发票名和金额、搭建发票比价agent进行本地比价

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors