Files
wecom_it_smart_desk/backend/app/constants.py
T

128 lines
6.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# 企微IT智能服务台 — 阶段5 自动化闭环 常量定义
# =============================================================================
# 说明:集中定义自动化引擎的 WS 事件名、执行模式、风险等级、会话/动作状态、
# 映射源优先级、以及自动化专用错误码。
#
# 约定说明(重要,与架构设计的一致性取舍):
# 1. 统一响应格式沿用项目既有 {code: int, data: {}, message: str}
# 因此架构文档中的错误码段 AUT-001~AUT-0xx 在此以数值形式落地为 4001~40xx,
# WS 的 automation.error 事件同样携带该数值 code。
# 2. WS 事件名统一以 automation. 为前缀(架构约定)。
# =============================================================================
# --------------------------------------------------------------------------
# WebSocket 事件名(前缀 automation.
# --------------------------------------------------------------------------
AUTOMATION_WS_PROGRESS = "automation.progress" # 进度推送(步骤开始/完成)
AUTOMATION_WS_ACTION_REQUIRED = "automation.action_required" # 需要坐席审批 / 员工二次确认
AUTOMATION_WS_RESOLVED = "automation.resolved" # 处置成功,等待/已关单
AUTOMATION_WS_TAKEOVER = "automation.takeover" # 转人工接管
AUTOMATION_WS_ERROR = "automation.error" # 异常(转人工 + 通知)
AUTOMATION_WS_EVENTS = {
"progress": AUTOMATION_WS_PROGRESS,
"action_required": AUTOMATION_WS_ACTION_REQUIRED,
"resolved": AUTOMATION_WS_RESOLVED,
"takeover": AUTOMATION_WS_TAKEOVER,
"error": AUTOMATION_WS_ERROR,
}
# --------------------------------------------------------------------------
# 执行模式(双模式执行引擎)
# --------------------------------------------------------------------------
AUTOMATION_MODE_PLAN_ONLY = "plan_only" # 仅生成处置方案,不真正执行外部动作
AUTOMATION_MODE_REAL_EXEC = "real_exec" # 真正执行外部系统动作
# --------------------------------------------------------------------------
# 风险等级
# --------------------------------------------------------------------------
AUTOMATION_RISK_READ = "read" # 只读:默认可自动执行
AUTOMATION_RISK_LOW = "low" # 低风险写操作:默认可自动执行
AUTOMATION_RISK_HIGH = "high" # 高危:必须审批或员工 H5 二次确认
# 默认可自动执行的风险等级集合(其余必须走审批/确认)
AUTOMATION_AUTO_EXECUTABLE_RISKS = {AUTOMATION_RISK_READ, AUTOMATION_RISK_LOW}
# --------------------------------------------------------------------------
# 会话状态机
# --------------------------------------------------------------------------
AUTOMATION_SESSION_CREATED = "created"
AUTOMATION_SESSION_RUNNING = "running"
AUTOMATION_SESSION_PAUSED = "paused" # 等待审批/确认时挂起
AUTOMATION_SESSION_RESOLVED = "resolved" # 处置成功,等待静默关单/员工确认
AUTOMATION_SESSION_CLOSED = "closed" # 已关单
AUTOMATION_SESSION_HANDOFF = "handoff" # 已转人工
AUTOMATION_SESSION_ERROR = "error"
# 终态集合(不再流转)
AUTOMATION_SESSION_TERMINAL_STATES = {
AUTOMATION_SESSION_CLOSED,
AUTOMATION_SESSION_HANDOFF,
AUTOMATION_SESSION_ERROR,
}
# --------------------------------------------------------------------------
# 动作状态机
# --------------------------------------------------------------------------
AUTOMATION_ACTION_PENDING = "pending"
AUTOMATION_ACTION_RUNNING = "running"
AUTOMATION_ACTION_SUCCESS = "success"
AUTOMATION_ACTION_FAILED = "failed"
AUTOMATION_ACTION_SKIPPED = "skipped"
AUTOMATION_ACTION_AWAIT_APPROVAL = "await_approval"
AUTOMATION_ACTION_APPROVED = "approved"
AUTOMATION_ACTION_REJECTED = "rejected"
# --------------------------------------------------------------------------
# 映射源与优先级(联软主,eHR 兜底;aTrust 密钥未到后置)
# --------------------------------------------------------------------------
MAPPING_SOURCES = ["lianruan", "atrust", "ehr"]
MAPPING_SOURCE_PRIORITY = {
"lianruan": 0, # 联软终端安全管理(主,支持 strusername 直接映射)
"atrust": 1, # 零信任 / aTrust(密钥未到,预留占位)
"ehr": 2, # 北森 EHR 静态映射(兜底)
}
# 静默关单 Redis TTL(秒):处置成功后 10 分钟内员工无异议则自动关单
AUTOMATION_SILENT_CLOSE_TTL = 600
# --------------------------------------------------------------------------
# 自动化错误码(数值,沿用项目 {code:int} 约定)
# 架构文档 AUT-001~AUT-0xx → 4001~40xx
# --------------------------------------------------------------------------
class AutomationErrorCode:
SCENARIO_NOT_FOUND = 4001 # 场景未启用或未配置
INTENT_FAILED = 4002 # 意图识别失败
EXTERNAL_CALL_FAILED = 4003 # 外部系统调用失败
ACTION_REJECTED = 4004 # 动作被拒绝(风险/需审批未通过)
SESSION_NOT_FOUND = 4005 # 自动化会话不存在
APPROVAL_REJECTED = 4006 # 审批被驳回
TIMEOUT_HANDOFF = 4007 # 超时自动接管
EMPLOYEE_DECLINED = 4008 # 员工拒绝/未二次确认
CONFIG_ERROR = 4009 # 配置错误(阈值/场景/映射)
MAPPING_FAILED = 4010 # 终端/员工映射失败
INVALID_MODE = 4011 # 非法执行模式
ROLLBACK_FAILED = 4012 # 回滚补偿失败
AUTOMATION_ERROR_MESSAGES = {
AutomationErrorCode.SCENARIO_NOT_FOUND: "场景未启用或未配置",
AutomationErrorCode.INTENT_FAILED: "意图识别失败",
AutomationErrorCode.EXTERNAL_CALL_FAILED: "外部系统调用失败",
AutomationErrorCode.ACTION_REJECTED: "动作被拒绝(需审批或高危)",
AutomationErrorCode.SESSION_NOT_FOUND: "自动化会话不存在",
AutomationErrorCode.APPROVAL_REJECTED: "审批被驳回",
AutomationErrorCode.TIMEOUT_HANDOFF: "处置超时,已自动转人工",
AutomationErrorCode.EMPLOYEE_DECLINED: "员工未确认或已拒绝",
AutomationErrorCode.CONFIG_ERROR: "自动化配置错误",
AutomationErrorCode.MAPPING_FAILED: "终端/员工映射失败",
AutomationErrorCode.INVALID_MODE: "非法的执行模式",
AutomationErrorCode.ROLLBACK_FAILED: "回滚补偿失败",
}
def automation_error_message(code: int) -> str:
"""根据自动化错误码返回默认中文消息。"""
return AUTOMATION_ERROR_MESSAGES.get(code, "自动化处理异常")