""" 风险检测相关Schema定义 """ from typing import List, Dict, Any, Optional from pydantic import BaseModel, Field # 检测规则相关Schema class DetectionRuleBase(BaseModel): rule_name: str = Field(..., description="规则名称") algorithm_code: str = Field(..., description="算法编码") description: Optional[str] = Field(None, description="规则描述") parameters: Optional[Dict[str, Any]] = Field(default_factory=dict, description="算法参数") is_enabled: bool = Field(True, description="是否启用") class DetectionRuleCreate(DetectionRuleBase): pass class DetectionRuleUpdate(BaseModel): rule_name: Optional[str] = None description: Optional[str] = None parameters: Optional[Dict[str, Any]] = None is_enabled: Optional[bool] = None class DetectionRuleResponse(DetectionRuleBase): rule_id: str created_at: str updated_at: Optional[str] = None class Config: from_attributes = True # 检测任务相关Schema class DetectionTaskCreate(BaseModel): task_name: str = Field(..., description="任务名称") task_type: str = Field(..., description="任务类型:periodic/on_demand/batch") entity_ids: Optional[List[str]] = Field(None, description="实体ID列表(可选,不提供将自动绑定)") entity_type: Optional[str] = Field(None, description="实体类型(可选,不提供将自动绑定)") period: str = Field(..., description="检测期间,格式:YYYY-MM") rule_ids: Optional[List[str]] = Field(None, description="规则ID列表") parameters: Optional[Dict[str, Any]] = Field(default_factory=dict, description="额外参数") class DetectionTaskResponse(BaseModel): task_id: str task_name: str task_type: str status: str entity_type: str period: str total_entities: int processed_entities: int result_count: Optional[int] = None summary: Optional[Dict[str, Any]] = None parameters: Dict[str, Any] error_message: Optional[str] = None created_at: str started_at: Optional[str] = None completed_at: Optional[str] = None class Config: from_attributes = True # 检测执行相关Schema class DetectionExecutionRequest(BaseModel): task_name: Optional[str] = Field(None, description="任务名称") entity_id: Optional[str] = Field(None, description="实体ID(可选,未提供时自动使用当前用户的实体)") entity_type: Optional[str] = Field(None, description="实体类型(可选)") period: str = Field(..., description="检测期间") rule_ids: List[str] = Field(..., description="规则ID列表") parameters: Optional[Dict[str, Any]] = Field(default_factory=dict, description="额外参数") class DetectionExecutionResponse(BaseModel): task_id: str status: str summary: Dict[str, Any] result_count: int executed_at: str # 检测结果相关Schema class RiskEvidence(BaseModel): type: str description: str data: Dict[str, Any] metadata: Optional[Dict[str, str]] = None class DetectionResultItem(BaseModel): entity_id: str entity_type: str risk_level: str risk_score: float description: str suggestion: str risk_data: Dict[str, Any] evidence: List[RiskEvidence] detected_at: str class DetectionResultResponse(BaseModel): id: int task_id: str rule_id: str result: DetectionResultItem class Config: from_attributes = True # 检测汇总相关Schema class DetectionSummaryResponse(BaseModel): entity_id: str entity_type: str period: str total_detections: int risk_distribution: Dict[str, int] avg_risk_score: float high_risk_count: int recommendations: List[str]