117 lines
3.4 KiB
Python
117 lines
3.4 KiB
Python
from pydantic import BaseModel, Field
|
|
|
|
from app.schemas.training_config import PatientConfig
|
|
|
|
|
|
class CreateSessionRequest(BaseModel):
|
|
"""创建会话入参:选择病例、训练类别、模式和分数类型。"""
|
|
|
|
case_id: int
|
|
training_type: str = Field(pattern="^(case_analysis|diagnosis_treatment|consultation)$")
|
|
mode: str = Field(pattern="^practice$")
|
|
score_type: str = Field(default="percentage", pattern="^(percentage|five_point)$")
|
|
patient_config: PatientConfig | None = None
|
|
|
|
|
|
class CreateSessionResponse(BaseModel):
|
|
"""创建会话响应:返回会话标识和 AI 病人开场白。"""
|
|
|
|
session_id: int
|
|
session_code: str
|
|
status: str
|
|
patient_opening: str
|
|
patient_config: dict | None = None
|
|
|
|
|
|
class ChatRequest(BaseModel):
|
|
"""问诊消息入参:医生向 AI 病人发送的自然语言问题。"""
|
|
|
|
message: str = Field(min_length=1, max_length=2000)
|
|
|
|
|
|
class OrderItemResponse(BaseModel):
|
|
"""可申请检查项:只返回名称和类型,不返回结果。"""
|
|
|
|
item_code: str
|
|
item_name: str
|
|
item_type: str
|
|
|
|
|
|
class OrderItemsResponse(BaseModel):
|
|
"""可申请检查项列表响应。"""
|
|
|
|
items: list[OrderItemResponse]
|
|
|
|
|
|
class CreateOrderRequest(BaseModel):
|
|
"""检查申请入参:指定当前病例下的检查项目编码。"""
|
|
|
|
item_code: str = Field(min_length=1, max_length=64)
|
|
|
|
|
|
class CreateOrderResponse(BaseModel):
|
|
"""检查申请响应:返回数据库预设的结构化检查结果。"""
|
|
|
|
item_code: str
|
|
item_name: str
|
|
item_type: str
|
|
result_text: str
|
|
result_structured: dict | None = None
|
|
is_key: bool
|
|
is_abnormal: bool
|
|
context_written: bool = True
|
|
already_ordered: bool = False
|
|
|
|
|
|
class SessionStatusResponse(BaseModel):
|
|
"""会话状态响应:用于阶段流转接口。"""
|
|
|
|
session_id: int
|
|
status: str
|
|
|
|
|
|
class SubmitDiagnosisRequest(BaseModel):
|
|
"""诊断提交入参:保存主要诊断、鉴别诊断和诊断依据。"""
|
|
|
|
primary_diagnosis: str = Field(min_length=1, max_length=2000)
|
|
differential_diagnoses: list[str] = Field(default_factory=list)
|
|
diagnosis_basis: str = Field(min_length=1, max_length=5000)
|
|
|
|
|
|
class SubmitDiagnosisResponse(BaseModel):
|
|
"""诊断提交响应:进入治疗阶段。"""
|
|
|
|
status: str
|
|
|
|
|
|
class SubmitTreatmentRequest(BaseModel):
|
|
"""治疗方案入参:保存治疗原则、措施、风险预案、沟通和随访。"""
|
|
|
|
treatment_principle: str = Field(min_length=1, max_length=3000)
|
|
treatment_measures: str = Field(min_length=1, max_length=5000)
|
|
risk_plan: str | None = Field(default=None, max_length=3000)
|
|
communication: str | None = Field(default=None, max_length=3000)
|
|
follow_up: str | None = Field(default=None, max_length=3000)
|
|
|
|
|
|
class SubmitTreatmentResponse(BaseModel):
|
|
"""治疗提交响应:进入评价阶段。"""
|
|
|
|
status: str
|
|
|
|
|
|
class HintRequest(BaseModel):
|
|
"""会话提示入参:基于当前会话上下文生成练习提示。"""
|
|
|
|
last_user_message: str | None = Field(default=None, max_length=2000)
|
|
scope: str = Field(default="current_conversation", pattern="^current_conversation$")
|
|
|
|
|
|
class HintResponse(BaseModel):
|
|
"""会话提示响应:返回缺失维度、下一步问题和轻量训练提示。"""
|
|
|
|
hints: list[str]
|
|
missing_dimensions: list[str]
|
|
next_questions: list[str]
|
|
recommended_orders: list[dict] = Field(default_factory=list)
|