Media > AI活用ユースケース > 経理 > 海外の仕入先から届く英文のクレジットノートを読み取り、対象の請求書と返品・値引きの内訳を買掛金の明細と返品の記録に照らして、計上漏れと金額の食い違いを拾う

海外の仕入先から届く英文のクレジットノートを読み取り、対象の請求書と返品・値引きの内訳を買掛金の明細と返品の記録に照らして、計上漏れと金額の食い違いを拾う

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

海外の仕入先から届く英文のクレジットノートを読み取り、対象の請求書番号と返品・値引きの内訳を取り出します。買掛金の明細と返品の記録に照らし、計上漏れ・金額の食い違い・二重計上の候補を理由付きで担当者に返します。

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

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

導入前(Before)
  1. 共有の受信箱に届いたクレジットノートのPDFを開き、仕入先とクレジットノートの番号を確かめる
  2. 明細を表計算に書き写す(品番、数量、単価、金額、理由)
  3. 書かれた請求書番号で買掛金の明細を探し、元の請求書の行を特定する
  4. 返品なら返品の記録、値引きなら購買のメールを探し、数量と金額が合うかを見る
  5. 既に同じ減額を計上していないかを、前月までの計上の記録で確かめる
  6. 合えば買掛金から差し引く起票をし、合わなければ購買の担当に知らせる
  7. 月末に、返品したのにクレジットノートが届いていない分を、購買の担当が気づいたときだけ催促する
導入後(After)
  1. 自動共有の受信箱に届いたクレジットノートのPDFを、受付フォルダに保存する
  2. 自動保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
  3. 自動OCRが番号・日付・合計・明細の行を、信頼度付きで返す
  4. 自動生成AIが、対象の請求書番号・減額の理由・明細の行ごとの品番と数量を切り出す
  5. 自動プログラムが買掛金の明細・返品の記録・前月までの計上と照らし、金額を計算する
  6. 自動行ごとに `ok` / `amount_diff` / `no_source` / `duplicate` / `invoice_not_found` / `unreadable` を付け、クレジットノートごとに `post` / `query` / `needs_human` を規則で決める
  7. 自動返品を出荷してから決めた日数を過ぎてもクレジットノートが無いものを、`missing_credit` として毎週一覧にする
  8. 人経理の担当が `query` と `needs_human` のものを開き、購買の担当と食い違いを確かめる
  9. 人`post` のものと確認の済んだものを起票し、`missing_credit` の催促を購買が仕入先へ送る
各工程の詳しい説明を読む
  1. 共有の受信箱に届いたクレジットノートのPDFを開き、仕入先とクレジットノートの番号を確かめる
  2. 明細を表計算に書き写す(品番、数量、単価、金額、理由)
  3. 書かれた請求書番号で買掛金の明細を探し、元の請求書の行を特定する
  4. 返品なら返品の記録、値引きなら購買のメールを探し、数量と金額が合うかを見る
  5. 既に同じ減額を計上していないかを、前月までの計上の記録で確かめる
  6. 合えば買掛金から差し引く起票をし、合わなければ購買の担当に知らせる
  7. 月末に、返品したのにクレジットノートが届いていない分を、購買の担当が気づいたときだけ催促する

(a)対象の請求書を探すのに時間がかかる。 クレジットノートに書かれた請求書番号が、仕入先の番号なのか自社の発注番号なのか、仕入先ごとに違います。番号が書かれていないものは、品番と時期から当たりを付けて探します。

(b)減額の額が合っているかを確かめきれない。 返品数量×元の単価で計算すべきところを、仕入先が最新の単価で計算していることがあります。単価の版の違いは小さな差額なので、件数の多い月に見過ごされます。

(c)二重の計上に気づけない。 仕入先が同じ減額のクレジットノートを再発行し、番号だけが違うことがあります。前月までの計上と照らさないと、同じ減額を2度差し引き、仕入先との残高が合わなくなります。

