53 lines
1.2 KiB
Python
53 lines
1.2 KiB
Python
"""Pydantic output schema for DLP analysis results."""
|
|
|
|
from enum import Enum
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class RiskLevel(str, Enum):
|
|
CRITICAL = "CRITICAL"
|
|
HIGH = "HIGH"
|
|
MEDIUM = "MEDIUM"
|
|
LOW = "LOW"
|
|
|
|
|
|
class ViolationType(str, Enum):
|
|
PII = "PII"
|
|
FINANCIAL_DATA = "FINANCIAL_DATA"
|
|
SOURCE_CODE = "SOURCE_CODE"
|
|
REGULATORY_DOCUMENT = "REGULATORY_DOCUMENT"
|
|
LEGAL_CONTRACT = "LEGAL_CONTRACT"
|
|
PAYROLL_RECORD = "PAYROLL_RECORD"
|
|
CUSTOMER_LIST = "CUSTOMER_LIST"
|
|
INTERNAL_MEMO = "INTERNAL_MEMO"
|
|
NONE = "NONE"
|
|
|
|
|
|
class ActionClass(str, Enum):
|
|
PASS_ = "PASS"
|
|
ALERT = "ALERT"
|
|
BLOCK = "BLOCK"
|
|
|
|
|
|
class AttachmentResult(BaseModel):
|
|
filename: str
|
|
content_type: str
|
|
extracted_text_chars: int = 0
|
|
conversion_status: str = "ok" # "ok" | "failed" | "skipped"
|
|
|
|
|
|
class DLPResult(BaseModel):
|
|
email_file: str
|
|
subject: str
|
|
sender: str
|
|
recipient: str
|
|
date: str
|
|
risk_level: RiskLevel
|
|
risk_score: int = Field(ge=0, le=100)
|
|
violation_types: list[ViolationType]
|
|
action: ActionClass
|
|
summary: str
|
|
evidence: list[str]
|
|
attachments: list[AttachmentResult]
|
|
processing_errors: list[str] = Field(default_factory=list)
|