預託の医療材料の納品書と使用報告を読み取り、手術室の使用記録と照らして、請求漏れ・二重請求・記録の無い材料を拾う
業者から届く預託の医療材料の納品書と使用報告を読み取り、手術室で記録した使用の実績と1行ずつ照らします。使ったのに伝票が無いもの、同じ材料が二度請求されたもの、伝票はあるのに使用の記録が無いものを拾い、用度の担当に一覧で返します。
- 生成AI
- Azure OpenAI Service/Claude
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- 医療
- 対象部門
- 物流/購買
- 対象業務
- 内容確認・チェック/比較検討
- 主な課題
- 人手が足りない/入力作業が多い/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/工数削減/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 業者が補充の材料と納品書を持ってくる。用度課が受け取り、紙のまま預託品のトレーに入れる
- 月末に、業者から1か月分の使用報告が紙またはPDFで届く
- 担当者が伝票を1枚ずつ開き、明細の品名・規格・ロットを読む
- 手術部門のシステムで手術日と診療科から手術を探し、その手術で記録された材料を画面で見る
- 品名・規格・ロット・数量が合っていれば伝票にチェックを付ける
- 合わないものは付箋に書き、業者か手術室の看護師に電話で確かめる
- すべての伝票の確認が終わったら、物品管理のシステムに買い取りを入力し、支払いの手続きに回す
- 人受け取った納品書と使用報告をスキャンし、PDFで届いたものとあわせて受付フォルダに入れる
- 自動ファイルが入るたびに、形式・ページ数・重複を確かめる
- 自動OCRが伝票の表・見出しの項目・バーコードを読み取る
- 自動バーコードを表の行に結び付け、商品コード・有効期限・ロットに分ける
- 自動生成AIが、業者ごとに違う明細の列を共通の形にそろえ、手書きの書き込みを拾う
- 自動預託品の台帳と照らし、商品コードから品名・規格・業者を確かめる
- 自動手術部門のシステムから書き出した使用記録と、商品コード・ロット・手術日で照らす
- 自動過去の照合結果と照らし、同じロット・シリアルが既に買い取り済みでないかを見る
- 自動行ごとに `matched`/`no_usage_record`/`no_slip`/`duplicate`/`mismatch`/`needs_human` を付ける
- 人用度の担当が、`matched` 以外の行だけを開き、業者か手術室に確かめる
- 人照合が済んだ伝票について、物品管理のシステムに買い取りを入力する
各工程の詳しい説明を読む
- 業者が補充の材料と納品書を持ってくる。用度課が受け取り、紙のまま預託品のトレーに入れる
- 月末に、業者から1か月分の使用報告が紙またはPDFで届く
- 担当者が伝票を1枚ずつ開き、明細の品名・規格・ロットを読む
- 手術部門のシステムで手術日と診療科から手術を探し、その手術で記録された材料を画面で見る
- 品名・規格・ロット・数量が合っていれば伝票にチェックを付ける
- 合わないものは付箋に書き、業者か手術室の看護師に電話で確かめる
- すべての伝票の確認が終わったら、物品管理のシステムに買い取りを入力し、支払いの手続きに回す
(a)伝票から使用記録を探すのに時間がかかる。 伝票に手術番号が書かれていればすぐ引けますが、多くは手術日と診療科しか分かりません。 同じ日に同じ診療科の手術が5件あれば、5件の材料を順に開いて探します。
(b)ロットの読み違いで、合っているものが合わないように見える。 シールのロット番号は小さく、「0」と「O」、「1」と「I」が並びます。目で読んで画面と照らすので、読み違えた1文字で不一致になり、確かめの電話が1本増えます。
(c)使用記録の無い材料は、見つけても次の手が決まらない。 伝票はあるのに記録が無いとき、手術室で読み取りを忘れたのか、業者が誤って載せたのかは、伝票を見ても分かりません。 記録漏れなら、その材料は患者への請求からも漏れている可能性があります。用度課だけでは片付かない食い違いが、付箋のまま残ります。
(d)二重請求は、月をまたぐと見つからない。 先月の使用報告に載った同じロットが今月の納品書にも載っていても、担当者が見ているのは今月の伝票だけです。 シリアル番号のある材料は1本しか存在しないので、二度載れば必ずどちらかが誤りですが、照らす仕組みがありません。
- 【人】 受け取った納品書と使用報告をスキャンし、PDFで届いたものとあわせて受付フォルダに入れる
- 【自動】 ファイルが入るたびに、形式・ページ数・重複を確かめる
- 【自動】 OCRが伝票の表・見出しの項目・バーコードを読み取る
- 【自動】 バーコードを表の行に結び付け、商品コード・有効期限・ロットに分ける
- 【自動】 生成AIが、業者ごとに違う明細の列を共通の形にそろえ、手書きの書き込みを拾う
- 【自動】 預託品の台帳と照らし、商品コードから品名・規格・業者を確かめる
- 【自動】 手術部門のシステムから書き出した使用記録と、商品コード・ロット・手術日で照らす
- 【自動】 過去の照合結果と照らし、同じロット・シリアルが既に買い取り済みでないかを見る
- 【自動】 行ごとに
matched/no_usage_record/no_slip/duplicate/mismatch/needs_humanを付ける - 【人】 用度の担当が、
matched以外の行だけを開き、業者か手術室に確かめる - 【人】 照合が済んだ伝票について、物品管理のシステムに買い取りを入力する
10番目が、この設計の分かれ目です。 人が見るのは食い違いの出た行だけで、合っている行は一覧で件数を流し見て終わります。 全行を人が開き直す設計にすると、80.0時間はほとんど減りません。
7番目と8番目は、AIではなくプログラムの照合です。 AIにさせるのは伝票を読んで形をそろえるところまでで、合っているか・二度目かの判定は、決まった規則で行います。 規則で決めた結果なら、なぜ不一致になったかを後から同じ手順でたどれます。
02今回想定するシステム構成
業者の納品書・使用報告(紙・PDF) │ 紙はスキャン ▼【トリガー】受付フォルダへの保存 照合の処理(Python) ├──▶ 形式・ページ数・重複の確認 ▼ Azure AI Document Intelligence(レイアウトモデル) │ 表とセル、見出しの項目、バーコード(種類・値・位置) ▼ 照合の処理 ── バーコードを表の行に結び付け、項目に分ける ▼ Azure OpenAI ── 明細の列を共通の形にそろえる、手書きの書き込みを拾う ▼ 照合の処理 ── 預託品の台帳 → 使用記録 → 過去の照合結果 の順に照らす ▼ 行ごとの結果(一致/記録なし/伝票なし/二重/食い違い/要確認) ▼ 【用度の担当が食い違いの行だけ確認】 → 業者・手術室・医事課へ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Azure AI Document Intelligence(レイアウトモデル、バーコードの抽出) | Google Document AI(Form Parser) |
| 生成AI | Azure OpenAI(Microsoft Foundry)(明細の列の正規化と手書きの書き込みの拾い出し) | Claude API |
| 差異計算 | Python(バーコードの分解、使用記録・台帳・過去の結果との照合) | - |
| 保管 | 院内のファイルサーバー(受付フォルダ、処理済みフォルダ、照合結果) | - |
手術部門のシステムと物品管理のシステムには書き込みません。 使用記録は表の形で書き出したものを読むだけで、買い取りの入力は従来どおり人が行います。新しく足すのは、OCRと生成AIの利用と、照合の処理の3つです。
土台は、Azure AI Document Intelligence のレイアウトモデル(prebuilt-layout)です。 表・セル・選択マーク・文書の構造を取り出せるモデルで、日本語は印字・手書きの両方が対応言語に入っています。 業者の数だけ書式があるので、書式ごとに学習させるモデルではなく、表の構造をそのまま返すレイアウトモデルを使います。
バーコードは、追加の機能 barcodes で読みます。 features に barcodes を足すと、検出したバーコードが種類(kind)・値(value)・位置(polygon)付きで返ります。対応する種類には Code 128、Databar(Expanded を含む)、Data Matrix などが並び、この機能は無料の扱いです。 見出しの項目を拾う keyValuePairs も無料の追加機能で、同じ要求で有効にできます。
生成AIは、病院のテナントの Azure OpenAI に置きます。 構造化出力で JSON スキーマを指定し strict を true にすると、スキーマに沿った形で返るとされています。照合の処理がそのまま読めるので、列の名前の違いを後段で吸収する必要がありません。
03どうやって実装するのか
処理の起点を決める
受付フォルダにファイルが入ったことを起点にします。 照合の処理(Python)が5分おきにフォルダを見て、新しいファイルがあれば1枚ずつ処理します。月末にまとめて動かす形にはしません。 補充の納品書は毎日届くので、その日のうちに照らしておけば、月末に残るのは使用報告の分だけになります。
月末の使用報告は、2回目の照合の起点にもなります。 使用報告が届いたら、その業者の1か月分の納品書の結果と並べて照らし直します。納品書には載ったが使用報告に載らなかったもの、その逆も、このときに拾います。
処理が終わったファイルは処理済みフォルダへ移します。 移すのは照合の結果を書き出せたときだけにします。受付フォルダに残っているファイルの数が、そのまま未処理の数です。
使用記録の書き出しは毎朝6時に行います。 手術部門のシステムから前日までの使用記録を表の形で書き出し、決まった場所に置きます。照合はいつも、この朝の書き出しを相手にします。 当日の手術の記録はまだ入力途中のことがあるので、照合の相手に含めません。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 伝票のファイル | 納品書・使用報告のPDFまたは画像。受け取った日と業者 | 受付フォルダ |
| 読み取り結果 | 表とセル、見出しの項目、バーコードの種類・値・位置、手書きかどうか | Azure AI Document Intelligence |
| 使用記録 | 手術日、手術番号、診療科、材料の商品コード、ロット、シリアル、数量、記録した時刻 | 手術部門のシステムの書き出し |
| 預託品の台帳 | 商品コード、品名、規格、業者、シリアル管理の有無、契約の単価 | 用度課の台帳 |
| 過去の照合結果 | 買い取り済みの商品コード・ロット・シリアル、伝票番号、照合した日 | 照合結果の保管場所 |
照合の質を決めるのは、下の3つです。 使用記録に商品コードとロットが入っていなければ、伝票を何で照らすかが無くなります。手術室でバーコードを読み取らず、品名を選んで記録している材料は、照合の鍵が品名に落ちます。
台帳の「シリアル管理の有無」は、二重請求の判定に使います。 ペースメーカーのように1本ごとに番号のある材料は、同じシリアルが二度出れば必ずどちらかが誤りです。ロットしかない材料は、同じロットが複数本あっても正常です。 この列が無いと、ロットの重なりをすべて二重請求の疑いにしてしまいます。
データの取得方法を決める
読み取りは、照合の処理からレイアウトモデルを呼ぶだけです。API のバージョンは 2024-11-30(GA)を指定し、features に barcodes と keyValuePairs を並べます。 複数の追加機能は、カンマ区切りで1回の要求に入れられます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 表とセル、セルの位置 | tables の cells と boundingRegions | 明細の行と列 |
| バーコード | pages の barcodes(kind・value・polygon) | 商品コード・有効期限・ロット |
| 見出しの項目 | keyValuePairs | 伝票番号、納品日、業者名、手術日 |
| 手書きかどうか | styles の手書きの判定 | 手書きの書き込みの印 |
バーコードを表の行に結び付けるのは、位置です。 バーコードの polygon と、表の各セルの位置を照らし、同じ行の高さにあるバーコードをその行のものとします。 シールを貼った使用報告では、1行に1枚のシールが並ぶので、この結び付けがそのまま効きます。
バーコードの信頼度は使いません。 公式の説明では、バーコードの confidence は 1 に固定されています。読めたかどうかを信頼度で見分けられないので、バーコードの値と、同じ行に印字されたロットの文字が合うかで確かめます。
使用記録の書き出しは、手術日・手術番号・診療科・商品コード・ロット・シリアル・数量の7列に絞ります。 患者の氏名や病名は照合に要りません。書き出す列を最初に決めておけば、照合の処理に患者の情報が流れません。
AIへ渡す前に整形する
- 形式の確認 … PDFと画像(JPEG/JPG、PNG、BMP、TIFF、HEIF)だけを受け付けます。Excel の使用報告は OCR に通さず、表として直接読みます
- 重複の確認 … ファイルの中身から指紋(ハッシュ)を取り、同じファイルが二度入っていれば2回目は処理しません
- 伝票の切り分け … 1つのPDFに複数の業者の伝票がまとまっているときは、見出しの業者名でページを分けます
- バーコードの分解 … GS1-128 などで読んだ値を、商品コード・有効期限・ロット・シリアルに分けます。分けられない値は、元の文字列のまま残します
- 商品コードの検算 … 商品コードの末尾のチェックデジットを計算し、合わないものは読み誤りとして印を付けます
- 照合の範囲の決定 … 伝票の手術日(なければ納品日)の前後7日の使用記録を、その業者の材料に絞って取り出します
2番目を省くと、二重請求の疑いが自分で作れてしまいます。 同じPDFをスキャンし直して入れただけで、同じロットが二度出てきます。二重の判定は、ファイルの重複を除いてから行います。
4番目で無理に分けないことも大事です。 業者が独自のバーコードを付けている伝票もあり、GS1 の形でない値を区切ると、ロットの欄に別の番号が入ります。 分けられないものは分けないまま、印字の文字との照合に回します。
AIに処理させる
させるのは、業者ごとに違う明細を共通の形にそろえることと、手書きの書き込みを拾うことだけです。
| 見るもの | させること | 判断できないときの扱い |
|---|---|---|
| 明細の列 | 「品番」「商品コード」「JAN」などの見出しの違いを、共通の項目に寄せる | 列の意味が決められなければ unknown |
| 品名・規格 | 印字のとおりに写す | 読めなければ空にして印を付ける |
| ロット・有効期限 | 印字の値を写し、バーコードの値と並べる | 食い違えば両方を残す |
| 数量 | 数字として写す | 手書きで直されていれば両方を残す |
| 手書きの書き込み | 「破損」「不潔」「返品」「サイズ変更」などの書き込みを拾う | 意味が分からなければ原文のまま |
| 手術の手がかり | 手術日・手術番号・診療科の書き込み | 無ければ空 |
右端の列で「両方を残す」としているのが、この設計の要です。 印字のロットとバーコードのロットが違うとき、どちらが正しいかをAIに選ばせると、読み違いを正しい値に書き換えたことに気づけなくなります。 選ぶのは人です。
| させないこと | 理由 |
|---|---|
| 使用記録との照合 | 規則で決める。理由をたどれるようにする |
| 品名から商品コードを推し量る | 規格の違う品に当たる。商品コードは読めた値だけを使う |
| 二重請求かどうかの判定 | 過去の結果との照合で決める |
| 「破損」の材料を買い取るかの判断 | 業者との取り決めと手術室の報告で決まる |
| 保険で請求できる材料かの判断 | 医事課が決める |
2行目がいちばん起きやすい失敗です。 品名と規格から、台帳にある商品コードを当てはめさせると、バーコードが読めなかった行がもっともらしい商品コードで埋まり、照合が「一致」に変わります。
指示内容を固定する
あなたは病院の用度課で、業者から届いた預託品の伝票を整理する立場です。
OCRの読み取り結果だけを見て、明細を決まった形にそろえてください。
【やること】
1. 表の各行を、明細1行ずつの形に写してください。
見出しの名前が業者ごとに違っても、次の項目に寄せてください。
品名/規格/商品コード/ロット/有効期限/シリアル/数量/単位
2. 各行に結び付けられたバーコードの値(barcode_parsed)を、
印字の値と並べて写してください。
3. 手書きの書き込みがあれば、行ごとに原文のまま写してください。
「破損」「不潔」「返品」「サイズ変更」「未使用」に当たるものは
note_type に入れてください。
4. 伝票の見出しから、業者名・伝票番号・納品日・手術日・手術番号・
診療科を写してください。
【厳守事項】
- 書かれていない値を埋めないでください。空なら空のままにしてください。
- 品名や規格から商品コードを推し量らないでください。
商品コードは、印字かバーコードで読めた値だけを入れてください。
- 印字のロットとバーコードのロットが違うときは、どちらかを選ばず、
両方をそのまま入れてください。読み違いを直さないでください。
- 「0」と「O」、「1」と「I」を、それらしく直さないでください。
- 数量が手書きで直されているときは、印字の値と手書きの値を両方入れてください。
- 使用記録と合っているか、二重の請求かは書かないでください。
- 列の意味が決められない列は unknown_columns に見出しのまま入れてください。
- 預託品の伝票でない書類と判断したら、document_type に種類を書き、
明細を作らないでください。
【読み取り結果(表・見出しの項目・行ごとのバーコード)】{ocr_result}
【この業者の列の呼び方の一覧】{vendor_columns}
「読み違いを直さない」を明記しないと、AIは親切に直します。 ロットの「O」を「0」に直すと、それが本当に「0」なら照合は一致しますが、シールの印字が本当に「O」だったときに、誤った一致を作ります。 直すのは照合の段階で、人が画像を見て行います。
「この業者の列の呼び方の一覧」は、用度課が業者ごとに作る短い表です。 「品番=商品コード」「LOT No.=ロット」のように10行ほどで足ります。一覧があると、新しい業者の書式でもAIが列を寄せやすくなります。
出力形式を固定する
AIからは、次の形のJSONで受け取ります。
{
"document_type": "delivery_slip | usage_report | other",
"header": {
"vendor": "", "slip_no": "", "delivery_date": "",
"surgery_date": "", "surgery_no": "", "department": ""
},
"lines": [
{ "row": 1, "item_name": "", "spec": "",
"product_code_printed": "", "product_code_barcode": "",
"lot_printed": "", "lot_barcode": "",
"expiry_printed": "", "expiry_barcode": "",
"serial": "", "qty_printed": "", "qty_handwritten": "",
"note_raw": "", "note_type": "none | damaged | unclean | returned | size_change | unused | other" }
],
"unknown_columns": []
}
理由の1つ目は、印字とバーコードを別の欄に置けることです。 照合の処理は、両方が合っていればその値を使い、片方しか無ければその値を使い、食い違えば needs_human にします。 AIに1つの値を選ばせないので、選び間違いが起きません。
2つ目は、照合の結果を別の層に置けることです。 AIの出力には照合の結果を入れず、照合の処理が次の形で行ごとに付けます。
| 結果 | 条件 | 確かめる先 |
|---|---|---|
matched | 商品コード・ロット・数量が使用記録と一致 | - |
no_usage_record | 伝票にあるが、範囲内の使用記録に無い | 手術室(記録漏れか)→ 業者 |
no_slip | 使用記録にあるが、月末までに伝票が無い | 業者(請求漏れか伝票の遅れか) |
duplicate | シリアル管理の材料で、同じシリアルが買い取り済み | 業者 |
mismatch | 商品コードは合うが、規格・数量・ロットが違う | 手術室と業者 |
needs_human | 印字とバーコードが食い違う、商品コードの検算が合わない | 用度の担当が画像を見る |
3つ目は、note_type で「破損」「不潔」などを分けられることです。 手術中に落として使えなくなった材料は、使用記録に無くても伝票に載ることがあります。取り決めによって扱いが違うので、照合の結果とは別の印として担当者に見せます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ | 照合の処理が5分おきに見る | 新しい伝票のファイルを見つける |
| Azure AI Document Intelligence | API呼び出し | 表・見出しの項目・バーコードを返す |
| Azure OpenAI | API呼び出し(構造化出力) | 明細を共通の形にそろえる |
| 手術部門のシステム | 毎朝の書き出しを読む | 前日までの使用記録 |
| 預託品の台帳 | 表計算を読む | 商品コードから品名・規格・シリアル管理の有無 |
| 照合結果の一覧 | 共有の表計算に書き出す | 伝票ごと・行ごとの結果と確かめる先 |
手術部門のシステムには書き込みません。 no_usage_record が出ても、記録を足すかどうかは手術室の看護師が確かめて決めます。照合の処理が記録を足すと、使っていない材料の記録ができてしまう経路が生まれます。
no_usage_record で手術室が「使っていた」と答えたものは、医事課にも知らせます。 記録漏れの材料は、患者への請求からも漏れている可能性があるからです。照合結果の一覧に「医事課へ連絡済み」の列を持たせ、連絡したかどうかを残します。
人が確認する
人が開くのは、matched 以外の行だけです。 matched の伝票は、業者ごとの件数と金額の合計を流し見て、物品管理のシステムへの入力に回します。
needs_humanを先に見る … 伝票の画像を開き、印字とバーコードのどちらが正しいかを決めます。多くはシールの汚れか読み違いですduplicateは業者に確かめる … 前に買い取った伝票の番号を添えて問い合わせます。二重請求と決めつけた書き方はしませんno_usage_recordは手術室に確かめる … 手術日と材料を伝え、使ったかを聞きます。使っていれば記録の追加を頼み、医事課に知らせますno_slipは月末の使用報告まで待つ … 使用報告にも無ければ、業者に伝票を頼みます- 判定を覆したら記録する … どの行を、どの結果に変えたか、理由を残します
3番目は、用度課だけで閉じない確認です。 手術室の看護師に聞く時間を決めておかないと、問い合わせが手術の合間に入り、返事が来ません。週2回、手術室の材料の担当とまとめて確かめる時間を取ります。
目標は、480件をならして1件3分です。 食い違いの出る伝票が1割から2割という想定で、それより多い月は、手術室のバーコードの読み取り漏れか、業者の書式の変化を疑います。
例外に対処する
| 起きること | 対応 |
|---|---|
| Excel で届いた使用報告 | OCR に通さず表として読む。列の対応は業者ごとの一覧で決める |
| バーコードが読めない(汚れ・かすれ) | 印字の値だけで照合し、結果に「印字のみ」の印を付ける |
| 印字とバーコードの値が違う | needs_human。画像を見て人が決める |
| 商品コードの検算が合わない | 読み誤りとして needs_human |
| 台帳に無い商品コード | 新しい材料か、預託でない材料が混ざった。台帳の整備を先に疑う |
| 手術日も手術番号も書かれていない | 納品日の前7日の範囲で照合し、候補が複数なら needs_human |
| 「破損」「不潔」の書き込み | 照合の結果とは別に印を付け、取り決めに沿って担当者が扱う |
| 同じファイルが二度入る | 指紋で見分けて2回目を処理しない |
| OCR や生成AIが応答しない | 受付フォルダに残し、次の回に処理する。処理済みへ移すのは成功時だけ |
| 朝の使用記録の書き出しが無い | その日の照合を止め、担当者に知らせる。古い記録で照らさない |
最後の行を軽く見ないでください。 書き出しが止まったまま前日の記録で照らすと、前日以降の手術の材料がすべて no_usage_record になり、手術室への問い合わせが一度に数十件出ます。
記録を残す
- 元の伝票のファイルと、受け取った日・業者
- OCR が返したJSONの全文(表、見出しの項目、バーコード)
- AIの出力(明細をそろえたJSON)と、そのとき渡した列の呼び方の一覧
- 照合の結果と、そのとき照らした使用記録の書き出しの日時
- 人が結果を覆した記録 … どの行を、どの結果に、理由
- 業者・手術室・医事課に確かめた日と、返ってきた答え
- 業者ごと・診療科ごとの食い違いの件数
4つ目で使用記録の書き出しの日時を残すのは、記録が後から足されるためです。 手術室が記録を足した後に照合し直すと結果が変わり、どの時点の記録で no_usage_record になったのかが残っていないと、確かめた経緯が追えません。
最後の行は、手術室と業者との相談の材料になります。 特定の診療科で no_usage_record が続くなら、その手術室でバーコードの読み取りが抜けやすい理由があります。
04実装レベルの3段階
最小構成では枚数がさばけません。 1枚ずつ Studio に入れるので、月480枚には使えません。確かめるための段階です。 半自動化で、1件10分が6分程度になります。 伝票を読む手間は無くなりますが、使用記録を探して照らす作業が残ります。本格構成で3分になり、この段階が本記事の想定です。 差が大きいのは、第4章の①と②、探すことと照らすことがこの段階で自動になるからです。 半自動化の一覧を1か月見てから本格構成に進みます。 印字とバーコードが食い違いやすい業者、台帳に無い商品コードが先に分かり、それを直してから照合を入れるほうが、needs_human が減ります。
05工数削減シミュレーション
導入後 480件 × 3分 ÷ 60 = 24 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 整形外科のインプラントや心臓カテーテルなどを業者からの預託(使った分だけ買い取る形)で手術室に置いている急性期病院。業者ごとに書式の違う納品書・使用報告が紙とPDFで届き、用度の担当が手術室の使用記録を1行ずつ引いて照らしている場合。手術部門のシステムで材料のバーコードを読み取って使用を記録しており、その記録を表の形で書き出せる場合。
- 預託品が数品目で、月の納品書が数十枚に収まる場合。院内物流をSPD業者に委ね、預託品の照合まで契約で任せている場合。手術室で材料の使用をバーコードで記録しておらず、使用の記録が手書きの伝票だけの場合(先に記録の方法を整える)。なお、材料を保険で請求できるかの判断、業者への支払いを止めるかの判断、手術室の記録の訂正は、この構成では代替できません。
07最小構成で試す方法
- 先月の伝票から、業者3社分の納品書と使用報告を30枚選ぶ(シールを貼った使用報告と、手書きの書き込みがあるものを必ず入れる)
- Document Intelligence Studio でレイアウトモデルを選び、バーコードの追加機能を有効にして30枚を読ませる
- 表の行とバーコードの値が、伝票の行と合っているかを目で確かめる
- 読み取り結果を手元の生成AIに渡し、第7章の指示で明細を共通の形にそろえさせる
- そろえた明細を、同じ期間の使用記録の書き出しと表計算で照らし、当時の確認の結果と比べる
30枚の目的は、「バーコードが照合の鍵として使えるか」を確かめることです。 照合の処理を作る前に、ここを見ます。
| 出てきた内容 | 判断 |
|---|---|
| バーコードが行に結び付き、使用記録の商品コード・ロットと合う | 照合の処理の作成に進む |
| バーコードは読めるが、印字のロットと食い違う行が多い | シールの貼り方と読み取りの解像度を見直す |
| 使用記録の側に商品コードやロットが入っていない | 手術室の記録の方法が先。 AIの問題ではない |
3行目が出ることは珍しくありません。 その場合は、どの診療科のどの材料で記録が品名だけになっているかを数え、手術室と記録の方法を相談するところから始めます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| AIが品名から商品コードを埋める | 推し量りを禁じ、読めた値だけを使う。 埋まった値が台帳と合いすぎていないかを見る |
| ロットの「0」と「O」をAIが直す | 直させない。印字とバーコードを両方残し、食い違いは人が見る |
| バーコードの信頼度で読めたかを判断しようとする | 信頼度は 1 に固定。 印字との一致と商品コードの検算で確かめる |
| バーコードが別の行に結び付く | シールの位置が行からずれている。位置の判定の幅を業者ごとに調整する |
| 同じファイルの再スキャンで二重請求の疑いが出る | ファイルの指紋で重複を除いてから判定する |
| ロットの重なりがすべて二重請求の疑いになる | 台帳にシリアル管理の有無を持たせる |
| 使用記録が品名だけで、照合の鍵が無い | 手術室のバーコードの読み取りを先に整える |
当日の手術の材料が no_usage_record になる | 照合の相手を前日までの記録に限る |
| Excel の使用報告が読めない | レイアウトモデルは Office 形式に非対応。表として直接読む |
| 手術室への問い合わせが返ってこない | 確かめる時間を週2回に決め、まとめて聞く |
| 記録漏れの材料が医事課に伝わらない | 一覧に「医事課へ連絡済み」の列を持たせる |
上の3行が、この構成の失敗のほとんどです。 どれも、読めなかったものを読めたように見せるという同じ型です。照合が「一致」になったとき、その一致が本物かどうかは、印字とバーコードの両方を残しているかで決まります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 業者の伝票(材料・ロット・単価)と、手術の使用記録(手術日・手術番号・診療科)です。使用報告には、患者の氏名やID が手書きで書き添えられていることがあります。
- 照合に患者の情報を使わない … 使用記録の書き出しは手術番号までにし、患者の氏名や病名を含めません。伝票に書かれた氏名は、AIの出力の項目に入れない指示にします
- 院内の規程に沿った場所で処理する … OCR と生成AIは病院が契約したテナントに置き、医療情報の扱いについての院内の規程と、厚生労働省の医療情報システムの安全管理のガイドラインに沿うかを、情報システムの担当と確かめてから使います
- 手術部門のシステムに書き込まない … 記録を足すかは看護師が確かめて決めます。照合の処理に書き込みの権限を持たせません
- 業者への問い合わせを自動で送らない …
duplicateは疑いであって確定ではありません。二重請求と決めつけた連絡は、業者との関係に直接ひびきます - 保険で請求できるかを判断させない … 材料を患者に請求できるかは医事課が決めます。この構成が出すのは、伝票と記録が合っているかという事実だけです
- 台帳の単価を外へ出さない … 契約の単価は業者との取引条件です。照合はプログラムの側で行い、台帳そのものをAIへ渡しません
誤りが起きた場合のリスクは、食い違いを見落として買い取ることと、合っているものを食い違いとして問い合わせることの2つです。 前者は読めなかった値を読めたことにすると起き、後者は重複したファイルやロットの重なりを二重請求とすると起きます。どちらも第12章の上の行で防ぎます。
10まず何から始めるか
1週目:使用記録の書き出しを決める
情報システムの担当と、手術部門のシステムから使用記録を書き出す方法を決めます。列は手術日・手術番号・診療科・商品コード・ロット・シリアル・数量の7つです。 あわせて、診療科ごとにバーコードで記録している材料の割合を数えます。
2週目:30枚で試す
業者3社分の伝票30枚を Studio で読み、バーコードが行に結び付くか、使用記録の商品コード・ロットと合うかを見ます。印字とバーコードの食い違いがどの業者で多いかを最優先で見ます。
3週目:照合の規則を決める
手術日の範囲、シリアル管理の材料、「破損」「不潔」の扱いを、手術室と業者との取り決めに沿って決めます。no_usage_record を誰がどこに確かめるかも、このときに決めます。 預託品の台帳に商品コードとシリアル管理の有無の列を足します。
4週目:受付フォルダから明細の一覧までをつなぐ
受付フォルダを起点に OCR と生成AIを呼び、明細の一覧を書き出すところまで作ります。この時点では照合の結果を出さず、明細の読み取りだけを見ます。
2か月目: 使用記録・台帳・過去の結果との照合を足し、結果と確かめる先を出します。3か月目以降: 1件10分が何分になったかを実測し、診療科ごとの no_usage_record の件数を手術室と共有します。手術室のバーコードの読み取りが抜けにくくなった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
追加機能を features にカンマ区切りで指定できること。バーコードの抽出・キーと値のペアが無料、問い合わせ項目・高解像度などが有料の追加機能であること。バーコードが kind・value・polygon 付きで返り、confidence が 1 に固定されること。対応するバーコードの種類(QR Code、Code 39/93/128、UPC、PDF417、EAN-8/13、Codabar、Databar、Databar Expanded、ITF、Data Matrix)。対応する形式が PDF と画像(JPEG/JPG、PNG、BMP、TIFF、HEIF)で、Office 形式は対象外であること | Microsoft Learn: Add-on capabilities | 2026-10-08 |
レイアウトモデル(prebuilt-layout)が表・選択マーク・文書の構造を取り出すこと。v4.0 で日本語が印字・手書きの両方の対応言語に含まれること | Microsoft Learn: Language support for Read and Layout | 2026-10-08 |
Azure OpenAI の構造化出力で、JSON スキーマを指定し strict を true にすること。すべての項目を必須にし、additionalProperties を false にすること | Microsoft Learn: Structured outputs | 2026-10-08 |
| 令和4年12月1日から医療機器の販売包装単位へのバーコード表示が法制化されたこと。GS1-128 のバーコードが商品コードに有効期限・ロット番号などを附帯して表せること。特定保険医療材料の例(PTCA カテーテル、人工骨など) | 厚生労働省: 医療機器等における情報化進捗状況調査の結果公表(令和8年3月25日) | 2026-10-08 |
預託品の買い取りの取り決め、「破損」「不潔」の材料の扱い、材料を保険で請求できるかの判断は、業者との契約と院内の医事の担当で決めてください。 本記事は公開資料で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1061)についてのご相談はこちらから。
