开发电子发票查重防重复报销编程检测系统,批量录入发票数据,算法自动比对重复票据标记栏截。
「电子发票查重防重复报销检测系统」
的设计与实现方案,适合用于
✅ 智能会计课程 / Python 财务实战 / 企业内控数字化案例。
一、实际应用场景描述
在企业日常报销中,电子发票(PDF / OFD / 图片)广泛存在,常见问题包括:
- 同一张电子发票
- 多次打印
- 多次提交报销
- 不同员工
- 报销同一张发票
- 历史已报销发票
- 被再次上传
👉 目标:
构建一个 电子发票查重检测系统,
支持批量录入 + 自动比对 + 重复票据标记拦截。
二、引入痛点(Why build this)
痛点 影响
电子发票易复制 重复报销高发
人工肉眼比对 效率低、易漏判
无历史发票库 无法跨期查重
缺乏拦截机制 事后才发现违规
审计风险大 内控薄弱
✅ 本项目解决的问题:
“让系统自动识别‘这张发票是否已经报销过’”
三、核心逻辑讲解(技术架构)
1️⃣ 总体流程
批量发票数据录入
↓
提取唯一标识(发票代码 + 号码)
↓
与历史发票库比对
↓
判断是否重复
↓
标记 + 拦截建议
2️⃣ 核心查重算法
(1)唯一键设计(关键)
invoice_key = 发票代码 + 发票号码 + 开票日期
(2)查重策略
- 精确匹配(100% 相同)
- 可扩展为:
- 相似度匹配(OCR + NLP)
- 图像指纹(感知哈希)
(3)查重判定
if invoice_key in history_set:
status = "REPEAT"
四、代码模块化实现(Python)
📁 项目结构
invoice_dedup/
│
├── main.py # 程序入口
├── config.py # 系统配置
├── loader.py # 发票数据加载
├── deduper.py # 查重核心算法
├── reporter.py # 查重报告
├── data/
│ ├── new_invoices.csv # 待查重发票
│ └── history_invoices.csv# 历史已报销发票
└── README.md
1️⃣ config.py(系统配置)
# config.py
INVOICE_KEY_FIELDS = [
"invoice_code",
"invoice_number",
"invoice_date"
]
2️⃣ loader.py(数据加载)
# loader.py
import pandas as pd
def load_invoices(path):
try:
df = pd.read_csv(path)
return df
except Exception as e:
raise RuntimeError(f"发票数据加载失败: {e}")
3️⃣ deduper.py(查重核心)
# deduper.py
from config import INVOICE_KEY_FIELDS
def build_invoice_key(df):
"""
构建发票唯一标识
"""
df["invoice_key"] = df[INVOICE_KEY_FIELDS].astype(str).agg("_".join, axis=1)
return df
def detect_duplicate(new_df, history_df):
"""
查重主逻辑
"""
history_keys = set(history_df["invoice_key"])
new_df["is_duplicate"] = new_df["invoice_key"].isin(history_keys)
return new_df
4️⃣ reporter.py(查重报告)
# reporter.py
def generate_report(df):
duplicate_df = df[df["is_duplicate"] == True]
duplicate_df["action"] = "拦截报销,已标记重复"
return duplicate_df
5️⃣ main.py(主流程)
# main.py
from loader import load_invoices
from deduper import build_invoice_key, detect_duplicate
from reporter import generate_report
def main():
new_invoices = load_invoices("data/new_invoices.csv")
history_invoices = load_invoices("data/history_invoices.csv")
new_invoices = build_invoice_key(new_invoices)
history_invoices = build_invoice_key(history_invoices)
result = detect_duplicate(new_invoices, history_invoices)
report = generate_report(result)
print(report[["invoice_key", "is_duplicate", "action"]])
if __name__ == "__main__":
main()
五、README.md(使用说明)
# 电子发票查重防重复报销检测系统
## 功能
- 批量录入电子发票数据
- 自动比对历史发票库
- 标记重复票据
- 输出拦截建议
## 使用方法
1. 准备 CSV 文件
csv
invoice_code,invoice_number,invoice_date
2. 运行程序
bash
python main.py
3. 查看查重结果
六、核心知识点卡片(速记版)
模块 核心技术
唯一标识设计 复合主键
查重算法 集合(Set)匹配
数据预处理 Pandas
内控逻辑 拦截策略
工程化 模块化 + 配置驱动
七、总结(技术 + 业务双视角)
✅ 从技术角度
这是一个典型的:
数据去重 + 财务内控规则 + 批处理系统
项目,非常适合展示“Python 在企业风控中的实战价值”。
✅ 从业务角度
解决了企业长期存在的:
“电子发票重复报销难发现、难拦截”
的问题,为财务合规提供自动化防线。
如果你愿意,可以继续:
- ✅ 升级为 OCR 发票识别(PaddleOCR)
- ✅ 增加 数据库版(SQLite / MySQL)
- ✅ 输出 课程答辩 PPT + 演讲脚本
利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!
