Files
zkxw/backend/app/schemas/qc_work_order.py
T
zlwuandCursor a3af039e74 feat: 质检工单结论、库位批量/筛选与协议样本接收质检摘要
落库并展示质检工单级结论(可编辑/任务派生),库位树支持批量新增子节点与货架格子检索,协议/捐赠列表补充接收与门禁质检摘要,并同步生产物料与工单卡片展示优化。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-28 18:46:24 +08:00

109 lines
5.5 KiB
Python

from pydantic import BaseModel, ConfigDict, Field
from typing import Optional
class OutboundQcDetailApplication(BaseModel):
"""出库质检查看 - 申请单信息"""
model_config = ConfigDict(populate_by_name=True)
application_no: Optional[str] = Field(None, alias="applicationNo")
application_name: Optional[str] = Field(None, alias="applicationName")
application_status: Optional[str] = Field(None, alias="applicationStatus")
channel_name: Optional[str] = Field(None, alias="channelName")
class OutboundQcDetailPatient(BaseModel):
"""出库质检查看 - 患者信息"""
model_config = ConfigDict(populate_by_name=True)
patient_name: Optional[str] = Field(None, alias="patientName")
sex: Optional[str] = Field(None)
age: Optional[str] = Field(None)
phone_no: Optional[str] = Field(None, alias="phoneNo")
id_card_no: Optional[str] = Field(None, alias="idCardNo")
emergency_contact: Optional[str] = Field(None, alias="emergencyContact")
emergency_phone: Optional[str] = Field(None, alias="emergencyPhone")
clinical_diagnosis: Optional[str] = Field(None, alias="clinicalDiagnosis")
diagnosis_attachments: Optional[str] = Field(None, alias="diagnosisAttachments")
class OutboundQcDetailInfusionPlan(BaseModel):
"""出库质检查看 - 输注方案信息"""
model_config = ConfigDict(populate_by_name=True)
cell_type: Optional[str] = Field(None, alias="cellType")
spec_text: Optional[str] = Field(None, alias="specText")
total_course_count: Optional[int] = Field(None, alias="totalCourseCount")
course_interval: Optional[str] = Field(None, alias="courseInterval")
infusion_route: Optional[str] = Field(None, alias="infusionRoute")
infusion_start_date: Optional[str] = Field(None, alias="infusionStartDate")
class OutboundQcDetailInfusionSchedule(BaseModel):
"""出库质检查看 - 输注计划信息"""
model_config = ConfigDict(populate_by_name=True)
infusion_time: Optional[str] = Field(None, alias="infusionTime")
infusion_location: Optional[str] = Field(None, alias="infusionLocation")
infusion_method: Optional[str] = Field(None, alias="infusionMethod")
schedule_status: Optional[str] = Field(None, alias="scheduleStatus")
infusion_status: Optional[str] = Field(None, alias="infusionStatus")
qc_status: Optional[str] = Field(None, alias="qcStatus")
cancel_reason: Optional[str] = Field(None, alias="cancelReason")
class OutboundQcDetailProduct(BaseModel):
"""出库质检查看 - 产品明细"""
model_config = ConfigDict(populate_by_name=True)
project_code: Optional[str] = Field(None, alias="projectCode")
project_name: Optional[str] = Field(None, alias="projectName")
cell_type_name: Optional[str] = Field(None, alias="cellTypeName")
spec_text: Optional[str] = Field(None, alias="specText")
agreement_price: Optional[float] = Field(None, alias="agreementPrice")
actual_price: Optional[float] = Field(None, alias="actualPrice")
quantity: Optional[int] = Field(None)
product_status: Optional[str] = Field(None, alias="productStatus")
class OutboundQcDetailResponse(BaseModel):
"""出库质检聚合详情"""
model_config = ConfigDict(populate_by_name=True)
work_order: Optional[dict] = Field(None, alias="workOrder")
application: Optional[OutboundQcDetailApplication] = Field(None, alias="application")
patient: Optional[OutboundQcDetailPatient] = Field(None, alias="patient")
infusion_plan: Optional[OutboundQcDetailInfusionPlan] = Field(None, alias="infusionPlan")
infusion_schedule: Optional[OutboundQcDetailInfusionSchedule] = Field(None, alias="infusionSchedule")
products: Optional[list[OutboundQcDetailProduct]] = Field(None, alias="products")
tasks: Optional[list[dict]] = Field(None, alias="tasks")
class QcWorkOrderCreateBody(BaseModel):
"""手动创建质检工单"""
model_config = ConfigDict(populate_by_name=True)
work_order_type: Optional[str] = Field("inbound", alias="workOrderType", description="工单类型 inbound/temporary")
protocol_no: Optional[str] = Field(None, alias="protocolNo", description="协议号")
sample_code: Optional[str] = Field(None, alias="sampleCode", description="样本编码")
reception_source: Optional[str] = Field("cell_storage", alias="receptionSource", description="来源类型")
qc_biz_type: Optional[str] = Field("inbound", alias="qcBizType", description="质检业务类型")
cell_product_id: Optional[str] = Field(None, alias="cellProductId", description="质检对象-细胞产品ID")
remark: Optional[str] = Field(None, description="备注")
class ProductionQcWorkOrderCreateBody(BaseModel):
"""生产过程派发质检工单"""
model_config = ConfigDict(populate_by_name=True)
production_step_output_id: str = Field(
..., alias="productionStepOutputId", description="步骤产出物ID"
)
remark: Optional[str] = Field(None, description="备注")
class QcWorkOrderUpdateBody(BaseModel):
"""编辑质检工单(入库/出库可改备注、状态与质检结论;临时可含质检对象)"""
model_config = ConfigDict(populate_by_name=True)
cell_product_id: Optional[str] = Field(None, alias="cellProductId", description="质检对象-细胞产品ID")
work_order_status: Optional[str] = Field(None, alias="workOrderStatus", description="工单状态")
qc_conclusion: Optional[str] = Field(
None, alias="qcConclusion", description="质检结论 tg合格 btg不合格,空串清空"
)
remark: Optional[str] = Field(None, description="备注")