Media > AI活用ユースケース > 経理 > 海外の仕入先から毎月届く英文の取引残高明細(Statement of Account)を読み取り、自社の買掛金の明細と1行ずつ照らして、未計上の請求・支払の行き違い・二重計上の候補を理由付きで出す

海外の仕入先から毎月届く英文の取引残高明細(Statement of Account)を読み取り、自社の買掛金の明細と1行ずつ照らして、未計上の請求・支払の行き違い・二重計上の候補を理由付きで出す

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

海外の仕入先から毎月届く英文の取引残高明細(Statement of Account)を読み取り、各行を自社の買掛金の明細と1行ずつ照らします。未計上の請求・支払の行き違い・二重計上の候補を、理由の候補を付けて担当者に返します。

サマリー
生成AI
ChatGPT/Claude/Gemini
AIサービス
AWS Textract/Azure AI/Google Document AI
連携・自動化
Python
対象業界
商社/小売/製造
対象部門
経理/購買
対象業務
内容確認・チェック/比較検討
主な課題
入力作業が多い/属人化している/確認ミスが多い
AIで行う処理
読み取り(OCR)
主な効果
入力漏れ削減/判断支援/工数削減
導入難易度
★★★☆☆
実装レベル
本格構成
費用感
API連携(中)
人間の確認
条件付き
現在工数
60h/月
AI導入後
16h/月
想定削減
73%
年間削減
528h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 共有の受信箱に届いた取引残高明細のPDFを開き、仕入先と基準日を確かめる
  2. 明細の各行を表計算に書き写す(日付、種類、請求書番号、借方・貸方の金額、残高)
  3. 基幹システムから、その仕入先の買掛金の明細と支払の記録を基準日までの分で出力する
  4. 請求書番号で1行ずつ突き合わせ、片方にしか無い行と金額の違う行に印を付ける
  5. 印の付いた行について、支払の記録、入荷の記録、受信箱の請求書を探して理由を調べる
  6. 理由が分からない行を仕入先に照会し、残高確認の回答を返す
導入後(After)
  1. 自動共有の受信箱に届いた取引残高明細のPDFを、受付フォルダに保存する
  2. 自動保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
  3. 自動OCRが明細の表をセル単位で、基準日と残高を質問への答えとして、信頼度付きで返す
  4. 自動生成AIが各行を請求・クレジットノート・入金・調整に分け、請求書番号と金額をそろえる
  5. 自動プログラムが自社の買掛金の明細・支払の記録と1行ずつ照らし、残高を検算する
  6. 自動差のある行に、規則で理由の候補(`not_booked`・`payment_in_transit`・`duplicate_booking`・`amount_diff`・`bank_charge` など)を付ける
  7. 人担当者が、理由の候補の付いた行と `needs_human` の行だけを確かめる
  8. 人自社の訂正が要るものを起票し、仕入先への照会と残高確認の回答を送る
各工程の詳しい説明を読む
  1. 共有の受信箱に届いた取引残高明細のPDFを開き、仕入先と基準日を確かめる
  2. 明細の各行を表計算に書き写す(日付、種類、請求書番号、借方・貸方の金額、残高)
  3. 基幹システムから、その仕入先の買掛金の明細と支払の記録を基準日までの分で出力する
  4. 請求書番号で1行ずつ突き合わせ、片方にしか無い行と金額の違う行に印を付ける
  5. 印の付いた行について、支払の記録、入荷の記録、受信箱の請求書を探して理由を調べる
  6. 理由が分からない行を仕入先に照会し、残高確認の回答を返す

(a)書き写しに時間の大半が消える。 数ページの明細を書き写すだけで15分かかり、桁を1つ写し間違えると、存在しない差を探して残りの時間を使います。

(b)請求書番号の書き方が一致しない。 仕入先は「INV-2026-0815」、自社の明細には「20260815」とだけ登録されている。同じ請求書なのに、機械的に突き合わせると「片方にしか無い行」が2つできます。

(c)入金の行が何を消し込んだかが分からない。 仕入先の明細の入金の行は「Payment received – Thank you」とだけ書かれていることが多く、どの請求書の支払かは金額と日付から推すしかありません。

