diff --git a/backend/scripts/kpi_review_gate.py b/backend/scripts/kpi_review_gate.py index a196af8b..aee9a56e 100644 --- a/backend/scripts/kpi_review_gate.py +++ b/backend/scripts/kpi_review_gate.py @@ -11,7 +11,7 @@ 判定口径(R2 六条 + R3 七类例外): R2-① `kpi_value_sources.status='active'` 且该期间 validation 锚点 match=true(锚点缺失/为假 → 例外); 规则级 matched 数一并记录(kpi3 规则 matched=2/3:2026-07 match=false、2026-08 match=true)。 - R2-② 与同 (kpi_id, period) 非 auto 主值对账:金额类 |Δ| ≤ max(1000元, 0.5%×|主值|);比率类 |Δ| ≤ 0.5 个百分点。 + R2-② 与同 (kpi_id, period) 非 auto 主值对账:金额类 |Δ| ≤ max(1000元, 0.5%×|主值|);比率类 |Δ| ≤ 0.5 个百分点(即 R7 阈值,任总 2026-09-14 18:17 确认 · 正式规则)。 R2-③ 主值 calculated_at ≥ 该期取数科目凭证明细末次同步时间(无批次时点差)。 实现口径:**按重大性适用**——Δ 在容差内时主值陈旧不改变对外数字,仍按「同一事实重复行」归并; Δ 超容差且主值陈旧 → 例外子类 batch_lag(批次时点差,非差错);Δ 超容差且主值不陈旧 → caliber_diff(口径差异)。 @@ -57,10 +57,13 @@ logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(name)s: %(message)s") logger = logging.getLogger("cma.kpi_review_gate") +# R7 阈值(金额 max(1000元, 0.5%×|主值|)、比率 0.5 个百分点)为任总 2026-09-14 18:17 确认的**正式规则** +# (原文为建议值,数值未变)。仅标签/注释类改动不得改 RULE_VERSION——改版本号会误触 R2-⑥ +# 「规则变更后首次归集」例外,把本可 T+0 转正的行拦成 pending。 RULE_VERSION = "20260914" -AMOUNT_MIN_YUAN = 1000.0 # R7 金额类下限(元) -AMOUNT_PCT = 0.005 # R7 金额类比例(0.5%×|主值|) -RATIO_PP = 0.005 # R7 比率类(0.5 个百分点;比率值以小数存,13% 存 0.13) +AMOUNT_MIN_YUAN = 1000.0 # R7 金额类下限(元)——任总 2026-09-14 18:17 确认 · 正式规则 +AMOUNT_PCT = 0.005 # R7 金额类比例(0.5%×|主值|)——任总 2026-09-14 18:17 确认 · 正式规则 +RATIO_PP = 0.005 # R7 比率类(0.5 个百分点;比率值以小数存,13% 存 0.13)——任总 2026-09-14 18:17 确认 · 正式规则 AUTO_SOURCE = "auto_collect" MANUAL_SOURCES = ("manual", "excel", "excel-import") DERIVED_CALCS = ("cashflow_direct",)