心理测评在源码中的领域名是 testreport。它把项目配置、答题过程、评分算法、订单和结果报告放在同一条可追踪链路中,重点不是“展示一份问卷”,而是保证用户回答、评分规则和最终解释来自同一版本语义。

代码与入口

层次 源码位置 主要职责
PC 用户端 pc/pages/test-report、pc/api/testreport.ts 项目检索、答题、订单和报告查看
移动端适配 uniapp/src/api/testreport.ts 已有 API 封装,独立移动页面仍需补齐
租户后台 tenant/src/views/testreport 项目、订单和应用设置
用户 API server/app/api/*/testreport 项目详情、题目、答案校验、下单与报告查询
领域服务 server/app/common/service/testreport 数据适配、测评引擎、支付回调与安装同步

当前源码中 PC 流程和租户后台已经形成页面,uni-app 只有接口层。因此文档把“移动端可接入”和“移动端页面已完整交付”区分开,不能仅凭存在 API 文件就宣称多端体验已经完成。

核心领域对象

对象 作用 关键约束
TestReportProject 保存项目编码、分类、题目来源、价格和报告展示配置 项目编码稳定;题目来源与评分规则需要版本化
题目与选项 描述题型、最少/最多选择、适用人群、分值和跳题关系 只接受当前项目允许的题目与选项
TestReportOrder 保存用户资料、答案、支付状态和计算结果 原始答案与结果同时留存,未支付时隐藏完整报告
维度与等级 聚合选项分数并映射解释区间或标签 同一套报告必须使用同一规则版本

答题与报告流程

flowchart LR
  Project[选择测评项目] --> Profile[填写必要资料]
  Profile --> Questions[加载适用题目]
  Questions --> Answers[逐题作答]
  Answers --> Validate[校验题目 / 选项 / 分支]
  Validate --> Order[保存答案并创建订单]
  Order --> Paid{是否需要支付}
  Paid -- 免费 --> Score[评分引擎]
  Paid -- 付费 --> Pay[统一支付回调]
  Pay --> Score
  Score --> Report[维度结果与报告快照]
  Report --> View[用户查看报告]

服务端会根据用户资料筛选适用题目,并校验单选、多选、最少和最多选择数量以及跳题关系。评分引擎再把已选选项转换为维度分数、总分或标签,支持单维区间、多个维度、MBTI 类标签组合等不同报告方式。

付费项目在创建订单时先保存经过校验的资料和答案。支付回调通过独立的 TestReportPaymentService 查找业务订单,重复回调只返回已处理状态;首次确认支付时才调用评分引擎,并把报告写回订单。这样支付渠道重试不会生成多份互相矛盾的结果。

隐私与版本边界

  • 答卷、人格倾向和报告可能包含敏感个人信息,后台默认只显示业务必需字段,并限制批量导出;
  • 项目调整题目、分值、维度或解释文案时应发布新版本,已经开始或完成的订单继续使用旧版本;
  • 付费只控制完整报告访问权,不能删除用户原始答卷,也不能伪造基础分数;
  • 报告页面需要明确说明用途和局限,不能替代临床诊断或专业心理咨询;
  • 统计时优先使用匿名汇总,不把单个用户答案作为运营人员的普通筛选字段。

后续完善

目前 TestReportProject 和 TestReportOrder 已形成核心闭环,但题目来源仍带有数据适配性质。后续应显式保存题库版本、评分规则版本和报告模板版本,并补齐 uni-app 页面、断点续答、结果访问审计和数据保留期限。

站内搜索

没有找到内容!