保険代理店に届く紙の保険申込書を読み取り、契約者・被保険者・保障内容の項目と記入漏れを確かめて申込データに起こす
募集人が受け取った紙の保険申込書を読み取り、契約者・被保険者・受取人・保障内容・払込方法を契約管理の取込データに起こします。記入漏れ、署名欄の空欄、項目どうしの食い違いは、保険会社へ送る前に募集人へ返します。
- 生成AI
- ChatGPT/Claude
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- 不動産/保険/小売
- 対象部門
- 営業
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 入力作業が多い/期限・対応漏れが起きる/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 店舗の募集人が申込書と意向確認書をスキャンし、共有フォルダに保存する
- 本部の事務担当がスキャンを開き、保険会社と書式の版を確かめる
- 契約者・被保険者・受取人・保障内容・払込方法を、契約管理の仕組みに打ち込む
- 保険会社ごとの必須の欄が埋まっているか、署名と申込日があるかを目で見る
- 足りない欄や食い違いがあれば、募集人にメールで知らせる
- 募集人が顧客に確かめ、申込書を直してもらう
- 直った申込書を保険会社へ送る
- 人店舗の募集人が、告知書を外したうえで申込書と意向確認書をスキャンし、共有フォルダに保存する
- 自動Python のスクリプトが数分おきにフォルダを確かめ、新しいスキャンを処理待ちに回す
- 自動書式の表に沿って、告知の欄が載っている書式ではその領域を塗りつぶしてから送る
- 自動Google Document AI の Form Parser が、欄のキーと値、□の印、各要素の信頼度を返す
- 自動Claude API が、読み取り結果を取込データの項目にそろえ、空欄と読めない欄を分けて写す
- 自動Python が、保険会社ごとの必須の欄の表と項目どうしの照合の規則で、記入漏れ・署名欄の空欄・食い違いを拾う
- 自動申込の進み具合の管理表に「確認待ち」の行を書き込み、印の付いた行にスキャンのリンクを付ける
- 人事務担当が印の付いた行をスキャンと見比べ、募集人に直す箇所を知らせる
- 人印が片づいた申込を、事務担当が契約管理の仕組みに取り込み、保険会社へ送る
各工程の詳しい説明を読む
- 店舗の募集人が申込書と意向確認書をスキャンし、共有フォルダに保存する
- 本部の事務担当がスキャンを開き、保険会社と書式の版を確かめる
- 契約者・被保険者・受取人・保障内容・払込方法を、契約管理の仕組みに打ち込む
- 保険会社ごとの必須の欄が埋まっているか、署名と申込日があるかを目で見る
- 足りない欄や食い違いがあれば、募集人にメールで知らせる
- 募集人が顧客に確かめ、申込書を直してもらう
- 直った申込書を保険会社へ送る
(a)打ち込みに時間を取られる。 1件の申込書には、契約者と被保険者の欄だけで十数項目あります。契約者と被保険者が別の人の申込書では、同じ種類の欄を2回ずつ打ち込みます。
(b)記入漏れに気づくのが、保険会社から返された後になる。 必須の欄は保険会社ごとに違い、事務担当がすべてを覚えているわけではありません。見落とした欄は保険会社の確認で見つかり、申込書が返されます。 そのときには申込から1週間以上たっていることがあり、保険の始まる日に間に合わなくなることもあります。
(c)食い違いを、どちらかに寄せて打ち込んでしまう。 生年月日と年齢、申込書と意向確認書の住所が合わないとき、急いでいるともっともらしい方を打ち込んで先に進めてしまうことがあります。打ち込んだ値が契約管理の仕組みに残り、元の申込書との違いが分からなくなります。
(d)返却のたびに、顧客へ出向き直す。 記入漏れ1つで、募集人は顧客に連絡し、訂正の署名や印をもらいに行きます。顧客から見れば、同じ申込で何度も呼び出されることになります。
- 【人】 店舗の募集人が、告知書を外したうえで申込書と意向確認書をスキャンし、共有フォルダに保存する
- 【自動】 Python のスクリプトが数分おきにフォルダを確かめ、新しいスキャンを処理待ちに回す
- 【自動】 書式の表に沿って、告知の欄が載っている書式ではその領域を塗りつぶしてから送る
- 【自動】 Google Document AI の Form Parser が、欄のキーと値、□の印、各要素の信頼度を返す
- 【自動】 Claude API が、読み取り結果を取込データの項目にそろえ、空欄と読めない欄を分けて写す
- 【自動】 Python が、保険会社ごとの必須の欄の表と項目どうしの照合の規則で、記入漏れ・署名欄の空欄・食い違いを拾う
- 【自動】 申込の進み具合の管理表に「確認待ち」の行を書き込み、印の付いた行にスキャンのリンクを付ける
- 【人】 事務担当が印の付いた行をスキャンと見比べ、募集人に直す箇所を知らせる
- 【人】 印が片づいた申込を、事務担当が契約管理の仕組みに取り込み、保険会社へ送る
8番目が、この設計の分かれ目です。 事務担当が見るのは印の付いた行だけです。印の無い申込は、項目の数と保険会社を流し見て次に進みます。
3番目は、書式によっては欠かせません。 生命保険の申込書には、告知の欄が同じ紙に印刷されている書式があります。スキャンから告知書を外すだけでは足りない書式を、書式の表で見分けます。
02今回想定するシステム構成
紙の申込書と意向確認書(告知書は外してスキャン) │ 店舗の複合機から共有フォルダへ ▼【トリガー】Python のスクリプトの定時実行(数分おき) Python ── 書式の判定、告知の欄の塗りつぶし ▼ Google Document AI(Form Parser) │ 欄のキーと値、□の印、信頼度、位置 ▼ Claude API ── 取込データの項目にそろえ、空欄と読めない欄を分けて写す ▼ Python ── 必須の欄の表と照合の規則で、記入漏れ・署名欄・食い違いを拾う ▼ 申込の進み具合の管理表「確認待ち」(印とスキャンのリンク) ▼ 【事務担当が印の付いた行を確かめ、募集人に知らせる】 ▼ 契約管理の仕組みへ取り込み、保険会社へ送付
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Google Document AI(Form Parser) | Azure AI Document Intelligence |
| 生成AI | Claude API(申込書の欄を取込データの項目にそろえる) | OpenAI API |
| 連携 | Python(フォルダの確認、塗りつぶし、OCRとAIの呼び出し、管理表への書き込み) | Google Apps Script |
| 差異計算 | Python(必須の欄の表と項目どうしの照合) | Google Apps Script |
| 保管 | 代理店のファイルサーバー(スキャンと読み取り結果) | クラウドストレージ |
新しく足すのは、「書式の表」と「必須の欄の表」の2つです。 書式の表には、保険会社・商品・版ごとに、告知の欄が同じ紙にあるか、あるならその位置を書きます。必須の欄の表には、保険会社ごとに埋まっていなければ送れない欄を書きます。どちらも業務課が保険会社の手引きを見て作ります。
土台は Document AI の Form Parser です。 公式のプロセッサ一覧では、OCRのテキストに加えてキーと値のペア、チェックボックス、表を抽出するとされ、言語の一覧で日本語(ja)は手書きに対応する言語として示されています。申込書の「契約者氏名」「生年月日」はキーと値のペアとして、保険の種類や払込方法の□はチェックボックスとして読めます。
Form Parser の注意書きのうち、この題材で効くのは3つです。 1つ目は、値が空のキーと値のペアは確実には読み取れないとされていること。2つ目は、ラジオボタンは読み取れないとされていること。3つ目は、チェックボックスに対応するキーが無いことがあるとされていることです。○で囲む形の選択肢や、項目名から離れた□は、取りこぼす前提で設計します(第7章)。
処理する場所は、リージョンの一覧から選びます。 マルチリージョンの us と eu、シンガポール(asia-southeast1)などの単一リージョンがあり、日本のリージョンはありません。 申込書には顧客の氏名・生年月日・住所が載っています。保険会社との委託契約と代理店の決まりに照らして、国外で処理してよいかを導入前に確かめます(第13章)。
03どうやって実装するのか
処理の起点を決める
Python のスクリプトを、代理店のサーバーで数分おきに動かします。 店舗の複合機は、スキャンした申込書を店舗ごとの共有フォルダに保存します。スクリプトは各フォルダの「受付」を見て、まだ処理の記録が無いファイルを拾います。
処理が終わったスキャンは「処理済み」へ移します。移すのは、管理表への書き込みまで終わったときだけにします。途中で止まったものは次の実行で拾い直され、「受付」に残っている数が、そのまま未処理の数になります。
保険の始まる日が近い申込から先に処理します。 募集人はスキャンのファイル名に保険の始まる日を付ける決まりにし、スクリプトはその順に並べます。始まる日まで数日しかない申込は、記入漏れに気づくのが1日遅れるだけで間に合わなくなるためです。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 申込書と意向確認書のスキャン | 店舗、募集人、スキャンした日時、保険の始まる日 | 店舗ごとの共有フォルダ |
| 読み取り結果 | 欄のキーと値、□の印、各要素の信頼度と位置 | Google Document AI |
| 書式の表 | 保険会社・商品・版、告知の欄の有無と位置、欄の名前の対応 | 新しく作る表 |
| 必須の欄の表 | 保険会社ごとの必須の欄、契約者と被保険者が違うときに要る欄 | 新しく作る表 |
| 募集人の一覧 | 募集人コード、店舗、扱える保険会社 | 代理店の管理表 |
質を決めるのは、書式の表です。 書式の版を取り違えると、告知の欄を塗りつぶさずに送ってしまうことがあります。版の判定は、申込書の隅に印刷された様式の番号で行い、番号が読めない、または表に無い書式は、OCRに送らずに事務担当へ回します。
必須の欄の表は、保険会社の手引きが改まるたびに直します。 表の各行に、根拠にした手引きの版を書いておき、どの版の決まりで記入漏れと判断したかを後から追えるようにします。
データの取得方法を決める
スクリプトは、書式の判定と塗りつぶしが済んだ画像を Form Parser のプロセッサに送ります。オンラインの処理は1回の要求で最大15ページなので、申込書と意向確認書の組は1回で足ります。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 欄の値 | 各ページの formFields(fieldName/fieldValue) | 氏名、生年月日、住所、保険金額、申込日など |
| □の印 | fieldValue の valueType(filled_checkbox/unfilled_checkbox) | 保険の種類、払込方法、性別 |
| 表の中の□ | 表のセルの ✓ と ☐ の文字 | 特約の一覧など表の形の選択肢 |
| 全文 | 応答の text | 欄として取れなかった値を本文から拾う |
| 信頼度と位置 | 各要素の layout の confidence と boundingPoly | 読めない欄の見分けと、確認のときの該当箇所 |
表の中の□は、formFields には出てきません。 公式のページでは、表の中のチェックボックスは✓ と ☐ の文字として表のセルに入るとされています。特約を表の形で選ぶ書式では、表のセルの文字を見ます。
署名の欄は、値ではなく「何かが書かれているか」だけを見ます。 署名の欄の位置を書式の表に持たせ、その位置に文字が検出されているかを boundingPoly で確かめます。誰の署名かをこの構成が判断することはありません。
AIへ渡す前に整形する
- 形式の確認 … 公式の対応形式は PDF、GIF、TIFF、JPEG、PNG、BMP、WebP などです。複合機の保存形式はPDFにそろえます
- 解像度の確認 … 公式のページでは、スキャンは最低200dpiが望ましく、300dpi以上が一般に最もよいとされています。複合機の設定を300dpiにそろえます
- 書式の判定 … 様式の番号を読み、書式の表に無いものは事務担当へ回します
- 告知の欄の塗りつぶし … 書式の表に告知の欄の位置があるものは、その領域を黒く塗った画像を作ってから送ります。元のスキャンは送りません
- 告知書の混入の確認 … 告知書の様式の番号が見つかったページは、処理を止めて事務担当へ回します
- ページの組み合わせ … 申込書と意向確認書が別ファイルで届いたら、ファイル名で1件にまとめます
4番目と5番目が、この構成の前提です。 募集人が告知書を外し忘れても、様式の番号で止まるようにします。 告知書の様式の番号は、書式の表に「送らない書式」として載せておきます。
AIに処理させる
させるのは、読み取り結果を取込データの項目に書かれたとおりに写すことと、書式ごとに違う欄の名前を共通の項目に当てることです。 必須の欄の判定も、項目どうしの照合も、Python の規則で行います。
| させること | 中身 | 判断できないときの扱い |
|---|---|---|
| 人の欄の写し | 契約者・被保険者・受取人の氏名、フリガナ、生年月日、性別、住所、電話、続柄 | 空欄なら blank、読めなければ unreadable |
| 保障の欄の写し | 保険の種類、保険金額、保険期間、特約 | □の印が読み取れなければ unclear |
| 払込の欄の写し | 払込方法、払込経路 | 同上 |
| 欄の名前の対応 | 「ご契約者」「契約者」「保険契約者」などを共通の項目に当てる | 当てられなければ unmapped |
| 署名と申込日の有無 | 欄に何かが書かれているか | 判断できなければ unclear |
| 訂正の跡 | 二重線で消された値と、書き直された値 | 両方を写す |
4行目が、AIを使う理由です。 8社・数十種類の書式で、同じ意味の欄が違う名前で印刷されています。書式ごとに対応の規則を書き続けるより、共通の項目の定義を渡して当てさせるほうが、版が変わったときに崩れにくくなります。
| させないこと | 理由 |
|---|---|
| 食い違う値の片寄せ | どちらが正しいかは顧客に確かめる |
| 生年月日と年齢の計算・補正 | 照合は Python が行う。AIに直させない |
| 空欄の補完 | 契約者の住所を被保険者の欄に写すなどをしない |
| 署名が本人のものかの判断 | 誰の筆跡かは判断しない。有無だけを見る |
| 保障が顧客に合っているかの評価 | 募集人と保険会社の仕事 |
3行目がいちばん起きやすい失敗です。 契約者と被保険者が同じ住所に住んでいそうなとき、被保険者の住所の欄が空なら、契約者の住所で埋めようとします。保険会社が「同上」を認めているかどうかは書式ごとに違い、埋めた瞬間に記入漏れが見えなくなります。
指示内容を固定する
あなたは保険代理店の業務課の担当で、募集人から届いた保険申込書の
読み取り結果を、代理店の取込データの項目に写す立場です。
OCRが返した結果だけを見て、書かれていることを写してください。
推測で埋めないでください。
【写す項目】
人:policyholder(契約者)、insured(被保険者)、beneficiary(受取人)
それぞれ name、kana、birth_date、sex、address、phone、relation
保障:product_type、sum_insured、term、riders
払込:payment_method、payment_route
そのほか:application_date、signature_policyholder、signature_insured
【欄の名前の対応】{field_map}
【厳守事項】
- 値は書かれたとおりの文字列で写してください。
桁を補う、和暦と西暦を直す、表記をそろえる、ということをしないでください。
- 欄が空なら status を blank、文字はあるが読めなければ unreadable に
してください。空欄と読めない欄を混ぜないでください。
- ある人の欄が空でも、別の人の欄の値で埋めないでください。
「同上」と書かれていれば、そのまま「同上」と写してください。
- 生年月日と年齢が合わなくても、どちらかを直さないでください。
- □の印が読み取れない、または複数に印がある場合は unclear にし、
候補をすべて candidates に写してください。
- 署名の欄は、何かが書かれているかだけを present / absent / unclear で
答えてください。誰の署名かは書かないでください。
- 二重線で消された値と書き直された値があれば、両方を写してください。
- 対応の表に無い欄の名前は、unmapped に欄の名前と値をそのまま写してください。
- 申込を受けるべきか、保障が適切かは書かないでください。
- 告知書と判断した場合は、何も写さず document_type を
medical_disclosure にしてください。
【読み取り結果】{ocr_result}
「別の人の欄の値で埋めない」と「同上はそのまま写す」を並べているのは、どちらも保険会社ごとに扱いが違うためです。 「同上」を認める書式と認めない書式があり、判断は必須の欄の表の側で行います。 AIが「同上」を住所に置き換えると、その判断ができなくなります。
最後の指示は、塗りつぶしと様式の番号をすり抜けた告知書への最後の止めです。止まったものは、管理表に書かず事務担当へ回します。
出力形式を固定する
次の形のJSONで受け取ります。 Claude API の構造化出力(output_config.format に JSON スキーマを渡す方式)を使い、形を固定します。
{
"document_type": "application | intention_confirmation | medical_disclosure | other",
"insurer": "", "form_no": "",
"persons": [
{ "role": "policyholder | insured | beneficiary",
"fields": [
{ "item": "name | kana | birth_date | sex | address | phone | relation",
"value": "", "status": "read | blank | unreadable | unclear",
"corrected": false, "previous_value": "" }
] }
],
"coverage": [
{ "item": "product_type | sum_insured | term | riders | payment_method | payment_route | application_date",
"value": "", "status": "read | blank | unreadable | unclear", "candidates": [] }
],
"signatures": { "policyholder": "present | absent | unclear", "insured": "present | absent | unclear" },
"unmapped": [ { "label": "", "value": "" } ]
}
1つ目の理由は、人ごとに欄を持てることです。 契約者・被保険者・受取人が同じ形の要素で並ぶので、契約者と被保険者が同じ人か、別の人かで要る欄を切り替える規則を Python の側で書けます。
2つ目は、記入漏れと食い違いを Python の規則で持てることです。
| 条件 | 扱い |
|---|---|
必須の欄の表にある欄が blank | missing |
契約者と被保険者が違うのに、被保険者の署名が absent | signature_missing |
| 「同上」が、その保険会社で認められていない欄にある | same_as_above |
| 生年月日から計算した年齢が、書かれた年齢と合わない | age_mismatch |
| 申込書と意向確認書で、氏名・住所・保険の種類が違う | cross_doc_mismatch |
| 保険の始まる日が申込日より前 | date_order |
欄が unreadable または unclear | check_image |
unmapped がある | check_form(書式の表を直す) |
check_image は、募集人に知らせる前に事務担当が片づけます。 読めない欄の多くは、スキャンを拡大すれば読めます。読めないものだけを、原本の郵送を待って確かめます。
公式のページでは、列挙の値の大文字・小文字までは保証されないとされているので、status などは Python で小文字にそろえてから使います。stop_reason が max_tokens のときは出力が途中で切れているので、切れたら管理表に書かずに呼び直します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 店舗ごとの共有フォルダ | Python のスクリプト | 新しいスキャンを拾い、処理済みへ移す |
| Google Document AI | REST API の呼び出し | 欄、□の印、信頼度、位置を返す |
| Claude API | REST API の呼び出し | 申込書の欄を取込データの項目に写す |
| 書式の表・必須の欄の表 | 表の読み取り | 告知の欄の位置、欄の名前の対応、必須の欄を引く |
| 申込の進み具合の管理表 | 「確認待ち」への書き込み | 写した値、印、スキャンのリンク |
| 契約管理の仕組み | 事務担当が書き出したCSVの取り込み | 印が片づいた申込だけ |
契約管理の仕組みには、この構成から直接書き込みません。 取込用のCSVを書き出すのは事務担当の操作で、missing や signature_missing が残っている申込は書き出せないようにします。
保険会社への送付も、この構成からは行いません。 保険会社へ送るのは、事務担当が原本とスキャンを確かめた申込だけです。募集人への知らせも、事務担当が中身を見てから送ります。
人が確認する
事務担当が見るのは、印の付いた行のある申込だけです。 印の無い申込は、保険会社と項目の数を流し見て、確定の列に印を付けます。
check_formを先に見る … 欄の名前が当たらない書式は、ほかの印が当てになりません。書式の表を直して読み直しますcheck_imageを見る … スキャンの該当箇所を拡大して確かめます。読めないものは推測せず、原本を待ちますmissing・signature_missing・same_as_aboveを確かめる … スキャンで、本当に空いているかを目で見ますage_mismatch・cross_doc_mismatch・date_orderを確かめる … どちらの値が書かれているかを見て、どちらが正しいかは決めずに募集人に知らせます- 募集人に知らせる … 申込ごとに直す箇所をまとめ、保険の始まる日が近い順に送ります
- 取込用のCSVを書き出す … 印が片づいた申込だけを書き出し、契約管理の仕組みに取り込みます
目標は、600件をならして1件3分です。 印の無い申込は流し見で数十秒、印の付いた申込はスキャンとの見比べと募集人への知らせで数分かかります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 告知書がスキャンに混ざる | 様式の番号で止め、OCRに送らない。止まらなければAIが medical_disclosure を返す |
| 様式の番号が読めない、表に無い | OCRに送らずに事務担当へ。書式の表に足してから読む |
| ○で囲む選択肢、キーの無い□ | unclear。担当がスキャンで確かめ、書式の表に位置を足す |
| 欄の名前が対応の表に無い | unmapped と check_form。書式の表を直す |
| 訂正の跡がある | 両方の値を写し、訂正の仕方が保険会社の決まりに合うかを担当が見る |
| 申込書と意向確認書が組にならない | ファイル名で組めなければ、担当が組み合わせる |
| 同じ申込が2回届く | 契約者・保険の種類・申込日で重複の印を付け、担当が確かめる |
| OCR・AIが応答しない | 「受付」に残す。次の実行で拾い直す |
1行目は、この構成の前提が崩れる場面です。 告知書が混ざったことが分かったら、その店舗の募集人とスキャンの手順を確かめ直します。
記録を残す
- 元のスキャンと、塗りつぶし後に送った画像、店舗・募集人・スキャンした日時
- OCRが返したJSONの全文と、Claude API の応答の全文
- そのとき使った書式の表と必須の欄の表の版
- 付いた印と、事務担当が確かめた結果、募集人に知らせた日時、直った日時
- 取込用のCSVを書き出した日時と担当、保険会社へ送った日
- 告知書の混入で止まった件数と店舗
最後の行は、告知書を仕組みに入れないという前提が守られているかを見るためのものです。 件数が0でない店舗は、スキャンの手順を見直します。
04実装レベルの3段階
最小構成は確かめるための段階です。 1件ずつ貼り付けるので、月600件には使えません。 半自動化で、1件10分が6分程度になります。 打ち込みは無くなりますが、保険会社ごとの必須の欄を目で確かめる作業は残ります。 本格構成で3分になり、この段階が本記事の想定です。 差が大きいのは、必須の欄の確かめが規則に移り、人が見るのが印の付いた行だけになるためです。
05工数削減シミュレーション
導入後 600件 × 3分 ÷ 60 = 30 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 複数の保険会社の商品を扱う乗合の保険代理店や、不動産会社・自動車販売店など本業の窓口で保険を募集する代理店で、紙の申込書がいまも月に数百件あり、本部の事務担当が1件ずつ見ながら契約管理の仕組みに打ち込んでいる場合。保険会社から記入漏れで申込書を返されることがあり、そのたびに顧客へ出向き直している場合。
- 申込の大半を保険会社のタブレットの申込手続や Web の申込で受けており、紙の申込書がほとんど無い場合。月に数十件で、事務担当が目で見て足りる場合。保険会社との委託契約や代理店の決まりで、申込書の画像を国外のリージョンで処理することが認められない場合。なお、引受けの可否、告知の内容の評価、顧客の意向に合った商品かどうかの判断は、保険会社と募集人が行うことで、この構成では代替できません。
07最小構成で試す方法
- 先月の申込書から30件を選ぶ(保険会社から返された申込、契約者と被保険者が違う申込、訂正の跡がある申込を必ず入れる)
- 告知書と、告知の欄のある書式は外す
- その30件について、契約管理の仕組みに打ち込んだ値と、返された理由の記録を用意する
- 申込書のスキャンを手元のAIサービスの画面に1件ずつ貼り付け、「契約者・被保険者・受取人・保険の種類・保険金額・払込方法・申込日を、書かれたとおりに写してください。空欄は『空欄』、読めない欄は『読めない』とし、別の人の欄で埋めないでください。署名は有無だけを答えてください」と指示する
- 写された値を当時の値と比べ、返された理由の欄が空欄として出ているかを見る
| 出てきた内容 | 判断 |
|---|---|
| 当時の値と同じ値が写せ、返された理由の欄も空欄として出た | OCRと Python の連携に進む |
| 被保険者の住所を契約者の住所で埋めた | 指示の書き方で直る。構成は有効 |
| □の印を取りこぼす | ○で囲む書式か、キーの無い□か。書式の表に位置を持たせる |
| 読めない欄が多い | 複合機の解像度が先。 AIの問題ではない |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 告知書がスキャンに混ざる | 様式の番号で止め、AIでも止める。 二重の止めにする |
| 告知の欄が同じ紙にある書式を見落とす | 書式の表に告知の欄の位置を持たせ、塗りつぶしてから送る |
| 被保険者の空欄を契約者の値でAIが埋める | 別の人の欄で埋めないことを指示に書く |
| 生年月日と年齢をAIが合わせてしまう | 照合は Python。AIには計算させない |
| ○で囲む選択肢を読み取れない | ラジオボタンは対象外。書式の表に位置を持たせて人へ |
| キーの無い□を取りこぼす | unclear で人へ。書式の表に位置を足す |
表の中の特約の□が formFields に無い | 表のセルの ✓ と ☐ を見る |
| 書式の版が変わって欄の名前が当たらない | unmapped と check_form で書式の表を直す |
| 必須の欄の表が古い | 根拠にした手引きの版を表の各行に書く |
| 国外での処理を確かめていない | 日本のリージョンが無い。保険会社との委託契約を先に確かめる |
上の2行が、この構成で最初に固めるところです。 読み取りの精度より先に、告知の情報が外へ出ない仕組みを作ります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 契約者・被保険者・受取人の氏名、生年月日、住所、電話番号、続柄、保険の種類と保険金額、払込経路です。告知書の病歴や通院の状況は扱いません。
- 機微(センシティブ)情報を仕組みに入れない … 個人情報保護委員会のFAQでは、金融分野のガイドラインが要配慮個人情報や保健医療に関する情報などを機微(センシティブ)情報とし、その取得・利用・第三者提供を原則として禁じたうえで、適切な業務運営、本人の同意、業務遂行上必要な範囲を要件とする例外を示しています。代理店の事務の効率のために外部のOCRや生成AIへ渡すことは、この構成では行いません
- 国外で処理することを確かめる … Document AI のリージョンの一覧に日本はありません。保険会社との委託契約と代理店の決まりで、申込書の画像を国外のリージョンで処理してよいかを確かめます
- 外部へ渡す範囲を絞る … AIに渡すのは申込書の読み取り結果と欄の名前の対応だけです。契約管理の仕組みの既存の契約や、ほかの顧客の情報は渡しません
- 契約の記録に自動で書き込まない … 取込用のCSVを書き出すのは事務担当の操作だけです
- 食い違いを直さない … どちらの値が正しいかは、募集人が顧客に確かめます。この構成は食い違いがあるという事実だけを出します
- 元の申込書を残す … 保険会社とのやり取りで拠り所になるのは原本です。AIの写しは原本の代わりにしません
誤りが起きた場合のリスクは、告知の情報が外部へ出ることと、誤った値で申込が保険会社へ送られることの2つです。 前者は書式の表の誤りで起き、後者は食い違いを片寄せすると起きます。
10まず何から始めるか
1週目:書式の表を作る
8社の申込書の書式を集め、様式の番号、告知の欄があるか、あるならその位置を表にします。告知書の様式の番号は「送らない書式」として載せます。
2週目:30件で試す
告知書と告知の欄のある書式を外した30件を、手元のAIサービスに貼り付けて欄を写させます。別の人の欄で埋めていないか、□の印を取りこぼしていないかを最優先で見ます。
3週目:保険会社との確かめ
申込書の画像を外部のサービスで、国外のリージョンで処理してよいかを、保険会社との委託契約と代理店の決まりで確かめます。 あわせて、保険会社ごとの必須の欄の表を手引きから作ります。
4週目:フォルダから確認待ちまでをつなぐ
Python で共有フォルダを確かめ、塗りつぶしとOCRとAIを通し、写した値を確認待ちに書き出すところまで作ります。この時点では印を出さず、事務担当がこれまでどおり打ち込みながら、写した値が合っているかを見ます。
2か月目: 必須の欄の表と照合の規則を足し、印の付いた行だけを見る運用を始めます。3か月目以降: 1件10分が何分になったかと、保険会社から返される件数を実測します。返される件数が目に見えて減り、告知書の混入で止まる件数が0の月が続いた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
Form Parser がOCRのテキストに加えてキーと値のペア、チェックボックス、表を抽出すること。Form Parser の言語の一覧で日本語(ja)が手書きに対応する言語として示されていること(ページの原文を取得して確認)。オンラインの処理が1回の要求で最大15ページであること | Google Cloud: Processor list | 2026-10-08 |
| 値の入っていないキーと値の組を確実には読み取れないこと。ラジオボタンを読み取れないこと。チェックボックスに対応するキーが無いことがあること | Google Cloud: Form Parser | 2026-10-08 |
項目名と値の組が formFields の fieldName/fieldValue で返ること。チェックボックスの valueType が filled_checkbox/unfilled_checkbox であること。表の中のチェックボックスが ✓ と ☐ の文字で表されること。信頼度と位置が各要素の layout に入ること | Google Cloud: Handle the processing response | 2026-10-08 |
| 対応形式が PDF、GIF、TIFF、JPEG、PNG、BMP、WebP などであること。スキャンは最低200dpiが望ましく300dpi以上が一般に最もよいこと | Google Cloud: Supported files | 2026-10-08 |
マルチリージョンが us と eu で、単一リージョンにシンガポール(asia-southeast1)などがあり、日本のリージョンが一覧に無いこと | Google Cloud: Regional and multi-regional support | 2026-10-08 |
output_config.format に JSON スキーマを渡して応答の形を固定できること。列挙の値の大文字・小文字は保証されないこと。max_tokens で打ち切られたときはスキーマに合わない出力になりうること | Claude API: Structured outputs | 2026-10-08 |
| 金融分野ガイドライン第5条第1項が、要配慮個人情報や保健医療に関する情報などを機微(センシティブ)情報とし、その取得・利用・第三者提供を原則として禁じていること。第8号の例外が、適切な業務運営・本人の同意・業務遂行上必要な範囲を要件とすること(ページの原文を取得して確認) | 個人情報保護委員会: FAQ Q3-1 | 2026-10-08 |
告知書の扱い、申込書を外部のサービスで処理してよいか、記入漏れの訂正の仕方は、保険会社との委託契約と各社の手引きに沿って決めてください。 本記事は各製品と個人情報保護委員会の公式ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1134)についてのご相談はこちらから。
