# Implementation Plan: Settlement Status Display ## Overview 本实现计划将结算状态显示功能分解为后端API扩展、前端仪表盘更新和导出服务扩展三个主要部分。 ## Tasks - [x] 1. 扩展后端月度统计API - [x] 1.1 修改 `work_record_service.py` 的 `get_monthly_summary()` 方法 - 计算并返回 `settled_earnings` 和 `unsettled_earnings` - 在 `supplier_breakdown` 中增加 `is_settled` 字段 - _Requirements: 1.3, 2.3_ - [ ]* 1.2 编写月度统计结算一致性属性测试 - **Property 1: Monthly Settlement Sum Consistency** - **Validates: Requirements 1.3** - [x] 2. 扩展后端年度统计API - [x] 2.1 修改 `work_record_service.py` 的 `get_yearly_summary()` 方法 - 为每个人员计算 `settled_total` 和 `unsettled_total` - 计算 `settled_grand_total` 和 `unsettled_grand_total` - _Requirements: 3.2, 3.3_ - [ ]* 2.2 编写年度统计结算一致性属性测试 - **Property 2: Yearly Person Settlement Consistency** - **Property 3: Yearly Grand Total Settlement Consistency** - **Validates: Requirements 3.2, 3.3** - [x] 3. Checkpoint - 确保后端测试通过 - 确保所有测试通过,如有问题请询问用户 - [x] 4. 更新前端仪表盘月度报告 - [x] 4.1 修改 `Dashboard.jsx` 月度报告统计卡片区域 - 增加"已结算收入"统计卡片(绿色图标) - 增加"未结算收入"统计卡片(橙色图标) - _Requirements: 1.1, 1.2_ - [x] 4.2 修改人员按供应商收入明细表格 - 增加"结算状态"列 - 未结算行使用浅橙色背景 (#fff7e6) - _Requirements: 2.1, 2.2_ - [x] 5. 更新前端仪表盘年度汇总 - [x] 5.1 修改 `Dashboard.jsx` 年度汇总表格 - 增加"已结算"和"未结算"列 - 显示总计行的已结算/未结算金额 - _Requirements: 3.1, 3.3_ - [x] 5.2 调整年度汇总位置到仪表盘底部 - 将年度汇总Card移动到所有其他部分之后 - _Requirements: 4.1_ - [x] 6. Checkpoint - 确保前端功能正常 - 确保仪表盘正确显示结算状态,如有问题请询问用户 - [x] 7. 扩展月度报表导出功能 - [x] 7.1 修改 `export_service.py` 的月度明细表 - 在 `DETAIL_HEADERS` 增加"结算状态"列 - 在 `_create_detail_sheet()` 中输出结算状态 - _Requirements: 5.1, 5.3_ - [x] 7.2 修改 `export_service.py` 的月度汇总表 - 在 `_create_monthly_summary_sheet()` 中增加结算状态列 - 按人员+供应商+结算状态分组汇总 - _Requirements: 5.2, 5.3_ - [x] 8. 扩展年度报表导出功能 - [x] 8.1 修改 `export_service.py` 的年度明细表 - 复用明细表的结算状态列(已在7.1实现) - _Requirements: 6.1, 6.3_ - [x] 8.2 修改 `export_service.py` 的年度汇总表 - 在 `_create_yearly_summary_sheet()` 中增加已结算/未结算列 - _Requirements: 6.2, 6.3_ - [ ]* 8.3 编写导出结算状态映射属性测试 - **Property 4: Export Settlement Status Text Mapping** - **Validates: Requirements 5.3, 6.3** - [x] 9. Final Checkpoint - 确保所有测试通过 - 确保所有测试通过,如有问题请询问用户 ## Notes - 任务标记 `*` 的为可选测试任务,可跳过以加快MVP开发 - 数据库已有 `is_settled` 字段,无需数据库迁移 - 属性测试使用 Hypothesis 库 - 每个任务都引用了具体的需求以便追溯