Browse Source

docs(spec): SOP 差距修复任务书(SOP-MEMBER/HIDE/ATTRIB)+ 任务池追加 3 条 pending

主理人拍板 2026-10-30:①FAMILY 按 ¥1980/年 ②成长规划师价格作为商品 ③成员上限收紧 0/2/4/10 ④FREE 隐藏部分数据 ⑤E12 提前放行。
- SOP-MEMBER: membership_levels 种子 0/2/4/10 + FAMILY 19800/59400/198000 分 + sys_config 同步 + addMember max_children 强校验(存量超限不删除)
- SOP-HIDE: FREE 五维/深度报告隐藏富行心分项+familyData+菌群/风险/AI解读, masked:true 标志 + 前端升级引导
- SOP-ATTRIB: app.attribution.enabled=true + 前端接 B2 confirm-questions + 归因问卷按 ConfirmQuestionVO 渲染
- SOP-PRODUCT: 成长规划师改价走商品管理端(非代码,待运营)
按 discipline.GIT_DISCIPLINE:会话完成即 push。
Agnes Agent 1 week ago
parent
commit
0eca11edc2

+ 88 - 0
docs/superpowers/specs/2026-10-30-sop-gap-fix.md

@@ -0,0 +1,88 @@
+# 浠艾福付费用户服务 SOP · 差距修复任务书
+
+- 创建:2026-10-30 21:3x
+- 状态:设计完成,待派发
+- 依据:`out/2026-10-30-sop-capability-audit.md`(系统能力核查报告,G1–G10 缺口清单)
+- 主理人拍板(2026-10-30 21:2x,五选五确认):
+  1. 家庭会员按 **¥1980/年**(¥198/月·¥594/季·¥1980/年)
+  2. 成长规划师 1对1 价格 **作为商品**管理(改价走商品表/管理端,不改代码)
+  3. 成员上限 **收紧**(免费 0 / 体验 2 / 家庭 4 / 高级 10)
+  4. FREE 用户查看五维/深度报告 **隐藏部分数据**(非全隐藏、非全量)
+  5. E12 家庭归因 **提前放行**(`app.attribution.enabled=true` + 前端接 B2)
+
+---
+
+## 任务拆分(3 个开发任务 + 1 个运营动作,规避 DatabaseInitializer 并发冲突)
+
+### SOP-MEMBER(backend,P0)—— 成员上限收紧 + FAMILY 定价对齐
+
+**文件**:`cfc-backend/.../config/DatabaseInitializer.java`、`service/FamilyMemberService.java`
+
+| 项 | 现状(证据行) | 目标(SOP 口径) |
+|---|---|---|
+| FAMILY 定价 | 种子 `13140/32850/131400` 分 = ¥131.4/月·¥328.5/季·¥1314/年(6586-6590);sys_config `member_fee_family=131400`、`member_fee_family_yearly=131400`(1073-1074);道具映射 `member1980` 已存在(迁移380,3130) | **19800/59400/198000** 分 = ¥198/月·¥594/季·¥1980/年;同步 sys_config `member_fee_family=member_fee_family_yearly=198000`、`member_upgrade_threshold=198000`;道具 `member1980` 与下单金额自洽 |
+| 成员上限种子 | FREE=2/BASIC=3/FAMILY=6/PREMIUM=10(6587-6588、8328、12166) | **FREE=0/BASIC=2/FAMILY=4/PREMIUM=10** |
+| 强校验 | `addMember()` 97-228 行**无任何上限校验** | 新增 `max_children` 强校验:当前家庭成员数 ≥ 上限时拒绝新增并返回明确错误 |
+
+**存量兼容(关键,防破坏)**:已有家庭成员数 > 新上限时,**不强制删除**,仅禁止继续新增(`count >= max` 即拒绝),保证存量家庭可用。
+
+**验收**:
+- `membership_levels` 查询 FREE=0/BASIC=2/FAMILY=4/PREMIUM=10,FAMILY 价 19800/59400/198000
+- `sys_config` member_fee_family=198000
+- 已满员家庭 addMember → 返回业务错误「成员数已达上限」,存量成员不受影响
+- `mvn compile` 通过
+
+---
+
+### SOP-HIDE(backend+frontend,P0)—— FREE 隐藏部分数据
+
+**文件**:`EnergyController.java`、`HealthReportController.java`、五维前端页(`annual-energy.vue`/`wuxing-sandbox.vue`)、报告详情前端页
+
+**隐藏边界(FREE 用户,BASIC+ 全量)**:
+- 五维自检(`/energy/sandbox` + `/overview`):FREE 保留 **overallScore + 身/智基础值**,隐藏 **富/行/心 分项值、familyData 家庭聚合、历史趋势、AI 解读**;响应加 `masked:true` 标志,前端显示「开通会员解锁完整五维」升级引导。
+- 深度报告(`/report/detail`):FREE 保留基础体检指标(body),隐藏 **菌群(microbiome)、疾病风险评估(disease)、AI 解读(ai_analysis)**;响应加 `masked:true` 标志。
+- 成长报告/雷达图:FREE 隐藏 **P50 常模对比 + AI 趋势解读**(保留自身分数)。
+
+> 说明:`BasicQuotaService` REPORT_READING FREE=1 次/月已存在,无需改配额;本任务只做「深度字段对 FREE 置空 + masked 标志 + 前端升级引导」。
+
+**验收**:
+- FREE 登录调 `/energy/sandbox` → 富/行/心分项为 null、familyData 置 null、`masked=true`
+- FREE 调 `/report/detail` → microbiome/disease/ai_analysis 置空、`masked=true`
+- BASIC+ 调同一接口 → 全量数据,`masked=false`
+- 前端 FREE 看到升级引导而非空白
+
+---
+
+### SOP-ATTRIB(backend+frontend,P1)—— E12 提前放行 + 归因问卷接 B2 渲染修复
+
+**文件**:`application.yml`(207-208)、`utils/api.js`、`survey-questionnaire.vue`(或新建 `attribution-questionnaire.vue`)
+
+**内容**:
+1. `app.attribution.enabled`:`false` → **`true`**(生产放行,删/改 E12 注释为「阶段四 D1 已提前放行」)。
+2. 前端 `utils/api.js` 新增 `getAttributionConfirmQuestions(familyId, memberId, attributionId, answeredSummary)` → `POST /api/survey/attribution/confirm-questions`。
+3. `survey-questionnaire.vue`(或新组件)识别 `dimension===family_attribution` 时走 B2 动态下发,按 `ConfirmQuestionVO`(`id/code/group/title/type/options/unit/required/riskLevel/refRange`)渲染,支持 `date/single/text/multi` 控件 + 条件题显隐;不再把对象当数组遍历。
+
+**验收**:
+- 生产 `app.attribution.enabled=true` 生效(重启后端)
+- 前端归因问卷走 B2 端点,16 条题目按 `title/type/options` 正确渲染,`single/date/multi/text` 控件可用
+- 条件题显隐正确;未登录访问 confirm-questions 仍 401/403(预期)
+
+---
+
+### SOP-PRODUCT(运营,P2)—— 成长规划师 1对1 作为商品改价(非代码)
+
+- 主理人拍板:价格作为商品管理,**不改代码**。
+- 现状:产品种子 `成长规划师1对1咨询` = ¥500(DatabaseInitializer 1120);`ProductController /update`(行74-79)已支持改价。
+- 动作:在商品管理端把「成长规划师1对1咨询」价格调整为目标价(¥2000),经管理端审核上架。**本任务不派发代码开发**,仅登记待运营执行。
+
+---
+
+## 派发纪律(沿用 discipline.GIT_DISCIPLINE)
+
+- 任务完成后**自行 git commit + push** 并直接回报,无需等待主理人确认。
+- 改 `DatabaseInitializer` 的 SOP-MEMBER 单独派发,不与 SOP-HIDE/SOP-ATTRIB 并行(避免同文件并发冲突)。
+- 派发前确认任务书已合入 `origin/cfclub`(远端按 origin/cfclub 检出)。
+
+## 核验
+
+- SOP-MEMBER / SOP-HIDE / SOP-ATTRIB 各自派发完成后,由**独立核验会话**(不接开发)按上表「验收」逐项复核,输出核验报告;我汇总回填任务池状态并回报主理人。

