AI に手術記録を作らせてみた — 1画面で4回出た「2人確認」を、ついに primitive に(やってみた #58)
/surgery375px のビューポートで撮影。縦長のページはフレーム内をスクロールします。
解説記事
AI に手術記録を作らせてみた — 1画面で4回出た「2人確認」を、ついに primitive に(やってみた #58)
やってみたシリーズ: 自作のデザインシステム
@gunjo/ui(群青)を、文脈ゼロの cold な AI に実 UI で作らせる連載。医療6枚目——手術記録 / 麻酔記録(タイムアウト × 器械・ガーゼカウント照合 × 麻薬/輸血の2人確認 × 麻酔記録 × 手術記録の署名)。
手術室の周術期記録。WHO 安全チェックリスト(サインイン/タイムアウト/サインアウト)、器械カウント照合、麻薬・輸血——至るところで「2人確認(ダブルチェック)」が要る画面。医療安全の核心作法が、1画面に何度も現れる。
結果 — 4/5
tsc/build 緑・console 0・375px・タイムアウトの2人サインオフ・器械カウント不一致→体内遺残の blocking アラート→サインアウトブロック・麻薬/輸血の2人確認(2人目IDは主担当と別人)・手術記録の署名→追記のみ・h1 1個。
今回の本題 — 1画面で4回出た「2人確認」を build
cold AI が明言:
A screen whose defining 作法 is "2人確認" forces you to hand-roll the same primitive four times — time-out sign-off, 2人カウント, narcotic co-sign, transfusion co-sign. The exact same shape appeared in #53 与薬 and #56 処方. It is now unambiguously a recurring, stable-API gap.
#53(ダブルチェック)・#56(麻薬2人署名)に続いて、#58 では1画面で4回。3回ルールをとうに超えていた。CoSign(#239) を build(PR #248):
<CoSign primaryId="ns-tanaka" // 2人目は主担当と別人でないと不可
attestations={[{ id: "drug", label: "薬剤・規格・用量を確認した" }, { id: "patient", label: "患者・指示を確認した" }]}
value={value} onSign={setValue} /> // CoSignValue { signerId, reason?, attestedAt, attestations }
<Button disabled={!value}>麻薬を投与</Button> // 2人確認でアクションをゲート
- 2人目が ID を入力、主担当と同一なら blocking(
aria-invalid+role=alertエラー) attestationsの確認チェックを全部つけて署名 → タイムスタンプ付きCoSignValueをonSign- 署名後は read-only 状態・companion
CoSignBadge(「2人確認 済/要」)・出荷済み Input/Checkbox/Textarea/Button/Badge を合成 - 医療(麻薬/輸血/タイムアウト)だけでなく金融の maker-checker 承認にも使える
ブラウザ実証(同一人物ガード→別IDで有効→署名で「2人確認 済 確認者: ns-suzuki」+バッジ success)。
越境複利が2件 — #56 で作った2つが、手術室で効いた
前々回(#56)で build した2つが、全く違う手術記録の画面でそのまま効いた:
SafetyBanner(#56 build) — FIT, did not fight. 器械カウント不一致で destructive バナーがrole=alert+assertive、requireAckで「再カウント/X線確認」、サインアウトをブロック——意図した契約どおり。ReferenceValue(#56 build) — great fit. 麻酔フローシートで30項目中2つの低値(出血)をフラグ、sr-only ラベルで色だけに頼らない。
医療の安全 primitive を作り切ったら、医療内の別画面で即発掘される——複利が業界の中でも回り始めた。
基礎部品の最後の磨き — Input の label 抜けも直した
#57 で Textarea の label/description 抜けを直したが、cold AI が今回 Input も同じ抜けを発見(2人目ID欄が裸の Input)。Select/Textarea とパリティで Input にも label/description 追加(#249・PR #250)。これで主要入力部品の label/description が揃った。
起票だけ(2回目→次で build)
- 🟠 追記のみ署名記録(#246・2回目=#57 看護記録+#58 手術記録)。手術記録の署名→追記のみも手組み。
AppendOnlyRecordが #57/#58 から ~80行を消す。
学び — 業界の「安全の文法」が、primitive に出揃った
医療の安全 primitive:
範囲判断 → ReferenceValue (#241・#54/#55/#56 で build)
承認 → SafetyBanner (#238・#53/#55/#56 で build)
2人確認 → CoSign (#239・#53/#56/#58 で build)
医療を6枚深掘りして、安全の3つの文法(値を範囲で判断・危険を承認させる・2人で確認する)が全部 primitive に結晶化した。残るは「追記のみ記録」(2回目)。業界を深掘りする価値はここにある——その業界が繰り返し要求する作法が、3回見える頃には安定した API で primitive になる。医療は安全の文法を3つ残した。
次回予告(やってみた #59)
- 医療の安全 primitive は出揃った。別業界へ(不動産/製造/教育/公共など)か、追記記録の3回目を踏みに医療もう1枚か。「追記のみ記録」は法的記録・監査ログ・契約として他業界でも再出現するので、pivot しても拾える。
試す
まだ alpha。1画面で4回出た「2人確認」を CoSign に括り出し、医療の安全の文法が3つ出揃った回。
<!-- 公開前: 相互URL差込/スクショ確定/EN(dev.to)ミラー -->
使用した @gunjo/ui コンポーネント
この画面のソースが直接 import している部品です。
cold AI が組み上げた実コード
ファイル名をクリックでソースを展開できます。