Media > AI活用ユースケース > 購買 > 海外のメーカー・代理店から届く英文の見積書を読み取り、単価・インコタームズ・支払条件・納期・保証を見積比較表にそろえて、条件のそろっていない見積を拾う

海外のメーカー・代理店から届く英文の見積書を読み取り、単価・インコタームズ・支払条件・納期・保証を見積比較表にそろえて、条件のそろっていない見積を拾う

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

海外のメーカーや代理店から届く英文の見積書を読み取り、単価・数量・インコタームズ・支払条件・納期・保証を見積比較表の項目にそろえます。見積依頼で出した条件と違う見積を拾い、比べる前に確かめる点を挙げます。

サマリー
生成AI
ChatGPT/Claude/Gemini
AIサービス
AWS Textract/Azure AI/Google Document AI
連携・自動化
Python
対象業界
商社/製造
対象部門
購買
対象業務
データ入力・転記/比較検討
主な課題
入力作業が多い/判断に時間がかかる/確認ミスが多い
AIで行う処理
抽出
主な効果
入力漏れ削減/判断支援/工数削減
導入難易度
★★★☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
条件付き
現在工数
60h/月
AI導入後
20h/月
想定削減
67%
年間削減
480h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. 仕入先からメールで届いた見積書のPDFを、見積依頼の番号のフォルダに保存する
  2. 購買担当が見積書を開き、品番・数量・単価・通貨・金額を見積比較表に写す
  3. インコタームズと場所、支払条件、納期、見積の有効期限、保証期間を読み、依頼の条件と見比べる
  4. 明細の注記と約款のページを読み、梱包費・書類費・試験費・最小発注数量などの別途の条件を拾う
  5. 条件が依頼と違う見積は、仕入先に確かめるメールを書く
  6. 3社分がそろったら、比較表を課長に回し、発注先を決める
導入後(After)
  1. 自動見積の受け取り用のメールアドレスに届いた添付を、見積依頼の番号ごとの受付フォルダへ保存する
  2. 自動保存をきっかけに、形式・ページ数・パスワードの有無を確かめる
  3. 自動OCRが見積書のキーと値、明細の表、質問への答え(見積番号・インコタームズ・支払条件・有効期限など)を、信頼度とともに返す
  4. 自動生成AIが、明細と取引条件を見積比較表の項目にそろえ、条件の文を原文のまま切り出す
  5. 自動見積依頼の条件と規則で照らし、項目ごとに `same` / `differs` / `not_stated` / `unclear` を付ける
  6. 自動見積ごとに `aligned` / `terms_differ` / `currency_differ` / `validity_short` / `incomplete` / `needs_human` を付け、比較表に書き出す
  7. 自動`aligned` 以外の見積について、仕入先に確かめる英文のメールの下書きを作る
  8. 人購買担当が比較表を見て、`aligned` 以外の見積の原本を確かめ、下書きを直して仕入先へ送る
  9. 人条件がそろったところで、購買担当と課長が発注先を決める
各工程の詳しい説明を読む
  1. 仕入先からメールで届いた見積書のPDFを、見積依頼の番号のフォルダに保存する
  2. 購買担当が見積書を開き、品番・数量・単価・通貨・金額を見積比較表に写す
  3. インコタームズと場所、支払条件、納期、見積の有効期限、保証期間を読み、依頼の条件と見比べる
  4. 明細の注記と約款のページを読み、梱包費・書類費・試験費・最小発注数量などの別途の条件を拾う
  5. 条件が依頼と違う見積は、仕入先に確かめるメールを書く
  6. 3社分がそろったら、比較表を課長に回し、発注先を決める

(a)転記に時間がかかる。 2番で、単価の列の見出しは「Unit Price」「Price/pc」「Net Price」と仕入先ごとに違い、数量の単位も「pcs」「EA」「per 100」と揺れます。 明細が多い見積では、行を写すだけで10分を超えます。

(b)条件の違いを見落とす。 3番と4番は、急ぎの見積依頼が重なると省かれます。1社がEXW、2社がCIPで出してきたことに気づかず単価だけで比べ、発注の後に運賃と保険料の手配が別に要ると分かることがあります。