+ 30 - 0
tools/xaf_agent_hub/tasks_backlog.json

@@ -1007,5 +1007,35 @@
     "prompt": "请核对需求/设计文档 docs/superpowers/plans/verify/verify-activity-detail-redesign.md 与实际实现的差距,并完成以下差距项:\n\n文档主题:verify activity detail redesign\n所属模块:cfc-backend\n\n检测到的差距:\n  - [标记为「设计完成但未实现」的内容] - 需求2(海报模板):管理端模板 CRUD、小程序端选择/预览、三种绘制引擎、渲染兜底均健壮 → 放行;但\"元素位置与样式可配置\"未实现,属需求范围缩水,作为遗留项另行评估,**\n\n任务来源:sync_gap_tasks(巡检发现空闲会话且任务池为空时自动生成)。\n要求:先阅读该文档对应章节,确认差距真实存在(若已实现请如实说明并标记为无需改动),然后按文档口径实现/补齐,完成后自行提交并推送。",
     "generated_from": "sync_gap_tasks",
     "generated_at": "2026-10-30 20:24:02"
+  },
+  {
+    "id": "SOP-MEMBER",
+    "title": "SOP成员上限收紧+FAMILY定价1980",
+    "priority": "P0",
+    "module": "cfc-backend",
+    "instance": "",
+    "status": "pending",
+    "spec": "docs/superpowers/specs/2026-10-30-sop-gap-fix.md",
+    "prompt": "执行 docs/superpowers/specs/2026-10-30-sop-gap-fix.md 的 SOP-MEMBER:①membership_levels 种子 FREE=0/BASIC=2/FAMILY=4/PREMIUM=10;②FAMILY 定价改 19800/59400/198000 分并同步 sys_config member_fee_family/member_fee_family_yearly/member_upgrade_threshold=198000,道具 member1980 与下单金额自洽;③FamilyMemberService.addMember 加 max_children 强校验(count>=max 拒绝新增,存量超限不删除)。完成后 git commit+push 并回报。"
+  },
+  {
+    "id": "SOP-HIDE",
+    "title": "SOP FREE隐藏部分数据(五维+深度报告)",
+    "priority": "P0",
+    "module": "cfc-backend+cfc-frontend",
+    "instance": "",
+    "status": "pending",
+    "spec": "docs/superpowers/specs/2026-10-30-sop-gap-fix.md",
+    "prompt": "执行 docs/superpowers/specs/2026-10-30-sop-gap-fix.md 的 SOP-HIDE:FREE 用户五维自检隐藏富/行/心分项+familyData+趋势+AI解读,深度报告隐藏 microbiome/disease/ai_analysis,响应加 masked:true 标志,前端显示升级引导。BASIC+ 全量。完成后 git commit+push 并回报。"
+  },
+  {
+    "id": "SOP-ATTRIB",
+    "title": "SOP E12提前放行+归因问卷接B2",
+    "priority": "P1",
+    "module": "cfc-backend+cfc-frontend",
+    "instance": "",
+    "status": "pending",
+    "spec": "docs/superpowers/specs/2026-10-30-sop-gap-fix.md",
+    "prompt": "执行 docs/superpowers/specs/2026-10-30-sop-gap-fix.md 的 SOP-ATTRIB:①application.yml app.attribution.enabled false→true;②前端 utils/api.js 新增 getAttributionConfirmQuestions;③survey-questionnaire.vue 识别 dimension===family_attribution 走 B2 动态下发并按 ConfirmQuestionVO 渲染(date/single/text/multi+条件题)。完成后 git commit+push 并回报。"
   }
 ]