海外出張の英文の予約確認書を読み取り、日程・便名・宿泊先・料金を出張台帳に転記して、出張規程の上限と申請内容との食い違いを拾う
海外出張で届く英文の予約確認書を読み取り、日程・便名・宿泊先・料金を出張台帳に転記します。出張申請の内容と出張規程の上限に照らし、食い違いと上限超えを出発の前に拾います。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- IT・SaaS/商社/建設/製造
- 対象部門
- 経理/総務
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 入力作業が多い/期限・対応漏れが起きる/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 共有受信箱に転送された予約確認書を、担当者が開く
- 便名、区間、出発と到着の日時、座席の等級、ホテル名、都市、チェックインとチェックアウトの日、料金と通貨、取消期限を読む
- 出張台帳で申請番号の行を探し、転記する
- 出張申請の日程・行き先と見比べ、出張規程の上限の一覧で宿泊料と座席の等級を確かめる
- 食い違いや上限超えがあれば、出張者に確かめる
- 自動共有受信箱に転送された予約確認書(添付のPDF、またはメール本文をPDFにしたもの)が、受付フォルダ(Amazon S3)に保存される
- 自動保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 自動OCRが、全文・キーと値・表・質問への答えを、信頼度付きで返す
- 自動生成AIが、便・宿泊・料金・取消期限を、原文と料金の種類・通貨を残して取り出す
- 自動プログラムが、出張申請の番号と出張者で台帳の行に書き、申請の日程と規程の上限に照らして印を付ける
- 人担当者が、印の付いた件を確かめ、出張者と上長に問い合わせる
- 自動毎朝、出発の近い出張の所在の一覧と、たびレジの登録が確かめられていない出張の一覧を作る
各工程の詳しい説明を読む
- 共有受信箱に転送された予約確認書を、担当者が開く
- 便名、区間、出発と到着の日時、座席の等級、ホテル名、都市、チェックインとチェックアウトの日、料金と通貨、取消期限を読む
- 出張台帳で申請番号の行を探し、転記する
- 出張申請の日程・行き先と見比べ、出張規程の上限の一覧で宿泊料と座席の等級を確かめる
- 食い違いや上限超えがあれば、出張者に確かめる
(a)上限超えに精算の段で気づく。 4番目の確かめは、出発が重なる週ほど省かれます。帰国後の精算で上限超えが分かっても、すでに泊まった後です。 例外として認めるかの判断が、事後の手続きになります。
(b)料金の比べ方が担当者ごとに違う。 滞在全体の額を泊数で割るのか、税を除くのか。同じ確認書でも、担当者によって上限を超えたり超えなかったりします。
(c)日程の変更が台帳に入らない。 出張者が便を取り直しても、新しい確認書を転送し忘れると、台帳の日程は古いままです。 現地で何かあったとき、台帳を見ても出張者の居場所が分かりません。
- 【自動】 共有受信箱に転送された予約確認書(添付のPDF、またはメール本文をPDFにしたもの)が、受付フォルダ(Amazon S3)に保存される
- 【自動】 保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 【自動】 OCRが、全文・キーと値・表・質問への答えを、信頼度付きで返す
- 【自動】 生成AIが、便・宿泊・料金・取消期限を、原文と料金の種類・通貨を残して取り出す
- 【自動】 プログラムが、出張申請の番号と出張者で台帳の行に書き、申請の日程と規程の上限に照らして印を付ける
- 【人】 担当者が、印の付いた件を確かめ、出張者と上長に問い合わせる
- 【自動】 毎朝、出発の近い出張の所在の一覧と、たびレジの登録が確かめられていない出張の一覧を作る
6番目が、この設計の分かれ目です。 担当者は160件の確認書を開かず、食い違いと上限超え、読み取れなかった印の付いたものだけを見ます。 human_check を「条件付き」としているのはこのためです。
5番目の照合をAIにさせないのも意図してのことです。 通貨の換算、泊数での割り算、税の扱い、座席の等級の比較は、規程と社内の換算レートで決まる処理として Python に置きます。
02今回想定するシステム構成
英文の予約確認書(旅行会社の旅程表、航空券の控え、ホテルの確認メール) ▼【トリガー】受付フォルダ(Amazon S3)への保存 AWS Lambda ── 形式・ページ数・パスワードの確認、メール本文のPDF化 ▼ AWS Textract(StartDocumentAnalysis:FORMS/TABLES/QUERIES) │ 全文、キーと値、旅程の表、質問への答え、信頼度 ▼ Claude API ── 便・宿泊・料金を原文と種類つきで取り出す │ ① 予約番号と出張者名 ② 便名・区間・日時・等級 ③ ホテル名・都市・日付 │ ④ 料金の額・種類・通貨・税の扱い ⑤ 取消期限 ▼ Python ── 台帳に書き、申請の日程と規程の上限に照らす ▼ 台帳(ok / date_mismatch / over_limit / class_mismatch / needs_human) ▼ 【担当者が印の付いた件を確認】 └──▶ 出張者と上長に確かめる
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | AWS Textract(StartDocumentAnalysis/GetDocumentAnalysis) | Azure AI Document Intelligence、Google Document AI |
| 生成AI | Claude API(予約確認書の項目の取り出し) | OpenAI API、Gemini API |
| 差異計算 | Python(1泊あたりの料金の計算、通貨の換算、申請と規程との照合) | 出張管理サービスの規程チェックの機能 |
| 連携 | AWS Lambda(保存と完了の通知を起点に処理を動かす) | Amazon EventBridge |
| 保管 | Amazon S3(予約確認書、読み取り結果、照合の結果) | 社内のファイルサーバー |
出張台帳と出張規程は、新しく足すものではありません。 最初の準備は、出張規程の上限をプログラムが読める表にすることです。都市の区分ごとの1泊の上限と、税を含めて比べるか、役職と飛行時間ごとの座席の等級を1行ずつ持たせます。
OCRに AWS Textract を選ぶのは、予約確認書が英文だからです。 公式の上限の表で、対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語とされています。日本の旅行会社の日本語の旅程表は、この構成では読み取りに回しません。
この題材で効くのは、質問(QUERIES)です。 予約確認書は書式がばらばらで、同じ項目が「Check-in」「Arrival」「From」と違う名前で書かれます。項目を英語の質問で尋ねれば、書式の違いを吸収しやすくなります。 質問は英語の文書でしか使えず、1ページあたり非同期で30個までです。
所在の把握には、外務省の「たびレジ」を合わせて使います。 たびレジは、渡航先、渡航期間、名前・メールアドレス・電話番号などを登録すると、旅先の大使館や総領事館から安全情報を受け取れ、緊急事態の際の安否確認や支援を受けられる仕組みです。企業向けには、社員の出張情報などを自動的に登録できる利用例が案内されています。 本記事では、台帳に登録の確認の列を持たせるところまでを扱います。
03どうやって実装するのか
処理の起点を決める
起点は、受付フォルダ(Amazon S3)に予約確認書が保存されたことです。 共有受信箱のルールで、転送されたメールの添付のPDFと、本文だけのメールをPDFにしたものをS3へ入れます。保存の通知で AWS Lambda が動き、読み取りから台帳への記録までを済ませます。
転送のメールの件名に出張申請の番号を書く決まりにします。 番号があれば台帳の行がすぐ決まり、無ければ出張者名と日程から候補の行を探して、担当者に確かめさせます。 番号の無い転送が多い出張者には、決まりを伝え直します。
毎朝8時にも動かします。 7日以内に出発する出張のうち、航空券かホテルの確認書が届いていないもの、たびレジの登録が確かめられていないもの、取消期限が3日以内に迫った予約を一覧にして担当者に送ります。取消期限を一覧に出すのは、出張が取りやめや延期になったときに、取消料のかからないうちに手を打つためです。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 予約確認書 | PDF。予約番号、出張者名(ローマ字)、便名、区間、出発と到着の日時、座席の等級、運賃、ホテル名、都市、チェックインとチェックアウトの日、料金と通貨、税の扱い、取消期限 | 受付フォルダ(Amazon S3) |
| 読み取り結果 | 全文、キーと値、旅程の表、質問への答え、それぞれの信頼度 | AWS Textract |
| 出張申請 | 申請番号、出張者、行き先の都市、出発と帰国の日、目的、概算の費用 | 出張申請のワークフロー |
| 出張規程の上限の表 | 都市の区分ごとの1泊の上限と税の扱い、役職と飛行時間ごとの座席の等級 | 出張規程を表にしたもの |
| 換算レートの表 | 月ごとの社内の換算レート | 経理部の表 |
| 社員の一覧 | 社員番号、氏名のローマ字の表記、役職 | 人事の社員の一覧 |
質を決めるのは、社員の一覧のローマ字の表記です。 予約確認書の名前はパスポートの表記で、姓と名の順、ミドルネームの有無、長音の書き方が揃いません。 一覧の表記と完全に一致しなければ、候補として担当者に見せます。
データの取得方法を決める
読み取りは StartDocumentAnalysis にS3の場所と FeatureTypes を渡して始めます。完了は NotificationChannel に指定した Amazon SNS のトピックに通知され、状態が SUCCEEDED なら GetDocumentAnalysis で結果を取ります。
| 指定するもの | 値 | 理由 |
|---|---|---|
FeatureTypes | FORMS、TABLES、QUERIES | 予約番号などのキーと値、旅程の表、名前で受け取りたい項目 |
QueriesConfig | 質問の文と Alias の組 | 書式の違う確認書から同じ項目を受け取る |
ClientRequestToken | ファイルのハッシュ | 同じ確認書で二重に読み取りを始めない |
JobTag | 出張申請の番号 | 完了の通知から台帳の行を引く |
Alias | 質問の文 |
|---|---|
BOOKING_REF | What is the booking reference or confirmation number? |
TRAVELER | What is the passenger or guest name? |
HOTEL | What is the hotel name and city? |
CHECK_IN | What is the check-in date? |
CHECK_OUT | What is the check-out date? |
RATE | What is the room rate and currency? |
TOTAL | What is the total amount and currency? |
TAX | Are taxes and fees included? |
CANCEL | What is the cancellation deadline or policy? |
便は表から取ります。 旅程表やeチケットの控えでは、便名、区間、日付、時刻、等級が表の行に並ぶので、表の行ごとに1区間として読みます。 質問の答えは、見つからなければ空のまま返るので、空の項目は全文から欄の見出しの語を探し、それでも無ければ missing にします。
結果は1回最大1,000ブロックで区切られ、NextToken が返る限り呼び直します。出張申請、規程の表、換算レート、社員の一覧は Python が読み、生成AIには渡しません。
AIへ渡す前に整形する
- メール本文のPDF化 … ホテルや予約サイトの確認はメール本文だけで届くことが多いので、本文をPDFにしてから入れます
- 形式の確認 … JPEG、PNG、PDF、TIFF であることを確かめます
- パスワードの確認 … PDFはパスワードで保護されていてはいけないとされています。保護されたものは出張者に解除したものを頼みます
- 転送の文の除去 … 出張者が転送のときに書いた文と、転送の見出しをPDFにする前に外します
- 言語の確認 … 6言語に入らない確認書は読み取りに回さず、担当者が目で見る一覧に入れます
- 取り直しの判定の準備 … 件名の
Change、Modified、Cancellationの語を記録し、同じ予約番号の確認書が前にあるかを調べます
4番目を省くと、転送の文に書かれた日付や金額を読み取ります。 出張者が「前の便は〇日でした」と書き添えていると、その日付を便の日付として取ることがあります。
AIに処理させる
させるのは、予約確認書から便と宿泊の項目を取り出し、料金が何の額かを書き出すことです。 照合と換算はさせません。
| 見るもの | 取り出し方 | 判断できないときの扱い |
|---|---|---|
| 予約番号と出張者名 | 原文のまま | 名前が複数あれば全員を配列で |
| 便 | 区間ごとに便名、出発地、到着地、出発と到着の日時、等級 | 到着が翌日なら到着の日付をそのまま |
| ホテル | ホテル名、都市、チェックインとチェックアウトの日 | 都市が書かれていなければ住所から都市名だけ |
| 宿泊の料金 | 額、通貨、種類(1泊/滞在全体)、税の扱い(込み/別/不明) | 種類が決まらなければ ambiguous |
| 航空券の運賃 | 額、通貨、税・燃油の扱い | 書かれていなければ missing |
| 取消期限 | 原文のまま、日付が確定すれば日付 | 条件だけなら原文のまま |
| 確認書の種類 | 新規/変更/取消 | 決まらなければ unknown |
料金の「1泊か滞在全体か」と「税込みか」を分けるのが、いちばん大事な区別です。 同じホテルの同じ予約でも、確認書によって書かれ方が違い、種類を取り違えると、上限超えを見逃すか、超えていない予約を問い合わせることになります。
| させないこと | 理由 |
|---|---|
| 上限を超えているかの判断 | 規程の表と換算レートで Python が行う |
| 通貨の換算と泊数での割り算 | 社内の換算レートと泊数で Python が計算する |
| 税の扱いが書かれていないときの推測 | 推して込みとすると、上限超えが見えなくなる |
| 出張者名の補正 | 表記の違いを直すと、別人の予約を取り違える |
| 規程の例外を認めてよいかの意見 | 上長と総務が判断する |
3行目がいちばん起きやすい失敗です。 税の扱いが書かれていない確認書で、一般的な書き方から「税込み」と推すと、税別の料金が上限の内に見えます。 書かれていなければ unknown で返させます。
指示内容を固定する
あなたは会社の総務部で、海外出張の英文の予約確認書の記載を
記録する担当です。OCRの読み取り結果だけを使ってください。
推測で埋めないでください。
【取り出す項目】
document_kind(new / change / cancellation / unknown)、
booking_ref、traveler_names(配列)、
flights(配列:flight_no、from_raw、to_raw、
depart_raw、depart、arrive_raw、arrive、cabin_raw)、
hotels(配列:name_raw、city_raw、check_in、check_out、
rate_amount、rate_currency、rate_kind(per_night / total / unknown)、
tax(included / excluded / unknown))、
fare(amount、currency、tax_raw)、
cancel_deadline_raw、cancel_deadline、
各項目の status と source(ページと行)
【status の選び方】
- ok ......... 値が読み取れており、その項目として解釈できる
- missing .... 書かれていない
- unreadable . 文字は検出されているが値として確定できない
- ambiguous .. 候補が複数ある、または種類や日付の順序が決まらない
【厳守事項】
- 宿泊の料金が1泊の額か滞在全体の額かを rate_kind に入れてください。
文面から決まらなければ unknown にしてください。
- 税やサービス料が含まれるかを tax に入れてください。
書かれていなければ unknown にしてください。推して決めないでください。
- 金額は書かれた通貨のまま入れてください。換算や泊数での割り算を
しないでください。
- 日付は、月が英語の名前で書かれているか、文面から日と月の順序が
確定できるときだけ YYYY-MM-DD で入れてください。
- 名前は書かれたとおりに入れてください。表記を直さないでください。
- 規程の上限を超えているか、予約を取り直すべきかを書かないでください。
- 予約確認書でない書類(請求書、領収書、案内のメールなど)と
判断した場合は、項目を取り出さず document_kind を unknown にし、
document_type に種類を書いてください。
【読み取り結果】{textract_result}
「税の扱いを推して決めない」を明記しないと、推します。 確認書に税の記載が無いとき、「Room rate」という語だけから込みと判断して返し、後段の照合で上限の内に入ってしまいます。
出力形式を固定する
Claude API の構造化出力(output_config.format に json_schema を指定)で、次の形のJSONを受け取ります。
{
"file": "",
"document_kind": "new",
"booking_ref": "",
"traveler_names": ["YAMADA/TARO MR"],
"flights": [
{ "flight_no": "XX101", "from_raw": "NRT", "to_raw": "SIN",
"depart": "2026-10-20T10:30", "arrive": "2026-10-20T16:45",
"cabin_raw": "ECONOMY" }
],
"hotels": [
{ "name_raw": "", "city_raw": "SINGAPORE",
"check_in": "2026-10-20", "check_out": "2026-10-23",
"rate_amount": 0, "rate_currency": "SGD",
"rate_kind": "per_night", "tax": "unknown" }
],
"cancel_deadline": "2026-10-18",
"items": [
{ "item": "hotels[0].tax", "status": "missing", "confidence": 0, "source": "" }
]
}
1つ目の理由は、照合をプログラムの側に置けることです。 Python が申請番号と出張者名で台帳の行を決め、申請の日程と規程の表、換算レートで印を付けます。
| 印 | 付ける条件 |
|---|---|
ok | 日程と都市が申請に合い、1泊あたりの料金と座席の等級が規程の内 |
date_mismatch | 便やホテルの日付・都市が、申請の出発・帰国の日や行き先と違う |
over_limit | 1泊あたりの料金を社内の換算レートで円にして、都市の区分の上限を超える |
class_mismatch | 座席の等級が、役職と飛行時間で決まる等級より上 |
needs_human | rate_kind か tax が unknown、名前が社員の一覧と一致しない、ambiguous の項目がある、または書類でない |
2つ目は、変更の確認書を履歴として持てることです。 document_kind が change なら、同じ予約番号の前の値を残したまま新しい値を足します。 台帳の日程はいつも最新になり、何がいつ変わったかも引けます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ(Amazon S3) | 保存の通知 | 確認書の保存を検知して AWS Lambda を動かす |
| AWS Textract | API呼び出し(非同期) | 読み取りを始め、完了の通知で結果を取る |
| Claude API | API呼び出し | 便・宿泊・料金の取り出し |
| 出張申請のワークフロー | 読み取り | 申請の日程・行き先・出張者を引く |
| 出張台帳 | 読み取りと書き込み | 行に値を書き、印と変更の履歴を残す |
| 通知 | メール | 毎朝の一覧を担当者に送る |
予約の変更や取消、出張申請の承認は、この構成からは行いません。 規程を超える予約を取り直すか、例外として認めるかは、出張者と上長が決め、承認はいまの出張申請のワークフローで行います。
人が確認する
担当者が開くのは、ok 以外の印が付いたものです。
date_mismatchを最初に片付ける … 申請と違う日程は、出張の予定そのものが変わった可能性があるので、出張者に確かめて申請を直してもらいますover_limitとclass_mismatchを上長に回す … 例外として認めるかを上長に確かめます。出発前に決めれば、取り直す時間が残りますneeds_humanを確認書の画像で確定させる … 料金の種類、税の扱い、名前の表記を確かめます
目標は、160件をならして1件3分です。 印の付く件が増えた月は、規程の表に無い都市が増えていないか、税の扱いが書かれない予約サイトが増えていないかを見ます。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワードで保護されたPDF | 読めない。出張者に解除したものを頼む |
| 6言語に入らない確認書 | 読み取りに回さず、担当者が目で見る |
| 1通に複数の出張者の予約 | 名前ごとに台帳の行を分ける。社員の一覧に無い名前は人へ |
| 規程の表に無い都市 | 区分を決めずに needs_human。総務が区分を決めて表に足す |
| 換算レートの表にその月の通貨が無い | 換算せずに needs_human |
| 取消の確認書 | 台帳の予約を取消として記録し、出張自体が取りやめかを確かめる |
| 申請番号が件名に無く、候補の行が複数ある | 候補を並べて人が選ぶ |
ジョブが FAILED または PARTIAL_SUCCESS | StatusMessage と Warnings のページ番号を記録し、そのページを人へ |
上から4行目と5行目は、推して決めると規程の判定が誤ります。 表に無いものは表に足してから照合し直す、という順を崩さないでください。
記録を残す
- 元の予約確認書と、受け取った日時、転送した出張者、メールの件名
- AWS Textract が返したJSONの全文と、使った質問の一覧
- Claude API が返したJSON(原文と、料金の種類・税の扱いの解釈)
- 照合の結果と、そのとき参照した規程の表と換算レートの版
- 予約の変更の履歴 … いつ、どの便やホテルが、何から何に変わったか
- 上長が例外を認めた記録と、その理由
最後の行は、規程を見直す材料になります。 同じ都市で例外が続くなら、上限そのものが実態に合っていないことが分かります。
04実装レベルの3段階
本記事の想定は半自動化です。 読み取りと転記と照合が自動になり、担当者は印の付いた件を確かめます。1件12分が3分になるのはこの段階です。 本格構成で足すのは、たびレジとの連携と精算との照合です。 たびレジには企業向けに出張情報を一括で登録できる連携の仕組みが案内されており、利用には外務省への問い合わせが要ります。 精算との照合では、予約の料金と領収書の金額を比べます。
05工数削減シミュレーション
導入後 160件 × 3分 ÷ 60 = 8 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 海外出張が月に百件以上ある商社・メーカー・IT企業・建設会社の総務と経理。出張者が自分で、または旅行会社を通じて航空券とホテルを予約し、英文の予約確認書がPDFやメールで届くため、総務の担当者が日程・便名・宿泊先・料金を出張台帳に手で写している場合。宿泊料の上限超えや、申請と違う日程の予約に、精算の段で気づくことがある場合。
- 海外出張が月に数件の企業。出張の予約を出張管理のサービスにまとめており、予約の内容をデータで受け取れている場合。予約確認書が英語以外(中国語・韓国語・日本語など)で届くことが多い場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めません)。なお、規程の例外を認めるかどうか、予約を取り直すかどうかは、出張者の上長と総務が判断するもので、この構成では代替できません。
07最小構成で試す方法
- 先月の海外出張から30件の予約確認書を選ぶ(1泊の額と滞在全体の額が両方書かれたもの、税の扱いが書かれていないもの、変更の確認書、到着が翌日になる便を必ず入れる)
- 手元の生成AIの画面に1通ずつ貼り付け、「この予約確認書の便名、区間、出発と到着の日時、ホテル名、都市、チェックインとチェックアウトの日、宿泊の料金(1泊か滞在全体か、税込みか)と通貨、取消期限を、書かれたとおりに表にしてください。税の扱いが書かれていなければ『記載なし』とし、推して決めないでください。換算をしないでください」と指示する
- 出てきた表を、当時の出張台帳の値と、精算で分かった上限超えの記録と見比べる
30件は必ずやってください。 仕組みを組む前に、料金の種類を分けられるか、税の扱いを推さないか、翌日の到着を取り違えないかを確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 料金の種類と税の扱いを原文どおりに分けた | OCRのAPIと照合の処理に進む |
| 書かれていない税の扱いを推した | 推測を禁じる指示を足す。直るまで先に進まない |
| 到着が翌日の便で日付を取り違えた | 到着の日付を原文のまま取らせる。構成は有効 |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 滞在全体の額を1泊の額として比べる | 料金の種類を取り出させ、割り算は Python で行う |
| 税の扱いを推して込みとする | 推測を禁じ、unknown は人へ |
| 到着が翌日の便で日付がずれる | 到着の日付を原文のまま取り、ホテルのチェックインと比べる |
| 転送の文の日付を読み取る | PDFにする前に転送の文を外す |
| 変更の確認書で古い日程が上書きされない | 予約番号で前の値を引き、履歴として足す |
| 名前の表記の違いで別人とする | 社員の一覧のローマ字と照らし、一致しなければ候補として人へ |
| 規程の表に無い都市で照合が止まる | 区分を決めずに人へ回し、表に足す |
| 換算を月ごとのレートでしない | 社内の換算レートの表を Python が引く |
上の2行が、この構成の失敗のほとんどです。 どちらも料金の比べ方の誤りで、印が当てにならなくなると、担当者は結局すべての確認書を自分で計算し直すことになります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 出張者の氏名、日程、便、宿泊先、料金です。個人がいつどこにいるかが分かる情報で、外に出せば本人の安全に関わります。
- 外部へ渡す範囲を、読み取りに必要なものに限る … 生成AIに渡すのは予約確認書の読み取り結果だけです。出張申請の目的、社員の一覧、他の出張者の情報は渡しません
- 所在の一覧の閲覧者を絞る … 出張者の所在の一覧は、総務の担当者と緊急時の対応の担当者だけが見られるようにします
- 例外の判断を出さない … 一覧に出すのは食い違いと上限超えの事実だけです。認めるかどうかは上長が決めます
- 予約確認書の保管期間を決める … 精算と監査に要る期間を過ぎたら消します
誤りが起きた場合のリスクは、上限超えを見逃して精算の段で揉めることと、所在の一覧が古くて緊急時に出張者を探せないことです。 料金の種類と変更の履歴を原文のまま残す設計を崩さないでください。
10まず何から始めるか
1週目:出張規程を表にする
都市の区分ごとの1泊の上限、税込みで比べるか、役職と飛行時間ごとの座席の等級を表にします。出張の多い上位20都市から始めます。 あわせて、社員の一覧にローマ字の表記の列を足します。
2週目:30件で試す
先月の予約確認書から30件を選び、手元の生成AIの画面で項目を表にさせます。料金の種類を分けられるか、税の扱いを推さないか、翌日の到着を取り違えないかを最優先で見ます。
3週目:転送の決まりを整える
予約確認書を共有受信箱に転送するとき、件名に出張申請の番号を書く決まりを出張者に伝えます。ここが整うと、台帳の行を決める処理がほぼ不要になります。
4週目:受付フォルダから台帳までをつなぐ
S3、Lambda、Textract、Claude API、Python の照合をつなぎ、台帳に値と印を書くところまで作ります。この時点では、利用の多い2社の旅行会社の確認書だけを対象にします。
2か月目: 対象を自分で予約した出張の確認書に広げ、over_limit と needs_human の件数を毎週数えて規程の表を直します。3か月目以降: 毎朝の所在の一覧を運用に乗せ、1件12分が何分になったかを実測します。上限超えと日程の違いが出発前に拾われ、出張者の所在を台帳からいつでも答えられるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| たびレジが、渡航国・地域、渡航期間、名前・メールアドレス・電話番号などを登録すると、旅先の大使館や総領事館から安全情報を受け取れ、緊急事態の際に安否確認や支援を受けられる仕組みであること | 外務省: たびレジ | 2026-10-08 |
| 海外旅行関連企業等向けに、所定の形式の旅行情報のファイルをアップロードして渡航者の情報を一括で登録できる連携の仕組みがあり、利用は問い合わせによること。企業内の利用例として、社員の出張情報などを自動的に登録できるとされていること | 外務省: たびレジ 企業・法人の方へ | 2026-10-08 |
| 対応する形式がJPEG、PNG、PDF、TIFFであること。非同期はPDFとTIFFで500MB・3,000ページであること。PDFはパスワードで保護できないこと。対応言語が英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語であること。質問の検出は英語の文書だけで、非同期で1ページ30個までであること | AWS: Set Quotas in Amazon Textract | 2026-10-08 |
StartDocumentAnalysis の FeatureTypes(TABLES/FORMS/QUERIES/SIGNATURES/LAYOUT)、QueriesConfig、ClientRequestToken、JobTag、NotificationChannel で Amazon SNS に完了を通知すること | AWS: StartDocumentAnalysis | 2026-10-08 |
GetDocumentAnalysis がキーと値・表とセル・質問と答えのブロックを返すこと。JobStatus(SUCCEEDED/FAILED/PARTIAL_SUCCESS ほか)、MaxResults(最大1,000)と NextToken、StatusMessage、Warnings | AWS: GetDocumentAnalysis | 2026-10-08 |
| 質問の応答が別名(Alias)と信頼度を持ち、答えが見つからなければ空のまま返ること | AWS: Queries | 2026-10-08 |
構造化出力を output_config.format に json_schema を指定して受け取れること | Claude Docs: Structured outputs | 2026-10-08 |
出張規程の上限と例外の扱いは、自社の規程で決めてください。 本記事は外務省のたびレジのページで確認できた範囲だけを扱っており、たびレジとの連携の可否と方法は外務省に確かめてください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0949)についてのご相談はこちらから。
