feat(cvp): CM≤0 fail-closed 禁写0.0 + 博海BEP扩面(新口径) + 影子CVP标注is_mock + 前端NULL守卫/不适用
ci/woodpecker/push/main Pipeline failed

- kpi_bep_deriver.py: 实体口径注册表(app/utils/bep_caliber.py 单一事实源);博海(6001/6401/6601-03/1602);
  fail-closed② 边际贡献非正/固定成本退化 ⇒ 五条保本值 NULL+pending+remark'不适用'(禁回落0.0)
- dashboard.py /bep-card: 多实体口径 + not_applicable 态返回 label/reason
- predict.py /cvp-detailed: 显式 source=scenario_simulation + is_mock=true(影子CVP标注)
- 前端 BEPBreakEvenCard.vue: 全量数值判空 + '不适用'态;PredictDashboard.vue: 情景模拟·非实测标签

验收 accept-bep-cvp-20261003.py: BEFORE 2/11 → AFTER 11/11 PASS
任务 finance-20261003-cvp-fix-and-bohai-coverage-fullstack
This commit is contained in:
Hermes CI Fix
2026-10-03 16:03:12 +08:00
parent 8631ce718f
commit 1f1385ebbf
7 changed files with 662 additions and 147 deletions
+5 -1
View File
@@ -35,7 +35,11 @@
</el-col>
<el-col :span="16">
<el-card v-if="cvpResult.breakeven_revenue !== undefined">
<template #header>分析结果</template>
<template #header>
<span>分析结果</span>
<el-tag v-if="cvpResult.is_mock || cvpResult.source === 'scenario_simulation'"
type="warning" size="small" effect="plain" style="margin-left:8px;">情景模拟 · 非实测</el-tag>
</template>
<el-row :gutter="12">
<el-col :span="8"><div class="result-card"><div class="r-label">保本点(销售额)</div><div class="r-value red">{{ formatMoney(cvpResult.breakeven_revenue, 'wan') }} 万</div></div></el-col>
<el-col :span="8"><div class="result-card"><div class="r-label">保本点(销售量)</div><div class="r-value red">{{ cvpResult.breakeven_units?.toLocaleString() }} 瓶</div></div></el-col>