(d)届いていないクレジットノートを誰も数えていない。 7番目の手順は、購買の担当の記憶に頼っています。返品から数か月たってから、元の金額のまま支払っていたことが分かることがあります。

  1. 【自動】 共有の受信箱に届いたクレジットノートのPDFを、受付フォルダに保存する
  2. 【自動】 保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
  3. 【自動】 OCRが番号・日付・合計・明細の行を、信頼度付きで返す
  4. 【自動】 生成AIが、対象の請求書番号・減額の理由・明細の行ごとの品番と数量を切り出す
  5. 【自動】 プログラムが買掛金の明細・返品の記録・前月までの計上と照らし、金額を計算する
  6. 【自動】 行ごとに ok / amount_diff / no_source / duplicate / invoice_not_found / unreadable を付け、クレジットノートごとに post / query / needs_human を規則で決める
  7. 【自動】 返品を出荷してから決めた日数を過ぎてもクレジットノートが無いものを、missing_credit として毎週一覧にする
  8. 【人】 経理の担当が query と needs_human のものを開き、購買の担当と食い違いを確かめる
  9. 【人】 post のものと確認の済んだものを起票し、missing_credit の催促を購買が仕入先へ送る

8番目が、この設計の分かれ目です。 担当者は180件のクレジットノートを読みません。印の付いた行について、原本と照合の相手を見比べることに時間を使います。

6番目を規則で決めているのも、意図してのことです。 端数の違いをどこまで許すか、単価の版の違いを受け入れるかは仕入先との取り決めで決まり、後から変わります。その判断をAIに置かず、規則として持ちます。

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

構成図
海外の仕入先から届く英文のクレジットノート(PDF)
   ▼【トリガー】受付フォルダ(Amazon S3)への保存
AWS Lambda ── 形式・ページ数・パスワードの確認
   ▼
AWS Textract(StartExpenseAnalysis/GetExpenseAnalysis)
   │   番号・日付・合計・明細の行と、信頼度
   ▼
Claude API ── 対象の請求書番号・減額の理由・明細の切り出し
   │   ① 対象の請求書番号  ② 減額の理由  ③ 品番  ④ 数量  ⑤ 単価・金額
   ▼
Python ── 買掛金の明細・返品の記録・前月までの計上との照合、金額の計算
   ▼
行ごとの判定 + クレジットノートごとの判定(post / query / needs_human)
   ▼                                   + 届いていない減額の一覧(missing_credit)
【経理と購買が印の付いたものを確認】
   ├──▶ 仕入先への照会・催促の下書き
   └──▶ 買掛金の起票へ
役割想定する製品代替候補
OCRAWS Textract(StartExpenseAnalysis/GetExpenseAnalysis)Azure AI Document Intelligence、Google Document AI
生成AIClaude API(対象の請求書と減額の理由の切り出し、照会文の下書き)OpenAI API、Gemini API
差異計算Python(買掛金の明細・返品の記録との照合と金額の計算)基幹システムの照合機能
連携AWS Lambda(保存と完了の通知を起点に処理を動かす)Amazon EventBridge
保管Amazon S3(クレジットノート、読み取り結果、照合の結果、確認の記録)社内のファイルサーバー

基幹システムは、新しく足すものではありません。 最初の準備は、買掛金の明細と返品の記録を照合用に出力することです。返品の記録に「返品番号・仕入先・品番・数量・元の請求書番号・出荷日」の列がそろっているかを確かめます。元の請求書番号が無い返品は、どのクレジットノートの相手かを品番と時期で推すしかなくなります。

OCRに AWS Textract を選ぶのは、クレジットノートが英文だからです。 公式の上限の表で、対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語とされ、中国語・韓国語・日本語は読めません。 東南アジアの仕入先でも英文で発行してもらうことを前提にします。

使うのは請求書と領収書の分析(StartExpenseAnalysis)です。 テンプレートなしに、番号・日付・合計などを標準の項目名(INVOICE_RECEIPT_ID、INVOICE_RECEIPT_DATE、TOTAL など)にそろえ、明細は LineItemGroups として1行ずつ ITEM・QUANTITY・UNIT_PRICE・PRICE・PRODUCT_CODE に分けて返します。ただし公式の説明は請求書と領収書を対象としており、クレジットノートを名指ししていません。 様式は請求書とほぼ同じですが、最小構成で実際のクレジットノートがどう返るかを必ず確かめます。

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

Step1

処理の起点を決める

受付フォルダ(Amazon S3)にクレジットノートが保存されたことを起点にします。 仕入先ごとに発行の時期がばらばらで、返品の数日後に来るものも、月末にまとめて来るものもあるため、1日1回の定時実行にはしません。 届いた日に照らせば、支払の締めの前に減額を反映できます。

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

