Feature Spec: 探索测试
Status: Active · Map: 2.2 人格测评 [P1] · Phase: P1
规范:../feature-design.md
1. 功能定义
| 字段 |
内容 |
| Name |
探索测试 |
| Purpose |
通过短量表帮助用户了解沟通方式、情感模式等偏好 |
| Business Goal |
丰富探索中心;结果导流关系理解与问答;可分享 |
| In |
Out |
| 已发布量表列表、答题、计分、丰富结果 |
伪 MBTI 版权侵权内容 |
| ≥1 热门测试(P1:沟通方式 + 情感模式) |
医疗量表诊断 |
| 分享结果卡 |
未定义的「深度付费层」若未实现则标 Gap |
2. 用户价值
- 为何需要: 比生日画像更场景化的自我标签。
- 完成后获得: 风格标签、概述、维度、建议、话术、成长计划。
- 付费: P1 结果全量返回(免费);深度会员导流为软转化(非强制锁结果)。
Gap: 若产品后续要对部分结果上锁,须先更新本 Spec。
3. 用户角色
| Actor |
能力 |
| Visitor |
浏览列表;提交需 Self Profile |
| 无档案 |
可看题,提交前引导建档 |
4. 用户流程
子能力展开
| 子能力 |
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) |
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 开发前检查
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 |