(c)約款の一文を拾えない。 「Prices are subject to change without notice」「Validity: 30 days」が約款の中ほどにあり、比較表には載らないまま発注の時期が過ぎ、値上げの連絡を受けてから気づきます。

(d)比較表ができるまで決められない。 転記と問い合わせが終わらないと、発注先を決める話が始まりません。

  1. 【自動】 見積の受け取り用のメールアドレスに届いた添付を、見積依頼の番号ごとの受付フォルダへ保存する
  2. 【自動】 保存をきっかけに、形式・ページ数・パスワードの有無を確かめる
  3. 【自動】 OCRが見積書のキーと値、明細の表、質問への答え(見積番号・インコタームズ・支払条件・有効期限など)を、信頼度とともに返す
  4. 【自動】 生成AIが、明細と取引条件を見積比較表の項目にそろえ、条件の文を原文のまま切り出す
  5. 【自動】 見積依頼の条件と規則で照らし、項目ごとに same / differs / not_stated / unclear を付ける
  6. 【自動】 見積ごとに aligned / terms_differ / currency_differ / validity_short / incomplete / needs_human を付け、比較表に書き出す
  7. 【自動】 aligned 以外の見積について、仕入先に確かめる英文のメールの下書きを作る
  8. 【人】 購買担当が比較表を見て、aligned 以外の見積の原本を確かめ、下書きを直して仕入先へ送る
  9. 【人】 条件がそろったところで、購買担当と課長が発注先を決める

4番目でAIに任せるのは「そろえる」と「原文の切り出し」までです。 依頼と同じ条件か、どの見積が有利かはAIに判断させません。依頼の条件は購買管理の仕組みにあり、照らし方は規則で決められるからです。

7番目で下書きを作っても、送るのは人です。 問い合わせの文面は仕入先との関係に関わり、どの条件を合わせてもらうかは購買担当の交渉の一部です。

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

構成図
仕入先からの英文の見積書(PDF)
   ▼【トリガー】受付フォルダ(Amazon S3)への保存
AWS Lambda ── 形式・ページ数・サイズ・パスワードの確認
   ▼
AWS Textract(StartDocumentAnalysis:FORMS/TABLES/QUERIES)
   │   キーと値、明細の表、質問への答え、信頼度
   ▼
Claude API ── 比較表の項目にそろえ、条件の文を原文のまま切り出す
   ▼
Python ── 見積依頼の条件と照らす
   │   ① 品番と数量  ② 通貨  ③ インコタームズと場所  ④ 支払条件
   │   ⑤ 納期  ⑥ 有効期限  ⑦ 保証  ⑧ 別途の費用
   ▼
判定(aligned / terms_differ / currency_differ / validity_short / incomplete / needs_human)
   ▼
見積比較表 ──▶【購買担当が確認】──▶ 仕入先への確認メール(人が送る)
役割想定する製品代替候補
OCRAWS Textract(StartDocumentAnalysis/GetDocumentAnalysis)Azure AI Document Intelligence、Google Document AI
生成AIClaude API(比較表の項目への整形と、確認メールの下書き)OpenAI API、Gemini API
差異計算Python(見積依頼の条件との照合)購買管理の仕組みの照合の機能
連携AWS Lambda(保存と完了の通知を起点に処理を動かす)AWS Step Functions
保管Amazon S3(見積書、読み取り結果、照合の結果)社内のファイルサーバー

購買管理の仕組みと見積比較表のひな形は、新しく足すものではありません。 最初の準備は、見積依頼の条件(数量・希望納期・インコタームズと場所・支払条件・保証期間)を照合に使える形で取り出せるようにすることです。

OCRに AWS Textract を選ぶのは、見積書が英文だからです。 対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語で、日本語の見積書は読めません。 国内の仕入先や日本の代理店が日本語で出す見積は、別の構成で扱います。