(d)理由を調べられるのが特定の担当者だけ。 送金の手数料が差し引かれる仕入先、為替の差を調整の行で入れてくる仕入先、請求書を再発行するたびに番号を変える仕入先。仕入先ごとの癖を知っている担当者が休むと、照合が止まります。

  1. 【自動】 共有の受信箱に届いた取引残高明細のPDFを、受付フォルダに保存する
  2. 【自動】 保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
  3. 【自動】 OCRが明細の表をセル単位で、基準日と残高を質問への答えとして、信頼度付きで返す
  4. 【自動】 生成AIが各行を請求・クレジットノート・入金・調整に分け、請求書番号と金額をそろえる
  5. 【自動】 プログラムが自社の買掛金の明細・支払の記録と1行ずつ照らし、残高を検算する
  6. 【自動】 差のある行に、規則で理由の候補(not_booked・payment_in_transit・duplicate_booking・amount_diff・bank_charge など)を付ける
  7. 【人】 担当者が、理由の候補の付いた行と needs_human の行だけを確かめる
  8. 【人】 自社の訂正が要るものを起票し、仕入先への照会と残高確認の回答を送る

7番目が、この設計の分かれ目です。 担当者は80件の明細を全行は読みません。差のある行について、理由の候補が当たっているかを支払の記録と原本で確かめることに時間を使います。

6番目の理由の候補を規則で付けているのも、意図してのことです。 「基準日の3日前に送金した支払が仕入先の明細に無い」は、規則で payment_in_transit と言えます。AIに理由を推させると、もっともらしい説明が付いて確かめる手が止まります。 規則に当たらない差は unexplained のまま人に渡します。

02今回想定するシステム構成

構成図
海外の仕入先から届く英文の取引残高明細(PDF)
   ▼【トリガー】受付フォルダ(Amazon S3)への保存
AWS Lambda ── 形式・ページ数・パスワードの確認
   ▼
AWS Textract(StartDocumentAnalysis/GetDocumentAnalysis)
   │   TABLES(明細の表)・QUERIES(基準日・期末残高・通貨)
   ▼
Claude API ── 各行の種類の判別と、請求書番号・金額のそろえ直し
   │   ① 日付  ② 種類  ③ 請求書番号  ④ 借方・貸方  ⑤ 残高
   ▼
Python ── 自社の買掛金の明細・支払の記録との照合、残高の検算、理由の候補
   ▼
差のある行の一覧(理由の候補付き)+ 仕入先ごとの判定(matched / explained / needs_review)
   ▼
【担当者が差のある行を確認】
   ├──▶ 自社の訂正の起票
   └──▶ 仕入先への照会と残高確認の回答の下書き
役割想定する製品代替候補
OCRAWS Textract(StartDocumentAnalysis/GetDocumentAnalysis)Azure AI Document Intelligence、Google Document AI
生成AIClaude API(各行の種類の判別と項目のそろえ直し、照会文の下書き)OpenAI API、Gemini API
差異計算Python(買掛金の明細・支払の記録との照合と残高の検算)基幹システムの照合機能
連携AWS Lambda(保存と完了の通知を起点に処理を動かす)Amazon EventBridge
保管Amazon S3(明細、読み取り結果、照合の結果、確認の記録)社内のファイルサーバー

基幹システムは、新しく足すものではありません。 最初の準備は、仕入先ごとの買掛金の明細と支払の記録を、「仕入先・請求書番号(仕入先の番号)・請求日・金額・通貨・支払日・送金額・計上の番号」の列で出力できるようにすることです。仕入先の請求書番号を自社の明細に持っていない場合は、ここが最大の準備作業になります。

OCRに AWS Textract を選ぶのは、明細が英文だからです。 公式の上限の表で、対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語とされ、中国語・韓国語・日本語は読めません。

この題材で効くのは、表の抽出(TABLES)です。 取引残高明細は表そのものなので、請求書の分析より文書の分析のほうが合っています。表はセル単位で行と列の位置が付いて返り、列見出し(COLUMN_HEADER)、表の題、表の脚注、集計のセル(TABLE_SUMMARY)が区別されます。「Balance carried forward」のような繰越の行や「Total」の行を、明細の行と分けて扱えます。

03どうやって実装するのか

Step1

処理の起点を決める

受付フォルダ(Amazon S3)に取引残高明細が保存されたことを起点にします。 明細は月初に集中して届きますが、仕入先ごとに届く日が違うため、月初にまとめて回す定時実行にはしません。 届いた日に照らせば、月次の締めの前に未計上の請求を取り寄せられます。

