"""可复用的供应商准入业务数据结构。

当前主流程主要让 Agent 写 Markdown 报告，这些 Pydantic 模型用于约束工具、
接口或后续结构化输出的稳定字段。把风险等级集中成枚举，可以避免业务代码中
出现 ``med``、``moderate`` 等无法统一比较的自由文本。
"""

from __future__ import annotations

from enum import StrEnum

from pydantic import BaseModel, Field


class RiskLevel(StrEnum):
    """风险等级；UNKNOWN 表示证据不足，不代表风险为零。"""

    LOW = "low"
    MEDIUM = "medium"
    HIGH = "high"
    CRITICAL = "critical"
    UNKNOWN = "unknown"


class RiskFinding(BaseModel):
    """单条可追溯风险发现。

    evidence 保存可回溯来源，confidence 表示结论可信程度。风险严重度和证据
    可信度是两个维度，例如“高风险、低置信度”仍是有效组合。
    """

    domain: str = Field(description="风险领域")
    title: str = Field(description="风险标题")
    level: RiskLevel
    evidence: list[str] = Field(description="证据文件路径或外部来源")
    impact: str
    recommendation: str
    # Pydantic 在模型边界强制置信度落在 [0, 1]，避免下游再做防御性判断。
    confidence: float = Field(ge=0, le=1)


class OnboardingDecision(BaseModel):
    """准备提交给外部采购系统的准入决定。"""

    vendor_name: str
    decision: str = Field(description="approve、conditional 或 reject")
    report_path: str

class RenewalDecision(BaseModel):
    """准备提交给外部采购系统的续约决定。"""

    vendor_name: str
    decision: str = Field(description="renewal、conditional 或 non-renewal")
    report_path: str