0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

患者・職員のデータを一度もAIに見せずに、AIで院内システムを3つ作った

0
Posted at

※この記事は Zennの記事 からの転載です。


私は医療機関で事務職をしています。エンジニアではありません。

AIと一緒に、院内の業務システムを3つ作りました。どれも1週間以内で、専任の開発者としてではなく、ふだんの事務の仕事をしながらです。

システム 中身 開発期間 状態
制服の申請 以前は Google フォームで集めていた申請を、職員がスマートフォンから申請し、発注数と配布リストまで自動で作る仕組みにした(GAS+スプレッドシート) 1週間以内 稼働中
受付の伝票 外来の受付機で、対象の患者さんにだけ専用の伝票を自動で印刷する(Windowsの常駐ツール) 1週間以内 試験中
職員の名札QR 名札のQRで研修会の出欠を取り、部署ごとの未参加者を集計する(GAS+API) 1週間以内 試験中

どれも、職員や患者さんの個人情報を扱います。そして3つとも、本物のデータを一度もAIに見せていません。

「データを見せない」と聞くと、手間が増えて遅くなりそうに思えます。実際には、業務の合間でも、それぞれ1週間以内に作り切れました。

「AIを使いたいけど、個人情報があるから無理」と思っている人に向けて、そのためにやったことを書きます。

決まり1:本番のデータは、AIの届く場所に置かない

いちばん単純で、いちばん効く決まりです。

  • 本番の名簿・患者番号のファイルは、院内のパソコンと共有フォルダだけに置く
  • AIが作業するフォルダ、クラウド、AIがつながる場所には置かない

AIに「見せないように気をつける」のではなく、物理的に届かないようにします。気をつけるだけの決まりは、忙しい日に破られます。

決まり2:ダミーの職員は「組み合わせごとに1人」

本物を見せないなら、テストはダミーで行います。ここで工夫したのが、ダミーの作り方です。

制服の支給は、職種・部署・性別・年度で中身が変わります。介護とリハビリは毎年3着、看護は隔年、シューズは部署と性別で選べるものが違う、という具合です。

そこで、テスト用の環境に部門×部署×職種×性別の組み合わせごとに1人ずつダミーの職員を置きました。

イメージはこうです(値はすべて架空です)。

職員番号 氏名 部門 部署 職種 性別
900001 試験 太郎 看護部 病棟A 看護師 男
900002 試験 花子 看護部 病棟A 看護師 女
900003 試験 次郎 看護部 病棟A 介護職 男
900004 試験 春子 リハビリ部 リハビリ室 理学療法士 女
900005 試験 三郎 事務部 総務 事務 男
… … … … … …

1行が「この組み合わせの人には何が出るべきか」のテストケースになります。支給のルールを変えたら、全員分の申請画面を開いて、出る品目が期待どおりかを見るだけです。

  • 実在の名簿を持ち込まなくても、判定ルールを全パターン試せる
  • ダミーなので、AIに画面を操作させても、スクリーンショットを撮っても問題ない

担当者向けのマニュアルの画面写真も、このテスト環境でブラウザを自動操作して撮っています。画面を直したら撮り直すだけです。

決まり3:本番だけで起きる不具合は、値を伏せて症状だけ伝える

困るのは、テストでは動くのに本番だけで動かないときです。本番の値を見せたくなります。

ここは決まりとして先に決めておきました。値は伏せて、症状だけをAIに伝える。 たとえば受付の伝票では、

  • 何バイト届いたか
  • 最後に受け取った時刻
  • 区切りの文字(改行など)が16進数で何だったか

を見れば、番号そのものがなくても「届いていない」のか「区切りが合っていない」のかを切り分けられます。そのために、番号を残さず、件数・時刻・エラーの種類だけを出す調査用の画面を最初から作りました。

決まり4:データベースそのものを、読んでも分からない形にする

制服の申請では、もう一歩進めました(現在試験中)。

  • 職員の名前は、最初と最後の1文字だけを残した伏せ字で保存し、読み仮名は捨てる(読み仮名が残ると、漢字を伏せても名前が分かるため)
  • 業務でフルネームが要る場面のために、名前は暗号化した値でも持つ。鍵はシートとは別の場所と、管理者の頭の中に分ける

シートの中身は、こう見えます(イメージ・値は架空です)。

職員番号 氏名(伏せ字) 氏名(管理者用) 氏名(本人用)
900001 試〇〇郎 q3Vx9…(読めない文字列) Zp8aK…(読めない文字列)
900002 試〇〇子 L0bt2… Hw4nE…

こうしておくと、たとえAIの接続や共有の設定ミスでシートが読まれても、見えるのは伏せ字と読めない文字列だけです。「見せない」を、運用の注意から仕組みの性質に変えたことになります。

決まり5:設計するAIと、実装するAIを分ける

私は、設計・レビュー・本番への反映を受け持つAIと、コードを書くAIを分けています。依頼は文書で受け渡します。

これが効いた場面がありました。管理画面のパスワードに「5回失敗したらロック」を付けたのですが、レビューを受け持つAIが、

ロックはログイン画面にしか付いていない。管理用の別の処理を直接呼べば、回数無制限に試せる

と指摘しました。GAS の Web アプリは、名前が _ で終わらない関数を画面から誰でも呼べます。ロックを共通の認証処理に移して塞ぎました。

書いた本人(のAI)は、自分の書いたものの穴に気づきにくいものです。人間のチームと同じでした。

決まり6:直す前に、本番そのものを読む

制服の申請は、最初に作った版を見直して作り直しました。そのとき最初にしたのは、手元の記録ではなく、本番そのものを読むことです。

読んでみると、

  • 申請データに年度がなく、翌年度に申し直すと前年の記録まで取り消される
  • 全データを消す関数が、画面から誰でも呼べる場所に残っている
  • ファイルが個人のアカウントの持ち物になっている(退職すると引き継げない)

という問題が見つかりました。さらに、手元の記録には本番に出していない作業が混ざっていました。記録を信じて直していたら、未完成の機能を本番に混ぜるところでした。

やってみて分かったこと

  • **「AIに見せない」は、気をつけることではなく、置き場所の問題。**届かない場所に置けば、気をつける必要がない
  • ダミーの作り方で、テストの質が決まる。「組み合わせごとに1人」なら、少ない人数で全パターンを試せる
  • **値がなくても、不具合は切り分けられる。**そのための調査画面を先に作っておく
  • **レビューを分けると、自分では気づけない穴が見つかる。**AI同士でも同じ

まだ書けないこと

3つのうち、稼働しているのは制服の申請だけです。受付の伝票と名札のQRは試験中で、「どれだけ楽になったか」の数字はまだありません。稼働したら、成果を数字で追記します。

それぞれの仕組みの技術的な中身は、別の記事に分けて書いています。

  • 桁の少ない番号を、ハッシュではなく HMAC で照合する話(「その患者番号、SHA-256にしても0.4秒で戻せます」)
  • 業者の受付システムに手を入れずに、中継を挟んで機能を足す話(「業者のシステムは1行も触れない。それでも機能は足せる」)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?