S3 への保存を AWS Lambda が受け、StartDocumentAnalysis を FeatureTypes に TABLES と QUERIES を指定して呼びます。ClientRequestToken に仕入先のコードとファイルのハッシュから作った値を入れると、同じトークンで呼び直しても同じ JobId が返り、同じ明細を二度読みません。 JobTag には仕入先のコードを入れ、完了の通知(Amazon SNS)から仕入先を引けるようにします。通知の状態が SUCCEEDED であることを確かめてから結果を取り、すぐ S3 に保存します。 JobId は7日間しか有効ではありません。

届いていない明細も数えます。 毎月10日に、取引のあった仕入先のうち明細が届いていないものを一覧にし、購買の担当が依頼します。明細の来ない仕入先ほど、照合されないまま差がたまります。

Step2

入力データを集める

データ中身取得元
取引残高明細のPDF基準日、明細の行(日付・種類・番号・摘要・借方・貸方・残高)、期末残高、通貨受付フォルダ(S3)
読み取り結果表のセル(行と列の位置、列見出し、集計のセル)、質問への答え、信頼度AWS Textract
買掛金の明細仕入先、仕入先の請求書番号、請求日、金額、通貨、計上の番号、消込の状態基幹システムの出力
支払の記録仕入先、支払日、送金額、送金の手数料の負担、消し込んだ請求書番号基幹システムの出力
仕入先ごとの癖の一覧請求書番号の書き方、入金の行の書き方、手数料の扱い、為替の差の入れ方担当者が育てる一覧

質を決めるのは、下の3つです。 自社の明細に仕入先の請求書番号が無ければ行を対応付けられず、支払の記録に消し込んだ請求書番号が無ければ入金の行を確かめられません。仕入先ごとの癖の一覧は、最初は空でかまいません。 担当者が理由の候補を直すたびに1行ずつ増え、(d)の属人化をほどいていきます。

Step3

データの取得方法を決める

結果は GetDocumentAnalysis で取ります。1回の呼び出しで返る件数は既定・最大1,000で、NextToken が返る限り続けて取ります。 JobStatus が PARTIAL_SUCCESS のときは Warnings に出たページを記録し、その明細を needs_review にします。

取るものどこから何に使うか
明細の表TABLE と CELL の RowIndex・ColumnIndex行ごとの日付・番号・摘要・借方・貸方・残高
列見出しEntityTypes が COLUMN_HEADER のセルどの列が借方か貸方かを決める
繰越・合計の行TABLE_SUMMARY、TABLE_FOOTER明細の行から外し、検算に使う
結合されたセルMERGED_CELL摘要が複数の列にまたがる行を1つにまとめる
基準日・期末残高・通貨質問への答え(QUERY_RESULT)照合する期間と、検算の相手

質問は QueriesConfig に3つ並べます。「What is the statement date?」「What is the closing balance?」「What is the currency?」です。答えが見つからないときは空のまま返るので、期末残高の無い明細(Open Items だけの様式)をここで見分けます。

表はページごとに返ります。 数ページにわたる明細は、2ページ目以降の表を列見出しの並びで1ページ目の表につなぎます。列見出しが2ページ目に印字されない様式では、列の数と位置でつなぎ、つないだことを記録に残します。

空のセルには文字が付きません。 借方と貸方の列が分かれた様式では、片方のセルが空で返ります。空のセルを0とみなさず、「その列に値が無い」として扱うと、借方と貸方の取り違えが防げます。

Step4

AIへ渡す前に整形する

  1. 形式の確認 … 文書の分析は JPEG、PNG、TIFF、PDF を扱います。表計算のファイルで届いたものは、この処理を通さず直接読み込みます
  2. パスワードの確認 … PDFはパスワードで保護されていてはいけません。保護されたものは仕入先に解除したものを頼みます
  3. ページ数とサイズの確認 … 非同期の処理でPDFは500MB・3,000ページが上限です
  4. 文字の大きさの確認 … 文字の高さが15ピクセルを下回ると検出されません。150 DPIで8ポイント相当です
  5. 基準日の確認 … 基準日が前月末でないもの(期中の日付、2か月前の日付)は、照合する期間をその日付に合わせます
  6. 照合の相手の準備 … その仕入先の買掛金の明細と支払の記録を、基準日の前後10日の分まで含めて読み込みます

6番目で基準日の後ろまで読み込むのは、行き違いを見分けるためです。 基準日の2日前に自社が送金した支払は、仕入先の明細では翌月の入金になります。基準日の後ろの記録が無いと、送金済みの支払を「仕入先の記録漏れ」と見誤ります。

