## ADDED Requirements ### Requirement: 预算实际金额正确查询交易记录 预算统计系统 SHALL 准确查询并汇总数据库中的交易记录,以计算预算的实际金额。 #### Scenario: 查询收入预算的交易记录 - **WHEN** 系统计算收入类型预算的实际金额 - **THEN** 系统 SHALL 查询 `TransactionRecord` 表 - **AND** 查询条件 SHALL 包含: - 交易类型为 `Income` - 交易发生时间在预算的统计时间段内(`OccurredAt >= startDate AND OccurredAt <= endDate`) - 交易分类在预算的 `SelectedCategories` 列表中 - **AND** 系统 SHALL 对符合条件的交易金额求和 #### Scenario: 查询支出预算的交易记录 - **WHEN** 系统计算支出类型预算的实际金额 - **THEN** 系统 SHALL 查询 `TransactionRecord` 表 - **AND** 查询条件 SHALL 包含: - 交易类型为 `Expense` - 交易发生时间在预算的统计时间段内 - 交易分类在预算的 `SelectedCategories` 列表中 - **AND** 系统 SHALL 对符合条件的交易金额求和 ### Requirement: 分类匹配逻辑正确 系统 SHALL 正确匹配交易记录的分类字段与预算的 SelectedCategories。 #### Scenario: 分类字段完全匹配 - **WHEN** 交易记录的 `Classify` 字段为 "家庭年终奖金" - **AND** 预算的 `SelectedCategories` 包含 "家庭年终奖金" - **THEN** 该交易记录 SHALL 被包含在实际金额计算中 #### Scenario: 分类字段不匹配 - **WHEN** 交易记录的 `Classify` 字段为 "工资" - **AND** 预算的 `SelectedCategories` 不包含 "工资" - **THEN** 该交易记录 SHALL NOT 被包含在实际金额计算中 #### Scenario: SelectedCategories 为空字符串 - **WHEN** 预算的 `SelectedCategories` 为空字符串或 null - **THEN** 系统 SHALL 不应用分类过滤 - **AND** 所有符合时间和类型条件的交易记录 SHALL 被包含在计算中 ### Requirement: 日期范围过滤正确 系统 SHALL 使用正确的日期范围边界条件过滤交易记录。 #### Scenario: 交易在统计期间内 - **WHEN** 交易的 `OccurredAt` 为 2026-02-10 - **AND** 统计的 `startDate` 为 2026-02-01,`endDate` 为 2026-02-28 - **THEN** 该交易记录 SHALL 被包含在实际金额计算中 #### Scenario: 交易在统计期间开始日 - **WHEN** 交易的 `OccurredAt` 等于 `startDate` - **THEN** 该交易记录 SHALL 被包含在实际金额计算中(包含边界) #### Scenario: 交易在统计期间结束日 - **WHEN** 交易的 `OccurredAt` 等于 `endDate` - **THEN** 该交易记录 SHALL 被包含在实际金额计算中(包含边界) #### Scenario: 交易在统计期间之前 - **WHEN** 交易的 `OccurredAt` 早于 `startDate` - **THEN** 该交易记录 SHALL NOT 被包含在实际金额计算中 #### Scenario: 交易在统计期间之后 - **WHEN** 交易的 `OccurredAt` 晚于 `endDate` - **THEN** 该交易记录 SHALL NOT 被包含在实际金额计算中 ### Requirement: 年度统计汇总所有月份数据 当计算年度预算统计时,系统 SHALL 正确汇总整年的交易数据。 #### Scenario: 计算年度收入实际金额 - **WHEN** 系统计算某个收入预算的年度实际金额 - **AND** 该预算的 `Type` 为 `Year` - **THEN** 系统 SHALL 汇总从当年 1 月 1 日到 12 月 31 日的所有符合条件的交易记录 - **AND** 如果当前时间在年度中间,系统 SHALL 汇总从 1 月 1 日到当前日期的交易记录 #### Scenario: 月度预算在年度统计中的处理 - **WHEN** 系统计算年度统计 - **AND** 某个月度预算(`Type` 为 `Month`)存在归档数据 - **THEN** 系统 SHALL 包含该月度预算在各个历史月份的归档实际金额 - **AND** 系统 SHALL 累加所有历史月份的归档金额 ### Requirement: 测试覆盖关键场景 系统 SHALL 包含单元测试覆盖预算实际金额计算的关键场景。 #### Scenario: 测试覆盖收入预算计算 - **WHEN** 运行单元测试套件 - **THEN** SHALL 存在测试用例验证收入预算的实际金额计算 - **AND** 测试用例 SHALL 包含多个交易记录,验证汇总逻辑 #### Scenario: 测试覆盖分类匹配 - **WHEN** 运行单元测试套件 - **THEN** SHALL 存在测试用例验证分类匹配逻辑 - **AND** 测试用例 SHALL 包含匹配和不匹配的场景 #### Scenario: 测试覆盖日期范围 - **WHEN** 运行单元测试套件 - **THEN** SHALL 存在测试用例验证日期范围过滤 - **AND** 测试用例 SHALL 包含边界条件(startDate, endDate, 期间内外)