""" KPI 項目 Schemas """ from typing import Optional from pydantic import BaseModel, Field class KPIItemBase(BaseModel): """KPI 項目基本資訊""" name: str category: str # financial, customer, internal, learning weight: int = Field(..., ge=1, le=100, description="權重百分比 (1-100)") class KPIItemCreate(KPIItemBase): """建立 KPI 項目""" template_id: Optional[int] = None level0_criteria: Optional[str] = None level1_criteria: Optional[str] = None level2_criteria: Optional[str] = None level3_criteria: Optional[str] = None level4_criteria: Optional[str] = None class KPIItemUpdate(BaseModel): """更新 KPI 項目""" name: Optional[str] = None category: Optional[str] = None weight: Optional[int] = Field(None, ge=1, le=100) level0_criteria: Optional[str] = None level1_criteria: Optional[str] = None level2_criteria: Optional[str] = None level3_criteria: Optional[str] = None level4_criteria: Optional[str] = None class KPIItemResponse(KPIItemBase): """KPI 項目回應""" id: int sheet_id: int template_id: Optional[int] sort_order: int level0_criteria: Optional[str] level1_criteria: Optional[str] level2_criteria: Optional[str] level3_criteria: Optional[str] level4_criteria: Optional[str] self_eval_level: Optional[int] self_eval_note: Optional[str] final_level: Optional[int] final_note: Optional[str] class Config: from_attributes = True class SelfEvalItem(BaseModel): """自評項目""" id: int level: int = Field(..., ge=0, le=4, description="自評等級 (0-4)") note: Optional[str] = None class ManagerEvalItem(BaseModel): """主管評核項目""" id: int level: int = Field(..., ge=0, le=4, description="評核等級 (0-4)") note: Optional[str] = None