海外の取引先から届く英文の送金明細(Remittance Advice)を読み取り、請求書ごとの支払額・銀行手数料・相殺を拾って、入金の消込の候補と差額の理由を出す
海外の取引先から届く英文の送金明細を読み取り、請求書番号ごとの支払額・相殺・差し引かれた銀行手数料を明細の行にそろえます。銀行の入金の記録と売掛金の明細に照らし、消込の候補と、入金額が請求額と合わない理由の候補を財務担当に回します。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- 商社/製造
- 対象部門
- 経理/財務
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 入力作業が多い/判断に時間がかかる/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/判断支援/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- インターネットバンキングで、その日の外貨の被仕向送金の到着の記録を確かめる
- 取引先から届いた送金明細のPDFをメールから探し、到着の記録と依頼人の名前・金額で対応を付ける
- 送金明細の請求書番号と金額を、販売管理の仕組みの売掛金の明細と1行ずつ照らす
- 送金明細の合計と入金額の差を出し、手数料か、相殺か、説明の無い不足かを分ける
- 取引先の条件の一覧を見て、手数料を費用に落とすか、取引先に請求し直すかを決める
- 会計の仕組みで消込を入力し、残った差を営業に知らせる
- 人財務担当が、取引先から届いた送金明細のPDFを受け取りの場所(Amazon S3)に保存する。メールの受信から自動で保存してもよい
- 自動保存をきっかけに、AWS Textract が表と項目の読み取りを非同期で始める
- 自動プログラムが表のセルから「請求書番号・請求額・支払額・差し引き額・理由」の行を組み立てる
- 自動Claude API が、差し引きの行の文を決められた区分に当てはめ、参照しているクレジットノートの番号などを根拠の文と一緒に写す
- 自動プログラムが、銀行の被仕向送金の到着の記録と依頼人・金額・日付で対応を付け、売掛金の未消込の明細と請求書番号で照らす
- 自動プログラムが、取引先の条件の一覧から手数料の取り決めを引き、差額を「中継銀行の手数料の見込み」「取引先が差し引いた手数料」「相殺」「説明の無い不足」に分けて、消込の候補を出す
- 人財務担当が、照合できなかった行と説明の無い差のある入金を先に見て、消込の候補を直す
- 人財務担当が消込を会計の仕組みに入力し、請求し直す差額は営業に知らせる
各工程の詳しい説明を読む
- インターネットバンキングで、その日の外貨の被仕向送金の到着の記録を確かめる
- 取引先から届いた送金明細のPDFをメールから探し、到着の記録と依頼人の名前・金額で対応を付ける
- 送金明細の請求書番号と金額を、販売管理の仕組みの売掛金の明細と1行ずつ照らす
- 送金明細の合計と入金額の差を出し、手数料か、相殺か、説明の無い不足かを分ける
- 取引先の条件の一覧を見て、手数料を費用に落とすか、取引先に請求し直すかを決める
- 会計の仕組みで消込を入力し、残った差を営業に知らせる
(a)写すだけで時間がかかる。 1件の送金明細に請求書が10行並ぶことは珍しくありません。請求書番号の先頭の0が落ちている、取引先側の注文番号が書かれている、自社の請求書番号の枝番が無いといった書き方の違いを見ながら、売掛金の明細を探します。
(b)差額の理由が送金明細と銀行の記録に分かれている。 相殺は送金明細に書かれ、途中の銀行が差し引いた手数料は送金明細には書かれず、入金額が少なくなるだけです。取引先が「Less bank charges」と自分で差し引き、その上に途中の銀行がさらに差し引くと、差額は二重になります。
(c)差額の扱いが担当者で違う。 30ドルの不足を手数料として費用に落とす担当者と、取り決めどおり取引先に請求し直す担当者がいます。取引先の条件の一覧を見に行く手間を省くと、扱いは担当者の感覚で決まり、どの入金でいくら差があったかを後から並べられません。
(d)相殺の根拠を追えない。 「Less CN」とだけ書かれた行は、どのクレジットノートの分かが分からないことがあります。同じ値引きが二度差し引かれていても気づきません。
- 【人】 財務担当が、取引先から届いた送金明細のPDFを受け取りの場所(Amazon S3)に保存する。メールの受信から自動で保存してもよい
- 【自動】 保存をきっかけに、AWS Textract が表と項目の読み取りを非同期で始める
- 【自動】 プログラムが表のセルから「請求書番号・請求額・支払額・差し引き額・理由」の行を組み立てる
- 【自動】 Claude API が、差し引きの行の文を決められた区分に当てはめ、参照しているクレジットノートの番号などを根拠の文と一緒に写す
- 【自動】 プログラムが、銀行の被仕向送金の到着の記録と依頼人・金額・日付で対応を付け、売掛金の未消込の明細と請求書番号で照らす
- 【自動】 プログラムが、取引先の条件の一覧から手数料の取り決めを引き、差額を「中継銀行の手数料の見込み」「取引先が差し引いた手数料」「相殺」「説明の無い不足」に分けて、消込の候補を出す
- 【人】 財務担当が、照合できなかった行と説明の無い差のある入金を先に見て、消込の候補を直す
- 【人】 財務担当が消込を会計の仕組みに入力し、請求し直す差額は営業に知らせる
4番目と6番目を分けているのが、この設計の分かれ目です。 「Less 2% early payment discount」が値引きか、「Deduct claim ref. Q-118」が品質のクレームの相殺かを分けるのは言葉を扱う作業で、規則では書き切れません。一方、その差を認めるか請求し直すかは、取引先との取り決めの問題です。 AIには区分までをさせ、扱いは取引先の条件の一覧から規則で決めます。区分を後から直しても、照合をやり直すだけで済みます。
6番目で「中継銀行の手数料」を「見込み」としているのは、その金額がどこにも書かれていないことが多いからです。 相殺などで説明できない残りを、負担の区分と照らして候補にするだけです。
02今回想定するシステム構成
送金明細(英文のPDF。取引先からメールで届く) │ メールの添付を受け取りの場所へ保存 ▼【トリガー】Amazon S3 への保存 AWS Lambda ── StartDocumentAnalysis(FeatureTypes:TABLES、FORMS、QUERIES) ▼ AWS Textract(非同期の文書分析)── 完了の通知(Amazon SNS) ▼ AWS Lambda ── GetDocumentAnalysis ├──▶ Python:表のセルから請求書ごとの行を組み立てる ├──▶ Claude API:差し引きの行の区分と参照番号(根拠の文付き) ├──▶ Python:銀行の到着の記録との対応付け └──▶ Python:売掛金の明細との照合と差額の分解 ▼ 消込の候補と確認事項の一覧(財務担当が確認) ▼ 会計の仕組みへの消込の入力(人)/営業への差額の連絡
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | AWS Textract(StartDocumentAnalysis/GetDocumentAnalysis。TABLES・FORMS・QUERIES) | Azure AI Document Intelligence、Google Document AI |
| 生成AI | Claude API(差し引きの行の区分と参照番号の書き出し) | OpenAI API、Gemini API |
| 差異計算 | Python(請求書番号の照合、入金額との差の分解、消込の候補) | 会計の仕組みの消込の補助機能 |
| 連携 | AWS Lambda(保存と完了の通知を起点に処理を動かす) | AWS Step Functions |
| 保管 | Amazon S3(送金明細の原本、読み取り結果、確認の記録) | 社内のファイルサーバー |
土台は、AWS Textract の表の読み取りです。 送金明細の多くは「Invoice No./Invoice Date/Invoice Amount/Discount/Amount Paid」の列を持つ表で、行と列の対応が崩れると、ある請求書の支払額が隣の請求書に付きます。 Textract の表の機能は、セルごとに行の番号と列の番号を返し、列の見出しのセルや表の題名・脚注も区別して返すとされています。2ページ以上の送金明細があるので、非同期の StartDocumentAnalysis を使います。
Textract を選べるのは、送金明細が英文だからです。 公式の対応言語は英語・フランス語・ドイツ語・イタリア語・ポルトガル語・スペイン語で、手書きは英語だけ、問い合わせ(クエリ)は英語の文書でだけ使えます。日本の取引先から届く日本語の支払通知書には使えません。 国内分は UC-0454 のように別の読み取りのサービスで扱います。
販売管理の仕組みと会計の仕組みには書き込みません。 消込の候補は財務担当が確かめてから会計の仕組みに入力します。
03どうやって実装するのか
処理の起点を決める
受け取りの場所(S3 のフォルダ)にPDFが保存されたことを起点にします。 財務部の共有のメールアドレスに届いた添付を remit/<受信日>/ へ保存します。手で保存する運用から始めても、そこから先は同じです。
読み取りを始めるとき、ClientRequestToken に「受信日+メールの識別子+添付の番号」を入れます。 公式のページでは、同じトークンで StartDocumentAnalysis を呼ぶと同じ JobId が返り、同じジョブを誤って二度始めるのを防げるとされています。完了は Amazon SNS の通知で受け、JobTag でどのファイルかを知ります。JobId は7日間だけ有効なので、結果はその場で S3 に保存します。
銀行の到着の記録は、毎朝インターネットバンキングから前日分を書き出して置きます。 入金は送金明細より遅れることが多いので、先に届いた送金明細は「入金待ち」として保留し、到着の記録が来た日に照合をやり直します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 送金明細 | 支払者の名前、支払日、通貨、支払の合計、請求書番号ごとの請求額・支払額・差し引き額・理由の文、銀行の参照番号 | 取引先から届くPDF |
| 読み取り結果 | 表のセル(行・列・見出し)、キーと値の組、問い合わせの答え、行と単語、信頼度 | AWS Textract |
| 被仕向送金の到着の記録 | 到着日、依頼人の名前、通貨、送金の金額、入金した金額、手数料の負担の区分、依頼人からのメッセージ | 取引銀行のインターネットバンキングから書き出したファイル |
| 売掛金の未消込の明細 | 取引先コード、請求書番号、請求日、通貨、請求額、未消込の残高、発行済みのクレジットノートの番号と金額 | 販売管理の仕組みから書き出したファイル |
| 取引先の条件の一覧 | 送金の手数料の取り決め(買い手の負担/それぞれの負担/決めていない)、差額を費用に落としてよい上限、取引先側の名前の書き方の一覧 | 営業と財務が整える表計算のファイル |
質を決めるのは、いちばん下の取引先の条件の一覧です。 手数料の取り決めが無いと、差額を「取り決めどおり」と「請求し直す候補」に分けられません。差額を費用に落としてよい上限も、先に決めて書いておきます。 書いていない取引先は、差額のある入金をすべて人に回します。
依頼人の名前は、親会社や支払を代行する会社の名前で届くことがあります。 一覧に無い名前の入金は、金額が合っていても自動では対応を付けません。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 請求書ごとの行 | TABLES の TABLE・CELL のブロック(行の番号・列の番号・列の見出し) | 請求書番号・請求額・支払額・差し引き額・理由の行の組み立て |
| 支払者・支払日・通貨・合計 | QUERIES の QUERY_RESULT、FORMS のキーと値の組 | 到着の記録との対応付け |
| 銀行の参照番号 | QUERIES の QUERY_RESULT、LINE のブロック | 到着の記録の参照番号との照合 |
| 表の外の注記 | 表の脚注(TABLE_FOOTER)、LINE のブロック | 「Bank charges for beneficiary's account」などの注記 |
表は、TABLE のブロックから CELL を行の番号・列の番号の順に並べて組み立てます。 公式のページでは、セルには行と列の位置が付き、列の見出しのセルには COLUMN_HEADER の印が付くとされています。見出しのセルの文字から、どの列が請求書番号・請求額・支払額・差し引き額かを決めます。見出しの言い方は取引先ごとに違う(Invoice No./Document No./Your Reference、Amount Paid/Payment Amount/Net など)ので、言い換えの一覧を持ちます。
合計の行にも気を付けます。 公式のページでは、合計の行のセルに TABLE_SUMMARY の印が付くことがあるとされています。請求書の行として数えると支払額が二重になるので、送金明細の合計として別に持ち、行の合計との一致を確かめます。
問い合わせは、表の外にある項目だけに使います。
| 問い合わせ(Text) | Alias |
|---|---|
| What is the name of the payer? | PAYER |
| What is the payment date? | PAY_DATE |
| What is the total payment amount? | PAY_TOTAL |
| What is the currency? | CURRENCY |
| What is the bank reference number? | BANK_REF |
**問い合わせには Pages: ["*"] を付けます。 公式のページでは、ページを指定しないと既定で1ページ目だけに当てる**とされ、最後のページにある合計が空で返ります。
結果は NextToken が返る限り GetDocumentAnalysis を呼び続け、全ページ分をそろえてから組み立てます。 公式のページでは、1回で返るブロックは最大1,000件とされています。
AIへ渡す前に整形する
- 形式の確認 … JPEG、PNG、PDF、TIFF のどれかであることを確かめます。XFA の形式のPDFとパスワードで保護されたPDFは扱えないとされています。取引先の仕組みがパスワード付きで送ってくる場合は、取引先に外してもらうか、財務担当が外してから保存します
- ページをまたぐ表のつなぎ … 次のページの表の列の見出しが同じなら、1つの表としてつなぎます
- 金額の読み方の統一 … 「1.234,56」(欧州の書き方)と「1,234.56」を、取引先ごとの設定で読み分けます。設定の無い取引先で区切りが1つだけの金額は人に回します
- 負の数の読み方 … 「(120.00)」「-120.00」「120.00 CR」を差し引きの値として読みます
- 請求書番号の正規化 … 先頭の0、ハイフン、取引先側で付けた接頭辞を外した形を別に作ります。元の文字列も残し、照合の根拠として使います
3番目を軽く見ないでください。 「1.250」が1,250ユーロか1.25ユーロかを取り違えると、消込が1,000倍ずれます。 取引先ごとに設定し、送金明細の合計と行の合計の一致で確かめます。
AIに処理させる
させるのは、差し引きの行の文を区分に当てはめることと、参照している番号を写すことだけです。 読み取りは Textract、照合と計算はプログラムが行います。
| させること | 中身 | できないときの扱い |
|---|---|---|
| 差し引きの区分 | 行の文を、値引き・クレジットノート・品質のクレーム・リベート・取引先が差し引いた銀行手数料・前払いや過払いの充当・その他のどれかに当てはめる | 文から決められなければ unclear |
| 参照番号の書き出し | 文の中にあるクレジットノートの番号、クレームの番号、請求書番号を、そのまま写す | 無ければ空にする |
| 注記の区分 | 表の外の注記が、手数料の負担について書いたものかを分ける | 決められなければ unclear |
| 根拠の文 | 判断に使った文を、そのまま写す | 必ず埋める |
差し引きの区分は、その差し引きを認めるかの判断ではありません。 値引きに分けても、それを認めているかは取り決めで決まります。
| させないこと | 理由 |
|---|---|
| 金額の計算と合計 | プログラムが読み取った値から計算する |
| どの請求書に充てるかの決定 | 請求書番号の照合で決め、決まらなければ人が決める |
| 差額を誰が負担するかの結論 | 取引先との取り決めと、財務担当・営業の判断で決まる |
| 書かれていない手数料の金額の推定 | 送金明細と到着の記録の差からプログラムが出す |
| 請求書番号の補い | 番号が書かれていない行に、金額の近い請求書を当てない |
4行目がいちばん起きやすい失敗です。 合計と入金額の差を見せると、AIは「中継銀行の手数料と思われる」と金額まで書きがちです。AIには入金額を渡しません。 差の分解はプログラムが行います。
指示内容を固定する
あなたは商社の財務部で、海外の取引先から届いた送金明細(Remittance Advice)の
差し引きの行を整理する担当者を手伝います。
渡された「行の一覧(行番号・請求書番号・請求額・支払額・差し引き額・理由の文)」と
「表の外の注記」と「区分の表」だけを見てください。
【やること】
- 差し引き額のある行ごとに、deduction_type を次のどれかで付けてください。
discount ........ 早期の支払・数量などの値引きと書かれている
credit_note ..... クレジットノート(CN、Credit Memo)の充当と書かれている
claim ........... 品質・数量・遅れのクレームと書かれている
rebate .......... リベート・販売奨励と書かれている
bank_charge ..... 取引先が銀行の手数料を差し引いたと書かれている
prepayment ...... 前払い・過払いの充当と書かれている
other ........... 上のどれでもないが、理由は書かれている
unclear ......... 理由が書かれていない、または文から決められない
- 文の中にある番号を、ref_numbers にそのまま写してください(例:CN 2611-08)。
- 表の外の注記ごとに、note_type を charge_terms(手数料の負担の書き方)か
other か unclear で付けてください。
- evidence には、判断に使った文をそのまま写してください。
【厳守事項】
- 金額を計算しないでください。渡された値をそのまま返してください。
- 差し引きを認めるか、請求し直すかを書かないでください。
- 誰が手数料を負担すべきかを書かないでください。
- 理由の文が「Deduction」「Adj.」だけの行は unclear です。
- 番号が書かれていない行に、番号を補わないでください。
- 迷ったときに discount や bank_charge を選ばないでください。unclear にしてください。
「Deduction だけの行は unclear」を例として書くのは、AIが前後の行から理由を補いがちだからです。 補った区分で消込を済ませると、自社が発行していないクレジットノートの分を認めることになります。 bank_charge を独立の区分にしているのは、取引先が自分で差し引いた手数料を、途中の銀行の手数料と分けるためです。
出力形式を固定する
区分は、Claude API の構造化出力で形を決めて受けます。 公式のページでは、output_config.format に JSON スキーマを渡すと、スキーマに合う JSON が返るとされ、正式提供の機能です。ただし、数値の minimum/maximum などの制約はスキーマに書けないとされているので、値の範囲はプログラムで確かめます。
{
"advice_id": "remit/2026-10-14/msg-0412-1",
"rows": [
{ "row_no": 3, "invoice_ref": "INV-26-07731",
"deduction_type": "credit_note", "ref_numbers": ["CN 2611-08"],
"evidence": "Less CN 2611-08 price adjustment" },
{ "row_no": 6, "invoice_ref": "INV-26-07802",
"deduction_type": "unclear", "ref_numbers": [],
"evidence": "Adj." }
],
"notes": [
{ "note_type": "charge_terms",
"evidence": "All bank charges outside our country are for beneficiary's account" }
]
}
プログラムは、これに照合と差額の分解の結果を足して消込の候補にします。
{
"currency": "USD",
"advice_total": 48210.00,
"received_amount": 48175.00,
"matches": [
{ "invoice_no": "INV-26-07731", "open_amount": 12400.00,
"paid": 11900.00, "credit_note": "CN-2611-08", "cn_amount": 500.00,
"status": "matched" }
],
"gap": { "advice_vs_received": 35.00,
"explained_by": "intermediary_charge_estimate",
"charge_terms": "SHA", "within_writeoff_limit": true },
"checks": [ "row_6_unclear_deduction" ]
}
形を分けるのは、区分と照合を別の層に置くためです。 rows はAIが埋め、matches と gap はプログラムが決めます。区分を1行直せば照合はやり直すだけで済み、差額の根拠も入金ごとに残ります。
checks | 決め方(プログラム) |
|---|---|
| invoice_not_found | 正規化しても売掛金の明細に無い請求書番号がある |
| cn_not_issued | 書き出したクレジットノートの番号が、発行済みのものに無い |
| unclear_deduction | deduction_type が unclear の行がある |
| total_mismatch | 行の合計と送金明細の合計が合わない |
| gap_over_limit | 説明できない差が、費用に落としてよい上限を超える |
| double_charge | 取引先が差し引いた手数料があり、さらに入金額が送金明細の合計より少ない |
| awaiting_receipt | 送金明細に対応する到着の記録がまだ無い |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| Amazon S3 | 保存の通知で Lambda を動かす | 送金明細の原本と到着の記録を受ける |
| AWS Textract | StartDocumentAnalysis/GetDocumentAnalysis | 表のセル・キーと値の組・問い合わせの答え・行・信頼度 |
| Amazon SNS | 完了の通知 | JobTag でファイルを知る |
| 売掛金の未消込の明細 | 書き出したファイルを読む | 読み取りだけ |
| 取引先の条件の一覧 | 書き出したファイルを読む | 読み取りだけ |
| Claude API | API呼び出し(構造化出力) | 差し引きの区分と参照番号 |
| 財務担当 | 消込の候補と確認事項を共有の場所に置き、チャットで知らせる | 確認、修正、会計の仕組みへの入力 |
会計の仕組みへの消込の入力は人が行います。 候補の数字がそのまま消込になると、誤りがそのまま売掛金の残高に進みます。取引先の条件の一覧にも書き込みません。 消込の都合で条件を書き換えると、契約と扱いが食い違います。
人が確認する
財務担当が全件の消込の候補を見ます。 見る順を決めておきます。
checksのあるものを先に見る … 照合できない請求書番号、合計の不一致を原本で確かめますunclearの行とcn_not_issuedを読む … 原本の文を読み、必要なら取引先の経理に問い合わせますgap_over_limitとdouble_chargeを確かめる … 差額を取引先に請求し直すかを、取引先の条件と営業の意見で決めます- 会計の仕組みに消込を入力する … 候補を確かめたものだけを入力します
- 請求し直す差額を営業に知らせる … 取引先への連絡は営業と財務担当が行います
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワード付き・XFA のPDF | 読めない。取引先に送り直してもらうか、外してから保存 |
| 表として読めない(文だけの送金明細) | LINE のブロックから行を組み立てる。組み立てられなければ人へ |
| 請求書番号が売掛金の明細に無い | invoice_not_found。金額の近い請求書に当てない |
| 1つの送金で複数の取引先の分が払われる | 名前の書き方の一覧で分け、分けられなければ人へ |
| 送金明細の通貨と入金の通貨が違う | 取引先が別の通貨で払った。照合を止め、人が換算と扱いを決める |
| 入金はあるが送金明細が届かない | 到着の記録のメッセージ欄から候補を出し、確定は送金明細を取り寄せてから |
5行目が、この構成で最も守りたいことです。 通貨が違う入金を換算して自動で照合すると、相場の差を手数料の差と取り違えます。
記録を残す
- 送金明細の原本と、受け取ったメールの識別子・受信日
- Textract が返した結果の全文と、組み立てた行の一覧
- AIの区分の結果(
rows、notes)と根拠の文 - 照合と差額の分解の結果(
matches、gap、checks)と、そのとき使った取引先の条件 - 財務担当が直した消込 … どの行を、どの請求書に、なぜ充て直したか
- 請求し直した差額と、営業に知らせた日
4つ目で「そのときの取引先の条件」を残すのは、取り決めが後から変わるためです。 当時の条件が残っていないと、どの入金をやり直すかが決まりません。
04実装レベルの3段階
半自動化で、1件15分が4分になり、この段階が本記事の想定です。 写す作業と差の計算は無くなり、人は照合できない行と理由の付かない差を確かめます。 本格構成は、消込の入力の件数が多い会社で検討します。 ただし、その前に取引先の条件の一覧と差額の上限を半年回して固めておく必要があります。
05工数削減シミュレーション
導入後 360件 × 4分 ÷ 60 = 24 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 輸出の代金を米ドル・ユーロなどの外貨で受け取り、海外の取引先から英文の送金明細がメールのPDFで月に数百件届く商社・メーカーの財務部・経理部。1回の送金で複数の請求書がまとめて払われ、値引き・クレジットノートの相殺・銀行手数料の差し引きで入金額が請求額と合わず、財務担当が送金明細と銀行の到着の記録と売掛金の明細を並べて手で消し込んでいる場合。差額をどこまで取引先に請求し直すかの判断が担当者によって違う場合。
- 海外からの入金が月に数十件で、目で消し込んで足りる場合。取引先が送金明細を構造化されたデータ(銀行や決済の仕組みの電子の明細)で送ってきて、読み取りが要らない場合。送金明細が英語・フランス語・ドイツ語・イタリア語・ポルトガル語・スペイン語以外の言語だけで書かれている場合(この構成で使う読み取りのサービスはこの6言語に対応します)。なお、差額を取引先に請求し直すか、手数料として費用に落とすか、どの請求書に充てるかの判断は財務担当と営業が行います。この構成は消込の候補と差額の理由の候補を出すまでです。
07最小構成で試す方法
- 消込が終わった先月の入金から、取引先の違う送金明細を20件選ぶ(うち数件は、相殺と手数料が両方あったもの、欧州の取引先のものを入れる)
- AWS のコンソールで Textract の文書分析を開き、表の読み取りを有効にして読み取る
- 読み取った表を表計算に書き出し、当時の消込の記録と並べる
- 手元のAIサービスに、差し引きの行の文と区分の表を貼り、区分を付けさせる
- 付けた区分を、当時の担当者が判断した差額の扱いと比べる
区分が同じで扱いが違うなら、それは取り決めの問題で、AIの問題ではありません。
| 出てきた内容 | 判断 |
|---|---|
| 表が崩れずに読め、区分も当時の扱いと合った | 照合のプログラムの組み立てに進む |
| 欧州の書き方の金額や合計の行で数字がずれた | 前処理の設定で直る。構成は有効 |
| AIが理由の無い差し引きに理由を補った | 指示の縛りで直す。構成は有効 |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 合計の行を請求書の行として数える | TABLE_SUMMARY の印と、行の合計と送金明細の合計の一致で確かめる |
| 問い合わせの答えが最後のページから取れない | 問い合わせに Pages: ["*"] を付ける |
| 欧州の書き方の金額を取り違える | 取引先ごとに小数点の書き方を設定し、合計の一致で確かめる |
| 請求書番号の書き方の違いで照合できない | 正規化した形と元の文字列の両方で照合する |
| AIが理由の無い差し引きに理由を補う | 「Deduction だけの行は unclear」と例を示して縛る |
| 取引先が差し引いた手数料の上に、途中の銀行がさらに差し引く | double_charge で拾い、取り決めと照らして人が決める |
| 送金明細が先に届き、入金がまだ無い | 「入金待ち」として保留し、到着の記録が来た日に照合をやり直す |
6行目は、AIの問題ではなく手数料の負担の区分の問題です。 取引銀行の被仕向送金の到着の記録のデータには、手数料の負担の区分(OUR/SHA/BEN)の項目があります。三菱UFJ銀行の外為の手数料のページでは、送金銀行の指示で手数料が受取人の負担となる場合や、負担の指示が無い場合に、被仕向送金の手数料がかかるとされています。ゆうちょ銀行の案内でも、仲介の手数料は受取人の負担で送金の金額から差し引かれる扱いだけとされています。区分と取引先の取り決めを並べて見れば、差額が取り決めどおりかが分かります。ただし、実際に差し引かれる額は経由した銀行によって違うので、金額を規則で決めつけません。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 取引先の名前、請求書番号と金額、値引きやクレームの内容、送金の依頼人と口座に関わる情報、取引先ごとの手数料の取り決めです。個人情報は少ないものの、取引の条件と入金の記録そのものです。
- 生成AIに渡す範囲を絞る … 区分には、差し引きの行の文と表の外の注記と区分の表だけを渡します。入金額、口座の情報、取引先の条件の一覧は渡しません
- 受け取りの場所の権限を絞る … S3 のフォルダは財務部と処理のプログラムだけが読めるようにし、結果は KMSKeyId を指定した暗号化で保存します
- 消込の候補をそのまま入力しない … 財務担当が確かめてから会計の仕組みに入力します
- 取引先への連絡を自動にしない … 差額の請求し直しや問い合わせは、営業と財務担当が行います
- 区分を負担の判断として使わない … 区分は送金明細に書かれた理由の整理で、誰が差額を負担するかは取り決めと判断で決まります
誤りが起きた場合のリスクは、取引先が不当に差し引いた分を手数料として費用に落とすことと、取り決めどおりの手数料を取引先に請求し直して関係を損ねることの2つです。 どちらも区分か照合の規則の誤りから起きるので、区分は根拠の文を残し、扱いは取引先の条件から選ぶ設計で防ぎます。
10まず何から始めるか
1週目:取引先の条件の一覧を整える
営業と一緒に、入金の件数の多い取引先から、送金の手数料の取り決めと、差額を費用に落としてよい上限を書き出します。
2週目:20件で読み取りを試す
取引先の違う20件をコンソールで読み取り、当時の消込の記録と並べます。合計の行、ページをまたぐ表、欧州の書き方の金額で数字がずれないかを最優先で見ます。
3週目:区分を当時の扱いと比べる
手元のAIサービスで20件の差し引きの行を区分に分け、当時の担当者の扱いと比べます。理由の無い差し引きに理由を補っていないかを確かめ、指示を直します。
4週目:保存から照合までをつなぐ
保存を起点に読み取り、行を組み立て、区分を付け、到着の記録と売掛金の明細と照らすところまで作ります。照合は、件数の多い取引先の書式1つから始めます。
2か月目: 照合の規則を増やし、checks と unclear の件数を毎週数えます。3か月目以降: 1件15分が何分になったかを実測し、販売管理の仕組みへの登録を検討します。財務担当が替わっても同じ扱いで差額を分けられるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 対応する形式が JPEG・PNG・PDF・TIFF で XFA の形式のPDFは扱えないこと。パスワードで保護されたPDFは扱えないこと。非同期でPDFは3,000ページまでであること。対応言語が英語・フランス語・ドイツ語・イタリア語・ポルトガル語・スペイン語で、手書きは英語だけであること。問い合わせは英語の文書だけで、非同期で1ページ30件までであること | AWS: Set Quotas in Amazon Textract | 2026-10-15 |
| StartDocumentAnalysis の FeatureTypes に TABLES・FORMS・QUERIES・SIGNATURES・LAYOUT があること。文書を S3 に置くこと。完了の状態が SNS に通知されること。ClientRequestToken で同じジョブの二重の開始を防げること。JobTag が通知に含まれること。KMSKeyId で結果を暗号化できること。JobId が7日間だけ有効であること | AWS: StartDocumentAnalysis | 2026-10-15 |
| GetDocumentAnalysis が表を TABLE と CELL、キーと値の組を KEY_VALUE_SET、問い合わせを QUERY と QUERY_RESULT、行と単語を LINE と WORD のブロックで返すこと。1回で返すのは最大1,000件で、NextToken でページを送ること | AWS: GetDocumentAnalysis | 2026-10-15 |
問い合わせの Pages を指定しないと既定で1ページ目だけになること。* で全ページを指定できること | AWS: Query | 2026-10-15 |
| 表のセルに行と列の位置が付くこと。セルに COLUMN_HEADER・TABLE_TITLE・TABLE_FOOTER・TABLE_SECTION_TITLE・TABLE_SUMMARY の印が付くこと | AWS: Tables(Amazon Textract) | 2026-10-15 |
output_config.format に JSON スキーマを渡すとスキーマに合う JSON が返ること。正式提供の機能であること。数値の minimum/maximum などの制約に対応しないこと | Claude Docs: Structured outputs | 2026-10-15 |
| 送金銀行の指示で手数料が受取人の負担となる場合や、負担の指示が無い場合に、被仕向送金の手数料がかかること | 三菱UFJ銀行: 外為手数料 | 2026-10-15 |
| 海外への送金で、仲介の手数料を送金人の負担にはできず、受取人の負担(送金の金額から差し引く)の扱いだけであること | ゆうちょ銀行: よくあるご質問 No.1028 | 2026-10-15 |
| 被仕向送金の到着の案内のデータに、手数料の負担の区分(OUR/SHA/BEN)の項目があること | 三菱UFJ銀行: 被仕向送金到着案内 全銀フォーマット | 2026-10-15 |
差額を取引先に請求し直すか、手数料として費用に落とすか、どの請求書に充てるかは、取引先との取り決めにもとづいて財務担当と営業が決めてください。 本記事は公開されている製品の仕様と資料で確認できた範囲だけを扱っています。手数料の額と扱いは取引銀行と経由する銀行によって違います。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1590)についてのご相談はこちらから。
