/**
* 生値ラベルの空値表示(指示書O / D-089)。
*
* D-077(エラー種別等の生値は変換しない)を維持したまま、値が「空である」場合だけ
* その事実を示す代替文言に差し替える純粋関数。値が入っている場合は加工しない
* (前後の空白のトリムのみ許容する。指示書O 禁止事項2「トリム以外の変換をしない」)。
*
* null / undefined / 空文字 / 空白のみ は同じ扱いにする(指示書O 段階2 仕様)。
*
* ★代替文言は `(値なし)` を採用★ — 「DBのカラムが空である」という事実だけを述べ、
* 推測を含まない(D-077 の「推測でマッピングしない」に反しない)。
* 「その他」は D-067(破棄済み)の「未知の値をその他に寄せる」方針と紛らわしく、
* 「不明」は「エラーの内容が不明」とも読めてしまうため採らなかった(指示書O 3案比較)。
*
* ★DB アクセスなし・例外を投げない純粋関数。lib/judge/ には置かない★
* (あちらは◎○△×等の評価ロジックの置き場所。こちらは表示整形。CLAUDE.md §9.1)。
*/
export const EMPTY_VALUE_LABEL = "(値なし)";
export function formatRawLabel(value: string | null | undefined): string {
if (value == null) {
return EMPTY_VALUE_LABEL;
}
const trimmed = value.trim();
return trimmed === "" ? EMPTY_VALUE_LABEL : trimmed;
}