海外旅行保険の請求で届く英文の病院の明細書(itemized bill)を読み取り、診療項目・日付・金額を支払査定の表に起こす
海外の病院から出た英文の明細書(itemized bill)を読み取り、診療日、診療項目、数量、単価、金額、通貨を1行ずつ支払査定の表に起こします。明細の合計と請求額を照合し、渡航期間外の日付や重複に印を付けて査定の担当者に渡します。
- 生成AI
- ChatGPT/Claude
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- 保険/金融
- 対象部門
- カスタマーサポート
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 人手が足りない/入力作業が多い/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 請求の管理システムで請求を開き、添付された明細書の画像を開く
- 明細の行ごとに、診療日・項目・数量・単価・金額を査定の表へ打ち込む
- 現地の保険からの支払・割引・本人の支払済み額の行を見分け、別の欄に入れる
- 明細の合計が、明細書の合計欄と領収書の金額に合うかを電卓で確かめる
- 診療日が渡航期間の中か、同じ明細が別の請求で出ていないかを確かめる
- 分からない項目(略語、病院独自のコード)を調べ、メモを付ける
- 表を査定の担当者に回す
- 人受付の担当者が、請求の書類を種類(明細書・領収書・診断書)ごとに分けて登録する(既存の受付の手順)
- 自動明細書の登録をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 自動OCRが、明細の行ごとの項目・数量・金額と、合計・支払済み額などの要約の欄を信頼度つきで返す
- 自動生成AIが、行ごとの値を査定の表の形にそろえ、治療の行と支払・調整の行を分ける
- 自動プログラムが、行の合計と明細書の合計欄・領収書の金額を照合し、渡航期間と重複を確かめる
- 自動査定の表の下書きと、印の付いた行の一覧を作る
- 人担当者が、印の付いた行と合計の照合の結果を確かめ、表を確定する
- 人査定の担当者が、確定した表をもとに支払の査定を行う
各工程の詳しい説明を読む
- 請求の管理システムで請求を開き、添付された明細書の画像を開く
- 明細の行ごとに、診療日・項目・数量・単価・金額を査定の表へ打ち込む
- 現地の保険からの支払・割引・本人の支払済み額の行を見分け、別の欄に入れる
- 明細の合計が、明細書の合計欄と領収書の金額に合うかを電卓で確かめる
- 診療日が渡航期間の中か、同じ明細が別の請求で出ていないかを確かめる
- 分からない項目(略語、病院独自のコード)を調べ、メモを付ける
- 表を査定の担当者に回す
(a)打ち込みに時間がかかる。 入院の明細は、検査・薬剤・処置が日ごとに何十行も並びます。2番だけで1件の大半の時間が消えます。
(b)支払・調整の行を混ぜる。 現地の保険からの支払(「Insurance Payment」など)や割引(「Adjustment」「Discount」)は、明細の途中や末尾にマイナスの金額やかっこ書きで並びます。治療の行として打ち込むと、合計が合わなくなります。
(c)合計が合わない理由が分からない。 4番で合わないとき、打ち込みの誤りか、明細書の側の事情(前回の残高の繰越など)かを、もう一度最初の行から見直します。
(d)請求が増える時期に滞る。 長期休暇の後は請求が重なり、打ち込みの順番待ちのあいだ、契約者は立て替えたまま待つことになります。
- 【人】 受付の担当者が、請求の書類を種類(明細書・領収書・診断書)ごとに分けて登録する(既存の受付の手順)
- 【自動】 明細書の登録をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 【自動】 OCRが、明細の行ごとの項目・数量・金額と、合計・支払済み額などの要約の欄を信頼度つきで返す
- 【自動】 生成AIが、行ごとの値を査定の表の形にそろえ、治療の行と支払・調整の行を分ける
- 【自動】 プログラムが、行の合計と明細書の合計欄・領収書の金額を照合し、渡航期間と重複を確かめる
- 【自動】 査定の表の下書きと、印の付いた行の一覧を作る
- 【人】 担当者が、印の付いた行と合計の照合の結果を確かめ、表を確定する
- 【人】 査定の担当者が、確定した表をもとに支払の査定を行う
7番目が、この設計の分かれ目です。 担当者は明細を打ち込まず、下書きの表と明細書の画像を並べて、印の付いた行だけを確かめます。
5番目をプログラムに置いているのは、合計の照合に解釈の余地がないからです。 治療の行の合計が明細書の合計欄に合うかは、足し算で決まります。
02今回想定するシステム構成
英文の病院の明細書(契約者が提出した画像・PDF) ▼【トリガー】請求の管理システムへの明細書の登録(Amazon S3 に保存) AWS Lambda ── 形式・ページ数・パスワードの確認 ▼ AWS Textract(StartExpenseAnalysis/GetExpenseAnalysis) │ 明細の行(品目・数量・単価・金額・行全体)、要約の欄、通貨、信頼度 ▼ Claude API ── 行の値の整形と、治療の行・支払・調整の行の仕分け │ ① 診療日 ② 項目と記載のコード ③ 数量・単価・金額 ④ 行の種類 ▼ Python ── 合計の照合、領収書との照合、渡航期間・重複の確認 ▼ 査定の表の下書き + 印の付いた行(ok / needs_human) ▼ 【担当者が印の付いた行と合計を確認して表を確定】 └──▶ 査定の担当者へ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | AWS Textract(StartExpenseAnalysis/GetExpenseAnalysis) | Azure AI Document Intelligence、Google Document AI |
| 生成AI | Claude API(行の値の整形、行の種類の仕分け) | OpenAI API |
| 差異計算 | Python(合計・領収書との照合、渡航期間と重複の確認) | 請求の管理システムの照合機能 |
| 連携 | AWS Lambda(登録と完了の通知を起点に処理を動かす) | Amazon EventBridge |
| 保管 | Amazon S3(明細書、読み取り結果、査定の表の下書き) | 請求の管理システムの書類保管 |
請求の管理システムと査定の表は、新しく足すものではありません。 最初の準備は、査定の表に「行の種類(治療/支払・調整)」「記載のコード」「読み取りの信頼度」「印」の列を足すことです。
OCRに AWS Textract を選ぶのは、明細書が英文だからです。 公式の上限の表で、対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語とされ、日本語や中国語は読めず、手書きは英語のみです。アジアの現地語の明細は、Azure AI Document Intelligence か Google Document AI の経路に分けます。
この題材で効くのは、請求書・領収書の解析(AnalyzeExpense)です。 明細の行を LineItemGroups として返し、行ごとに品目(ITEM)、数量(QUANTITY)、単価(UNIT_PRICE)、金額(PRICE)、品番(PRODUCT_CODE)と、行全体(EXPENSE_ROW)が取れます。要約の欄は SummaryFields で、合計(TOTAL)、支払済み額(AMOUNT_PAID)、未払い額(AMOUNT_DUE)、割引(DISCOUNT)、前回の残高(PRIOR_BALANCE)などに名前がそろえられます。病院の明細は書式がばらばらでも、同じ名前で受け取れます。 文書の解析(StartDocumentAnalysis の表の読み取り)で読む案もありますが、通貨の判定と欄の名前のそろえ方をOCRの側に任せられるのがこの方式の利点です。
03どうやって実装するのか
処理の起点を決める
請求の管理システムに明細書が登録されたことを起点にします。 受付の担当者が書類の種類を「明細書」として登録すると、画像が Amazon S3 に保存され、その保存を AWS Lambda が受けます。1日1回の定時実行にはしません。 請求が重なる時期ほど、登録した順に下書きができていくほうが、打ち込みの順番待ちがなくなります。
種類の振り分けを人の受付に残しているのは、明細書と領収書と診断書が1つのPDFにまとめて出されることが多いからです。 振り分けを誤ると、診断書を明細として読もうとします。
Lambda は StartExpenseAnalysis を呼びます。ClientRequestToken に請求番号とファイルのハッシュから作った値を入れると、同じ画像を二度登録しても同じ JobId が返り、二重に読みません。 完了は Amazon SNS に届き、SUCCEEDED を確かめてから GetExpenseAnalysis で結果を取り、すぐ S3 に保存します(JobId は7日間だけ有効です)。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 明細書の画像・PDF | 病院の明細書。請求番号、受け取った日時 | 請求の管理システム(S3) |
| 読み取り結果 | 明細の行、要約の欄、通貨、信頼度 | AWS Textract |
| 請求の情報 | 請求番号、契約者、渡航期間、請求額、治療の開始日 | 請求の管理システム |
| 領収書の金額 | 同じ請求の領収書の金額と通貨(受付で入力済み) | 請求の管理システム |
| 過去の明細 | 同じ契約者・同じ病院の、これまでの請求の明細 | 査定の表の保管 |
| 行の種類の語の一覧 | 支払・調整の行に使われる語(Payment、Adjustment、Write-off など) | 担当者が作る一覧 |
質を決めるのは、渡航期間と過去の明細です。 渡航期間が無ければ日付の確認ができず、過去の明細が無ければ、同じ明細の二重の請求を見つけられません。
行の種類の語の一覧は、運用しながら育てます。 病院ごとに書き方が違うので、担当者が新しい語を見つけたら足します。
データの取得方法を決める
明細書は StartExpenseAnalysis で非同期に読みます。扱える形式は JPEG、PNG、PDF です。 結果は GetExpenseAnalysis で取ります。1回に返る件数は既定で最大20件なので、NextToken が返る限り続けて取ります。状態が PARTIAL_SUCCESS のときは、警告の出たページを記録して人に回します。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 明細の行 | LineItemGroups の LineItems | 行ごとの項目・数量・単価・金額 |
| 行全体の文字 | 行の EXPENSE_ROW | 診療日やコードのように、標準の名前に当たらない列を拾う |
| 要約の欄 | SummaryFields | 合計、支払済み額、未払い額、割引、前回の残高、病院名、患者名 |
| 通貨 | 値の Currency の Code | 行と合計の通貨 |
| 元の見出し | LabelDetection | 「Charges」「Balance Due」など、明細書に書かれた見出しの文字 |
| 書類の数 | ExpenseIndex | 1つのPDFに複数の明細書が入っているかの見分け |
診療日は標準の名前にありません。 公式の説明では、標準の分類に当たらない欄は OTHER になります。診療日の列は行全体(EXPENSE_ROW)の文字から生成AIに切り出させます。
明細の表が複数あるときは、LineItemGroupIndex で分かれて返ります。 入院の明細では、室料、薬剤、検査が別々の表になっていることがあります。どの表の行かを group として残し、表ごとの小計と照らせるようにします。 表をまたいで行を並べ直すと、表の小計との照合ができなくなります。
元の見出し(LabelDetection)を必ず残します。 TOTAL に当たった欄が、明細書では「Total Charges」なのか「Balance Due」なのかで意味が違います。前者は治療の合計、後者は支払・調整を引いた残りです。
AIへ渡す前に整形する
- 形式の確認 … JPEG、PNG、PDF であることを確かめます。TIFF などはPDFに変換します
- パスワードの確認 … パスワードで保護されたPDFは読めません。契約者に保護の無いものを頼みます
- ページの確認 … 「Page 1 of 3」のような表示があれば、ページがそろっているかを見ます
- 文字の大きさの確認 … 文字の高さが15ピクセルを下回ると検出されません。150 DPIで8ポイント相当です。スマートフォンで撮った明細は、文字が小さく写りやすいので、受付の段階で撮り直しを頼みます
- 書類の数の確認 …
ExpenseIndexで複数の明細書が入っていれば、明細書ごとに分けて扱います - 重複の確認 … 同じ請求番号・同じファイルのものが既にあれば止めます
- 患者の確認 … 要約の欄の患者名・受取人名を、請求の被保険者の氏名と照らします。家族の明細が混ざって出されることがあるので、違えばその明細書を止めて受付に戻します
4番目を軽く見ないでください。 明細の金額の列は細かい文字で並んでいます。読めないだけの行が、明細に無い行と同じに見えると、合計が合わない理由が分からなくなります。
AIに処理させる
させるのは、行ごとの値を査定の表の形にそろえ、行の種類を分け、根拠の文字列を添えることだけです。
| 取り出す項目 | 中身 | 取り出せないときの扱い |
|---|---|---|
| 診療日 | 行全体の文字にある日付。書かれている形のまま | 無ければ not_found |
| 項目と記載のコード | 明細の項目名、行に書かれたコード(病院の番号を含む) | 読めなければ unreadable |
| 数量・単価・金額 | 書かれている数字と通貨。マイナスやかっこ書きもそのまま | 読めなければ unreadable |
| 行の種類 | charge(治療)/payment(支払)/adjustment(割引・調整)/balance(残高・繰越) | 決められなければ ambiguous |
| 項目の大まかな区分 | 診察、検査、画像、薬剤、処置・手術、入院・室料、その他 | 決められなければ other |
行の種類の仕分けが、いちばん手間を減らすところです。 「Ins Pmt」「Contractual Adj」のような略語の行を、payment や adjustment に分けます。根拠にした文字を必ず添えさせ、行の種類の語の一覧と照らせるようにします。
| させないこと | 理由 |
|---|---|
| 補償の対象かの判断 | 補償の範囲は契約と約款で決まり、査定の担当者が判断する |
| 治療の妥当性の判断 | 医師の資格を持つ者の仕事 |
| 金額の計算・通貨の換算 | 合計と換算はプログラムが行う。換算の規則は会社が決める |
| 略語の意味の推測による言い換え | 原文を残す。日本語の説明は別の欄に置く |
| 日付の補完 | 日付の無い行に前の行の日付を入れない |
5行目がいちばん起きやすい失敗です。 入院の明細では、日付が日の最初の行にだけ書かれることがあります。AIは前の行の日付で埋めたくなりますが、埋めると、日付の書かれていない行と書かれた行の区別が消えます。 埋めるかどうかは規則の側で決めます。
指示内容を固定する
あなたは保険金の請求の受付で、海外の病院の英文の明細書を
支払査定の表に起こす担当です。
OCRが返した読み取り結果だけを見てください。推測で埋めないでください。
【行ごとに取り出す項目】
1. 診療日(行全体の文字に書かれている日付。書かれている形のまま)
2. 項目名と、行に書かれたコード
3. 数量、単価、金額、通貨(マイナスやかっこ書きもそのまま)
4. 行の種類(charge/payment/adjustment/balance)
5. 項目の大まかな区分(consultation/lab/imaging/drug/procedure/room/other)
【status の選び方】
- ok ......... 値が読み取れており、その欄の値として解釈できる
- not_found .. その行にその値が無い
- unreadable . 文字は検出されているが信頼度が低く、値として確定できない
- ambiguous .. 候補が複数あり、1つに決められない
迷ったときに ok を選ばないでください。
【厳守事項】
- 金額を計算しないでください。合計や差額を書かないでください。
- 通貨を換算しないでください。書かれている通貨のまま写してください。
- 日付の無い行に、前後の行の日付を入れないでください。not_found にしてください。
- 項目名とコードは原文のまま写してください。略語を言い換えないでください。
日本語の説明は note_ja にだけ書いてください。
- 支払・割引・調整・残高の行を charge にしないでください。
見分けた根拠の語を type_evidence に写してください。
- 補償の対象か、治療が妥当かは書かないでください。
- 明細書でない書類(診断書、領収書だけのもの)と判断した場合は、
行を作らず document_type に種類を書いてください。
【読み取り結果(明細の行と要約の欄)】{expense_result}
【支払・調整の行に使われる語の一覧】{type_terms}
「支払・調整の行を charge にしない」を明記しないと、マイナスの金額も治療の行に入ります。 AIは表の行をすべて「明細の行」と見るからです。根拠の語を写させると、担当者が一覧で誤りに気づけます。
「日付を入れない」も同じ理由です。 書かれていない日付を埋めると、渡航期間の確認が、埋めた日付で行われます。
出力形式を固定する
次の形のJSONで受け取ります。 Claude API の構造化出力(output_config.format に json_schema)で形を守らせます。
{
"claim_no": "",
"document_type": "itemized_bill | other",
"provider_name": "",
"patient_name": "",
"currency": "",
"lines": [
{ "row": 1, "group": 0, "service_date": "", "description": "", "code": "",
"quantity": "", "unit_price": "", "amount": "",
"line_type": "charge | payment | adjustment | balance",
"type_evidence": "", "category": "", "status": "ok | not_found | unreadable | ambiguous",
"note_ja": "" }
],
"summary": { "total_label": "", "total": "", "amount_paid": "", "amount_due": "" }
}
1つ目の理由は、合計の照合をプログラムで行えることです。 line_type が charge の行の amount を足し、summary の合計と比べます。total_label を見て、治療の合計と比べるのか、残りと比べるのかを分けます。
2つ目は、査定の表にそのまま流せることです。 行の列が査定の表の列と1対1なので、担当者は打ち込まずに、印の付いた行を直すだけで済みます。
| 照合 | 結果 |
|---|---|
charge の合計が「Total Charges」などの合計に合う | ok。合わなければ請求全体を needs_human |
| 請求額・領収書の金額が、支払・調整を引いた額に合う | ok。合わなければ needs_human |
| 診療日が渡航期間の中 | 外なら、その行に印 |
| 同じ日付・同じ項目・同じ金額の行が過去の請求にある | 重複の疑いとして印 |
unreadable か ambiguous の行がある | その行に印 |
1行目と2行目を分けているのは、合わない理由が違うからです。 1行目が合わなければ読み取りの誤り、2行目だけが合わなければ、明細書の外の事情(別の支払、前回の繰越)があるということです。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 請求の管理システム | 明細書の登録を S3 の保存で検知 | 処理の起点。請求の情報と領収書の金額を引く |
| AWS Textract | API呼び出し(非同期) | 明細の行・要約の欄・通貨を返す |
| Claude API | API呼び出し | 行の値の整形と、行の種類の仕分け |
| 査定の表 | 下書きの書き出し | 人が確定するまで「下書き」の状態で置く |
査定の表には、下書きとして書き出します。 確定は担当者が行い、確定した表だけが査定の担当者に回ります。 支払の処理には一切つなぎません。
人が確認する
担当者が見るのは、下書きの表と明細書の画像を並べた画面です。 印の無い行は流し見て、印の付いた行と合計の照合の結果だけを確かめます。
- 合計が合わない請求を先に見る … 読み取りの誤りか、明細書の外の事情かを画像で確かめます
- 行の種類を確かめる …
payment・adjustmentの行が本当にそうかを、type_evidenceで見ます - 渡航期間外・重複の印を確かめる … 日付の読み違いでないかを画像で見ます
- 表を確定する … 直した行には、直したことを残します
2番目を省かないでください。 支払の行を治療の行に入れたままにすると、現地の保険で支払済みの金額まで保険金として査定に回ります。
目標は、300件をならして1件6分です。 数行の明細は合計の照合を見るだけで終わり、入院の明細は印の付いた行を見ます。6分を超える月は、撮り方の悪い明細が増えているか、行の種類の語の一覧が追いついていません。
入院の明細のように行の多い請求は、合計が合っていれば、印の付いた行だけを見ます。 合計が合っているのに個々の行がずれていることは、行の値を読み違えたうえで合計が偶然合う場合だけで、まれです。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワード付きのPDF | 読めないので、契約者に保護の無いものを頼む |
| 英語以外の明細書 | 読めないので、別の経路(Azure AI Document Intelligence など)に回す |
| 1つのPDFに複数の明細書 | ExpenseIndex で分け、明細書ごとに照合する |
| 明細でない書類が混ざる | document_type が other。受付に戻して振り分け直す |
| 手書きの追記や訂正 | 手書きは英語のみ。金額の訂正は unreadable として人へ |
| 合計の欄が見つからない | 照合できないので、請求全体を needs_human |
| 通貨が行ごとに違う | 換算せずに印を付けて人へ |
| 患者名が被保険者と違う | 家族の明細の可能性。止めて受付に戻す |
| 同じ診療の明細が「Statement」と「Itemized Bill」の2通で出される | 片方だけを読む。両方を読むと同じ行が二重になる。どちらを使うかを受付で決める |
OCRが FAILED を返す | 下書きを作らず、従来どおり担当者が打ち込む |
最後の行は、この構成が止まっても業務が止まらないためのものです。 読み取りに失敗した請求は、従来の打ち込みの手順にそのまま戻します。
記録を残す
- 元の明細書の画像と、受け取った日時・請求番号
- Textract が返したJSONの全文と、
JobId・状態・警告 - 生成AIの出力(
lines、summary) - 照合の結果と、そのとき参照した渡航期間・領収書の金額
- 担当者が直した行と、直す前の値
- 行の種類の語の一覧の版
- 合計の照合が合わなかった請求と、その理由(読み取りの誤り/明細書の外の事情)
5つ目は、読み取りの弱いところを見つけるために残します。 どの病院の、どの列で直しが多いかが分かれば、行の種類の語の一覧や受付での撮り直しの頼み方を直せます。
04実装レベルの3段階
最小構成では件数がさばけません。 月300件には使えず、確かめるための段階です。 半自動化で、1件20分が10分程度になります。 打ち込みはなくなりますが、合計の照合と渡航期間・重複の確認が手で残ります。本格構成で6分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化の下書きを1か月使うと、行の種類の語の一覧に足すべき語と、読み取りの弱い病院の書式が先に分かります。
05工数削減シミュレーション
導入後 300件 × 6分 ÷ 60 = 30 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 海外旅行保険やクレジットカード付帯の保険の保険金の請求を受け付け、契約者が立て替えた治療費の請求で、海外の病院の英文の明細書を毎月数百件受け取っている損害保険会社や保険の請求を受託する会社。明細が数ページにわたり、査定の担当者が1行ずつ査定の表に打ち込んでいる場合。明細の合計と領収書の金額が合わない、同じ明細が2回請求される、といった確認が目視になっている場合。
- 明細書が英語以外(中国語・韓国語・タイ語など)で届く地域の請求が中心の場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めません)。病院と直接精算するキャッシュレスの請求が中心で、明細がデータで届く場合。請求が月に数十件で、目視で足りる場合。なお、保険金を支払うか、どの費用を補償の対象とするか、治療が妥当かの判断は、査定の担当者と医師の資格を持つ者が行うもので、この構成では代替できません。
07最小構成で試す方法
- 先月の請求から15件を選ぶ(入院の長い明細と、支払・調整の行がある明細を必ず混ぜる)
- その15件について、担当者が打ち込んだ査定の表を用意する
- 明細書を手元のAIサービスに1件ずつ渡す
- 「この明細を、診療日・項目・コード・数量・単価・金額・通貨の表にしてください。支払・割引・調整の行は分けてください。日付の無い行に日付を入れないでください。金額を計算しないでください」と指示する
- 出てきた表を、担当者の表と1行ずつ突き合わせる
15件は必ずやってください。 ワークフローを組む前に、「行が欠けずに読めるのか」「支払・調整の行を分けられるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 担当者の表と同じ行がそろった | OCRとワークフローの連携に進む |
| 支払の行を治療に入れた、日付を埋めた | 指示の書き方で直る。構成は有効 |
| 行が欠けた、金額の列がずれた | 画像の質が先。 受付での撮り直しの頼み方を直す |
3行目が出る明細は、スマートフォンで斜めに撮ったものが多いはずです。 受付の案内に「明細書は真上から、1ページずつ撮る」と書き足すだけで変わります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 支払・調整の行が治療の行に入る | 行の種類を分けさせ、根拠の語を写させる |
| 合計の欄の意味を取り違える | 元の見出し(LabelDetection)を残し、治療の合計か残りかを分ける |
| 日付の無い行に日付が入る | 埋めさせない。埋めるかは規則で決める |
| 診療日が取れない | 標準の名前に無い。行全体(EXPENSE_ROW)から切り出す |
| 結果が途中で切れる | GetExpenseAnalysis は1回20件まで。NextToken で続きを取る |
| TIFF の明細が読めない | この方式は JPEG、PNG、PDF。PDFに変換する |
| 斜めに撮った明細で列がずれる | 受付で撮り直しを頼む |
| 通貨を換算してしまう | 換算はプログラムで、会社の規則で行う |
| 現地語の明細が混ざる | 英語以外は別の経路に分ける |
| 表をまたいで行が混ざる | LineItemGroupIndex を残し、表ごとの小計と照らす |
| 家族の明細が混ざる | 患者名を被保険者と照らし、違えば止める |
上の2行が、この構成の失敗のほとんどです。 どちらも「合計が合わない」という同じ見た目で現れます。行の種類と合計の欄の意味を、根拠の文字つきで残しているかどうかで、運用に乗るかが決まります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 契約者の氏名、受けた診療の内容(病名が推測できる検査・薬剤・処置の項目)、日付、病院名、金額です。要配慮個人情報にあたりうる情報として扱います。
- 外部へ渡す範囲を限る … 生成AIに渡すのは明細の行と要約の欄だけです。診断書は渡しません。 氏名は請求番号に置き換えて渡す設計にできます
- 結果は暗号化して保管する … 読み取りの結果は自社の S3 に置き、閲覧できる人を請求の担当者に限ります
- 最小構成でも、使うAIサービスの条件を確かめる … 手元のAIサービスに明細書を渡す前に、入力した情報が学習に使われない設定か、社内の規程で医療の情報を扱えるかを確かめます
- 未成年の契約者の明細も入る … 家族旅行の請求には子どもの明細が含まれます。未成年の利用を禁じる条件のあるサービスは使いません
- この構成は査定を代替しません … 補償の対象か、治療が妥当か、いくら支払うかは、査定の担当者と医師の資格を持つ者が決めることです。 この構成が出すのは、明細に何が書かれているかの表だけです
誤りが起きた場合のリスクは、支払済みの金額まで査定に回すことと、明細の行を落として少なく査定することの2つです。 前者は行の種類を混ぜると起き、後者は読めない行を無いものとして扱うと起きます。どちらも、行の種類と unreadable を表に残すことで防ぎます。 下書きの表を確定するのが人であることは、この2つの誤りを最後に止める網でもあります。
10まず何から始めるか
1週目:査定の表に列を足す
査定の表に、行の種類・記載のコード・読み取りの信頼度・印の列を足します。あわせて、支払・調整の行に使われる語を、過去の明細から30語ほど書き出します。
2週目:15件で試す
先月の請求から15件を選び、手元のAIサービスで表にさせます(社内の規程で扱える環境で行います)。支払の行を治療に入れていないか、日付を埋めていないかを最優先で見ます。
3週目:照合の規則を決める
合計が合わないときの扱い、渡航期間の境目の日の扱い、重複の疑いの基準を、査定の担当者と決めます。 あわせて、受付の案内に撮り方の注意を書き足します。
4週目:登録から下書きまでをつなぐ
明細書の登録を起点に Textract で読み、下書きの表を別の一覧に書き出すところまで作ります。この時点では照合をせず、行が欠けずに読めているかだけを見ます。
2か月目: 合計・領収書の照合と、渡航期間・重複の印を足します。直した行の数を週ごとに数えます。3か月目以降: 1件20分が何分になったかを実測し、担当者が明細を打ち込まずに表を確定できるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 海外で事件・事故に遭った場合、医療費や移送の経費は旅行者自身が用意し負担する必要があること。治療費用の項目の補償が不可欠とされること。重傷の場合の医療費は1名につき数百万円に上る可能性もあること | 外務省 領事サービスセンター: 海外旅行傷害保険への加入(PDF) | 2026-10-08 |
請求書・領収書の解析が、テンプレートなしで多様な書式から項目を取り出すこと。標準の欄の名前(TOTAL、AMOUNT_PAID、AMOUNT_DUE、DISCOUNT、PRIOR_BALANCE、ITEM、QUANTITY、PRICE、UNIT_PRICE、PRODUCT_CODE など)。標準に当たらない欄が OTHER になること。ExpenseIndex、LabelDetection、ValueDetection、Confidence、EXPENSE_ROW を返すこと。通貨のコードが返ること | AWS: Analyzing Invoices and Receipts | 2026-10-08 |
StartExpenseAnalysis が JPEG、PNG、PDF を扱うこと。ClientRequestToken で同じ JobId が返ること、Amazon SNS への完了通知と SUCCEEDED の確認、OutputConfig、KMSKeyId。JobId が7日間だけ有効なこと | AWS: StartExpenseAnalysis | 2026-10-08 |
MaxResults の既定と上限が20で、NextToken で続きを取ること。JobStatus が IN_PROGRESS/SUCCEEDED/FAILED/PARTIAL_SUCCESS であること。LineItemGroups と SummaryFields の構造 | AWS: GetExpenseAnalysis | 2026-10-08 |
| パスワード付きPDFの非対応。対応言語が英・仏・独・伊・葡・西で、手書きは英語のみ、縦書きは非対応。文字の最小の高さが15ピクセル(150 DPIで8ポイント相当) | AWS: Set Quotas in Amazon Textract | 2026-10-08 |
構造化出力を output_config.format に json_schema を指定して受け取れること | Claude Docs: Structured outputs | 2026-10-08 |
保険金を支払うか、どの費用を補償の対象とするか、治療が妥当かの判断は、査定の担当者と医師の資格を持つ者が行うものです。 本記事は外務省と AWS の公開情報で確認できた範囲と、明細書の読み取りと査定の表の下書きまでを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1068)についてのご相談はこちらから。
