Skip to content

Latest commit

 

History

History
658 lines (528 loc) · 23.9 KB

File metadata and controls

658 lines (528 loc) · 23.9 KB

开发进展

本文档记录项目的开发状态、已知问题和未来规划。


📊 当前状态

版本: v1.5.0 更新日期: 2026-02-10 状态: ✅ 批量提取优化完成,Excel导出功能完善,文档结构精简


✅ 已完成功能

v1.5.0 (2026-02-10)

注释Excel导出功能(新增)

  • 创建 tools/export_notes_to_excel.py

    • 支持将批量提取的注释数据导出为格式化Excel文件
    • Sheet 1:目录(一级标题概览,包含页码、子项数、表格数)
    • Sheet 2-N:内容工作表(每个一级标题独立sheet)
    • 完整格式化:颜色方案、字体样式、边框、对齐
    • 用户友好:冻结窗格、自动筛选、斑马纹
  • 层级结构显示

    • 自动识别二级标题(基于页码和位置)
    • 在内容sheet中以不同颜色区分层级
    • 父子关系正确显示
  • 表格智能分配修复

    • 实现基于位置的表格分配算法
    • 修复表格数据混合问题(如货币资金包含交易性金融资产表格)
    • 修复二级标题缺失表格问题(应收票据子项)
    • 位置感知:使用pdfplumber bbox坐标精确定位
  • 完整测试验证

    • 福耀玻璃10页测试:22个注释,11个表格,全部正确分配
    • 福耀玻璃完整76页提取:217个注释(129个一级 + 88个二级),83个表格
    • 耗时:42.4分钟(41.2分钟提取 + 74秒导出)
    • Excel文件:168KB,130个工作表

文档精简(重要更新)

  • 保留核心文档(仅4个)

    • SETUP.md:环境配置
    • FEATURES.md:核心功能(整合批量提取和Excel导出指南)
    • ARCHITECTURE.md:系统架构
    • DEVELOPMENT.md:开发进度(整合性能报告)
  • 删除冗余文档(7个)

    • full_extraction_guide.md → 整合到FEATURES.md
    • batch_extraction_report.md → 整合到DEVELOPMENT.md
    • notes_excel_export_guide.md → 整合到FEATURES.md
    • BATCH_EXTRACTION_SUMMARY.md → 整合到DEVELOPMENT.md
    • DELIVERABLES.md、QUICK_REFERENCE.md、CHANGELOG.md → 删除
  • 测试文件清理

    • 保留7个核心测试
    • 移动19个历史测试到archive/
    • 删除8个一次性调试文件

v1.4.0 (2026-02-06)

