外国人の入居希望者から届く英文の在職証明書・給与明細・残高証明書を読み取り、入居審査シートへ転記して申込書との食い違いを拾う
外国人の入居希望者から届く英文の在職証明書・給与明細・残高証明書を読み取り、勤務先・収入・在籍期間を入居審査シートに転記します。あわせて、申込書に書かれた内容と食い違う箇所に印を付け、営業担当が確かめる点だけを残します。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- 不動産/人材/金融
- 対象部門
- 営業
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 入力作業が多い/判断に時間がかかる/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- Webフォームの申込を受け、添付された書類をフォルダに保存する
- 書類を1点ずつ開き、勤務先名、役職、入社日、雇用形態、給与の額と期間、通貨を探す
- 見つけた値を入居審査シートに日本語で写す。年額か月額かを判断し、円に換算する
- 申込書の勤務先名・年収・勤続年数と見比べ、食い違いをメモする
- 書類の日付を見て、古すぎるものがないかを確かめる
- 食い違いや不足があれば、申込者に英文で問い合わせる
- そろったら保証会社の画面に入力し、貸主へ回す
- 人Webフォームの申込を受け、添付された書類が受付フォルダに入る
- 自動保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 自動OCRが書類を読み、キーと値、表、質問への答え、信頼度を返す
- 自動読み取り結果から書類の種類を分け、審査シートの項目にそろえる
- 自動日付と金額は、読んだ文字列と解釈した値を分けて持つ。解釈できないものは `ambiguous` にする
- 自動社内の換算表で円に換算し、申込書の値と比べて食い違いに印を付ける
- 自動書類の日付が社内の基準より古いもの、書類が足りないものを拾う
- 自動申込者への問い合わせ文の下書きを英文で作る
- 人営業担当が、印の付いた項目だけを書類の画像と見比べて確かめる
- 人問い合わせ文を直して申込者へ送り、そろったものを保証会社へ回す
各工程の詳しい説明を読む
- Webフォームの申込を受け、添付された書類をフォルダに保存する
- 書類を1点ずつ開き、勤務先名、役職、入社日、雇用形態、給与の額と期間、通貨を探す
- 見つけた値を入居審査シートに日本語で写す。年額か月額かを判断し、円に換算する
- 申込書の勤務先名・年収・勤続年数と見比べ、食い違いをメモする
- 書類の日付を見て、古すぎるものがないかを確かめる
- 食い違いや不足があれば、申込者に英文で問い合わせる
- そろったら保証会社の画面に入力し、貸主へ回す
(a)項目を探すところから始まる。 在職証明書には決まった書式がありません。年収が本文の3段落目に書かれている会社もあれば、表になっている会社もあります。1点ごとに「どこに書いてあるか」を探すところから始まり、それが1件で3〜5点あります。
(b)日付と通貨を読み違える。 英国や欧州の書類は日・月・年、米国の書類は月・日・年の順で書くことが多く、03/04/2025 のような日付はどちらにも読めます。給与明細の Net Pay 4,250.00 に通貨記号が無いこともあります。勤続年数や年収は、読み方を1つ間違えるだけで別の値になります。
(c)食い違いが審査に回したあとで見つかる。 申込書に「年収850万円」、在職証明書に「USD 85,000 per annum」。換算すれば近いのか、別物なのかを確かめずに保証会社へ回すと、差し戻されてから申込者に問い合わせることになり、内見から契約までの日数が延びます。 その間に別の申込が入ることもあります。
(d)英文に慣れた担当者に偏る。 5名のうち英文の書類を速く読めるのは2名で、繁忙期はその2名の手が空くまで審査に回せません。
- 【人】 Webフォームの申込を受け、添付された書類が受付フォルダに入る
- 【自動】 保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 【自動】 OCRが書類を読み、キーと値、表、質問への答え、信頼度を返す
- 【自動】 読み取り結果から書類の種類を分け、審査シートの項目にそろえる
- 【自動】 日付と金額は、読んだ文字列と解釈した値を分けて持つ。解釈できないものは
ambiguousにする - 【自動】 社内の換算表で円に換算し、申込書の値と比べて食い違いに印を付ける
- 【自動】 書類の日付が社内の基準より古いもの、書類が足りないものを拾う
- 【自動】 申込者への問い合わせ文の下書きを英文で作る
- 【人】 営業担当が、印の付いた項目だけを書類の画像と見比べて確かめる
- 【人】 問い合わせ文を直して申込者へ送り、そろったものを保証会社へ回す
9番目が、この設計の分かれ目です。 営業担当は審査シートを一から作るのではなく、食い違いと ambiguous の付いた項目だけを、書類の該当箇所と見比べます。 印の無い項目は、根拠の文字列と並べて流し見ます。
6番目の換算と比較をAIにさせないのも、意図してのことです。 換算の率と差の許容範囲は社内で決める値で、後から変わります。
02今回想定するシステム構成
入居希望者の英文の書類(在職証明書・給与明細・残高証明書・内定通知書) ▼【トリガー】受付フォルダ(Amazon S3)への保存 AWS Lambda ── 形式・ページ数・サイズ・パスワードの確認 ▼ AWS Textract(StartDocumentAnalysis:FORMS/TABLES/QUERIES) │ キーと値、給与明細の表、質問への答え、信頼度 ▼ Claude API ── 書類の種類を分け、審査シートの項目にそろえる │ ① 勤務先と役職 ② 入社日と雇用形態 ③ 給与の額・期間・通貨 ④ 残高と基準日 ▼ Python ── 換算表で円に換算し、申込書の値と比べる ▼ 判定(match / mismatch / ambiguous / missing_doc / stale_doc) ▼ 【営業担当が印の付いた項目を確認】 ├──▶ 申込者への問い合わせ(英文の下書き、営業が送る) └──▶ 入居審査シートへ確定 → 保証会社へ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | AWS Textract(StartDocumentAnalysis/GetDocumentAnalysis) | Azure AI Document Intelligence、Google Document AI |
| 生成AI | Claude API(書類の種類の判別、項目の整形、問い合わせ文の下書き) | OpenAI API、Gemini API |
| 差異計算 | Python(円への換算、申込書との比較、書類の日付の確認) | 審査シートの関数 |
| 連携 | AWS Lambda(保存と完了の通知を起点に処理を動かす) | Amazon EventBridge |
| 保管 | Amazon S3(書類、読み取り結果、比較の結果) | 社内のファイルサーバー |
入居審査シートとWebフォームは既存のものです。 準備は、審査シートに「書類から読んだ文字列」の列を足すことと、換算表と書類の日付の基準を決めることです。
OCRに AWS Textract を選ぶのは、書類が英文だからです。 公式の上限の表で、対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語とされ、日本語は読めません。 手書きの文字が読めるのも英語だけです。在職証明書の末尾に手書きで署名と日付が入っている場合も、英語なら読めます。
使う機能は、文書の分析の非同期版 StartDocumentAnalysis です。 FeatureTypes に FORMS を入れると Employee Name: ... のようなキーと値の組が、TABLES を入れると給与明細の支給と控除の表がセルごとに、QUERIES を入れると What is the annual salary? のような質問への答えが返ります。在職証明書は手紙の形で書かれていてキーと値になっていないことが多いので、質問で取りにいくのがこの構成の要です。
質問は英語の文書でしか使えません。 公式の上限の表に、質問の検出は英語の文書だけとあります。フランス語やスペイン語の書類では質問を外し、キーと値と表と全文で読みます。 書類の言語は申込時に申込者に選んでもらい、呼び出しの設定を切り替えます。
同期の処理はPDF1ページまでなので、非同期で読みます。
03どうやって実装するのか
処理の起点を決める
受付フォルダ(Amazon S3)に書類が保存されたことを起点にします。 Webフォームの申込が送信されると、添付ファイルが申込番号の名前のフォルダに入り、その保存の通知で AWS Lambda が動きます。
1日1回の定時実行にはしません。 同じ部屋に別の申込が入る前に審査へ回せるかどうかが、そのまま成約に響くからです。
書類は後から足されることがあります。 申込番号のフォルダに書類が足されるたびに、その申込の判定をやり直し、前の判定は版として残します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 英文の書類 | 在職証明書、給与明細、残高証明書、内定通知書。PDFまたは写真 | 受付フォルダ(Amazon S3) |
| 読み取り結果 | キーと値、表とセル、質問への答え、全文、それぞれの信頼度 | AWS Textract |
| 入居申込書の値 | 申込者の氏名、勤務先名、年収、勤続年数、雇用形態、入居予定日、書類の言語 | Webフォームのデータ |
| 社内の基準 | 通貨の換算表と適用日、書類の日付の基準(発行から何か月以内か)、必要な書類の組み合わせ | 自社で用意する表 |
質を決めるのは、いちばん下の行です。 基準が無いと、同じ書類が担当者によって食い違いになったり、ならなかったりします。
データの取得方法を決める
読み取りは、StartDocumentAnalysis にS3の場所と FeatureTypes を渡して始めます。完了は NotificationChannel に指定した Amazon SNS のトピックに通知され、状態が SUCCEEDED なら GetDocumentAnalysis で結果を取ります。
| 指定するもの | 値 | 理由 |
|---|---|---|
FeatureTypes | FORMS、TABLES、QUERIES(英語のとき) | キーと値、給与明細の表、手紙の形の在職証明書 |
QueriesConfig | 質問の文と Alias の組 | 答えを審査シートの項目名で受け取る |
ClientRequestToken | 申込番号とファイルのハッシュ | 同じ書類で二重に読み取りを始めない |
JobTag | 申込番号 | 完了の通知から申込を引く |
KMSKeyId | 自社の鍵 | 読み取り結果を自社の鍵で暗号化する |
質問は非同期で1ページ30件まで使えますが、在職証明書には次の9件で足ります。
Alias | 質問の文 |
|---|---|
EMPLOYEE_NAME | What is the employee's full name? |
EMPLOYER_NAME | What is the name of the employer? |
JOB_TITLE | What is the employee's job title? |
START_DATE | What is the employee's start date? |
EMPLOYMENT_TYPE | Is the employment permanent, fixed-term, or contract? |
SALARY_AMOUNT | What is the employee's salary? |
SALARY_PERIOD | Is the salary annual, monthly, or hourly? |
LETTER_DATE | What is the date of this letter? |
SIGNATORY | Who signed this letter? |
答えが見つからないとき、その答えは空のまま返ります。 公式の説明でも、答えが見つからなければ応答の要素は空のまま残るとされています。空の答えを「書かれていない」と扱い、別の項目から埋めません。
結果は1回最大1,000ブロックで区切られます。 NextToken が返る限り呼び直し、後半のページが抜けないようにします。
AIへ渡す前に整形する
- 形式の確認 … JPEG、PNG、PDF、TIFF であることを確かめます。HEIC の写真は JPEG に変換します
- パスワードの確認 … PDFはパスワードで保護されていてはいけないとされています。銀行の残高証明書は保護されて届くことが多く、申込者に解除したものを出し直してもらいます
- サイズとページ数の確認 … 非同期の処理で、PDFとTIFFは500MB・3,000ページ、JPEGとPNGは10MBまでです
- 写真の向きと解像度の確認 … 文字の高さは最小15ピクセルで、150 DPIで8ポイントの文字に相当します。机の上で斜めに撮った給与明細は、小さい数字から読めなくなります
- 1ファイルに複数の書類がないかの確認 … 在職証明書と給与明細が1つのPDFにまとまっていれば、ページごとに種類を分けてから扱います
- 個人の番号の伏せ字 … 口座番号、社会保障番号などの国民識別番号、従業員番号は、生成AIへ渡す前に下4桁以外を伏せます
2番目がいちばん多い差し戻しの理由になります。 受付画面で「パスワードの付いたPDFは読めません」と最初から案内しておくと、出し直しの往復が1回減ります。
AIに処理させる
させるのは、読み取り結果を書類の種類ごとに審査シートの項目へそろえ、日付と金額を「読んだ文字列」と「解釈した値」に分けて書き出すことです。 比較と判定はさせません。
| 書類 | 取り出す項目 | 判断できないときの扱い |
|---|---|---|
| 在職証明書 | 氏名、勤務先、役職、入社日、雇用形態、給与の額と期間と通貨、書類の日付、署名者 | 給与の期間が書かれていなければ period: unknown |
| 給与明細 | 氏名、勤務先、支給の対象期間、総支給額、手取り額、通貨 | 総支給と手取りの区別がつかなければ ambiguous |
| 残高証明書 | 名義、銀行名、残高、基準日、通貨 | 複数の口座があれば口座ごとに並べる |
| 内定通知書 | 氏名、勤務先、入社予定日、提示された給与 | 入社予定日が先なら future_start |
日付は、読んだ文字列をそのまま残し、解釈は次の場合だけ行います。 月の名前が書かれている(4 March 2025)、年・月・日の順の数字(2025-03-04)、日か月のどちらかが13以上で順序が決まる(25/03/2025)。それ以外の 03/04/2025 は ambiguous とし、どちらの日付も入れません。 勤務先の国から順序を推し量ることもさせません。
金額も同じです。 85,000 に通貨記号も通貨の略称も無ければ通貨は unknown、per annum や monthly の記載が無ければ期間は unknown にします。年額か月額かを、金額の大きさから推し量らせません。
| させないこと | 理由 |
|---|---|
| 入居の可否、収入が足りるかの評価 | 審査は保証会社と貸主が行う |
| 円への換算、年額への換算 | 換算の率と方法は社内の表で決める。Python が行う |
| 申込書との比較の結論 | 差の許容範囲は社内の基準。Python が行う |
| 曖昧な日付の順序の推定 | 在籍期間が1年ずれる |
| 国籍、出身国、在留資格に関する評価 | 判定の材料にしない |
| 書かれていない項目の補完 | 給与明細から年収を逆算して在職証明書の欄を埋めない |
いちばん起きやすい失敗は最後の行です。 給与明細の月額を12倍して在職証明書の年収欄を埋めると、「年収が書かれていない」という確認点が消えます。
指示内容を固定する
あなたは賃貸の申込受付で、入居希望者が提出した英文の書類を
入居審査シートの項目にそろえる担当です。
OCRの読み取り結果だけを使ってください。推測で埋めないでください。
【書類の種類】
employment_letter / payslip / bank_statement / offer_letter / other
のどれか1つを document_type に入れてください。
【取り出す項目】
書類の種類ごとに、指定の項目を fields に入れてください。
各項目には raw(読んだ文字列そのまま)、value(解釈した値)、
status、source(読み取り結果のどこから取ったか)を入れます。
【status の選び方】
- ok ......... 値が読み取れ、その項目として解釈できる
- missing .... 書類に書かれていない。質問の答えが空の場合も missing
- ambiguous .. 読み方が複数あり、1つに決められない
- unreadable . 文字は検出されているが信頼度が低く、確定できない
迷ったときに ok を選ばないでください。
【日付の扱い】
- raw には書類の文字列をそのまま入れてください。
- 月の名前がある、年・月・日の順である、日または月の一方が13以上で
順序が決まる、のどれかのときだけ value に YYYY-MM-DD を入れてください。
- それ以外(例:03/04/2025)は status を ambiguous とし、value は空にしてください。
勤務先の国や書類の書式から順序を推し量らないでください。
【金額の扱い】
- 通貨記号または通貨の略称が書かれていなければ currency は unknown です。
- annual / per annum / monthly / per month などの記載が無ければ
period は unknown です。金額の大きさから年額か月額かを決めないでください。
- 換算や合計の計算をしないでください。
- 総支給(gross)と手取り(net)を取り違えないでください。
区別が書かれていなければ ambiguous にしてください。
【厳守事項】
- 書かれていない項目を、別の書類の値や計算で埋めないでください。
- 入居の可否、収入が足りるかどうか、申込書と合っているかを書かないでください。
- 国籍、出身国、在留資格について、評価や推測を書かないでください。
- 伏せ字(****)になっている番号を復元しないでください。
- 英文の書類でないと判断した場合は document_type を other とし、
項目を取り出さないでください。
- inquiry_draft には、missing と ambiguous の項目について
申込者に確かめる英文の文案を、丁寧な表現で書いてください。
審査の結果や見込みには触れないでください。
【読み取り結果】{textract_result}
【申込番号】{application_id}
「金額の大きさから年額か月額かを決めない」を明記しないと、もっともらしく決めます。 85,000 を見れば年額と書き、7,000 を見れば月額と書きます。多くの場合は当たりますが、当たらなかった1件が年収を12倍にします。 禁じるのは、推し量ること自体です。
「審査の結果や見込みに触れない」は、下書きがそのまま送られる場面への備えです。
出力形式を固定する
Claude API の構造化出力(output_config.format に json_schema を指定)で、次の形のJSONを受け取ります。
{
"application_id": "",
"documents": [
{
"file": "",
"document_type": "employment_letter | payslip | bank_statement | offer_letter | other",
"fields": [
{ "name": "start_date", "raw": "03/04/2021", "value": "",
"status": "ok | missing | ambiguous | unreadable",
"source": "QUERY:START_DATE", "confidence": 0 }
],
"salary": { "raw": "", "amount": "", "currency": "", "period": "annual | monthly | hourly | unknown" }
}
],
"inquiry_draft": ""
}
1つ目の理由は、raw と value を分けて持てることです。 営業担当が確かめるとき、value が空で raw に 03/04/2021 とあれば、何が曖昧なのかが画像を開く前に分かります。 申込者への問い合わせも、その文字列を引用して書けます。
2つ目は、比較を Python の側に置けることです。 AIが返すのは項目の値までで、比較の結果はこのJSONに入れません。Python が換算表と申込書の値を使って、項目ごとに次の印を付けます。
| 印 | 付ける条件(社内の基準の例) |
|---|---|
match | 勤務先名が一致、年収の差が基準内、入社日から計算した勤続年数が申込書と一致 |
mismatch | 上記のどれかが基準を外れる |
ambiguous | 日付の順序、通貨、年額か月額かが決まらず、比較できない |
missing_doc | 必要な書類の組み合わせがそろっていない |
stale_doc | 書類の日付が社内の基準より古い |
勤務先名の比較は、表記ゆれの一覧を通してから行います。 Ltd. と Limited、K.K. と 株式会社、日本法人と本国の親会社。一覧に無い組み合わせは mismatch にして人に見せ、確かめたら一覧に足します。
3つ目は、source で根拠をたどれることです。 QUERY:START_DATE なら質問への答え、FORMS:Date of Joining ならキーと値から取った値です。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ(Amazon S3) | 保存の通知 | 書類の保存を検知して AWS Lambda を動かす |
| AWS Textract | API呼び出し(非同期) | 読み取りを始め、完了の通知で結果を取る |
| Claude API | API呼び出し | 書類の種類の判別、項目の整形、問い合わせ文の下書き |
| Webフォームのデータ | 読み取り | 申込書の値を引く |
| 入居審査シート | 書き込み(下書きの列) | 読んだ文字列、解釈した値、印を書く |
| 保証会社の画面 | 既存の手入力 | 営業担当が確定した値を入力する |
審査シートには「下書き」の列にだけ書き込みます。 確定の列は、営業担当が確認して写すか、確認済みの印を付けたときに埋まるようにします。読み取りの結果が、確認を経ずに保証会社へ流れる経路を作りません。
人が確認する
営業担当が開くのは、mismatch、ambiguous、missing_doc、stale_doc の付いた項目です。 match の項目は、根拠の文字列と並べた一覧で流し見ます。
ambiguousを先に片付ける … 日付の順序や通貨が決まらないものは、書類の他の箇所(レターヘッドの住所、別の日付の書き方)で決まることが多いです。決まらなければ申込者に確かめますmismatchの根拠を確かめる … 画像の該当箇所を見て、読み取りの誤りか、申込書の書き間違いか、本当の食い違いかを分けます- 申込者へ問い合わせる … 下書きを直して送ります。送信は営業担当が行います
- 判定を覆したら記録する … どの項目を、どちらに変えたか。勤務先の表記ゆれなら一覧に足します
目標は、160件をならして1件12分です。 印の付く項目が1件に2〜3個という想定で、それより多い月は、換算表か表記ゆれの一覧が足りていません。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワードで保護されたPDF | 読めない。申込者に解除したものを出し直してもらう |
| 6言語に入らない書類(中国語など) | 読み取りに回さず営業担当へ。翻訳文の添付を申込者に頼むか、別のOCRで読む |
| 英語以外の5言語の書類 | 質問を外し、キーと値と表と全文で読む |
| 写真の文字が小さい・斜め | 最小15ピクセルを下回るものは unreadable。撮り直しを頼む |
ジョブが FAILED または PARTIAL_SUCCESS | StatusMessage と Warnings のページ番号を記録し、そのページを人へ |
| 質問のページ指定の誤り | INVALID_REQUEST_PARAMETERS が出る。質問の数とページを見直す |
| 同じ書類が二度届く | ClientRequestToken で同じジョブを返させ、二重に判定しない |
| 1ファイルに複数の書類 | ページごとに種類を分ける。分けられなければ ambiguous |
| 結果の取得が遅れる | JobId は7日間しか有効でない。7日を過ぎたら読み取りからやり直す |
上から2行目は、申込を受けた時点で分かります。 申込時に選んでもらった書類の言語が6言語以外なら、最初から営業担当の手作業の列に入れます。
記録を残す
- 元の書類ファイルと、受け取った日時、申込番号
- AWS Textract が返したJSONの全文と、使った質問の一覧
- Claude API が返したJSON(
raw、value、status、source) - Python の比較の結果と、そのとき使った換算表の版と書類の日付の基準
- 営業担当が判定を覆した記録 … どの項目を、どちらに変えたか
- 申込者への問い合わせと回答の記録
換算表の版を残すのは、率が月ごとに変わるためです。 当時の率が残っていないと、判定の理由を説明できません。
04実装レベルの3段階
最小構成は確かめるための段階で、月160件には使えません。 本記事の想定は半自動化です。 読み取りと比較が自動になり、営業担当は印の付いた項目を確かめて、問い合わせと保証会社への入力を行います。1件30分が12分になるのはこの段階です。 本格構成は、半自動化を3か月回し、印の付く項目の傾向が分かってから進めるほうが、作り直しが減ります。
05工数削減シミュレーション
導入後 160件 × 12分 ÷ 60 = 32 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 外資系企業の社員や留学生・研究者など、外国人の入居希望者が多い地域で賃貸の仲介・管理を行う不動産会社。在職証明書や給与明細が英文で届き、営業担当が辞書を引きながら入居審査シートへ写している場合。勤務先の名称や年収の書き方が申込書と書類で違い、保証会社や貸主へ回したあとに差し戻されることがある場合。社宅の手配を代行する会社が、赴任者の書類を取りまとめている場合。
- 書類が中国語・韓国語・ベトナム語などで届く場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めず、手書きは英語のみです)。日本語の源泉徴収票や課税証明書が中心の場合(UC-0374 の構成が向きます)。外国人の申込が月に数件で、目で見て足りる場合。なお、入居を認めるかどうかの審査そのもの、保証会社の判断、貸主の承諾は、この構成では代替できません。
07最小構成で試す方法
- 先月の外国人の申込から20件を選ぶ(日付の書き方が日・月・年のもの、通貨記号の無いものを必ず入れる)
- 個人の番号を黒く塗ったコピーを作る
- 手元の生成AIのチャット画面に1件ずつ貼り付け、「勤務先、役職、入社日、雇用形態、給与の額・期間・通貨、書類の日付を取り出してください。日付は書かれた文字列をそのまま書き、日と月の順序が決まらないものは『不明』としてください。金額の大きさから年額か月額かを決めないでください」と指示する
- 出てきた値を、当時の審査シートと突き合わせる
- 申込書との食い違いを手で拾い、当時の問い合わせの記録と比べる
20件は必ずやってください。 OCRのAPIを組む前に、「書類から項目を取り出せるのか」「曖昧なものを曖昧と言えるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 当時の審査シートと同じ値が出た | OCRのAPIと比較の処理に進む |
| 曖昧な日付を勝手に決めた | 指示の書き方で直る。構成は有効 |
| 写真の書類で文字が読めない | 受付の案内を先に直す。 PDFでの提出を頼む |
2行目は必ず一度は出ます。 指示を直し、同じ20件で ambiguous が出るようになるまで本番に進まないでください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
03/04/2025 を勝手に解釈する | 順序が決まる場合だけ解釈し、それ以外は ambiguous。 指示と後段の検査の両方で守る |
| 年額と月額を取り違える | 期間の記載が無ければ unknown。金額の大きさから決めさせない |
| 総支給と手取りを取り違える | 給与明細の表の列名で区別し、書かれていなければ ambiguous |
| 月額から年収を逆算して埋める | 書類ごとに値を持ち、別の書類の値で埋めない |
| パスワード付きのPDFで止まる | 受付画面で最初に案内する |
| 中国語の書類を読ませて失敗する | 書類の言語を申込時に選んでもらい、6言語以外は読み取りに回さない |
| 英語以外の書類で質問が使えない | 質問を外してキーと値と全文で読む設定に切り替える |
| 結果の取得で後半のページが抜ける | NextToken が返らなくなるまで呼び直す |
勤務先名の表記ゆれで mismatch が多発 | 日本法人と本国の親会社、Ltd. と Limited などを一覧にする |
| 換算の率が担当者ごとに違う | 社内の換算表を1つにし、版を記録する |
| 問い合わせ文に審査の見込みが入る | 指示で禁じ、送信前に営業担当が読む |
| 国籍で扱いを変える項目が紛れ込む | 比較の規則を書類と申込書の一致だけにする。 規則の見直しのたびに確かめる |
上の2行が、この構成の失敗のほとんどです。 どちらも「もっともらしい解釈」から始まり、当たる確率が高い解釈ほど、外れたときに気づかれません。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 入居希望者の氏名、勤務先、役職、給与の額、銀行名と残高、そして書類に書かれている口座番号、従業員番号、国民識別番号です。
- 生成AIへ渡す範囲を、審査シートの項目に要るものまでに限る … 口座番号や識別番号は、前処理で下4桁以外を伏せます。OCRの結果をそのまま全部渡さない設計にします
- 読み取り結果を自社の鍵で暗号化する … StartDocumentAnalysis の
KMSKeyIdを指定すると、出力先のバケットのオブジェクトがその鍵で暗号化されます。指定しない場合は SSE-S3 で暗号化されます - 入居の可否を判定させない … この構成が出すのは、書類に何が書いてあるかと、申込書との食い違いです。審査は保証会社と貸主が行います
- 国籍を判定の材料にしない … 比較の規則にも、生成AIへの指示にも、国籍や出身国で扱いを変える項目を置きません。外国人であることを理由にした扱いの差は、それ自体が問題になります
- 問い合わせを自動で送らない … 出すのは下書きまでです。申込者との最初のやり取りの印象が、そのまま成約に響きます
- 成約しなかった申込の書類を持ち続けない … 保存期間を決め、期限が来たら書類と読み取り結果をあわせて消します
誤りが起きた場合のリスクは、収入や在籍期間を誤って写し、そのまま保証会社へ回すことです。 多くは日付と金額の解釈から起きるので、解釈の規則を狭く保ち、外れたものを人に回すことで防ぎます。
10まず何から始めるか
1週目:社内の基準を3つ決める
通貨の換算表と適用日、書類の日付の基準(発行から何か月以内を受け付けるか)、必要な書類の組み合わせ(在職証明書と給与明細何か月分か)を決めます。担当者ごとに違っていたものを1つにするだけで、問い合わせの往復が減ります。
2週目:20件で試す
先月の申込から20件を選び、手元の生成AIの画面で項目を取り出させます。曖昧な日付と通貨記号の無い金額を、曖昧と言えるかを最優先で見ます。
3週目:受付画面を直す
パスワード付きのPDFを受け付けない案内、書類の言語を選ぶ欄、写真ではなくPDFでの提出のお願いを足します。読み取りの精度を上げるより、入ってくる書類を整えるほうが早く効きます。
4週目:受付フォルダから下書きの列までをつなぐ
S3、Lambda、Textract、Claude API をつなぎ、審査シートの下書きの列に書き出すところまで作ります。この時点では比較の印を出さず、取り出した値だけを見ます。
2か月目: Python の比較と印を足し、印の付いた項目の数を毎週数えます。勤務先の表記ゆれの一覧を育てます。3か月目以降: 問い合わせ文の下書きを足し、1件30分が何分になったかを実測します。英文に慣れていない担当者が、印の付いた項目だけを見て審査に回せるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 対応する形式がJPEG、PNG、PDF、TIFFであること。同期は10MB・PDF1ページ、非同期はPDFとTIFFで500MB・3,000ページであること。PDFはパスワードで保護できないこと。質問は同期で1ページ15件、非同期で30件までであること。対応言語が英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語で、質問の検出は英語の文書だけであること。手書きは英語のみであること。文字の最小の高さが15ピクセル(150 DPIで8ポイント相当)で、縦書きに対応しないこと | AWS: Set Quotas in Amazon Textract | 2026-10-07 |
StartDocumentAnalysis の FeatureTypes(TABLES/FORMS/QUERIES/SIGNATURES/LAYOUT)、QueriesConfig、ClientRequestToken(同じトークンで同じ JobId を返す)、JobTag、KMSKeyId(指定しない場合は SSE-S3)、NotificationChannel で Amazon SNS に完了を通知すること。JobId が7日間有効であること | AWS: StartDocumentAnalysis | 2026-10-07 |
GetDocumentAnalysis の JobStatus(IN_PROGRESS/SUCCEEDED/FAILED/PARTIAL_SUCCESS)、MaxResults(最大1,000)と NextToken、StatusMessage、Warnings。質問で INVALID_REQUEST_PARAMETERS が出る場合 | AWS: GetDocumentAnalysis | 2026-10-07 |
| 質問の応答が QUERY と QUERY_RESULT のブロックで返り、別名(Alias)と信頼度を持つこと。答えが見つからなければ空のまま返ること | AWS: Queries | 2026-10-07 |
| 表がセル、結合セル、列見出し、表題、脚注などのブロックで返り、セルごとに行・列の番号と信頼度を持つこと | AWS: Tables | 2026-10-07 |
構造化出力を output_config.format に json_schema を指定して受け取れること | Claude Docs: Structured outputs | 2026-10-07 |
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0674)についてのご相談はこちらから。
