diff --git a/backend/app/api/treasury.py b/backend/app/api/treasury.py index 2944f72e..bd7d9eff 100644 --- a/backend/app/api/treasury.py +++ b/backend/app/api/treasury.py @@ -159,7 +159,8 @@ def _eval_np001(db, entity_id, payment, rule) -> dict: budget_value, scope = bp.budget_value, f"kpi:{bp.kpi_id}@{period}" this_amt = _r(payment.amount) if budget_value is None: - return {"rule_code": "NP-001", "verdict": severity, "severity": severity, + return {"rule_code": "NP-001", "verdict": ("blocked" if severity == "block" else severity), + "severity": severity, "detail": _hit_detail("NP-001", rule.rule_version, "none", None, this_amt, (params.get("unmatched") or "specify_budget_flow") + "(未匹配到预算:走指定/补录预算流程并留痕,不直接卡死)")} @@ -175,7 +176,7 @@ def _eval_np001(db, entity_id, payment, rule) -> dict: prev = float(q.scalar() or 0) cumulative = _r(prev + this_amt) ok = cumulative <= float(budget_value) + TOL - verdict = "pass" if ok else severity + verdict = "pass" if ok else ("blocked" if severity == "block" else severity) basis = ("占用口径 %s;占用=已支付+已审批未支付+本单" % (params.get("occupancy") or "paid+approved+pending_approval+this")) if not ok: basis += f";占用 {cumulative} 超过预算 {_r(budget_value)}"