/**
* 施設別パフォーマンス表の「変化」列とステータスの表示名(D-163)。
*
* ★画面(`components/features/reports/FacilityPerformanceTable.tsx`)と CSV
* (`lib/reports/facility-performance-csv.ts`)の両方がここを import する★。
* 画面と CSV で文字が食い違わないよう、表から★中身を1文字も変えずに★移した純粋関数と定数。
* 色(`diffTone()` / `statusColor()`)は画面だけのものなので表に残っている。
*/
import type { FacilityPerformance, FacilityStatus } from "@/lib/types";
/**
* 「変化」列の合成値(モック :795-797 / 指示書F 5-7)
*
* overallDiff = Math.round((稼働率の差分 + 完了率の差分) / 2)
*
* ★どちらかの diff が null なら null を返して `→`(中立)を出す★
* diff が null になるのは value / prev のどちらかが null のとき
* (新規施設・予定0件の期間。lib/judge/kpi.ts の toKpiValue)。
* 片方だけで合成すると意味が変わってしまい、差を取れない以上
* 「改善した」とも「悪化した」とも言えないため中立に寄せる。
*/
export function overallDiff(item: FacilityPerformance): number | null {
const op = item.operation_rate.diff;
const cv = item.completion_rate.diff;
if (op === null || cv === null) return null;
return Math.round((op + cv) / 2);
}
export function diffText(diff: number | null): string {
if (diff === null || diff === 0) return "→";
return diff > 0 ? `▲${diff}` : `▼${Math.abs(diff)}`;
}
/**
* ステータスPill の文言と色(モック :794 / :809)
* ★`no_data`(判定なし)はモック(`d-watch-mock.jsx`)に無い4値目★ —
* 決定1(2026-09-11 ユーザー確定)で追加した意図した逸脱。稼働率が算出できない
* (その期間の清掃予定が0件、または予定が全部これから)ときに出る
*
* ★画面は従来どおり `t()` に通して出し、CSV は日本語のまま出す★(D-163。CSV は言語を受け取らない。指示書AS D11)
*/
export const FACILITY_STATUS_LABEL: Record<FacilityStatus, string> = {
good: "良好",
warning: "注意",
bad: "要改善",
no_data: "判定なし",
};