海外の仕入先から届く英文のプロフォーマインボイスを読み取り、発注書と品番・単価・数量・支払条件・出荷予定を突き合わせて、送金の前に食い違いを拾う
海外の仕入先から届く英文のプロフォーマインボイス(PI)を読み取り、自社の発注書と品番・単価・数量・支払条件・出荷予定を突き合わせます。食い違いのある項目だけを購買の担当者に回し、前払いの送金の前に仕入先へ確かめられるようにします。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- 商社/小売/製造
- 対象部門
- 経理/購買
- 対象業務
- 内容確認・チェック/比較検討
- 主な課題
- 入力作業が多い/属人化している/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/工数削減/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 仕入先からPIがメールで届く。担当者がPDFを開き、発注番号を探す
- 基幹システムで同じ発注番号の発注書を開き、画面を並べる
- 明細を1行ずつ見比べ、品番・数量・単価が合っているかを確かめる
- 支払条件と出荷予定、インコタームズ、通貨が発注書と同じかを確かめる
- 振込先の口座を、仕入先台帳と見比べる
- 食い違いがあれば、英文で仕入先へ問い合わせのメールを書く
- 合っていれば、前払いの金額を計算して経理へ送金の依頼を出す
- 人担当者が、仕入先から届いたPIのPDFを受付のフォルダに保存する(専用の受信アドレスから自動で保存してもよい)
- 自動保存をきっかけに、AWS Textract の請求書・領収書の分析でPIを読み取る
- 自動見出しの項目(発注番号、日付、通貨、合計、支払条件、出荷予定など)と明細の行(品番、数量、単価、金額)を取り出す
- 自動Claude API が、支払条件の文を前払いの割合と残りの支払の時期にそろえ、仕入先の品番を対応表で自社の品番に引き当てる
- 自動プログラムが、発注書の明細と行を組にし、品番・数量・単価・金額、支払条件、出荷予定、通貨、インコタームズを比べる
- 自動振込先の口座を仕入先台帳と比べ、違えば `bank_changed` の印を付ける
- 自動食い違いの一覧と、仕入先への問い合わせの英文の下書きを作る
- 人担当者が、食い違いの一覧を確かめ、問い合わせるか、そのまま送金の依頼に進むかを決める
- 人`bank_changed` が付いたものは、送金を止め、台帳にある連絡先へ電話で確かめる
- 人一致したものは、前払いの金額を確かめて経理へ送金の依頼を出す
各工程の詳しい説明を読む
- 仕入先からPIがメールで届く。担当者がPDFを開き、発注番号を探す
- 基幹システムで同じ発注番号の発注書を開き、画面を並べる
- 明細を1行ずつ見比べ、品番・数量・単価が合っているかを確かめる
- 支払条件と出荷予定、インコタームズ、通貨が発注書と同じかを確かめる
- 振込先の口座を、仕入先台帳と見比べる
- 食い違いがあれば、英文で仕入先へ問い合わせのメールを書く
- 合っていれば、前払いの金額を計算して経理へ送金の依頼を出す
(a)明細の見比べが抜ける。 3番目は、1枚に10行から50行の明細を、品番の書き方の違うPIと発注書で見比べる作業です。合計が合っていると「合っているだろう」と省かれ、 単価と数量が入れ替わった行や、似た型番に替わった行が、入荷のときに見つかります。
(b)支払条件の文が読みにくい。 「30% deposit by T/T, 70% balance before shipment」と「30% T/T in advance, balance against copy of B/L」は、残りを払う時期が違います。送金の時期と資金繰りに関わる違いですが、文の言い回しが仕入先ごとに違うため、 慣れた担当者でないと見落とします。
(c)振込先の違いに気づきにくい。 PIの下の方に小さく書かれた銀行名と口座番号を、毎回台帳と見比べるのは手間です。ここが省かれると、口座変更の連絡を装った偽の請求に、そのまま送金することになります。
(d)確かめ方が担当者ごとに違う。 長く担当している仕入先は「この仕入先は数量の端数を丸めてくる」と知っていて、そこを重点的に見ます。担当が替わると、その勘所が引き継がれません。
- 【人】 担当者が、仕入先から届いたPIのPDFを受付のフォルダに保存する(専用の受信アドレスから自動で保存してもよい)
- 【自動】 保存をきっかけに、AWS Textract の請求書・領収書の分析でPIを読み取る
- 【自動】 見出しの項目(発注番号、日付、通貨、合計、支払条件、出荷予定など)と明細の行(品番、数量、単価、金額)を取り出す
- 【自動】 Claude API が、支払条件の文を前払いの割合と残りの支払の時期にそろえ、仕入先の品番を対応表で自社の品番に引き当てる
- 【自動】 プログラムが、発注書の明細と行を組にし、品番・数量・単価・金額、支払条件、出荷予定、通貨、インコタームズを比べる
- 【自動】 振込先の口座を仕入先台帳と比べ、違えば
bank_changedの印を付ける - 【自動】 食い違いの一覧と、仕入先への問い合わせの英文の下書きを作る
- 【人】 担当者が、食い違いの一覧を確かめ、問い合わせるか、そのまま送金の依頼に進むかを決める
- 【人】
bank_changedが付いたものは、送金を止め、台帳にある連絡先へ電話で確かめる - 【人】 一致したものは、前払いの金額を確かめて経理へ送金の依頼を出す
8番目が、この設計の分かれ目です。担当者が見るのは食い違いの行だけです。 一致した行は一覧で件数を見るだけにし、食い違いの行だけを、PIの該当箇所と並べて確かめます。 全行を見直す設計にすると、時間はほとんど減りません。
9番目は、件数が少なくても必ず残す工程です。 振込先の違いは、送金してしまえば取り戻せないことがある食い違いです。AIの判定に関係なく、人が台帳の連絡先に電話をかけて確かめます。
02今回想定するシステム構成
仕入先(英文のPI、PDF) │ メールで受け取り、受付のフォルダへ保存 ▼【トリガー】Amazon S3 へのファイルの保存 AWS Lambda ▼ AWS Textract(StartExpenseAnalysis/GetExpenseAnalysis) │ 見出しの項目(SummaryFields)と明細の行(LineItemGroups)、信頼度 ▼ Claude API ── 支払条件の文をそろえる/品番を対応表で引き当てる ▼ 照合のプログラム(Python) │ ① 明細(品番・数量・単価・金額) ② 支払条件 ③ 出荷予定 │ ④ 通貨・インコタームズ ⑤ 振込先(仕入先台帳と) ▼ 食い違いの一覧 + 問い合わせの英文の下書き ▼ 【人が食い違いだけ確認】── 振込先の違いは送金を止めて電話で確認 ▼ 経理へ送金の依頼
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | AWS Textract(StartExpenseAnalysis/GetExpenseAnalysis) | Azure AI Document Intelligence、Google Document AI |
| 生成AI | Claude API(支払条件のそろえ、品番の引き当て、問い合わせの英文の下書き) | OpenAI API、Gemini API |
| 差異計算 | Python(発注書・仕入先台帳との照合) | 基幹システムの照合の機能 |
| 連携 | AWS Lambda(保存と読み取りの完了を起点に処理を動かす) | Amazon EventBridge |
| 保管 | Amazon S3(PI、読み取り結果、照合の結果) | 社内のファイルサーバー |
基幹システムと仕入先台帳は、新しく足すものではありません。 発注書の明細は基幹システムから書き出すだけで、この構成から発注書を書き換えることはしません。 仕入先台帳も読むだけで、振込先の口座を書き換える経路は作りません。
土台になるのは、AWS Textract の請求書・領収書の分析(AnalyzeExpense)です。 テンプレートや設定なしに、ほぼどんな請求書からも、日付、番号、品目の価格、合計、支払条件などを取り出すとされています。請求書ごとに違う項目名を、標準の名前にそろえて返すのが要です。 「Invoice No.」「PI No.」「Bill No.」が INVOICE_RECEIPT_ID にそろい、発注番号は PO_NUMBER、支払条件は PAYMENT_TERMS、出荷にかかわる日付は DELIVERY_DATE の名前で受け取れます。
明細の行は、品名 ITEM、数量 QUANTITY、単価 UNIT_PRICE、金額 PRICE、品番 PRODUCT_CODE として、行ごとにまとまって返ります。 標準の名前に当てはまらない項目は OTHER になり、書類に書かれていた項目名そのもの(LabelDetection)と値(ValueDetection)が、信頼度(Confidence)付きで返ります。 インコタームズや振込先の銀行は、この OTHER から拾います。
Textract が読めるのは英文の書類に限られます。 対応する言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語で、手書きの文字は英語だけ、縦書きには対応していません。 中国の仕入先のPIでも本文が英文なら読めますが、社名や住所が漢字だけで書かれている部分は読めません。 その部分は仕入先台帳の値を使います。
03どうやって実装するのか
処理の起点を決める
受付のフォルダ(Amazon S3)にPIのPDFが保存されたことを起点にします。 PIは仕入先の時差で夜間にも届き、送金の締切は仕入先との取り決めで決まっているため、まとめて朝に処理するより、届いた順に読み取っておくほうが確認を早く始められます。
保存の経路は2つ用意します。担当者がメールからPDFを保存する経路と、PI専用の受信アドレスに転送すると添付が自動で保存される経路です。 どちらで入っても、そこから先は区別しません。
読み取りは非同期の呼び出し(StartExpenseAnalysis)で行います。 PIは複数ページになることが多く、同期の呼び出しはPDFが1ページまでという制限があるためです。読み取りが終わったことの知らせを受けて、次の処理を動かします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| PI | 英文のPDF。発注番号、日付、通貨、明細、合計、支払条件、出荷予定、インコタームズ、振込先 | 受付のフォルダ |
| 発注書 | 発注番号、仕入先、明細(自社の品番・数量・単価)、通貨、支払条件、出荷予定、インコタームズ | 基幹システムの書き出し |
| 品番の対応表 | 仕入先ごとの、仕入先の品番と自社の品番の組 | 購買部の管理表 |
| 仕入先台帳 | 仕入先の名称、振込先の銀行・口座番号・SWIFTコード、取り決めた支払条件、連絡先の電話番号 | 経理の台帳 |
| 過去のPI | 同じ発注番号で前に届いたPIと、その照合の結果 | 保管のフォルダ |
質を決めるのは、3行目の品番の対応表です。 PIに仕入先の品番しか書かれていないと、発注書の行と組にできません。対応表が無い仕入先では、明細の照合がすべて「組にできない」になります。 対応表を仕入先ごとに整えることが、最初の準備作業です。
5行目の過去のPIは、改訂版を見分けるために持ちます。 同じ発注番号でPIが2枚目に届いたら、前の版との違いも一覧に出します。 担当者が「何が変わったのか」を最初に知りたいからです。
データの取得方法を決める
Textract の読み取りの結果は、ページごとに見出しの項目と明細の行に分かれて返ります。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 発注番号、日付、合計、支払条件、出荷予定 | SummaryFields の標準の名前(PO_NUMBER、INVOICE_RECEIPT_DATE、TOTAL、PAYMENT_TERMS、DELIVERY_DATE) | 発注書との組と、見出しの照合 |
| 明細の行 | LineItemGroups の ITEM、QUANTITY、UNIT_PRICE、PRICE、PRODUCT_CODE | 明細の照合 |
| インコタームズ、振込先 | SummaryFields の OTHER の LabelDetection と ValueDetection | 条件と振込先の照合 |
| 通貨 | 金額の値に付いて返る通貨の情報 | 発注書の通貨との照合 |
| 信頼度 | 各項目の Confidence | 読み取りに自信があるか |
発注書は、発注番号で基幹システムの書き出しから引きます。 PIの PO_NUMBER が読めなかったときは、仕入先と日付から候補を出して担当者に選んでもらいます。発注番号を推測で決めて照合を進めることはしません。
OTHER の項目は、項目名の文字で拾います。 「Beneficiary」「Bank」「SWIFT」「A/C No.」を含む項目名なら振込先、「Incoterms」「Price Term」「Trade Term」なら取引条件として扱います。項目名の一覧は仕入先ごとに増えていくので、表で持って育てます。
AIへ渡す前に整形する
- 形式の確認 … JPEG、PNG、PDF、TIFF のいずれかであることを確かめます。XFA の形式の PDF は読めません
- パスワードの確認 … パスワード付きの PDF は読めません。外してから送ってもらいます
- 大きさとページ数の確認 … 非同期の呼び出しで PDF は500MB、3,000ページまでです。PIで問題になることはまずありません
- 文字の大きさの確認 … 文字の高さは15ピクセルが下限で、150DPIで8ポイントの文字に当たります。スキャンし直したPIの小さな注記がこれを下回ることがあります
- 言語の確認 … 本文が英文でないPIは読み取りに回さず、担当者に戻します
- 改訂版の確認 … 同じ発注番号のPIが既にあれば、改訂版として前の版と組にします
- 単位と書き方のそろえ … 「1,200.00」「1.200,00」のような数字の書き方の違い、「PCS」「SET」「KG」の単位を、照合の前にそろえます
7番目を軽く見ないでください。 ドイツの仕入先は小数点にカンマを使うことがあり、「1.200,00」を1.2と読むと、単価が千分の一の行として「大幅な値下げ」と出ます。 仕入先ごとに数字の書き方を台帳に持たせ、そこで読み替えます。
AIに処理させる
させるのは、読み取った値のうち、決まった形にそろえにくいものを、そろえることだけです。 発注書との比べ合わせは、照合のプログラムが行います。
| そろえるもの | そろえ方 | 判断できないときの扱い |
|---|---|---|
| 支払条件 | 前払いの割合、前払いの時期、残りの割合、残りの支払の時期(出荷前/B/Lの写しと引き換え/到着後など)に分ける | 読み取れない言い回しは unparsed |
| 品番の引き当て | 仕入先の品番を対応表で自社の品番に引き当てる。表記ゆれ(ハイフン・空白)だけをそろえる | 対応表に無ければ no_mapping |
| 出荷予定 | 「Shipment: within 45 days after deposit」のような書き方を、日付か「入金後の日数」に分ける | 書かれていなければ missing |
| 振込先 | 銀行名、口座番号、SWIFTコードを分ける | 読めない桁があれば unreadable |
右端の列が、人に回す項目を決めます。 特に no_mapping は、対応表に無い品番がPIに載っているということで、似た型番に替わった可能性があります。 似た品番を推測で当てはめず、そのまま人に回します。
| させないこと | 理由 |
|---|---|
| 送金してよいかの判断 | 資金の支払で、担当者と経理が決める |
| 品番の推測での引き当て | 似た型番に当てはめると、替わった品番が一致に見える |
| 金額の計算と直し | 単価×数量と金額の違いも、食い違いとして残す |
| 振込先の正しさの判断 | 台帳と違えば止めるだけ。正しいかは電話で確かめる |
| 仕入先との条件の交渉 | 問い合わせの下書きまで。送るのは担当者 |
2行目がいちばん起きやすい失敗です。 「AB-1200-S」が対応表に無く、「AB-1200」があると、AIは同じものだろうと引き当てがちです。末尾の「-S」が別の仕様を表しているなら、その時点で替わった品番が見えなくなります。 表記ゆれとしてそろえてよいのは、ハイフン・空白・大文字小文字だけと決めておきます。
指示内容を固定する
あなたは輸入の購買担当として、海外の仕入先のプロフォーマインボイス(PI)を
発注書と比べられる形にそろえる立場です。
OCRが返した読み取り結果だけを見てそろえてください。推測で埋めないでください。
【そろえる項目】
1. payment_terms …… 支払条件の原文を、次に分けてください
- deposit_percent(前払いの割合)、deposit_timing(前払いの時期)
- balance_percent(残りの割合)、balance_timing(残りの支払の時期)
balance_timing は before_shipment / against_bl_copy / after_arrival / other のいずれか
2. lines …… 明細の行ごとに、supplier_part_no(PIの品番)と、
【品番の対応表】から引き当てた our_part_no
3. shipment …… 出荷予定。日付があれば date、「入金後○日」なら days_after_deposit
4. bank …… 振込先の銀行名、口座番号、SWIFTコード
【厳守事項】
- 支払条件の割合は、原文に書かれた数字だけを使ってください。
前払いの割合が書かれていなければ、残りの割合から逆算しないでください。
- 品番の引き当ては、ハイフン・空白・大文字小文字の違いだけをそろえてください。
末尾の記号や数字が違う品番を、同じ品番として引き当てないでください。
対応表に無ければ our_part_no を null にし、flags に no_mapping を入れてください。
- 数量・単価・金額は読み取った値をそのまま写してください。計算して直さないでください。
- 振込先の口座番号やSWIFTコードは、読み取った文字をそのまま写してください。
桁を補う、記号を直すことをしないでください。
- 原文の該当箇所を evidence にそのまま写してください。
- 発注書と合っているか、送金してよいかは書かないでください。
- 英文でない部分は読み取らず、flags に non_english を入れてください。
【PIの読み取り結果】{expense_result}
【この仕入先の品番の対応表】{part_mapping}
【この仕入先の数字の書き方】{number_format}
「残りの割合から逆算しない」を書かないと、「balance 70%」から前払いを30%と埋めます。 多くの場合は合っていますが、原文に前払いの割合が書かれていないという事実は、仕入先に確かめるべき点です。逆算させると、その点が消えます。
口座番号を「そのまま写す」のも同じ理由です。 読み取りで1桁欠けた口座番号を、AIが台帳の番号に寄せて補うと、本当に違う口座が書かれていたときに気づけません。
出力形式を固定する
PI1枚ごとに、次の形のJSONで受け取ります。 Claude API の構造化出力を使い、スキーマに沿った形で返させます。
{
"pi_no": "",
"revision": "",
"po_no": "",
"currency": "",
"incoterms": "",
"payment_terms": {
"raw": "", "deposit_percent": null, "deposit_timing": "",
"balance_percent": null, "balance_timing": "before_shipment | against_bl_copy | after_arrival | other"
},
"shipment": { "raw": "", "date": null, "days_after_deposit": null },
"lines": [
{ "line_no": 1, "supplier_part_no": "", "our_part_no": null,
"qty": 0, "unit": "", "unit_price": 0, "amount": 0,
"confidence": 0, "evidence": "", "flags": ["no_mapping | non_english"] }
],
"bank": { "bank_name": "", "account_no": "", "swift": "", "confidence": 0 },
"total": 0
}
照合のプログラムは、項目ごとに次の印を足します。
| 印 | 付く条件 |
|---|---|
line_ok | 品番・数量・単価が発注書の行と同じ |
qty_diff / price_diff | 数量か単価が発注書と違う |
line_added / line_missing | PIにだけある行、発注書にだけある行 |
amount_calc_diff | 単価×数量とPIの金額が合わない |
terms_diff | 支払条件が発注書・仕入先台帳の取り決めと違う |
shipment_late | 出荷予定が発注書の希望より遅い |
bank_changed | 振込先が仕入先台帳と違う |
revised | 前の版のPIから変わった項目がある |
1つ目の理由は、AIのそろえと照合の結果を別の層に置けることです。 lines と payment_terms はAIが埋め、印はプログラムが付けます。取り決めの許容の幅(単価の端数の丸めなど)が変わっても、直すのはプログラムの規則だけです。
2つ目は、構造化出力で形が崩れないことです。 Claude API の構造化出力は、output_config.format に JSON Schema を渡すと、スキーマに合った JSON を返すものです。additionalProperties は false にする必要があり、数値の範囲の制約などは使えません。 値の範囲は照合のプログラムの側で確かめます。なお、AWS の上で Claude を使う場合、構造化出力が使える経路は限られると公式に書かれているため、この構成では Claude API を直接呼びます。
3つ目は、evidence と confidence で確認が速くなることです。 担当者はPDFを開く前に、どの文字を根拠にどの程度の自信で読んだかを一覧で見られます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付のフォルダ(Amazon S3) | 保存の知らせで AWS Lambda を動かす | PIの保存を検知する |
| AWS Textract | API呼び出し(非同期) | 見出しの項目と明細の行、信頼度 |
| Claude API | API呼び出し | 支払条件のそろえ、品番の引き当て、問い合わせの英文の下書き |
| 基幹システム | 書き出したファイルの読み取り | 発注書の明細と条件 |
| 仕入先台帳 | 書き出したファイルの読み取り | 振込先と取り決めた支払条件 |
| 担当者への知らせ | メールまたは社内のチャット | 食い違いの一覧へのリンク |
基幹システムへは書き込みません。 PIの単価が発注書と違っても、発注書を直すかどうかは、仕入先と話したあとで担当者が決めます。
仕入先台帳へも書き込みません。 これがこの構成でいちばん大事な決まりです。振込先の違いを見つけたら、台帳を直す経路ではなく、送金を止める経路に進みます。
人が確認する
人が見るのは、印の付いた項目だけです。 印が line_ok だけのPIは、一覧で合計と前払いの金額を確かめて、送金の依頼に進みます。
bank_changedを最初に見る … 送金を止めます。PIやメールに書かれた電話番号ではなく、仕入先台帳にある連絡先に電話して、口座変更の事実を確かめますline_missing・line_added・no_mappingを見る … 品番が替わっていないか、行が落ちていないかを、PIと発注書を並べて確かめますqty_diff・price_diff・terms_diffを見る … 発注のあとで合意した変更かを、仕入先とのやり取りで確かめますrevisedを見る … 前の版から何が変わったかを見て、送金に使う版を決めます- 問い合わせを送る … 下書きを直して、担当者が送ります
1番目は、どんなに急いでいても省かないでください。 口座変更を装った偽の請求は、PIの書式、署名、メールのやり取りまで本物に見えることがあります。 メールの中にある連絡先は偽の側が用意したものかもしれないので、確かめる先は、以前から台帳にある連絡先に限ります。
台帳の口座を直すのは、確かめが済んだあとに経理が行います。 購買の担当者がPIを見て直す運用にはしません。
例外に対処する
| 起きること | 対応 |
|---|---|
| 発注番号が読めない・書かれていない | 仕入先と日付から候補を出し、担当者が選ぶ。推測で組にしない |
| 本文が英文でない | 読み取りに回さず担当者へ戻す。この構成の対象外 |
| パスワード付きの PDF | 読めない。外して送ってもらう |
| 文字が小さすぎる | 15ピクセルが下限。読めない項目は unreadable として人へ |
| 小数点にカンマを使う数字 | 仕入先台帳の数字の書き方で読み替える |
| 品番が対応表に無い | no_mapping として人へ。似た品番に当てはめない |
| 同じ発注番号のPIが二度届く | 改訂版として前の版と比べ、違いを出す |
| 読み取りの完了の知らせが来ない | 一定の時間で担当者に知らせ、もう一度読み取る |
上から2行目と6行目が、運用を始めてしばらくの大半を占めます。 どちらもAIの問題ではなく、仕入先ごとの事情と対応表の整備の問題です。 対応表を育てるほうが、読み取りを工夫するより効きます。
記録を残す
- 元のPIのPDFと、受け取った日時、改訂版の番号
- Textract が返した JSON の全文(見出しの項目、明細の行、信頼度)
- AI がそろえた結果と、照合のプログラムが付けた印と、そのとき参照した発注書と仕入先台帳の内容
- 担当者が判断した記録 … どの食い違いを、問い合わせたか・受け入れたか、その理由
bank_changedの確かめの記録 … 誰が、いつ、どの連絡先に電話して、何を確かめたか- 仕入先ごとの食い違いの種類と回数
5つ目は、必ず残してください。 振込先の確かめは、後から「本当に確かめたか」を問われる工程です。電話をかけた先が台帳の連絡先だったことまで残します。
04実装レベルの3段階
最小構成では、枚数がさばけません。 1枚ずつ画面に貼るので、月200枚には使えません。確かめるための段階です。 半自動化で、明細を書き写す時間は無くなります。 ただし、発注書との見比べは表を並べた手作業で残ります。本格構成で見比べも自動になり、この段階が本記事の想定です。 差が大きいのは、品番の対応表で行を組にする作業が、1行ずつの手作業だからです。
05工数削減シミュレーション
導入後 200件 × 3分 ÷ 60 = 10 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 海外の仕入先から機械部品・原料・雑貨などを輸入し、前払い(T/T)の送金の前にプロフォーマインボイス(PI)で金額と条件を確かめている商社やメーカーの購買部門。仕入先が数十社あり、PIの書式が仕入先ごとにばらばらな場合。発注書の内容を基幹システムから書き出せる場合。品番の対応表(仕入先の品番と自社の品番)を持っている、または作れる場合。
- 仕入先が数社に限られ、PIが毎回同じ書式で届く場合。仕入先とEDIで注文と請求をやり取りしており、PIを書類で受け取らない場合。PIが中国語や日本語など英文以外で書かれている場合(この構成の読み取りは英文の書類に限る)。なお、送金してよいかの判断、仕入先との条件の交渉、振込先の変更の真偽の判断は、この構成では代替できません。
07最小構成で試す方法
- 先月届いたPIから30枚を選ぶ(数量や単価に食い違いがあったもの、改訂版が出たもの、振込先の記載がわかりにくいものを入れる)
- 30枚それぞれについて、対応する発注書と、当時見つけた食い違いを用意する
- AWS のマネジメントコンソールで、Textract の請求書・領収書の分析にPIを読ませる
- 読み取った結果を手元の生成AIの画面に貼り、「支払条件を前払いの割合と残りの支払の時期に分けてください。書かれていない割合を逆算しないでください。明細を品番・数量・単価・金額の表にしてください」と指示する
- 出てきた表を、発注書と並べて見比べ、当時見つけた食い違いが表の上で見えるかを確かめる
30枚は必ずやってください。 プログラムを組む前に、「仕入先ごとの書式のPIが、明細の行として読めるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 当時見つけた食い違いが、表の上でも見える | 照合のプログラムと連携に進む |
| 支払条件の割合を逆算して埋めた | 指示の書き方で直る。構成は有効 |
| 明細の行が崩れる、品番が拾えない仕入先がある | その仕入先の書式と対応表が先。 品番の列の位置を確かめる |
3行目が出ても失敗ではありません。 その仕入先には、自社の品番を明細に書いてもらえないかを相談するところから始めてください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 似た型番を同じ品番として引き当てる | 表記ゆれは記号と大文字小文字だけと決め、それ以外は no_mapping |
| 合計が合っているので一致と見なす | 合計ではなく明細の行ごとに比べる |
| 支払条件の割合を逆算で埋める | 書かれていない割合は空のままにする |
| 振込先の違いで台帳を直してしまう | 台帳への書き込み経路を作らない。 違えば送金を止める |
| 口座変更を確かめる電話をPIに書かれた番号にかける | 台帳にある以前からの連絡先にかける |
| 小数点のカンマで単価を千分の一に読む | 仕入先ごとの数字の書き方を台帳に持たせる |
| 中国語の社名や住所が読めない | Textract は英文の書類に限る。その部分は台帳の値を使う |
| 複数ページのPIが読めない | 同期の呼び出しは PDF が1ページまで。非同期で読む |
| AWS の上で Claude の構造化出力が使えない | 構造化出力が使える経路は限られる。Claude API を直接呼ぶ |
| 改訂版のどれで送金したか分からない | 版ごとに照合の結果を残し、送金に使った版を記録する |
上の2行が、この構成の失敗のほとんどです。 どちらも「一致に見える」という同じ見た目から出発しています。品番と行の単位で比べているかどうかで、運用に乗るかが決まります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 仕入先の名称、取引の品目と単価・数量、支払条件、仕入先の振込先の口座情報です。単価と仕入先の組は、自社の仕入れの原価そのものです。
- AI に渡す範囲を、そろえに必要な項目に限る … 支払条件の文、明細の行、対象の仕入先の品番の対応表だけを渡します。他の仕入先の対応表や単価の一覧は渡しません
- 振込先の判断を AI にさせない … 振込先は台帳と機械的に比べるだけです。違いを見つけたら送金を止め、人が台帳の連絡先に電話します
- 台帳への書き込み経路を作らない … PIを根拠に口座を直す流れがあると、偽の請求がそのまま台帳に入ります
- 問い合わせを自動で送らない … 出すのは英文の下書きまでです。仕入先との条件の話し合いは、担当者が文面を確かめて送ります
- データの置き場所を決める … PIと読み取りの結果は、自社の AWS のアカウントの中に置きます。Claude API に送る範囲と保存の扱いを、社内の規程と照らして決めておきます
- 改訂版の扱いを残す … どの版で送金したかを記録し、後から別の版の金額で問い合わせが来たときに答えられるようにします
誤りが起きた場合のリスクは、食い違いを見逃して誤った金額で送金することと、偽の口座へ送金することの2つです。 前者は明細の行ごとの照合で抑え、後者は振込先を AI の判断から外して人の電話に置くことで防ぎます。
10まず何から始めるか
1週目:品番の対応表を整える
PIの枚数の多い上位10社について、仕入先の品番と自社の品番の対応表を作ります。 過去の発注書とPIを並べて組にすれば作れます。この10社で月のPIの大半が埋まります。
2週目:30枚で試す
先月のPIから30枚を選び、Textract で読み取らせ、生成AIの画面で支払条件と明細をそろえさせます。当時見つけた食い違いが表の上で見えるか、書かれていない割合を逆算していないかを最優先で見ます。
3週目:照合の規則と、振込先の確かめの手順を決める
単価の端数の丸め、数量の過不足の許容の幅、出荷予定の遅れの許容を、購買部で決めます。あわせて、bank_changed が出たときに誰が、どの連絡先に電話し、何を記録するかを、経理と決めます。 ここが決まらないうちに照合を動かすと、印は出るのに誰も止められない状態になります。
4週目:フォルダから明細の表までをつなぐ
受付のフォルダへの保存で読み取りとそろえを動かし、明細の表を書き出すところまで作ります。この時点では照合の印を出さず、そろえた表だけを見ます。
2か月目: 照合のプログラムを足し、発注書と仕入先台帳との印を付けて食い違いの一覧を出します。印の付いたPIの数を毎週数えます。3か月目以降: 改訂版との比べと問い合わせの英文の下書きを足し、1枚12分が何分になったかを実測します。仕入先ごとの no_mapping の数を見て、対応表を育て終えた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
請求書・領収書の分析が、テンプレートや設定なしに日付・番号・品目の価格・合計・支払条件などを取り出すこと。項目名の違いを標準の名前(INVOICE_RECEIPT_ID、PO_NUMBER、PAYMENT_TERMS、DELIVERY_DATE、TOTAL など)にそろえること。明細を ITEM・QUANTITY・UNIT_PRICE・PRICE・PRODUCT_CODE で返すこと。標準に当てはまらない項目が OTHER になること。LabelDetection・ValueDetection・Confidence を返すこと。同期の AnalyzeExpense と非同期の StartExpenseAnalysis/GetExpenseAnalysis があること | AWS: Analyzing Invoices and Receipts | 2026-10-13 |
| 対応する形式が JPEG・PNG・PDF・TIFF で、XFA の PDF に対応しないこと。同期の呼び出しは10MB・PDF は1ページ、非同期は PDF が500MB・3,000ページまでであること。パスワード付きの PDF に対応しないこと。対応言語が英・仏・独・伊・葡・西で、手書きは英語のみ、縦書きに対応しないこと。文字の高さの下限が15ピクセル(150DPI で8ポイント)であること | AWS: Set Quotas in Amazon Textract | 2026-10-13 |
構造化出力が output_config.format に JSON Schema を渡して、スキーマに合った JSON を返すこと。additionalProperties は false にする必要があり、数値の範囲などの制約に対応しないこと。Amazon Bedrock では構造化出力が使える経路が限られること | Claude Platform Docs: Structured outputs | 2026-10-13 |
送金してよいか、振込先の変更が正しいかは、購買と経理が仕入先に確かめて決めてください。 本記事は上記の公開資料で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1368)についてのご相談はこちらから。
