Files
digital-psychology/.ai/product/feature-spec/explore-test.md
T
jackyu66gitandCursor 89756f65b4 feat(ECR-012–016): 合规、题库、时辰刷新、头像、MBTI OEJTS 与埋点
落地输入合规、探索题库、报告日/时辰刷新、账号头像、OEJTS 量表,并补齐 H5 埋点与 Admin 漏斗;同步 ESS 工件、切至自建 Git、清理 GitHub Actions。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-13 01:27:58 +08:00

224 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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-liteOEJTS 32** · **mbti-full60·会员)** |
| Gaps | 结果付费墙若要做须先改 Spec;全量 §11 埋点未挂(核心漏斗见 analytics) |
| Tests | score/result L1`ScoreJungian``scaleDraft.spec`Scale 流程组件测 |
| Process Review | OEJTS 标准/完整双轨 · 最近结果回看 · P1 收口 |
| Credit | OEJTS / Open Psychometrics · openjung MIT |