qc_work_order.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. from pydantic import BaseModel, ConfigDict, Field
  2. from typing import Optional
  3. class OutboundQcDetailApplication(BaseModel):
  4. """出库质检查看 - 申请单信息"""
  5. model_config = ConfigDict(populate_by_name=True)
  6. application_no: Optional[str] = Field(None, alias="applicationNo")
  7. application_name: Optional[str] = Field(None, alias="applicationName")
  8. application_status: Optional[str] = Field(None, alias="applicationStatus")
  9. channel_name: Optional[str] = Field(None, alias="channelName")
  10. class OutboundQcDetailPatient(BaseModel):
  11. """出库质检查看 - 患者信息"""
  12. model_config = ConfigDict(populate_by_name=True)
  13. patient_name: Optional[str] = Field(None, alias="patientName")
  14. sex: Optional[str] = Field(None)
  15. age: Optional[str] = Field(None)
  16. phone_no: Optional[str] = Field(None, alias="phoneNo")
  17. id_card_no: Optional[str] = Field(None, alias="idCardNo")
  18. emergency_contact: Optional[str] = Field(None, alias="emergencyContact")
  19. emergency_phone: Optional[str] = Field(None, alias="emergencyPhone")
  20. clinical_diagnosis: Optional[str] = Field(None, alias="clinicalDiagnosis")
  21. diagnosis_attachments: Optional[str] = Field(None, alias="diagnosisAttachments")
  22. class OutboundQcDetailInfusionPlan(BaseModel):
  23. """出库质检查看 - 输注方案信息"""
  24. model_config = ConfigDict(populate_by_name=True)
  25. cell_type: Optional[str] = Field(None, alias="cellType")
  26. spec_text: Optional[str] = Field(None, alias="specText")
  27. total_course_count: Optional[int] = Field(None, alias="totalCourseCount")
  28. course_interval: Optional[str] = Field(None, alias="courseInterval")
  29. infusion_route: Optional[str] = Field(None, alias="infusionRoute")
  30. infusion_start_date: Optional[str] = Field(None, alias="infusionStartDate")
  31. class OutboundQcDetailInfusionSchedule(BaseModel):
  32. """出库质检查看 - 输注计划信息"""
  33. model_config = ConfigDict(populate_by_name=True)
  34. infusion_time: Optional[str] = Field(None, alias="infusionTime")
  35. infusion_location: Optional[str] = Field(None, alias="infusionLocation")
  36. infusion_method: Optional[str] = Field(None, alias="infusionMethod")
  37. schedule_status: Optional[str] = Field(None, alias="scheduleStatus")
  38. infusion_status: Optional[str] = Field(None, alias="infusionStatus")
  39. qc_status: Optional[str] = Field(None, alias="qcStatus")
  40. cancel_reason: Optional[str] = Field(None, alias="cancelReason")
  41. class OutboundQcDetailProduct(BaseModel):
  42. """出库质检查看 - 产品明细"""
  43. model_config = ConfigDict(populate_by_name=True)
  44. project_code: Optional[str] = Field(None, alias="projectCode")
  45. project_name: Optional[str] = Field(None, alias="projectName")
  46. cell_type_name: Optional[str] = Field(None, alias="cellTypeName")
  47. spec_text: Optional[str] = Field(None, alias="specText")
  48. agreement_price: Optional[float] = Field(None, alias="agreementPrice")
  49. actual_price: Optional[float] = Field(None, alias="actualPrice")
  50. quantity: Optional[int] = Field(None)
  51. product_status: Optional[str] = Field(None, alias="productStatus")
  52. class OutboundQcDetailResponse(BaseModel):
  53. """出库质检聚合详情"""
  54. model_config = ConfigDict(populate_by_name=True)
  55. work_order: Optional[dict] = Field(None, alias="workOrder")
  56. application: Optional[OutboundQcDetailApplication] = Field(None, alias="application")
  57. patient: Optional[OutboundQcDetailPatient] = Field(None, alias="patient")
  58. infusion_plan: Optional[OutboundQcDetailInfusionPlan] = Field(None, alias="infusionPlan")
  59. infusion_schedule: Optional[OutboundQcDetailInfusionSchedule] = Field(None, alias="infusionSchedule")
  60. products: Optional[list[OutboundQcDetailProduct]] = Field(None, alias="products")
  61. tasks: Optional[list[dict]] = Field(None, alias="tasks")
  62. class QcWorkOrderCreateBody(BaseModel):
  63. """手动创建质检工单"""
  64. model_config = ConfigDict(populate_by_name=True)
  65. work_order_type: Optional[str] = Field("inbound", alias="workOrderType", description="工单类型 inbound/temporary")
  66. protocol_no: Optional[str] = Field(None, alias="protocolNo", description="协议号")
  67. sample_code: Optional[str] = Field(None, alias="sampleCode", description="样本编码")
  68. reception_source: Optional[str] = Field("cell_storage", alias="receptionSource", description="来源类型")
  69. qc_biz_type: Optional[str] = Field("inbound", alias="qcBizType", description="质检业务类型")
  70. cell_product_id: Optional[str] = Field(None, alias="cellProductId", description="质检对象-细胞产品ID")
  71. external_target_code: Optional[str] = Field(
  72. None, alias="externalTargetCode", description="外部质检对象编号(手写)"
  73. )
  74. remark: Optional[str] = Field(None, description="备注")
  75. class ProductionQcWorkOrderCreateBody(BaseModel):
  76. """生产过程派发质检工单"""
  77. model_config = ConfigDict(populate_by_name=True)
  78. production_step_output_id: str = Field(
  79. ..., alias="productionStepOutputId", description="步骤产出物ID"
  80. )
  81. remark: Optional[str] = Field(None, description="备注")
  82. class QcWorkOrderUpdateBody(BaseModel):
  83. """编辑质检工单(入库/出库可改备注、状态与质检结论;临时可含质检对象)"""
  84. model_config = ConfigDict(populate_by_name=True)
  85. cell_product_id: Optional[str] = Field(None, alias="cellProductId", description="质检对象-细胞产品ID")
  86. external_target_code: Optional[str] = Field(
  87. None, alias="externalTargetCode", description="外部质检对象编号(手写)"
  88. )
  89. work_order_status: Optional[str] = Field(None, alias="workOrderStatus", description="工单状态")
  90. qc_conclusion: Optional[str] = Field(
  91. None, alias="qcConclusion", description="质检结论 tg合格 btg不合格,空串清空"
  92. )
  93. remark: Optional[str] = Field(None, description="备注")