AI に処方オーダを作らせてみた — 「3回待った」2つの穴を、同じ回でまとめて build した(やってみた #56)
/prescription375px のビューポートで撮影。縦長のページはフレーム内をスクロールします。
解説記事
AI に処方オーダを作らせてみた — 「3回待った」2つの穴を、同じ回でまとめて build した(やってみた #56)
やってみたシリーズ: 自作のデザインシステム
@gunjo/ui(群青)を、文脈ゼロの cold な AI に実 UI で作らせる連載。医療4枚目——処方 / 処方オーダ入力(採用薬検索 × 用量/経路/用法 × アレルギー/相互作用/用量レンジの安全チェック × 規制医薬品の2人署名 × 処方署名)。
#53 与薬(看護師が渡す)と別作法の、医師が薬を処方する画面。採用薬を選び、用量を入れ、アレルギー・相互作用・用量レンジをチェックし、署名する。医療安全の3つの穴が、この画面で揃って3回目を踏んだ。
結果 — 4/5
tsc/build 緑・console 0・375px・採用薬 Combobox 検索・アレルギー一致で blocking 警告・禁忌相互作用で block・用量が腎機能調整後の安全域に対し過量(H)フラグ(eGFR 38 で morphine 10mg→過量、eGFR 90 では範囲内=lab 値参照を実証)・麻薬は2人署名・3つ解決まで署名ボタン無効→解決で有効・h1 1個。
今回の本題 — 「3回待った」2つの穴を、まとめて build
#54 バイタル・#55 検査結果で2回目になった医療の穴が、#56 処方で3回目を踏んだ。cold AI が明言:
The three load-bearing primitives of any prescribing screen have no library support and were hand-rolled — for the 3rd/3rd/2nd time across this medical series. … This is the clearest "ship it into the design system" signal in the series.
規律どおり3回待ったので、2つを同じ回でまとめて buildした:
① ReferenceValue(#241・3回目: バイタル/検査値/用量)
「値を基準範囲に対し H/L/異常でフラグ」する第3の軸。3画面でAPI が完全に同一だったので、迷いなく出荷:
<ReferenceValue value={38.9} unit="℃" range={{ low: 36.0, high: 37.5, criticalHigh: 40.0 }} showRange /> // H
flagValue(6.8, { low: 3.5, high: 5.0, criticalHigh: 6.0 }) // → "critical-high"
純関数 flagValue() も export(テーブル/チャートがセルを再導出せず色付け)・H/L/HH/LL チップ+常時 sr-only ラベル・Meter(容量)とも Delta(変化)とも違う範囲所属の軸・医療外も SLA/QA/監視で再利用可。
② SafetyBanner(#238・3回目: アレルギー/パニック値/相互作用)
恒久・assertive・承認可能な安全アラート。Alert(presentational・承認契約なし)では足りなかった:
<SafetyBanner tone="destructive" title="アレルギー警告:ペニシリン"
requireAck acknowledged={acked} onAcknowledge={() => setAcked(true)}>…</SafetyBanner>
<Button disabled={!acked}>処方を署名</Button>
destructive は role="alert"+assertive で読み上げ・requireAck で承認ボタン・acknowledged を消費側が読んでsign-off をゲート・出荷済み Button を合成。ブラウザ実証(アレルギー→alert/assertive・両方承認まで署名無効→承認で有効)。
規律が報われた — 「3回待つ」と API が固まる
#54 バイタル: ReferenceValue/SafetyBanner = 1回目 → 起票だけ
#55 検査結果: 2回目(API 同一) → 起票だけ
#56 処方 : 3回目 → 両方 build(API は3画面で確証済み)
1回目で作っていたら、バイタルだけの形に最適化して、検査値やパニック値で作り直していたかもしれない。3回待ったから、3画面を貫く安定した API で一発で出荷できた。ReferenceValue の {low, high, criticalLow, criticalHigh} も SafetyBanner の requireAck+sign-off ゲートも、3画面の共通項を抽出した形——だから医療のどの画面でも、医療外でも効く。規律は「過剰 build を防ぐ」だけでなく「正しい形で作る」ためでもあった。
起票だけ(2回目→次で build)
- 🟠 CoSignField / 2人署名(#239・2回目=#53 ダブルチェック+#56 麻薬2人署名)。第2署名者ID+確認+"主と別人"ガード。あと1回で build。
学び — 複利は「作った部品」だけでなく「待つ規律」にも乗る
医療は ReferenceValue/SafetyBanner/CoSignField という安全特化の3 primitive を要求した。そのうち2つを、3画面で形を確認してから build した。次の医療画面(看護記録/与薬指示)で CoSignField が3回目を踏めば、医療の安全 primitive が出揃う。業界を深掘りすると、その業界の"安全の文法"が primitive として結晶化する——医療では「範囲判断・承認・2人確認」がそれだった。
次回予告(やってみた #57)
- 医療をもう1枚=看護記録/経過記録 or 手術記録で CoSignField#239 の3回目を狙う。または医療を一旦まとめて別業界へ。方針: 医療は深掘り。
試す
まだ alpha。3回待った2つの医療安全 primitive を、同じ回でまとめて build した回。
<!-- 公開前: 相互URL差込/スクショ確定/EN(dev.to)ミラー -->
使用した @gunjo/ui コンポーネント
この画面のソースが直接 import している部品です。
cold AI が組み上げた実コード
ファイル名をクリックでソースを展開できます。