届いていない減額の一覧は、別のトリガーで動かします。 毎週月曜に返品の記録を読み、出荷から仕入先ごとに決めた日数を過ぎてもクレジットノートの記録が無い返品を数えます。支払の締めの前の週に必ず1回回るように曜日を決めます。

Step2

入力データを集める

データ中身取得元
クレジットノートのPDF番号、日付、対象の請求書番号、減額の理由、明細、合計、通貨受付フォルダ(S3)
読み取り結果標準の項目、明細の行、信頼度、ページ番号AWS Textract
買掛金の明細仕入先、請求書番号、発注番号、品番、数量、単価、金額、通貨、支払予定日基幹システムの出力
返品の記録返品番号、仕入先、品番、数量、元の請求書番号、出荷日、理由基幹システムの出力
値引きの合意仕入先、対象の請求書、値引きの率または額、合意日購買が登録する一覧
前月までの計上計上済みのクレジットノートの番号、対象の請求書、品番、数量、金額この構成が残した照合の記録

質を決めるのは、下の3つです。 返品の記録が無ければ「減額されるはずの分」を数えられず、値引きの合意が無ければ値引きの額を確かめられず、前月までの計上が無ければ二重計上を見つけられません。値引きの合意は、購買がメールで済ませていることが多いため、一覧に登録する手順を最初に決めます。

Step3

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

結果は GetExpenseAnalysis で取ります。1回の呼び出しで返る件数は既定・最大20で、NextToken が返る限り続けて取ります。 JobStatus が PARTIAL_SUCCESS のときは Warnings に出たページを記録し、そのクレジットノートを needs_human にします。

取るものどこから何に使うか
番号・日付・合計SummaryFields の Type と ValueDetectionクレジットノートの特定、合計の検算
書かれていた見出しの文字LabelDetection「Credit Note No.」か「Invoice No.」かの見分け
標準に当たらない項目Type が OTHER のもの「Original Invoice」「Reason」「RMA No.」などを拾う
明細の行LineItemGroups の LineItems品番・数量・単価・金額
通貨Currency の Code元の請求書の通貨との一致
信頼度とページ番号各項目の Confidence と PageNumberunreadable の判定と、原本に戻る手がかり

ここに、この題材に固有の落とし穴があります。 クレジットノートにはそれ自身の番号と、対象の請求書の番号の両方が書かれています。標準の項目 INVOICE_RECEIPT_ID にどちらが入るかは様式次第です。LabelDetection に残る見出しの文字(「Credit Note No.」「Ref. Invoice」など)を必ず見て、2つの番号を取り違えないようにします。

金額の符号も様式次第です。 「-1,250.00」と書く仕入先、「1,250.00 CR」と書く仕入先、符号なしで見出しだけ「Credit」とする仕入先があります。プログラムでは符号を当てにせず、「クレジットノートの金額はすべて減額」として扱います。

Step4

AIへ渡す前に整形する

  1. 形式の確認 … 請求書の分析で非同期に扱えるのは JPEG、PNG、PDF です。TIFFで届いたものはPDFに変換します
  2. パスワードの確認 … PDFはパスワードで保護されていてはいけません。保護されたものは仕入先に解除したものを頼みます
  3. ページ数とサイズの確認 … 非同期の処理でPDFは500MB・3,000ページが上限です。返品の明細書や検査の報告書が添付されているものは、クレジットノートの部分と分けます
  4. 文字の大きさの確認 … 文字の高さが15ピクセルを下回ると検出されません。150 DPIで8ポイント相当です
  5. 書類の種類の確認 … 請求書・デビットノート・取引残高の明細が同じ受信箱に届きます。見出しに「Credit Note」「Credit Memo」が無いものは、この処理から外します
  6. 照合の相手の準備 … その仕入先の買掛金の明細(直近12か月)、返品の記録、値引きの合意、前月までの計上を読み込みます

5番目を省かないでください。 請求書を減額の書類として読むと、買掛金を増やすべきものを減らす起票の候補が出ます。 見出しで分けられないものは needs_human にします。

Step5

AIに処理させる