使う機能は、文書の分析(同期の AnalyzeDocument と、非同期の StartDocumentAnalysis)です。 FORMS で「Quotation No.: Q-2026-0815」のようなキーと値の組、TABLES で明細の表、QUERIES で「What are the delivery terms?」のような質問への答えが返ります。見積書は請求書の専用の分析の対象ではないので、文書の分析で読みます。

約款のページまで付いた見積書は数ページになるので、非同期の処理で読みます。 同期の処理はPDFで1ページ・10MBまで、非同期はPDFで500MB・3,000ページまでです。質問の検出は英語の文書でしか使えません。 ドイツやイタリアの仕入先が自国語の見積書を送ってくる場合は、質問を外してキーと値と表だけで読みます。

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

Step1

処理の起点を決める

受付フォルダ(Amazon S3)に見積書が保存されたことを起点にします。 見積は届いた順に読み、1社分ずつ比較表の列が埋まっていく形にします。3社そろうまで待つと、確認の往復のぶんだけ発注が遅れます。

見積の受け取り用のメールアドレスを、見積依頼の英文に書いて仕入先に案内します。件名に見積依頼の番号を書いてもらい、その番号で受付フォルダを分けます。 購買担当の個人のアドレスに届いた見積は、そのアドレスへ転送してもらいます。

処理が終わった見積書は処理済みの場所へ移し、移すのは比較表への書き出しまで成功したときだけにします。

Step2

入力データを集める

データ中身取得元
見積書PDF。送り元のアドレス、受け取った日時、件名の見積依頼の番号受付フォルダ
読み取り結果キーと値、明細の表のセル、質問への答え、値ごとの信頼度AWS Textract
見積依頼の条件依頼の番号、品番、数量、希望納期、希望のインコタームズと場所、支払条件、求める保証期間、回答期限、発注の予定日購買管理の仕組み
仕入先マスタ仕入先コード、見積書の言語、数字と日付の書き方、過去に確かめた支払条件の書き方購買管理の仕組み
インコタームズの一覧規則のコード、名前、運賃と保険料を売り手が持つか、使える輸送手段自社で用意する一覧
社内の為替レート通貨ごとの社内の換算レートと、その適用月経理が出す一覧

質を決めるのは、見積依頼の条件の持ち方です。依頼の番号で、品番ごとの数量と取引条件を1行で引ける形にそろえることが、最初の作業になります。

Step3

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

読み取りは、Lambda から StartDocumentAnalysis を呼んで始めます。 文書はS3の場所で指定し、完了の通知先にSNSのトピックを渡します。ClientRequestToken に受付のファイルごとの値を入れ、同じ見積書の処理が二重に始まらないようにします。 JobId は7日間しか有効でないので、完了の通知を受けたらすぐに GetDocumentAnalysis で結果を取り、自社のバケットへ書き出します。

質問は QueriesConfig に並べ、Pages で当てるページを1ページ目と2ページ目に絞ります。 約款のページに質問を当てると、約款の一般的な支払条件の文を答えとして拾うことがあるためです。約款は全文を LINE で取り、別に生成AIに読ませます。

質問の文(Text)Alias何に使うか
What is the RFQ or inquiry reference?RFQ_REF見積依頼に結び付ける第一の手がかり
What are the delivery terms?INCOTERMS依頼との照合
What are the payment terms?PAYMENT_TERMS依頼との照合
What is the currency?CURRENCY単価の照合
How long is the quotation valid?VALIDITY有効期限の照合
What is the warranty period?WARRANTY保証の照合

答えは QUERY_RESULT の塊として返り、信頼度が付きます。答えが見つからないときは空のまま返ります。 空のときは約款と注記の全文から生成AIに探させ、無ければ not_stated にします。 質問の数は、同期で1ページに15まで、非同期で30までです。

取るものどこから何に使うか
質問への答えQUERY と QUERY_RESULT主要な条件の値と信頼度
キーと値の組KEY_VALUE_SET質問を使えない言語の書式、質問で取れなかった項目
明細の表TABLE と CELL品番・品名・数量・単位・単価・金額・納期の行
全文LINE と WORD明細の下の注記、約款のページ

