#54スコア 4/5医療・ヘルスケア

AI にバイタル・温度板を作らせてみた — 「基準値フラグ」という医療の核心部品が無かった(やってみた #54)

ルート: /vitals
デスクトップ表示
モバイル表示

375px のビューポートで撮影。縦長のページはフレーム内をスクロールします。

解説記事

AI にバイタル・温度板を作らせてみた — 「基準値フラグ」という医療の核心部品が無かった(やってみた #54)

やってみたシリーズ: 自作のデザインシステム @gunjo/ui群青)を、文脈ゼロの cold な AI に実 UI で作らせる連載。医療2枚目——バイタルサイン記録 / 温度板(バイタル入力 × 基準値による異常フラグ × フローシート × 温度板トレンド)。

#53 与薬(バーコード安全ゲート)と真逆の、時系列の臨床データ入力+レビュー。体温/血圧/脈拍/SpO2 を記録し、基準値に対して H/L/異常をフラグし、温度板で数日のトレンドを見る——スキャンではなく"値を範囲で判断する"医療の作法。

結果 — 4/5

tsc/build 緑・console 0・375px でフローシート内スクロール・基準値で H/L/異常フラグ(アイコン+文字+トーン・色だけに依存しない)・異常値で assertive 読み上げ・温度板トレンド・保存検証・h1 1個。

今回の核心の穴 — 「基準値による異常フラグ」が無い

バイタル画面(そして検査結果画面)の最も中心的な部品——「値を正常範囲に対して H/L/critical でフラグする」——が、ライブラリに無かった。cold AI が手組みし、既存 atom はどれも軸が違うと明言:

Missing higher-order primitive: a reference-range / abnormal-value indicator. 既存 atom はどれも合わない——Meter は容量トーンvalue/max・満→warning/超→destructive で「正常範囲内」が逆さま・SpO₂ 98% が destructive に見える・下限も band も無い)、Delta は前回比(数値の符号であって、範囲への所属ではない)。

これは #52 で気付いた「Meter は容量、進捗/範囲には別物」の再確認でもある。値が範囲のどこにいるかは、容量(Meter)とも変化(Delta)とも違う第3の軸。理想 API を起票(#241):

<ReferenceValue value={38.9} unit="℃" range={{low:36.0, high:37.5, criticalHigh:39.9}}
  labels={{high:"高値", low:"低値", critical:"異常"}} format={v=>v.toFixed(1)} size="inline" />
// → flag を導出 → トーン(正常=success・H/L=warning・異常=destructive)
//    値+単位+アイコン+コード(H/L/!!)+sr-only 文 を描画、範囲外を読み上げ

+ 純関数 flagValue(value, range): RangeFlag を export(テーブル/チャートがセルを再導出せず色付けできるように)。医療を超えて再利用できる——SLA/レイテンシ、QA 公差、監視閾値、金融リミット。検査結果(#55)は同じ部品が核になるので、すぐ2回目が来るはず。

規律 — 1回目では作らない(誠実に起票だけ)

ReferenceValue は強い候補だが、今回が1回目。3回ルールに従い作らずに起票した。検査結果(#55)で2回目、もう1枚の臨床画面で3回目——そこで作る。今すぐ作りたくなる衝動を抑えるのが、過剰 build を防ぐ規律。今回は src 修正ゼロ=kit が医療2枚目でも持ちこたえた(穴は新規 primitive 1つ+チャート拡張だけ)。

複利・うまくいった点

  • Delta — 越境採用(正しく)。「前回比」列に neutral トーン(バイタルが上がるのは良い/悪いではない)+日本語 labels で。金融/物流で作った差分 atom が、医療の前回比でそのまま効いた。
  • LineChart — 温度板に採用(一部手組み)。multi-point・ResizeObserver 自動リサイズ・referenceValue/showGrid/min/max/formatValue が初手で動いた。
  • Table(フローシート+チャートのアクセシブル代替)・Alert(assertive)・DialogTabsSelectNumberInputCardTitle as(h1→h2→h3 飛びなし)も。

起票だけした穴(1回目→3回ルール待ち)

  • 🟠 ReferenceValue / 基準値異常フラグ#241・1回目・医療の核心・医療外も再利用可)。
  • 🟠 LineChartreferenceBand(網掛け正常域)+ per-series 軸/normalize#242・1回目)。温度板の正常域は"帯"だが referenceValue は単一線→ CSS overlay 手組み。体温(35-40)と脈拍(50-130)が1軸に乗らず2チャート縦積み。
  • 🟡 NumberInput に単位サフィックス slot が無い(label に単位・動くが CurrencyInput の記号のような adornment があると綺麗)。

学び — 「軸」が違う部品は、別の primitive

容量(Meter): value/max のどこ → 満載で警告
変化(Delta): 前回比の符号    → 上下で色
範囲(ReferenceValue): 正常域のどこ → H/L/異常 ← 医療で初めて要求された第3の軸

50回超で基礎部品は揃ったが、医療は「値を正常範囲で判断する」という、商業/金融/物流では要らなかった第3の軸を突きつけた。Meter でも Delta でも代用できない——軸が違うから。業界を移すと、既存部品の組み合わせでは埋まらない新しい意味の軸が出る。それが ReferenceValue。検査結果で2回目を確認したら作る。

次回予告(やってみた #55)

  • 医療をもう1枚=検査結果(基準値・H/L・パニック値)。ReferenceValue#241 の2回目をほぼ確実に踏むはず。医療は深掘り継続。

試す

まだ alpha。医療の核心「基準値フラグ」という第3の軸の不在が見え、規律どおり1回目は起票だけにした回。


<!-- 公開前: 相互URL差込/スクショ確定/EN(dev.to)ミラー -->

使用した @gunjo/ui コンポーネント

この画面のソースが直接 import している部品です。

cold AI が組み上げた実コード

ファイル名をクリックでソースを展開できます。