1番目で表計算のファイルを分けるのは、読み取る必要が無いからです。 OCRを通すと、正しい数字を読み取りの信頼度付きの数字に変えるだけです。

Step5

AIに処理させる

させるのは、表の各行を4つの種類に分け、請求書番号と金額を原文から写し、根拠の文字列を添えることだけです。

取り出す項目中身取り出せないときの扱い
行の種類invoice・credit_note・payment・adjustment・carried_forward決められなければ ambiguous
請求書番号請求・クレジットノートの番号。入金の行なら、摘要に書かれた消し込み先の番号書かれていなければ not_found
日付その行の日付日・月の順が決められなければ ambiguous
借方・貸方の金額どちらの列に書かれていたかと、原文の金額空のセルは empty、読めなければ unreadable
摘要原文のまま-

行の種類は、摘要と番号の頭の文字と、借方か貸方かの列で決めます。 「INV」で始まり借方の列にあれば invoice、「Payment received」で貸方の列にあれば payment。仕入先ごとの癖の一覧に書き方があれば、それを優先します。

させないこと理由
自社の明細との対応付け行の照合はプログラムが行う
残高の計算・検算プログラムが行う
入金の行の消し込み先の推測金額から請求書を推すと、別の請求書の支払に見える
差の理由の判断理由の候補は規則で付け、人が確かめる
借方・貸方の列の入れ替え列見出しのとおりに写す

3行目がいちばん起きやすい失敗です。 「Payment received」とだけ書かれた入金の行を渡すと、AIは同じ金額の請求書を探して「INV-0815 の支払」と埋めがちです。埋めた瞬間、自社の支払の記録と照らす前に結論が出てしまいます。 摘要に番号が無ければ not_found と返させ、金額と日付からの候補探しはプログラムが支払の記録を相手に行います。

Step6

指示内容を固定する

あなたはメーカーの購買部で、海外の仕入先から届いた英文の取引残高明細を点検する担当です。
OCRが返した表の行だけを見て、各行を項目に分けてください。推測で埋めないでください。

【やること】
1. 各行の種類を下の区分から選ぶ
2. 日付・請求書番号・摘要・金額を原文のまま写す
3. 金額が借方と貸方のどちらの列に書かれていたかを、列見出しのとおりに書く
4. 各項目の根拠にした原文の文字列を evidence に入れる

【行の種類】
- invoice ......... 請求(Invoice、INV)
- credit_note ..... 減額(Credit Note、CN、Credit Memo)
- payment ......... 入金(Payment、Receipt、Remittance)
- adjustment ...... 調整(Adjustment、Exchange difference、Bank charges、Write-off)
- carried_forward . 繰越・前月残高(Balance brought forward、Opening balance)
- まず「この仕入先の書き方の一覧」を見る。一覧にある書き方ならその種類を使う
- 決められなければ "ambiguous" にする

【厳守事項】
- 入金の行で、摘要に請求書番号が書かれていなければ "not_found" にしてください。
  金額や日付から、どの請求書の支払かを推測しないでください。
- 空のセルを 0 として書かないでください。"empty" にしてください。
- 借方と貸方を入れ替えないでください。列見出しのとおりに写してください。
- 残高を計算しないでください。合計を検算しないでください。
- 日付が日・月の順か月・日の順か決められないときは "ambiguous" にしてください。
- 差の理由や、どちらの誤りかを書かないでください。
- confidence は OCR が返した値をそのまま入れてください。

【表の行】{table_rows}
【列見出し】{column_headers}
【この仕入先の書き方の一覧】{supplier_patterns}

「空のセルを0としない」を書いているのは、借方・貸方の列が分かれた様式で、0が入ると取り違えの跡が消えるからです。 片方が空、もう片方に金額、という形が残っていれば、列の読み違いを後から見つけられます。

Step7

出力形式を固定する

次の形のJSONで受け取ります。 Claude API の構造化出力(output_config.format に type: "json_schema" とスキーマを指定)を使い、形の崩れた応答を照合のプログラムに流さないようにします。

{
  "supplier_code": "",
  "statement_date": "",
  "currency": "",
  "closing_balance_as_written": "",
  "rows": [
    { "row_no": 1, "page": 1, "type": "invoice | credit_note | payment | adjustment | carried_forward | ambiguous",
      "date": "", "doc_no": "", "doc_no_status": "ok | not_found",
      "column": "debit | credit", "amount": "", "description": "",
      "confidence": 0, "evidence": "" }
  ]
}

