Requirements Document
Introduction
本功能为工作统计系统增加供应商管理模块,并对现有功能进行增强:确保人员和物品名称唯一性、物品关联供应商、工作记录增加结算状态、导出报表增加供应商信息、仪表盘增加供应商相关统计。
Glossary
- System: 工作统计系统
- Supplier: 供应商实体,包含唯一名称
- Person: 人员实体,名称必须唯一
- Item: 物品实体,名称必须唯一,可关联供应商
- WorkRecord: 工作记录实体,包含结算状态
- Settlement_Status: 工作记录的结算状态(已结算/未结算)
- Export_Service: 导出报表服务
- Dashboard: 仪表盘组件
- Migration_Script: 数据库迁移脚本
Requirements
Requirement 1: 人员名称唯一性
User Story: As a 系统管理员, I want 人员名称是唯一的, so that 导入数据时可以通过名称准确匹配人员。
Acceptance Criteria
- WHEN 创建人员时输入的名称已存在, THEN THE System SHALL 拒绝创建并返回错误信息
- WHEN 更新人员名称为已存在的名称, THEN THE System SHALL 拒绝更新并返回错误信息
- THE Person 数据库表 SHALL 对 name 字段添加唯一约束
Requirement 2: 物品名称唯一性
User Story: As a 系统管理员, I want 物品名称是唯一的, so that 导入数据时可以通过名称准确匹配物品。
Acceptance Criteria
- WHEN 创建物品时输入的名称已存在, THEN THE System SHALL 拒绝创建并返回错误信息
- WHEN 更新物品名称为已存在的名称, THEN THE System SHALL 拒绝更新并返回错误信息
- THE Item 数据库表 SHALL 对 name 字段添加唯一约束
Requirement 3: 供应商管理模块
User Story: As a 系统管理员, I want 管理供应商信息, so that 可以追踪物品来源。
Acceptance Criteria
- THE Supplier SHALL 包含以下属性:id(主键)、name(供应商名称,唯一)、created_at、updated_at
- WHEN 创建供应商时输入的名称已存在, THEN THE System SHALL 拒绝创建并返回错误信息
- WHEN 更新供应商名称为已存在的名称, THEN THE System SHALL 拒绝更新并返回错误信息
- THE System SHALL 提供供应商的增删改查 API 接口
- THE System SHALL 提供供应商管理的前端界面,包含列表展示、新增、编辑、删除功能
- THE Supplier 数据库表 SHALL 对 name 字段添加唯一约束
Requirement 4: 物品关联供应商
User Story: As a 系统管理员, I want 为物品设置供应商, so that 可以追踪物品来源。
Acceptance Criteria
- THE Item SHALL 增加 supplier_id 字段,可为空(nullable)
- WHEN 物品未设置供应商, THEN THE System SHALL 将供应商相关字段保持为空字符串
- THE System SHALL 在物品表单中提供供应商选择下拉框
- THE System SHALL 在物品列表中显示供应商名称
Requirement 5: 工作记录结算状态
User Story: As a 系统管理员, I want 管理工作记录的结算状态, so that 可以追踪哪些记录已结算。
Acceptance Criteria
- THE WorkRecord SHALL 增加 is_settled 字段,类型为布尔值,默认为 False
- WHEN 查看工作记录列表, THEN THE System SHALL 显示每条记录的结算状态
- WHEN 用户点击单条记录的结算按钮, THEN THE System SHALL 切换该记录的结算状态
- THE System SHALL 提供批量操作窗口,包含人员选择器、月份选择器和供应商选择器
- WHEN 用户在批量操作窗口选择人员、月份和供应商, THEN THE System SHALL 筛选出符合所有条件(取交集)的工作记录
- THE System 批量操作窗口 SHALL 提供"设为已结算"和"设为未结算"两个操作按钮
- WHEN 用户点击批量操作按钮, THEN THE System SHALL 将筛选出的所有记录统一设置为对应的结算状态
- THE System SHALL 提供按人员、月份和供应商批量更新结算状态的 API 接口
Requirement 6: 导出报表增加供应商
User Story: As a 系统管理员, I want 导出的报表包含供应商信息, so that 可以按供应商分析数据。
Acceptance Criteria
- THE Export_Service 明细表 SHALL 包含以下列:人员、日期、供应商、物品、单价、数量、总价
- THE Export_Service 月度汇总表 SHALL 包含以下列:人员、供应商、总金额
- THE Export_Service 年度汇总表 SHALL 保持现有格式不变
- WHEN 物品未设置供应商, THEN THE Export_Service SHALL 在供应商列显示空字符串
Requirement 7: 仪表盘月度报告增强
User Story: As a 用户, I want 在月度报告中看到供应商相关统计, so that 可以了解各供应商的业绩情况。
Acceptance Criteria
- THE Dashboard 月度报告物品收入明细 SHALL 增加供应商列
- THE Dashboard 月度报告 SHALL 增加人员按供应商的收入明细表格
- WHEN 物品未设置供应商, THEN THE Dashboard SHALL 在供应商列显示空字符串
Requirement 8: 仪表盘工作统计详情增强
User Story: As a 用户, I want 在工作统计详情中看到供应商信息, so that 可以了解当日各供应商的工作情况。
Acceptance Criteria
- THE Dashboard 工作统计详情表格 SHALL 增加供应商列
- WHEN 物品未设置供应商, THEN THE Dashboard SHALL 在供应商列显示空字符串
Requirement 9: 仪表盘系统统计增强
User Story: As a 用户, I want 在仪表盘看到供应商数量统计, so that 可以了解系统中的供应商规模。
Acceptance Criteria
- THE Dashboard 系统统计卡片 SHALL 将"系统人员/物品"修改为"系统人员/物品/供应商"
- THE Dashboard SHALL 显示供应商总数
Requirement 10: 数据库迁移
User Story: As a 开发者, I want 有数据库迁移脚本, so that 可以安全地升级现有数据库。
Acceptance Criteria
- THE Migration_Script SHALL 创建 suppliers 表
- THE Migration_Script SHALL 为 persons 表的 name 字段添加唯一约束
- THE Migration_Script SHALL 为 items 表的 name 字段添加唯一约束
- THE Migration_Script SHALL 为 items 表添加 supplier_id 外键字段
- THE Migration_Script SHALL 为 work_records 表添加 is_settled 字段,默认值为 False
- THE Migration_Script SHALL 兼容 PostgreSQL 和 SQLite 数据库
- WHEN 执行迁移脚本, THEN THE System SHALL 保留现有数据不丢失