テックブログ

医療記録の患者氏名の表記ゆれを、機械で揃えるときの注意

目次
  1. なぜ、慎重に扱う必要があるのか
  2. 守り① 安全弁は「候補の数」ではなく「実際に書き換える数」で数える
  3. 守り② 入力の検査を、ホワイトリストにしない
  4. 守り③ 置換文字列を、そのまま渡さない
  5. 守り④ 既存のテストが落ちたら、期待値を書き換えない
  6. 揃えるのは、読みやすさのためだけではない

会話を録音して記録を作ると、患者さんのお名前はその場で呼ばれたとおりに文字になります。「田中さん」「たなかさん」「タナカさん」。同じ方でも、回によって表記が変わります。

記録として並べたときに、これは読みにくいだけでなく、検索や照合の妨げになります。だから登録されている氏名に揃えたくなります。

ただし——保存された臨床テキストを機械で書き換えるというのは、医療システムで最も慎重に扱うべき操作のひとつです。

なぜ、慎重に扱う必要があるのか

臨床の記録は、医療者が確認して確定させたものです。そこに機械が後から手を入れるということは、人が書いたものを機械が変えるということになります。

しかも記録は履歴テーブルと監査ログにも複製されます。壊れた本文を書き込むと、壊れたものが3箇所に複製されます。 気づいたときには、どれが元の内容だったのか分からなくなります。

以下は、この処理を作るうえで実際に必要になった守りです。

素直に作ると 起きること 実装で採った形
置換の候補の数で上限を判定する 正しく書けている記録ほど上限に達し、全部が破棄される 実際に書き換える数で数える
氏名の文字をホワイトリストで検査する CJK互換漢字や全角記号を含む実在の氏名が処理から漏れる 危険な文字をブラックリストで弾き、長さの上限を置く
置換後の文字列をそのまま渡す $' などが展開され、本文が自分自身を取り込んで増殖する 対象も置換後もリテラルとして扱う
落ちたテストの期待値を新しい挙動に合わせる そのテストが存在した理由ごと消える 何を守るテストだったのかを読み、実装の側を直す

守り① 安全弁は「候補の数」ではなく「実際に書き換える数」で数える

暴走を止めるために「置換の件数が一定を超えたら中止する」という上限を置きます。このとき、何を数えるかで挙動が正反対になります。

置換の候補の数で数えると、すでに正しく書けている箇所も候補に含まれます。すると——正しく書けている箇所が多い記録ほど、上限に達して全部が破棄されることになります。うまくいっている記録でだけ直らない、という直感に反する挙動です。

数えるべきは実際に書き換える数です。あわせて、ログに「中止した」とだけ残すのも避けます。暴走を止めたのか、正解が多かっただけなのかが区別できなくなるためです。

守り② 入力の検査を、ホワイトリストにしない

「氏名は漢字とかなでできている」という前提で検査を書きたくなります。これは実データで破綻します。

本番の氏名には、CJK互換漢字(環境によって別のコードになる異体字)、全角記号、数字が実在しました。ホワイトリストで弾くと、実在する患者さんの氏名が処理から漏れます。

正しいのは、危険な文字をブラックリストで弾き、長さの上限を置くことです。そして方式は、思い込みではなく実データの分布を見てから決めます。

守り③ 置換文字列を、そのまま渡さない

これは言語仕様の落とし穴です。多くの言語の文字列置換で、置換後の文字列に含まれる特定の記号が「特別な意味」として解釈されます。

たとえばJavaScriptの String.replace では、置換文字列の $' が「マッチした箇所より後ろの文字列全体」に展開されます。つまり、利用者の入力をそのまま置換文字列に渡すと、本文が自分自身を取り込んで増殖します。

臨床記録の本文でこれが起きると、意味の通らない長大なテキストが保存されます。対処は、置換の対象と置換後の文字列をリテラルとして扱う書き方に統一することです。

守り④ 既存のテストが落ちたら、期待値を書き換えない

処理を精密にしていく過程で、既存のテストが落ちることがあります。ここでテストの期待値を新しい挙動に合わせて書き換えると、そのテストが存在した理由ごと消えます。

落ちたときにすべきなのは、そのテストが何を守るために書かれたのかを読むことです。そのうえで実装の側を直します。

あわせて、入れたガードが成立しない条件を必ず1つ考えるようにしています。「直した」と「壊していない」は別のことです。

揃えるのは、読みやすさのためだけではない

表記が揃っていると、記録を横断して探せるようになります。診断書や意見書を書くために数年分の経過を遡るとき、表記のゆれは検索から漏れる原因になります。

MENTRAでは、会話から作られた記録の患者氏名を登録氏名に揃える処理を入れています。ここまでに書いた守りは、すべてその実装のためのものです。

機械で直せるものは機械が直し、人が確認する範囲を狭くする。 ただし、人が書いたものに機械が触る以上、守りは仕組みで持つ必要があります。

AIカルテ・診療記録に仕組みをまとめています。記録の扱いについて院内で確認が必要な点がありましたら、貴院の様式のままご回答しますのでお気軽にお申し付けください。

↑ このページの先頭へ

まずは、30分だけ話を聞かせてください。

今の記録の流れを伺うところからで大丈夫です。資料の準備は不要です。

精神科病院からメンタルクリニックまで、規模を問わず。院内の運用に合わせた調整もご相談ください。