feat: remove cost/费用 statistics from clinical analytics

Per request — drop all monetary statistics (住院费用 is sensitive).
- Backend statistics.py: remove mean_cost KPI + cost_histogram / cost_by_disease
  / cost_vs_los from /inpatient-clinical (models, computation, response)
- Frontend: drop 人均费用 KPI card (now 4 KPIs), 住院费用分布, 各病种平均费用,
  费用×住院天数散点; delete CostByDiseaseChart + CostVsLosScatter components;
  trim statsApi type + e2e fixture + chartColors

Clinical page now: KPI(总人次/中位住院日/治愈好转率/急诊占比) + LOS dist + LOS-by-disease
box + outcome donut + admission-route donut + age-band BMI box.

Gates: backend 106 pytest · tsc 0 · build ok · clinical+user-flows e2e 19/19 ·
live endpoint confirmed cost-free

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-21 21:50:30 +08:00
parent 4df6c71628
commit fe8bed58f5
9 changed files with 8 additions and 222 deletions

View File

@@ -7,8 +7,6 @@ import { TESTIDS } from '@/utils/testids';
import { ClinicalKpiRow } from '@/components/clinical/ClinicalKpiRow';
import { HistogramChart } from '@/components/clinical/HistogramChart';
import { BoxPlotRows, type BoxRow } from '@/components/clinical/BoxPlotRows';
import { CostVsLosScatter } from '@/components/clinical/CostVsLosScatter';
import { CostByDiseaseChart } from '@/components/clinical/CostByDiseaseChart';
import { DonutChart, type DonutSlice } from '@/components/clinical/DonutChart';
import { CLINICAL_COLORS } from '@/components/clinical/chartColors';
@@ -58,7 +56,7 @@ export function ClinicalAnalysis() {
</h1>
<p className="text-[12px] text-text-secondary">
BMI
</p>
</div>
);
@@ -140,21 +138,6 @@ export function ClinicalAnalysis() {
</Card>
</div>
{/* 费用:分布 + 各病种平均费用 */}
<div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
<Card title="住院费用分布">
<HistogramChart data={data.cost_histogram ?? []} color={CLINICAL_COLORS.cost} countLabel="人次" />
</Card>
<Card title="各病种平均费用">
<CostByDiseaseChart data={data.cost_by_disease ?? []} />
</Card>
</div>
{/* 费用 vs 住院天数 散点 */}
<Card title="费用 vs 住院天数">
<CostVsLosScatter data={data.cost_vs_los ?? []} />
</Card>
{/* 出院结局 + 入院途径 双环 */}
<div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
<Card title="出院结局构成">