AI に退院サマリを作らせてみた — 3画面が同じ「署名→ロック→追記」を手組みしたので、SignedRecord に(やってみた #59)
/discharge-summary375px のビューポートで撮影。縦長のページはフレーム内をスクロールします。
解説記事
AI に退院サマリを作らせてみた — 3画面が同じ「署名→ロック→追記」を手組みしたので、SignedRecord に(やってみた #59)
やってみたシリーズ: 自作のデザインシステム
@gunjo/ui(群青)を、文脈ゼロの cold な AI に実 UI で作らせる連載。医療7枚目——退院サマリ / 退院時要約(構造化サマリ × 署名→ロック→追記のみの法的記録 × 退院時検査値 × 指導医共同署名)。
入院の最後、医師が退院サマリを作成・確定・署名する画面。署名したら追記しかできない法的記録になる。#57 看護記録・#58 手術記録に続いて、同じ「署名→ロック→追記」の作法が3回目を踏んだ。
結果 — 4/5
tsc/build 緑・console 0・375px・サマリ各セクション記入→署名・確定でロック(read-only/aria-readonly)→追記(著者+時刻+理由)・退院時検査値の基準値フラグ・研修医→指導医の共同署名・h1 1個。
今回の本題 — 3画面が同じ「署名→ロック→追記」を手組み → SignedRecord に
cold AI が、この同じテストアプリの過去2画面のコードを読んで3回目を確認した:
Confirmed by reading the two prior screens: #57 nursing-record (
SoapNote {status, signedBy, signedAt, addenda}+ Dialog + Timeline — hand-rolled), #58 surgery (noteSigned/noteSignedBy/noteSignedAt+ addenda +aria-readonly+ IconLock — hand-rolled again), #59 this screen (a third time). The shape is now provably stable across 3 screens.
「draft → 署名(誰が・いつ)→ 不変の read-only → 追記チェーン(各々が著者+時刻+理由)」という法的記録の状態機械を、医療の3画面が毎回手組みしていた。3回ルール発火で SignedRecord(#246)(PR #252)を出荷:
<SignedRecord value={record} onChange={setRecord} signerId="dr-yamada" canSign={isComplete}>
{({ readOnly }) => readOnly ? <p>{body}</p> : <Textarea value={body} onChange={onBodyChange} />}
</SignedRecord>
// draft → 署名・確定 でロック → 以後は追記(著者+時刻+理由)のみ
- controlled(value/onChange)+ render-prop body(
children({ readOnly }))——署名するとreadOnlyが true になり、消費側がロックビュー vs 編集フィールドを出し分ける - 署名で
signedBy/signedAtを記録・draft/署名済 Badge・ロック表示(IconLock +aria-readonly)・署名監査行 - 署名後は本文不変、変更は追記のみ(composer は著者=signerId・時刻+理由を自動スタンプ)→ チェーン表示
- 決定論的・ロケール非依存のタイムスタンプ既定(hydration リスク無し)・出荷済み Button/Input/Textarea/Badge を合成
ブラウザ実証(下書き→署名→ロック「確定済みの記録は変更できません」+監査行「dr-yamada・2026/06/23 13:22」+本文 read-only→追記「処方変更/退院後の内服薬を一部修正。」)。
越境複利が2件 — 直前に作った2つが、退院サマリでも効いた
CoSign(#58 build) — fit the attending co-sign perfectly. Used, not fought. 研修医のサマリを指導医が共同署名。same-person ガード(研修医IDを入れると blocking)・attestations・value/onSign・CoSignBadge——「#58 の手組み版より大きく改善」。ReferenceValue(#56 build) — fit the discharge labs exactly. 退院時の Hb→L低値・Cr→H高値・eGFR→L低値を icon+H/L+sr-only で。
医療の安全 primitive を作り切ったら、医療内の別画面で次々発掘される——複利が業界の中で回り続けた。
医療、ひと区切り — 安全と記録の文法が出揃った
医療で結晶化した primitive:
範囲判断 → ReferenceValue (#241) 値 vs 基準範囲
承認 → SafetyBanner (#238) 危険を承認させる
2人確認 → CoSign (#239) 2人で確認する
署名記録 → SignedRecord (#246) 署名→ロック→追記のみ
+ 基礎部品の磨き: Textarea/Input の label/description(#245/#249)
医療を7枚深掘りして、「安全」と「記録」という、その業界が繰り返し要求する作法が、4つの primitive に結晶化した。これが業界深掘りの果実——1〜2枚では「たまたま」に見える穴が、3回見える頃には安定した API で primitive になる。医療は ReferenceValue/SafetyBanner/CoSign/SignedRecord を残した。これらは医療外でも効く(SLA 監視・maker-checker 承認・法的記録/監査ログ)。
起票だけ
- 🟡
AlertTitleがデフォルトas="h5"で見出し階層を崩す(h1→h5・#251・status バナーの title は見出しでなくてよい)。
次回予告(やってみた #60)
- 医療は安全/記録の文法が出揃った。別業界へ pivot(不動産/製造/教育/公共など)。医療で作った primitive(特に SignedRecord/CoSign は契約・承認として)が他業界で発掘されるかも観測。
試す
まだ alpha。3画面が同じ「署名→ロック→追記」を手組みしたので SignedRecord に括り出し、医療の文法が4つ出揃った回。
<!-- 公開前: 相互URL差込/スクショ確定/EN(dev.to)ミラー -->
使用した @gunjo/ui コンポーネント
この画面のソースが直接 import している部品です。
cold AI が組み上げた実コード
ファイル名をクリックでソースを展開できます。