見積依頼の条件は Python で購買管理の仕組みから取り出します。 生成AIには、見積書の読み取り結果と、その依頼の品番の一覧だけを渡し、依頼の条件そのものは渡しません。

Step4

AIへ渡す前に整形する

  1. 形式の確認 … 扱えるのはJPEG、PNG、PDF、TIFFです。XFA形式のPDFには対応していません
  2. パスワードの確認 … パスワードで保護されたPDFは読めません。 仕入先に保護のないものを送り直してもらいます
  3. 解像度の確認 … 読み取れる文字の高さは15ピクセル以上(150dpiで8ポイント)です。文字の小さい約款のページに注意します
  4. 見積依頼の特定 … 件名の依頼の番号で引きます。無ければ質問 RFQ_REF の答え、それも無ければ仕入先と品番で引きます
  5. 言語の切り替え … 仕入先マスタの見積書の言語が英語なら QUERIES を入れ、それ以外は FORMS と TABLES だけにします
  6. 数値と日付の正規化 … 仕入先マスタの書き方で、「1.250,00」や「03/04/2026」を自社の形に直します。元の文字列は残します
  7. 重複と改訂の検知 … 同じ仕入先・同じ見積番号のものが既にあれば、再送か改訂(「Rev. 1」「Revised」)かの印を付けます

6番目はAIに任せません。 「1.250,00」の読み方で単価が千倍ずれます。

7番目は、価格交渉の後に同じ見積番号で出し直してくる仕入先がいるためです。 改訂前の単価が残ると、下がった単価が反映されないまま別の仕入先に決めてしまいます。

Step5

AIに処理させる

させるのは、読み取り結果を比較表の項目にそろえ、取引条件を原文のまま切り出し、別途の費用と除外事項を拾うことだけです。

見るもの書き出す内容判断できないときの扱い
主要な項目見積番号、見積日、依頼の番号、通貨、改訂の番号書かれていなければ「不明」
明細の行品番、品名、数量、単位、価格の単位(1個あたりか100個あたりか)、単価、金額、最小発注数量列が読めなければ unknown
インコタームズ規則のコード、場所、版の年の原文書かれていなければ「不明」
支払条件支払条件の原文書かれていなければ「不明」
納期納期の原文と、週・日の数と起算点(注文受領後、図面承認後など)起算点が無ければ「不明」
有効期限・保証有効期限と保証期間の原文書かれていなければ「不明」
別途の費用・除外事項梱包費、書類費、試験費、運賃、価格改定の条項の原文と、書かれていたページ無ければ空の一覧

条件を「原文のまま」切り出させるのは、言い換えで意味が変わるからです。 「8-10 weeks ARO」と「8-10 weeks after drawing approval」は起算点が違い、要約させると「8〜10週」にまとまって違いが消えます。

させないこと理由
依頼の条件との比較規則で照らす。AIに依頼の条件を渡さない
運賃・保険料の見積もりや足し込み根拠のない数字が比較表に入る
通貨の換算社内のレートで Python が行う
インコタームズの読み替え「FOB」を「FCA」に直すなどをしない
どの見積が有利かの判断発注先は購買担当と課長が決める

2行目がいちばん起きやすい失敗です。 EXWとCIPの見積を並べると、AIは「運賃を加えるとおよそこのくらい」と書いてきます。根拠のない数字が、比較表では本物の見積と同じ重みで読まれます。

Step6

指示内容を固定する

あなたは製造業の購買部で、海外の仕入先から届いた英文の見積書を、
見積比較表の項目にそろえる立場です。
渡すのは、OCRが返した読み取り結果と、見積依頼の品番の一覧です。
そこに書かれたことだけを使ってください。

【書き出すこと】
1. 主要な項目: quote_no, quote_date, rfq_ref, revision, currency
2. 明細の行: part_no, description, qty, unit, price_basis,
   unit_price, amount, moq
3. incoterms_text: インコタームズの記載を原文のまま
4. payment_terms_text: 支払条件の記載を原文のまま
5. lead_time_text: 納期の記載を原文のまま。あわせて週または日の数と
   起算点(ARO、図面承認後など)を書く。起算点が無ければ「不明」
