"""运输计划 - 三方粘贴识别提交 Schema""" from typing import Literal, Optional from pydantic import BaseModel, Field class ConflictAction(BaseModel): key: Literal["vehicle", "driver", "escort"] existing_id: str = Field(alias="existingId") action: Literal["reuse", "overwrite", "cancel"] model_config = {"populate_by_name": True} class PastePersonnelIn(BaseModel): personnel_name: str = Field(alias="personnelName") phone_no: Optional[str] = Field(default=None, alias="phoneNo") id_card_no: Optional[str] = Field(default=None, alias="idCardNo") personnel_type: Literal["driver", "escort"] = Field(alias="personnelType") model_config = {"populate_by_name": True} class PasteVehicleIn(BaseModel): license_plate: str = Field(alias="licensePlate") trailer_no: str = Field(..., min_length=1, max_length=20, alias="trailerNo") load_capacity: Optional[float] = Field(default=None, alias="loadCapacity") carrier_id: Optional[str] = Field(default=None, alias="carrierId") carrier_name: Optional[str] = Field(default=None, alias="carrierName") model_config = {"populate_by_name": True} class PasteCommitBody(BaseModel): mode: Literal["vehicle_bundle", "personnel_first"] create_vehicle: bool = Field(default=True, alias="createVehicle") vehicle: Optional[PasteVehicleIn] = None driver: Optional[PastePersonnelIn] = None escort: Optional[PastePersonnelIn] = None conflicts: list[ConflictAction] = Field(default_factory=list) model_config = {"populate_by_name": True} class PasteCommitResult(BaseModel): vehicle_id: Optional[str] = Field(default=None, alias="vehicleId") driver_id: Optional[str] = Field(default=None, alias="driverId") escort_id: Optional[str] = Field(default=None, alias="escortId") model_config = {"populate_by_name": True, "by_alias": True}