feat: add four new student modules (rotation, skill-video, exam-prep, academic) with backend APIs and frontend pages; add exam-prep question history with DB persistence

This commit is contained in:
freedakgmail
2026-06-04 11:50:25 +08:00
commit 995f4ecfbd
399 changed files with 73529 additions and 0 deletions
+275
View File
@@ -0,0 +1,275 @@
# Implementation Plan
## Overview
本任务清单将设计转化为增量式编码任务。任务遵循测试驱动、底座先行的顺序:先建立能力图谱与技能能力中心两个底座及合规/可信横切层,再实现各业务模块,最后串联端到端流程。带 `*` 的任务为可选。
## Tasks
- [x] 1. 项目脚手架与共享基础设施
- 初始化 NestJS + TypeScript 后端工程与 PostgreSQL 连接,建立模块化目录结构
- 实现统一的 `Result<T, E>` 返回类型与错误基类(区分校验/生成/授权/系统错误)
- 配置测试框架(Jest)与属性测试库(fast-check),建立 mock AI 网关与 mock 资料来源适配器骨架
- _Requirements: 全局基础_
- [x] 2. 能力图谱底座(Competency_Graph
- [x] 2.1 能力标签体系与数据模型
- 实现 `CompetencyTag`(唯一标识、所属维度)与 `CompetencyDimension` 模型及持久化
- 实现统一标签体系的维护与 `listTags()` 接口
- 编写单元测试覆盖标签定义与维度归属
- _Requirements: 14.1_
- [x] 2.2 能力数据映射与校验
- 实现 `mapData()`:将模块数据映射到 1-10 个已定义标签(5 秒内)
- 实现未定义标签拒绝逻辑:拒绝映射、不创建记录、记录原因、返回提示
- 编写属性测试验证 Property 2(能力标签映射有效性)
- _Requirements: 14.2, 14.3_
- [x] 2.3 能力概览聚合
- 实现 `getCompetencyOverview()`:按维度以 0-100 量化分值聚合(5 秒内)
- 实现数据不足维度标记"数据不足"并保留其余维度
- 编写属性测试验证 Property 3(画像维度分值有界性,能力概览部分)
- _Requirements: 14.4, 14.5_
- [x] 3. 技能能力中心底座(Skill_Center
- [x] 3.1 技能定义模型与序列化
- 实现 `SkillDefinition` 五要素结构(输入规格、AI 处理逻辑、知识源绑定、输出格式、可信度标注规则)
- 实现 `serialize()` / `deserialize()`
- 编写属性测试验证 Property 1(技能定义序列化往返一致性)
- _Requirements: 13.2, 13.9_
- [x] 3.2 技能治理:配置、启用与审计
- 实现 `upsertSkillDefinition()``enableSkill()`,限定管理员或导师操作
- 实现技能定义变更的审计日志记录(操作者、时间、变更内容)
- 初始化至少 8 个内置技能定义(资料查询、检索式生成、文献综述、病例分析、鉴别诊断辅助、医患沟通模拟、医学翻译、引用生成)
- 编写单元测试覆盖治理流程与技能库完整性
- _Requirements: 13.1, 13.6, 13.7_
- [x] 3.3 技能调用与失败处理
- 实现 `invokeSkill()`:输入规格校验、按输出格式返回结果并附可信度标注(30 秒内)
- 实现输入不符规格的拒绝、知识源不可用或处理失败的终止(不返回结果与标注、提示失败)
- 仅成功调用完成才写入能力图谱
- 编写单元测试覆盖正常路径与各错误路径
- _Requirements: 13.3, 13.4, 13.5, 13.8_
- [x] 4. 横切层:合规模块与 AI 可信层
- [x] 4.1 权限分级与访问判定
- 实现 `checkAccess()`:为学生/导师/管理员定义权限范围(可访问资源类型与允许操作类型)
- 实现范围内允许、越权拒绝并记录拒绝事件(操作者、时间、资源标识、拒绝原因)
- 编写属性测试验证 Property 6(权限判定一致性)
- _Requirements: 17.1, 17.2, 17.3_
- [x] 4.2 知情同意授权与画像脱敏
- 实现 `ConsentRecord` 模型(范围、用途、有效期、撤销)与 `verifyConsent()` / `revokeConsent()`
- 实现 `resolveProfileView()`:非本人无有效授权时拒绝完整画像、对未授权敏感字段脱敏(2 秒内,仅返回已授权字段)
- 实现授权撤销即时失效、此后按未授权处理
- 编写属性测试验证 Property 4(授权强制不变量)
- _Requirements: 7.2, 7.3, 7.4, 7.5, 7.8_
- [x] 4.3 审计日志
- 实现 `writeAuditLog()`:敏感数据访问/导出/修改记录(操作者、时间、操作类型、数据范围,5 秒内),保留≥12 个月
- 编写单元测试覆盖审计字段完整性与保留策略
- _Requirements: 7.6, 17.4_
- [x] 4.4 AI 可信层
- 实现统一可信度标注封装:为 AI 输出附带≥1 来源与 0%-100% 置信度
- 实现依据查看(3 秒内展示可追溯来源条目及引用标识)与无法溯源时标注"未经核验"
- 编写单元测试覆盖可信度标注与未经核验标记
- _Requirements: 16.1, 16.2, 16.3, 16.4_
- [x] 5. 个人学习空间(Learning_Space
- [x] 5.1 学习成果模型与新增校验
- 实现 `Achievement` 模型与成果类型枚举
- 实现 `addAchievement()`:必填元数据校验、标题≤200 字符与时间有效性校验,失败时拒绝且不创建记录
- 编写属性测试验证 Property 7(错误路径数据保全,学习成果部分)
- _Requirements: 1.1, 1.2, 1.6, 1.9_
- [x] 5.2 自动归档与里程碑
- 实现保存成功后按学年、学期归档;含临床轮转科室信息时额外按科室归档
- 实现 `markMilestone()`:标记里程碑并关联节点内成果
- 编写单元测试覆盖归档维度与里程碑关联
- _Requirements: 1.3, 1.4, 1.8_
- [x] 5.3 成果检索与能力标签关联
- 实现 `listAchievements()`:按时间倒序、支持按成果类型/学年/学期/轮转科室筛选、每页≤50 分页
- 实现保存成功后关联能力图谱标签;无匹配标签时标记"待关联能力标签"并提示
- 编写属性测试验证 Property 8(分页边界不变量,学习空间部分)
- _Requirements: 1.5, 1.7, 1.10_
- [x] 6. AI 评估引擎(AI_Evaluation_Engine
- [x] 6.1 形成性与终结性评价
- 实现 `generateFormativeEvaluation()`30 秒内)与 `generateSummativeEvaluation()`(节点须有成果)
- 实现评价附带可信度标注(≥1 依据来源)与发展建议引用≥1 能力标签
- 编写单元测试覆盖评价生成与标注
- _Requirements: 2.1, 2.2, 2.3, 2.4, 2.7_
- [x] 6.2 评价错误路径
- 实现信息不足时中止、保留数据、提示缺失类别
- 实现生成失败或超时时中止、保留数据、提示失败
- 编写单元测试覆盖错误路径(验证 Property 7 相关部分)
- _Requirements: 2.5, 2.6_
- [x] 7. 课程对练引擎(Practice_Engine
- [x] 7.1 题目生成与权威源绑定
- 实现 `generateQuestions()`:基于课程内容生成 5-50 道题(30 秒内),支持 A1/A2/A3/A4/病例分析/临床决策题型
- 实现每题绑定≥1 权威知识源并记录引用标识;无法绑定时不进入审核并记录原因
- 实现课程内容不足时中止并提示
- 编写单元测试覆盖生成、题型、绑定与错误路径
- _Requirements: 3.1, 3.2, 3.3, 3.7, 3.8_
- [x] 7.2 题目审核状态机
- 实现题目状态流转(待导师审核→可用于对练/已退回),审核前不向学生发布
- 实现导师通过/退回(退回记录原因)
- 编写单元测试覆盖状态机与导师审核
- _Requirements: 3.4, 3.5, 3.6, 15.1_
- [x] 7.3 模拟对练与结果诊断
- 实现 `startPractice()` / `submitAnswer()` / `finishPractice()`:逐题呈现采集作答、3 秒内判定正误、单题超 120 秒判错并继续
- 实现对练报告(正确率、用时、薄弱环节=正确率<60% 的能力标签)并按能力标签映射能力图谱
- 实现 AI 评估引擎对每个薄弱环节生成改进建议并附可信度标注
- 编写单元测试覆盖对练流程、报告与映射
- _Requirements: 4.1, 4.2, 4.4, 4.5, 4.6, 4.7, 4.8_
- [x] 8. 临床情景对话对练(Clinical_Dialogue_Practice
- 实现 `startDialogue()`:基于绑定权威知识源 10 秒内呈现情景;未绑定时阻止启动、不创建记录、提示
- 实现 `sendTurn()` 多轮对话(最多 50 轮)并逐轮记录学生输入与系统应答
- 实现 `finishDialogue()`:30 秒内生成含问诊完整性/临床推理/医患沟通三维报告并映射能力图谱;失败或超时时中止、保留对话记录、提示
- 编写单元测试覆盖发起、多轮、报告与错误路径
- _Requirements: 5.1, 5.2, 5.3, 5.4, 5.5, 5.6_
- [x] 9. 学生画像引擎(Profile_Engine
- 实现 `generateProfile()`:基于学习空间与能力图谱生成六维度画像(0-100,5 秒内)
- 实现能力图谱更新后 10 秒内同步、每项结论可追溯≥1 来源记录
- 实现数据不足维度标记"数据不足"并保留其余;敏感字段标记;仅采集与维度直接相关字段(数据最小化)
- 编写属性测试验证 Property 3(画像维度分值有界性,画像部分)
- _Requirements: 6.1, 6.2, 6.3, 6.4, 6.5, 7.1, 7.7_
- [x] 10. 职业规划模块(Career_Module
- [x] 10.1 职业目标与胜任力模型
- 实现 `setCareerGoal()`3 秒内关联岗位胜任力模型并展示
- 实现胜任力模型四维度(科学与学术/临床能力/健康与社会/职业素养),每维度≥3 能力标签
- 实现无匹配模型时提示并推荐≥3 相近目标;关联系统错误时提示并保留已设目标
- 编写单元测试覆盖目标设定与错误路径
- _Requirements: 8.1, 8.2, 8.3, 8.4, 8.5_
- [x] 10.2 动态闭环发展规划
- 实现 `generateDevelopmentPlan()`:逐项对照能力水平与要求、标记能力差距项(含缺数据项)
- 实现每差距项≥1 建议行动(标明目标水平)、推荐≥1 学习资源或对练任务、引用对应能力标签
- 实现能力图谱更新后再次请求时重算全部差距项;未选目标/模型不可用时拒绝并保留数据;差距项无资源时保留并标注暂无推荐
- 编写单元测试覆盖对照、规划生成、动态更新与错误路径
- _Requirements: 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7_
- [x] 11. 研究资料查询技能(Research_Query_Skill
- [x] 11.1 检索式生成与检索
- 实现 `generateSearchQuery()`NL→PICO/MeSH 检索式(10 秒内,问题 1-2000 字符)
- 实现 `search()`:指定来源 30 秒内检索、每页≤50 分页;空结果返回空列表并提示;来源全不可用时中止、保留检索式、提示
- 实现问题为空/超长/无医学要素时拒绝生成并提示
- 实现结果每条仅含检索信息/摘要/原文链接(不存储分发全文)、查询完成 5 秒内映射能力图谱
- 编写单元测试覆盖检索式、检索、筛选与错误路径
- _Requirements: 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7, 10.8_
- [x] 11.2 总结、证据分级与引用管理
- 实现 `summarize()`:30 秒内生成总结,每条结论附≥1 来源引用,每条资料标注唯一证据分级
- 实现无法溯源结论标注"未验证"且不作为引用输出;呈现总结时显示"仅辅助不替代阅读原文"提示
- 实现 `generateCitation()` / `exportCitations()`Vancouver/GB-T 7714 格式、导出 EndNote/NoteExpress;生成或导出失败时中止、保留数据、提示
- 编写属性测试验证 Property 5(引用可追溯不变量)
- _Requirements: 11.1, 11.2, 11.3, 11.4, 11.5, 11.6, 11.7_
- [x] 12. AI 协同能力培养模块(AI_Collaboration_Module
- 实现协同训练任务(提问能力/批判性验证/责任边界意识/协同工作流四维度各≥1)
- 实现 `evaluateTask()`:30 秒内四维度 0-100 评估;直接采用未核验 AI 输出时提示并要求核验、计入批判性验证;评估结果 5 秒内映射能力图谱计入画像与胜任力对照
- 实现导师点评(对学生可见);评估失败或超时时中止、保留记录、提示;维度数据不足时标记"数据不足"并保留其余
- 编写单元测试覆盖任务、评估、点评与错误路径
- _Requirements: 12.1, 12.2, 12.3, 12.4, 12.5, 12.6, 12.7_
- [x] 13. 导师端集成
- 集成题目审核(复用 7.2)、成果点评(关联学习成果并对学生可见)
- 实现带教关系校验:允许查看所带学生画像;查看非所带学生画像时合规模块拒绝并记录越权尝试
- 编写单元测试覆盖点评与带教关系访问控制
- _Requirements: 15.2, 15.3, 15.4_
- [x] 14. 端到端集成与贯通验证
- 串联学习成果→能力标签→画像→职业规划的数据贯通流程并编写集成测试
- 串联技能调用(课程对练/研究查询)→能力图谱→画像的贯通流程并编写集成测试
- 验证全系统 AI 输出均经 AI 可信层、敏感资源访问均经合规模块
- 运行全部属性测试(Property 1-8)确认核心不变量成立
- _Requirements: 2.4, 4.6, 5.4, 9.1, 12.4, 14.1, 16.1, 17.2_
- [x] 15. 三端前端界面(可选)
- 实现学生端(学习空间、对练、画像、职业规划、研究查询、协同训练)核心界面
- 实现导师端(题目审核、成果点评、带教学生画像)与管理端(技能治理、权限与合规管理)核心界面
- _Requirements: 全部用户故事的界面呈现_
## Task Dependency Graph
```mermaid
graph TD
T1["1. 脚手架与基础设施"]
T2["2. 能力图谱底座"]
T3["3. 技能能力中心底座"]
T4["4. 合规与AI可信横切层"]
T5["5. 个人学习空间"]
T6["6. AI评估引擎"]
T7["7. 课程对练引擎"]
T8["8. 临床情景对话对练"]
T9["9. 学生画像引擎"]
T10["10. 职业规划模块"]
T11["11. 研究资料查询技能"]
T12["12. AI协同能力培养"]
T13["13. 导师端集成"]
T14["14. 端到端集成"]
T15["15*. 三端前端界面"]
T1 --> T2
T1 --> T3
T1 --> T4
T2 --> T5
T3 --> T7
T3 --> T8
T3 --> T11
T4 --> T9
T4 --> T13
T5 --> T6
T5 --> T9
T6 --> T7
T2 --> T6
T2 --> T9
T9 --> T10
T2 --> T10
T2 --> T12
T7 --> T13
T9 --> T13
T5 --> T14
T6 --> T14
T7 --> T14
T8 --> T14
T9 --> T14
T10 --> T14
T11 --> T14
T12 --> T14
T13 --> T14
T14 --> T15
```
```json
{
"waves": [
{ "wave": 1, "tasks": ["1"] },
{ "wave": 2, "tasks": ["2", "3", "4"] },
{ "wave": 3, "tasks": ["5"] },
{ "wave": 4, "tasks": ["6", "7", "8", "9", "11", "12"] },
{ "wave": 5, "tasks": ["10", "13"] },
{ "wave": 6, "tasks": ["14"] },
{ "wave": 7, "tasks": ["15"] }
]
}
```
## Notes
- 任务 2(能力图谱)与任务 3(技能能力中心)是两大底座,应优先实现,多数业务模块依赖它们。
- 任务 4(合规与 AI 可信横切层)为所有涉及敏感数据访问与 AI 输出的模块提供统一保障,建议与底座并行推进。
- 每个业务模块任务均包含对应的单元测试或属性测试,覆盖正常路径与错误路径。
- 属性测试(Property 1-8)分散在相关任务中实现,并在任务 14 统一运行确认。
- 任务 15 为可选的前端界面实现,后端模块与测试可独立于前端完成验证。
- 技术栈(NestJS + TypeScript + PostgreSQL + Jest + fast-check)为设计阶段的假设,实现前可调整。