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>
75 lines
1.8 KiB
Python
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
|