医療保険の給付金請求に添付された領収証・診療明細書の写真を読み取り、入院日数と手術の査定入力を下書きし、不足書類を洗い出す
給付金の請求に添付された日本語の領収証と診療明細書を読み取り、入院の期間、入院日数、手術の記載、金額を査定入力の下書きにします。期間の抜けや明細書の不足、撮り直しが要る写真も洗い出します。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- その他/保険
- 対象部門
- カスタマーサポート
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 人手が足りない/入力作業が多い/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 請求受付の画面で、請求の内容(被保険者、入院の期間、手術の有無の申告)と添付の画像を開く
- 画像を1枚ずつ見て、領収証か明細書か、それ以外かを見分ける
- 領収証の患者名、医療機関名、入院の期間、保険診療の負担額と保険外の負担額を読む
- 明細書から手術の項目を探し、手術名と日付を読む
- 領収証ごとの期間を並べ、入院の初日から退院日までがつながっているかを確かめ、日数を数える
- 読んだ値を査定システムへ入力する
- 足りない書類や読めない画像があれば、請求者への依頼を書く
- 自動請求が登録されると、添付の画像を受け取り、形式を確かめる。HEIC の写真は JPEG に変える
- 自動Enterprise Document OCR が全ページの文字と、ページごとの画像の品質スコアを返す
- 自動品質スコアが低く、反射やピンぼけ、端の切れが検出されたページを、撮り直しの候補にする
- 自動品質が足りたページを Form Parser に渡し、欄の名前と値、表を取り出す
- 自動生成AIが、書類ごとに種類を判定し、患者名、医療機関名、期間、金額、手術の項目を、根拠の文字列付きで取り出す
- 自動スクリプトが、領収証ごとの期間をつないで入院日数を数え、抜けている期間を見つける。請求の内容と患者名・期間を突き合わせる
- 自動結果から、`ready` / `needs_retake` / `needs_docs` / `needs_human` を規則で決め、査定入力の下書きと依頼文の下書きを作る
- 人担当者が下書きを確かめ、査定システムへ登録する。撮り直しと追加書類の依頼を送る
各工程の詳しい説明を読む
- 請求受付の画面で、請求の内容(被保険者、入院の期間、手術の有無の申告)と添付の画像を開く
- 画像を1枚ずつ見て、領収証か明細書か、それ以外かを見分ける
- 領収証の患者名、医療機関名、入院の期間、保険診療の負担額と保険外の負担額を読む
- 明細書から手術の項目を探し、手術名と日付を読む
- 領収証ごとの期間を並べ、入院の初日から退院日までがつながっているかを確かめ、日数を数える
- 読んだ値を査定システムへ入力する
- 足りない書類や読めない画像があれば、請求者への依頼を書く
(a)転記が1件ずつ重い。 入院の請求では、患者名、医療機関名、期間、金額を書類の枚数分だけ読み、査定システムの項目へ打ちます。書類が4枚なら、同じ種類の転記が4回です。
(b)期間の抜けを見落とす。 入院の初日から退院日まで、領収証がそろっているかは並べて見ないと分かりません。 月の途中の1枚が抜けていても、最初と最後の領収証だけを見れば、入院はつながっているように見えます。
(c)読めないのか、書かれていないのかが分からない。 明細書の手術の欄が照明の反射で白く飛んでいると、手術が無かったのか、写っていないだけなのかを担当者が判断することになります。 迷った担当者は、請求者に診断書を頼むことがあります。
(d)手術の名前を探すのに時間がかかる。 明細書には、検査、投薬、処置、手術、入院料と、多くの項目が並びます。手術の行を探して読むのは、明細書が長いほど時間がかかります。
- 【自動】 請求が登録されると、添付の画像を受け取り、形式を確かめる。HEIC の写真は JPEG に変える
- 【自動】 Enterprise Document OCR が全ページの文字と、ページごとの画像の品質スコアを返す
- 【自動】 品質スコアが低く、反射やピンぼけ、端の切れが検出されたページを、撮り直しの候補にする
- 【自動】 品質が足りたページを Form Parser に渡し、欄の名前と値、表を取り出す
- 【自動】 生成AIが、書類ごとに種類を判定し、患者名、医療機関名、期間、金額、手術の項目を、根拠の文字列付きで取り出す
- 【自動】 スクリプトが、領収証ごとの期間をつないで入院日数を数え、抜けている期間を見つける。請求の内容と患者名・期間を突き合わせる
- 【自動】 結果から、
ready/needs_retake/needs_docs/needs_humanを規則で決め、査定入力の下書きと依頼文の下書きを作る - 【人】 担当者が下書きを確かめ、査定システムへ登録する。撮り直しと追加書類の依頼を送る
3番目が、この設計の分かれ目です。 読めないページを先に取り除くので、後段の「書かれていない」は、読めたうえで無かったという意味になります。 撮り直しの依頼と追加書類の依頼が、ここで分かれます。
6番目をスクリプトにしているのも、意図してのことです。 日数の計算、期間のつながり、金額の合計は、規則どおりに計算するものです。 生成AIに数えさせると、もっともらしい日数が返り、誤りに気づけません。
02今回想定するシステム構成
給付金の請求(Web・アプリの写真/郵送のスキャン) │【トリガー】15分おきの定時実行 ▼ Python ── 形式の確認、HEIC → JPEG、請求ごとに画像を束ねる ▼ Google Document AI(Enterprise Document OCR) │ 全ページの文字、画像の品質スコアと検出された不具合 ▼ Python ── 品質の足りないページを撮り直しの候補へ ▼ Google Document AI(Form Parser) │ 欄の名前と値、表、信頼度 ▼ Gemini API ── 書類の種類の判定、項目の取り出し(構造化出力) ▼ Python ── 入院の期間のつながりと日数、金額の合計、請求内容との照合 ▼ 判定(ready / needs_retake / needs_docs / needs_human) ▼ 【人が下書きを確認】 ├──▶ 査定システムへ登録 └──▶ 撮り直し・追加書類の依頼
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Google Document AI(Enterprise Document OCR、Form Parser) | Azure AI Document Intelligence |
| 生成AI | Gemini API(書類の種類の判定と、項目の取り出し) | Claude API、OpenAI API |
| 差異計算 | Python(入院の期間のつながり、日数、金額の合計、請求内容との照合) | 査定システムの確認規則 |
| 連携 | Python(請求の受け取り、画像の変換、下書きの受け渡し) | 既存の連携の仕組み |
| 保管 | 請求書類の保管場所(原本の画像) | 文書管理システム |
請求受付の仕組みと査定システムは、今のまま使います。 この構成は画像を読み、下書きを渡すところまでです。査定システムへの登録は担当者が行います。
OCRに Google Document AI を選ぶのは、日本語で使える2つのプロセッサがそろうからです。 Enterprise Document OCR と Form Parser は、どちらも対応言語に日本語が含まれます。 対応地域は us、eu、asia-southeast1 などです。
Enterprise Document OCR を先に通すのは、画像の品質スコアのためです。 文書の読みやすさを機械学習で評価し、0から1の品質スコア(1が完全な品質)を返します。スコアが0.5を下回ると、品質を下げている理由が可能性の高い順に返ります。 理由は、ぼけ、ノイズ、暗さ、薄さ、文字が小さすぎる、書類の切れ、文字の切れ、反射の8種類です。スマートフォンの写真で起きることが、ほぼそのまま並んでいます。
Form Parser は、欄の名前と値の組、表、チェック欄を取り出します。 書類に書かれた欄の名前がそのまま返るので、医療機関ごとに様式が違っても、「患者氏名」「入院期間」のような欄の組が取れます。 ただし、表は行や列をまたぐセルの無い、単純な表が対象です。領収証の区分ごとの欄はセルが結合されていることがあり、表として取れない書類は、OCRの全文を生成AIに渡します。
03どうやって実装するのか
処理の起点を決める
15分おきの定時実行にします。 請求は日中に集中して届き、夜間はほとんどありません。1件ずつ即時に動かすより、請求ごとに画像がそろってから束ねて処理するほうが、書類の突き合わせが正しくできます。
請求者は、写真を何回かに分けて送ってくることがあります。請求の登録から一定の時間がたち、追加の画像が届いていないものだけを対象にします。 処理の途中で画像が増えた請求は、次の回に回します。
処理済みの印は、下書きまで作れたときだけ付け、途中で止まったものは次の回にやり直します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 請求の内容 | 請求番号、被保険者の氏名(漢字・カナ)、申告された入院の期間と医療機関、手術の有無の申告 | 請求受付の仕組み |
| 添付の画像 | 写真(JPEG・HEIC)、スキャンのPDF、提出の日時 | 請求受付の仕組み |
| 読み取り結果 | 全ページの文字、品質スコアと不具合、欄の名前と値、表、信頼度 | Google Document AI |
| 取扱いの規則 | 領収証と明細書で受け付けられる条件、入院日数の数え方、必要な書類の組み合わせ | 自社の事務の規程 |
いちばん下の取扱いの規則を、先に文字にしておく必要があります。 「どの請求なら診断書が要らないか」「日数の初日と退院日をどう数えるか」は自社の約款と事務の規程で決まることで、規則が決まっていないと、スクリプトは判定を出せません。
被保険者のカナの氏名も欠かせません。 領収証の患者名は、医療機関によって漢字だったりカナだったりします。漢字だけで照合すると、同じ人が別人になります。
データの取得方法を決める
Enterprise Document OCR には、次の2つを指定して送ります。
| 指定 | 設定 | 理由 |
|---|---|---|
enableImageQualityScores | true | ページごとの品質スコアと不具合を受け取る |
hints.languageHints | ["ja"] | 推定させず、日本語として読ませる |
品質の結果は pages[].imageQualityScores に、qualityScore と detectedDefects(quality/defect_glare などの種類と信頼度)で返ります。信頼度が0.5を超えるものが、検出されたとみなされます。
Form Parser からは、次の2つを取ります。
| 取るもの | 場所 | 使い方 |
|---|---|---|
| 欄の名前と値 | pages[].formFields の fieldName と fieldValue | 患者名、医療機関名、入院期間、発行日、負担額 |
| 表 | pages[].tables の headerRows と bodyRows | 明細書の項目の行(区分、項目名、点数、回数) |
表のセルには rowSpan と colSpan が付きます。 単純な表では常に1です。表が1つも返らなかったページ、または行の数が明らかに少ないページは、表として取れなかったとみなし、OCRの全文を生成AIに渡します。
郵送のスキャンは、最低200dpi、できれば300dpi以上で取ります。 Document AI の案内では200dpiが最低で、300dpi以上が一般に最も良い結果になるとされています。写真については、請求者の側の撮り方の案内で補います(第12章)。
AIへ渡す前に整形する
- 形式をそろえる … Document AI が受け付ける画像は PDF、GIF、TIFF、JPEG、PNG、BMP、WebP などで、HEIC は対応形式に含まれていません。 スマートフォンの HEIC の写真は JPEG に変えます
- むやみに圧縮しない … JPEG のような非可逆の形式でファイルを小さくすると、画像の品質と読み取りの精度が落ちるとされています。変換は1回だけにし、容量を減らすための再圧縮をしません
- 請求ごとに束ねる … 1件の請求の画像を1つにまとめ、ページに提出の順番を付けます
- ページ数を確かめる … 同期の処理は1回に15ページまでです。超える請求は分けて送ります
- 同じ写真の重複を落とす … 請求者が同じ書類を2回撮っていることがあります。画像の近さで重複を見つけ、1枚だけを残します
- 品質の足りないページを分ける …
qualityScoreが0.5を下回ったページは、不具合の種類とともに撮り直しの候補にし、Form Parser に送りません
6番目で送らないのは、読めないページから取り出した値を後段で使わないためです。 反射で白く飛んだ明細書から手術の行が取れなかったとき、それを「手術の記載なし」と扱うと、請求者に診断書を頼むことになります。
AIに処理させる
生成AIにさせるのは、書類ごとの種類の判定と、決まった項目の取り出しだけです。
| 取り出すもの | 取り出し方 | 取り出せないとき |
|---|---|---|
| 書類の種類 | 領収証(入院/外来)、診療明細書、それ以外 | other。項目を取り出さない |
| 患者名 | 書かれたとおりの文字列 | missing |
| 医療機関名 | 書かれたとおりの文字列 | missing |
| 期間 | 入院の期間の初日と終わりの日、または外来の診療日 | missing。期間が複数あれば ambiguous |
| 発行日 | 書類の発行の日付 | missing |
| 負担額 | 保険診療の負担額と、保険外の負担額を分けて | missing。区別がつかなければ ambiguous |
| 手術の項目 | 明細書の手術の区分にある行の、項目名・日付・点数を書かれたとおり | 行が無ければ空の一覧。明細書の該当ページが読めなければ unreadable |
表の右端が、この構成で大事な区別です。 missing は読めたうえで書かれていないこと、unreadable は品質の足りないページにあったか、値として確定できないことです。前者は追加書類、後者は撮り直しに回ります。
| させないこと | 理由 |
|---|---|
| 入院日数の計算 | 領収証ごとの期間をつなぐのはスクリプト。数えさせると、もっともらしい日数が返る |
| 約款上の手術に当たるかの判断 | 査定者が約款に照らして判断する |
| 給付の対象か、支払うかの判断 | 査定の判断そのもの |
| 手術名の言い換え | 書かれた項目名を、それらしい一般名に直さない |
| 金額の合計や割り戻し | 合計はスクリプトが計算する |
| 患者が被保険者本人かの結論 | 照合の材料を出すまで。結論は人 |
いちばん起きやすい失敗は、表の4行目です。 明細書の項目名は略された書き方のことがあり、生成AIはそれを分かりやすい手術名に直したがります。直した名前で査定者が判断すると、書類に書かれていない手術を見たことになります。
指示内容を固定する
あなたは生命保険会社の給付金請求の受付で、添付書類を読む担当です。
渡された読み取り結果だけを見て、書類ごとに項目を取り出してください。
判断や計算はしないでください。
【書類の種類】
- receipt_inpatient : 入院の領収証
- receipt_outpatient: 外来の領収証
- statement : 診療明細書
- other : それ以外(診察券、お薬手帳、請求書の控えなど)
other の書類からは項目を取り出さないでください。
【取り出す項目】
患者名、医療機関名、期間(初日と終わりの日)、発行日、
保険診療の負担額、保険外の負担額、手術の項目(明細書のみ)
【status の選び方】
- ok ......... 値が読み取れている
- missing .... 読み取り結果の中に、その項目が無い
- unreadable . その項目があるはずのページが「品質不足」と印の付いたページ、
または文字はあるが値として確定できない
- ambiguous .. 候補が複数あり、1つに決められない
迷ったときに ok を選ばないでください。
【厳守事項】
- 記載がなければ status を missing にしてください。推測で埋めないでください。
- 入院日数を数えないでください。期間の初日と終わりの日を、書かれたとおりに
取り出すだけにしてください。
- 手術の項目名は、書かれた文字列をそのまま写してください。
略された名前を一般的な手術名に言い換えないでください。
- 手術の区分に行が無ければ、手術の一覧を空にしてください。
手術が無いと判断したとは書かないでください。
- 金額を足したり、税や負担割合から割り戻したりしないでください。
- 保険診療と保険外の負担額を1つにまとめないでください。
- 約款上の手術に当たるか、給付の対象か、支払えるかを書かないでください。
- evidence には、根拠にした文字列をそのまま写してください。
- 日付は西暦(YYYY-MM-DD)に直してください。元の表記は evidence に残してください。
【読み取り結果(ページごと、品質不足のページには印)】{pages}
「手術が無いと判断したとは書かない」を入れているのは、空の一覧の意味を1つにするためです。 何も言わないと、生成AIは「手術は行われていません」と文にして返します。査定者がそれを読むと、書類の事実ではなく判断に見えます。 空の一覧は「明細書の手術の区分に行が無かった」という事実だけを表します。
日付を西暦に直させるのは、スクリプトが期間をつなぐためです。 和暦のままだと比べられません。元の表記を evidence に残させるので、直し方の誤りは査定者が見て分かります。
出力形式を固定する
Gemini API の構造化出力で、次の形のJSONを受け取ります。 要求の response_format に、mime_type を application/json、schema にJSONスキーマを指定します。
{
"claim_id": "",
"documents": [
{
"page_refs": [1, 2],
"doc_type": "receipt_inpatient | receipt_outpatient | statement | other",
"fields": [
{ "item": "patient_name", "status": "ok | missing | unreadable | ambiguous",
"value": "", "evidence": "" }
],
"surgeries": [
{ "name": "", "date": "", "points": "", "evidence": "" }
]
}
]
}
fields の item は patient_name / facility / period_from / period_to / issue_date / insured_share / non_insured_share です。
スキーマには enum と required を使います。 doc_type と status は enum で値を固定し、fields の要素には item と status を required にします。ただし、構文として正しいJSONが返っても、値はアプリケーションの側で確かめるよう案内されています。 スクリプトは、日付として解釈できるか、金額が数字か、page_refs が実在するページかを確かめます。
JSONを受け取ったあと、スクリプトが請求ごとの判定を足します。
{
"claim_id": "",
"admission": {
"periods": [ { "from": "", "to": "", "doc": 0 } ],
"gaps": [ { "from": "", "to": "" } ],
"days_by_rule": 0
},
"patient_match": "matched | kana_only | mismatch",
"retake_pages": [ { "page": 0, "defects": [] } ],
"missing_docs": [],
"verdict": "ready | needs_retake | needs_docs | needs_human"
}
verdict | 条件 |
|---|---|
needs_retake | retake_pages があり、そのページに領収証か明細書の項目があるはずのもの |
needs_docs | 期間に gaps がある、入院の領収証に対応する明細書が無い、手術の申告があるのに明細書が無い |
needs_human | ambiguous がある、patient_match が mismatch、申告と書類の期間が食い違う |
ready | 上のどれにも当たらない |
status と verdict を別の層に置いているのが要点です。 取り出しは生成AI、判定は規則です。取扱いの規則が変わっても、直すのはスクリプトの条件だけです。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 請求受付の仕組み | 請求と画像の取得 | 処理の対象の請求と、添付の画像を受け取る |
| Google Document AI | API呼び出し(同期の処理) | Enterprise Document OCR、Form Parser の順に送る |
| Gemini API | API呼び出し | 書類ごとの種類と項目(構造化出力) |
| 査定システム | 下書きの受け渡し | 下書きの項目を渡す。確定の登録は担当者 |
| 依頼の送付 | 請求受付の仕組みの連絡機能 | 撮り直しと追加書類の依頼。送るのは担当者 |
査定システムへは、下書きとして渡すだけです。 期間、日数、手術の項目、負担額を、担当者が確認する画面に入れた状態にします。担当者が確認して登録するまで、査定の対象にはなりません。
Document AI の地域は、個人の医療情報を置いてよい場所を社内で決めてから選びます。 対応地域は asia-southeast1 や us、eu などで、どこで処理するかは、請求書類の取扱いの規程と合わせて決めます。
人が確認する
担当者は全件の下書きを見ますが、見る場所を絞ります。
verdictで順番を決める …needs_humanを先に、readyを最後に見ますretake_pagesの写真を見る … 不具合の種類(反射、ぼけ、切れ)を確かめ、撮り直しの依頼を送りますgapsの期間を確かめる … 抜けている期間の領収証が、別のページに写っていないかを画像で見ます- 手術の項目の
evidenceを読む … 項目名が書類のとおりに写されているかを、画像の該当箇所で確かめます - 下書きを登録する … 直したところがあれば記録します
4番目を省かないでください。 手術の項目名は、査定者が約款の手術に当たるかを判断する材料そのものです。写し間違いや言い換えは、そのまま査定の誤りになります。
ready の請求も、画像を1回は開きます。 見るのは、期間と手術の項目の根拠だけです。全件を最初から読み直す設計にすると、第10章の4分には収まりません。
例外に対処する
| 起きること | 対応 |
|---|---|
| HEIC など対応していない形式 | JPEG に変えて投入。変えられないものは撮り直しの依頼 |
| 品質スコアが0.5を下回る | 不具合の種類とともに retake_pages へ。Form Parser に送らない |
| 1回の送信が15ページを超える | 請求を分けて送る |
| 領収証の表が取れない | 結合したセルの表。OCRの全文を生成AIに渡す |
書類の種類が other | 項目を取り出さず、担当者に種類だけを示す |
| 患者名がカナだけで一致 | kana_only。同一人物かの結論は人 |
| 期間に抜けがある | needs_docs。抜けている期間を依頼文に書く |
| 申告の期間と書類の期間が違う | needs_human。どちらが正しいかは判定しない |
| 同じ書類の写真が2枚 | 重複として1枚だけを残す。残した理由を記録 |
| Document AI や Gemini API が応答しない | 処理済みの印を付けず、次の回にやり直す |
上から2行目が、件数としていちばん多くなります。 スマートフォンの写真の反射と端の切れは、AIの問題ではなく撮り方の問題です。 不具合の種類が分かるので、撮り直しの依頼に「照明が反射しています」「右端が切れています」と具体的に書けます。
記録を残す
- 請求番号と、受け取った画像の原本、変換後の画像
- Document AI が返した結果の全文(品質スコア、欄の名前と値、表)
- 生成AIに渡した読み取り結果と、返ったJSON
- スクリプトが足した判定(期間のつながり、日数、照合、
verdict)と、そのとき使った取扱いの規則の版 - 担当者が直した項目と、直す前と後の値
- 撮り直しと追加書類の依頼を送った日時と、その後に届いた書類
- 不具合の種類ごとの撮り直しの件数
規則の版を残すのは、日数の数え方が後から変わりうるためです。 数え方を変えたあとに過去の請求を見直すとき、当時の規則が残っていないと、どの請求をやり直すかが決まりません。
最後の件数は、請求者への撮り方の案内を直す材料になります。 反射が多ければ照明の、端の切れが多ければ枠に収める案内を足します。
04実装レベルの3段階
最小構成では件数がさばけません。確かめるための段階です。 半自動化で、①の読み取りが減ります。 残るのは、期間を並べて日数を数えることと、査定システムへの入力です。本格構成で②と③も下書きになり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、撮り直しの傾向と、表として取れない様式が先に分かります。
05工数削減シミュレーション
導入後 1,500件 × 4分 ÷ 60 = 100 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 医療保険・がん保険などの入院給付金・手術給付金について、自社の取扱いとして一定の条件で診断書の代わりに医療機関の領収証と診療明細書の写しでの請求を受け付けている生命保険会社・共済。スマートフォンで撮った写真や郵送のスキャンが毎月千件以上届き、請求受付の担当者が1枚ずつ読んで入院の期間・手術・金額を査定システムに入力している場合。
- 請求の大半に医師の診断書が必要で、領収証と明細書だけで受け付ける請求が少ない場合。月の請求が数十件で、目視で足りる場合。給付の対象となる手術か、支払うかどうかといった査定の判断そのものを自動化したい場合、この構成では代替できません。英文の書類が中心の場合は UC-0370 の構成が向きます。
07最小構成で試す方法
- 先月受け付けた請求から30件を選ぶ(うち数件は、期間の抜けや撮り直しがあったものを入れる)
- その30件について、当時の担当者がどこで迷ったか、何を依頼したかを聞き取る
- 画像を手元の Gemini の画面に1件ずつ貼り付ける
- 「この書類ごとに、種類、患者名、医療機関名、期間、発行日、保険診療と保険外の負担額、明細書の手術の項目を取り出してください。書かれていないものと、読めないものを分けてください。日数は数えないでください。手術名を言い換えないでください」と指示する
- 出てきた値を、当時の査定システムへの入力と突き合わせる
30件は必ずやってください。
| 出てきた内容 | 判断 |
|---|---|
| 当時の入力と同じ値が出た | Document AI とスクリプトの連携に進む |
| 手術名を一般的な名前に直した | 指示の書き方で直る。構成は有効 |
| 読めない写真が多く、項目が出ない | 撮り方の案内が先。 AIの問題ではない |
3行目が出たら、 品質スコアだけを先に試し、撮り直しの写真の不具合の内訳を数えてください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 読めないページを「記載なし」と扱う | 品質スコアで先に分け、品質不足のページを後段に送らない |
| 写真の反射で撮り直しが多い | 不具合の種類を依頼文に書き、撮り方の案内を直す |
| 入院日数が合わない | 日数は生成AIに数えさせず、スクリプトが期間をつないで数える |
| 月の途中の領収証の抜けに気づかない | 期間の gaps を出し、needs_docs にする |
| 手術名が言い換えられる | 書かれたとおりに写すよう指示し、evidence を人が確かめる |
| 空の手術の一覧が「手術なし」と読まれる | 事実だけを表すと決め、文にさせない |
| HEIC の写真で止まる | 対応形式に含まれない。JPEG に変えてから送る |
| 変換のたびに画質が落ちる | 非可逆の形式の再圧縮をしない |
| 領収証の表が取れない | 結合したセルは単純な表の対象外。OCRの全文で補う |
| カナの患者名で別人になる | 被保険者のカナの氏名で照合し、結論は人 |
| 和暦と西暦が混ざる | 西暦に直させ、元の表記を evidence に残す |
上の2行が、この構成の要です。 ここを外すと、請求者に不要な診断書を頼む構成になります。 3行目と4行目も早く効きます。日数の誤りは給付の額に直結するので、計算を規則の側に置きます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 被保険者の氏名、医療機関名、入院の期間、手術と診療の内容、医療費の金額です。病歴や診療の内容は、個人情報の中でも特に慎重な扱いが求められる情報です。
- 処理する地域と保存の場所を先に決める … Document AI の地域は選べます。請求書類をどこで処理し、結果をどこに残すかを、社内の規程と合わせて決めてから作ります
- 生成AIに渡す範囲を、取り出す項目に関係するページまでに限る …
otherと判定した書類(お薬手帳など)の中身は、項目の取り出しに要りません - 査定の判断をさせない … 約款上の手術に当たるか、給付の対象か、支払うかは、査定者が判断します。 この構成が出すのは、書類から読み取れたことと足りないことだけです
- 確定の登録と依頼の送付を自動にしない … 下書きまでにし、登録と送付は担当者が行います
- 撮り直しの依頼の書き方に気をつける … 請求者は入院した本人や家族です。責める言い方にならない依頼文の型を決めておきます
- 直された記録を残す … 後から請求の処理を説明する記録になります
誤りが起きた場合のリスクは、日数や手術を誤って下書きすることと、不要な書類を請求者に頼むことの2つです。 前者は計算を規則に置き、根拠を人が確かめることで防ぎます。後者は、読めないことと書かれていないことを分けることで防ぎます。
10まず何から始めるか
1週目:取扱いの規則を文字にする
領収証と明細書で受け付ける条件、入院日数の数え方、必要な書類の組み合わせを、査定の担当部署と一緒に書き出します。 ここが決まらないと、スクリプトの判定が書けません。
2週目:30件で試す
先月の請求から30件を選び、手元の Gemini の画面に貼って項目を取り出させます。手術名を言い換えていないか、読めない写真で何が起きるかを最優先で見ます。
3週目:品質スコアを測る
同じ30件の画像を Enterprise Document OCR に通し、品質スコアと不具合を一覧にします。撮り直しになる写真の割合と、多い不具合の種類を数えます。
4週目:読み取りから取り出しまでをつなぐ
Enterprise Document OCR、Form Parser、Gemini API をスクリプトでつなぎ、書類ごとの取り出し結果を一覧に書き出します。この時点では verdict を出さず、取り出しの一覧だけを見ます。
2か月目: 期間のつながりと日数の計算、請求内容との照合を足し、verdict を出します。needs_retake と needs_docs の件数を毎週数えます。3か月目以降: 査定入力と依頼文の下書きを足し、1件10分が何分になったかを実測します。撮り直しの不具合の傾向を見て、請求者への撮り方の案内を直した時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
Enterprise Document OCR と Form Parser の対応言語に日本語が含まれること。同期の処理のページの上限が15(imageless モードで30)、バッチ処理では Enterprise Document OCR が500、Form Parser が100であること。対応地域が us、eu、asia-southeast1、asia-south1、australia-southeast1、europe-west2、europe-west3、northamerica-northeast1 であること | Google Cloud: Processor list | 2026-09-30 |
画像の品質スコアが enableImageQualityScores で有効になり、0から1(1が完全な品質)で返ること。0.5を下回ると品質を下げる理由が可能性の高い順に返り、信頼度0.5を超えるものが検出とみなされること。不具合の種類が quality/defect_blurry・noisy・dark・faint・text_too_small・document_cutoff・text_cutoff・glare の8つであること。結果が pages[].imageQualityScores に返ること。languageHints に BCP-47 の言語コードを指定できること | Google Cloud: Enterprise Document OCR | 2026-09-30 |
| Form Parser がキーと値のペア、表、選択マーク(チェック欄)、一般的な項目、文字を取り出すこと。表は行や列をまたぐセルの無い単純な表が対象であること。事前学習済みで追加の学習ができないこと | Google Cloud: Form Parser | 2026-09-30 |
欄が formFields の fieldName と fieldValue で返り、書類に書かれた欄の名前がそのまま欄の名前になること。表が headerRows と bodyRows で返り、セルに rowSpan と colSpan が付き、単純な表では常に1であること。チェック欄が filled_checkbox / unfilled_checkbox で返ること | Google Cloud: Handle the processing response | 2026-09-30 |
| 対応する画像の形式が PDF、GIF、TIFF、JPEG、PNG、BMP、WebP などで、HEIC が含まれないこと。非可逆の形式でファイルを小さくすると画像の品質と結果の精度が落ちうること。スキャンは最低200dpi、300dpi以上が一般に最も良い結果になるとされていること | Google Cloud: Supported files | 2026-09-30 |
Gemini API の構造化出力が response_format に mime_type(application/json)とJSONスキーマを指定して使い、enum、required などJSON Schema の一部をサポートすること。構文として正しいJSONが返っても、値はアプリケーションの側で確かめるよう案内されていること | Google AI for Developers: Structured output | 2026-09-30 |
領収証と明細書で受け付ける条件、入院日数の数え方、給付の対象となる手術の判断は、自社の約款と事務の規程、査定の担当部署の判断に従ってください。 本記事は Google Cloud と Google AI for Developers のページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0401)についてのご相談はこちらから。
