127 lines
3.7 KiB
Python
127 lines
3.7 KiB
Python
"""
|
||
风险检测相关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]
|