fix(alerts): enforce caliber ruling R5
- alert_entity_scope: add is_attributable_period / guard_alert_period (R5) and entity_alert_guard (R1, any write path) - alert_rules.run_all_alert_checks: skip non-YYYY-MM period alert rows (R5) - bot_bridge / bot_bridge_v2: R1 demo-entity guard + R5 period guard on write paths - tests: new R5 suite (10 cases) Not pushed / not deployed (release gate held by 任总).
This commit is contained in:
@@ -87,6 +87,45 @@ def period_in_window(period, now: Optional[datetime] = None) -> bool:
|
||||
return str(period) >= window_lower_period(now)
|
||||
|
||||
|
||||
# ── R5(裁定 2026-09-19,R3 的一致延伸):可归期原则 + 生成侧守卫 ──
|
||||
|
||||
def is_attributable_period(period) -> bool:
|
||||
"""R5:期间是否「可归期」= 规整月 `YYYY-MM`。
|
||||
|
||||
`period IS NULL` 与 `2026-H1/H2/FY` 同属「不可归期」→ 不参与预警
|
||||
(不可复核、不可归责、不可驱动行动)。
|
||||
"""
|
||||
return is_month_period(period)
|
||||
|
||||
|
||||
def guard_alert_period(period, *, source: str = "", detail: str = "") -> bool:
|
||||
"""R5 生成侧守卫:期间非规整月(含 None)→ 该 `kpi_alerts` 行**不入库**(跳过 + 记日志)。
|
||||
|
||||
返回 True = 放行(可入库);False = 跳过(**调用点必须不落库**)。
|
||||
裁定原文:「任何生成路径产出的 kpi_alerts 行,period 非 YYYY-MM 一律不入库(跳过并记日志),防复发。」
|
||||
"""
|
||||
if is_attributable_period(period):
|
||||
return True
|
||||
logger.info(
|
||||
"R5 期间守卫:跳过不入库(不可归期,非规整月 YYYY-MM)period=%r source=%s detail=%s",
|
||||
period, source, detail)
|
||||
return False
|
||||
|
||||
|
||||
def entity_alert_guard(db_session, entity_id, *, source: str = "", detail: str = "") -> bool:
|
||||
"""R1 通用生成侧守卫:demo 账套在任何写通道上都不得产生业务预警。
|
||||
|
||||
「R1 与入口无关」——包含按显式 `entity_id` 写入的 Bot 通道(bot_bridge / bot_bridge_v2 等)。
|
||||
返回 True = 放行;False = 跳过(原因 = R1 demo 账套排除,沿用 `excluded_entity_ids`)。
|
||||
"""
|
||||
if is_excluded_entity(db_session, entity_id):
|
||||
logger.info(
|
||||
"R1 账套守卫:跳过不入库(demo 演示账套不产生业务预警)entity_id=%s source=%s detail=%s",
|
||||
entity_id, source, detail)
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def scope_summary(db_session, now: Optional[datetime] = None) -> dict:
|
||||
"""口径证据(写日志/报告用):被排除账套 + 窗口下限"""
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user