させるのは、対象の請求書番号・減額の理由・明細の行を切り出し、元の請求書の行に対応付ける手がかりを添えることだけです。

取り出す項目中身取り出せないときの扱い
クレジットノートの番号それ自身の番号書かれていなければ not_found
対象の請求書番号減額の相手の請求書番号(複数のこともある)書かれていなければ not_found。推測で埋めない
減額の理由return・shortage・discount・price_correction・other書かれていなければ not_stated
明細の品番・数量行ごとの品番と数量書かれていなければ not_found
明細の単価・金額行ごとの単価と金額(原文のまま)読めなければ unreadable
返品番号(RMA)仕入先が付けた返品の受付番号書かれていなければ not_found

理由の区分は、照らす相手を決めるために使います。 return なら返品の記録、shortage なら入荷の検品の記録、discount なら値引きの合意、price_correction なら元の請求書の単価です。区分を誤ると、照らす相手そのものが間違います。

させないこと理由
金額の計算・検算返品数量×元の単価と値引きの率はプログラムが計算する
対象の請求書番号の推測品番が同じ別の請求書に結び付けると、正しい減額が食い違いに見える
減額を受け入れてよいかの結論仕入先との取り決めの解釈は担当者が行う
通貨の換算換算はしない。通貨が違えば照会する
理由の書かれていない減額に理由を付ける根拠の無い減額を、根拠のある減額に見せてしまう

2行目がいちばん起きやすい失敗です。 対象の請求書番号が書かれていないクレジットノートを渡すと、AIは品番と日付から「おそらくこの請求書」と埋めがちです。埋めた瞬間、どの請求書の減額かという肝心の点が、AIの推測にすり替わります。 無ければ not_found と返させ、品番と時期からの候補探しはプログラムに任せます。

Step6

指示内容を固定する

あなたは専門商社の経理部で、海外の仕入先から届いた英文のクレジットノートを点検する担当です。
OCRが返した読み取り結果だけを見て、項目を切り出してください。推測で埋めないでください。

【やること】
1. クレジットノート自身の番号と、減額の対象になっている請求書の番号を分けて写す
2. 減額の理由を下の区分から選ぶ
3. 明細の各行から、品番・数量・単価・金額を原文のまま写す
4. 各項目の根拠にした原文の文字列を evidence に入れる

【番号の見分け方】
- 「Credit Note No.」「Credit Memo No.」などの見出しの番号は credit_note_no に入れる
- 「Original Invoice」「Ref. Invoice」「Against Invoice」などの見出しの番号は ref_invoice_nos に入れる
- 見出しから見分けられなければ、両方を "ambiguous" にする

【減額の理由の区分】
- return ............ 返品(Return、RMA の記載がある)
- shortage .......... 数量不足(Short shipment、Shortage)
- discount .......... 値引き(Discount、Allowance、Price concession)
- price_correction .. 単価や数量の訂正(Price correction、Invoice error)
- other ............. 上のどれにも当たらない
- 理由が書かれていなければ "not_stated" にする。明細から理由を推測しないでください

【厳守事項】
- 対象の請求書番号が書かれていなければ "not_found" にしてください。品番や日付から推測しないでください。
- 金額を計算しないでください。単価×数量や合計を検算しないでください。
- 金額の符号(マイナス、CR)は原文のまま写してください。付け足したり外したりしないでください。
- 通貨を換算しないでください。
- 減額を受け入れてよいかどうかを書かないでください。
- confidence は OCR が返した値をそのまま入れてください。

【読み取り結果】{expense_result}
【この仕入先の番号の書き方の例】{supplier_hint}

「番号の見分け方」を手順の中に書いているのは、2つの番号の取り違えがこの題材でいちばん響くからです。 厳守事項の側に「取り違えないこと」と書くだけでは防げません。見出しの文字で見分ける手順と、見分けられないときの返し方を、具体的に示します。

Step7

出力形式を固定する

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

{
  "supplier_code": "",
  "credit_note_no": { "value": "", "status": "ok | not_found | ambiguous", "evidence": "" },
  "ref_invoice_nos": { "values": [], "status": "ok | not_found | ambiguous", "evidence": "" },
  "rma_no": "",
  "reason": "return | shortage | discount | price_correction | other | not_stated",
  "currency": "",
  "total_as_written": "",
  "lines": [
    { "line_no": 1, "product_code": "", "quantity": "", "unit_price": "", "amount": "",
      "confidence": 0, "evidence": "", "page": 1 }
  ]
}