6. validity_text, warranty_text: 有効期限と保証の記載を原文のまま
7. extra_charges: 梱包費・書類費・試験費・運賃などの別途の費用、
   価格改定の条項。原文とページ番号

【厳守事項】
- 書かれていない項目は「不明」としてください。推測で埋めないでください。
- 数量・単価・金額・日付は、読み取り結果の文字列のまま写してください。
  計算・換算・書き方の修正をしないでください。
- price_basis は「per piece」「per 100」など、書かれている単位をそのまま
  写してください。書かれていなければ「不明」としてください。
- インコタームズ・支払条件・納期・有効期限・保証は、要約・言い換え・
  修正をせず原文のまま写してください。誤りに見えても直さないでください。
- 運賃・保険料・関税の金額を見積もったり、足したりしないでください。
- 見積依頼と合っているか、どの見積が有利かを書かないでください。
- 品番は、渡した見積依頼の品番の一覧と一致するものだけ part_no に入れ、
  一致しない品番(代替品の提案など)は alternative に入れてください。
- evidence には、根拠にした文字列とページ番号をそのまま写してください。
- 見積書でない書類(カタログ、辞退の連絡など)と判断した場合は、
  そろえる作業をせず document_type に種類を書いてください。

【読み取り結果】{textract_result}
【約款のページの全文】{terms_text}
【見積依頼の品番の一覧】{rfq_parts}

「誤りに見えても直さない」を書かないと、インコタームズを直します。 航空便の見積に「FOB Frankfurt Airport」と書かれていると、AIは「航空便ならFCAのはず」と直して返すことがあります。確かめるべき違いが消えます。

Step7

出力形式を固定する

次の形のJSONで受け取ります。 Claude API の構造化出力(output_config.format に type: "json_schema" とJSONスキーマを渡す)を使うと、スキーマどおりの形で返り、必須の項目が欠けません。 オブジェクトには additionalProperties: false を付けます。

{
  "document_type": "quotation",
  "quote_no": "",
  "quote_date": "",
  "rfq_ref": "",
  "revision": "",
  "currency": "",
  "lines": [
    { "part_no": "", "description": "", "qty": "", "unit": "",
      "price_basis": "", "unit_price": "", "amount": "", "moq": "",
      "evidence": "" }
  ],
  "alternative": [],
  "incoterms_text": "",
  "payment_terms_text": "",
  "lead_time": { "text": "", "weeks_min": "", "weeks_max": "", "basis": "" },
  "validity_text": "",
  "warranty_text": "",
  "extra_charges": [ { "text": "", "page": "" } ]
}

数値の最小値・最大値の制約はスキーマに書けないので、 weeks_min などは文字列で受け、原文に無い数字なら Python が unclear にします。

この後に、Python が照合を足します。

確かめること規則結果
品番と数量依頼の品番がすべてあるか、数量が依頼と同じか、最小発注数量で増えていないか欠ければ incomplete
通貨依頼で指定した通貨か違えば currency_differ。社内のレートで参考値を出す
インコタームズ規則のコードと場所が依頼と一致するか、11の規則に当たるか違えば terms_differ
支払条件依頼の条件、または過去に一致と確かめた書き方と一致するか違えば terms_differ
納期起算点が分かり、発注の予定日から数えて希望納期に間に合うか間に合わなければ terms_differ、起算点が不明なら unclear
有効期限発注の予定日まで有効か切れるなら validity_short
保証依頼で求めた期間以上か短ければ terms_differ
別途の費用1件でもあるかあれば比較表に注記

インコタームズは、原文から規則のコードと場所に分けて照らします。 ICCは2020年版で旧来のDAT(Delivered at Terminal)をDPU(Delivered at Place Unloaded)に改めたとしており、一覧に無いコードは terms_differ にします。 あわせて一覧で運賃と保険料を売り手が持つかを引き、負担の範囲が依頼と違う見積に「単価をそのまま比べない」と印を付けます。

Step8

システムへ連携する