照合のプログラムは、この rows と自社の明細を照らし、差のある行に次の理由の候補を付けます。

理由の候補規則
not_booked仕入先の明細に請求があり、自社の明細に無い
payment_in_transit自社が基準日の直前に送金し、仕入先の明細に入金が無い
payment_not_recognized自社が基準日より十分前に送金したのに、仕入先の明細に入金が無い
duplicate_booking自社の明細に、同じ請求書番号・金額の計上が2つある
amount_diff同じ請求書番号で金額が違う
bank_charge入金の額と送金額の差が、送金の手数料の範囲にある
unexplainedどの規則にも当たらない

理由は、AIの出力とプログラムの判定を別の層に置けることです。 rows はAIが原文から埋め、理由の候補はプログラムが自社の明細を相手に付けます。「直前」が何日かは仕入先ごとの一覧で決め、変えるのは規則だけです。

仕入先ごとには、すべての行が対応し残高が合えば matched、差がすべて理由の候補で説明できれば explained、unexplained・ambiguous・unreadable があれば needs_review とします。

Step8

システムへ連携する

つなぎ先方式内容
共有の受信箱メールのルール取引残高明細の添付を受付フォルダへ移す
受付フォルダ(S3)AWS Lambda の起動保存を検知し、読み取りを始める
AWS Textract非同期のAPI呼び出しと SNS の通知表のセルと、基準日・期末残高・通貨を返す
Claude APIAPI呼び出し各行の種類の判別と項目のそろえ直し、照会文の下書き
基幹システム出力ファイルの読み取り買掛金の明細と支払の記録を照合用に読み込む

基幹システムへは書き込みません。 duplicate_booking が出ても、取り消しの起票は担当者が行います。照合の誤りで正しい計上を取り消すと、次の支払で仕入先に払い漏れます。

Step9

人が確認する

担当者が開くのは explained と needs_review の仕入先で、差のある行だけです。 matched の仕入先は一覧で残高を流し見ます。全行を読む設計にすると、第10章の12分には収まりません。

  1. needs_review を先に見る … unexplained の行の原本を読み、癖の一覧に足せる書き方かを確かめます
  2. not_booked の請求書を取り寄せる … 受信箱に届いていないか、入荷前の請求かを購買と確かめます
  3. duplicate_booking を確かめる … 再発行の請求書を二度計上したのか、本当に2回の取引かを、発注番号と入荷の記録で見分けます
  4. payment_not_recognized を仕入先に照会する … 送金の控えを添えます。送るのは担当者です
  5. 理由の候補を変えたら記録する … どの行を、どの理由に、なぜ変えたかを残します

3番目を急がないでください。 同じ金額の部品を同じ月に2回発注することは珍しくなく、番号の書き方が違うだけの2回の取引を、二重計上として取り消す誤りがいちばん高くつきます。

Step10

例外に対処する

起きること対応
英語以外の明細この構成では読めない。英文での発行を仕入先に依頼する
パスワード付きのPDF解除したものを仕入先に頼む
期末残高の無い様式(Open Items だけ)残高の検算をせず、行の照合だけを行う
2ページ目以降に列見出しが無い列の数と位置でつなぎ、つないだことを記録する
通貨の違う行が混ざる換算せずに needs_review。為替の扱いは取り決めで決まる
請求書番号の書き方が自社と違う癖の一覧の変換の規則で直してから照らす
PARTIAL_SUCCESS で一部のページが読めないWarnings のページを記録し、needs_review に
OCRが応答しない受付フォルダに残す。処理済みに移すのは成功したときだけ

上から6行目が、立ち上げの時期にいちばん多く出ます。 番号の書き方の違いは、照合の前に変換すれば済むものです。仕入先ごとの変換の規則を、最初の2か月で上位の仕入先から作ります。

Step11

記録を残す

  • 取引残高明細の原本と、受け取った日時・仕入先・基準日
  • OCRが返したJSONの全文(GetDocumentAnalysis の全ページ分)
  • AIのそろえ直しの結果(rows)と、ページをつないだ記録
  • 照合の結果と理由の候補、そのとき参照した自社の明細と支払の記録の内容
  • 担当者が理由の候補を変えた記録
  • 仕入先への照会と回答、残高確認の回答を送った日時