照合のプログラムは、この lines に次の判定を付けます。

判定意味
ok元の請求書の行と照合の相手(返品・値引きの合意)の両方と合う
amount_diff減額の額が、返品数量×元の単価、または合意した値引きの額と違う
no_source返品の記録・値引きの合意に当たるものが無い
duplicate前月までに同じ請求書・品番・数量の減額が計上されている
invoice_not_found対象の請求書番号で買掛金の明細を引けない
unreadable読み取りの信頼度が低い、または ambiguous

理由は、AIの出力とプログラムの判定を別の層に置けることです。 lines はAIが原文から埋め、判定はプログラムが買掛金と返品の記録を相手に付けます。取り決めが変わっても、直すのは照合の規則だけです。

クレジットノートごとの判定条件
postすべての行が ok、かつ合計が明細の和と一致
queryamount_diff・no_source・duplicate のいずれかがある
needs_humaninvoice_not_found・unreadable がある、または reason が not_stated
Step8

システムへ連携する

つなぎ先方式内容
共有の受信箱メールのルールクレジットノートの添付を受付フォルダへ移す
受付フォルダ(S3)AWS Lambda の起動保存を検知し、読み取りを始める
AWS Textract非同期のAPI呼び出しと SNS の通知番号・日付・合計・明細の行を返す
Claude APIAPI呼び出し番号と理由と明細の切り出し、照会文の下書き
基幹システム出力ファイルの読み取り買掛金の明細と返品の記録を照合用に読み込む
買掛金の起票既存の入力経路確認の済んだものだけを担当者が起票する

基幹システムへは書き込みません。 この構成が出すのは照合の結果と起票の候補までで、買掛金を減らす起票は担当者が行います。 書き込みを足すと、番号の取り違えがそのまま別の請求書の減額になります。

Step9

人が確認する

経理の担当が開くのは query と needs_human のものと、届いていない減額の一覧です。 post のものは一覧で仕入先と合計を流し見て起票します。全件を開く設計にすると、第10章の6分には収まりません。

  1. needs_human を先に見る … invoice_not_found は原本の番号を読み直し、自社の発注番号で書かれていないかを確かめます
  2. amount_diff の根拠を確かめる … どの単価で計算した差かを見ます。元の請求書の単価と、仕入先が使った単価のどちらが取り決めに沿うかは購買が決めます
  3. duplicate を確かめる … 再発行なのか、別の返品の減額なのかを、返品番号と数量で見分けます
  4. 照会文と催促を直して送る … 送るのは購買の担当です
  5. 判定を変えたら記録する … どの行を、どの判定に、なぜ変えたかを残します

3番目を急がないでください。 同じ品番を同じ数量だけ2回返品していることもあり、本当の二重計上と、2回の正当な返品は、返品番号でしか見分けられません。

Step10

例外に対処する

起きること対応
英語以外のクレジットノートこの構成では読めない。英文での発行を仕入先に依頼する
パスワード付きのPDF解除したものを仕入先に頼む
請求書やデビットノートが混ざる見出しで分け、分けられなければ needs_human
1つのクレジットノートが複数の請求書にまたがる行ごとに対象の請求書を切り出し、行単位で照合する
通貨が元の請求書と違う換算せずに query。為替の扱いは取り決めで決まる
値引きの合意が一覧に無いno_source。購買に合意の登録を頼む
返品の記録に元の請求書番号が無い品番と出荷日で候補を出し、needs_human
PARTIAL_SUCCESS で一部のページが読めないWarnings のページを記録し、needs_human に
OCRが応答しない受付フォルダに残す。処理済みに移すのは成功したときだけ

上から6行目が、立ち上げの時期にいちばん多く出ます。 購買がメールで値引きを取り決め、一覧に登録していないためです。値引きを合意したら一覧に1行足す、を購買の手順に入れると、この行は減ります。

Step11

記録を残す

  • クレジットノートの原本と、受け取った日時・仕入先
  • OCRが返したJSONの全文(GetExpenseAnalysis の全ページ分)
  • AIの切り出しの結果(番号・理由・lines)
  • 照合の結果と、そのとき参照した買掛金の明細・返品の記録・値引きの合意の内容
  • 担当者が判定を変えた記録
  • 照会・催促の内容と仕入先の回答、起票の日時
  • 仕入先ごとの missing_credit の件数と、返品からクレジットノートまでの日数

最後の行は、仕入先との交渉の材料になります。 返品から減額までの日数が長い仕入先は、支払と相殺する取り決めに変えるほうが、毎月の催促より確実です。

04実装レベルの3段階

最小構成:コンソールで読み取り、AIの画面に貼って番号と明細を切り出させる / 書き写しと番号の見分け
半自動化:上記+受付フォルダから自動で読み取り、買掛金の明細と照らした一覧を出す / 書き写しと対象の請求書の特定
本格構成:上記+返品の記録・値引きの合意・前月までの計上との照合、届いていない減額の一覧、照会文の下書き / 照合と催促の準備まで

最小構成では件数がさばけません。 1件ずつ貼り付けるので、180件には使えません。確かめるための段階です。 半自動化で、1件20分が11分程度になります。 書き写しと対象の請求書を探す作業は無くなりますが、返品の記録と前月までの計上との照合が残ります。本格構成で6分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、番号の書き方が崩れやすい仕入先と、値引きの合意が一覧に無い仕入先が先に分かります。そこを直してから本格構成に進むほうが、人に回る件数が減ります。

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

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

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

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

AI活用について相談する

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

向いている
  1. 海外の仕入先から輸入しており、返品・数量不足・品質不良による値引き・価格の訂正のたびに英文のクレジットノートを月に百件以上受け取っている商社・メーカー・小売。クレジットノートの明細を表計算に書き写し、どの請求書の減額かを買掛金の明細から探している場合。返品したのにクレジットノートが届いていない分を、誰も数えていない場合。
向いていない
  1. 仕入先とEDIで減額のデータを受け取れており、紙やPDFのクレジットノートを読む必要がない場合。クレジットノートが英語以外(中国語・韓国語・日本語など)で届く仕入先が中心の場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めません)。月の件数が数十件で目視で足りる場合。なお、食い違いのある減額を受け入れるか、仕入先と交渉するかの判断は、購買と経理の担当が行うもので、この構成では代替できません。

07最小構成で試す方法

  1. 先月のクレジットノートから、仕入先の違う20件を選ぶ(うち数件は、食い違いを照会したものを入れる)
  2. 20件を AWS Textract のコンソールで請求書として分析し、番号と明細の行がどう返るかを見る
  3. 読み取り結果を手元のAIサービスに貼り、「クレジットノート自身の番号と対象の請求書の番号を分け、減額の理由と明細を写してください。書かれていない番号は推測しないでください。金額は計算しないでください」と指示する
  4. 出てきた結果を、当時の担当者の書き写しと突き合わせる

20件は必ずやってください。 ワークフローを組む前に、「クレジットノートが請求書の分析で読めるのか」と「2つの番号を見分けられるのか」を確かめます。

出てきた内容判断
当時と同じ番号と明細になった買掛金と返品の記録との照合に進む
対象の請求書番号を推測で埋めた指示の書き方で直る。構成は有効
明細の行がまとまって返る、番号が取れない分析の方式が合っていない。 文書の分析(表とキーと値)で読み直す

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

問題対策
クレジットノート自身の番号と対象の請求書番号を取り違える見出しの文字で見分ける手順をプロンプトに書く
対象の請求書番号を推測で埋めるnot_found を返させ、候補探しはプログラムに任せる
返品したのに届いていない減額を数えていない返品の記録の側から毎週数える
金額の符号の書き方が仕入先ごとに違う符号を当てにせず、すべて減額として扱う
再発行と2回の正当な返品を見分けられない返品番号と数量で見分ける
値引きの合意がメールにしか無い合意を一覧に登録する手順を購買に足す
請求書を減額の書類として読む見出しで書類の種類を分ける
通貨の違う減額を換算して照合する換算せずに照会する

上の3行が、この構成の失敗のほとんどです。 1行目と2行目は正しい減額を別の請求書に付ける誤り、3行目は来ていない減額に気づかない誤りです。どちらも支払の額に直接出ます。

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

