feat: C5 FR-9 预警处置时效升级(RISK-007,P0)

- 仓储:新增 list_pending_alerts_all / update_alert_escalation(统一读改写 payload,
  升级标记独占写入,status/handler_* 列不碰;_parse_alert 补 created_at/handled_at
  字符串→datetime 解析,兼容 sqlite 原生 DDL)
- escalation_service.scan_and_escalate:扫描判级(普通 4h/24h、AML 1h/4h 短通道)、
  幂等闸门(仅升不降)、先持久化再推送、按 (customer_id,level) 降噪合并一次推送、
  通知链累积(L1 含 risk_manager / L2 含 compliance)、逐单+任务级审计
- scripts/cron/escalation_scan.py:15min 定时扫描壳(sys.path 引导 + new_trace + JSON 摘要)
- 对话线 query_overdue_alerts Tool + 注册表 + 意图词(置于 alert_query 之前)+ summarize 分支
- C5 前置:seed STAFF-31001/31002(risk_manager) + deps 矩阵放行 + chat.py 显式 deny +
  risk.py 台账全量只读分支;JWT 手册 §5.3/§5.4/§6.1 增补 risk_manager
- 测试:conftest 回拨 fixture + test_escalation_service(9) + risk_api/manager(5) +
  chat deny(1) + chat_tools overdue(2);全量 470 绿(453+17)
This commit is contained in:
2026-09-07 19:28:04 +08:00
parent fe4801bc0a
commit 90d0660b44
15 changed files with 720 additions and 3 deletions
+5
View File
@@ -64,8 +64,13 @@ def list_alerts_api(
page_size: int = Query(20, ge=1, le=100),
) -> dict:
"""预警台账分页(FR-4)。compliance 强制 aml 过滤(A-7:仅返回 aml 单)。"""
# C5 前置(PRD 4A.1):risk_manager 经 AGENT_ACCESS_MATRIX 放行 HTTP 通道,
# 此处同 risk_officer 全量只读路径(无处置入口);handle/aml/scan 端点角色
# 校验保持 risk_officer only,manager 触碰即 403,零代码改动。
if auth.has_role("risk_officer"):
pass
elif auth.has_role("risk_manager"):
pass
elif auth.has_role("compliance"):
alert_type = "aml"
else: