Newer
Older
client_dwatch / lib / format / __tests__ / kpi-delta.test.ts
import { describe, expect, it } from "vitest";
import { kpiDeltaView, type KpiDeltaView } from "@/lib/format/kpi-delta";

/**
 * レポートの KPI カードの前期比(指示書BC 5-3。D-183)。
 * ★丸めた数が 0 なら「→」・色なし★(施設別パフォーマンスの「変化」と同じ)。
 * ★◎○△× の判定ではない★(前期比の矢印と色は表示。`CLAUDE.md` §4.3 の対象外)。
 */
describe("kpiDeltaView — 矢印・数・色", () => {
  const cases: Array<[string, number, boolean, KpiDeltaView]> = [
    ["K1 0 は横ばい", 0, true, { arrow: "→", percent: 0, tone: "neutral" }],
    ["K2 +0.4(旧: ▲0 good)", 0.4, true, { arrow: "→", percent: 0, tone: "neutral" }],
    ["K3 -0.4・下がったら良い(旧: ▼0 good)", -0.4, false, { arrow: "→", percent: 0, tone: "neutral" }],
    ["K4 +0.5 は丸めて1 → 矢印を出す", 0.5, true, { arrow: "▲", percent: 1, tone: "good" }],
    ["K5 -0.5 は悪化", -0.5, true, { arrow: "▼", percent: 1, tone: "bad" }],
    ["K6 エラー発生率は下がったら改善", -2.6, false, { arrow: "▼", percent: 3, tone: "good" }],
    ["K7 エラー発生率は上がったら悪化", 3, false, { arrow: "▲", percent: 3, tone: "bad" }],
    ["K8 -0.49 は境界の手前", -0.49, true, { arrow: "→", percent: 0, tone: "neutral" }],
  ];

  it.each(cases)("%s", (_name, diff, betterWhenHigher, expected) => {
    expect(kpiDeltaView(diff, betterWhenHigher)).toEqual(expected);
  });
});