From ba8e2f112b2d40399fc5af580413525befa2106c Mon Sep 17 00:00:00 2001 From: Hermes CI Fix Date: Wed, 26 Aug 2026 21:40:00 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20P0=E5=AE=98=E6=96=B9=E5=85=AC=E5=BC=8F?= =?UTF-8?q?=E5=AF=B9=E9=BD=90(=E6=96=B9=E6=A1=88A)+=E5=8F=8D=E5=90=91?= =?UTF-8?q?=E6=8C=87=E6=A0=87=E5=88=A4=E5=AE=9ABug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. F_AR_DAYS: 360→365官方口径, 历史值重算(6月75.6/7月116.5), 阈值等比调整(绿76/红91) 2. F_ROI改名: 总资产报酬率(ROA), 说明与官方ROI口径差异 3. 🔴反向指标Bug修复: kpis.py与dashboard.py的REVERSE_INDICATORS不一致 - 移除错误: F_QUICK_RATIO(速动比率越高越好)/F_INTEREST_COVER/P_QUALITY_RATE - 补充缺失: F_AR_DAYS/F_REBATE_RATE/F_FACTORY_REBATE_RATE/F_COST_CONTROL_RATE/F_INV_DAYS - 修复前F_AR_DAYS判定反了(116.5天显示绿, 75.6天显示黄) 4. 清理过时预警(id=6/269旧口径) --- backend/app/api/dashboard.py | 3 ++- backend/app/api/kpis.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/backend/app/api/dashboard.py b/backend/app/api/dashboard.py index af4cc25e..915f1b53 100644 --- a/backend/app/api/dashboard.py +++ b/backend/app/api/dashboard.py @@ -441,10 +441,11 @@ def my_dashboard( target = kpi_target_by_frequency(k) level = "gray" if actual is not None and target: - # 反向指标(越低越好):费用率/渠补率/应收天数/返利率/成本率 + # 反向指标(越低越好):费用率/渠补率/应收天数/返利率/成本率/存货天数 REVERSE_INDICATORS = { "F_COST_RATIO", "C_REBATE_RATE", "F_AR_DAYS", "F_REBATE_RATE", "F_FACTORY_REBATE_RATE", "F_COST_CONTROL_RATE", + "F_INV_DAYS", "F_DEBT_RATIO", "P_BUG_RATE", "P_REWORK_PCT", } if k.kpi_code in REVERSE_INDICATORS: # 反向:实际≤目标=绿;实际≤目标*1.1=黄;否则红 diff --git a/backend/app/api/kpis.py b/backend/app/api/kpis.py index 3645fb5a..58b08d35 100644 --- a/backend/app/api/kpis.py +++ b/backend/app/api/kpis.py @@ -107,7 +107,8 @@ def get_kpi_categories(current_user = Depends(require_auth), db: Session = Depen # ============================================================ REVERSE_INDICATORS = ['C_REBATE_RATE', 'P_BUG_RATE', 'P_REWORK_PCT', 'F_DEBT_RATIO', - 'P_QUALITY_RATE', 'F_COST_RATIO', 'F_INTEREST_COVER', 'F_QUICK_RATIO'] + 'F_COST_RATIO', 'F_AR_DAYS', 'F_REBATE_RATE', + 'F_FACTORY_REBATE_RATE', 'F_COST_CONTROL_RATE', 'F_INV_DAYS'] def _calc_five_tier_score(current_value, target_value, is_reverse=False):