76 lines
2.0 KiB
Python
76 lines
2.0 KiB
Python
from pydantic import BaseModel, Field
|
|
|
|
from app.schemas.evaluation import EvaluationResponse
|
|
|
|
|
|
class TeachingVideo(BaseModel):
|
|
"""教学视频:题目解析关联的视频资源。"""
|
|
|
|
title: str = ""
|
|
url: str = ""
|
|
|
|
|
|
class TeachingOption(BaseModel):
|
|
"""教学选项:单选题或多选题的选项结构。"""
|
|
|
|
key: str
|
|
text: str
|
|
|
|
|
|
class TeachingQuestion(BaseModel):
|
|
"""教学题目:从 teaching_case 解析出的互动题目。"""
|
|
|
|
question_id: str
|
|
question_type: str = "single_choice"
|
|
stem: str
|
|
options: list[TeachingOption] = Field(default_factory=list)
|
|
answer: str | list[str]
|
|
analysis: str = ""
|
|
video: TeachingVideo | None = None
|
|
knowledge_points: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class TeachingCaseSummary(BaseModel):
|
|
"""教学病例摘要:教学互动页面展示的病例基础信息。"""
|
|
|
|
case_id: int
|
|
title: str
|
|
department_id: int | None = None
|
|
difficulty: str
|
|
chief_complaint: str
|
|
description: str
|
|
patient_age: int | None = None
|
|
patient_gender: str | None = None
|
|
knowledge_points: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class TeachingItemsResponse(BaseModel):
|
|
"""教学列表响应:病例、教学目标、题目、答案、解析文本和视频。"""
|
|
|
|
case: TeachingCaseSummary
|
|
teaching_goal: str
|
|
teacher_guide: str
|
|
scoring_focus: str
|
|
questions: list[TeachingQuestion]
|
|
|
|
|
|
class TeachingAnswer(BaseModel):
|
|
"""教学作答:前端提交的单题选择结果。"""
|
|
|
|
question_id: str = Field(min_length=1, max_length=64)
|
|
selected_answer: str | list[str]
|
|
|
|
|
|
class CreateTeachingEvaluationRequest(BaseModel):
|
|
"""教学评价入参:提交教学互动题目作答并生成评价。"""
|
|
|
|
case_id: int
|
|
answers: list[TeachingAnswer] = Field(min_length=1)
|
|
score_type: str = Field(default="percentage", pattern="^(percentage|five_point)$")
|
|
|
|
|
|
class TeachingEvaluationResponse(EvaluationResponse):
|
|
"""教学评价响应:复用训练评价结构,并返回教学会话 ID。"""
|
|
|
|
session_id: int
|