4つ目で自社の明細の内容を残すのは、計上が後から訂正されるためです。 当時どの明細と照らしたかが分からないと、翌月の照合で同じ差がまた出たときに、前月の判断を追えません。

04実装レベルの3段階

最小構成:コンソールで読み取り、AIの画面に貼って行の種類と項目をそろえさせる / 書き写しと行の種類の判別
半自動化:上記+受付フォルダから自動で読み取り、自社の明細と照らした差の一覧を出す / 書き写しと1行ずつの突き合わせ
本格構成:上記+支払の記録との照合、理由の候補、残高の検算、照会文の下書き / 照合と理由の候補まで

最小構成では件数がさばけません。 1件ずつ貼り付けるので、80件には使えません。確かめるための段階です。 半自動化で、1件45分が20分程度になります。 書き写しと突き合わせは無くなりますが、差の理由の調べが残ります。本格構成で12分になり、この段階が本記事の想定です。 差が大きいのは、理由の調べが、支払の記録と入荷の記録を行ったり来たりする作業だからです。 段階を飛ばさないでください。 半自動化の差の一覧を1か月見ると、番号の書き方が違う仕入先と、手数料が差し引かれる仕入先が先に分かります。癖の一覧が育ってから本格構成に進むほうが、unexplained が減ります。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
3 名
月間件数
80 件
1件あたり現在時間
45 分
1件あたり導入後時間
12 分
現在  80件 × 45分 ÷ 60 = 60 時間/月
導入後 80件 × 12分 ÷ 60 = 16 時間/月
月間削減時間
44h
削減率
73%
年間削減時間
528h
年間金額換算(時間単価3,800円)
201万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 海外の仕入先から部品や原材料を輸入し、仕入先から毎月英文の取引残高明細(Statement of Account)を受け取っているメーカー・商社・小売。明細をPDFから表計算に書き写し、自社の買掛金の明細と1行ずつ目で突き合わせている場合。残高が合わない理由を調べるのが特定の担当者の経験に頼っている場合。
向いていない
  1. 仕入先が数社で、残高の照合が月に数件で済む場合。仕入先の取引残高を仕入先のポータルやEDIの電子データで受け取れており、PDFを読む必要がない場合。明細が英語以外(中国語・韓国語・日本語など)で届く仕入先が中心の場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めません)。なお、差をどちらの誤りとして直すか、仕入先にどう回答するかの判断は、購買と経理の担当が行うもので、この構成では代替できません。

07最小構成で試す方法

  1. 先月の取引残高明細から、様式の違う10件を選ぶ(うち数件は、残高が合わず理由を調べたものを入れる)
  2. 10件を AWS Textract のコンソールで表として分析し、行と列がどう返るかを見る
  3. 表の行を手元のAIサービスに貼り、「各行を請求・減額・入金・調整に分け、番号と金額を原文のまま写してください。入金の行で番号が書かれていなければ推測しないでください。空のセルを0にしないでください」と指示する
  4. 出てきた結果を、当時の担当者の書き写しと突き合わせる

10件は必ずやってください。 ワークフローを組む前に、「数ページの明細の表が、行のずれなく読めるのか」を確かめます。

出てきた内容判断
当時と同じ行と金額になった自社の明細との照合に進む
入金の行の消し込み先を推測で埋めた指示の書き方で直る。構成は有効
借方と貸方の列がずれる、ページの境目で行が切れる表のつなぎ方の問題。 列見出しと位置でつなぐ処理を先に作る

08実装時につまずきやすいポイント

問題対策
入金の行の消し込み先を推測で埋めるnot_found を返させ、候補探しはプログラムに任せる
空のセルが0になり、借方と貸方を取り違える空のセルは empty として写させる
ページの境目で表が切れる列見出しと位置でつなぎ、つないだ記録を残す
送金済みの支払を仕入先の記録漏れと見誤る基準日の後ろの支払の記録まで読み込む
番号の書き方の違いで同じ請求書が2行に分かれる仕入先ごとの変換の規則で直してから照らす
2回の正当な取引を二重計上として取り消す発注番号と入荷の記録で見分け、取り消しは人が行う
繰越や合計の行を明細の行として照らすTABLE_SUMMARY と行の種類で外す
届いていない明細に気づかない毎月、取引のあった仕入先と届いた明細を照らす

