feat: 数据治理4条规则 — 入库必检+元数据+编码规范+战略分级

This commit is contained in:
Hermes CI Fix
2026-08-10 23:40:31 +08:00
parent e1ea5cd14d
commit 37f26148fe
5 changed files with 233 additions and 31 deletions
+15
View File
@@ -9,6 +9,7 @@ from datetime import datetime
from app.database import get_db
from app.auth_middleware import require_role
from app.models import KPITemplate, KPIDefinition, OperationLog
from app.api.kpi_governance import validate_kpi_payload, kpi_issues_message
router = APIRouter(prefix="/api/cma/templates", tags=["KPI模板库"],
dependencies=[Depends(require_role("ceo", "finance", "business", "it"))],
@@ -120,6 +121,20 @@ def instantiate_template(template_id: int, data: dict, db: Session = Depends(get
if existing:
raise HTTPException(400, f"KPI编码 {kpi_code} 已存在,请修改")
# 数据治理:入库必检(规则1) + 编码规范(规则3)
merged = {
"kpi_code": kpi_code,
"kpi_name": kpi_name,
"dimension": data.get("dimension", t.dimension),
"category": data.get("category", t.category),
"formula": data.get("formula", t.formula),
"unit": data.get("unit", t.unit or "%"),
"target_value": data.get("target_value", t.target_value),
}
gov_issues = [i for i in validate_kpi_payload(merged, db=db) if i["rule"] in (1, 3)]
if gov_issues:
raise HTTPException(422, detail={"message": "数据校验不通过", "errors": kpi_issues_message(gov_issues)})
kpi = KPIDefinition(
template_id=t.id,
is_system=0, # 从模板实例化的KPI不是系统预置