つなぎ先方式内容
受付フォルダ(Amazon S3)保存の通知で Lambda を起動見積書の受け取り
AWS TextractStartDocumentAnalysis/GetDocumentAnalysisキーと値、明細の表、質問への答え
Claude APIAPI呼び出し比較表の項目への整形、確認メールの下書き
購買管理の仕組み見積依頼・仕入先マスタの読み取り照合の材料
見積比較表表への書き出し依頼ごとに仕入先を列に並べる
メール下書きの保存送信は購買担当が行う

購買管理の仕組みへは書き込みません。 作るのは比較表と確認メールの下書きまでで、見積の採用と発注は人が行います。 比較表は依頼ごとに1枚、仕入先を列にし、各セルに判定の色を付けて原文をコメントに入れます。

Step9

人が確認する

購買担当は、見積ごとに判定を見て、見方を分けます。

  1. aligned は比較表の行を原本と並べて確かめる … 単価と数量の桁を目で追うだけです
  2. terms_differ を最優先で見る … 払う額と納期に直結します。原文のセルを読み、確認メールの下書きを直して送ります
  3. currency_differ と validity_short は受けるかを決める … 通貨や期限を合わせてもらうかを決めます
  4. incomplete と needs_human は原本を開く … 品番の抜け、代替品の提案、読み取りの信頼度の低い行です
  5. 確かめた支払条件の書き方を仕入先マスタに積む … 翌月から同じ書き方は機械で same になります

目標は、120件をならして1件10分です。

Step10

例外に対処する

起きること対応
パスワードで保護されたPDF読めない。仕入先に保護のないものを送り直してもらう
英語以外の見積書で質問が使えないFORMS と TABLES で読み、主要な条件は生成AIがキーと値と全文から拾う
見積依頼の番号が書かれていない仕入先と品番で依頼を引く。複数当たれば needs_human
同じ見積番号で改訂版が届く前の版の列を比較表から外し、差だけを確認の一覧に出す
依頼と違う品番(代替品)が提案されるalternative に入れ、依頼の品番の列には並べない
価格の単位が「per 100」単価の列に注記を付ける。1個あたりへの割り算は Python が行い、元の値を残す
納期の起算点が書かれていないunclear にし、確認メールの下書きに起算点の問いを入れる
OCRが応答しない受付フォルダに残す。処理済みへ移すのは成功時だけ

6行目の「per 100」は、桁の誤りとして最も多い型です。 100個あたり85ユーロの見積を1個85ユーロと読むと、その仕入先は比較から外れ、いちばん安い仕入先を見逃します。

Step11

記録を残す

  • 元の見積書のPDFと、受け取った日時・送り元・見積依頼の番号
  • OCRが返したJSONの全文
  • AIが返したJSONと、そのとき渡した見積依頼の品番の一覧
  • 照合に使った見積依頼の条件の版と、照合の結果
  • 比較表の版と、人が判定を覆した記録(どのセルを、どちらに変えたか)
  • 仕入先への確認の内容と回答、改訂版との対応

「見積依頼の条件の版」を残すのは、数量や希望納期を変えて依頼を出し直すことがあるためです。 どの条件で比べて決めたかを、後から確かめられるようにします。

04実装レベルの3段階

最小構成:見積書と品番の一覧を手でAIの画面に貼り、比較表の項目に書き出させる / 1件ごとの転記の下書き
半自動化:上記+OCRのAPIで読み取り、見積依頼の条件と規則で照らし、比較表と確認メールの下書きを出す / 読み取り、整形、照合、比較表の作成
本格構成:上記+フォワーダーの運賃の見積と社内のレートを取り込み、条件をそろえた総額の参考値を比較表に足す / 受け取りから総額の比較の下書きまで

本記事の想定は半自動化です。 1件30分が10分になります。本格構成で総額の参考値を出すと、運賃の見積の前提が違う依頼で誤った順位が付きます。 半自動化で照合の判定を3か月見て、terms_differ の中身が落ち着いてから進めます。

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

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

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

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

AI活用について相談する

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