上の2行が、この構成の失敗のほとんどです。 どちらも「照合の前に答えができてしまう」誤りです。推測で埋めた消し込み先と0で埋めた空欄は、照合を通ったように見えます。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 仕入先の名前と取引の金額、請求と支払の記録、送金の日付です。個人の情報はほとんど含みませんが、仕入先ごとの取引の量と支払の状況は、取引関係そのものを表す情報です。

  1. 生成AIに渡す範囲を明細の表の行に限る … 自社の買掛金の明細と支払の記録は、プログラムの側で照合します。自社の帳簿を外部のAIに渡しません
  2. 保管の暗号化を決める … StartDocumentAnalysis の KMSKeyId を指定すると、利用者のバケットに出力するときにそのキーで暗号化されます。指定しない場合は SSE-S3 で暗号化されます
  3. 訂正の起票を自動で行わない … 出すのは理由の候補までです。二重計上の取り消しを誤ると、払い漏れになります
  4. 照会と残高確認の回答を自動で送らない … 出すのは下書きまでです。仕入先への回答は、自社の帳簿の残高を外へ出す行為です
  5. 照合の記録を残す … 毎月の照合の記録は、決算のときに買掛金の残高を説明する材料になります。自社の帳簿書類の保存の規程に合わせて残します

誤りが起きた場合のリスクは、未計上の請求に気づかず支払が遅れることと、正しい計上を取り消して払い漏れることの2つです。 前者は届いていない明細と番号の書き方の違いから、後者は推測の消し込みと二重計上の見誤りから起きます。

10まず何から始めるか

1週目:自社の明細に仕入先の請求書番号を持たせる

基幹システムの買掛金の明細に、仕入先の請求書番号が入っているかを確かめます。入っていなければ、取引の多い上位15社から入れる運用を始めます。全社を一度にそろえる必要はありません。

2週目:10件で試す

先月の取引残高明細から様式の違う10件を選び、コンソールで読み取り、手元のAIサービスで行の種類と項目をそろえさせます。入金の行の消し込み先を推測していないか、空のセルを0にしていないかを最優先で見ます。

3週目:理由の候補の規則を決める

基準日の何日前までの送金を行き違いとみなすか、手数料の差をどこまで許すか、為替の差をどう扱うかを、購買と経理で決めます。 あわせて、上位15社の癖の一覧を、担当者の経験から書き起こします。

4週目:受付フォルダから差の一覧までをつなぐ

S3 と Lambda で受付フォルダを見張り、OCRを呼び、自社の明細と照らした差の一覧を書き出すところまで作ります。この時点では理由の候補を出さず、差のある行だけを見ます。

2か月目: 支払の記録との照合と理由の候補を足し、needs_review の件数を毎週数えます。3か月目以降: 照会文の下書きを足し、1件45分が何分になったかを実測します。癖の一覧が育ち、unexplained が月に数行まで減った時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-09/最終更新:2026-10-09
確認した内容情報源確認日
対応言語が英・仏・独・伊・葡・西であること。非同期の処理でPDFが500MB・3,000ページまで。パスワード付きPDF不可。文字の高さ15ピクセル(150 DPIで8ポイント)が下限。質問は非同期で1ページ30問まで、英語の文書だけAWS: Set Quotas in Amazon Textract2026-10-09
表がセル・結合セル・列見出し・題・脚注・集計のセルとして返ること。STRUCTURED_TABLE/SEMI_STRUCTURED_TABLE の区別。空のセルには文字の子が付かないことAWS: Tables2026-10-09
StartDocumentAnalysis が JPEG・PNG・TIFF・PDF を扱い、FeatureTypes に TABLES・QUERIES などを指定できること。ClientRequestToken で同じ JobId が返ること。JobTag が完了の通知に含まれること。KMSKeyId の扱い。JobId が7日間有効なことAWS: StartDocumentAnalysis2026-10-09
MaxResults が既定・最大1,000で NextToken で続きを取ること。JobStatus に PARTIAL_SUCCESS があること。Warnings の構造AWS: GetDocumentAnalysis2026-10-09
質問への答えが別名・信頼度・位置とともに返り、答えが見つからないときは空のまま返ることAWS: Queries2026-10-09
構造化出力を output_config.format(type: "json_schema")で指定することClaude: Structured outputs2026-10-09

差をどちらの誤りとして直すか、仕入先にどう回答するかは、購買と経理の担当で決めてください。 本記事は公開仕様で確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-1187)についてのご相談はこちらから。

AI活用について相談する
目次