update kpi mortality card to change color based on the status

This commit is contained in:
Alberto-Audrix committed 2026-10-05 10:43:28 +07:00
1 parent cceaf38a25
commit 3fdd9b936f
3 files changed
+105 -1

No files matched your search

+49
View File
@@ -0,0 +1,49 @@
import type { KpiStatus } from '../components/KpiCard.tsx';
/**
* Daily mortality % of DOC thresholds (manager operational rules):
* - <= 0.05%: Normal / OK (green)
* - > 0.05% and < 0.10%: Warning (yellow)
* - >= 0.10%: Critical (red)
*/
export const DAILY_MORTALITY_DOC_THRESHOLDS = {
warning_pct: 0.05,
critical_pct: 0.1,
} as const;
/**
* Calculates daily mortality percentage relative to initial DOC count.
*/
export function getDailyMortalityPct(
mortalityToday: number | null | undefined,
docInCount: number | null | undefined
): number | null {
if (mortalityToday == null || docInCount == null || docInCount <= 0) {
return null;
}
return (mortalityToday / docInCount) * 100;
}
/**
* Evaluates the KPI status for daily mortality based on DOC thresholds.
* - 'na' when data is unavailable
* - 'critical' when daily mortality >= 0.10%
* - 'warning' when daily mortality > 0.05%
* - 'ok' when daily mortality <= 0.05%
*/
export function getDailyMortalityStatus(
mortalityToday: number | null | undefined,
docInCount: number | null | undefined
): KpiStatus {
if (mortalityToday == null) return 'na';
if (docInCount == null || docInCount <= 0) return 'ok';
const dailyPct = (mortalityToday / docInCount) * 100;
if (dailyPct >= DAILY_MORTALITY_DOC_THRESHOLDS.critical_pct) {
return 'critical';
}
if (dailyPct > DAILY_MORTALITY_DOC_THRESHOLDS.warning_pct) {
return 'warning';
}
return 'ok';
}