向いている
  1. 欧米のメーカーやその日本・アジアの代理店から、部品・機器・材料を毎月まとめて買っている製造業と専門商社の購買部門。1件の見積依頼に2〜4社が英文の見積書をPDFで返してきて、購買担当が単価と取引条件を表に写して見比べている場合。見積依頼のときに数量・希望納期・希望のインコタームズと場所・支払条件を決めて出しており、見積と照らす基準がある場合。
向いていない
  1. 見積書が日本語・中国語で届く場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めません)。海外の仕入先が1〜2社に固定され、年間の単価契約で買っている場合。見積が仕入先のWebの発注画面の画面表示だけで、書類として届かない場合。なお、どの仕入先に発注するかの決定と、価格・条件の交渉は、この構成では代替できません。

07最小構成で試す方法

  1. 先月の見積依頼から3件を選び、その見積書を9〜12件集める(EXWとCIPが混ざるもの、改訂版、約款付き、代替品の提案があるものを入れる)
  2. その見積について、購買担当が作った見積比較表を書き出しておく
  3. 見積書のPDFと見積依頼の品番の一覧を、手元のAIサービスに貼り付ける
  4. 「この見積書から、品番ごとの数量・単価・価格の単位と、インコタームズ・支払条件・納期・有効期限・保証・別途の費用を書き出してください。条件は原文のまま写してください。書かれていない項目は『不明』としてください。運賃を見積もったり、どれが有利かを判断したりしないでください」と指示する
  5. 出てきた内容を、当時の比較表と突き合わせる

3件分は必ずやってください。 組む前に、「書式の違う見積書から、同じ項目を同じ形で取れるか」を確かめます。

出てきた内容判断
当時の比較表とほぼ同じ値が出たOCRと照合の仕組みに進む
条件を言い換えた、運賃を見積もった指示の書き方で直る。構成は有効
明細の列がずれて数量と単価が入れ替わる表の読み取りの確認が先。 仕入先の書式ごとに列見出しを確かめる

当時の比較表に無かった条件(約款の価格改定の条項など)が出てきたら、これまで比べないまま決めていた条件が1つ見つかったということです。

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

問題対策
AIがインコタームズを直してしまう原文のまま写させ、誤りに見えても直さないと書く
運賃をAIが見積もって比較表に入れる運賃・保険料の見積もりを禁じる。 足すならフォワーダーの見積で
納期の起算点が消える原文で切り出し、起算点を別の項目にする
約款のページから支払条件を拾う質問を当てるページを Pages で絞る
「per 100」の単価を1個あたりと読む価格の単位を別の項目で取り、割り算は Python が行う
改訂版が2列になる同じ見積番号の改訂を見分け、前の版を外す
代替品が依頼の品番の列に並ぶ依頼の品番の一覧と一致するものだけ並べる
英語以外の見積書で質問が空になる質問は英語の文書だけ。 言語で設定を切り替える
確認メールを自動で送る下書きまでにする。 送信は人

上の3行が、この構成の失敗のほとんどです。 どれも取引条件の文字列や数字が、どこかで「それらしく」変わってしまうことから出ています。原文を切り出し、照らすのは規則、という分け方を崩さないことです。

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

この構成で扱うデータ: 仕入先の名前と見積の単価、数量、取引条件、見積依頼の品番と数量です。仕入先ごとの単価は、その仕入先との取引の条件で、他の仕入先に知られてはならない情報です。見積依頼の数量からは、自社の生産の計画も読み取れます。

  1. 外部へ渡す範囲を、整形に必要な項目に限る … 生成AIに渡すのは、その見積書の読み取り結果と依頼の品番の一覧だけです。他の仕入先の単価と依頼の条件は渡しません
  2. 確認メールに他社の条件を書かない … 下書きに「他社はCIPで出している」と書かせないよう指示し、送る前に人が確かめます。他社の見積の内容を別の仕入先に伝えることは、取引の信義に関わります
  3. 発注先の決定をAIに任せない … 発注先は、価格だけでなく品質・納期の実績・取引の継続性で決まります。AIが出すのは条件がそろっているかという事実だけです
  4. 約款の判断をAIに任せない … 仕入先の販売約款を受け入れるかは、法務と購買が決めます
  5. 保存先を暗号化する … 非同期の分析では、結果を自社のバケットに出し、KMSの鍵で暗号化する設定ができます
  6. 見られる人を絞る … 比較表は、その依頼を担当する購買担当と承認者だけが見られるようにします

