"""种子批管理 —— Pydantic 校验/序列化模型。""" from datetime import date, datetime from pydantic import BaseModel, ConfigDict, Field from app.core.base_schema import CommonSchema class SeedLotBaseSchema(BaseModel): model_config = ConfigDict(from_attributes=True) combination_id: int = Field(..., description="杂交组合") pollination_id: int | None = Field(default=None, description="授粉记录(关联补链)") lot_code: str = Field(..., description="种子批号") harvest_year: int | None = Field(default=None, description="收获年份") seed_count: int | None = Field(default=None, description="收获粒数(选择强度源头)") used_count: int = Field(default=0, description="已取用粒数") germination_rate: float | None = Field(default=None, description="发芽率%") storage_type: str | None = Field(default=None, description="存储类型(种子库/离体/DNA)") storage_location: str | None = Field(default=None, description="存放位置") test_date: date | None = Field(default=None, description="活力检测日期") remark: str | None = Field(default=None, description="备注") class SeedLotCreateSchema(SeedLotBaseSchema): pass class SeedLotUpdateSchema(SeedLotBaseSchema): combination_id: int | None = Field(default=None, description="杂交组合") pollination_id: int | None = Field(default=None, description="授粉记录(关联补链)") lot_code: str | None = Field(default=None, description="种子批号") harvest_year: int | None = Field(default=None, description="收获年份") seed_count: int | None = Field(default=None, description="收获粒数(选择强度源头)") used_count: int | None = Field(default=None, description="已取用粒数") germination_rate: float | None = Field(default=None, description="发芽率%") storage_type: str | None = Field(default=None, description="存储类型(种子库/离体/DNA)") storage_location: str | None = Field(default=None, description="存放位置") test_date: date | None = Field(default=None, description="活力检测日期") remark: str | None = Field(default=None, description="备注") class SeedLotOutSchema(SeedLotBaseSchema): id: int uuid: str combination_name: str | None = None # 联表填充(组合编号) pollination_name: str | None = None # 联表填充(授粉记录) remaining: int | None = None # 派生剩余可播种量 = seed_count - used_count lot_code: str | None = None combination_id: int | None = None pollination_id: int | None = None harvest_year: int | None = None seed_count: int | None = None used_count: int | None = None germination_rate: float | None = None storage_type: str | None = None storage_location: str | None = None test_date: date | None = None remark: str | None = None created_time: datetime | None = None updated_time: datetime | None = None created_by: CommonSchema | None = None updated_by: CommonSchema | None = None class SeedLotQueryParam(BaseModel): lot_code: str | None = Field(default=None, description="种子批号", json_schema_extra={"q": "like"}) combination_id: int | None = Field(default=None, description="杂交组合", json_schema_extra={"q": "eq"}) pollination_id: int | None = Field(default=None, description="授粉记录", json_schema_extra={"q": "eq"}) harvest_year: int | None = Field(default=None, description="收获年份", json_schema_extra={"q": "eq"}) storage_type: str | None = Field(default=None, description="存储类型", json_schema_extra={"q": "eq"})