AI にバイタル・温度板を作らせてみた — 「基準値フラグ」という医療の核心部品が無かった(やってみた #54)
/vitals375px のビューポートで撮影。縦長のページはフレーム内をスクロールします。
解説記事
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)・Dialog・Tabs・Select・NumberInput・CardTitle as(h1→h2→h3 飛びなし)も。
起票だけした穴(1回目→3回ルール待ち)
- 🟠 ReferenceValue / 基準値異常フラグ(#241・1回目・医療の核心・医療外も再利用可)。
- 🟠
LineChartにreferenceBand(網掛け正常域)+ 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 が組み上げた実コード
ファイル名をクリックでソースを展開できます。