誤りが起きた場合のリスクは、条件の違う見積を安いと読んで決めることと、桁の誤りで安い仕入先を見逃すことの2つです。 前者はインコタームズや納期の起算点の言い換えで、後者は価格の単位と数字の書き方の読み違いで起きます。どちらも、原文を残して規則で照らす設計で防ぎます。

10まず何から始めるか

1週目:見積依頼の条件を引ける形にする

購買管理の仕組みから、見積依頼の番号・品番・数量・希望納期・インコタームズと場所・支払条件・保証期間・発注の予定日を取り出せるかを確かめます。取り出せない項目があれば、それが最初の課題です。 あわせて、インコタームズの一覧を作ります。

2週目:3件分で試す

手元のAIサービスで、見積書を比較表の項目に書き出させます。条件を言い換えていないか、運賃を見積もっていないかを最優先で見ます。

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

どの違いを terms_differ にするか、納期の起算点や保証の短さをどこまで許すかを購買部で合わせます。過去に一致と確かめた支払条件の書き方を、仕入先ごとに積み始めます。

4週目:受付から比較表までをつなぐ

S3 の受付フォルダから StartDocumentAnalysis を呼び、比較表の項目への整形と依頼との照合を書き出すところまで作ります。この時点では確認メールの下書きは作らず、比較表の判定だけを見ます。

2か月目: 改訂版と代替品の見分けを足し、aligned 以外の件数を毎週数えます。3か月目以降: 確認メールの下書きを足し、1件30分が何分になったかを実測します。継続の仕入先の見積の大半が aligned で確かめるだけになった時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-10-08/最終更新:2026-10-08
確認した内容情報源確認日
StartDocumentAnalysis がJPEG・PNG・TIFF・PDFを非同期で分析し、完了をSNSに通知し、GetDocumentAnalysis で結果を取ること。ClientRequestToken で二重起動を防げること、JobId が7日間有効なこと、JobTag が完了の通知に含まれること、OutputConfig と KMSKeyId で自社のバケットへの出力と暗号化ができることAWS: StartDocumentAnalysis2026-10-08
AnalyzeDocument が同期の処理で、キーと値(KEY_VALUE_SET)、表とセル、行と単語、質問(QUERY・QUERY_RESULT、答えに信頼度)を返すこと。FeatureTypes に TABLES・FORMS・QUERIES などを指定でき、QueriesConfig が Text・Alias・Pages を持つことAWS: AnalyzeDocument2026-10-08
質問の答えが信頼度とともに返り、答えが見つからないときは空のまま返ることAWS: Queries2026-10-08
同期の処理がPDFで1ページ・10MBまで、非同期がPDFで500MB・3,000ページまで、XFA形式とパスワード保護のPDFは不可、対応言語が6言語、質問の検出は英語の文書だけ、質問の数が同期で1ページ15・非同期で30まで、文字の高さが15ピクセル以上(150dpiで8ポイント)であることAWS: Set Quotas in Amazon Textract2026-10-08
インコタームズが11の3文字の取引条件で、費用・危険・義務の分担を示すこと、2020年版で旧来のDAT(Delivered at Terminal)がDPU(Delivered at Place Unloaded)に改められたことICC: Incoterms® 20202026-10-08
構造化出力を output_config.format(type: "json_schema")で指定すること、オブジェクトに additionalProperties: false を付けること、enum が使えること、数値の最小値・最大値の制約が使えないことClaude Docs: Structured outputs2026-10-08

取引条件の解釈と仕入先の約款の扱いは、自社の法務と仕入先との基本契約で決めてください。 本記事は上記の公開情報で確認できた範囲だけを扱っています。

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

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

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

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