Files
KPI-management/app/schemas/kpi_item.py
DonaldFang 方士碩 f810ddc2ea Initial commit: KPI Management System Backend
Features:
- FastAPI backend with JWT authentication
- MySQL database with SQLAlchemy ORM
- KPI workflow: draft → pending → approved → evaluation → completed
- Ollama LLM API integration for AI features
- Gitea API integration for version control
- Complete API endpoints for KPI, dashboard, notifications

Tables: KPI_D_* prefix naming convention

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 16:20:57 +08:00

75 lines
1.8 KiB
Python

"""
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