英文のチャージバック通知を読み取り、予約・決済・滞在の記録と照らして、反証に要る資料と回答期限を台帳にする
海外の決済代行やカード会社から届く英文のチャージバック通知を読み取り、予約・決済・滞在の記録と照らします。案件ごとに、反証に要る資料の一覧と回答期限を台帳に載せ、経理とフロントへ返します。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- EC/宿泊/飲食
- 対象部門
- カスタマーサポート/経理
- 対象業務
- データ入力・転記/台帳・マスタ管理
- 主な課題
- 属人化している/情報が見つからない/期限・対応漏れが起きる
- AIで行う処理
- 抽出
- 主な効果
- 入力漏れ削減/工数削減/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 共有受信箱に届いた通知のPDFを経理の担当者が開き、ケース番号、理由コード、金額、通貨、取引日、回答期限を読む
- 案件のスプレッドシートに1行足して転記する
- 決済代行の管理画面で取引を探し、決済の日時、カード番号の下4桁、承認番号から、どの館のどの予約かを特定する
- 館のフロントに予約番号を伝え、PMS から予約の内容、キャンセルの記録、チェックインとチェックアウトの記録、宿泊客とのメールを出してもらう
- 理由コードを調べ、反論に要る資料の一覧を作ってフロントに依頼する
- 集まった資料を確かめ、責任者に反論するか受け入れるかを相談する
- 回答の文面を書き、資料をまとめて決済代行に提出する
- 自動共有受信箱に届いた通知のPDFが、受付フォルダ(Amazon S3)に保存される
- 自動保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 自動OCRが通知の全文、キーと値、表、質問への答え、信頼度を返す
- 自動ケース番号、カードのブランド、理由コード、金額、通貨、取引日、回答期限、求められている資料を取り出し、原文のまま記録する
- 自動プログラムが決済の記録とPMSの予約を照らし、館と予約を特定する
- 自動プログラムが理由コードを社内の対応表で引き、反証に要る資料の一覧と社内の期限を決める
- 自動台帳に1行を書き、館のフロントへ資料の依頼の下書きを作る
- 人経理の担当者が、印の付いた案件を通知の画像と見比べて確かめる
- 人責任者と館の支配人が、反論するか受け入れるかを決め、担当者が回答を提出する
各工程の詳しい説明を読む
- 共有受信箱に届いた通知のPDFを経理の担当者が開き、ケース番号、理由コード、金額、通貨、取引日、回答期限を読む
- 案件のスプレッドシートに1行足して転記する
- 決済代行の管理画面で取引を探し、決済の日時、カード番号の下4桁、承認番号から、どの館のどの予約かを特定する
- 館のフロントに予約番号を伝え、PMS から予約の内容、キャンセルの記録、チェックインとチェックアウトの記録、宿泊客とのメールを出してもらう
- 理由コードを調べ、反論に要る資料の一覧を作ってフロントに依頼する
- 集まった資料を確かめ、責任者に反論するか受け入れるかを相談する
- 回答の文面を書き、資料をまとめて決済代行に提出する
(a)期限を読み落とす。 期限の書き方は Response Due Date、Reply by、must be received within 10 days of the date of this letter のようにまちまちです。最後の書き方では日付そのものが書かれておらず、通知の日付から数える必要があります。 数え忘れた案件が、提出の準備をしている間に期限を過ぎます。
(b)通知から予約にたどり着くのに時間がかかる。 3番目の作業で、決済の日と宿泊の日のどちらで探すかを間違えると見つかりません。12館のどこの予約かが分からないまま、館に順に問い合わせることもあります。
(c)理由ごとに要る資料を知っているのが1人だけ。 ノーショーへの申し立てならキャンセルポリシーと予約時の同意の記録、覚えのない利用ならチェックインの記録と宿泊客とのやり取り。この対応表を頭の中に持っているのは3名のうち1名で、その担当者が休むと5番目の作業が止まります。
- 【自動】 共有受信箱に届いた通知のPDFが、受付フォルダ(Amazon S3)に保存される
- 【自動】 保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 【自動】 OCRが通知の全文、キーと値、表、質問への答え、信頼度を返す
- 【自動】 ケース番号、カードのブランド、理由コード、金額、通貨、取引日、回答期限、求められている資料を取り出し、原文のまま記録する
- 【自動】 プログラムが決済の記録とPMSの予約を照らし、館と予約を特定する
- 【自動】 プログラムが理由コードを社内の対応表で引き、反証に要る資料の一覧と社内の期限を決める
- 【自動】 台帳に1行を書き、館のフロントへ資料の依頼の下書きを作る
- 【人】 経理の担当者が、印の付いた案件を通知の画像と見比べて確かめる
- 【人】 責任者と館の支配人が、反論するか受け入れるかを決め、担当者が回答を提出する
8番目が、この設計の分かれ目です。 担当者は60件の通知を最初から読み直すのではなく、期限や予約の特定に印の付いた案件だけを開きます。 印の無い案件は、期限と資料の一覧を並べた台帳で流し見ます。
5番目と6番目をAIにさせないのも、意図してのことです。 金額と日付の照合、理由コードから資料への対応、期限の逆算。どれも規則で決まる処理で、AIには通知から値を取り出すところまでをさせます。
02今回想定するシステム構成
英文のチャージバック通知(PDF。決済代行・OTAからのメール添付) ▼【トリガー】受付フォルダ(Amazon S3)への保存 AWS Lambda ── 形式・ページ数・サイズ・パスワードの確認 ▼ AWS Textract(StartDocumentAnalysis:FORMS/TABLES/QUERIES) │ 全文、キーと値、表、質問への答え、信頼度 ▼ Claude API ── 通知の項目を取り出し、原文と解釈を分けて記録する │ ① ケース番号と送り元 ② 理由コード ③ 金額と通貨 │ ④ 取引日 ⑤ 回答期限 ⑥ 求められている資料 ▼ Python ── 決済の記録とPMSの予約を照らし、館と予約を特定する │ 理由コードを社内の対応表で引き、資料の一覧と社内の期限を決める ▼ 台帳(ok / deadline_unclear / booking_not_found / multi_match / needs_human) ▼ 【経理の担当者が印の付いた案件を確認】 ├──▶ 館のフロントへ資料の依頼(下書き) └──▶ 責任者と支配人が反論か受け入れかを決める
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 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(通知、読み取り結果、照合の結果) | 社内のファイルサーバー |
PMSと決済代行の管理画面は、新しく足すものではありません。 最初の準備は、理由コードと反証に要る資料の対応表を作ることと、決済代行から取引の一覧を毎日CSVで出す設定をすることです。
OCRに AWS Textract を選ぶのは、通知が英文だからです。 公式の上限の表で、対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語とされ、日本語や中国語は読めません。 通知はほとんどが英文で届くので、この制約に収まります。館で書かれた日本語の宿泊台帳やメモは、この構成では読み取りに回さず、PMSのデータを使います。
この題材で効くのは、質問(QUERIES)です。 通知はレターの形が多く、回答期限が文章の中に埋まっています。「回答の期限はいつか」と質問の形で聞くと、文章の中から答えの文字列と信頼度が返ります。 ただし質問は英語の文書でしか使えず、1ページあたり非同期で30個までです。
03どうやって実装するのか
処理の起点を決める
起点は2つあります。通知が届いたときと、毎朝の定時です。
1つ目は、受付フォルダ(Amazon S3)に通知のPDFが保存されたことです。共有受信箱のルールで、決済代行とOTAの送り元から届いたメールの添付をS3へ転送します。保存の通知で AWS Lambda が動き、読み取りから台帳への記録までを済ませます。届いた時点で読むので、期限を数える起点が受け取った日からずれません。
2つ目は、毎朝9時の定時です。台帳の全案件について、社内の期限まで3営業日を切ったもの、資料が集まっていないもの、館からの返事が無いものを一覧にして、経理の担当者に送ります。期限の管理を、担当者の記憶ではなく台帳の側に置きます。
照会からチャージバックに進んだ通知や結果の通知などの続報も、同じ経路で入れます。 ケース番号が同じものは同じ行の履歴に足します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| チャージバック通知 | PDF。ケース番号、カードのブランド、理由コード、金額と通貨、取引日、カード番号の下4桁、回答期限、求められている資料 | 受付フォルダ(Amazon S3) |
| 読み取り結果 | 全文、キーと値、表、質問への答え、それぞれの信頼度 | AWS Textract |
| 決済の記録 | 決済の日時、金額と通貨、カード番号の下4桁、承認番号、決済代行の取引ID、自社の注文番号 | 決済代行から毎日出すCSV |
| 予約と滞在の記録 | 予約番号、館、宿泊日、泊数、キャンセルの日時、ノーショーの記録、チェックインとチェックアウトの時刻、宿泊客とのメールの有無 | 館ごとのPMS |
| 理由コードの対応表 | 理由コードごとの分類と、反証に要る資料の一覧、社内の期限の置き方 | 経理部で作る一覧 |
質を決めるのは、理由コードの対応表です。 Stripe のドキュメントでは、カードの理由コードを「未処理のクレジット」「重複支払い」「不正使用」「商品が届かない」などのカテゴリーに整理しており、Mastercard の 4853 や 4859 にはノーショーに対する宿泊料、American Express の C18 には「ノーショー」または車両デポジットのキャンセル、170 には宿泊予約施設のキャンセルの項目が並んでいます。同じノーショーの申し立てでも、ブランドごとに番号が違います。 対応表はブランドと番号の組で引けるように作ります。
決済の記録は、通知と予約をつなぐ唯一の橋です。 通知に予約番号が書かれていることはまれで、決済代行の取引IDか、金額・日付・カード番号の下4桁の組で決済の記録を引き、そこに入っている自社の注文番号から予約に戻ります。
データの取得方法を決める
読み取りは StartDocumentAnalysis にS3の場所と FeatureTypes を渡して始めます。完了は NotificationChannel に指定した Amazon SNS のトピックに通知され、状態が SUCCEEDED なら GetDocumentAnalysis で結果を取ります。
| 指定するもの | 値 | 理由 |
|---|---|---|
FeatureTypes | FORMS、TABLES、QUERIES | 見出しのキーと値、取引の表、文章の中の期限 |
QueriesConfig | 質問の文と Alias の組 | 期限やケース番号を項目名で受け取る |
ClientRequestToken | ファイルのハッシュ | 同じ通知で二重に読み取りを始めない |
JobTag | 送り元の区分 | 完了の通知から送り元を引く |
Alias | 質問の文 |
|---|---|
CASE_ID | What is the case number or dispute reference? |
REASON_CODE | What is the chargeback reason code? |
DISPUTED_AMOUNT | What is the disputed amount and currency? |
TRANSACTION_DATE | What is the original transaction date? |
RESPONSE_DUE | By what date must the merchant respond? |
DOCS_REQUESTED | What documents does the merchant need to provide? |
質問の答えが見つからなければ空のまま返ります。 期限が空なら、全文から due、respond、within、days を含む行を探します。「通知の日付から10日以内」のような相対の書き方なら、その文と通知の日付を両方記録し、日付の計算はプログラムの側で行います。
結果は1回最大1,000ブロックで区切られ、NextToken が返る限り呼び直します。同期の処理はPDF1ページまでで、通知は2〜3ページになることが多いので非同期で読みます。
決済の記録とPMSの予約は、Python が読みます。 決済代行のCSVは毎朝取り込み、PMSは館ごとの予約の出力を夜間に取り込んでおきます。生成AIには、決済の記録もPMSのデータも渡しません。
AIへ渡す前に整形する
- 形式の確認 … JPEG、PNG、PDF、TIFF であることを確かめます。メール本文に通知が書かれているものは、本文をPDFにして入れます
- パスワードの確認 … PDFはパスワードで保護されていてはいけないとされています。保護されたものは送り元に解除したものを頼みます
- サイズとページ数の確認 … 非同期の処理で、PDFとTIFFは500MB・3,000ページまでです
- 言語の確認 … 6言語に入らない通知は読み取りに回さず、担当者が目で見る一覧に入れます
- 送り元の特定 … 送信元のアドレスから、決済代行かOTAか、どの事業者かを決めます。期限の数え方の既定値を送り元ごとに持つためです
- 続報の判定 … 件名や本文のケース番号が台帳にあれば、続報として同じ行に付けます
AIに処理させる
させるのは、通知から8つの項目を取り出し、原文の文字列と、日付や金額の解釈を分けて書き出すことです。 照合はさせません。
| 見るもの | 取り出し方 | 判断できないときの扱い |
|---|---|---|
| ケース番号と送り元 | 原文のまま。照会か、チャージバックか、再申し立てかの段階も | 段階が書かれていなければ unknown |
| カードのブランドと理由コード | ブランド名と番号を原文のまま | 番号だけでブランドが無ければ ambiguous |
| 金額と通貨 | 原文と、数値・ISO の通貨コード | 複数の金額が並べば ambiguous |
| 取引日 | 原文と、日付として確定できるときだけ解釈 | 決済の日か宿泊の日か書かれていなければ、その旨を記録 |
| カード番号の下4桁 | 原文のまま | 書かれていなければ空 |
| 回答期限 | 日付があれば原文と解釈。相対の書き方なら文をそのまま | 日と月の順序が決まらなければ ambiguous |
| 求められている資料 | 通知に列挙された資料を原文のまま、1つずつ | 書かれていなければ空 |
| 宿泊客の主張 | 通知に添付された申し立ての文を、短く原文のまま | 書かれていなければ空 |
回答期限の原文を残すのは、日と月の順序が送り元で違うためです。 05/11/2026 は5月11日にも11月5日にも読めます。1週間ほどの回答期間では、取り違えは致命的です。 順序が決まらない日付は解釈させず、人に見せます。
| させないこと | 理由 |
|---|---|
| 反論するか受け入れるかの判断 | 経理の責任者と支配人が決める |
| 予約の特定 | 決済の記録とPMSを Python が照合する |
| 理由コードから資料への対応 | 社内の対応表で引く。ネットワークの規則は変わる |
| 相対の期限の計算 | 送り元ごとの数え方の決まりで Python が行う |
| 理由コードの意味の推測 | 番号だけの通知で、似た番号の意味を当てはめない |
指示内容を固定する
あなたはホテルチェーンの経理部で、海外の決済代行から届いた英文の
チャージバック通知の記載を記録する担当です。
OCRの読み取り結果だけを使ってください。推測で埋めないでください。
【取り出す項目】
case_id、stage、card_brand、reason_code_raw、amount_raw、amount、currency、
transaction_date_raw、transaction_date、transaction_date_kind、card_last4、
response_due_raw、response_due_date、response_due_relative、
documents_requested(配列)、cardholder_claim_raw、
各項目の status と source(ページと行)
【status の選び方】
- ok ........... 値が読み取れており、その項目として解釈できる
- missing ...... 書かれていない
- unreadable ... 文字は検出されているが値として確定できない
- ambiguous .... 候補が複数ある、または日付の順序が決まらない
【厳守事項】
- 日付は、日と月の順序が文面から確定できるときだけ YYYY-MM-DD で
入れてください。決まらなければ空にし、status を ambiguous にしてください。
- 回答期限が「〜日以内」のような書き方なら、日付に直さず、
その文をそのまま response_due_relative に入れてください。
- 理由コードは書かれた番号だけを入れてください。番号の意味を
書き添えたり、別のブランドの番号に読み替えたりしないでください。
- 取引日が決済の日か宿泊の日か書かれていなければ、
transaction_date_kind を unknown にしてください。
- 反論できるか、勝てそうかを書かないでください。
- 通知でない書類(請求書、入金明細、販促メールなど)と判断した場合は、
項目を取り出さず document_type に種類を書いてください。
【読み取り結果】{textract_forms_tables_queries}
【送り元の区分】{sender_type}
「番号の意味を書き添えない」を明記しないと、書き添えます。 理由コードの番号を見ると、知っている意味を補足しようとし、それがブランド違いの意味でも、もっともらしい文になります。 意味は対応表の側に置き、AIには番号だけを写させます。
出力形式を固定する
Claude API の構造化出力(output_config.format に json_schema を指定)で、次の形のJSONを受け取ります。
{
"file": "",
"document_type": "chargeback_notice",
"case_id": "CB-2026-104233",
"stage": "chargeback",
"card_brand": "Mastercard",
"reason_code_raw": "4853",
"amount_raw": "JPY 48,000",
"amount": 48000,
"currency": "JPY",
"transaction_date_raw": "09/14/2026",
"transaction_date": "2026-09-14",
"transaction_date_kind": "unknown",
"card_last4": "4417",
"response_due_raw": "",
"response_due_relative": "within 10 days of the date of this letter",
"documents_requested": ["Cancellation policy", "Proof of disclosure"],
"items": [
{ "item": "response_due", "status": "ok", "confidence": 0, "source": "p1:L22" }
],
"request_draft": ""
}
1つ目の理由は、照合と期限の計算をプログラムの側に置けることです。 Python が決済の記録と予約を引き、対応表から資料を引いて、案件ごとに印を付けます。
| 印 | 付ける条件 |
|---|---|
ok | 回答期限が日付で確定し、決済の記録と予約が1件に特定でき、理由コードが対応表にある |
deadline_unclear | 期限の日付が ambiguous、または相対の書き方で送り元の数え方が一覧に無い |
booking_not_found | 決済の記録が見つからない、または予約に戻れない |
multi_match | 金額・日付・下4桁の組で複数の決済が当たる |
needs_human | 理由コードが対応表に無い、unreadable の項目がある、または通知でない書類 |
2つ目は、社内の期限を一律に置けることです。 通知の期限から3営業日前を社内の期限とし、館への資料の依頼はさらにその3営業日前に締めます。期限が確定しない案件は、それだけで印が付きます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ(Amazon S3) | 保存の通知 | 通知の保存を検知して AWS Lambda を動かす |
| AWS Textract | API呼び出し(非同期) | 読み取りを始め、完了の通知で結果を取る |
| Claude API | API呼び出し | 項目の取り出し、館への依頼文の下書き |
| 決済の記録 | 決済代行から毎日出すCSV | 取引ID・金額・日付・下4桁・注文番号を読む |
| PMS | 館ごとの予約の出力 | 予約・キャンセル・ノーショー・チェックインの記録を読む |
| 台帳 | 書き込み | 案件ごとの印、資料の一覧、社内の期限を書く |
決済代行への回答の提出は、この構成からは行いません。 Stripe のドキュメントでは、回答を提出する機会は1回のみで、提出後は回答を編集したり、追加のファイルを送ったりできないとされています。決済代行によって扱いは違いますが、一度きりの提出を自動にする理由はありません。 資料をまとめて提出するのは、責任者の判断を経た担当者です。
人が確認する
経理の担当者が開くのは、ok 以外の印が付いた案件です。 ok の案件は、期限と資料の一覧を並べた台帳で流し見ます。
deadline_unclearを最初に片付ける … 期限が確定しない案件は、通知の画像と送り元の決まりで期限を確定させます。期限が決まらないうちは、他の作業に進みませんbooking_not_foundとmulti_matchの予約を確かめる … 決済代行の管理画面で取引を開き、館と予約を特定します- 資料の一覧を確かめて館に依頼する … 下書きを直して、館のフロントに送ります
- 反論するかを責任者に上げる … 集まった資料と宿泊客の主張を並べ、責任者と支配人に決めてもらいます
提出する資料のまとめ方にも決まりがあります。 Stripe のドキュメントでは、反証資料ファイルのサイズを合計で最大4.5MB、Mastercard の反証資料は合計で最大19ページまでに制限し、音声や動画のファイル、クリックすると詳細が表示されるリンクは含めないよう案内されています。館から集めた資料を担当者がそのまま束ねると、上限を超えることがあります。
例外に対処する
| 起きること | 対応 | |||
|---|---|---|---|---|
| パスワードで保護されたPDF | 読めない。送り元に解除したものを頼む | |||
| 6言語に入らない通知 | 読み取りに回さず、担当者が目で見る | |||
| 期限が相対の書き方で、数え方が一覧に無い | deadline_unclear。送り元に確認し、一覧に足す | |||
| 日と月の順序が決まらない | ambiguous。画像と送り元の書式で人が確定する | |||
| 決済の記録が見つからない | booking_not_found。OTAの決済の明細も探す | |||
| 同じ金額・日付・下4桁の決済が複数ある | multi_match。承認番号か取引IDで人が絞る | |||
| 理由コードが対応表に無い | needs_human。意味を調べて対応表に足すのは責任者の確認を経て | ジョブが FAILED または PARTIAL_SUCCESS | StatusMessage と Warnings のページ番号を記録し、そのページを人へ |
上から3行目と4行目が、取り返しのつかない失敗のほとんどを生みます。 どちらも回答期限という1つの値の問題で、ここを人に回す設計を崩すと、台帳の期限そのものが当てにならなくなります。
記録を残す
- 元の通知と、受け取った日時、送り元、メールの件名
- AWS Textract が返したJSONの全文と、使った質問の一覧
- Claude API が返したJSON(原文と解釈の両方)
- 照合の結果と、そのとき参照した決済の記録と対応表の版
- 担当者が期限や予約の特定を直した記録 … どの値を、どう変えたか、誰が確かめたか
- 反論か受け入れかの判断と、提出した日、結果の通知との対応
最後の行は、対応表を育てる材料になります。 理由コードごとに、反論した件数と結果の件数を並べると、集める資料が足りていない理由が見えてきます。 Stripe のドキュメントでは、カード保有者の銀行が内容を審査して結果を決め、確認には最長で3か月かかる場合があるとされています。結果の通知は、元の行に付けておきます。
04実装レベルの3段階
本記事の想定は半自動化です。 読み取りと照合と期限の管理が自動になり、担当者は印の付いた案件を確かめて館に資料を頼みます。1件45分が15分になるのはこの段階です。 本格構成で足すのは、資料の収集です。 キャンセルポリシーの同意の記録、チェックインの記録、宿泊客とのメールをPMSから自動で集め、館のフロントが記録を探す作業を減らします。 ただし、どの資料を出すかと提出は、引き続き人が決めます。 段階を飛ばさないでください。 半自動化の間に、booking_not_found を繰り返す送り元と対応表に無い理由コードを洗い出しておきます。
05工数削減シミュレーション
導入後 60件 × 15分 ÷ 60 = 15 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 訪日客の比率が高く、自社の予約サイトで海外発行のカードを受け付けているホテル・旅館のグループ。海外の決済代行やアクワイアラーから英文のチャージバック通知がメールのPDFで届き、月に数十件の案件を経理とフロントでやり取りしながら回答している場合。予約と滞在の記録は館ごとのPMSにあり、通知の案件番号から該当の予約を探すのに時間がかかっている場合。
- チャージバックが年に数件しかない施設。決済代行の管理画面の中だけで通知の確認から反証資料の提出までが完結しており、PDFの通知を読む工程が無い場合。通知が英語以外(中国語・韓国語・日本語など)で届く場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めず、手書きは英語のみです)。なお、反論するか受け入れるかの判断と、カード会社への回答の中身は、経理の責任者と各館の支配人が決めるもので、この構成では代替できません。
07最小構成で試す方法
- 先月までに届いた通知から20件を選ぶ(期限が相対の書き方のもの、日付が
05/11/2026のような書き方のもの、番号だけで説明の無いものを必ず入れる) - 手元の生成AIの画面に1件ずつ貼り付け、「この通知のケース番号、カードのブランド、理由コード、金額、取引日、回答期限、求められている資料を、書かれたとおりに表にしてください。日と月の順序が決まらない日付は『順序不明』とし、期限が『〜日以内』なら文のまま書いてください。理由コードの意味は書かないでください」と指示する
- 出てきた表を、当時の台帳と見比べる
- 当時の期限の転記に誤りや空欄があった案件を数える
20件は必ずやってください。 仕組みを組む前に、期限を勝手に日付へ直さないか、理由コードの意味を書き添えないかを確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 期限と理由コードを原文どおりに取り出した | OCRのAPIと照合の処理に進む |
| 相対の期限を日付に直した | 指示で禁じ、文のまま返させる。直るまで先に進まない |
| 理由コードの意味を書き添えた | 意味を書かない指示を足す。構成は有効 |
08実装時につまずきやすいポイント
| 問題 | 対策 | |||
|---|---|---|---|---|
| 相対の期限を日付に直して返す | 文のまま返させ、計算は送り元の決まりで Python が行う | |||
| 日と月の順序を取り違える | 順序が決まらない日付は解釈させず、原文を残す | |||
| 理由コードに別のブランドの意味を書き添える | 番号だけを写させ、意味は対応表から引く | |||
| 取引日を宿泊の日として探して予約が見つからない | 決済の記録を先に引き、注文番号から予約に戻る | |||
| 同じ金額の決済が複数当たる | multi_match で人へ。承認番号か取引IDで絞る | |||
| 続報で別の行ができる | ケース番号で同じ行の履歴に付ける | 資料を束ねると上限を超える | 決済代行の上限の大きさとページ数を一覧に持ち、束ねる前に確かめる | |
| 提出を自動にしてしまう | 一度きりの提出は人が行う |
上の2行が、この構成の失敗のほとんどです。 どちらも回答期限という1つの値の誤りで、期限が1日ずれると、反論の準備そのものが間に合わなくなります。 期限を原文と解釈に分け、決まらないものは人に回す設計で守ります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: カード会員の氏名、カード番号の下4桁、取引の金額と日付、宿泊客の予約と滞在の記録、宿泊客が申し立てた主張の文です。宿泊客の個人情報と、カードの取引の情報を同時に扱います。
- 外部へ渡す範囲を、取り出しに必要なものに限る … 生成AIに渡すのは通知の読み取り結果と送り元の区分だけです。PMSの予約、宿泊客のメール、決済の記録は渡しません。 照合は社内の Python で行います
- カード番号の全桁を扱わない … 通知に全桁が書かれていることはまずありませんが、読み取り結果に桁の多い番号が出たら、保存の前に下4桁を残して消します
- 反論するかを判定させない … この構成が出すのは照合の印と資料の一覧までで、受け入れるか反論するかは責任者と支配人が決めます
- 提出を自動で行わない … 提出は一度きりで、直したくても直せません。 担当者が資料を確かめてから送ります
誤りが起きた場合のリスクは、反論できた案件を期限切れで失うことと、違う予約の資料を出して反論を崩すことの2つです。 前者は期限の読み違いから、後者は予約の取り違えから起きるので、値を原文のまま残し、照合は規則で行う設計を崩さないでください。
10まず何から始めるか
1週目:理由コードの対応表を作る
過去1年の案件から、ブランドと理由コードの組を書き出し、それぞれに出した資料と結果を並べます。 件数の多い上位10の組から、反証に要る資料の一覧を経理の担当者と館の支配人で決めます。この作業だけで、1人の頭の中にあった対応が表になります。
2週目:20件で試す
過去の通知から20件を選び、手元の生成AIの画面で項目を表にさせます。相対の期限を日付に直さないか、理由コードの意味を書き添えないかを最優先で見ます。
3週目:送り元ごとの期限の数え方を決める
送り元の決済代行とOTAについて、期限が暦日か営業日か、通知の日付から数えるのかを一覧にします。分からない送り元には、問い合わせて確かめます。 社内の期限を通知の期限の何営業日前に置くかも、ここで決めます。
4週目:受付フォルダから台帳までをつなぐ
S3、Lambda、Textract、Claude API、Python の照合をつなぎ、台帳に1行を書くところまで作ります。この時点では、案件の多い3館の予約だけを照合の対象にします。
2か月目: 対象を12館に広げ、booking_not_found と deadline_unclear の件数を毎週数えて、決済の記録の取り込みと期限の一覧を直します。3か月目以降: 館への依頼の下書きを足し、1件45分が何分になったかを実測します。期限を過ぎて自動的に負けた案件が台帳から消えた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 不審請求の申し立てに回答できる期間が通常カードネットワークにより7日から21日で、期限までに回答しなければ自動的に敗れること。回答を提出する機会は1回のみで、提出後は編集も追加のファイルの送信もできないこと。反証資料ファイルを合計で最大4.5MB、Mastercard は合計で最大19ページまでに制限し、音声・動画・リンクを含めないこと。カード保有者の銀行が審査して結果を決め、最長で3か月かかる場合があること | Stripe: 不審請求の申し立てへの対応 | 2026-10-07 |
| 理由コードがカテゴリー(未処理のクレジット、重複支払い、不正使用、商品が届かない など)に整理されていること。Mastercard の 4853・4859 にノーショーに対する宿泊料、American Express の C18 に「ノーショー」または車両デポジットのキャンセル、170 に宿泊予約施設のキャンセルの項目があること。オフラインサービスではキャンセルポリシーの文言や提示の方法、顧客とのやり取りが反証資料になること | Stripe: 不審請求の申し立て理由コードのカテゴリー | 2026-10-07 |
| 対応する形式がJPEG、PNG、PDF、TIFFであること。同期はPDF1ページ・10MB、非同期はPDFとTIFFで500MB・3,000ページであること。PDFはパスワードで保護できないこと。対応言語が英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語で、質問の検出は英語の文書だけであること。質問は非同期で1ページ30個までであること。手書きは英語のみであること | AWS: Set Quotas in Amazon Textract | 2026-10-07 |
StartDocumentAnalysis の FeatureTypes(TABLES/FORMS/QUERIES/SIGNATURES/LAYOUT)、QueriesConfig、ClientRequestToken、JobTag、NotificationChannel で Amazon SNS に完了を通知すること | AWS: StartDocumentAnalysis | 2026-10-07 |
GetDocumentAnalysis の JobStatus(SUCCEEDED/FAILED/PARTIAL_SUCCESS ほか)、MaxResults(最大1,000)と NextToken、StatusMessage、Warnings | AWS: GetDocumentAnalysis | 2026-10-07 |
| 質問の応答が QUERY と QUERY_RESULT のブロックで返り、別名(Alias)と信頼度を持つこと。答えが見つからなければ空のまま返ること | AWS: Queries | 2026-10-07 |
構造化出力を output_config.format に json_schema を指定して受け取れること | Claude Docs: Structured outputs | 2026-10-07 |
回答期限の長さや提出の上限は、決済代行とカードのブランドによって違います。 本記事は Stripe のドキュメントで確認できた範囲を例として扱っており、自社が契約する決済代行の規定を必ず確かめてください。反論するか受け入れるかの判断は、経理の責任者と館の支配人が行うものです。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0786)についてのご相談はこちらから。
