from typing import Optional from pydantic import BaseModel, Field class TransportationRequest(BaseModel): """Schema cho yêu cầu dự đoán phương thức vận chuyển.""" # Thông tin bắt buộc project_code: str = Field(..., description="Mã dự án", example="100-CI-T01") country: str = Field(..., description="Quốc gia đích", example="Vietnam") pack_price: float = Field(..., description="Giá mỗi gói (USD)", example=50.0) vendor: str = Field(..., description="Nhà cung cấp", example="ABBOTT LABORATORIES") # Thông tin tùy chọn (sẽ ước tính nếu không có) weight_kg: Optional[float] = Field(None, description="Khối lượng (kg)", example=25.0) freight_cost_usd: Optional[float] = Field(None, description="Chi phí vận chuyển (USD)", example=500.0) delivery_date: Optional[str] = Field(None, description="Ngày giao hàng (YYYY-MM-DD)", example="2025-08-20") line_item_quantity: Optional[float] = Field(100.0, description="Số lượng để ước tính weight", example=100.0) class TransportationResponse(BaseModel): """Schema cho kết quả dự đoán phương thức vận chuyển.""" predicted_shipment_mode: str = Field(..., description="Phương thức vận chuyển đề xuất") confidence_score: float = Field(..., description="Độ tin cậy (0-1)") alternative_modes: list = Field(..., description="Các phương thức khác") # Thông tin bổ sung estimated_weight_kg: Optional[float] = Field(None, description="Khối lượng ước tính") estimated_freight_cost_usd: Optional[float] = Field(None, description="Chi phí ước tính") encoded_features: Optional[dict] = Field(None, description="Features encoded") processing_notes: Optional[list] = Field(None, description="Ghi chú")