{
  "task": 106,
  "redmineIssue": 35,
  "round": "home-roles-staging-20261101-R1",
  "counts": {
    "Pass": 13,
    "Fail": 1,
    "Blocked": 1,
    "Skipped": 6
  },
  "cases": [
    {
      "id": "QA106-HOME-AUTH-ADMIN",
      "name": "admin真实密码UI登录并核身份",
      "status": "Pass",
      "impact": "IMP106-03/04/05/08",
      "layer": "真实UI认证＋profile API",
      "expected": "admin真实密码UI登录并核身份与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "正常BW登录/profile200/code200、active、id20/roleadmin；非admin冒充，未改账号。",
      "evidence": "admin-login.json；对应首页PNG/DOM",
      "defect": null
    },
    {
      "id": "QA106-HOME-AUTH-FINANCE",
      "name": "finance真实密码UI登录并核身份",
      "status": "Pass",
      "impact": "IMP106-03/04/05/08",
      "layer": "真实UI认证＋profile API",
      "expected": "finance真实密码UI登录并核身份与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "正常BW登录/profile200/code200、active、id19/rolefinance；非admin冒充，未改账号。",
      "evidence": "finance-login.json；对应首页PNG/DOM",
      "defect": null
    },
    {
      "id": "QA106-HOME-AUTH-PM",
      "name": "pm真实密码UI登录并核身份",
      "status": "Pass",
      "impact": "IMP106-03/04/05/08",
      "layer": "真实UI认证＋profile API",
      "expected": "pm真实密码UI登录并核身份与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "正常BW登录/profile200/code200、active、id16/rolepm；非admin冒充，未改账号。",
      "evidence": "pm-login.json；对应首页PNG/DOM",
      "defect": null
    },
    {
      "id": "QA106-HOME-ADMIN-HOME",
      "name": "管理员首页统计和7/30天专家排名",
      "status": "Pass",
      "impact": "IMP106-03/04/05/08",
      "layer": "真实staging UI/API＋离线算式",
      "expected": "管理员首页统计和7/30天专家排名与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "本月新增专家0与dashboard一致；11月Call排名API空且UI有明确空态；7/30天切换请求200，合成专家574245访谈2次。未把11月空图说成非空验收。",
      "evidence": "admin-home-baseline.json；admin-home-30day.json；admin-home.png",
      "defect": null
    },
    {
      "id": "QA106-HOME-PM-HOME",
      "name": "PM首页参与/管理范围与专家排名",
      "status": "Pass",
      "impact": "IMP106-03/04/05/08",
      "layer": "真实staging UI/API＋离线算式",
      "expected": "PM首页参与/管理范围与专家排名与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "PM16首页提醒4条含本Task149实际1000/0，虽排除仍保留；项目involve→take和任务user_id16＋take请求200；7→30天真实切换，页面/响应排名一致。PM非TL不显示客户Call榜。",
      "evidence": "pm-home-loaded.json；pm-home-switches.json；pm-reminders.png；pm-rank-30day.png",
      "defect": null
    },
    {
      "id": "QA106-HOME-FINANCE-HOME",
      "name": "finance财务提示与出账项目空态",
      "status": "Pass",
      "impact": "IMP106-03/04/05/08",
      "layer": "真实staging UI/API＋离线算式",
      "expected": "finance财务提示与出账项目空态与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "finance19页面显示逾期0、出账0，两个实际API total_counts0；本月新增专家0。项目/任务工作台、提醒/专家榜和客户Call榜不显示。仅验证实际空态，未验证非空出账。",
      "evidence": "finance-home-loaded.json；finance-home-loaded.png",
      "defect": null
    },
    {
      "id": "QA106-HOME-ACCESS",
      "name": "PM/finance管理首页tab可见边界",
      "status": "Pass",
      "impact": "IMP106-03/04/05/08",
      "layer": "真实staging UI/API＋离线算式",
      "expected": "PM/finance管理首页tab可见边界与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "两种真实身份直达/admin均显示暂无可访问的数据中台内容；管理员可见7tab。此证据只证明UI权限边界，未执行越权写或全接口拒绝测试。",
      "evidence": "finance-admin-direct.json；pm-admin-direct.json；pm-admin-denied.png",
      "defect": null
    },
    {
      "id": "QA106-HOME-FINANCE-CHART",
      "name": "财务年度/月度表图70↔40及全排除",
      "status": "Pass",
      "impact": "IMP106-03",
      "layer": "真实staging UI/API＋离线算式",
      "expected": "财务年度/月度表图70↔40及全排除与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "公司15年度实际2000/600，月度图10月2000/600/2小时、其余月0；B计入70%，排除40%，A/B全排除基数0/0页面不适用。7条ECharts运行series与真实响应逐项相等；原实际金额不变。",
      "evidence": "admin-finance-{70,restored40,all-excluded}.json及-runtime/charts；finance三图",
      "defect": null
    },
    {
      "id": "QA106-HOME-PM-METRIC",
      "name": "PM真实收入/成本与独立毛利基数",
      "status": "Pass",
      "impact": "IMP106-04",
      "layer": "真实staging UI/API＋离线算式",
      "expected": "PM真实收入/成本与独立毛利基数与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "相同2026-05-01至11-01查询，PM16原收入2106/成本600保持，基数2106→1106，利润率独立算得71.51%→45.75%；其中106来自其他现有Task，不套项目70/40。另10月筛选也返回2106/600/45.75，截图标明该期间。",
      "evidence": "admin-pm-70.json；admin-pm-final-exact-october.json；admin-pm-70.png；admin-pm-exact-october-40.png",
      "defect": null
    },
    {
      "id": "QA106-HOME-SALES-CHART",
      "name": "管理员销售overview/company/monthly图表金额与毛利",
      "status": "Pass",
      "impact": "IMP106-05",
      "layer": "真实staging UI/API＋离线算式",
      "expected": "管理员销售overview/company/monthly图表金额与毛利与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "三个实际接口与ECharts收入/成本/毛利全部series数值对齐；公司15实际2000/600、70→40，10月聚合实际4106/600保持、85.39→80.68，分别按响应basis4106/600和3106/600算。管理员查看不替代sales身份权限；排除条数错误单列Fail。回款状态只观察表，未将其全量正确性计入此Pass。",
      "evidence": "admin-sales-{70,restored40}.json及-runtime.json；admin-sales-70.png；independent-review.json",
      "defect": null
    },
    {
      "id": "QA106-HOME-SALES-COUNT",
      "name": "全部销售聚合排除Task数应唯一计数",
      "status": "Fail",
      "impact": "IMP106-05",
      "layer": "真实staging UI/API＋离线算式",
      "expected": "全部销售聚合排除Task数应唯一计数与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "公司15双销售归属、仅Task149=true，销售company basis excluded_task_count=2，财务=1。金额/40%正确但排除数错误；源码每销售行赋1再累加。primary确认Backend唯一修复owner，尚未放行修复/部署。",
      "evidence": "defect-sales-count.json；Redmine38；admin-sales-restored40.json",
      "defect": 38
    },
    {
      "id": "QA106-HOME-RECRUIT",
      "name": "专家招募表真实月份数量",
      "status": "Pass",
      "impact": "IMP106-03/04/05/08",
      "layer": "真实staging UI/API＋离线算式",
      "expected": "专家招募表真实月份数量与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "补齐原响应与截图：10月新增39/首次访谈4，11月0/0；表逐行与7月度响应核对。仅验证已显示统计，不点击专家明细或造专家数据。",
      "evidence": "admin-recruitment-complete.json；admin-recruitment-complete.png",
      "defect": null
    },
    {
      "id": "QA106-HOME-CUSTOMER",
      "name": "客户Call图10月数据与客户筛选",
      "status": "Pass",
      "impact": "IMP106-03/04/05/08",
      "layer": "真实staging UI/API＋离线算式",
      "expected": "客户Call图10月数据与客户筛选与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "11月空→10月实际总6小时，响应计数2+2+1+1+0=6，与图series逐点一致；本公司15为2小时。客户名称筛选请求含QA106，返回仅company15一行，10月client/billable均2，原A/B各1小时独立对照。未点导出。",
      "evidence": "admin-customer-complete.json及-runtime；admin-customer-complete.png",
      "defect": null
    },
    {
      "id": "QA106-HOME-FLAG-INVARIANTS",
      "name": "仅原A/B标记往返及现场恢复",
      "status": "Pass",
      "impact": "IMP106-03/04/05/08",
      "layer": "真实staging UI/API＋离线算式",
      "expected": "仅原A/B标记往返及现场恢复与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "四次单字段TaskPUT200/code200、无成本写；同admin权限上下文完整其他Task字段与成本DTO相同，结束148false/149true并由PM只读确认。PM allowed_payment_transitions=[]与admin不同属角色能力，不是成本落库变化。未改金额/日期/归属/状态。",
      "evidence": "phase*-intent/response/after.json；fixture-baseline.json；final-fixture-readback.json；independent-review.json",
      "defect": null
    },
    {
      "id": "QA106-HOME-ROLE-PA",
      "name": "PA真实身份首页可见统计范围",
      "status": "Skipped",
      "impact": "IMP106-03/04/05/08",
      "layer": "未执行：用户决定移出本轮三身份范围",
      "expected": "PA真实身份首页可见统计范围与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "最新用户明确“先验现有三个角色，其余标明未测”：该身份及依赖团队场景本轮不执行；不建账号/团队/样本，不等待授权，不用admin代替。原前置缺口作为事实保留。",
      "evidence": "三现有身份清单；账号/团队前置提案",
      "defect": null
    },
    {
      "id": "QA106-HOME-ROLE-SALES",
      "name": "SALES真实身份首页可见统计范围",
      "status": "Skipped",
      "impact": "IMP106-03/04/05/08",
      "layer": "未执行：用户决定移出本轮三身份范围",
      "expected": "SALES真实身份首页可见统计范围与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "最新用户明确“先验现有三个角色，其余标明未测”：该身份及依赖团队场景本轮不执行；不建账号/团队/样本，不等待授权，不用admin代替。原前置缺口作为事实保留。",
      "evidence": "三现有身份清单；账号/团队前置提案",
      "defect": null
    },
    {
      "id": "QA106-HOME-ROLE-SU",
      "name": "SU真实身份首页可见统计范围",
      "status": "Skipped",
      "impact": "IMP106-03/04/05/08",
      "layer": "未执行：用户决定移出本轮三身份范围",
      "expected": "SU真实身份首页可见统计范围与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "最新用户明确“先验现有三个角色，其余标明未测”：该身份及依赖团队场景本轮不执行；不建账号/团队/样本，不等待授权，不用admin代替。原前置缺口作为事实保留。",
      "evidence": "三现有身份清单；账号/团队前置提案",
      "defect": null
    },
    {
      "id": "QA106-HOME-ROLE-GUEST",
      "name": "GUEST真实身份首页可见统计范围",
      "status": "Skipped",
      "impact": "IMP106-03/04/05/08",
      "layer": "未执行：用户决定移出本轮三身份范围",
      "expected": "GUEST真实身份首页可见统计范围与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "最新用户明确“先验现有三个角色，其余标明未测”：该身份及依赖团队场景本轮不执行；不建账号/团队/样本，不等待授权，不用admin代替。原前置缺口作为事实保留。",
      "evidence": "三现有身份清单；账号/团队前置提案",
      "defect": null
    },
    {
      "id": "QA106-HOME-ROLE-TL",
      "name": "TL真实身份首页可见统计范围",
      "status": "Skipped",
      "impact": "IMP106-03/04/05/08",
      "layer": "未执行：用户决定移出本轮三身份范围",
      "expected": "TL真实身份首页可见统计范围与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "最新用户明确“先验现有三个角色，其余标明未测”：该身份及依赖团队场景本轮不执行；不建账号/团队/样本，不等待授权，不用admin代替。原前置缺口作为事实保留。",
      "evidence": "三现有身份清单；账号/团队前置提案",
      "defect": null
    },
    {
      "id": "QA106-HOME-TEAM-LOW-LOSS",
      "name": "非空TL团队低毛利/亏损分类",
      "status": "Skipped",
      "impact": "IMP106-04",
      "layer": "未执行：用户决定移出本轮三身份范围",
      "expected": "非空TL团队低毛利/亏损分类与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "最新用户明确“先验现有三个角色，其余标明未测”：该身份及依赖团队场景本轮不执行；不建账号/团队/样本，不等待授权，不用admin代替。原前置缺口作为事实保留。",
      "evidence": "只读源码api/libs/views.py:474–526；前置提案",
      "defect": null
    },
    {
      "id": "QA106-HOME-UTIL-NONEMPTY",
      "name": "平均资费/Seat/专家新增完整数据图",
      "status": "Blocked",
      "impact": "IMP106-04",
      "layer": "部分观察；完整用例Blocked",
      "expected": "平均资费/Seat/专家新增完整数据图与本角色权限、真实响应一致；有数据与空态分开判断",
      "actual": "管理员已实际观察11月平均资费[]、Seat[]和相应空态，专家新增图本月0/上月PM16为2，运行series已保存；未闭合完整非空资费/Seat样本及逐图截图，不能以空图通过整个用例。PA数据表仅观察，不冒称真实PA身份已测。",
      "evidence": "admin-utilities-november.json；admin-utilities-nov-runtime.json；原页面观察记录",
      "defect": null
    }
  ],
  "candidate": "FE2.16.9-beta.3/4a303c3d + BE1.20.15b2/473cc345",
  "spaceId": 5,
  "oldTenCasesNotRecounted": true,
  "newIdentityAuthorization": "not requested further; user decided no creation",
  "fixtureRestored": true,
  "spaceState": "logged out; final finish authorized",
  "sourceChanges": false,
  "actualReview": "raw API/DTO and ECharts runtime reconciliation; not mock/local developer tests",
  "executionCounts": {
    "Pass": 13,
    "Fail": 1,
    "Blocked": 0,
    "Skipped": 0
  },
  "scope": "User selected existing admin/finance/PM only; other five identities and TL dependent cases not tested by decision"
}
