"""工艺路线管理 Pydantic Schemas""" from pydantic import BaseModel, ConfigDict, Field from typing import Optional, List # Route main table class ProcessRouteCreateBody(BaseModel): model_config = ConfigDict(populate_by_name=True) route_code: str = Field(..., alias="routeCode") route_name: str = Field(..., alias="routeName") product_type_id: Optional[str] = Field(None, alias="productTypeId") version: Optional[str] = Field(None, alias="version") remark: Optional[str] = None class ProcessRouteUpdateBody(BaseModel): model_config = ConfigDict(populate_by_name=True) route_code: Optional[str] = Field(None, alias="routeCode") route_name: Optional[str] = Field(None, alias="routeName") product_type_id: Optional[str] = Field(None, alias="productTypeId") version: Optional[str] = Field(None, alias="version") remark: Optional[str] = None equipment_ids: Optional[List[str]] = Field(None, alias="equipmentIds") class SetCurrentBody(BaseModel): model_config = ConfigDict(populate_by_name=True) route_id: str = Field(..., alias="routeId") # Step operations class StepAddBody(BaseModel): model_config = ConfigDict(populate_by_name=True) route_id: str = Field(..., alias="routeId") process_id: str = Field(..., alias="processId") step_order: Optional[int] = Field(None, alias="stepOrder") class StepCopyBody(BaseModel): model_config = ConfigDict(populate_by_name=True) step_id: str = Field(..., alias="stepId") class StepUpdateBody(BaseModel): model_config = ConfigDict(populate_by_name=True) step_id: str = Field(..., alias="stepId") process_code: Optional[str] = Field(None, alias="processCode") category_id: Optional[str] = Field(None, alias="categoryId") process_name: Optional[str] = Field(None, alias="processName") description: Optional[str] = None equipment_ids: Optional[List[str]] = Field(None, alias="equipmentIds") estimated_duration: Optional[str] = Field(None, alias="estimatedDuration") sop_ids: Optional[str] = Field(None, alias="sopIds") class StepReorderBody(BaseModel): model_config = ConfigDict(populate_by_name=True) route_id: str = Field(..., alias="routeId") step_ids: List[str] = Field(..., alias="stepIds") # Step sub-table items class StepReagentItem(BaseModel): model_config = ConfigDict(populate_by_name=True) reagent_code: Optional[str] = Field(None, alias="reagentCode") reagent_name: Optional[str] = Field(None, alias="reagentName") spec: Optional[str] = None standard_usage: Optional[str] = Field(None, alias="standardUsage") unit: Optional[str] = None is_key_material: Optional[str] = Field("0", alias="isKeyMaterial") order_num: Optional[int] = Field(0, alias="orderNum") remark: Optional[str] = None class StepConsumableItem(BaseModel): model_config = ConfigDict(populate_by_name=True) consumable_code: Optional[str] = Field(None, alias="consumableCode") consumable_name: Optional[str] = Field(None, alias="consumableName") spec_model: Optional[str] = Field(None, alias="specModel") standard_usage: Optional[str] = Field(None, alias="standardUsage") unit: Optional[str] = None is_required: Optional[str] = Field("1", alias="isRequired") order_num: Optional[int] = Field(0, alias="orderNum") remark: Optional[str] = None class StepOutputItem(BaseModel): model_config = ConfigDict(populate_by_name=True) output_type_id: Optional[str] = Field(None, alias="outputTypeId") output_name: Optional[str] = Field(None, alias="outputName") output_barcode: Optional[str] = Field(None, alias="outputBarcode") order_num: Optional[int] = Field(0, alias="orderNum") remark: Optional[str] = None class StepDataCollectionItem(BaseModel): model_config = ConfigDict(populate_by_name=True) collection_name: Optional[str] = Field(None, alias="collectionName") unit: Optional[str] = None order_num: Optional[int] = Field(0, alias="orderNum") remark: Optional[str] = None # Sub-table update bodies (step_id + items[]) class StepReagentUpdateBody(BaseModel): model_config = ConfigDict(populate_by_name=True) step_id: str = Field(..., alias="stepId") items: List[StepReagentItem] = Field(...) class StepConsumableUpdateBody(BaseModel): model_config = ConfigDict(populate_by_name=True) step_id: str = Field(..., alias="stepId") items: List[StepConsumableItem] = Field(...) class StepOutputUpdateBody(BaseModel): model_config = ConfigDict(populate_by_name=True) step_id: str = Field(..., alias="stepId") items: List[StepOutputItem] = Field(...) class StepDataCollectionUpdateBody(BaseModel): model_config = ConfigDict(populate_by_name=True) step_id: str = Field(..., alias="stepId") items: List[StepDataCollectionItem] = Field(...)