# 测试用例自动化状态台账(团队共享 · 本地侧车发布) > 由 `tdd-orchestrator/scripts/test_inventory.py --automation-status` 从本地侧车 `.tdd/test-progress.json` > 派生并发布到 `docs/tdd/`,供测试团队共享。**原始测试用例文件不改动**;`.tdd/` 本地私有、不推送远程。 > **两列含义**: > - **自动化状态**:`已自动化`=已有脚本(Playwright/pytest/@Test);`已关联自动化`=文档用例已 e2e 关联脚本;`文档/场景(待自动化)`=仅 markdown,待补脚本。 > - **执行状态**:来自本地侧车进度回写(未跟踪/已执行/通过/失败/阻塞)。 > **「自动化状态」= 脚本级已自动化 + CI 流水线接入 两维**,见「〇、CI/流水线接入状态」。 ## 〇、CI / 流水线接入状态(仓库级只读检测) > 脚本级自动化(Playwright / pytest / @Test)需接入 CI 才能持续回归;此处如实标注当前接入情况。 - ⚠ 未发现 `.github/workflows/` / `.gitlab-ci.yml` / `Jenkinsfile` → 测试脚本**未接入 CI 流水线**,仅本机/本地可跑。 ## 一、汇总(按来源类型) | 来源类型 | 文件数 | 用例/方法数 | 已自动化 | 待自动化 | 未跟踪 | 已执行 | 通过 | 失败 | 阻塞 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 结构化测试用例(md) | 9 | 729 | 0 | 729 | 729 | 0 | 0 | 0 | 0 | | 用户场景(md) | 9 | 0 | 0 | 9 | 9 | 0 | 0 | 0 | 0 | | Playwright(e2e/integration) | 70 | 410 | 70 | 0 | 60 | 0 | 7 | 3 | 0 | | Python(pytest) | 11 | 47 | 11 | 0 | 11 | 0 | 0 | 0 | 0 | | Java后端测试 | 205 | 1545 | 205 | 0 | 188 | 0 | 15 | 2 | 0 | | **合计** | — | **2731** | **286** | **738** | 997 | 0 | 22 | 5 | 0 | ## 二、结构化测试用例自动化状态(`tests/test-cases/*.md`) | 锚点(TC) | 模块 | 角色 | 优先级 | 自动化状态 | 执行状态 | 备注(关联设计/e2e) | | --- | --- | --- | --- | --- | --- | --- | | `tests/test-cases/admin.md#TC-A-01` | 认证 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:登录进入 Dashboard;错误密码不签发 token|e2e:AdminAuthController | | `tests/test-cases/admin.md#TC-A-02` | 统计 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:显示任务总量/完成率,与库内一致|e2e:StatsController | | `tests/test-cases/admin.md#TC-A-03` | 方案管理 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:列出全部方案(含 source/进度/审核时间);可筛状态|e2e:方案管理(全量) | | `tests/test-cases/admin.md#TC-A-04` | 方案激活 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:生成任务成功,提示成功|e2e:方案激活 | | `tests/test-cases/admin.md#TC-A-05` | 报告解析 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:类型列表返回≥1 条(含 gut_flora)|e2e:AdminReportParserController | | `tests/test-cases/admin.md#TC-A-06` | 报告解析 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:保存成功列表可见;重复 typeId 被拒绝|e2e:报告类型注册 | | `tests/test-cases/admin.md#TC-A-07` | 报告解析 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:聚类列表可见;可自学习生成类型|e2e:未知聚类自学习 | | `tests/test-cases/admin.md#TC-A-08` | 文章 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:创建 1s 内返回成功(无超时);审核通过 C 端可见;长文稳定|e2e:文章发布-审核 | | `tests/test-cases/admin.md#TC-A-09` | 文章·去重 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:第二次被拦截(标题已存在)|e2e:文章标题去重 | | `tests/test-cases/admin.md#TC-A-10` | 关系类型 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:操作成功;家长端关系选择器同步生效|e2e:关系类型 CRUD | | `tests/test-cases/admin.md#TC-A-11` | 勋章 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:200 成功,badgeId 自动生成,列表可见|e2e:勋章管理;黑盒回归 | | `tests/test-cases/admin.md#TC-A-12` | 供应商 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:200 成功,列表 name=昵称;同手机号重复被拒/可控覆盖|e2e:供应商管理;黑盒回归 | | `tests/test-cases/admin.md#TC-A-13` | 活动 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:状态流转正确;已发布可撤回;全流程无 500|e2e:活动审核撤回;黑盒回归 | | `tests/test-cases/admin.md#TC-A-14` | 知识库 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:200 成功,列表移除,无 500|e2e:知识库管理;黑盒回归 | | `tests/test-cases/admin.md#TC-A-15` | 数据迁移 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:接口返回成功,关键业务表数据量更新;失败回滚+明确错误|e2e:多数据源/SfmsDataSourceConfig | | `tests/test-cases/admin.md#TC-A-16` | 参数校验 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:返回 400 + 具体字段提示(不再裸 500)|e2e:统一 `Result`+全局异常;黑盒回归 | | `tests/test-cases/admin.md#TC-A-17` | /api/admin/report-parser/* | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:标注未知聚类;边界:新类先注册再解析|e2e:/api/admin/report-parser/* | | `tests/test-cases/admin.md#TC-A-18` | 优惠券/活动管理 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:后台配券建活动;边界:时间冲突校验;名额超卖配置保护|e2e:优惠券/活动管理 | | `tests/test-cases/admin.md#TC-A-19` | 内容安全 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:审 UGC/AI;边界:敏感词命中拦截|e2e:内容安全 | | `tests/test-cases/admin.md#TC-A-20` | GDPR 工单 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:处理用户注销/导出;边界:审计留痕;冷静期|e2e:GDPR 工单 | | `tests/test-cases/admin.md#TC-A-21` | 网关/限流 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:接口防护;边界:误杀白名单|e2e:网关/限流 | | `tests/test-cases/admin.md#TC-A-22` | 模型管理 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:模型版本/开关;边界:下线前回退方案|e2e:模型管理 | | `tests/test-cases/admin.md#TC-A-23` | 知识库 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:维护营养知识;边界:同步失败重试|e2e:知识库 | | `tests/test-cases/admin.md#TC-A-01-E` | 认证 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:错误密码不签发 token 且提示次数限制/锁定;过期 token 401 跳登录;弱密码 400 拦截|e2e:AdminAuthController | | `tests/test-cases/admin.md#TC-A-02-E` | 统计 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超时降级提示非500;无数据显示『暂无数据』;时间非法 400|e2e:StatsController | | `tests/test-cases/admin.md#TC-A-03-E` | 方案管理 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超时降级非500;非法筛选 400;仅返回有权家庭数据不串|e2e:方案管理(全量) | | `tests/test-cases/admin.md#TC-A-04-E` | 方案激活 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非 reviewed 激活拦截;超时回滚不残半任务;并发幂等仅生成 1 次任务|e2e:方案激活 | | `tests/test-cases/admin.md#TC-A-05-E` | 报告解析 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超时降级非500;重复 typeId 400 拒绝;路径非法 400|e2e:AdminReportParserController | | `tests/test-cases/admin.md#TC-A-06-E` | 报告解析 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:重复 typeId 拒绝;必填缺失 400;threshold 非法 400|e2e:报告类型注册 | | `tests/test-cases/admin.md#TC-A-07-E` | 报告解析 | 运营 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:超时降级非500;重名类型生成被拒/提示已存在|e2e:未知聚类自学习 | | `tests/test-cases/admin.md#TC-A-08-E` | 文章 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:同标题 400『标题已存在』;长文提交超时重试不丢稿;注入 400 或转义|e2e:文章发布-审核 | | `tests/test-cases/admin.md#TC-A-09-E` | 文章·去重 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:重复创建被拦截提示标题已存在;空/超长 400|e2e:文章标题去重 | | `tests/test-cases/admin.md#TC-A-10-E` | 关系类型 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:重名拒绝;停用被引用类型提示先解绑;注入 400/转义;家长端选择器同步生效仍正确|e2e:关系类型 CRUD | | `tests/test-cases/admin.md#TC-A-11-E` | 勋章 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:重复 400/幂等;非法门槛 400;并发创建各自独立不串|e2e:勋章管理;黑盒回归 | | `tests/test-cases/admin.md#TC-A-12-E` | 供应商 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:同手机号拒绝/可控覆盖;非法格式 400;必填缺失 400;列表 name=昵称正确|e2e:供应商管理;黑盒回归 | | `tests/test-cases/admin.md#TC-A-13-E` | 活动 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:已发布再提交审核守卫拦截;非本人撤回 403;时间冲突 400;撤回退回草稿|e2e:活动审核撤回;黑盒回归 | | `tests/test-cases/admin.md#TC-A-14-E` | 知识库 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:被引用删除提示先解绑;不存在 404;并发删除幂等|e2e:知识库管理;黑盒回归 | | `tests/test-cases/admin.md#TC-A-15-E` | 数据迁移 | 运营 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:中断回滚+明确错误非500;锁等待超时提示;重复执行幂等/提示已迁移|e2e:多数据源/SfmsDataSourceConfig | | `tests/test-cases/admin.md#TC-A-16-E` | 参数校验 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:空 body 400 含具体字段提示;类型错配 400;超长 400;不再裸 500|e2e:统一 `Result`+全局异常;黑盒回归 | | `tests/test-cases/admin.md#TC-A-17-E` | /api/admin/report-parser/* | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:重名类目拒绝;未注册路径 400;先注册再解析|e2e:/api/admin/report-parser/* | | `tests/test-cases/admin.md#TC-A-18-E` | 优惠券/活动管理 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:时间冲突 400;名额超卖配置保护生效;重复提交幂等|e2e:优惠券/活动管理 | | `tests/test-cases/admin.md#TC-A-19-E` | 内容安全 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超时降级非500;命中敏感词强制拦截不放行|e2e:内容安全 | | `tests/test-cases/admin.md#TC-A-20-E` | GDPR 工单 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:并发安全:注销与导出按序执行不冲突;越权工单 403|e2e:GDPR 工单 | | `tests/test-cases/admin.md#TC-A-21-E` | 网关/限流 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:白名单不被限流;非法阈值 400;规则生效可控|e2e:网关/限流 | | `tests/test-cases/admin.md#TC-A-22-E` | 模型管理 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:无回退方案拦截下线;非法版本 400;上下线版控正确|e2e:模型管理 | | `tests/test-cases/admin.md#TC-A-23-E` | 知识库 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:同步失败自动重试非500;并发 CRUD 乐观锁不互相覆盖|e2e:知识库 | | `tests/test-cases/admin.md#TC-A-01-P` | 认证 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问管理端接口统一 401/403,不泄露后台数据|e2e:AdminAuthController | | `tests/test-cases/admin.md#TC-A-02-P` | 统计 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问管理端接口统一 401/403,不泄露后台数据|e2e:StatsController | | `tests/test-cases/admin.md#TC-A-03-P` | 方案管理 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问管理端接口统一 401/403,不泄露后台数据|e2e:方案管理(全量) | | `tests/test-cases/admin.md#TC-A-04-P` | 方案激活 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问管理端接口统一 401/403,不泄露后台数据|e2e:方案激活 | | `tests/test-cases/admin.md#TC-A-05-P` | 报告解析 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问管理端接口统一 401/403,不泄露后台数据|e2e:AdminReportParserController | | `tests/test-cases/admin.md#TC-A-06-P` | 报告解析 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问管理端接口统一 401/403,不泄露后台数据|e2e:报告类型注册 | | `tests/test-cases/admin.md#TC-A-07-P` | 报告解析 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问管理端接口统一 401/403,不泄露后台数据|e2e:未知聚类自学习 | | `tests/test-cases/admin.md#TC-A-08-P` | 文章 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问管理端接口统一 401/403,不泄露后台数据|e2e:文章发布-审核 | | `tests/test-cases/admin.md#TC-A-09-P` | 文章·去重 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问管理端接口统一 401/403,不泄露后台数据|e2e:文章标题去重 | | `tests/test-cases/admin.md#TC-A-10-P` | 关系类型 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问管理端接口统一 401/403,不泄露后台数据|e2e:关系类型 CRUD | | `tests/test-cases/admin.md#TC-A-11-P` | 勋章 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问管理端接口统一 401/403,不泄露后台数据|e2e:勋章管理;黑盒回归 | | `tests/test-cases/admin.md#TC-A-12-P` | 供应商 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问管理端接口统一 401/403,不泄露后台数据|e2e:供应商管理;黑盒回归 | | `tests/test-cases/admin.md#TC-A-13-P` | 活动 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问管理端接口统一 401/403,不泄露后台数据|e2e:活动审核撤回;黑盒回归 | | `tests/test-cases/admin.md#TC-A-14-P` | 知识库 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问管理端接口统一 401/403,不泄露后台数据|e2e:知识库管理;黑盒回归 | | `tests/test-cases/admin.md#TC-A-15-P` | 数据迁移 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问管理端接口统一 401/403,不泄露后台数据|e2e:多数据源/SfmsDataSourceConfig | | `tests/test-cases/admin.md#TC-A-16-P` | 参数校验 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问管理端接口统一 401/403,不泄露后台数据|e2e:统一 `Result`+全局异常;黑盒回归 | | `tests/test-cases/admin.md#TC-A-17-P` | /api/admin/report-parser/* | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问统一 401/403,不泄露后台数据|e2e:/api/admin/report-parser/* | | `tests/test-cases/admin.md#TC-A-18-P` | 优惠券/活动管理 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问统一 401/403,不泄露后台数据|e2e:优惠券/活动管理 | | `tests/test-cases/admin.md#TC-A-19-P` | 内容安全 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问统一 401/403,不泄露后台数据|e2e:内容安全 | | `tests/test-cases/admin.md#TC-A-20-P` | GDPR 工单 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问统一 401/403,不泄露后台数据|e2e:GDPR 工单 | | `tests/test-cases/admin.md#TC-A-21-P` | 网关/限流 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问统一 401/403,不泄露后台数据|e2e:网关/限流 | | `tests/test-cases/admin.md#TC-A-22-P` | 模型管理 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问统一 401/403,不泄露后台数据|e2e:模型管理 | | `tests/test-cases/admin.md#TC-A-23-P` | 知识库 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 角色访问统一 401/403,不泄露后台数据|e2e:知识库 | | `tests/test-cases/admin.md#TC-A-25` | 维度/权重/上限配置 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:变更生效、后续能量按新配置;存量影响提示|e2e:DimensionConfigController`/`DimensionWeightController | | `tests/test-cases/admin.md#TC-A-26` | 能量/归因权重 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:全局生效;变更写审计;概览/沙盘/天盘影响可观测|e2e:EnergyController`/`AttributionWeights | | `tests/test-cases/admin.md#TC-A-25-E` | 维度/权重/上限配置 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 需确认/拒、不级联破坏存量 2. 400 拦截 3. 乐观锁/版本控制不互相覆盖|e2e:DimensionConfigController | | `tests/test-cases/admin.md#TC-A-26-E` | 能量/归因权重 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 400 拦截 2. 展示兜底并提示、不静默错算|e2e:EnergyController`/`AttributionWeights | | `tests/test-cases/admin.md#TC-A-25-P` | 维度/权重/上限配置 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 操作 403|e2e:DimensionConfigController | | `tests/test-cases/admin.md#TC-A-26-P` | 能量/归因权重 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 改全局 403|e2e:EnergyController | | `tests/test-cases/admin.md#TC-A-N01` | 配置CRUD | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:列表 ≤ 2s;CRUD 即时生效|e2e:配置管理 | | `tests/test-cases/admin.md#TC-A-N02` | 报告解析中台 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:单条 ≤ 30s;失败进未知聚类;监控可见积压|e2e:解析中台 | | `tests/test-cases/admin.md#TC-A-N03` | 登录统计 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:聚合 ≤ 3s;支持分页/缓存;大数据不超时|e2e:统计聚合 | | `tests/test-cases/admin.md#TC-A-N04` | 限流熔断 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:触发限流/熔断返回 429/友好降级;系统不雪崩;恢复后正常|e2e:限流熔断 | | `tests/test-cases/admin.md#TC-A-N05` | 登录统计 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:返回 401/403;后台不可被非管理员进入|e2e:后台鉴权 | | `tests/test-cases/admin.md#TC-A-N06` | 文章审核 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:内容转义/过滤;不执行脚本|e2e:内容安全 | | `tests/test-cases/admin.md#TC-A-N07` | 内容安全 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:禁止内网地址(SSRF 防护);仅白名单外域;超时截断|e2e:SSRF 防护 | | `tests/test-cases/admin.md#TC-A-N08` | 知识库 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:类型校验拒绝;不落盘执行|e2e:上传校验 | | `tests/test-cases/admin.md#TC-A-N09` | 注销导出 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:仅工单授权用户可导出;数据脱敏打包;操作留痕审计|e2e:数据导出合规 | | `tests/test-cases/child.md#TC-C-01` | 权限/双角色 | 孩子 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:进入孩子端首页;**无切换家长入口**;直接拼家长路由被 role 校验拦截|e2e:双角色铁律:孩子端不能切家长 | | `tests/test-cases/child.md#TC-C-02` | 任务 | 孩子 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:状态→待家长审核;完成动作写入记录;重复提交不重复计分|e2e:TaskController | | `tests/test-cases/child.md#TC-C-03` | 小游戏 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:得分按规则计算;积分/能量到账;成绩入榜;中途退出不计分|e2e:pages/games/* | | `tests/test-cases/child.md#TC-C-04` | 心愿 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:心愿进入家长待审批列表;积分不足创建拦截|e2e:WishController | | `tests/test-cases/child.md#TC-C-05` | 心愿 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:兑换成功,积分扣减正确;驳回后不可兑换|e2e:RewardController | | `tests/test-cases/child.md#TC-C-06` | 能量 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:显示个人能量值;有增量且流水可追溯;能量不为负|e2e:EnergyController | | `tests/test-cases/child.md#TC-C-07` | 报告/权限 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:可见报告内容;UI 无编辑/删除入口;直接调删除接口被 role 校验拒绝(403/401)|e2e:报告查看权限隔离 | | `tests/test-cases/child.md#TC-C-08` | 打卡/方案 | 孩子 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:打卡成功,方案 completedDays+1;重复打卡不重复计数(幂等)|e2e:健康打卡/方案进度 | | `tests/test-cases/child.md#TC-C-09` | 勋章 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:显示已获得/未获得勋章及进度;未解锁不显示领取|e2e:RewardController | | `tests/test-cases/child.md#TC-C-10` | 勋章提醒 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:达成→解锁+推送;重复达成不重复发推送|e2e:MedalController | | `tests/test-cases/child.md#TC-C-11` | 成长记录 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:仅展示本人数据;其他成员数据不可见|e2e:GrowthController | | `tests/test-cases/child.md#TC-C-12` | 食谱查看 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:展示早/午/晚;无食谱显示空态不 500|e2e:饮食推荐 | | `tests/test-cases/child.md#TC-C-13` | AI 对话 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:返回适龄回答;敏感/不适龄内容被过滤|e2e:AIChatController | | `tests/test-cases/child.md#TC-C-14` | 任务重做 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:驳回后可重做;重做提交进入待审核|e2e:TaskController | | `tests/test-cases/child.md#TC-C-15` | 消息接收 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:仅见发给自己的消息;越权消息不可见|e2e:消息服务 | | `tests/test-cases/child.md#TC-C-16` | 个人资料 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:敏感字段(如关系)家长代管不可改|e2e:AuthController | | `tests/test-cases/child.md#TC-C-17` | 退出 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:退出清除本地缓存;回登录页|e2e:AuthController | | `tests/test-cases/child.md#TC-C-18` | 设备校验 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:异常设备触发二次验证;通过后放行|e2e:AuthController | | `tests/test-cases/child.md#TC-C-19` | 消息服务 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:收通知;边界:越权消息不可见|e2e:消息服务 | | `tests/test-cases/child.md#TC-C-20` | GrowthController | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:看自己档案;边界:未成年人导出受限,需家长代办|e2e:GrowthController | | `tests/test-cases/child.md#TC-C-21` | 舌诊情绪识别 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:拍照上传;边界:模糊/非照片拒绝;隐私标注|e2e:舌诊情绪识别 | | `tests/test-cases/child.md#TC-C-22` | MallController | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:用积分换;边界:积分不足拦截;重复兑换幂等|e2e:MallController | | `tests/test-cases/child.md#TC-C-23` | 客服 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:提反馈;边界:内容适龄过滤;敏感信息脱敏|e2e:客服 | | `tests/test-cases/child.md#TC-C-01-E` | 权限/双角色 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:缺失/过期 token 统一 401 跳登录;切换/家长路由被 role 校验 403 拦截;孩子端无任何切回家长入口;模拟登录仅测试环境生效|e2e:双角色铁律:孩子端不能切家长 | | `tests/test-cases/child.md#TC-C-02-E` | 任务 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:并发双点幂等仅计 1 次、仅 1 条流水;超期提交被拒;驳回→重做→再提交仅在重做后计 1 次|e2e:TaskController | | `tests/test-cases/child.md#TC-C-03-E` | 小游戏 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:异常分数 400 不计入;断网不计分不卡死;重复上报幂等不重复入榜|e2e:pages/games/* | | `tests/test-cases/child.md#TC-C-04-E` | 心愿 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:余额不足创建拦截;超长/注入 400 校验;重复创建提示已存在不双建|e2e:WishController | | `tests/test-cases/child.md#TC-C-05-E` | 心愿 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:余额不足拦截且不扣负;已驳回提示不可兑换;并发幂等仅扣 1 次|e2e:RewardController | | `tests/test-cases/child.md#TC-C-06-E` | 能量 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超时降级空态提示非 500;权重 0 占比兜底(0%)显示不崩;能量不为负|e2e:EnergyController | | `tests/test-cases/child.md#TC-C-07-E` | 报告/权限 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:删除/编辑被 role 校验 403 拒绝;孩子端 UI 无编辑/删除入口;报告内容不被改动|e2e:报告查看权限隔离 | | `tests/test-cases/child.md#TC-C-08-E` | 打卡/方案 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超时回滚不残半任务、进度不 +1;重复打卡幂等不重复计数;非本人任务 403|e2e:健康打卡/方案进度 | | `tests/test-cases/child.md#TC-C-09-E` | 勋章 | 孩子 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:重复达成不重复发推送/勋章;未达成领取 400/403 拒绝|e2e:RewardController | | `tests/test-cases/child.md#TC-C-10-E` | 勋章提醒 | 孩子 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:重复达成幂等仅 1 次推送;数据缺失降级不推送不 500|e2e:MedalController | | `tests/test-cases/child.md#TC-C-11-E` | 成长记录 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:关联已删项跳过不报错;其他成员数据 403 不可见|e2e:GrowthController | | `tests/test-cases/child.md#TC-C-12-E` | 食谱查看 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超时 Fallback 通用食谱+提示非 500;无食谱空态不 500|e2e:饮食推荐 | | `tests/test-cases/child.md#TC-C-13-E` | AI 对话 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:不适龄/敏感词被过滤返回适龄话术;LangGraph 不可用 Fallback 兜底、多轮连续|e2e:AIChatController | | `tests/test-cases/child.md#TC-C-14-E` | 任务重做 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非驳回态重做入口不可见/拦截;重做提交进入待审核仅计 1 次|e2e:TaskController | | `tests/test-cases/child.md#TC-C-15-E` | 消息接收 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:越权消息 403 不可见;不存在 404;列表分页正常|e2e:消息服务 | | `tests/test-cases/child.md#TC-C-16-E` | 个人资料 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:代管字段 403 不可改;昵称注入/超长 400 校验|e2e:AuthController | | `tests/test-cases/child.md#TC-C-17-E` | 退出 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:旧 token 失效 401;网络中断退出仍清本地缓存、下次需重登|e2e:AuthController | | `tests/test-cases/child.md#TC-C-18-E` | 设备校验 | 孩子 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:异常设备二次验证/拦截;旧设备 token 失效 401|e2e:AuthController | | `tests/test-cases/child.md#TC-C-19-E` | 消息服务 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:不存在 404;越权标记 403 不生效|e2e:消息服务 | | `tests/test-cases/child.md#TC-C-20-E` | GrowthController | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:未成年导出 403 需家长代办;他人档案 403 不可见|e2e:GrowthController | | `tests/test-cases/child.md#TC-C-21-E` | 舌诊情绪识别 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非照片/模糊拒绝提示『请上传清晰舌苔照』;低置信度提示重拍;隐私标注不外露|e2e:舌诊情绪识别 | | `tests/test-cases/child.md#TC-C-22-E` | MallController | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:余额不足拦截不扣负;并发仅 1 次成功;重复兑换幂等仅 1 条|e2e:MallController | | `tests/test-cases/child.md#TC-C-23-E` | 客服 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:敏感信息脱敏存储;附件超限 400『附件不超过 10MB』|e2e:客服 | | `tests/test-cases/child.md#TC-C-01-P` | 权限/双角色 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:双角色铁律:孩子端不能切家长 | | `tests/test-cases/child.md#TC-C-02-P` | 任务 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:TaskController | | `tests/test-cases/child.md#TC-C-03-P` | 小游戏 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:pages/games/* | | `tests/test-cases/child.md#TC-C-04-P` | 心愿 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:WishController | | `tests/test-cases/child.md#TC-C-05-P` | 心愿 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:RewardController | | `tests/test-cases/child.md#TC-C-06-P` | 能量 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:EnergyController | | `tests/test-cases/child.md#TC-C-07-P` | 报告/权限 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:报告查看权限隔离 | | `tests/test-cases/child.md#TC-C-08-P` | 打卡/方案 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:健康打卡/方案进度 | | `tests/test-cases/child.md#TC-C-09-P` | 勋章 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:RewardController | | `tests/test-cases/child.md#TC-C-10-P` | 勋章提醒 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:MedalController | | `tests/test-cases/child.md#TC-C-11-P` | 成长记录 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:GrowthController | | `tests/test-cases/child.md#TC-C-12-P` | 食谱查看 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:饮食推荐 | | `tests/test-cases/child.md#TC-C-13-P` | AI 对话 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:AIChatController | | `tests/test-cases/child.md#TC-C-14-P` | 任务重做 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:TaskController | | `tests/test-cases/child.md#TC-C-15-P` | 消息接收 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:消息服务 | | `tests/test-cases/child.md#TC-C-16-P` | 个人资料 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:AuthController | | `tests/test-cases/child.md#TC-C-17-P` | 退出 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:AuthController | | `tests/test-cases/child.md#TC-C-18-P` | 设备校验 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:AuthController | | `tests/test-cases/child.md#TC-C-19-P` | 消息服务 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:消息服务 | | `tests/test-cases/child.md#TC-C-20-P` | GrowthController | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:GrowthController | | `tests/test-cases/child.md#TC-C-21-P` | 舌诊情绪识别 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:舌诊情绪识别 | | `tests/test-cases/child.md#TC-C-22-P` | MallController | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:MallController | | `tests/test-cases/child.md#TC-C-23-P` | 客服 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:孩子端无编辑/删除/切家长入口;直接调用被 role 校验拒绝(403/401),不越权操作家庭数据|e2e:客服 | | `tests/test-cases/child.md#TC-C-24` | 能量/小游戏·任务 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:对应维度 +amount、sourceType=game/task;B 自身能量页看到增长与流水|e2e:GameRecordService`/`TaskController | | `tests/test-cases/child.md#TC-C-25` | 能量/方案打卡 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:GrowthTaskService 打卡对应维度+;任务进度与能量同步刷新|e2e:GrowthTaskService | | `tests/test-cases/child.md#TC-C-24-E` | 能量/小游戏·任务 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 异常分数拦截不写能量 2. 重复上报幂等不重复加|e2e:GameRecordService | | `tests/test-cases/child.md#TC-C-25-E` | 能量/方案打卡 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 按业务允/拒、断言一致 2. 重复打卡幂等不重复加 3. 并发不重复计分|e2e:GrowthTaskService | | `tests/test-cases/child.md#TC-C-24-P` | 能量/小游戏·任务 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:1. 他人能量 403 2. 孩子端无编辑/扣减入口、直接调被拒|e2e:JwtInterceptor`+role | | `tests/test-cases/child.md#TC-C-25-P` | 能量/方案打卡 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:1. 非本人方案任务 403 2. 他人进度不可见|e2e:GrowthTaskService | | `tests/test-cases/child.md#TC-C-N01` | 任务打卡 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:重复提交幂等;并发不重复计分;响应 ≤ 1s|e2e:TaskController | | `tests/test-cases/child.md#TC-C-N02` | 消息通知 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:列表渲染 ≤ 1.5s;标记已读即时|e2e:消息中心 | | `tests/test-cases/child.md#TC-C-N03` | 孩子端 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:功能一致;无错位;低龄设备流畅|e2e:孩子端 | | `tests/test-cases/child.md#TC-C-N04` | 只读报告 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:图表自适应;无溢出;可读|e2e:报告前端 | | `tests/test-cases/child.md#TC-C-N05` | 心愿 | 孩子 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:服务端校验归属;403/拒绝;孩子不可越权操作他人|e2e:心愿鉴权 | | `tests/test-cases/child.md#TC-C-N06` | 消息通知 | 孩子 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:内容转义渲染;不执行脚本|e2e:消息渲染 | | `tests/test-cases/child.md#TC-C-N07` | 孩子端 | 孩子 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:一律 401/403;**孩子端不可切回家长**铁律生效|e2e:双角色铁律 | | `tests/test-cases/cross-role-e2e.md#TC-X-01` | 规划师 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:T-3 / P-10|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-02` | 规划师 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:T-4|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-03` | 家长 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:P-13|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-04` | 规划师 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:T-6 / T-7|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-05` | 孩子 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:C-7 / C-2|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-06` | 规划师 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:T-9 / P-06|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-07` | 运营 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:A-02|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-08` | 多角色 | P0 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:T-8 / P-09a / C-8|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-09` | 多角色 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:P-44 / T-06 / T-07|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-10` | 多角色 | P2 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:P-25 / T-21|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-11` | 多角色 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:P-65 / T-19 / C-15|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-12` | 多角色 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:P-58 / P-16|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-13` | 跨角色 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:X-13|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-14` | 跨角色 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:X-14|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-15` | 跨角色 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:X-15|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-16` | 跨角色 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:X-16|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-17` | 跨角色 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:X-17|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-18` | 跨角色 | P1 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:X-18|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-01-E` | 规划师 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:T-3 / P-10|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-02-E` | 规划师 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:T-4|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-03-E` | 家长 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:P-13|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-04-E` | 规划师 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:T-6 / T-7|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-05-E` | 孩子 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:C-7 / C-2|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-06-E` | 规划师 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:T-9 / P-06|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-07-E` | 运营 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:A-02|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-08-E` | 多角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:T-8 / P-09a / C-8|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-09-E` | 多角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:P-44 / T-06 / T-07|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-10-E` | 多角色 | P3 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:P-25 / T-21|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-11-E` | 多角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:P-65 / T-19 / C-15|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-12-E` | 多角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:P-58 / P-16|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-13-E` | 跨角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:X-13|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-14-E` | 跨角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:X-14|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-15-E` | 跨角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:X-15|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-16-E` | 跨角色 | P1 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:X-16|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-17-E` | 跨角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:X-17|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-18-E` | 跨角色 | P2 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:X-18|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-01-P` | 规划师 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:T-3 / P-10|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-02-P` | 规划师 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:T-4|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-03-P` | 家长 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:P-13|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-04-P` | 规划师 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:T-6 / T-7|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-05-P` | 孩子 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:C-7 / C-2|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-06-P` | 规划师 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:T-9 / P-06|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-07-P` | 运营 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:A-02|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-08-P` | 多角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:T-8 / P-09a / C-8|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-09-P` | 多角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:P-44 / T-06 / T-07|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-10-P` | 多角色 | P2 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:P-25 / T-21|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-11-P` | 多角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:P-65 / T-19 / C-15|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-12-P` | 多角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:P-58 / P-16|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-13-P` | 跨角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:X-13|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-14-P` | 跨角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:X-14|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-15-P` | 跨角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:X-15|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-16-P` | 跨角色 | P0 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:X-16|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-17-P` | 跨角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:X-17|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-18-P` | 跨角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:X-18|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-19` | 跨角色 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:X-19|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-20` | 跨角色 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:X-20|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-21` | 跨角色 | P0 | 功能 | 文档用例(待自动化) | 未跟踪 | 设计:X-21|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-19-E` | 跨角色 | P1 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:X-19|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-20-E` | 跨角色 | P1 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:X-20|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-21-E` | 跨角色 | P1 | 异常 | 文档用例(待自动化) | 未跟踪 | 设计:X-21|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-19-P` | 跨角色 | P0 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:X-19|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-20-P` | 跨角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:X-20|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-21-P` | 跨角色 | P1 | 权限 | 文档用例(待自动化) | 未跟踪 | 设计:X-21|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-N01` | 跨角色 | P0 | 性能 | 文档用例(待自动化) | 未跟踪 | 设计:X-01|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-N02` | 跨角色 | P0 | 性能 | 文档用例(待自动化) | 未跟踪 | 设计:X-03|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-N03` | 跨角色 | P0 | 性能 | 文档用例(待自动化) | 未跟踪 | 设计:X-15|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-N04` | 跨角色 | P1 | 性能 | 文档用例(待自动化) | 未跟踪 | 设计:X-05|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-N05` | 跨角色 | P0 | 安全 | 文档用例(待自动化) | 未跟踪 | 设计:X-01~X-06|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-N06` | 跨角色 | P0 | 安全 | 文档用例(待自动化) | 未跟踪 | 设计:X-17|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-N07` | 跨角色 | P1 | 兼容 | 文档用例(待自动化) | 未跟踪 | 设计:X-18|e2e:- | | `tests/test-cases/cross-role-e2e.md#TC-X-N08` | 跨角色 | P0 | 安全 | 文档用例(待自动化) | 未跟踪 | 设计:X-01|e2e:- | | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-01` | 预约/权限 | 家长A vs 家长B | P0 | 文档用例(待自动化) | 未跟踪 | 设计:**当前**:返回 success 且 status=3(越权成功)→【缺陷 F1】;期望:403/拒绝|e2e:F1 | | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-02` | 预约/状态机 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:**当前**:status 置 1(非法回退)→【缺陷 F2】;期望:失败|e2e:F2 | | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-03` | 预约/额度 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:返回「额度不足或已过期」;不建预约、不扣能量|e2e:修正口径 | | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-04` | 预约/幂等 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:**当前**:2 条预约 + 20 能量 →【缺陷 F4】;期望:第 2 次拒绝/返回既有|e2e:F4 | | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-05` | 预约/权限 | 非指派用户 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:返回「您不是被指派的测评师」;status 不变|e2e:既有 | | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-06` | 预约/校验 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:返回「assessorId或guideId必须提供一个」|e2e:既有 | | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-07` | 列表/权限 | 非 teacher | P2 | 文档用例(待自动化) | 未跟踪 | 设计:返回「只有成长规划师可以查看此列表」;assessor-list 仅见自身|e2e:F5 | | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-08` | 预约/校验 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:**当前**:无校验入库(F6);期望:400|e2e:F6 | | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-09` | 预约/状态机 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:0→1→2 正确;能量 10+30 发放且流水一致|e2e:状态机 | | `tests/test-cases/deep-dive-assessment-appointment.md#TC-DV-10` | 订单↔额度↔预约 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:额度扣减正确;额度为 0 时 create 失败|e2e:修正口径 | | `tests/test-cases/deep-dive-plan-activation.md#TC-PA-01` | 激活/拆任务 | 规划师 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:status→active;生成 1 引导 + N 模板任务;能量/流水一致|e2e:G1 | | `tests/test-cases/deep-dive-plan-activation.md#TC-PA-02` | 激活/幂等 | 规划师 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:抛「方案状态异常,需要先审核通过」|e2e:G1 | | `tests/test-cases/deep-dive-plan-activation.md#TC-PA-03` | 激活/并发幂等 | 规划师×2 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:任务总数 = 1+ N(不翻倍);若翻倍→【缺陷 G2】|e2e:G2 | | `tests/test-cases/deep-dive-plan-activation.md#TC-PA-04` | 激活/取消 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:旧任务 cancelled 不计入,重新生成 1+N 任务|e2e:G3 | | `tests/test-cases/deep-dive-plan-activation.md#TC-PA-05` | 拆任务/边界 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:仅生成引导任务,无模板任务(文档化)|e2e:G3 | | `tests/test-cases/deep-dive-plan-activation.md#TC-PA-06` | 拆任务/数据 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非当天过期(待确认设计)|e2e:G4 | | `tests/test-cases/guest.md#TC-G-01` | 启动/首页 | 游客 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:显示引流首页,不进入任何业务页;明显展示微信/手机号/邀请登录入口|e2e:JwtInterceptor 拦截 `/api/** | | `tests/test-cases/guest.md#TC-G-02` | 认证 | 游客 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:返回 Result 含 token+用户信息;角色默认 parent;跳转家长首页;首次登录建 User+family_members(memberType=login)|e2e:AuthController`/`API_REFERENCE` 1.1 | | `tests/test-cases/guest.md#TC-G-03` | 认证 | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:验证码正确→登录下发 token;错误→提示失败且**不产生会话**;限流生效 ⚠ **API 兼容保留**:小程序端无入口(登录走 SC-G-02),2026-11-01 口径|e2e:统一 POST/JWT | | `tests/test-cases/guest.md#TC-G-04` | 家庭/邀请 | 游客 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:登录后自动归属对应家庭,成员列表出现该用户;令牌失效→「邀请已失效」|e2e:FamilyInviteController | | `tests/test-cases/guest.md#TC-G-05` | 权限 | 游客 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:业务页→401 跳登录,登录后回跳;商城/文章列表可见(公开);需登录详情被拦截|e2e:JWT;8 公开路径白名单(1.1) | | `tests/test-cases/guest.md#TC-G-06` | 权限 | 游客 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:JwtInterceptor 拦截(8 个公开路径除外);缺 token→401/403,不泄露内部错误堆栈|e2e:JwtInterceptor | | `tests/test-cases/guest.md#TC-G-07` | 测试模式 | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:仅测试环境生效;生产强制真授权;模拟登录不建真实微信绑定|e2e:AGENTS.md 测试模式 | | `tests/test-cases/guest.md#TC-G-08` | 环境切换 | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:环境识别失败回退默认地址;接口地址正确|e2e:config.js | | `tests/test-cases/guest.md#TC-G-09` | 认证 | 游客 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:退出后本地缓存敏感数据清除;再次进入需登录|e2e:AuthController | | `tests/test-cases/guest.md#TC-G-10` | 注册 | 游客 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:引导至注册;已注册账号不重复建档|e2e:AuthController | | `tests/test-cases/guest.md#TC-G-11` | 协议页/AgreementController | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:合规告知;边界:未同意不可进入注册/核心流程|e2e:协议页/AgreementController | | `tests/test-cases/guest.md#TC-G-12` | config.js | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:非微信浏览器打开小程序链接;边界:探测失败给出明确引导|e2e:config.js | | `tests/test-cases/guest.md#TC-G-01-E` | 启动/首页 | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 不白屏、提供"稍后"/手机号登录兜底 2. 超时给重试而非 500;不泄露内部堆栈|e2e:JwtInterceptor 拦截 `/api/** | | `tests/test-cases/guest.md#TC-G-02-E` | 认证 | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 回退手机号登录、停留登录页不报错 2. 返回已有账号不重复建号 3. 超时提示重试、不建脏号|e2e:AuthController`/`API_REFERENCE` 1.1 | | `tests/test-cases/guest.md#TC-G-03-E` | 认证 | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 提示失败且不签发 token 2. 格式校验 400 拦截 3. 限流提示"操作频繁" 4. 绝不产生会话|e2e:统一 POST/JWT | | `tests/test-cases/guest.md#TC-G-04-E` | 家庭/邀请 | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 拒绝并提示"邀请已失效" 2. 按业务规则处理(加入或被拒)、不串家庭|e2e:FamilyInviteController | | `tests/test-cases/guest.md#TC-G-05-E` | 权限 | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 统一 401 跳登录;登录后回跳 2. 重定向登录;仅 8 公开路径放行|e2e:JWT;8 公开路径白名单(1.1) | | `tests/test-cases/guest.md#TC-G-06-E` | 权限 | 游客 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:1. 统一 401/403、不泄露内部错误与结构 2. 公开路径正常返回、不误拦|e2e:JwtInterceptor | | `tests/test-cases/guest.md#TC-G-07-E` | 测试模式 | 游客 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:1. 生产强制真授权、模拟登录被拒 2. 测试模式仅测试环境生效、不污染生产数据|e2e:AGENTS.md 测试模式 | | `tests/test-cases/guest.md#TC-G-08-E` | 环境切换 | 游客 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:1. 回退默认 API 地址、功能可用 2. 不因识别失败崩溃/错连|e2e:config.js | | `tests/test-cases/guest.md#TC-G-09-E` | 认证 | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 退出后接口 401、需重登 2. 本地 token/隐私数据已清除|e2e:AuthController | | `tests/test-cases/guest.md#TC-G-10-E` | 注册 | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 明确"未注册"并引导注册 2. 已注册不重复建档、直接登录|e2e:AuthController | | `tests/test-cases/guest.md#TC-G-11-E` | 协议页 | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 拦截并强制先同意 2. 加载失败给重试、不绕过同意|e2e:协议页/AgreementController | | `tests/test-cases/guest.md#TC-G-12-E` | config.js | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 给出"在微信内打开"明确引导 2. 降级静态页、核心流程可手机号兜底|e2e:config.js | | `tests/test-cases/guest.md#TC-G-01-P` | 启动/首页 | 游客 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:JwtInterceptor 拦截 `/api/** | | `tests/test-cases/guest.md#TC-G-02-P` | 认证 | 游客 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AuthController`/`API_REFERENCE` 1.1 | | `tests/test-cases/guest.md#TC-G-03-P` | 认证 | 游客 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:统一 POST/JWT | | `tests/test-cases/guest.md#TC-G-04-P` | 家庭/邀请 | 游客 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:FamilyInviteController | | `tests/test-cases/guest.md#TC-G-05-P` | 权限 | 游客 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:JWT;8 公开路径白名单(1.1) | | `tests/test-cases/guest.md#TC-G-06-P` | 权限 | 游客 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:JwtInterceptor | | `tests/test-cases/guest.md#TC-G-07-P` | 测试模式 | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AGENTS.md 测试模式 | | `tests/test-cases/guest.md#TC-G-08-P` | 环境切换 | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:config.js | | `tests/test-cases/guest.md#TC-G-09-P` | 认证 | 游客 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AuthController | | `tests/test-cases/guest.md#TC-G-10-P` | 注册 | 游客 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AuthController | | `tests/test-cases/guest.md#TC-G-11-P` | 协议页/AgreementController | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:统一 401/403,不泄露内部错误与数据;8 个公开路径除外|e2e:协议页/AgreementController | | `tests/test-cases/guest.md#TC-G-12-P` | config.js | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:统一 401/403,不泄露内部错误与数据;8 个公开路径除外|e2e:config.js | | `tests/test-cases/guest.md#TC-G-N01` | 落地页 | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:首屏 ≤ 3s;骨架屏生效;CDN 资源命中;无白屏|e2e:落地页/邀请 | | `tests/test-cases/guest.md#TC-G-N02` | 浏览转化 | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:布局一致;微信授权正常;兜底登录可用;无错位|e2e:登录注册(微信授权) | | `tests/test-cases/guest.md#TC-G-N03` | 非微信H5 | 游客 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:功能可用;无微信 SDK 依赖报错;流程闭环|e2e:H5 兜底 | | `tests/test-cases/guest.md#TC-G-N04` | 落地页 | 游客 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:返回 401;不泄露数据与结构|e2e:接口鉴权 | | `tests/test-cases/guest.md#TC-G-N05` | 登录注册 | 游客 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:触发限流/锁定;验证码一次性;防爆破;无撞库成功|e2e:登录限流 | | `tests/test-cases/parent.md#TC-P-01` | 家庭 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:家庭创建成功;生成唯一邀请码+二维码(令牌+落地页);角色变家庭管理员|e2e:FamilyInviteController | | `tests/test-cases/parent.md#TC-P-02` | 家庭/成员 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:C 加入家庭,成员列表出现 C|e2e:FamilyInviteController | | `tests/test-cases/parent.md#TC-P-03` | 成员资料 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:成员卡片正确显示;关系标签可选(RelationshipPicker)|e2e:FamilyMembersController | | `tests/test-cases/parent.md#TC-P-04` | 关系图 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:关系图节点与关系标签同步更新|e2e:关系类型 CRUD/前端选择器 | | `tests/test-cases/parent.md#TC-P-05` | 任务 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:任务出现在 B 列表,状态待执行|e2e:TaskController | | `tests/test-cases/parent.md#TC-P-06` | 任务审核 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:通过→B 积分+N 并生成流水;驳回→退回重做;重复提交不重复发分|e2e:TaskController`/`PointsController | | `tests/test-cases/parent.md#TC-P-07` | 心愿 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:通过→扣积分进入兑换;驳回→心愿失效;积分不足兑换拦截|e2e:WishController`/`RewardController | | `tests/test-cases/parent.md#TC-P-08` | 能量 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:显示家庭健康指数与五维能量分配(总和=100%);流水可追溯;无数据时空态非 500|e2e:EnergyController | | `tests/test-cases/parent.md#TC-P-09` | 测评订单 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:生成测评订单;状态 已支付→待安排→已预约;未支付/未选规划师不进入待安排|e2e:AssessmentAppointmentController | | `tests/test-cases/parent.md#TC-P-10` | 健康报告 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:识别为 gut_flora;三阶段上传→解析预览→确认入库;非募极报告提示「请确认是募极生物肠道菌群报告」|e2e:健康报告上传解析 | | `tests/test-cases/parent.md#TC-P-11` | 报告查看 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:显示菌群健康分/平衡/多样性、菌种明细、疾病风险;七维评分刷新|e2e:报告解析 | | `tests/test-cases/parent.md#TC-P-12` | 饮食推荐 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:按报告生成食材推荐指数,展示可吃/慎吃列表;无报告时无推荐|e2e:饮食推荐系统 | | `tests/test-cases/parent.md#TC-P-13` | AI 方案 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:生成 overview+营养/饮食/运动三板块;可逐板块重生成/确认;未购买会员→提示购买|e2e:AI 统一走 LangGraph;`AiGateway | | `tests/test-cases/parent.md#TC-P-14` | 方案提交 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:进入「已提交(待规划师审核)」或按配置直接发布|e2e:方案状态机 | | `tests/test-cases/parent.md#TC-P-15` | 双角色 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:切换为孩子端界面(数据隔离);切回需密码;**孩子端不能切回家长**|e2e:POST /api/family/member/switch`(替代废弃 switch-mode);双角色铁律 | | `tests/test-cases/parent.md#TC-P-16` | 会员 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:支付成功解锁方案生成等付费功能;未购买点击生成提示购买|e2e:MembershipController`/`ProductOrderController | | `tests/test-cases/parent.md#TC-P-17` | 积分/成长 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:积分流水与孩子成长记录一致;时间格式 yyyy-MM-dd HH:mm:ss;积分与流水总额一致|e2e:PointsController`/`GrowthController | | `tests/test-cases/parent.md#TC-P-18` | AI 对话 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:返回基于知识库回答,可含产品/任务推荐;LangGraph 不可用时 AiGateway Fallback 兜底;多轮连续|e2e:AIChatController`;LangGraph RAG | | `tests/test-cases/parent.md#TC-P-19` | 能量配置 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:显示身/心/智/行/富口径与权重;配置未同步展示兜底说明|e2e:维度配置 | | `tests/test-cases/parent.md#TC-P-20` | 健康报告 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:识别 gut_flora;解析预览→确认入库;非募极报告提示「请确认是募极生物肠道菌群报告」|e2e:报告解析中台/`POST /api/media/upload | | `tests/test-cases/parent.md#TC-P-21` | 报告解析 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:匹配已注册类型;未知类型进未知聚类待运营自学习|e2e:/api/admin/report-parser/types | | `tests/test-cases/parent.md#TC-P-22` | 报告预览 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:预览数据完整;异常数据提示不入库|e2e:解析中台 | | `tests/test-cases/parent.md#TC-P-23` | 报告入库 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:确认前可取消不入库;确认后七维刷新|e2e:解析中台 | | `tests/test-cases/parent.md#TC-P-24` | 报告管理 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:删除有关联方案时提示;对比展示差异|e2e:报告管理 | | `tests/test-cases/parent.md#TC-P-25` | 报告趋势 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:单报告无趋势提示;时间轴正确|e2e:成长/报告 | | `tests/test-cases/parent.md#TC-P-26` | 饮食推荐 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:按菌群生成;无报告无推荐|e2e:饮食推荐系统 | | `tests/test-cases/parent.md#TC-P-27` | 家庭食谱 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:无报告降级通用食谱;忌口/过敏自动排除|e2e:饮食推荐/家庭食谱 | | `tests/test-cases/parent.md#TC-P-28` | 食谱筛选 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:忌口冲突时提示;重算生效|e2e:饮食推荐 | | `tests/test-cases/parent.md#TC-P-29` | 食谱收藏 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:调整不破坏营养目标;收藏持久化|e2e:饮食推荐 | | `tests/test-cases/parent.md#TC-P-30` | 食谱营养 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超标/不足提示|e2e:饮食推荐 | | `tests/test-cases/parent.md#TC-P-31` | 测评类型 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:类目来自后端字典;展示完整 8 类|e2e:DanAssessmentController | | `tests/test-cases/parent.md#TC-P-32` | 测评规划师 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:未绑定规划师提示先绑定|e2e:测评订单 | | `tests/test-cases/parent.md#TC-P-33` | 测评下单 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:套餐下架不可下单;生成待支付订单|e2e:AssessmentOrder | | `tests/test-cases/parent.md#TC-P-34` | 测评支付 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:支付失败回滚不生成额度|e2e:支付/`AssessmentQuota | | `tests/test-cases/parent.md#TC-P-35` | 测评额度 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:额度过期不可用于预约;展示有效期|e2e:AssessmentQuota | | `tests/test-cases/parent.md#TC-P-36` | 测评预约 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:先扣一条额度→落预约;额度不足/过期直接报错不落预约|e2e:AssessmentAppointmentController | | `tests/test-cases/parent.md#TC-P-37` | 预约状态 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:状态准确;状态机守卫|e2e:AssessmentAppointmentController | | `tests/test-cases/parent.md#TC-P-38` | 预约取消 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:非归属取消被拒(CFC-AP 取消越权);取消不退款逻辑|e2e:AssessmentAppointmentController | | `tests/test-cases/parent.md#TC-P-39` | DAN报告 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:结果未录入不展示;量纲标注|e2e:DanAssessmentResultDTO | | `tests/test-cases/parent.md#TC-P-40` | AI方案 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:未购会员提示购买;AI 超时 AiGateway Fallback 不 500|e2e:AIChatController`/`AiGateway | | `tests/test-cases/parent.md#TC-P-41` | 方案迭代 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:重生成不丢其他板块|e2e:AIChatController | | `tests/test-cases/parent.md#TC-P-42` | 方案编辑 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:编辑后状态标记已改|e2e:方案管理 | | `tests/test-cases/parent.md#TC-P-43` | 方案查看 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:空方案不白屏|e2e:方案管理 | | `tests/test-cases/parent.md#TC-P-44` | 方案确认 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:未确认不可激活;确认幂等|e2e:方案状态机 | | `tests/test-cases/parent.md#TC-P-45` | 方案发布 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:需审核配置时走审核流|e2e:方案管理 | | `tests/test-cases/parent.md#TC-P-46` | 方案激活 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:已激活再激活不重复(幂等靠状态机);失败回滚不残半任务|e2e:方案激活任务分解 | | `tests/test-cases/parent.md#TC-P-47` | 方案任务 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:任务增删与方案同步|e2e:GrowthPlanController | | `tests/test-cases/parent.md#TC-P-48` | 方案版本 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:版本不可篡改|e2e:方案管理 | | `tests/test-cases/parent.md#TC-P-49` | AI对话 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:基于知识库回答;LangGraph 不可用 Fallback;多轮连续|e2e:AIChatController | | `tests/test-cases/parent.md#TC-P-50` | 成长记录 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:数据缺失项跳过不报错|e2e:GrowthController | | `tests/test-cases/parent.md#TC-P-51` | 成长里程碑 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:重复标幂等|e2e:GrowthController | | `tests/test-cases/parent.md#TC-P-52` | 商城浏览 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:下架商品不展示|e2e:MallController`/`danshop | | `tests/test-cases/parent.md#TC-P-53` | 商品详情 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:库存为 0 提示|e2e:MallController | | `tests/test-cases/parent.md#TC-P-54` | 商城下单 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:库存不足拦截;重复下单幂等|e2e:MallController | | `tests/test-cases/parent.md#TC-P-55` | 订单支付 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:支付失败回滚|e2e:支付 | | `tests/test-cases/parent.md#TC-P-56` | 订单退款 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:已发货退款规则;重复退款拦截|e2e:订单服务 | | `tests/test-cases/parent.md#TC-P-57` | 优惠券 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:券过期/不满足门槛不可用|e2e:优惠券 | | `tests/test-cases/parent.md#TC-P-58` | 会员购买 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:支付失败回滚;重复购买幂等|e2e:MemberController | | `tests/test-cases/parent.md#TC-P-59` | 会员权益 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:权益随档位变化|e2e:MemberController | | `tests/test-cases/parent.md#TC-P-60` | 会员续费 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:续费叠加计算正确|e2e:MemberController | | `tests/test-cases/parent.md#TC-P-61` | 联系人 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:重复号码去重|e2e:ContactCard`/`contact-detail | | `tests/test-cases/parent.md#TC-P-62` | 联系人导入 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:导入格式错误行跳过并报告|e2e:ContactImport | | `tests/test-cases/parent.md#TC-P-63` | 联系人权限 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:越权查看被拒|e2e:ContactCard | | `tests/test-cases/parent.md#TC-P-64` | 个人资料 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:手机格式校验;保存生效|e2e:AuthController | | `tests/test-cases/parent.md#TC-P-65` | 通知设置 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:关闭后仍保关键安全通知|e2e:消息服务 | | `tests/test-cases/parent.md#TC-P-66` | 隐私设置 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:最小权限保底|e2e:隐私设置 | | `tests/test-cases/parent.md#TC-P-67` | 报告代传/report-proxy | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:无报告原件时由他人代传;边界:代传需授权令牌;越权代传他人孩子被拒;代传报告归属校验|e2e:报告代传/report-proxy | | `tests/test-cases/parent.md#TC-P-68` | 家庭天盘 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:一眼看全家健康/能量;边界:数据缺失降级展示;仅本家庭成员可见|e2e:家庭天盘 | | `tests/test-cases/parent.md#TC-P-69` | 精准营养 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:设定每日营养/热量目标;边界:目标非法(负/超上限)拦截|e2e:精准营养 | | `tests/test-cases/parent.md#TC-P-70` | 舌诊情绪识别 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:上传舌苔照辅助评估;边界:非照片/模糊拒绝;隐私标注不外露|e2e:舌诊情绪识别 | | `tests/test-cases/parent.md#TC-P-71` | AuthController | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:注销账号;边界:有进行中订单/未结清拦截;注销后不可登录|e2e:AuthController | | `tests/test-cases/parent.md#TC-P-72` | 数据导出(GDPR) | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:下载本人数据;边界:敏感字段脱敏;频次限制;越权导出被拒|e2e:数据导出(GDPR) | | `tests/test-cases/parent.md#TC-P-73` | 家庭/成员 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:多孩子家庭切换;边界:仅本家庭孩子可选;当前孩子态隔离|e2e:家庭/成员 | | `tests/test-cases/parent.md#TC-P-74` | 规划师绑定 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:更换服务规划师;边界:解绑前处理在途方案/预约;非本家庭规划师拒|e2e:规划师绑定 | | `tests/test-cases/parent.md#TC-P-75` | 优惠券 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:得券;边界:库存为0/已领拦截;重复领幂等|e2e:优惠券 | | `tests/test-cases/parent.md#TC-P-76` | 活动管理 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:报名平台活动;边界:**并发超卖拦截(CFC 真实 bug 已修)**;名额满拒;重复报名幂等|e2e:活动管理 | | `tests/test-cases/parent.md#TC-P-77` | 活动 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:参与打卡/裂变;边界:重复打卡幂等;刷量/机器行为拦截|e2e:活动 | | `tests/test-cases/parent.md#TC-P-78` | 消息服务 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:看系统/任务/方案提醒;边界:越权消息不可见;分页|e2e:消息服务 | | `tests/test-cases/parent.md#TC-P-79` | 消息服务 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:控制接收;边界:关键安全通知不可关闭|e2e:消息服务 | | `tests/test-cases/parent.md#TC-P-80` | 会员/订单 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:退会员/开发票;边界:已消费不退;重复退拦截;发票信息校验|e2e:会员/订单 | | `tests/test-cases/parent.md#TC-P-81` | 方案/任务 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:暂存未完;边界:草稿有效期;恢复冲突提示|e2e:方案/任务 | | `tests/test-cases/parent.md#TC-P-82` | 搜索 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:快速定位;边界:越权结果过滤;空结果不报错|e2e:搜索 | | `tests/test-cases/parent.md#TC-P-83` | 客服 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:提反馈;边界:敏感信息脱敏;附件大小限制|e2e:客服 | | `tests/test-cases/parent.md#TC-P-84` | 分享 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:共享;边界:链接失效/权限校验;越权分享被拒|e2e:分享 | | `tests/test-cases/parent.md#TC-P-85` | AuthController | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:同账号多设备;边界:异常设备风控;退出清 token|e2e:AuthController | | `tests/test-cases/parent.md#TC-P-86` | 勋章/排行 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:激励;边界:数据仅本家庭可见;排名实时性|e2e:勋章/排行 | | `tests/test-cases/parent.md#TC-P-01-E` | 家庭 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:名称空或超长返回 400 且 message 含『家庭名称』校验项;HTML/SQL 注入被转义,库内不落恶意串;不抛 500、不泄露堆栈|e2e:FamilyInviteController | | `tests/test-cases/parent.md#TC-P-02-E` | 家庭/成员 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非法手机号 400 提示格式;已占用账号提示『已存在家庭关系』;过期码提示『邀请已失效,请重新获取』;均不建立成员关系|e2e:FamilyInviteController | | `tests/test-cases/parent.md#TC-P-03-E` | 成员资料 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:未来生日 400;关系非法值拒绝;姓名特殊字符转义存储、不破坏查询;既有成员数据不被污染|e2e:FamilyMembersController | | `tests/test-cases/parent.md#TC-P-04-E` | 关系图 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:重复关系提示已存在、不新增节点;非法枚举 400;关系图不出现重复/幽灵节点|e2e:关系类型 CRUD/前端选择器 | | `tests/test-cases/parent.md#TC-P-05-E` | 任务 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:频率非法 400;并发双发幂等,仅生成 1 条任务、仅 1 次能量预期;超期任务拒绝提交|e2e:TaskController | | `tests/test-cases/parent.md#TC-P-06-E` | 任务审核 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:重复审批幂等不双计积分;驳回→重做→再审批仅在重做后计 1 次;超期任务审批被拒|e2e:TaskController`/`PointsController | | `tests/test-cases/parent.md#TC-P-07-E` | 心愿 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:余额不足拦截且不扣负积分;已取消心愿兑换提示失效;并发幂等仅扣 1 次|e2e:WishController`/`RewardController | | `tests/test-cases/parent.md#TC-P-08-E` | 能量 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:查询超时降级为空态提示非 500;权重为 0 时占比按兜底(0%)显示不崩;首访空态正常|e2e:EnergyController | | `tests/test-cases/parent.md#TC-P-09-E` | 测评订单 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:回调验签失败订单保持 pending 不进待安排;余额不足回滚;重复回调幂等仅落 1 次已支付|e2e:AssessmentAppointmentController | | `tests/test-cases/parent.md#TC-P-10-E` | 健康报告 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:损坏文件识别失败进未知聚类并提示;非募极明确提示『请确认是募极生物肠道菌群报告』;超大/加密提示超限或密码保护,均非 500|e2e:健康报告上传解析 | | `tests/test-cases/parent.md#TC-P-11-E` | 报告查看 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:不存在/已删返回 404 提示『报告不存在』;解析中提示『报告解析中,请稍候』,不白屏不 500|e2e:报告解析 | | `tests/test-cases/parent.md#TC-P-12-E` | 饮食推荐 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:AiGateway Fallback 返回兜底食材清单+友好提示非 500;重复点击幂等仅生成 1 份、不重复扣费|e2e:饮食推荐系统 | | `tests/test-cases/parent.md#TC-P-13-E` | AI 方案 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:Fallback 兜底方案+提示;未购会员请求付费板块返回『请先开通会员』拦截,不白生成|e2e:AI 统一走 LangGraph;`AiGateway | | `tests/test-cases/parent.md#TC-P-14-E` | 方案提交 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:空方案提交拦截提示『方案未生成』;重复提交幂等不重复进审核|e2e:方案状态机 | | `tests/test-cases/parent.md#TC-P-15-E` | 双角色 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:缺失/过期 token 统一 401 跳登录;孩子端无切回家长入口;非法切换 403 被拒;模拟登录仅测试环境生效|e2e:POST /api/family/member/switch`(替代废弃 switch-mode);双角色铁律 | | `tests/test-cases/parent.md#TC-P-16-E` | 会员 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:支付超时订单回滚不解锁权益;重复购买幂等仅开通 1 次、不重复扣费|e2e:MembershipController`/`ProductOrderController | | `tests/test-cases/parent.md#TC-P-17-E` | 积分/成长 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:并发刷新总量一致不重复计;关联任务已删时该成长项跳过不报错,时间格式 yyyy-MM-dd HH:mm:ss|e2e:PointsController`/`GrowthController | | `tests/test-cases/parent.md#TC-P-18-E` | AI 对话 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超长消息 400 提示;敏感词按合规拦截;LangGraph 不可用 Fallback 兜底回答,多轮上下文不丢|e2e:AIChatController`;LangGraph RAG | | `tests/test-cases/parent.md#TC-P-19-E` | 能量配置 | 家长 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:配置缺失展示兜底说明非 500;权重和非法 400 提示『权重合计需为 100%』|e2e:维度配置 | | `tests/test-cases/parent.md#TC-P-20-E` | 健康报告 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:损坏文件识别失败进未知聚类并提示;非募极明确提示『请确认是募极生物肠道菌群报告』;超大/加密提示超限或密码保护,均非 500|e2e:报告解析中台/`POST /api/media/upload | | `tests/test-cases/parent.md#TC-P-21-E` | 报告解析 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:未注册类型进未知聚类待运营自学习;0 字节文件提示『文件为空』;均非 500|e2e:/api/admin/report-parser/types | | `tests/test-cases/parent.md#TC-P-22-E` | 报告预览 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:异常值提示『数据异常,暂不入库』不入库;超时提示解析中,不白屏|e2e:解析中台 | | `tests/test-cases/parent.md#TC-P-23-E` | 报告入库 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:报告已删提示『报告不存在,确认失败』;并发确认幂等仅入库 1 次、七维仅刷新 1 次|e2e:解析中台 | | `tests/test-cases/parent.md#TC-P-24-E` | 报告管理 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:有方案时提示『请先解除关联方案』再删;不存在 id 返回 404 不崩|e2e:报告管理 | | `tests/test-cases/parent.md#TC-P-25-E` | 报告趋势 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:单报告提示『至少需要 2 份报告才能看趋势』;时间轴按真实时间升序,不倒挂|e2e:成长/报告 | | `tests/test-cases/parent.md#TC-P-26-E` | 饮食推荐 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:AiGateway Fallback 返回兜底食材清单+友好提示非 500;重复点击幂等仅生成 1 份、不重复扣费|e2e:饮食推荐系统 | | `tests/test-cases/parent.md#TC-P-27-E` | 家庭食谱 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超时 Fallback 通用食谱+提示;过敏食材未排除时返回 400 提示『存在过敏冲突』重算|e2e:饮食推荐/家庭食谱 | | `tests/test-cases/parent.md#TC-P-28-E` | 食谱筛选 | 家长 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:忌口冲突提示并停止生成;非法忌口值 400;重算生效|e2e:饮食推荐 | | `tests/test-cases/parent.md#TC-P-29-E` | 食谱收藏 | 家长 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:替换后提示『超出营养目标』不静默;重复收藏幂等仅 1 条|e2e:饮食推荐 | | `tests/test-cases/parent.md#TC-P-30-E` | 食谱营养 | 家长 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:超标明确标红提示『超出目标 X%』;未设目标提示先设目标,不除零|e2e:饮食推荐 | | `tests/test-cases/parent.md#TC-P-31-E` | 测评类型 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:字典缺失时前端降级不白屏;非法 type 400;八类以字典为准|e2e:DanAssessmentController | | `tests/test-cases/parent.md#TC-P-32-E` | 测评规划师 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:未绑定提示『请先绑定规划师』;已解绑 T 不在可选列表,选则 400|e2e:测评订单 | | `tests/test-cases/parent.md#TC-P-33-E` | 测评下单 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:下架套餐 400『套餐不可售』;数量非法/库存不足拦截,不生成订单|e2e:AssessmentOrder | | `tests/test-cases/parent.md#TC-P-34-E` | 测评支付 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超时回滚不生成额度;重复回调幂等仅生成 1 条额度|e2e:支付/`AssessmentQuota | | `tests/test-cases/parent.md#TC-P-35-E` | 测评额度 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:过期额度预约返回『额度已过期』不落预约;额度页加载降级非 500|e2e:AssessmentQuota | | `tests/test-cases/parent.md#TC-P-36-E` | 测评预约 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:无额度返回『额度不足或已过期』不建预约不发能量;并发双发仅落 1 条预约、能量仅发 1 次(幂等)|e2e:AssessmentAppointmentController | | `tests/test-cases/parent.md#TC-P-37-E` | 预约状态 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:状态机守卫拒绝非法跃迁返回 400;不存在预约 404;状态准确|e2e:AssessmentAppointmentController | | `tests/test-cases/parent.md#TC-P-38-E` | 预约取消 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:越权取消 403 被拒(CFC-AP);终态预约取消返回『不可取消』;不退款逻辑按配置|e2e:AssessmentAppointmentController | | `tests/test-cases/parent.md#TC-P-39-E` | DAN报告 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:未录入提示『结果待录入』不白屏;缺字段校验 400 提示缺哪项|e2e:DanAssessmentResultDTO | | `tests/test-cases/parent.md#TC-P-40-E` | AI方案 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:Fallback 兜底方案+提示;未购会员请求付费板块返回『请先开通会员』拦截,不白生成|e2e:AIChatController`/`AiGateway | | `tests/test-cases/parent.md#TC-P-41-E` | 方案迭代 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:断网 Fallback 保留其他板块不丢;连续点击幂等仅 1 次重生成|e2e:AIChatController | | `tests/test-cases/parent.md#TC-P-42-E` | 方案编辑 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超长 400 提示;越权编辑 403 被拒;编辑后状态标记已改|e2e:方案管理 | | `tests/test-cases/parent.md#TC-P-43-E` | 方案查看 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:空方案展示占位不白屏;不存在 404|e2e:方案管理 | | `tests/test-cases/parent.md#TC-P-44-E` | 方案确认 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:未确认激活拦截『请先确认』;重复确认幂等仅 1 次 reviewed|e2e:方案状态机 | | `tests/test-cases/parent.md#TC-P-45-E` | 方案发布 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:需审核配置时发布走审核流不直接 active;未 reviewed 发布拦截|e2e:方案管理 | | `tests/test-cases/parent.md#TC-P-46-E` | 方案激活 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:已激活再激活幂等不重复生成任务;超时回滚不残半任务,状态回 reviewed|e2e:方案激活任务分解 | | `tests/test-cases/parent.md#TC-P-47-E` | 方案任务 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:删任务同步方案并提示;非法 id 400;任务增删与方案一致|e2e:GrowthPlanController | | `tests/test-cases/parent.md#TC-P-48-E` | 方案版本 | 家长 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:历史版本只读返回 403『版本不可篡改』;不存在 404|e2e:方案管理 | | `tests/test-cases/parent.md#TC-P-49-E` | AI对话 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超长消息 400 提示;敏感词按合规拦截;LangGraph 不可用 Fallback 兜底回答,多轮上下文不丢|e2e:AIChatController | | `tests/test-cases/parent.md#TC-P-50-E` | 成长记录 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:关联已删项跳过不报错;首访空态正常,时间线不白屏|e2e:GrowthController | | `tests/test-cases/parent.md#TC-P-51-E` | 成长里程碑 | 家长 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:重复标幂等仅 1 条;非法节点 400|e2e:GrowthController | | `tests/test-cases/parent.md#TC-P-52-E` | 商城浏览 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:注入被转义返回安全结果;下架商品不展示;不 500|e2e:MallController`/`danshop | | `tests/test-cases/parent.md#TC-P-53-E` | 商品详情 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:库存 0 提示『暂时缺货』;不存在 404|e2e:MallController | | `tests/test-cases/parent.md#TC-P-54-E` | 商城下单 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超库存拦截『库存不足』;重复提交幂等仅 1 单|e2e:MallController | | `tests/test-cases/parent.md#TC-P-55-E` | 订单支付 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超时回滚订单保持待支付;重复通知幂等仅 1 次 paid|e2e:支付 | | `tests/test-cases/parent.md#TC-P-56-E` | 订单退款 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:已发货按规则处理/拒;重复退款拦截仅 1 次|e2e:订单服务 | | `tests/test-cases/parent.md#TC-P-57-E` | 优惠券 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:过期券不可用提示;未达门槛拦截『还差 X 元可用』;不重复抵扣|e2e:优惠券 | | `tests/test-cases/parent.md#TC-P-58-E` | 会员购买 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:失败回滚不解锁;重复购买幂等仅 1 次、不双扣|e2e:MemberController | | `tests/test-cases/parent.md#TC-P-59-E` | 会员权益 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:过期提示『会员已失效』;越权 403;权益随档位|e2e:MemberController | | `tests/test-cases/parent.md#TC-P-60-E` | 会员续费 | 家长 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:未到期续费叠加计算正确(延期);负金额 400|e2e:MemberController | | `tests/test-cases/parent.md#TC-P-61-E` | 联系人 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:重复号码去重提示;非法格式 400;不建重复|e2e:ContactCard`/`contact-detail | | `tests/test-cases/parent.md#TC-P-62-E` | 联系人导入 | 家长 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:错误行跳过并报告『第 N 行格式错误』;非 CSV 拒绝;正确行入库|e2e:ContactImport | | `tests/test-cases/parent.md#TC-P-63-E` | 联系人权限 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:越权查看 403;非法权限值 400;最小权限保底|e2e:ContactCard | | `tests/test-cases/parent.md#TC-P-64-E` | 个人资料 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:手机格式 400;昵称超长/非法字符拦截;保存生效|e2e:AuthController | | `tests/test-cases/parent.md#TC-P-65-E` | 通知设置 | 家长 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:关键安全通知仍推送不被关;非法时间 400|e2e:消息服务 | | `tests/test-cases/parent.md#TC-P-66-E` | 隐私设置 | 家长 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:非法范围 400;敏感字段最小权限保底不外露|e2e:隐私设置 | | `tests/test-cases/parent.md#TC-P-67-E` | 报告代传/report-proxy | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:越权代传他人孩子 403 被拒;报告归属校验失败不入档;授权令牌失效提示|e2e:报告代传/report-proxy | | `tests/test-cases/parent.md#TC-P-68-E` | 家庭天盘 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:缺失项降级展示不白屏;非成员访问 403;仅本家庭可见|e2e:家庭天盘 | | `tests/test-cases/parent.md#TC-P-69-E` | 精准营养 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:负/超上限 400『热量需在合理区间』;非数字 400;目标生效影响食谱|e2e:精准营养 | | `tests/test-cases/parent.md#TC-P-70-E` | 舌诊情绪识别 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非照片/模糊拒绝提示『请上传清晰舌苔照』;低置信度提示『识别不清晰,建议重拍』;隐私标注不外露|e2e:舌诊情绪识别 | | `tests/test-cases/parent.md#TC-P-71-E` | AuthController | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:有在途订单拦截『请先处理进行中订单』;注销后 token 失效 401 不可登录|e2e:AuthController | | `tests/test-cases/parent.md#TC-P-72-E` | 数据导出(GDPR) | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:越权导出 403;频次限制提示『导出过于频繁』;敏感字段脱敏|e2e:数据导出(GDPR) | | `tests/test-cases/parent.md#TC-P-73-E` | 家庭/成员 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非本家庭孩子不可选 400;切换保持各孩子上下文隔离不串|e2e:家庭/成员 | | `tests/test-cases/parent.md#TC-P-74-E` | 规划师绑定 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:在途未完成提示『请先处理在途服务』;非本家庭 T 绑定 400 被拒|e2e:规划师绑定 | | `tests/test-cases/parent.md#TC-P-75-E` | 优惠券 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:库存 0 提示『已领完』;重复领幂等仅入卡包 1 张|e2e:优惠券 | | `tests/test-cases/parent.md#TC-P-76-E` | 活动管理 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:并发超卖拦截仅 1 人成功(CFC 已修 bug 回归);满额拒『名额已满』;重复报名幂等|e2e:活动管理 | | `tests/test-cases/parent.md#TC-P-77-E` | 活动 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:重复打卡幂等仅计 1 次;刷量风控拦截;进度累计正确|e2e:活动 | | `tests/test-cases/parent.md#TC-P-78-E` | 消息服务 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:越权消息不可见 403;不存在 404;分页正常|e2e:消息服务 | | `tests/test-cases/parent.md#TC-P-79-E` | 消息服务 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:关键安全通知不可关;非法时间 400|e2e:消息服务 | | `tests/test-cases/parent.md#TC-P-80-E` | 会员/订单 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:已消费不退提示;重复退拦截;发票信息校验缺失字段 400|e2e:会员/订单 | | `tests/test-cases/parent.md#TC-P-81-E` | 方案/任务 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:过期草稿提示『草稿已失效』;并发存后者覆盖且提示冲突|e2e:方案/任务 | | `tests/test-cases/parent.md#TC-P-82-E` | 搜索 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:越权结果过滤不可见;空结果不报错提示『请输入关键词』|e2e:搜索 | | `tests/test-cases/parent.md#TC-P-83-E` | 客服 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:敏感信息脱敏存储;附件超限 400『附件不超过 10MB』|e2e:客服 | | `tests/test-cases/parent.md#TC-P-84-E` | 分享 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:失效链接提示『分享已失效』;越权分享 403 被拒|e2e:分享 | | `tests/test-cases/parent.md#TC-P-85-E` | AuthController | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:异常设备二次验证/拦截;退出后旧 token 失效 401|e2e:AuthController | | `tests/test-cases/parent.md#TC-P-86-E` | 勋章/排行 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非本家庭榜不可见 403;排名仅本家庭数据,刷新即更新|e2e:勋章/排行 | | `tests/test-cases/parent.md#TC-P-01-P` | 家庭 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:FamilyInviteController | | `tests/test-cases/parent.md#TC-P-02-P` | 家庭/成员 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:FamilyInviteController | | `tests/test-cases/parent.md#TC-P-03-P` | 成员资料 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:FamilyMembersController | | `tests/test-cases/parent.md#TC-P-04-P` | 关系图 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:关系类型 CRUD/前端选择器 | | `tests/test-cases/parent.md#TC-P-05-P` | 任务 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:TaskController | | `tests/test-cases/parent.md#TC-P-06-P` | 任务审核 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:TaskController`/`PointsController | | `tests/test-cases/parent.md#TC-P-07-P` | 心愿 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:WishController`/`RewardController | | `tests/test-cases/parent.md#TC-P-08-P` | 能量 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:EnergyController | | `tests/test-cases/parent.md#TC-P-09-P` | 测评订单 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AssessmentAppointmentController | | `tests/test-cases/parent.md#TC-P-10-P` | 健康报告 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:健康报告上传解析 | | `tests/test-cases/parent.md#TC-P-11-P` | 报告查看 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:报告解析 | | `tests/test-cases/parent.md#TC-P-12-P` | 饮食推荐 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:饮食推荐系统 | | `tests/test-cases/parent.md#TC-P-13-P` | AI 方案 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AI 统一走 LangGraph;`AiGateway | | `tests/test-cases/parent.md#TC-P-14-P` | 方案提交 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:方案状态机 | | `tests/test-cases/parent.md#TC-P-15-P` | 双角色 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:POST /api/family/member/switch`(替代废弃 switch-mode);双角色铁律 | | `tests/test-cases/parent.md#TC-P-16-P` | 会员 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:MembershipController`/`ProductOrderController | | `tests/test-cases/parent.md#TC-P-17-P` | 积分/成长 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:PointsController`/`GrowthController | | `tests/test-cases/parent.md#TC-P-18-P` | AI 对话 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AIChatController`;LangGraph RAG | | `tests/test-cases/parent.md#TC-P-19-P` | 能量配置 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:维度配置 | | `tests/test-cases/parent.md#TC-P-20-P` | 健康报告 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:报告解析中台/`POST /api/media/upload | | `tests/test-cases/parent.md#TC-P-21-P` | 报告解析 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:/api/admin/report-parser/types | | `tests/test-cases/parent.md#TC-P-22-P` | 报告预览 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:解析中台 | | `tests/test-cases/parent.md#TC-P-23-P` | 报告入库 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:解析中台 | | `tests/test-cases/parent.md#TC-P-24-P` | 报告管理 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:报告管理 | | `tests/test-cases/parent.md#TC-P-25-P` | 报告趋势 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:成长/报告 | | `tests/test-cases/parent.md#TC-P-26-P` | 饮食推荐 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:饮食推荐系统 | | `tests/test-cases/parent.md#TC-P-27-P` | 家庭食谱 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:饮食推荐/家庭食谱 | | `tests/test-cases/parent.md#TC-P-28-P` | 食谱筛选 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:饮食推荐 | | `tests/test-cases/parent.md#TC-P-29-P` | 食谱收藏 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:饮食推荐 | | `tests/test-cases/parent.md#TC-P-30-P` | 食谱营养 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:饮食推荐 | | `tests/test-cases/parent.md#TC-P-31-P` | 测评类型 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:DanAssessmentController | | `tests/test-cases/parent.md#TC-P-32-P` | 测评规划师 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:测评订单 | | `tests/test-cases/parent.md#TC-P-33-P` | 测评下单 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AssessmentOrder | | `tests/test-cases/parent.md#TC-P-34-P` | 测评支付 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:支付/`AssessmentQuota | | `tests/test-cases/parent.md#TC-P-35-P` | 测评额度 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AssessmentQuota | | `tests/test-cases/parent.md#TC-P-36-P` | 测评预约 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AssessmentAppointmentController | | `tests/test-cases/parent.md#TC-P-37-P` | 预约状态 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AssessmentAppointmentController | | `tests/test-cases/parent.md#TC-P-38-P` | 预约取消 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AssessmentAppointmentController | | `tests/test-cases/parent.md#TC-P-39-P` | DAN报告 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:DanAssessmentResultDTO | | `tests/test-cases/parent.md#TC-P-40-P` | AI方案 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AIChatController`/`AiGateway | | `tests/test-cases/parent.md#TC-P-41-P` | 方案迭代 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AIChatController | | `tests/test-cases/parent.md#TC-P-42-P` | 方案编辑 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:方案管理 | | `tests/test-cases/parent.md#TC-P-43-P` | 方案查看 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:方案管理 | | `tests/test-cases/parent.md#TC-P-44-P` | 方案确认 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:方案状态机 | | `tests/test-cases/parent.md#TC-P-45-P` | 方案发布 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:方案管理 | | `tests/test-cases/parent.md#TC-P-46-P` | 方案激活 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:方案激活任务分解 | | `tests/test-cases/parent.md#TC-P-47-P` | 方案任务 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:GrowthPlanController | | `tests/test-cases/parent.md#TC-P-48-P` | 方案版本 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:方案管理 | | `tests/test-cases/parent.md#TC-P-49-P` | AI对话 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AIChatController | | `tests/test-cases/parent.md#TC-P-50-P` | 成长记录 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:GrowthController | | `tests/test-cases/parent.md#TC-P-51-P` | 成长里程碑 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:GrowthController | | `tests/test-cases/parent.md#TC-P-52-P` | 商城浏览 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:MallController`/`danshop | | `tests/test-cases/parent.md#TC-P-53-P` | 商品详情 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:MallController | | `tests/test-cases/parent.md#TC-P-54-P` | 商城下单 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:MallController | | `tests/test-cases/parent.md#TC-P-55-P` | 订单支付 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:支付 | | `tests/test-cases/parent.md#TC-P-56-P` | 订单退款 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:订单服务 | | `tests/test-cases/parent.md#TC-P-57-P` | 优惠券 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:优惠券 | | `tests/test-cases/parent.md#TC-P-58-P` | 会员购买 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:MemberController | | `tests/test-cases/parent.md#TC-P-59-P` | 会员权益 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:MemberController | | `tests/test-cases/parent.md#TC-P-60-P` | 会员续费 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:MemberController | | `tests/test-cases/parent.md#TC-P-61-P` | 联系人 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:ContactCard`/`contact-detail | | `tests/test-cases/parent.md#TC-P-62-P` | 联系人导入 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:ContactImport | | `tests/test-cases/parent.md#TC-P-63-P` | 联系人权限 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:ContactCard | | `tests/test-cases/parent.md#TC-P-64-P` | 个人资料 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AuthController | | `tests/test-cases/parent.md#TC-P-65-P` | 通知设置 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:消息服务 | | `tests/test-cases/parent.md#TC-P-66-P` | 隐私设置 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:隐私设置 | | `tests/test-cases/parent.md#TC-P-67-P` | 报告代传/report-proxy | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:报告代传/report-proxy | | `tests/test-cases/parent.md#TC-P-68-P` | 家庭天盘 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:家庭天盘 | | `tests/test-cases/parent.md#TC-P-69-P` | 精准营养 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:精准营养 | | `tests/test-cases/parent.md#TC-P-70-P` | 舌诊情绪识别 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:舌诊情绪识别 | | `tests/test-cases/parent.md#TC-P-71-P` | AuthController | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AuthController | | `tests/test-cases/parent.md#TC-P-72-P` | 数据导出(GDPR) | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:数据导出(GDPR) | | `tests/test-cases/parent.md#TC-P-73-P` | 家庭/成员 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:家庭/成员 | | `tests/test-cases/parent.md#TC-P-74-P` | 规划师绑定 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:规划师绑定 | | `tests/test-cases/parent.md#TC-P-75-P` | 优惠券 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:优惠券 | | `tests/test-cases/parent.md#TC-P-76-P` | 活动管理 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:活动管理 | | `tests/test-cases/parent.md#TC-P-77-P` | 活动 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:活动 | | `tests/test-cases/parent.md#TC-P-78-P` | 消息服务 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:消息服务 | | `tests/test-cases/parent.md#TC-P-79-P` | 消息服务 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:消息服务 | | `tests/test-cases/parent.md#TC-P-80-P` | 会员/订单 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:会员/订单 | | `tests/test-cases/parent.md#TC-P-81-P` | 方案/任务 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:方案/任务 | | `tests/test-cases/parent.md#TC-P-82-P` | 搜索 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:搜索 | | `tests/test-cases/parent.md#TC-P-83-P` | 客服 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:客服 | | `tests/test-cases/parent.md#TC-P-84-P` | 分享 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:分享 | | `tests/test-cases/parent.md#TC-P-85-P` | AuthController | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:AuthController | | `tests/test-cases/parent.md#TC-P-86-P` | 勋章/排行 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒|e2e:勋章/排行 | | `tests/test-cases/parent.md#TC-P-87` | 能量/任务 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:B 对应维度 balance/totalEarned +amount;EnergyLog.sourceType=task、balanceAfter 正确;概览/沙盘随新值刷新|e2e:EnergyRuleEngine`/`TaskController | | `tests/test-cases/parent.md#TC-P-88` | 能量/心愿 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:扣减成功,EnergyLog 负 amount、balanceAfter=balance-额;balance/totalSpent 同步;心愿已兑换|e2e:EnergyController`/`RewardController | | `tests/test-cases/parent.md#TC-P-89` | 能量/手动 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:指定维度 +amount;EnergyLog.sourceType=manual 留痕;balanceAfter 更新|e2e:EnergyController | | `tests/test-cases/parent.md#TC-P-90` | 能量/日上限 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:累计达 N 后新增触发不再累加(或截断到上限);跨日 00:00 清零可重新获取|e2e:DimensionDailyLimit | | `tests/test-cases/parent.md#TC-P-91` | 能量/健康报告 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:七维/六维评分刷新;概览/沙盘/score-history 按新值重算;时间序列反映改善|e2e:HealthReportController | | `tests/test-cases/parent.md#TC-P-92` | 能量/配置 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:按新口径重算并展示;存量重算提示|e2e:EnergyController`/维度配置 | | `tests/test-cases/parent.md#TC-P-93` | 能量/文章·活动 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:对应维度 +amount;sourceType=article/activity;balanceAfter 更新|e2e:ArticleService`/`ActivityService | | `tests/test-cases/parent.md#TC-P-87-E` | 能量/任务 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 重复审批幂等不重复加、无第二条 EnergyLog 2. 无归因维度不 500、按规则落 sourceType 或不加 3. 参数非法统一 400、不改动能量 4. 规则异常告警、不写脏流水|e2e:EnergyRuleEngine | | `tests/test-cases/parent.md#TC-P-88-E` | 能量/心愿 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:1. 余额不足明确"能量不足"、心愿保持待审批、无负余额 2. 并发仅一次成功、二次幂等拒 3. 已兑换再提交拒、无负流水 4. 参数非法 400、不扣减|e2e:EnergyController`/`RewardController | | `tests/test-cases/parent.md#TC-P-89-E` | 能量/手动 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 400 拦截不发放 2. 400 不写脏数据 3. 按幂等/业务规则不重复加|e2e:EnergyController | | `tests/test-cases/parent.md#TC-P-90-E` | 能量/日上限 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 触顶后其余来源同维度受限 2. 手动口径断言一致 3. 以服务端日期为准、不绕过 4. 上限 0/负 拒绝配置或按 0、不崩溃|e2e:DimensionDailyLimit | | `tests/test-cases/parent.md#TC-P-91-E` | 能量/健康报告 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:1. 不刷新、原评分保留 2. 类型不一致不可比/提示、不串维度 3. 该维度保持上一值或空态、不 500 4. 重复入库幂等不重复刷新|e2e:HealthReportController | | `tests/test-cases/parent.md#TC-P-92-E` | 能量/配置 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 报警并拒或归一化、不静默错算 2. 展示兜底旧值并提示"同步中"、不显示错乱 3. 400 拦截|e2e:EnergyController`/维度配置 | | `tests/test-cases/parent.md#TC-P-93-E` | 能量/文章·活动 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 风控拦截不计能量 2. 触顶不累加 3. 按规则回收或保留、不双发 4. 参与被拒不发放|e2e:ArticleService`/`ActivityService | | `tests/test-cases/parent.md#TC-P-87-P` | 能量/任务 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:1. 非本家庭能量访问 403 2. 孩子端无 grant 入口、直接调被 role 校验拒|e2e:JwtInterceptor`+role | | `tests/test-cases/parent.md#TC-P-88-P` | 能量/心愿 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:1. 非本家庭心愿 403 2. 孩子端无扣减入口、直接调被拒|e2e:EnergyController | | `tests/test-cases/parent.md#TC-P-89-P` | 能量/手动 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:1. 非本家庭 grant 403 2. 孩子端拒|e2e:JwtInterceptor`+role | | `tests/test-cases/parent.md#TC-P-90-P` | 能量/日上限 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 他人累计不可见 403 2. 越权改配置 403|e2e:DimensionDailyLimit | | `tests/test-cases/parent.md#TC-P-91-P` | 能量/健康报告 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非本家庭健康维度数据 403、不泄露|e2e:HealthReportController | | `tests/test-cases/parent.md#TC-P-92-P` | 能量/配置 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非 admin 改全局 403|e2e:EnergyController | | `tests/test-cases/parent.md#TC-P-93-P` | 能量/文章·活动 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非本家庭流水 403|e2e:ArticleService`/`ActivityService | | `tests/test-cases/parent.md#TC-P-N01` | 健康报告 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:上传+解析 ≤ 30s;超时走 AiGateway 友好降级而非 500;进度可见|e2e:健康报告上传解析 | | `tests/test-cases/parent.md#TC-P-N02` | AI 方案 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:各方案独立完整、数据不串;单请求 P95 ≤ 15s;LangGraph 超时回退 Fallback|e2e:AiGateway/LangGraph | | `tests/test-cases/parent.md#TC-P-N03` | 任务 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:首屏 ≤ 2s;翻页流畅;分页/虚拟滚动生效|e2e:TaskController | | `tests/test-cases/parent.md#TC-P-N04` | 全局搜索 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:搜索结果 ≤ 1.5s;匹配高亮;空结果空态|e2e:搜索接口 | | `tests/test-cases/parent.md#TC-P-N05` | 报告查看 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:列表/详情渲染 ≤ 2s;七维评分刷新不卡顿|e2e:报告解析 | | `tests/test-cases/parent.md#TC-P-N06` | 双角色 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:四端功能一致;切回家长需密码;孩子端不可回切|e2e:双角色铁律 | | `tests/test-cases/parent.md#TC-P-N07` | 饮食推荐 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:推荐列表与可吃/慎吃标签布局正常;图片自适应|e2e:饮食推荐 | | `tests/test-cases/parent.md#TC-P-N08` | 设置 | 家长 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:无样式错位;可点区域 ≥ 44px;无横向滚动|e2e:前端适配 | | `tests/test-cases/parent.md#TC-P-N09` | 报告闭环 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:返回 403(IDOR 横向越权拦截);不泄露跨家庭数据|e2e:报告鉴权 | | `tests/test-cases/parent.md#TC-P-N10` | AI 对话 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:输入后端 HTML 转义存储/渲染;无脚本执行|e2e:AIChatController | | `tests/test-cases/parent.md#TC-P-N11` | 健康报告 | 家长 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:类型/大小校验拒绝(400/413);不落盘执行;不触发解析|e2e:上传校验 | | `tests/test-cases/parent.md#TC-P-N12` | 双角色 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:服务端二次校验身份;篡改无效;不越权|e2e:switch 接口鉴权 | | `tests/test-cases/parent.md#TC-P-N13` | 设置 | 家长 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:无身份证/手机号明文泄露;日志脱敏;状态变更含 CSRF token 校验|e2e:数据安全 | | `tests/test-cases/teacher.md#TC-T-01` | 认证/双角色 | 规划师 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:进入仪表板;可切回自身家长视角;越权访问无关家庭被拒|e2e:AuthController`;规划师可切回家长 | | `tests/test-cases/teacher.md#TC-T-02` | 家庭绑定 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:家庭出现在列表,可见成员;无效码提示失败;重复绑定幂等|e2e:FamilyInviteController | | `tests/test-cases/teacher.md#TC-T-03` | 健康报告 | 规划师 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:报告进入孩子档案;健康列表可见;识别失败进草稿/未知聚类|e2e:报告上传解析;规划师代传 | | `tests/test-cases/teacher.md#TC-T-04` | 报告审核 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:草稿确认入库,健康报告列表可见;确认前可取消不入库|e2e:报告审核 | | `tests/test-cases/teacher.md#TC-T-05` | 方案管理 | 规划师 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:列表正常渲染(无白屏);函数不报未定义|e2e:方案管理;黑盒回归项 | | `tests/test-cases/teacher.md#TC-T-06` | 方案审核 | 规划师 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:状态 generated→reviewed|e2e:方案状态机 | | `tests/test-cases/teacher.md#TC-T-07` | 方案激活 | 规划师 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:状态 reviewed→active;生成引导任务+模板任务;孩子 B 出现方案启动任务|e2e:激活拆任务 | | `tests/test-cases/teacher.md#TC-T-08` | 方案激活·幂等 | 规划师 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:返回状态异常提示,**不重复生成任务**(幂等)|e2e:幂等约束(黑盒回归) | | `tests/test-cases/teacher.md#TC-T-09` | 任务审核 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:通过→孩子得积分;驳回→退回重做;越权审核非绑定家庭被拒|e2e:TaskController | | `tests/test-cases/teacher.md#TC-T-10` | 测评录入 | 规划师 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:结果可见;触发规则引擎自动生成方案(generated);必填缺失→校验拦截;重复录入覆盖|e2e:AssessmentAppointmentController`/`DanAssessmentController | | `tests/test-cases/teacher.md#TC-T-11` | 成长计划 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:列表显示自己创建的计划(childName/状态/时间);不再 400|e2e:GrowthPlanController`;黑盒回归 | | `tests/test-cases/teacher.md#TC-T-12` | 套餐 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:上架前提交审核;审核通过后可被市场购买;任务项为空→校验拦截|e2e:GuidePackageController | | `tests/test-cases/teacher.md#TC-T-13` | 数据隔离 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭统一 403;仅见绑定家庭数据|e2e:控制器内 role 检查 | | `tests/test-cases/teacher.md#TC-T-14` | 方案编辑 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:编辑后状态标记已改;保存生效|e2e:方案管理 | | `tests/test-cases/teacher.md#TC-T-15` | 套餐任务 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:空套餐拦截上架;重算后任务项正确|e2e:GuidePackageController | | `tests/test-cases/teacher.md#TC-T-16` | 健康总览 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:数据缺失项降级展示不 500|e2e:仪表板 | | `tests/test-cases/teacher.md#TC-T-17` | 计划进度 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:进度计算准确;与任务状态一致|e2e:GrowthPlanController | | `tests/test-cases/teacher.md#TC-T-18` | 批量任务 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:部分失败不影响其他成员;各自独立落库|e2e:TaskController | | `tests/test-cases/teacher.md#TC-T-19` | 消息推送 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:客户端收到;免打扰设置生效|e2e:消息服务 | | `tests/test-cases/teacher.md#TC-T-20` | 退出/切换 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:退出清缓存;切回家长视角正常|e2e:AuthController | | `tests/test-cases/teacher.md#TC-T-21` | 报告对比 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:报告类型一致才可比对;差异清晰标注|e2e:报告管理 | | `tests/test-cases/teacher.md#TC-T-22` | 方案归档 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:归档后方案仅可读,不可再编辑/激活|e2e:方案管理 | | `tests/test-cases/teacher.md#TC-T-23` | 报告代传/report-proxy | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:帮客户上传;边界:非绑定家庭拒;识别失败进草稿|e2e:报告代传/report-proxy | | `tests/test-cases/teacher.md#TC-T-24` | 规划师绑定 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:更换绑定;边界:在途方案/预约处理;非绑定家庭不可操作|e2e:规划师绑定 | | `tests/test-cases/teacher.md#TC-T-25` | 舌诊情绪识别 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:录入识别结果;边界:识别失败回退人工|e2e:舌诊情绪识别 | | `tests/test-cases/teacher.md#TC-T-26` | 精准营养 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:基于营养目标出方案;边界:目标非法拦截|e2e:精准营养 | | `tests/test-cases/teacher.md#TC-T-27` | 家庭天盘 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:给家庭看聚合视图并解读;边界:仅绑定家庭可见|e2e:家庭天盘 | | `tests/test-cases/teacher.md#TC-T-28` | 内容安全 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:复核 AI 敏感内容;边界:命中即拦截|e2e:内容安全 | | `tests/test-cases/teacher.md#TC-T-29` | 数据导出(GDPR) | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:导出客户数据;边界:授权/脱敏;越权拒|e2e:数据导出(GDPR) | | `tests/test-cases/teacher.md#TC-T-01-E` | 认证/双角色 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:缺失/过期 token 统一 401 跳登录;非绑定家庭路由 403 被拒;模拟登录开关仅在测试环境可开|e2e:AuthController`;规划师可切回家长 | | `tests/test-cases/teacher.md#TC-T-02-E` | 家庭绑定 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:错码/过期提示『邀请码无效或已失效』;重复绑定幂等不双建;注销家庭不可绑|e2e:FamilyInviteController | | `tests/test-cases/teacher.md#TC-T-03-E` | 健康报告 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:损坏/非募极提示明确(非募极提示请确认募极生物);超大超限提示;解析超时进草稿非500;非绑定孩子 403|e2e:报告上传解析;规划师代传 | | `tests/test-cases/teacher.md#TC-T-04-E` | 报告审核 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:已删草稿提示『不存在』;解析中确认提示稍候;非绑定家庭草稿 403 不可操作|e2e:报告审核 | | `tests/test-cases/teacher.md#TC-T-05-E` | 方案管理 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:列表超时降级提示非500;黑盒回归:函数不再未定义、不白屏;空列表正常占位|e2e:方案管理;黑盒回归项 | | `tests/test-cases/teacher.md#TC-T-06-E` | 方案审核 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非 generated 态批准拦截(状态机守卫);并发双批准幂等仅 1 次状态跃迁|e2e:方案状态机 | | `tests/test-cases/teacher.md#TC-T-07-E` | 方案激活 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超时回滚不残半任务、状态回 reviewed;已激活再激活幂等不重复生成任务;非 reviewed 激活拦截|e2e:激活拆任务 | | `tests/test-cases/teacher.md#TC-T-08-E` | 方案激活·幂等 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:第二次幂等返回现状、不重复生成引导/模板任务;任务数与首次一致|e2e:幂等约束(黑盒回归) | | `tests/test-cases/teacher.md#TC-T-09-E` | 任务审核 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭 403;并发双审幂等仅计 1 次积分;超期任务审核被拒|e2e:TaskController | | `tests/test-cases/teacher.md#TC-T-10-E` | 测评录入 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:必填缺失 400 不生成半成品;重复录入覆盖非新增;越界 400 不写脏分;非指派 confirm 返回『您不是被指派测评师』|e2e:AssessmentAppointmentController`/`DanAssessmentController | | `tests/test-cases/teacher.md#TC-T-11-E` | 成长计划 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超时降级非500;空列表正常;非绑定家庭 403|e2e:GrowthPlanController`;黑盒回归 | | `tests/test-cases/teacher.md#TC-T-12-E` | 套餐 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:空任务项拦截上架;审核超时回退草稿非500;重复提交幂等|e2e:GuidePackageController | | `tests/test-cases/teacher.md#TC-T-13-E` | 数据隔离 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭统一 403;不泄露他人数据;并发越权同样 403|e2e:控制器内 role 检查 | | `tests/test-cases/teacher.md#TC-T-14-E` | 方案编辑 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:归档方案编辑拦截;非绑定家庭 403;超长 400|e2e:方案管理 | | `tests/test-cases/teacher.md#TC-T-15-E` | 套餐任务 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:重算超时降级提示非500;空套餐拦截;并发增删各自生效不丢项|e2e:GuidePackageController | | `tests/test-cases/teacher.md#TC-T-16-E` | 健康总览 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:缺失项降级展示不白屏;超时降级提示非500;仅绑定家庭数据|e2e:仪表板 | | `tests/test-cases/teacher.md#TC-T-17-E` | 计划进度 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:超时降级非500;进度按任务状态实时计算、一致|e2e:GrowthPlanController | | `tests/test-cases/teacher.md#TC-T-18-E` | 批量任务 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:部分失败不影响其他成员独立落库;并发批量各自独立不串|e2e:TaskController | | `tests/test-cases/teacher.md#TC-T-19-E` | 消息推送 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:已注销客户跳过不报错;内容转义不执行脚本;免打扰不推送|e2e:消息服务 | | `tests/test-cases/teacher.md#TC-T-20-E` | 退出/切换 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:旧 token 失效 401;网络中断退出清缓存、下次需重登;切回家长正常|e2e:AuthController | | `tests/test-cases/teacher.md#TC-T-21-E` | 报告对比 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:类型不一致提示不可比;不存在 id 404;差异清晰标注|e2e:报告管理 | | `tests/test-cases/teacher.md#TC-T-22-E` | 方案归档 | 规划师 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:归档后编辑/激活拦截;不存在 404|e2e:方案管理 | | `tests/test-cases/teacher.md#TC-T-23-E` | 报告代传/report-proxy | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭 403 拒;损坏/非募极提示明确;识别失败进草稿非500|e2e:报告代传/report-proxy | | `tests/test-cases/teacher.md#TC-T-24-E` | 规划师绑定 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:在途未完成提示先处理;非平台家庭绑定 400 拒|e2e:规划师绑定 | | `tests/test-cases/teacher.md#TC-T-25-E` | 舌诊情绪识别 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:类型校验拒绝(.php/.html)不执行;非照片/模糊拒;低置信度提示重拍|e2e:舌诊情绪识别 | | `tests/test-cases/teacher.md#TC-T-26-E` | 精准营养 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:负/超上限 400『热量需在合理区间』;脚本转义存储不执行|e2e:精准营养 | | `tests/test-cases/teacher.md#TC-T-27-E` | 家庭天盘 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭 403;缺失项降级展示不白屏|e2e:家庭天盘 | | `tests/test-cases/teacher.md#TC-T-28-E` | 内容安全 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:命中即拦截不放行;超时 Fallback 兜底、友好提示非500|e2e:内容安全 | | `tests/test-cases/teacher.md#TC-T-29-E` | 数据导出(GDPR) | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:越权导出 403;频次限制提示『导出过于频繁』;敏感字段脱敏|e2e:数据导出(GDPR) | | `tests/test-cases/teacher.md#TC-T-01-P` | 认证/双角色 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:AuthController`;规划师可切回家长 | | `tests/test-cases/teacher.md#TC-T-02-P` | 家庭绑定 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:FamilyInviteController | | `tests/test-cases/teacher.md#TC-T-03-P` | 健康报告 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:报告上传解析;规划师代传 | | `tests/test-cases/teacher.md#TC-T-04-P` | 报告审核 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:报告审核 | | `tests/test-cases/teacher.md#TC-T-05-P` | 方案管理 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:方案管理;黑盒回归项 | | `tests/test-cases/teacher.md#TC-T-06-P` | 方案审核 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:方案状态机 | | `tests/test-cases/teacher.md#TC-T-07-P` | 方案激活 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:激活拆任务 | | `tests/test-cases/teacher.md#TC-T-08-P` | 方案激活·幂等 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:幂等约束(黑盒回归) | | `tests/test-cases/teacher.md#TC-T-09-P` | 任务审核 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:TaskController | | `tests/test-cases/teacher.md#TC-T-10-P` | 测评录入 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:AssessmentAppointmentController`/`DanAssessmentController | | `tests/test-cases/teacher.md#TC-T-11-P` | 成长计划 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:GrowthPlanController`;黑盒回归 | | `tests/test-cases/teacher.md#TC-T-12-P` | 套餐 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:GuidePackageController | | `tests/test-cases/teacher.md#TC-T-13-P` | 数据隔离 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:控制器内 role 检查 | | `tests/test-cases/teacher.md#TC-T-14-P` | 方案编辑 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:方案管理 | | `tests/test-cases/teacher.md#TC-T-15-P` | 套餐任务 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:GuidePackageController | | `tests/test-cases/teacher.md#TC-T-16-P` | 健康总览 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:仪表板 | | `tests/test-cases/teacher.md#TC-T-17-P` | 计划进度 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:GrowthPlanController | | `tests/test-cases/teacher.md#TC-T-18-P` | 批量任务 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:TaskController | | `tests/test-cases/teacher.md#TC-T-19-P` | 消息推送 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:消息服务 | | `tests/test-cases/teacher.md#TC-T-20-P` | 退出/切换 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:AuthController | | `tests/test-cases/teacher.md#TC-T-21-P` | 报告对比 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:报告管理 | | `tests/test-cases/teacher.md#TC-T-22-P` | 方案归档 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒(高危越权修复)|e2e:方案管理 | | `tests/test-cases/teacher.md#TC-T-23-P` | 报告代传/report-proxy | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒|e2e:报告代传/report-proxy | | `tests/test-cases/teacher.md#TC-T-24-P` | 规划师绑定 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒|e2e:规划师绑定 | | `tests/test-cases/teacher.md#TC-T-25-P` | 舌诊情绪识别 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒|e2e:舌诊情绪识别 | | `tests/test-cases/teacher.md#TC-T-26-P` | 精准营养 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒|e2e:精准营养 | | `tests/test-cases/teacher.md#TC-T-27-P` | 家庭天盘 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒|e2e:家庭天盘 | | `tests/test-cases/teacher.md#TC-T-28-P` | 内容安全 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒|e2e:内容安全 | | `tests/test-cases/teacher.md#TC-T-29-P` | 数据导出(GDPR) | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭数据统一 403;confirm/cancel 增加归属校验,非指派调用被拒|e2e:数据导出(GDPR) | | `tests/test-cases/teacher.md#TC-T-30` | 测评/五维 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:八类分→五维刷新;生成 generated 方案;概览/沙盘刷新|e2e:AssessmentAppointmentService | | `tests/test-cases/teacher.md#TC-T-31` | 维度/手动 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:目标维度覆盖/调整并留痕;概览/沙盘随新值刷新|e2e:ManualDimensionScoreController | | `tests/test-cases/teacher.md#TC-T-32` | 五维/自评 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:自评微调并叠加;FiveDimensionSelfCheck 留记录;历史可查|e2e:FiveDimensionSelfCheckController | | `tests/test-cases/teacher.md#TC-T-30-E` | 测评/五维 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:1. 400 不生成半成品 2. 覆盖非新增、无重复记录 3. 越界 400 不写脏分|e2e:AssessmentAppointmentService | | `tests/test-cases/teacher.md#TC-T-31-E` | 维度/手动 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:1. 400 拦截 2. 幂等无重复痕迹;不影响其他维度(断言)|e2e:ManualDimensionScoreController | | `tests/test-cases/teacher.md#TC-T-32-E` | 五维/自评 | 规划师 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:400 拦截;不写脏分|e2e:FiveDimensionSelfCheckController | | `tests/test-cases/teacher.md#TC-T-30-P` | 测评/五维 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭录入 403|e2e:AssessmentAppointmentService | | `tests/test-cases/teacher.md#TC-T-31-P` | 维度/手动 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭 403|e2e:ManualDimensionScoreController | | `tests/test-cases/teacher.md#TC-T-32-P` | 五维/自评 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非绑定家庭 403|e2e:FiveDimensionSelfCheckController | | `tests/test-cases/teacher.md#TC-T-N01` | 健康报告 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:队列不堵;单份 ≤ 30s;失败重试不重复入库|e2e:报告解析中台 | | `tests/test-cases/teacher.md#TC-T-N02` | 方案审核 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:列表 ≤ 2s;筛选/排序生效|e2e:方案状态机 | | `tests/test-cases/teacher.md#TC-T-N03` | 绑定家庭 | 规划师 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:切换 ≤ 1.5s;数据隔离不串|e2e:绑定家庭 | | `tests/test-cases/teacher.md#TC-T-N04` | 报告代传 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:上传入口一致;解析预览正常|e2e:代传入口 | | `tests/test-cases/teacher.md#TC-T-N05` | 健康报告 | 规划师 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:返回 403(非绑定家庭越权拦截);不泄露|e2e:规划师鉴权 | | `tests/test-cases/teacher.md#TC-T-N06` | 方案审核 | 规划师 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:服务端归属校验;非法操作 403/拒绝|e2e:方案鉴权 | | `tests/test-cases/teacher.md#TC-T-N07` | 舌诊录入 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:类型校验拒绝;不执行;存储路径随机化防遍历|e2e:上传校验 | | `tests/test-cases/teacher.md#TC-T-N08` | 精准营养 | 规划师 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:后端转义存储;前端不执行|e2e:方案内容安全 | | `tests/test-cases/vendor.md#TC-S-01` | 入驻 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:进入运营审核队列;审核通过→获得供应商身份;资质缺失→驳回说明;重复申请幂等|e2e:ServiceRoleApplicationController`/`AdminEcomSupplierController | | `tests/test-cases/vendor.md#TC-S-02` | 商品 | 服务商 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:商品在商城可见;库存/价格即时生效;字段校验错误→400;负价格/负库存拦截;下架不可购买|e2e:ProductController`/`AdminProductController | | `tests/test-cases/vendor.md#TC-S-03` | 订单 | 服务商 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:订单状态正确流转;客户可见物流/核销码;重复发货幂等;核销码校验防冒用|e2e:ProductOrderController | | `tests/test-cases/vendor.md#TC-S-04` | 订单核销 | 服务商 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:重复核销幂等;超期订单提示不可核销|e2e:订单服务 | | `tests/test-cases/vendor.md#TC-S-05` | 库存 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:负库存拦截;同步后前台可见|e2e:库存服务 | | `tests/test-cases/vendor.md#TC-S-06` | 售后 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:重复退款拦截;退款流水可追溯|e2e:售后 | | `tests/test-cases/vendor.md#TC-S-07` | 活动报名 | 服务商 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:活动失效不可报;报名后商品出现活动标|e2e:活动管理 | | `tests/test-cases/vendor.md#TC-S-08` | 对账 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:账期计算正确;结算后状态更新|e2e:结算 | | `tests/test-cases/vendor.md#TC-S-09` | 服务商集成/解析中台 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:提供解析能力;边界:跨商户隔离;鉴权|e2e:服务商集成/解析中台 | | `tests/test-cases/vendor.md#TC-S-10` | 食谱库 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:供食谱数据;边界:数据合规;格式校验|e2e:食谱库 | | `tests/test-cases/vendor.md#TC-S-11` | 合规 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:达成目标:授权内用数;边界:越授权拒;脱敏|e2e:合规 | | `tests/test-cases/vendor.md#TC-S-01-E` | 入驻 | 服务商 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:资质缺失驳回并说明缺项;重复申请幂等不双建;非法联系方式 400|e2e:ServiceRoleApplicationController`/`AdminEcomSupplierController | | `tests/test-cases/vendor.md#TC-S-02-E` | 商品 | 服务商 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:负价格/负库存/非法分类统一 400;并发改库存乐观锁不互相覆盖;下架后不可购买|e2e:ProductController`/`AdminProductController | | `tests/test-cases/vendor.md#TC-S-03-E` | 订单 | 服务商 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:支付失败订单回滚不进已发货;重复发货幂等仅 1 次;核销码校验失败拒(防冒用)|e2e:ProductOrderController | | `tests/test-cases/vendor.md#TC-S-04-E` | 订单核销 | 服务商 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:重复核销幂等;超期提示不可核销;非本服务商 403|e2e:订单服务 | | `tests/test-cases/vendor.md#TC-S-05-E` | 库存 | 服务商 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:负库存 400 拦截;并发超卖保护不出现负库存;同步失败重试前台一致|e2e:库存服务 | | `tests/test-cases/vendor.md#TC-S-06-E` | 售后 | 服务商 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:重复退款拦截仅 1 次;超金额 400;非本服务商 403;流水可追溯|e2e:售后 | | `tests/test-cases/vendor.md#TC-S-07-E` | 活动报名 | 服务商 | P3 | 文档用例(待自动化) | 未跟踪 | 设计:失效活动报名拒;重复报名幂等;非法参数 400|e2e:活动管理 | | `tests/test-cases/vendor.md#TC-S-08-E` | 对账 | 服务商 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:未到账期结算拒;重复结算幂等;异常金额告警不入账|e2e:结算 | | `tests/test-cases/vendor.md#TC-S-09-E` | 服务商集成/解析中台 | 服务商 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:跨商户隔离 403;损坏/超大文件明确提示非500;鉴权失效 401|e2e:服务商集成/解析中台 | | `tests/test-cases/vendor.md#TC-S-10-E` | 食谱库 | 服务商 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:格式校验 400;XSS 转义存储不执行;非本商户 403|e2e:食谱库 | | `tests/test-cases/vendor.md#TC-S-11-E` | 合规 | 服务商 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:越授权 403 拒;敏感字段强制脱敏;并发越权同样 403|e2e:合规 | | `tests/test-cases/vendor.md#TC-S-01-P` | 入驻 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非本服务商资源操作被拒;核销码校验防冒用;跨商户数据隔离|e2e:ServiceRoleApplicationController`/`AdminEcomSupplierController | | `tests/test-cases/vendor.md#TC-S-02-P` | 商品 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非本服务商资源操作被拒;核销码校验防冒用;跨商户数据隔离|e2e:ProductController`/`AdminProductController | | `tests/test-cases/vendor.md#TC-S-03-P` | 订单 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非本服务商资源操作被拒;核销码校验防冒用;跨商户数据隔离|e2e:ProductOrderController | | `tests/test-cases/vendor.md#TC-S-04-P` | 订单核销 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非本服务商资源操作被拒;核销码校验防冒用;跨商户数据隔离|e2e:订单服务 | | `tests/test-cases/vendor.md#TC-S-05-P` | 库存 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非本服务商资源操作被拒;核销码校验防冒用;跨商户数据隔离|e2e:库存服务 | | `tests/test-cases/vendor.md#TC-S-06-P` | 售后 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非本服务商资源操作被拒;核销码校验防冒用;跨商户数据隔离|e2e:售后 | | `tests/test-cases/vendor.md#TC-S-07-P` | 活动报名 | 服务商 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:非本服务商资源操作被拒;核销码校验防冒用;跨商户数据隔离|e2e:活动管理 | | `tests/test-cases/vendor.md#TC-S-08-P` | 对账 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非本服务商资源操作被拒;核销码校验防冒用;跨商户数据隔离|e2e:结算 | | `tests/test-cases/vendor.md#TC-S-09-P` | 服务商集成/解析中台 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非本商户资源隔离,跨商户访问 403|e2e:服务商集成/解析中台 | | `tests/test-cases/vendor.md#TC-S-10-P` | 食谱库 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非本商户资源隔离,跨商户访问 403|e2e:食谱库 | | `tests/test-cases/vendor.md#TC-S-11-P` | 合规 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:非本商户资源隔离,跨商户访问 403|e2e:合规 | | `tests/test-cases/vendor.md#TC-S-N01` | 商品 | 服务商 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:列表 ≤ 2s;筛选生效|e2e:商品管理 | | `tests/test-cases/vendor.md#TC-S-N02` | 订单履约 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:查询 ≤ 2s;状态流转即时|e2e:订单服务 | | `tests/test-cases/vendor.md#TC-S-N03` | 入驻 | 服务商 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:表单布局正常;上传兼容|e2e:服务商后台 | | `tests/test-cases/vendor.md#TC-S-N04` | 订单履约 | 服务商 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:返回 403(跨商户隔离);不泄露他商数据|e2e:商户隔离 | | `tests/test-cases/vendor.md#TC-S-N05` | 报告解析接入 | 服务商 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:类型/大小校验;不执行;存储隔离|e2e:上传校验 | | `tests/test-cases/vendor.md#TC-S-N06` | 营养食谱 | 服务商 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:内容转义存储/渲染;不执行|e2e:内容安全 | ## 三、Playwright 端到端/集成(`tests/*.md`) | 来源 | 用例数 | 自动化状态 | 执行状态 | 备注 | | --- | --- | --- | --- | --- | | `tests/e2e/_smoke_browser.spec.js` | 2 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/activity-registration.spec.js` | 5 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/admin-activity-review.spec.js` | 2 | 已自动化(e2e) | 通过 | — | | `tests/e2e/admin-butler-review.spec.js` | 6 | 已自动化(e2e) | 失败 | — | | `tests/e2e/admin-commission-config.spec.js` | 4 | 已自动化(e2e) | 失败 | — | | `tests/e2e/admin-ecom-supplier.spec.js` | 3 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/admin-menu-survey.spec.js` | 2 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/admin-panel.spec.js` | 4 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/admin-promotion-config.spec.js` | 2 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/ai-plan-task-flow.spec.js` | 7 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/api/api-smoke.spec.js` | 4 | 已自动化(e2e) | 通过 | — | | `tests/e2e/api/article-api.spec.js` | 7 | 已自动化(e2e) | 通过 | — | | `tests/e2e/api/contact-api.spec.js` | 6 | 已自动化(e2e) | 通过 | — | | `tests/e2e/api/energy-api.spec.js` | 8 | 已自动化(e2e) | 通过 | — | | `tests/e2e/api/family-member-api.spec.js` | 14 | 已自动化(e2e) | 通过 | — | | `tests/e2e/api/nonfunc-perf-compat.spec.js` | 5 | 已自动化(e2e) | 通过 | — | | `tests/e2e/api/nonfunc-security.spec.js` | 11 | 已自动化(e2e) | 失败 | — | | `tests/e2e/article-management.spec.js` | 5 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/assessment-appointment-functional.spec.js` | 7 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/assessment-appointment.spec.js` | 6 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/assessment-order-flow.spec.js` | 5 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/consignee-management.spec.js` | 8 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/contact-management.spec.js` | 4 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/daily-checkin-streak.spec.js` | 9 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/dan-assessment-vendor-flow.spec.js` | 10 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/dan-report-flow.spec.js` | 9 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/debug-admin-spa.spec.js` | 1 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/debug-control.spec.js` | 1 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/debug-full-instrument.spec.js` | 1 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/energy-rules-config.spec.js` | 4 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/energy-system.spec.js` | 8 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/family-earnings-flow.spec.js` | 6 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/family-member-management.spec.js` | 10 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/flora-microbiome-flow.spec.js` | 9 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/growth-record-sync.spec.js` | 8 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/guide-family-list.spec.js` | 7 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/health-knowledge-base.spec.js` | 4 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/health-report-audit.spec.js` | 8 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/mass-create-users.spec.js` | 1 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/membership-system.spec.js` | 3 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/mini-games-full.spec.js` | 5 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/mini-games-playwright.spec.js` | 12 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/mini-games.spec.js` | 14 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/nutritionist-apply.spec.js` | 3 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/nutritionist-flow.spec.js` | 10 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/planner-bind-invite.spec.js` | 9 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/points-system.spec.js` | 4 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/product-purchase.spec.js` | 9 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/publish-dimension-articles.spec.js` | 1 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/roles/admin/article/workflow.spec.js` | 4 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/roles/admin/login.spec.js` | 2 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/roles/admin/vendor/management.spec.js` | 2 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/roles/child/daily-checkin.spec.js` | 3 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/roles/child/login.spec.js` | 2 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/roles/child/mini-games.spec.js` | 3 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/roles/parent/assessment-order.spec.js` | 6 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/roles/parent/energy-dashboard.spec.js` | 5 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/roles/parent/family-management.spec.js` | 8 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/roles/parent/points.spec.js` | 6 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/roles/parent/wish-management.spec.js` | 5 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/roles/teacher/family-binding.spec.js` | 4 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/roles/teacher/login.spec.js` | 2 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/teacher-dashboard.spec.js` | 10 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/unified-audit-center.spec.js` | 8 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/vendor-onboarding.spec.js` | 3 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/vendor-product-manage.spec.js` | 8 | 已自动化(e2e) | 未跟踪 | — | | `tests/e2e/wish-exchange-flow.spec.js` | 12 | 已自动化(e2e) | 未跟踪 | — | | `tests/integration/mini-games-api.spec.js` | 13 | 已自动化(e2e) | 未跟踪 | — | | `tests/integration/plan-chain.spec.js` | 10 | 已自动化(e2e) | 未跟踪 | — | | `tests/unit/games/1a2b.spec.js` | 1 | 已自动化(e2e) | 未跟踪 | — | ## 四、Python 测试(`cfc-langgraph/tests · tools/xaf_agent_hub/tests`) | 来源 | 用例数 | 自动化状态 | 执行状态 | 备注 | | --- | --- | --- | --- | --- | | `cfc-langgraph/tests/qna/test_graph.py` | 4 | 已自动化(pytest) | 未跟踪 | — | | `cfc-langgraph/tests/test_analyze.py` | 2 | 已自动化(pytest) | 未跟踪 | — | | `cfc-langgraph/tests/test_auto_tag.py` | 5 | 已自动化(pytest) | 未跟踪 | — | | `cfc-langgraph/tests/test_chat.py` | 1 | 已自动化(pytest) | 未跟踪 | — | | `cfc-langgraph/tests/test_graph.py` | 5 | 已自动化(pytest) | 未跟踪 | — | | `cfc-langgraph/tests/test_health_plan.py` | 13 | 已自动化(pytest) | 未跟踪 | — | | `cfc-langgraph/tests/test_intent.py` | 5 | 已自动化(pytest) | 未跟踪 | — | | `cfc-langgraph/tests/test_memory.py` | 3 | 已自动化(pytest) | 未跟踪 | — | | `cfc-langgraph/tests/test_recommend.py` | 3 | 已自动化(pytest) | 未跟踪 | — | | `cfc-langgraph/tests/test_report_parse.py` | 5 | 已自动化(pytest) | 未跟踪 | — | | `cfc-langgraph/tests/test_tongue.py` | 1 | 已自动化(pytest) | 未跟踪 | — | ## 五、Java 后端测试(`cfc-backend/src/test/java`) | 来源 | 用例数 | 自动化状态 | 执行状态 | 目标类 | | --- | --- | --- | --- | --- | | `cfc-backend/src/test/java/com/etotem/cfc/common/AdminRolesTest.java` | 9 | 已自动化(@Test) | 通过 | AdminRoles | | `cfc-backend/src/test/java/com/etotem/cfc/common/ResultCodeFactoryTest.java` | 11 | 已自动化(@Test) | 未跟踪 | ResultCodeFactory | | `cfc-backend/src/test/java/com/etotem/cfc/common/TestRoles.java` | 0 | 已自动化(@Test) | 未跟踪 | TestRoles.java | | `cfc-backend/src/test/java/com/etotem/cfc/config/AttributionStage1FoundationTest.java` | 7 | 已自动化(@Test) | 通过 | AttributionStage1Foundation | | `cfc-backend/src/test/java/com/etotem/cfc/config/DatabaseInitializerSeedTest.java` | 6 | 已自动化(@Test) | 通过 | DatabaseInitializerSeed | | `cfc-backend/src/test/java/com/etotem/cfc/config/FamilyAccessInterceptorTest.java` | 11 | 已自动化(@Test) | 通过 | FamilyAccessInterceptor | | `cfc-backend/src/test/java/com/etotem/cfc/config/JwtInterceptorLoginRequiredTest.java` | 5 | 已自动化(@Test) | 通过 | JwtInterceptorLoginRequired | | `cfc-backend/src/test/java/com/etotem/cfc/controller/AttributionControllerTest.java` | 1 | 已自动化(@Test) | 通过 | AttributionController | | `cfc-backend/src/test/java/com/etotem/cfc/controller/AttributionSurveyRoutingTest.java` | 3 | 已自动化(@Test) | 通过 | AttributionSurveyRouting | | `cfc-backend/src/test/java/com/etotem/cfc/controller/DanAssessmentControllerGetActiveMaterialTest.java` | 3 | 已自动化(@Test) | 未跟踪 | DanAssessmentControllerGetActiveMaterial | | `cfc-backend/src/test/java/com/etotem/cfc/controller/EnergyControllerGrantEnergyTest.java` | 3 | 已自动化(@Test) | 未跟踪 | EnergyControllerGrantEnergy | | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthCheckinCfEarnCallSiteTest.java` | 6 | 已自动化(@Test) | 未跟踪 | HealthCheckinCfEarnCallSite | | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthPlanDeleteControllerTest.java` | 6 | 已自动化(@Test) | 未跟踪 | HealthPlanDeleteController | | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthReportControllerCreateReportTest.java` | 5 | 已自动化(@Test) | 未跟踪 | HealthReportControllerCreateReport | | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthReportControllerListPaginationTest.java` | 4 | 已自动化(@Test) | 未跟踪 | HealthReportControllerListPagination | | `cfc-backend/src/test/java/com/etotem/cfc/controller/HealthReportControllerProxyParseBindingTest.java` | 6 | 已自动化(@Test) | 未跟踪 | HealthReportControllerProxyParseBinding | | `cfc-backend/src/test/java/com/etotem/cfc/controller/IndicatorControllerTest.java` | 2 | 已自动化(@Test) | 未跟踪 | IndicatorController | | `cfc-backend/src/test/java/com/etotem/cfc/controller/IndicatorFavoriteControllerTest.java` | 10 | 已自动化(@Test) | 未跟踪 | IndicatorFavoriteController | | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthControllerLoginStatusTest.java` | 10 | 已自动化(@Test) | 未跟踪 | AdminAuthControllerLoginStatus | | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminAuthWechatScanTest.java` | 11 | 已自动化(@Test) | 未跟踪 | AdminAuthWechatScan | | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminButlerControllerEnvelopeTest.java` | 4 | 已自动化(@Test) | 未跟踪 | AdminButlerControllerEnvelope | | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminCommissionConfigControllerTest.java` | 5 | 已自动化(@Test) | 未跟踪 | AdminCommissionConfigController | | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/AdminProductControllerBatchShelveTest.java` | 4 | 已自动化(@Test) | 通过 | AdminProductControllerBatchShelve | | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/ReportParserAdminControllerTest.java` | 3 | 已自动化(@Test) | 通过 | ReportParserAdminController | | `cfc-backend/src/test/java/com/etotem/cfc/controller/admin/SupplyTeamControllerInviteTest.java` | 7 | 已自动化(@Test) | 未跟踪 | SupplyTeamControllerInvite | | `cfc-backend/src/test/java/com/etotem/cfc/controller/ai/AIChatControllerGateTest.java` | 18 | 已自动化(@Test) | 未跟踪 | AIChatControllerGate | | `cfc-backend/src/test/java/com/etotem/cfc/controller/ai/ButlerControllerGateTest.java` | 9 | 已自动化(@Test) | 未跟踪 | ButlerControllerGate | | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerAddMemberTest.java` | 7 | 已自动化(@Test) | 未跟踪 | FamilyMembersControllerAddMember | | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerListTest.java` | 4 | 已自动化(@Test) | 未跟踪 | FamilyMembersControllerList | | `cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerRenameFamilyTest.java` | 2 | 已自动化(@Test) | 未跟踪 | FamilyMembersControllerRenameFamily | | `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TeacherMessageControllerMyTest.java` | 1 | 已自动化(@Test) | 通过 | TeacherMessageControllerMy | | `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TrainingPlanControllerGetPlanDetailTest.java` | 8 | 已自动化(@Test) | 未跟踪 | TrainingPlanControllerGetPlanDetail | | `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TrainingPlanControllerGetPlanListTest.java` | 10 | 已自动化(@Test) | 通过 | TrainingPlanControllerGetPlanList | | `cfc-backend/src/test/java/com/etotem/cfc/dto/ActivityDTOTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ActivityDTO | | `cfc-backend/src/test/java/com/etotem/cfc/integration/DailyCheckinStreakFlowTest.java` | 6 | 已自动化(@Test) | 未跟踪 | DailyCheckinStreakFlow | | `cfc-backend/src/test/java/com/etotem/cfc/integration/EnergySystemFlowTest.java` | 7 | 已自动化(@Test) | 未跟踪 | EnergySystemFlow | | `cfc-backend/src/test/java/com/etotem/cfc/integration/GrowthRecordSyncFlowTest.java` | 10 | 已自动化(@Test) | 未跟踪 | GrowthRecordSyncFlow | | `cfc-backend/src/test/java/com/etotem/cfc/integration/GuideModuleIntegrationTest.java` | 4 | 已自动化(@Test) | 未跟踪 | GuideModule | | `cfc-backend/src/test/java/com/etotem/cfc/integration/PlannerBindInviteFlowTest.java` | 9 | 已自动化(@Test) | 未跟踪 | PlannerBindInviteFlow | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AIChatControllerTest.java` | 17 | 已自动化(@Test) | 通过 | AIChatController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ActivityControllerTest.java` | 16 | 已自动化(@Test) | 通过 | ActivityController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AdminFamilyOverviewControllerTest.java` | 3 | 已自动化(@Test) | 未跟踪 | AdminFamilyOverviewController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AdminSpecialPriceControllerTest.java` | 8 | 已自动化(@Test) | 未跟踪 | AdminSpecialPriceController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ArticleCategoryControllerTest.java` | 3 | 已自动化(@Test) | 通过 | ArticleCategoryController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ArticleControllerTest.java` | 11 | 已自动化(@Test) | 失败 | ArticleController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AuthControllerTest.java` | 39 | 已自动化(@Test) | 失败 | AuthController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DailyTaskControllerTest.java` | 2 | 已自动化(@Test) | 通过 | DailyTaskController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DimensionAdminControllerTest.java` | 13 | 已自动化(@Test) | 未跟踪 | DimensionAdminController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DimensionRegistryMapContractTest.java` | 7 | 已自动化(@Test) | 未跟踪 | DimensionRegistryMapContract | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DimensionRegistryTreeTest.java` | 9 | 已自动化(@Test) | 未跟踪 | DimensionRegistryTree | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/FamilyControllerTest.java` | 8 | 已自动化(@Test) | 未跟踪 | FamilyController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideFamilyTaskControllerTest.java` | 20 | 已自动化(@Test) | 未跟踪 | GuideFamilyTaskController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideOrderControllerTest.java` | 8 | 已自动化(@Test) | 未跟踪 | GuideOrderController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideRolePermissionTest.java` | 21 | 已自动化(@Test) | 未跟踪 | GuideRolePermission | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideTeamControllerTest.java` | 9 | 已自动化(@Test) | 未跟踪 | GuideTeamController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/HealthDimensionControllerTest.java` | 15 | 已自动化(@Test) | 未跟踪 | HealthDimensionController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/PaymentControllerTest.java` | 12 | 已自动化(@Test) | 未跟踪 | PaymentController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ProductControllerTest.java` | 16 | 已自动化(@Test) | 未跟踪 | ProductController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ProductOrderControllerTest.java` | 20 | 已自动化(@Test) | 未跟踪 | ProductOrderController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/SpecialPriceControllerTest.java` | 3 | 已自动化(@Test) | 未跟踪 | SpecialPriceController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/StatsControllerTest.java` | 6 | 已自动化(@Test) | 未跟踪 | StatsController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/WishControllerTest.java` | 29 | 已自动化(@Test) | 未跟踪 | WishController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/mind/MindFortuneControllerTest.java` | 1 | 已自动化(@Test) | 未跟踪 | MindFortuneController | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ActivityAdminServiceTest.java` | 10 | 已自动化(@Test) | 未跟踪 | ActivityAdminService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ActivityServicePublishTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ActivityServicePublish | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ArticleWorkflowTest.java` | 14 | 已自动化(@Test) | 未跟踪 | ArticleWorkflow | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ChallengeScoreServiceTest.java` | 4 | 已自动化(@Test) | 未跟踪 | ChallengeScoreService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DailyOverviewServiceTest.java` | 1 | 已自动化(@Test) | 未跟踪 | DailyOverviewService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DanReportParseServiceTest.java` | 38 | 已自动化(@Test) | 未跟踪 | DanReportParseService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DataMigrationServiceTest.java` | 11 | 已自动化(@Test) | 未跟踪 | DataMigrationService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DimensionEnergySyncServiceTest.java` | 5 | 已自动化(@Test) | 未跟踪 | DimensionEnergySyncService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/DimensionScoreServiceTest.java` | 21 | 已自动化(@Test) | 未跟踪 | DimensionScoreService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FamilyFoodOverviewServiceTest.java` | 9 | 已自动化(@Test) | 未跟踪 | FamilyFoodOverviewService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FiveDimensionSelfCheckServiceTest.java` | 2 | 已自动化(@Test) | 未跟踪 | FiveDimensionSelfCheckService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FoodRecommendServiceTest.java` | 21 | 已自动化(@Test) | 未跟踪 | FoodRecommendService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FoodServiceTest.java` | 12 | 已自动化(@Test) | 未跟踪 | FoodService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/FortuneServiceTest.java` | 4 | 已自动化(@Test) | 未跟踪 | FortuneService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuideApplicationServiceTest.java` | 8 | 已自动化(@Test) | 未跟踪 | GuideApplicationService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuideFamilyServiceTest.java` | 7 | 已自动化(@Test) | 未跟踪 | GuideFamilyService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuideHierarchyServiceTest.java` | 10 | 已自动化(@Test) | 未跟踪 | GuideHierarchyService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuidePackageServiceTest.java` | 13 | 已自动化(@Test) | 未跟踪 | GuidePackageService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuidePackageTemplateServiceTest.java` | 6 | 已自动化(@Test) | 未跟踪 | GuidePackageTemplateService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/MiniGameServiceTest.java` | 5 | 已自动化(@Test) | 未跟踪 | MiniGameService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/NutritionDeficiencyServiceTest.java` | 14 | 已自动化(@Test) | 未跟踪 | NutritionDeficiencyService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/PdfParseServiceTest.java` | 11 | 已自动化(@Test) | 未跟踪 | PdfParseService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/RelationshipQuestionnaireServiceTest.java` | 5 | 已自动化(@Test) | 未跟踪 | RelationshipQuestionnaireService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ReportBlockAssemblerTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ReportBlockAssembler | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ServiceContentServiceTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ServiceContentService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ServiceTypeServiceTest.java` | 4 | 已自动化(@Test) | 未跟踪 | ServiceTypeService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/SupplySystemServiceTest.java` | 18 | 已自动化(@Test) | 未跟踪 | SupplySystemService | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/TaskServiceMinigameTest.java` | 5 | 已自动化(@Test) | 未跟踪 | TaskServiceMinigame | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/TeacherLoginTest.java` | 4 | 已自动化(@Test) | 未跟踪 | TeacherLogin | | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/impl/DimensionScoreServiceImplTest.java` | 6 | 已自动化(@Test) | 未跟踪 | DimensionScoreServiceImpl | | `cfc-backend/src/test/java/com/etotem/cfc/orchestration/OrchestrationEngineTest.java` | 8 | 已自动化(@Test) | 未跟踪 | OrchestrationEngine | | `cfc-backend/src/test/java/com/etotem/cfc/orchestration/OrchestrationIntegrationTest.java` | 7 | 已自动化(@Test) | 未跟踪 | Orchestration | | `cfc-backend/src/test/java/com/etotem/cfc/service/ActivityOrderServiceTest.java` | 15 | 已自动化(@Test) | 未跟踪 | ActivityOrderService | | `cfc-backend/src/test/java/com/etotem/cfc/service/ActivityRegistrationQuotaConcurrencyTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ActivityRegistrationQuotaConcurrency | | `cfc-backend/src/test/java/com/etotem/cfc/service/AiGatewayTimeoutTest.java` | 1 | 已自动化(@Test) | 未跟踪 | AiGatewayTimeout | | `cfc-backend/src/test/java/com/etotem/cfc/service/ArticleAudioServiceChunkFilterTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ArticleAudioServiceChunkFilter | | `cfc-backend/src/test/java/com/etotem/cfc/service/CfBalanceServiceTest.java` | 25 | 已自动化(@Test) | 未跟踪 | CfBalanceService | | `cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceSettleTest.java` | 12 | 已自动化(@Test) | 未跟踪 | CfCommissionServiceSettle | | `cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceTest.java` | 2 | 已自动化(@Test) | 未跟踪 | CfCommissionService | | `cfc-backend/src/test/java/com/etotem/cfc/service/CfEarnDispatchServiceTest.java` | 8 | 已自动化(@Test) | 未跟踪 | CfEarnDispatchService | | `cfc-backend/src/test/java/com/etotem/cfc/service/CfGrowthPathwayEarnServiceTest.java` | 16 | 已自动化(@Test) | 未跟踪 | CfGrowthPathwayEarnService | | `cfc-backend/src/test/java/com/etotem/cfc/service/CfLegacyLedgerMigrationServiceTest.java` | 3 | 已自动化(@Test) | 未跟踪 | CfLegacyLedgerMigrationService | | `cfc-backend/src/test/java/com/etotem/cfc/service/CfLegacyLedgerWiringTest.java` | 5 | 已自动化(@Test) | 未跟踪 | CfLegacyLedgerWiring | | `cfc-backend/src/test/java/com/etotem/cfc/service/CfPathwayEarnServiceTest.java` | 32 | 已自动化(@Test) | 未跟踪 | CfPathwayEarnService | | `cfc-backend/src/test/java/com/etotem/cfc/service/CfReferralServiceSalesTierTest.java` | 11 | 已自动化(@Test) | 未跟踪 | CfReferralServiceSalesTier | | `cfc-backend/src/test/java/com/etotem/cfc/service/CfSpendDispatchServiceTest.java` | 11 | 已自动化(@Test) | 未跟踪 | CfSpendDispatchService | | `cfc-backend/src/test/java/com/etotem/cfc/service/CfTransferServiceTest.java` | 6 | 已自动化(@Test) | 未跟踪 | CfTransferService | | `cfc-backend/src/test/java/com/etotem/cfc/service/CommissionDistService410Test.java` | 4 | 已自动化(@Test) | 未跟踪 | CommissionDistService410 | | `cfc-backend/src/test/java/com/etotem/cfc/service/CommissionServiceReferralF24Test.java` | 5 | 已自动化(@Test) | 未跟踪 | CommissionServiceReferralF24 | | `cfc-backend/src/test/java/com/etotem/cfc/service/ConsigneeServiceBackfillTest.java` | 2 | 已自动化(@Test) | 未跟踪 | ConsigneeServiceBackfill | | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceFamilyTest.java` | 2 | 已自动化(@Test) | 未跟踪 | EnergyServiceFamily | | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceGrantEnergyTest.java` | 2 | 已自动化(@Test) | 未跟踪 | EnergyServiceGrantEnergy | | `cfc-backend/src/test/java/com/etotem/cfc/service/EnergyServiceWealthIncomeTest.java` | 4 | 已自动化(@Test) | 未跟踪 | EnergyServiceWealthIncome | | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyAdminOverviewServiceTest.java` | 3 | 已自动化(@Test) | 未跟踪 | FamilyAdminOverviewService | | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyJoinRequestServiceReferrerBindTest.java` | 5 | 已自动化(@Test) | 未跟踪 | FamilyJoinRequestServiceReferrerBind | | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyMemberServiceIsChildTest.java` | 5 | 已自动化(@Test) | 未跟踪 | FamilyMemberServiceIsChild | | `cfc-backend/src/test/java/com/etotem/cfc/service/FamilyPlatformPointsServiceCouponTest.java` | 5 | 已自动化(@Test) | 未跟踪 | FamilyPlatformPointsServiceCoupon | | `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceAuditConfirmTest.java` | 8 | 已自动化(@Test) | 未跟踪 | HealthReportServiceAuditConfirm | | `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceBackfillResilienceTest.java` | 5 | 已自动化(@Test) | 未跟踪 | HealthReportServiceBackfillResilience | | `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceIndicatorsTest.java` | 3 | 已自动化(@Test) | 未跟踪 | HealthReportServiceIndicators | | `cfc-backend/src/test/java/com/etotem/cfc/service/HealthReportServiceTest.java` | 8 | 已自动化(@Test) | 未跟踪 | HealthReportService | | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorChangeServiceSemanticTest.java` | 20 | 已自动化(@Test) | 未跟踪 | IndicatorChangeServiceSemantic | | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorChangeServiceTest.java` | 23 | 已自动化(@Test) | 未跟踪 | IndicatorChangeService | | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorCorrelationServiceTest.java` | 1 | 已自动化(@Test) | 未跟踪 | IndicatorCorrelationService | | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorFavoriteServiceTest.java` | 6 | 已自动化(@Test) | 未跟踪 | IndicatorFavoriteService | | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorMappingServiceTest.java` | 4 | 已自动化(@Test) | 未跟踪 | IndicatorMappingService | | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorTimelineServiceTest.java` | 12 | 已自动化(@Test) | 未跟踪 | IndicatorTimelineService | | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorTrendServiceTest.java` | 9 | 已自动化(@Test) | 未跟踪 | IndicatorTrendService | | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorValueMapperTest.java` | 1 | 已自动化(@Test) | 未跟踪 | IndicatorValueMapper | | `cfc-backend/src/test/java/com/etotem/cfc/service/MembershipPaySwitchTest.java` | 6 | 已自动化(@Test) | 未跟踪 | MembershipPaySwitch | | `cfc-backend/src/test/java/com/etotem/cfc/service/MembershipServiceAiGateTest.java` | 12 | 已自动化(@Test) | 未跟踪 | MembershipServiceAiGate | | `cfc-backend/src/test/java/com/etotem/cfc/service/MembershipServiceTest.java` | 17 | 已自动化(@Test) | 未跟踪 | MembershipService | | `cfc-backend/src/test/java/com/etotem/cfc/service/NormalizeIndicatorPipelineTest.java` | 3 | 已自动化(@Test) | 未跟踪 | NormalizeIndicatorPipeline | | `cfc-backend/src/test/java/com/etotem/cfc/service/NumSoulCalculatorTest.java` | 5 | 已自动化(@Test) | 未跟踪 | NumSoulCalculator | | `cfc-backend/src/test/java/com/etotem/cfc/service/PaymentServiceORDRoutingTest.java` | 3 | 已自动化(@Test) | 未跟踪 | PaymentServiceORDRouting | | `cfc-backend/src/test/java/com/etotem/cfc/service/PlatformPointsServiceTest.java` | 9 | 已自动化(@Test) | 未跟踪 | PlatformPointsService | | `cfc-backend/src/test/java/com/etotem/cfc/service/PointsExchangeServiceTest.java` | 4 | 已自动化(@Test) | 未跟踪 | PointsExchangeService | | `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceFulfillmentMultiModeTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ProductOrderServiceFulfillmentMultiMode | | `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceSpecialDealTest.java` | 8 | 已自动化(@Test) | 未跟踪 | ProductOrderServiceSpecialDeal | | `cfc-backend/src/test/java/com/etotem/cfc/service/ProductOrderServiceUpdateExpressFieldTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ProductOrderServiceUpdateExpressField | | `cfc-backend/src/test/java/com/etotem/cfc/service/RealNameBackfillServiceTest.java` | 8 | 已自动化(@Test) | 未跟踪 | RealNameBackfillService | | `cfc-backend/src/test/java/com/etotem/cfc/service/ReportAnalyzeQuotaServiceTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ReportAnalyzeQuotaService | | `cfc-backend/src/test/java/com/etotem/cfc/service/ReportDateExtractorTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ReportDateExtractor | | `cfc-backend/src/test/java/com/etotem/cfc/service/ReportSummaryServiceCompletenessTest.java` | 1 | 已自动化(@Test) | 未跟踪 | ReportSummaryServiceCompleteness | | `cfc-backend/src/test/java/com/etotem/cfc/service/SpecialPriceServiceTest.java` | 9 | 已自动化(@Test) | 未跟踪 | SpecialPriceService | | `cfc-backend/src/test/java/com/etotem/cfc/service/TaskServiceCfEarnTest.java` | 4 | 已自动化(@Test) | 未跟踪 | TaskServiceCfEarn | | `cfc-backend/src/test/java/com/etotem/cfc/service/TencentTtsServiceAuthorizationTest.java` | 4 | 已自动化(@Test) | 未跟踪 | TencentTtsServiceAuthorization | | `cfc-backend/src/test/java/com/etotem/cfc/service/UserAddressServiceBackfillTest.java` | 2 | 已自动化(@Test) | 未跟踪 | UserAddressServiceBackfill | | `cfc-backend/src/test/java/com/etotem/cfc/service/UserServiceEffectiveFamilyIdsTest.java` | 5 | 已自动化(@Test) | 未跟踪 | UserServiceEffectiveFamilyIds | | `cfc-backend/src/test/java/com/etotem/cfc/service/UserServiceFamilyNameLinkTest.java` | 2 | 已自动化(@Test) | 未跟踪 | UserServiceFamilyNameLink | | `cfc-backend/src/test/java/com/etotem/cfc/service/WishServiceTest.java` | 4 | 已自动化(@Test) | 未跟踪 | WishService | | `cfc-backend/src/test/java/com/etotem/cfc/service/WithdrawalServiceTest.java` | 6 | 已自动化(@Test) | 未跟踪 | WithdrawalService | | `cfc-backend/src/test/java/com/etotem/cfc/service/impl/CfGrowthEarnCallSiteTest.java` | 4 | 已自动化(@Test) | 未跟踪 | CfGrowthEarnCallSite | | `cfc-backend/src/test/java/com/etotem/cfc/service/impl/PurchaseServiceImplRenewalTest.java` | 4 | 已自动化(@Test) | 未跟踪 | PurchaseServiceImplRenewal | | `cfc-backend/src/test/java/com/etotem/cfc/task/OrderTimeoutCancelTaskSpecialDealTest.java` | 3 | 已自动化(@Test) | 未跟踪 | OrderTimeoutCancelTaskSpecialDeal | | `cfc-backend/src/test/java/com/etotem/cfc/task/TaskCheckinWebhookReminderTaskTest.java` | 7 | 已自动化(@Test) | 未跟踪 | TaskCheckinWebhookReminderTask | | `cfc-backend/src/test/java/com/etotem/cfc/task/VirtualPayTimeoutTaskTest.java` | 5 | 已自动化(@Test) | 未跟踪 | VirtualPayTimeoutTask | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityAuditTest.java` | 10 | 已自动化(@Test) | 未跟踪 | ActivityAudit | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationListTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ActivityRegistrationList | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationQuotaUnitTest.java` | 8 | 已自动化(@Test) | 未跟踪 | ActivityRegistrationQuotaUnit | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityRegistrationRejectTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ActivityRegistrationReject | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTagServiceTest.java` | 5 | 已自动化(@Test) | 未跟踪 | ActivityTagService | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ActivityTeamServiceUnitTest.java` | 12 | 已自动化(@Test) | 未跟踪 | ActivityTeamServiceUnit | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleAutoTagServiceTest.java` | 8 | 已自动化(@Test) | 未跟踪 | ArticleAutoTagService | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleBackfillTest.java` | 2 | 已自动化(@Test) | 未跟踪 | ArticleBackfill | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleRelatedServiceTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ArticleRelatedService | | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionAdjustServiceTest.java` | 5 | 已自动化(@Test) | 未跟踪 | AttributionAdjustService | | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPipelineMockTest.java` | 2 | 已自动化(@Test) | 未跟踪 | AttributionPipelineMock | | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionPlanServiceTest.java` | 2 | 已自动化(@Test) | 未跟踪 | AttributionPlanService | | `cfc-backend/src/test/java/com/etotem/cfc/unit/AttributionRedlinesTest.java` | 8 | 已自动化(@Test) | 未跟踪 | AttributionRedlines | | `cfc-backend/src/test/java/com/etotem/cfc/unit/CartReplaceComboTest.java` | 5 | 已自动化(@Test) | 未跟踪 | CartReplaceCombo | | `cfc-backend/src/test/java/com/etotem/cfc/unit/CfBalanceControllerTest.java` | 8 | 已自动化(@Test) | 未跟踪 | CfBalanceController | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOfferCalculatorTest.java` | 8 | 已自动化(@Test) | 未跟踪 | ComboOfferCalculator | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboOrderStockTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ComboOrderStock | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ComboServiceTest.java` | 10 | 已自动化(@Test) | 未跟踪 | ComboService | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ConditionEvaluatorServiceTest.java` | 12 | 已自动化(@Test) | 未跟踪 | ConditionEvaluatorService | | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberDimensionBaseScoreServiceTest.java` | 7 | 已自动化(@Test) | 未跟踪 | FamilyMemberDimensionBaseScoreService | | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberServiceRenameTest.java` | 4 | 已自动化(@Test) | 未跟踪 | FamilyMemberServiceRename | | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyNamingSupportTest.java` | 5 | 已自动化(@Test) | 未跟踪 | FamilyNamingSupport | | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionScoreServiceTest.java` | 12 | 已自动化(@Test) | 未跟踪 | FiveDimensionScoreService | | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideFamilyAccessGuardTest.java` | 9 | 已自动化(@Test) | 未跟踪 | GuideFamilyAccessGuard | | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideFamilyQueryServiceTest.java` | 4 | 已自动化(@Test) | 未跟踪 | GuideFamilyQueryService | | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuideFamilyServiceBindTest.java` | 3 | 已自动化(@Test) | 未跟踪 | GuideFamilyServiceBind | | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuidePlanReviewControllerAuthTest.java` | 6 | 已自动化(@Test) | 未跟踪 | GuidePlanReviewControllerAuth | | `cfc-backend/src/test/java/com/etotem/cfc/unit/HealthPlanDeleteCascadeTest.java` | 6 | 已自动化(@Test) | 未跟踪 | HealthPlanDeleteCascade | | `cfc-backend/src/test/java/com/etotem/cfc/unit/HealthPlanLazyBackfillTest.java` | 5 | 已自动化(@Test) | 未跟踪 | HealthPlanLazyBackfill | | `cfc-backend/src/test/java/com/etotem/cfc/unit/HealthPlanReviewGuardTest.java` | 10 | 已自动化(@Test) | 未跟踪 | HealthPlanReviewGuard | | `cfc-backend/src/test/java/com/etotem/cfc/unit/KnowledgeBaseBackfillTest.java` | 9 | 已自动化(@Test) | 未跟踪 | KnowledgeBaseBackfill | | `cfc-backend/src/test/java/com/etotem/cfc/unit/MemberPriceResolverTest.java` | 6 | 已自动化(@Test) | 未跟踪 | MemberPriceResolver | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductDTOMappingTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ProductDTOMapping | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductListNutritionTagFilterTest.java` | 2 | 已自动化(@Test) | 未跟踪 | ProductListNutritionTagFilter | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductUpdateClearTest.java` | 5 | 已自动化(@Test) | 未跟踪 | ProductUpdateClear | | `cfc-backend/src/test/java/com/etotem/cfc/unit/RecommendationNutritionTagTest.java` | 1 | 已自动化(@Test) | 未跟踪 | RecommendationNutritionTag | | `cfc-backend/src/test/java/com/etotem/cfc/unit/RepeatTaskGeneratorPassThroughTest.java` | 3 | 已自动化(@Test) | 未跟踪 | RepeatTaskGeneratorPassThrough | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ReviewCenterSummaryTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ReviewCenterSummary | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ServiceRoleApproveTest.java` | 6 | 已自动化(@Test) | 未跟踪 | ServiceRoleApprove | | `cfc-backend/src/test/java/com/etotem/cfc/unit/ServiceRoleFilterTest.java` | 3 | 已自动化(@Test) | 未跟踪 | ServiceRoleFilter | | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskPlanServiceTest.java` | 4 | 已自动化(@Test) | 未跟踪 | TaskPlanService | | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskProgressUpdateTest.java` | 3 | 已自动化(@Test) | 未跟踪 | TaskProgressUpdate | | `cfc-backend/src/test/java/com/etotem/cfc/util/CfFormulaEvaluatorTest.java` | 8 | 已自动化(@Test) | 未跟踪 | CfFormulaEvaluator | | `cfc-backend/src/test/java/com/etotem/cfc/util/SpearmanUtilTest.java` | 6 | 已自动化(@Test) | 未跟踪 | SpearmanUtil | | `cfc-backend/src/test/java/com/etotem/cfc/util/UserUtilTest.java` | 6 | 已自动化(@Test) | 未跟踪 | UserUtil | ## 六、用户场景(`tests/user-scenarios/*.md`,上游输入) | 来源 | 用例数 | 自动化状态 | 执行状态 | 备注 | | --- | --- | --- | --- | --- | | `tests/user-scenarios/01-guest.md` | 文件级 | 用户场景(待自动化) | 未跟踪 | 场景标题约 13 个 | | `tests/user-scenarios/02-parent.md` | 文件级 | 用户场景(待自动化) | 未跟踪 | 场景标题约 87 个 | | `tests/user-scenarios/03-child.md` | 文件级 | 用户场景(待自动化) | 未跟踪 | 场景标题约 23 个 | | `tests/user-scenarios/04-teacher.md` | 文件级 | 用户场景(待自动化) | 未跟踪 | 场景标题约 30 个 | | `tests/user-scenarios/05-admin.md` | 文件级 | 用户场景(待自动化) | 未跟踪 | 场景标题约 23 个 | | `tests/user-scenarios/06-vendor.md` | 文件级 | 用户场景(待自动化) | 未跟踪 | 场景标题约 12 个 | | `tests/user-scenarios/07-five-dimension.md` | 文件级 | 用户场景(待自动化) | 未跟踪 | 场景标题约 18 个 | | `tests/user-scenarios/README.md` | 文件级 | 用户场景(待自动化) | 未跟踪 | 场景标题约 5 个 | | `tests/user-scenarios/应用场景总览.md` | 文件级 | 用户场景(待自动化) | 未跟踪 | 场景标题约 29 个 | ## 七、回写与发布流程(本地侧车 → 共享台账) 1. **本地工作(私有,不推送)**:在 `.tdd/test-progress.json` 的 `progress[anchor]` 写执行状态。 - `anchor` = `source_path#local_id`(如 `tests/test-cases/admin.md#TC-A-01`)。 - 重新播种 anchors(保留已有 progress):`python test_inventory.py --emit-progress`。 2. **发布共享(推送给测试团队)**:运行本脚本(默认即生成此文件),把 `docs/tdd/` 下文档提交推送。 - 命令:`python test_inventory.py --automation-status`(或直接 `python test_inventory.py`)。 3. **原始用例零侵入**:`.md/.spec.js/.py/.java` 一律不改;`.tdd/` 已在 `.gitignore` 排除。