"""Risk item submission and review contracts.""" from datetime import datetime from pydantic import Field from app.schemas.common import ApiSchema class RiskItemCreate(ApiSchema): source_type: str = Field(default="表单", min_length=1, max_length=20) source_file_id: str | None = Field(default=None, max_length=50) product_name: str = Field(min_length=1, max_length=200) product_category: str | None = Field(default=None, max_length=100) supplier: str | None = Field(default=None, max_length=300) factory: str | None = Field(default=None, max_length=300) stage_new: str | None = Field(default=None, max_length=100) description: str = Field(min_length=5) defect_level: str | None = Field(default=None, max_length=10) solution: str | None = None photos: list[str] = Field(default_factory=list, max_length=10) class RiskItemUpdate(ApiSchema): product_name: str | None = Field(default=None, min_length=1, max_length=200) product_category: str | None = Field(default=None, max_length=100) supplier: str | None = Field(default=None, max_length=300) factory: str | None = Field(default=None, max_length=300) stage_new: str | None = Field(default=None, max_length=100) description: str | None = Field(default=None, min_length=5) defect_level: str | None = Field(default=None, max_length=10) solution: str | None = None photos: list[str] | None = Field(default=None, max_length=10) class RiskItemData(ApiSchema): id: int source_type: str source_file_id: str | None product_name: str | None product_category: str | None supplier: str | None factory: str | None stage_new: str | None description: str | None defect_level: str | None solution: str | None photos: list[str] submitted_by: str | None submitted_at: datetime | None status: str created_at: datetime class ReviewActionRequest(ApiSchema): action: str = Field(pattern="^(通过|驳回)$") note: str = Field(min_length=2, max_length=2000) class ReviewRecordData(ApiSchema): id: int risk_item_id: int pre_review_result: str | None pre_review_note: str | None reviewer: str | None review_action: str | None review_note: str | None reviewed_at: datetime | None case_id: int | None