# Feature Spec: 探索测试 > Status: `Active` · Map: `2.2 人格测评 [P1]` · Phase: `P1` > 规范:[../feature-design.md](../feature-design.md) --- ## 1. 功能定义 | 字段 | 内容 | |---|---| | Name | 探索测试 | | Purpose | 通过短量表帮助用户了解沟通方式、情感模式等偏好 | | Business Goal | 丰富探索中心;结果导流关系理解与问答;可分享 | | In | Out | |---|---| | 已发布量表列表、答题、计分、丰富结果 | 伪 MBTI 版权侵权内容 | | ≥1 热门测试(P1:沟通方式 + 情感模式) | 医疗量表诊断 | | 分享结果卡 | 未定义的「深度付费层」若未实现则标 Gap | --- ## 2. 用户价值 1. **为何需要:** 比生日画像更场景化的自我标签。 2. **完成后获得:** 风格标签、概述、维度、建议、话术、成长计划。 3. **付费:** P1 结果全量返回(免费);深度会员导流为软转化(非强制锁结果)。`Gap:` 若产品后续要对部分结果上锁,须先更新本 Spec。 --- ## 3. 用户角色 | Actor | 能力 | |---|---| | Visitor | 浏览列表;提交需 Self Profile | | 无档案 | 可看题,提交前引导建档 | --- ## 4. 用户流程 ```text /explore 测试列表 ↓ 进入 /scales/:slug ↓ 已有结果? → 直接展示最近结果 +「重新测试」 ↓(无结果 / 点重测) 加载题目 · 逐题作答(须全部完成) ↓ 无 Self? → 引导建档 ↓ POST result → 展示丰富结果 ↓ 分享 / 去关系理解 / 去问答 ``` ### 子能力展开 | 子能力 | P1 | |---|---| | 测试入口(探索 Tab · 首页宫格) | ✓ · 产品向 `mbti-lite`;探索主路径为 curated 题库(A 集) | | 测试列表 | ✓ · 探索「题库精选」宫格(每类 1~2)+「题库分类」;分类页 `/explore/bank/:key` | | 题库范围(A) | ✓ 人格 / 情绪能力 / 智能 / 生活与关系;**不含**抑郁焦虑强迫躁狂双相等临床筛查 | | 问题流程 | ✓ | | 答题保存(服务端结果落库) | ✓ | | 最近结果回看 | ✓ GET `/scales/{slug}/result`;有结果进页不重复作答 | | 重新测试 | ✓ 结果页按钮 → 清空草稿再答;新结果落库并覆盖展示 | | 中断恢复 | ✓ localStorage 草稿(`scaleDraft`);提交后清除 | | 结果生成(丰富结构) | ✓ | | 免费层 | ✓ 全量 result | | 深度层 | N/A(当前不锁) | | 分享 | ✓ ShareSheet | | AI 解释 | 软链 `/ask` | | 数据统计 | 埋点名定义;SDK `Gap` | | 验收标准 | §12 | --- ## 5. 页面设计 | 路由 | 页面 | |---|---| | `/explore` | ExplorePage(题库精选宫格 + 题库分类 + 其它工具) | | `/explore/bank/:category` | ExploreBankCategoryPage · curated 题库分类列表 | | `/explore/:category` | ExploreCategoryPage · 产品工具分类(解码/星座等) | | `/scales/:slug` | ScalePage(含 bank slug) | ```text /scales/:slug ├── Loading(题目) ├── Normal(答题中) ├── Empty/NeedProfile(提交前无档案) ├── Error └── Result(完成后) ``` --- ## 6. 页面状态规范 | 状态 | UI | |---|---| | Loading | 加载题目 | | Error | 重试 | | Normal | 进度 + 单选题 | | NeedProfile | 引导首页 | | Result | ReportRich 结构展示 | --- ## 7. Business Rules | ID | Rule | |---|---| | R1 | 仅 `published` 量表可列表/作答 | | R2 | 提交前答案覆盖全部题目 | | R3 | 必须绑定用户 Self `profile_id` | | R4 | 计分:多数选项 → style;结果文案 lexicon 安全 | | R5 | result 含 label/summary/overview/dimensions/tips/scripts/growth_plan/faq | | R6 | 结果「不是固定标签」需在文案中提示 | | R7 | 作答过程写入本地草稿(按 slug);提交成功后清除;刷新可恢复未提交答案 | | R8 | 同一用户同一 slug(含 curated 题库 slug)若已有 `scale_results`,再次进入直接展示**最近一次**结果,并提供「重新测试」;未点重测不得自动进入答题 | | R9 | `mbti-lite` 产品展示名统一为「MBTI测试」(首页宫格 / 探索入口 / 量表 title) | | R10 | **标准版 `mbti-lite`**:开源 OEJTS 1.2 · **32 题**(四维各 8)· 双极 1–5 Likert;按维累加,阈值判出 E/I·S/N·T/F·J/P 一侧,合成四字母类型;**免费** | | R11 | **完整版 `mbti-full`**:60 题(四维各 15)· 须**成长会员**;未开通时 GET 返回 `locked=true` 且无题目;提交返回 403 | | R12 | 禁止使用官方 MBTI® 版权题干;结果须提示「不是固定标签」;题库重大更新须 soft-delete 旧 `scale_results` | | R13 | curated 题库(`scalebank`)仅含 A 集非临床探索量表;文案须声明「非诊断」;临床类(抑郁/焦虑/强迫等)不得进入 C 端 | | R14 | curated 题库作答走同一 `/scales/:slug`;完成后再次点击入口须遵守 R8(只看结果或显式重测),不得每次从头作答 | --- ## 8. 数据模型影响 | 表 | 备注 | |---|---| | `scales` / `scale_questions` | seed | | `scale_results` | answers + result jsonb | --- ## 9. API 需求 | Method | Path | 意图 | |---|---|---| | GET | `/api/v1/scales` | 列表 | | GET | `/api/v1/scales/{slug}` | 题目 | | GET | `/api/v1/scales/{slug}/result` | 当前用户该量表最近一次结果;无则 404 | | POST | `/api/v1/scales/{slug}/result` | 提交计分 | --- ## 10. 权限设计 | 能力 | Visitor 无档案 | Visitor 有 Self | |---|---|---| | 看列表/题目 | ✓ | ✓ | | 提交结果 | ✗ | ✓ | | `mbti-full` 作答 | ✗(须成长会员) | ✓(会员 active) | --- ## 11. 埋点 经统一 `track()`;非 P1 核心 5 事件。禁止参数含题干全文、答案明文、档案 ID。 | Event | 触发 | 可选 params | |---|---|---| | `scale_list_viewed` | 打开 `/explore` 且题库 catalog 加载成功 | — | | `scale_bank_category_viewed` | 打开 `/explore/bank/:category` 且分类加载成功 | `category`(key) | | `scale_started` | 用户点开始进入作答(含「重新测试」后再开始) | `slug` · `access`: free\|member | | `scale_completed` | 提交计分成功并展示结果 | `slug` · `access`: free\|member | | `scale_result_reopened` | 再次进入已有结果直接展示(R8,未重测) | `slug` | | `scale_retake_clicked` | 点「重新测试」 | `slug` | | `scale_locked_viewed` | 会员锁页展示(如 mbti-full) | `slug` | | `scale_share_clicked` | 结果页打开分享 | `slug` | | `scale_cta_relation` / `scale_cta_ask` | 结果导流(若 UI 有) | `slug` | `page_view` 对 `/explore` · `/explore/bank/*` · `/scales/*` 由路由自动采集。 --- ## 12. 测试验收标准 **Given** published 量表与 Self **When** 答完提交 **Then** 返回 label 与 overview/tips 等丰富字段 **Given** 已提交过结果 **When** 再次进入 `/scales/{slug}` **Then** 直接展示最近结果与「重新测试」;不进入答题 **Given** 结果页点「重新测试」并完成提交 **When** 再次进入 **Then** 展示新结果 **Given** 未答完 **When** 提交 **Then** 前端拦截;不成功落库 **Given** 无 Self **When** 提交 **Then** 引导建档 --- ## 13. AI 开发前检查 - [x] Spec 齐全 · 子能力已展开 · map · lexicon · OpenAPI · 可测 --- ## 14. Implementation Notes | 项 | 内容 | |---|---| | Packages | `internal/scale` · `service/scale` · `ExplorePage` · `ScalePage` | | Seeds | communication-style · emotion-pattern · **mbti-lite(OEJTS 32)** · **mbti-full(60·会员)** | | Gaps | 结果付费墙若要做须先改 Spec;全量 §11 埋点未挂(核心漏斗见 analytics) | | Tests | score/result L1;`ScoreJungian`;`scaleDraft.spec`;Scale 流程组件测 | | Process Review | OEJTS 标准/完整双轨 · 最近结果回看 · P1 收口 | | Credit | OEJTS / Open Psychometrics · openjung MIT |