ASK-20260924-15/17: Bot 通道缺省账套→400 + 差异/趋势入口期间口径回落
- deps.get_entity_id: Bot 通道(带 X-BOT-KEY)无显式账套 → 400(旧为兜底 entity 1=酣客); 无 key 的存量公开/用户端点行为不变(仍 401/兜底 1) - 新增 deps.require_bot_entity_id():写端点缺省账套一处收口 → 400(406/422 同族) 接入 bot_bridge(×2) / bot_bridge_v2 / bot_suggestions / cash_vouchers_json,并同步文档口径 - deviation_engine.run_deviation_check: period=None 不再硬编码当月,逐 KPI 回落 「该 KPI 自己的最近可用期间」(裁定2b,单一实现收口到 alert_entity_scope);(当月无 kpi_values ⇒ 差异/趋势入口永久 0 新增);R2/R3 窗口判定改为逐 KPI;显式 period 语义不变 - alert_generator.resolve_latest_period 委托同一实现(消除期间口径两份) - 测试:新增 tests/test_ask15_17_engine_and_entity_required_20260925.py(12 例); 4 个既有测试文件把「旧兜底账套 1」显式化(断言未改)
This commit is contained in:
@@ -44,17 +44,15 @@ def resolve_latest_period(db_session, kpi_id=None):
|
||||
也不被别人(他账套/演示账套)更新的新期间带偏——实证:全局 MAX(period)=2026-09
|
||||
但那是演示账套 e6 的 8 条数据,酣客(e1) 的最新可用期间是 2026-08。
|
||||
|
||||
实现说明:伪期间过滤在 **Python 侧**做(`SELECT DISTINCT period` 只有十几行),
|
||||
不依赖 MySQL 的 `REGEXP` —— SQLite 测试库不注册 REGEXP,用 SQL 侧正则会让
|
||||
单测与生产走两套语义。
|
||||
2026-09-25(ASK-20260924-15):实现**收口到唯一事实源**
|
||||
`app.utils.alert_entity_scope.resolve_latest_available_period`——原实现与
|
||||
`deviation_engine` 的期间口径各自一份,导致差异/趋势入口仍硬编码当月。
|
||||
语义差异(有意):判据由本文件旧正则 `^[0-9]{4}-[0-9]{2}$`(会接受 `2026-13`
|
||||
这类非法月)改为 R3 单一正则 `is_month_period`(严格 01–12);现网数据无
|
||||
非法月期间,故行为逐项一致(本单 A/B 实测)。
|
||||
"""
|
||||
q = db_session.query(KPIValue.period).filter(KPIValue.actual_value.isnot(None))
|
||||
if kpi_id is not None:
|
||||
q = q.filter(KPIValue.kpi_id == kpi_id)
|
||||
for (p,) in q.distinct().order_by(KPIValue.period.desc()).all():
|
||||
if _PERIOD_RE.fullmatch(str(p or "")):
|
||||
return p
|
||||
return None
|
||||
from app.utils.alert_entity_scope import resolve_latest_available_period
|
||||
return resolve_latest_available_period(db_session, kpi_id)
|
||||
|
||||
|
||||
def _parse_threshold(expr: str) -> tuple:
|
||||
|
||||
Reference in New Issue
Block a user