9043886b6f
- src/doc/ 拆分为 src/core/extraction/, matching/, validation/(核心业务逻辑) - src/bot/ 重命名为 src/infra/browser/(浏览器自动化基础设施) - fill_consumable_doc.py → src/infra/documents/consumable.py - 新增 Agent 调度模块:coordinator.py, events.py, session.py,重构 orchestrator.py - 更新 AGENTS.md、README.md 及所有子目录 README
3.7 KiB
3.7 KiB
last_reviewed
| last_reviewed |
|---|
| 2026-06-15 |
src — 主源码目录
包含财务报销自动化系统的全部源码模块。
架构分层
src/
├── agent/ Agent 调度层(协调提取-校验-修正循环)
├── core/ 核心业务层(提取、匹配、校验)
├── infra/ 基础设施层(浏览器、文档、LLM 提示词)
├── web/ Web 界面层(Flask + SSE)
├── pipeline.py CLI 流程编排
├── pipeline_core.py CLI/Web 公共管道逻辑
├── main.py CLI 入口
├── config.py 配置加载
└── exceptions.py 异常定义
模块清单
| 文件/目录 | 说明 |
|---|---|
agent/ |
Agent 调度:校验-修正循环、状态机管理、SSE 事件发射 |
core/ |
核心业务逻辑:信息提取、金额匹配、信息校验 |
infra/ |
基础设施:浏览器自动填报、文档处理、LLM 提示词管理 |
web/ |
Web 界面:Flask 应用、SSE 日志流、可编辑表格、移动端上传、会话隔离 |
pipeline.py |
CLI 流程编排:串联提取 → 类型判断 → 信息提取 → 浏览器填报 |
pipeline_core.py |
CLI/Web 公共管道逻辑:发票类型判断、缓存提取 |
main.py |
CLI 入口:--step 分步执行、-u/-p 覆盖凭据 |
config.py |
配置加载:config.json + 环境变量 |
exceptions.py |
异常层次定义 |
数据流
graph TD
A[CLI/Web 入口] --> B["pipeline.py (编排)"]
B --> C["core/extraction/extractor.py (统一提取入口)"]
C --> D["infra/documents/pdf.py (PDF 渲染为图片)"]
C --> E["core/extraction/llm_extractor.py (多模态 LLM 识别)"]
E --> F["发票 invoice_type=train/hotel/general"]
E --> G["支付记录 invoice_type=payment"]
E --> H["出差事前申请单 invoice_type=application"]
C --> I["core/matching/matcher.py (发票与支付记录按金额匹配)"]
I --> J["一对一匹配 发票数 == 刷卡数"]
I --> K["一对多匹配 贪心算法 相对容差 3%"]
C --> L["infra/documents/invoice.py (CSV/JSON 读写)"]
L --> M["payment_records.csv (支付记录级别)"]
L --> N["invoice_summary.csv (发票级别)"]
L --> O["travel_applications.json (出差申请单)"]
B --> R{"判断报销类型"}
R -->|差旅| T["core/extraction/llm_extractor.py (差旅信息提取)"]
R -->|普通| V["core/extraction/llm_extractor.py (普通发票信息提取)"]
T --> W["travel_info.json (差旅信息: 交通/住宿明细、补贴、附件清单)"]
V --> X["normal_info.json (普通发票信息: 报销说明、发票总数、总金额、支付方式、附件清单)"]
W --> P["infra/browser/ (浏览器填报 - 仅接收信息并填报)"]
X --> P
P --> Q["差旅模式: travel_info.json → 填报差旅单 → 上传差旅附件"]
P --> S["普通模式: 基本信息 → 录入明细 → 支付信息 → 上传附件"]
子模块文档
| 目录 | 文档 |
|---|---|
agent/ |
agent/README.md |
core/ |
core/README.md |
infra/ |
infra/README.md |
web/ |
web/README.md |
启动方式
# CLI 模式
uv run python src/main.py --step all
# Web 模式
uv run python src/web/app.py
# 访问: http://localhost:5000
发票类型与路由
系统根据 invoice_type 字段自动分流:
| 发票类型 | 走什么流程 | 是否生成出库单 |
|---|---|---|
train / hotel |
差旅报销 | 否 |
general |
普通报销 | 是(易耗品出库单) |
application |
出差事前申请单 | 否(单独存储为 JSON) |
注意:差旅发票和普通发票不支持混报,混合时会报错。