Files
2026-06-08 16:49:45 +08:00

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