この構成で扱うデータ: 仕入先の名前と取引の条件、品番と単価、返品と値引きの内訳、買掛金の残高です。個人の情報はほとんど含みませんが、仕入の単価と値引きの条件は、競合に知られたくない取引の情報です。

  1. 生成AIに渡す範囲をクレジットノートの読み取り結果に限る … 買掛金の明細と返品の記録はプログラムの側で照合します。仕入先ごとの単価の一覧を外部のAIに渡しません
  2. 保管の暗号化を決める … StartExpenseAnalysis の KMSKeyId を指定すると、利用者のバケットに出力するときにそのキーで暗号化されます。指定しない場合は SSE-S3 で暗号化されます
  3. 起票を自動で確定させない … 出すのは起票の候補までです。番号の取り違えは、別の請求書の残高を狂わせます
  4. 照会と催促を自動で送らない … 出すのは下書きまでです。仕入先との関係と、取り決めの解釈に関わります
  5. 書類の保存を規程に合わせる … クレジットノートは取引に関する書類です。原本と照合の記録を、自社の帳簿書類の保存の規程に合わせて残します

誤りが起きた場合のリスクは、減額されるべき分を支払い過ぎることと、正しい減額を別の請求書に付けて残高を狂わせることの2つです。 前者は届いていない減額の見落としから、後者は番号の取り違えと推測の補完から起きます。

10まず何から始めるか

1週目:返品の記録と値引きの合意をそろえる

基幹システムの返品の記録に、元の請求書番号と出荷日が入っているかを確かめます。あわせて、直近3か月の値引きの合意を購買のメールから拾い、一覧に起こします。件数の多い上位20社から始めます。

2週目:20件で試す

先月のクレジットノートから仕入先の違う20件を選び、コンソールで読み取り、手元のAIサービスで番号と明細を切り出させます。2つの番号を取り違えていないか、対象の請求書番号を推測で埋めていないかを最優先で見ます。

3週目:照合の規則を決める

端数の違いをどこまで許すか、単価の版の違いをどう扱うか、返品から何日でクレジットノートが届かなければ催促するかを、購買と経理で決めます。

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

S3 と Lambda で受付フォルダを見張り、OCRを呼び、番号と明細を買掛金の明細と照らした一覧を書き出すところまで作ります。この時点ではクレジットノートごとの判定を出さず、行ごとの結果だけを見ます。

2か月目: 返品の記録・値引きの合意・前月までの計上との照合を足し、判定と届いていない減額の一覧を出します。3か月目以降: 照会文の下書きを足し、1件20分が何分になったかを実測します。届いていない減額の一覧が毎週回り、仕入先への催促が購買の手順に定着した時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-10-09/最終更新:2026-10-09
確認した内容情報源確認日
対応言語が英・仏・独・伊・葡・西であること。非同期の処理でPDFが500MB・3,000ページまで。パスワード付きPDF不可。文字の高さ15ピクセル(150 DPIで8ポイント)が下限AWS: Set Quotas in Amazon Textract2026-10-09
テンプレートなしで請求書・領収書の項目を抽出し、異なる見出しを INVOICE_RECEIPT_ID などの標準の項目にそろえること。標準に当たらない項目が OTHER になること。明細の ITEM・QUANTITY・UNIT_PRICE・PRICE・PRODUCT_CODE、LabelDetection・ValueDetection・Confidence・PageNumber が返ること。対象が請求書と領収書と説明されていることAWS: Analyzing Invoices and Receipts2026-10-09
StartExpenseAnalysis が JPEG・PNG・PDF を扱うこと。ClientRequestToken で同じ JobId が返ること。JobTag が完了の通知に含まれること。KMSKeyId の扱い。JobId が7日間有効なことAWS: StartExpenseAnalysis2026-10-09
MaxResults が既定・最大20で NextToken で続きを取ること。SummaryFields・LineItemGroups・Currency の構造。JobStatus に PARTIAL_SUCCESS があることAWS: GetExpenseAnalysis2026-10-09
構造化出力を output_config.format(type: "json_schema")で指定することClaude: Structured outputs2026-10-09

食い違いのある減額を受け入れるか、仕入先と交渉するかは、購買と経理の担当で決めてください。 本記事は公開仕様で確認できた範囲だけを扱っています。

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

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

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

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