批量提取优化(重大更新)

  • 新增 BatchNotesExtractor

    • 批量处理多页文档,性能提升2.2倍
    • LLM调用减少80%,大幅降低API成本
    • 支持可配置批次大小(默认5页/批次)
    • 完整提取标题、文本和表格内容
  • 性能测试结果

    • 处理速度:60秒/页 → 27.6秒/页(2.2x提升
    • LLM调用(10页):10次 → 2次(5x减少
    • API成本:节省80%
    • 成功率:100%
  • 创建 scripts/extract_full_notes.py

    • 命令行工具,开箱即用
    • 支持自定义输出路径和批次大小
    • 自动分批处理和结果合并
    • 错误处理和日志记录
  • 测试验证

    • 5页批次:100%成功率,275.58秒(10页)
    • 10页批次:超时失败(验证批次大小上限)
    • 推荐配置:5页/批次(性能和稳定性最佳平衡)

附注列数据提取增强(v1.3.1)

  • 改进内容提取逻辑

    • 提取表格时同时保存位置信息(bbox坐标)
    • 实现智能表格分配算法
    • 基于Y坐标判断表格归属
  • 层级结构识别

    • 区分一级标题和二级标题
    • 基于位置判断父子关系
    • 二级标题优先获得表格数据

v1.3.0 (2026-02-06)

导出功能增强(重大更新)

  • 新增综合导出工具

    • 创建 tools/export_all_statements.py:一次性导出三张报表
    • 支持5家公司批量处理(福耀玻璃、海尔智家、海天味业、金山办公、深信服)
    • 每个公司生成一个Excel文件,包含3个工作表(资产负债表、利润表、现金流量表)
    • 文件命名:{公司名}_三表合一_{时间戳}.xlsx
  • 财务科目标准化

    • 创建 src/parsers/statement_labels.py:140+个财务科目中英文映射
    • 资产负债表:70+科目(货币资金、应收账款、固定资产等)
    • 利润表:30+科目(营业收入、营业成本、净利润等)
    • 现金流量表:40+科目(销售商品收到的现金、经营活动现金流量净额等)
    • 导出Excel使用标准中文财务科目名称,符合会计准则
  • Bug修复

    • 修复深信服"所有者权益合计"无法识别的问题
    • 优化正则表达式:从 r'所有者权益(或股东权益)?\s*合\s*计' 改为 r'^所有者权益.*?合\s*计$'
    • 支持更多格式变体("所有者权益合计"、"所有者权益(或股东权益)合计"等)
    • 深信服匹配项目:83项 → 84项

结构识别器集成完成

  • 三个解析器全部集成 StatementStructureIdentifier

    • 资产负债表:100%完成,测试通过
    • 利润表:100%完成,测试通过
    • 现金流量表:100%完成,测试通过
    • 所有测试置信度:100%
    • 代码减少:约410行重复代码
  • 集成效果

    • 自动过滤无关数据(表头前、数据后的母公司报表等)
    • 支持特殊格式(项目名称在第0列或第1列)
    • 统一的表头识别逻辑
    • 高准确率:所有公司置信度100%

v1.2.0-alpha (2026-02-06)

现金流量表解析器实现(重大进展)

  • 新增 CashFlowParser 类

    • 完整的项目模式匹配(经营活动、投资活动、筹资活动)
    • 三层级验证机制:各活动净额、现金净增加额、期末余额
    • 测试通过率:100% (5/5)
    • 福耀玻璃:100%完整性,所有验证通过 ✅
    • 海尔智家:80%完整性,所有验证通过 ✅
    • 海天味业:100%完整性,所有验证通过 ✅
    • 金山办公:60%完整性,三大活动净额全部提取 ✅
  • Bug修复

    • 修复列数不一致导致的数据提取失败(海尔智家)
      • 问题:表头识别阶段的缓存影响数据提取阶段
      • 解决:在动态分析时使用 use_cache=False
    • 修复项目名称中包含空格/换行符导致的匹配失败(海天味业、金山办公)
      • 问题:正则表达式无法匹配包含 \s 的项目名称
      • 解决:在所有正则表达式中添加 \s* 匹配可选空格
  • 测试和工具

    • 新增 test_cash_flow.py:5个公司真实PDF测试
    • 支持三层级验证:净额验证、现金净增加额验证、期末余额验证
    • 验证准确率:所有通过的公司差额均为0.00或在容差范围内
  • ⚠️ 已知问题

    • 深信服:0%完整性(项目名称在第1列而非第0列,需要特殊处理) ✅ 已解决
    • 金山办公:缺少现金净增加额和期末余额(可能在其他页)
  • 📝 下一步工作

    • 处理项目名称在非第0列的情况(深信服) ✅ 已完成
    • 创建 export_cash_flow.py 导出工具 ✅ 已完成(综合导出工具)
    • 优化表头识别逻辑

v1.1.2 (2026-02-05)

利润表解析器实现(重大更新)

  • 新增 IncomeStatementParser 类

    • 完整的项目模式匹配(营业收入、成本、利润、综合收益、每股收益)
    • 三层级验证机制:营业总成本、利润计算、归属验证
    • 测试通过率:100% (4/4)
    • 数据完整性:100%
  • 智能表头识别机制

    • 检查前50行(而不是10行)
    • 基于内容特征的评分系统("年度"关键字+10分)
    • 优先选择位置靠后的表头
    • 解决混合表格(资产负债表+利润表)的识别问题
  • 问题修复

    • 修复正则表达式匹配问题(支持包含额外文字的项目名称)
    • 修复表头识别错误(海尔智家营业总收入缺失)
    • 改进验证逻辑(检测关键项目数据缺失)
  • 测试和工具

    • 新增 test_income_statement.py:4个公司真实PDF测试
    • 新增 export_income_statement.py:批量导出Excel工具
    • 数据准确性验证:净利润 = 母公司净利润 + 少数股东损益(差额0.00)
  • ColumnAnalyzer增强

    • 添加利润表列名关键字("本年度"、"上年度"、"本期金额"等)
    • 支持更灵活的列名识别

v1.0.6 (2026-02-05)

完整性验证修复(重大更新)

  • 修复合计项重复累加问题

    • 从普通项目模式中移除所有合计项(流动资产合计、非流动负债合计等)
    • _match_total_items 方法中单独处理合计项
    • 重构数据结构,为合计项添加独立字段
  • 优化列偏移检测机制

    • 对于数值类型,只向左偏移(-1, -2),避免误取下一个数值列
    • 修复本期值为空时错误提取上期值的问题
    • 金山办公非流动负债合计验证:差额从66,710,317.29修复为0.00
  • 防止母公司报表数据混入

    • 检测"负债和所有者权益总计"作为合并报表结束标志
    • 遇到结束标志后停止解析,避免处理母公司报表数据
    • 解决所有公司所有者权益数据重复累加问题
  • 重构所有者权益数据结构

    • 将普通项目存储在 equity['items']
    • 合计项单独存储:parent_equity_totalequity_total
    • 验证逻辑只累加普通项目,不累加合计项

验证结果

  • 所有公司层级1验证全部通过(5/5)
    • 福耀玻璃:流动资产、非流动资产、流动负债、非流动负债、所有者权益合计 ✓
    • 海尔智家:流动资产、非流动资产、流动负债、非流动负债、所有者权益合计 ✓
    • 海天味业:流动资产、非流动资产、流动负债、非流动负债、所有者权益合计 ✓
    • 金山办公:流动资产、非流动资产、流动负债、非流动负债、所有者权益合计 ✓
  • 所有差额均为0.00,验证准确率100%

工具更新

  • ✅ 更新 export_to_excel.py 支持新的所有者权益数据结构
  • ✅ 更新 test_real_pdf.py 适配新的数据结构

v1.0.5 (2026-02-05)

三层级平衡性验证

  • ✅ 实现细粒度的三层级验证体系
    • 层级1:子项目合计验证(流动/非流动资产、负债、权益)
    • 层级2:大类合计验证(资产总计、负债合计)
    • 层级3:总平衡验证(资产总计 = 负债和所有者权益总计)
  • ✅ 正确处理所有者权益减项(库存股)
    • 海尔智家库存股:35.1亿
    • 海天味业库存股:5.6亿
    • 金山办公库存股:1.0亿
  • ✅ 详细的验证结果输出
    • 每个层级的验证状态
    • 计算值、报表值、差额
    • 减项明细

核心改进

  • ✅ 新增 _validate_subtotal 方法
    • 自动识别和处理减项(减:、减:、减-)
    • 计算差额和容差(0.1%)
    • 返回详细的验证结果
  • ✅ 增强的验证结果结构
    • level1_subtotal_checks: 5个子项目合计验证
    • level2_category_checks: 3个大类合计验证
    • level3_total_check: 总平衡验证
  • ✅ 测试文件更新
    • 更新 test_real_pdf.py 支持三层级结果展示
    • 新增 test_balance_validation.py 专门测试

v1.0.4 (2026-02-05)

P2问题修复

  • ✅ 换行符导致的匹配失败问题已解决
    • 修复项目名称中包含换行符(\n)导致正则表达式匹配失败
    • 关键合计项目(归属于母公司所有者权益合计、负债和所有者权益总计)现在都能正确匹配
    • 匹配率提升:70.0% → 71.5%
    • 新增测试:test_newline_fix.py

核心改进

  • ✅ BalanceSheetParser 优化
    • 在项目名称提取时自动清理换行符和回车符
    • 确保所有重要的合计项目都能被正确识别
    • 提升数据完整性和验证能力

v1.0.3 (2026-02-05)

P1问题修复

  • ✅ 海尔智家数据提取问题已解决
    • 实现智能列偏移检测机制
    • 自动处理合并单元格导致的列偏移
    • 数据提取准确率:70% → 100%
    • 平均准确率提升:92.5% → 100%
  • ✅ 新增调试工具(test_haier_debug.py)

核心改进

  • ✅ ColumnAnalyzer 增强
    • 新增 _extract_with_offset 方法
    • 支持列偏移检测(±3列范围)
    • 类型验证(numeric, note)
  • ✅ BalanceSheetParser 优化
    • 统一使用 ColumnAnalyzer 的智能提取
    • 提升复杂表格格式的处理能力

v1.0.2 (2026-02-05)

P0问题修复

  • ✅ 海天味业数据提取问题已解决
    • LLM成功识别带空格的日期格式("2024 年12月 31日")
    • 数据提取准确率:0% → 100%
    • 自动选择机制工作正常
  • ✅ LLM API连接验证通过
    • 长亭科技API工作正常
    • 响应速度良好,无超时问题
    • 置信度:1.0(非常高)

新增工具

  • ✅ 自动化测试脚本(test_haitian_auto.py)
  • ✅ 调试工具(test_haitian_debug.py, test_haitian_debug2.py)
  • ✅ LLM混合识别Excel导出工具(export_to_excel_with_llm.py)

v1.0.0 (2026-02-05)

核心功能

  • ✅ PDF读取和表格提取
  • ✅ 动态列结构识别
  • ✅ 资产负债表解析
  • ✅ 数据验证和平衡性检查
  • ✅ Excel导出功能

LLM集成(新)

  • ✅ 配置加载器
  • ✅ 通用LLM客户端(支持多种provider)
  • ✅ 结果对比器
  • ✅ 用户选择处理器
  • ✅ 混合列分析器

测试覆盖

  • ✅ 单元测试(7/7通过)
  • ✅ 集成测试(3/3通过)
  • ✅ 真实PDF测试(4/4通过)
  • ✅ LLM集成测试(已验证,工作正常)
  • ✅ 海天味业自动化测试(新增)

⚠️ 已知问题

P0 - 紧急问题

所有P0问题已解决

P1 - 重要问题

所有P1问题已解决

P2 - 优化问题

所有P2问题已解决

4. 未匹配项目较多 (已修复 v1.0.4)

现象

  • 约30%的项目未匹配
  • 包含表头行、非标准项目等
  • 部分重要合计项目因换行符未匹配

根本原因

  • PDF提取时,长项目名称包含换行符(\n)
  • 正则表达式无法匹配包含换行符的文本

修复方案

  • 在项目名称提取时清理换行符:item_name.replace('\n', '').replace('\r', '')
  • 确保所有项目名称都是单行文本

修复效果

  • 匹配率提升:70.0% → 71.5%
  • 关键合计项目识别率:100%
  • 剩余未匹配项目都是合理的(表头、金融行业特有项目、细分项目)

状态: ✅ 已解决


🗺️ 开发路线图

v1.4.0 (计划中)

目标: 完善功能,提升易用性

  • 支持所有者权益变动表提取
  • 优化LLM辅助功能
    • 优化JSON解析逻辑
    • 实现响应缓存
    • 添加批量处理模式
  • 优化性能和内存使用
  • 添加更多公司测试用例

预期完成: 2026-03-01

v2.0.0 (未来)

目标: 完整的财务报表分析系统

  • 支持所有者权益变动表
  • 支持财务报表附注提取
  • Web界面
  • API服务
  • 数据可视化

预期完成: 2026-06-01


📈 性能指标

测试通过率

  • 单元测试: 100% (7/7)
  • 集成测试: 100% (3/3)
  • 资产负债表测试: 100% (5/5)
  • 利润表测试: 100% (4/4)
  • 现金流量表测试: 80% (4/5)
  • 平衡性验证测试: 100% (4/4)
  • 结构识别器测试: 100% (5/5)
  • 批量提取测试: 100% (5页批次)

批量提取性能数据(v1.4.0新增)

性能对比

指标 逐页处理 批量处理(5页) 提升
处理速度 60秒/页 27.6秒/页 2.2x
LLM调用(10页) 10次 2次 5x
LLM调用(50页) 50次 10次 5x
API成本 基准 -80% 节省80%
成功率 100% 稳定

实际测试结果(福耀玻璃年报)

测试范围 批次大小 提取注释数 包含表格 总表格数 耗时 成功率
125-134页(10页) 5页 48个 41个(85.4%) 92个 275.58秒 100%
125-134页(10页) 10页 - - - 360.83秒(超时) 0%
125-200页(76页) 5页 217个 80个(36.9%) 83个 2471秒(41.2分钟) 87.5%

结论: 5页/批次是性能和稳定性的最佳平衡点

成本分析(假设¥0.01/次调用)

文档页数 逐页处理 批量处理 节省
10页 ¥0.10 ¥0.02 80%
50页 ¥0.50 ¥0.10 80%
100页 ¥1.00 ¥0.20 80%

Excel导出性能(v1.5.0新增)

文件 注释数 工作表数 文件大小 导出耗时
福耀玻璃完整版 217个 130个 168KB 74秒
平均性能 10个 ~11个 ~20KB ~5秒

数据提取准确率

资产负债表

公司 准确率 匹配项目 状态
福耀玻璃 100% 75项
金山办公 100% 75项
海天味业 100% 75项 ✅ (v1.0.2修复)
海尔智家 100% 38项 ✅ (v1.0.3修复)
深信服 100% 84项 ✅ (v1.3.0修复)

利润表(v1.1.2新增)

公司 匹配项目数 完整性 准确性 状态
福耀玻璃 53项 100% 差额0.00
海尔智家 43项 100% 差额0.00
海天味业 39项 100% 差额0.00
金山办公 42项 100% 差额0.00

现金流量表(v1.2.0-alpha新增)

公司 完整性 层级2验证 层级3验证 状态
福耀玻璃 100% 3/3通过 2/2通过 ✅ 完美
海尔智家 80% 3/3通过 1/1通过 ✅ 优秀
海天味业 100% 3/3通过 2/2通过 ✅ 完美
金山办公 60% 3/3通过 0/2通过 ⚠️ 良好
深信服 0% - - ❌ 待修复

说明

  • 完整性:关键项目(三大活动净额、现金净增加额、期末余额)的识别率
  • 层级2验证:各活动净额 = 流入小计 - 流出小计
  • 层级3验证:现金净增加额、期末余额验证
  • 所有通过验证的公司差额均为0.00或在1%容差范围内

平均准确率:

  • 资产负债表:100% ✅
  • 利润表:100% ✅
  • 现金流量表:68% ⚠️ (4/5公司完整性≥60%)

平衡性验证准确率(v1.0.6更新)

公司 层级1 层级2 层级3 总体 库存股处理
福耀玻璃 5/5 ✓ 3/3 ✓ ✓ 通过
海尔智家 5/5 ✓ 3/3 ✓ ✓ 通过 ✓ 35.1亿
海天味业 5/5 ✓ 3/3 ✓ ✓ 通过 ✓ 5.6亿
金山办公 5/5 ✓ 3/3 ✓ ✓ 通过 ✓ 1.0亿

说明

  • 层级1:子项目合计验证(流动/非流动资产、负债、权益)
  • 层级2:大类合计验证(资产总计、负债合计)
  • 层级3:总平衡验证(资产总计 = 负债和所有者权益总计)
  • v1.0.6修复:所有公司层级1验证全部通过(5/5),所有差额均为0.00

匹配率

  • 平均匹配率: 70%
  • 这个匹配率是合理的(包含表头行和非标准项目)

🔄 最近更新

2026-02-05 (v1.1.2)

  • 利润表解析器已实现
    • 新增 IncomeStatementParser 类,支持完整的利润表解析
    • 实现三层级验证:营业总成本、利润计算、归属验证
    • 测试通过率100%,数据完整性100%,准确性100%
  • 智能表头识别
    • 基于内容特征的评分机制
    • 解决混合表格识别问题(海尔智家营业总收入缺失)
    • 优先选择包含"年度"关键字的表头
  • 问题修复
    • 修复正则表达式匹配问题(支持包含额外文字的项目名称)
    • 修复表头识别错误(检查前50行而不是10行)
    • 改进验证逻辑(检测关键项目数据缺失)
  • 新增工具
    • test_income_statement.py:利润表测试
    • export_income_statement.py:Excel批量导出
  • ColumnAnalyzer增强
    • 添加利润表列名关键字
    • 支持更灵活的列名识别

2026-02-05 (v1.0.6)

  • 完整性验证100%通过
    • 修复合计项重复累加问题(流动资产合计、非流动负债合计等)
    • 优化列偏移检测机制,只向左偏移,避免误取下一个数值列
    • 防止母公司报表数据混入,检测合并报表结束标志
    • 重构所有者权益数据结构,分离普通项目和合计项
  • 所有公司验证全部通过
    • 福耀玻璃:层级1验证 5/5 ✓
    • 海尔智家:层级1验证 5/5 ✓
    • 海天味业:层级1验证 5/5 ✓
    • 金山办公:层级1验证 5/5 ✓(从4/5修复为5/5)
  • ✅ 更新 export_to_excel.pytest_real_pdf.py 适配新数据结构
  • ✅ 所有差额均为0.00,验证准确率100%

2026-02-05 (v1.0.5)

  • 三层级平衡性验证已实现
    • 实现细粒度的三层级验证体系
    • 层级1:子项目合计验证(5个合计项)
    • 层级2:大类合计验证(3个合计项)
    • 层级3:总平衡验证(1个等式)
  • 正确处理所有者权益减项
    • 自动识别"减:"关键字
    • 库存股等减项从总额中减去
    • 3家公司库存股处理验证通过
  • ✅ 新增 _validate_subtotal 方法
  • ✅ 创建平衡性验证测试(test_balance_validation.py)
  • ✅ 更新测试输出格式,展示三层级结果
  • ✅ 生成详细的验证增强报告

2026-02-05 (v1.0.4)

  • P2问题已解决
    • 修复换行符导致的匹配失败
    • 关键合计项目识别率达到100%
    • 匹配率提升:70.0% → 71.5%
  • ✅ 创建换行符修复测试(test_newline_fix.py)
  • ✅ 更新文档记录修复进度

2026-02-05 (v1.0.3)

  • P1问题全部解决
    • 实现智能列偏移检测机制
    • 海尔智家数据提取成功(准确率70% → 100%)
    • 平均准确率提升:92.5% → 100%
  • ✅ 核心功能增强
    • ColumnAnalyzer 支持列偏移检测
    • 自动处理合并单元格问题
    • 提升复杂表格格式处理能力
  • ✅ 创建海尔智家调试工具和修复报告

2026-02-05 (v1.0.2)

  • P0问题全部解决
    • 验证LLM API连接成功
    • 海天味业数据提取成功(准确率0% → 100%)
    • 平均准确率提升:67.5% → 92.5%
  • ✅ 创建自动化测试和调试工具
  • ✅ 创建LLM混合识别Excel导出工具
  • ✅ 生成包含海天味业数据的Excel文件

2026-02-05 (v1.0.0)

  • ✅ 实现LLM集成功能
    • 配置加载器
    • 通用LLM客户端
    • 结果对比器
    • 用户选择处理器
    • 混合列分析器
  • ✅ 创建完整的配置和文档
  • ✅ 添加LLM集成测试
  • ⚠️ 发现LLM API超时问题

2026-02-04

  • ✅ 实现动态列结构识别
  • ✅ 集成到BalanceSheetParser
  • ✅ 完成真实PDF测试
  • ✅ 创建Excel导出工具
  • ✅ 整理项目文档结构

🎯 未来规划

待完成功能

  1. 所有者权益变动表解析 - 计划中
  2. 增加更多测试用例 - 边界条件、错误处理测试
  3. 完善错误处理和日志 - 更细化的异常处理

优化方向

  1. 性能优化 - 内存使用、并行处理
  2. LLM集成 - 支持更多provider、响应缓存
  3. 测试框架 - 迁移到pytest、mock测试、覆盖率报告
  4. 多报表分析 - 联合分析、财务指标自动计算

📝 技术债务

代码层面

  1. LLM JSON解析 - 需要更健壮的解析逻辑
  2. 错误处理 - 部分异常处理可以更细化
  3. 日志级别 - 某些WARNING可能应该是INFO或DEBUG

测试层面

  1. LLM测试 - 需要mock测试,避免依赖真实API
  2. 边缘情况 - 需要更多极端情况的测试用例
  3. 性能测试 - 缺少性能基准测试
  4. 测试框架 - 建议迁移到pytest框架

文档层面

  1. API文档 - 缺少详细的API文档
  2. 故障排查指南 - 可继续完善
  3. 贡献指南 - 缺少开发者贡献指南

💬 反馈和建议

如果您有任何问题、建议或发现bug,请:

  1. 查看本文档的"已知问题"部分
  2. 查看 功能说明 了解使用方法
  3. 查看 环境配置 检查配置
  4. 提交Issue或联系开发者

当前版本: v1.5.0 最后更新: 2026-02-10