Newer
Older
client_dwatch / lib / format / kpi-delta.ts
/**
 * レポートの KPI カードの前期比(矢印・数・色)。★丸めた数が 0 なら「→」・色なし★(指示書BC 5-3。D-183)—
 *   施設別パフォーマンスの「変化」(`diffText()` / `diffTone()`)と同じ考え方。旧: 生値の符号で「▼0%」を改善の色で出していた。
 * ★期待値表は `lib/format/__tests__/kpi-delta.test.ts`★(K1〜K8)。
 */
export interface KpiDeltaView {
  arrow: "▲" | "▼" | "→";
  /** 表示する数(%。整数に丸めた絶対値) */
  percent: number;
  /** good = 改善 / bad = 悪化 / neutral = 横ばい */
  tone: "good" | "bad" | "neutral";
}

export function kpiDeltaView(diff: number, betterWhenHigher: boolean): KpiDeltaView {
  const percent = Math.round(Math.abs(diff));
  if (percent === 0) return { arrow: "→", percent: 0, tone: "neutral" };
  return {
    arrow: diff > 0 ? "▲" : "▼",
    percent,
    tone: diff > 0 === betterWhenHigher ? "good" : "bad",
  };
}