海外の顧客から届く英文の注文書を読み取って受注データに転記し、見積書との単価・納期・インコタームズ・支払条件の食い違いを拾う
海外の顧客から届く英文の注文書を読み取り、品番・数量・単価・納期・インコタームズ・支払条件を受注データの形に転記します。出していた見積書と照らし、条件の食い違いを受注の確定前に拾います。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- 商社/製造
- 対象部門
- 営業
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 人手が足りない/入力作業が多い/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 顧客からメールで届いた注文書のPDFを、顧客ごとのフォルダに保存する
- 営業アシスタントが注文書を開き、注文番号・日付・出荷先・明細を販売管理の仕組みに入力する
- 明細の行ごとに、顧客の品番から自社の品番を対応表で引く
- 見積番号か顧客と品番から見積を探し、単価・通貨・数量・納期を見比べる
- インコタームズと支払条件を、見積と顧客マスタの既定の条件と見比べる
- 食い違いがあれば営業担当に伝え、営業担当が顧客に確かめる
- 確かめ終えたら受注を確定し、注文請書(Order Acknowledgement)を送る
- 自動注文の受け取り用のメールアドレスに届いた添付を、受付フォルダへ保存する
- 自動保存をきっかけに、形式・ページ数・パスワードの有無を確かめる
- 自動OCRが注文書のキーと値、明細の表、質問への答え(注文番号・見積番号・インコタームズ・支払条件など)を、信頼度とともに返す
- 自動生成AIが、項目と明細を受注データの形にそろえ、品番の対応表で引けない行に自社の品番の候補を出す
- 自動見積番号か顧客と品番で見積を引き、単価・通貨・数量・納期・インコタームズ・支払条件・有効期限を規則で照らす
- 自動注文ごとに `match` / `price_diff` / `terms_diff` / `quote_expired` / `below_moq` / `lead_time_short` / `needs_human` を付け、受注データの下書きと確認の一覧に出す
- 人営業アシスタントが一覧を見て、`match` のものは下書きを確かめて受注を確定する
- 人`match` 以外は営業担当が顧客に確かめ、条件を合わせてから確定する
- 人注文請書を送る(下書きは自動で作られる)
各工程の詳しい説明を読む
- 顧客からメールで届いた注文書のPDFを、顧客ごとのフォルダに保存する
- 営業アシスタントが注文書を開き、注文番号・日付・出荷先・明細を販売管理の仕組みに入力する
- 明細の行ごとに、顧客の品番から自社の品番を対応表で引く
- 見積番号か顧客と品番から見積を探し、単価・通貨・数量・納期を見比べる
- インコタームズと支払条件を、見積と顧客マスタの既定の条件と見比べる
- 食い違いがあれば営業担当に伝え、営業担当が顧客に確かめる
- 確かめ終えたら受注を確定し、注文請書(Order Acknowledgement)を送る
(a)入力に時間がかかる。 2番で、注文番号や出荷先の場所が書式ごとに違います。明細の多い注文書では、品名の英語を読み比べながら行を入力するだけで20分を超えます。
(b)条件の違いを見落とす。 4番と5番は、急ぎの注文が重なると省かれます。見積は「FCA Narita」なのに注文書は「CIF Los Angeles」、見積は「T/T in advance」なのに注文書は「Net 60」といった違いが、出荷の段階で初めて分かることがあります。
(c)見積の期限切れに気づかない。 有効期限を過ぎた見積の単価で注文が来ても、メーカーからの仕入の値上げが反映されていない単価のまま受けてしまうことがあります。
(d)人が足りない。 営業アシスタントは月末と四半期末に注文が集中すると入力に追われ、照らす作業が「後で見る」に回ります。 後で見る時間は来ないまま、注文請書が先に出ます。
- 【自動】 注文の受け取り用のメールアドレスに届いた添付を、受付フォルダへ保存する
- 【自動】 保存をきっかけに、形式・ページ数・パスワードの有無を確かめる
- 【自動】 OCRが注文書のキーと値、明細の表、質問への答え(注文番号・見積番号・インコタームズ・支払条件など)を、信頼度とともに返す
- 【自動】 生成AIが、項目と明細を受注データの形にそろえ、品番の対応表で引けない行に自社の品番の候補を出す
- 【自動】 見積番号か顧客と品番で見積を引き、単価・通貨・数量・納期・インコタームズ・支払条件・有効期限を規則で照らす
- 【自動】 注文ごとに
match/price_diff/terms_diff/quote_expired/below_moq/lead_time_short/needs_humanを付け、受注データの下書きと確認の一覧に出す - 【人】 営業アシスタントが一覧を見て、
matchのものは下書きを確かめて受注を確定する - 【人】
match以外は営業担当が顧客に確かめ、条件を合わせてから確定する - 【人】 注文請書を送る(下書きは自動で作られる)
4番目でAIに任せるのは「そろえる」と「品番の候補」までです。 単価が合っているか、条件が違うかはAIに判断させません。見積は販売管理の仕組みにあり、照らし方は規則で決まっているからです。
7番目で match のものも人が確定するのは、受注の確定が顧客との約束になるからです。 照らす作業は無くなっても、確定のボタンは人が押します。
02今回想定するシステム構成
顧客からの英文の注文書(PDF) ▼【トリガー】受付フォルダ(Amazon S3)への保存 AWS Lambda ── 形式・ページ数・サイズ・パスワードの確認 ▼ AWS Textract(StartDocumentAnalysis:FORMS/TABLES/QUERIES) │ キーと値、明細の表、質問への答え、信頼度 ▼ Claude API ── 受注データの形にそろえ、品番の候補を出す ▼ Python ── 見積と顧客マスタで照らす │ ① 単価・通貨 ② 数量と最小発注数量 ③ 納期 │ ④ インコタームズ ⑤ 支払条件 ⑥ 見積の有効期限 ▼ 判定(match / price_diff / terms_diff / quote_expired / below_moq / lead_time_short / needs_human) ▼ 【営業アシスタントと営業担当が確認】 ├──▶ 販売管理の仕組みへ受注を確定(人) └──▶ 注文請書の下書き
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | AWS Textract(StartDocumentAnalysis/GetDocumentAnalysis) | Azure AI Document Intelligence、Google Document AI |
| 生成AI | Claude API(受注データへの整形と品番の候補、注文請書の下書き) | OpenAI API、Gemini API |
| 差異計算 | Python(見積・顧客マスタとの照合) | 販売管理の仕組みの照合の機能 |
| 連携 | AWS Lambda(保存と完了の通知を起点に処理を動かす) | Amazon EventBridge |
| 保管 | Amazon S3(注文書、読み取り結果、照合の結果) | 社内のファイルサーバー |
販売管理の仕組みと品番の対応表は、新しく足すものではありません。 最初の準備は、見積のデータを照合に使える形で取り出せるようにすることと、顧客マスタに既定のインコタームズと支払条件を持たせることです。
OCRに AWS Textract を選ぶのは、注文書が英文だからです。 対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語で、日本語の注文書は読めません。 国内の顧客の注文書は別の構成で扱います。
使う機能は、文書の分析(AnalyzeDocument と、その非同期版の StartDocumentAnalysis)です。 FORMS で「PO Number: 4500012345」のようなキーと値の組、TABLES で明細の表、QUERIES で「What are the Incoterms?」のような質問への答えが返ります。注文書は請求書の専用の分析の対象ではないので、文書の分析で読みます。
質問(Queries)は英語の文書でしか使えません。 ドイツやスペインの顧客が自国語の注文書を送ってくる場合は、質問を外してキーと値と表だけで読みます。顧客マスタに注文書の言語を持たせ、設定を切り替えます。
約款のページまで付いた注文書は数ページになるので、非同期の処理で読みます。 同期の処理はPDFで1ページ・10MBまで、非同期はPDFで500MB・3,000ページまでです。
03どうやって実装するのか
処理の起点を決める
受付フォルダ(Amazon S3)に注文書が保存されたことを起点にします。 注文は届いた順に処理し、照らした結果が出るまでの時間を短くします。 顧客は注文請書の返りを待っており、条件の違いを確かめる連絡は早いほど通りやすいからです。
注文の受け取り用のメールアドレスを顧客に案内し、添付を自動で受付フォルダへ保存します。 営業担当の個人のアドレスに届いた注文は、そのアドレスへ転送してもらいます。転送が抜けると、その注文は照らされないまま残ります。
処理が終わった注文書は処理済みの場所へ移し、移すのは確認の一覧への書き出しまで成功したときだけにします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 注文書 | PDF。送り元のアドレス、受け取った日時 | 受付フォルダ |
| 読み取り結果 | キーと値、明細の表のセル、質問への答え、値ごとの信頼度 | AWS Textract |
| 見積 | 見積番号、顧客、品番、単価、通貨、最小発注数量、納期のめやす、インコタームズと場所、支払条件、有効期限 | 販売管理の仕組み |
| 品番の対応表 | 顧客の品番、自社の品番、顧客の品名 | 販売管理の仕組み |
| 顧客マスタ | 顧客コード、注文書の言語、数字と日付の書き方、既定のインコタームズと支払条件、出荷先の一覧 | 販売管理の仕組み |
| インコタームズの一覧 | 規則のコード、名前、運賃と保険料を売り手が持つか | 自社で用意する一覧 |
質を決めるのは、見積のデータの取り出しやすさです。 見積が表計算のファイルに散らばっていると、照らす先がありません。見積番号・顧客・品番で1行を引ける形にそろえることが、最初の作業になります。
データの取得方法を決める
読み取りは、Lambda から StartDocumentAnalysis を呼んで始めます。 文書はS3の場所で指定し、完了の通知先にSNSのトピックを渡します。ClientRequestToken に受付のファイルごとの値を入れ、同じ注文書の処理が二重に始まらないようにします。 JobId は7日間しか有効でないので、完了を受けたらすぐに GetDocumentAnalysis で結果を取り、自社のバケットへ書き出します。
質問は QueriesConfig に並べ、Pages で当てるページを1ページ目と2ページ目に絞ります。 約款のページに質問を当てると、約款の中の一般的な支払条件の文を答えとして拾うことがあるためです。
質問の文(Text) | Alias | 何に使うか |
|---|---|---|
| What is the purchase order number? | PO_NO | 重複の検知、注文請書 |
| What is the quotation number? | QUOTE_NO | 見積を引く第一の手がかり |
| What are the Incoterms? | INCOTERMS | 見積との照合 |
| What are the payment terms? | PAYMENT_TERMS | 見積・顧客マスタとの照合 |
| What is the currency? | CURRENCY | 単価の照合 |
| What is the ship to address? | SHIP_TO | 出荷先の一覧との照合 |
答えは QUERY_RESULT の塊として返り、信頼度が付きます。答えが見つからないときは空のまま返ります。 見積番号が空なら、顧客と品番で見積を引く経路に切り替えます。空を「見積なし」と読まないことが大事です。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 質問への答え | QUERY と QUERY_RESULT | 主要な項目の値と信頼度 |
| キーと値の組 | KEY_VALUE_SET | 質問を使えない言語の書式、質問で取れなかった項目 |
| 明細の表 | TABLE と CELL | 品番・品名・数量・単位・単価・金額・納期の行 |
| チェック欄 | SELECTION_ELEMENT の SelectionStatus | 「Partial shipment allowed」などの欄 |
| 全文 | LINE と WORD | 特記事項、約款のページの有無 |
見積は Python で販売管理の仕組みから取り出します。 生成AIには、品番の候補を出すための品番の対応表の一部だけを渡します。
AIへ渡す前に整形する
- 形式の確認 … 扱えるのはJPEG、PNG、PDF、TIFFです。XFA形式のPDFには対応していません
- パスワードの確認 … パスワードで保護されたPDFは読めません。 顧客に保護のないものを送り直してもらいます
- 解像度の確認 … 読み取れる文字の高さは15ピクセル以上(150dpiで8ポイント)です
- 顧客の特定 … 送り元のアドレスのドメインから顧客マスタを引きます。引けなければ、注文書の会社名で引きます
- 言語の切り替え … 顧客マスタの注文書の言語が英語なら
QUERIESを入れ、それ以外はFORMSとTABLESだけにします - 数値と日付の正規化 … 顧客マスタの書き方で、「1.250,00」や「03/04/2026」を自社の形に直します。元の文字列は残します
- 重複の検知 … 同じ顧客・同じ注文番号のものが既にあれば、再送か変更の注文かの印を付けます
6番目はAIに任せません。 欧州の顧客の「1.250,00」を千二百五十と読むか一・二五と読むかで、数量か単価が千倍ずれます。 書き方は顧客マスタで決め打ちします。
7番目で「変更の注文」を見分けるのは、同じ注文番号に「Revision 2」「Change Order」と書かれて届くものがあるからです。 新しい注文として登録すると二重に出荷します。
AIに処理させる
させるのは、読み取り結果を受注データの形にそろえ、品番の対応表で引けない行に候補を出し、取引条件を原文のまま切り出すことだけです。
| 見るもの | 書き出す内容 | 判断できないときの扱い |
|---|---|---|
| 主要な項目 | 注文番号、注文日、見積番号、出荷先、通貨、改訂の番号 | 書かれていなければ「不明」 |
| 明細の行 | 顧客の品番、品名、数量、単位、単価、金額、希望納期 | 列が読めなければ unknown |
| 自社の品番 | 対応表で引けない行の候補(最大3つ)と根拠 | 候補が無ければ unmatched |
| インコタームズ | 規則のコード、場所、版の年の原文 | 書かれていなければ「不明」 |
| 支払条件 | 支払条件の原文 | 書かれていなければ「不明」 |
| 約款 | 約款のページの有無と、そのページ番号 | 内容の要約はしない |
インコタームズと支払条件を「原文のまま」切り出させるのは、言い換えで意味が変わるからです。 「Net 60 days from invoice date」と「60 days after B/L date」は、どちらも60日ですが起算日が違います。要約させると「60日」とまとめ、照合で違いが消えます。
| させないこと | 理由 |
|---|---|
| 見積との比較 | 規則で照らす。AIに見積を渡さない |
| 単価や数量の計算 | 金額は読み取った文字列のまま |
| 約款を受け入れるかの判断 | 法務と営業の判断。AIは有無とページだけ |
| インコタームズの読み替え | 「CIF」を「CIP」に直すなどをしない |
| 品番の確定 | 候補まで。確定は営業アシスタント |
4行目がいちばん起きやすい失敗です。 航空便の注文に「CIF」と書かれていると、AIは気を利かせて「航空便ならCIPのはず」と直して返すことがあります。直された値は見積と一致し、確かめるべき違いが消えます。
指示内容を固定する
あなたは輸出を行う商社の営業アシスタントで、海外の顧客から届いた
英文の注文書を、受注データの形にそろえる立場です。
渡すのは、OCRが返した読み取り結果と、その顧客の品番の対応表です。
そこに書かれたことだけを使ってください。
【書き出すこと】
1. 主要な項目: po_no, po_date, revision, quote_no, ship_to, currency
2. 明細の行: customer_part_no, description, qty, unit, unit_price,
amount, requested_date
3. 品番の対応表で引けない行: 自社の品番の候補(最大3つ)と根拠
4. incoterms_text: インコタームズの記載を原文のまま
5. payment_terms_text: 支払条件の記載を原文のまま
6. 約款のページがあれば、そのページ番号
【厳守事項】
- 書かれていない項目は「不明」としてください。推測で埋めないでください。
- 数量・単価・金額・日付は、読み取り結果の文字列のまま写してください。
計算したり、書き方を直したりしないでください。
- インコタームズと支払条件は、要約・言い換え・修正をせず原文のまま
写してください。誤りに見えても直さないでください。
- 見積と合っているか、条件が妥当かを書かないでください。
- 自社の品番の候補は、渡した対応表に出てくる品番からだけ選んでください。
品名が似ているというだけで候補にしないでください。
候補が無い行は unmatched としてください。
- 約款の内容を要約したり、受け入れてよいかを書いたりしないでください。
- evidence には、根拠にした文字列をそのまま写してください。
- 注文書でない書類(見積依頼、納期の問い合わせなど)と判断した場合は、
そろえる作業をせず document_type に種類を書いてください。
【読み取り結果】{textract_result}
【この顧客の品番の対応表】{part_xref}
「誤りに見えても直さない」を書かないと、インコタームズを直します。 第7章の「させないこと」の4行目の失敗は、この1文で防ぎます。
「品名が似ているというだけで候補にしない」は、型番の末尾だけが違う品番が並ぶ商材で効きます。 「Bearing 6204」と「Bearing 6204-2RS」は別の品番で、単価も違います。
出力形式を固定する
次の形のJSONで受け取ります。 Claude API の構造化出力(output_config.format に type: "json_schema" とJSONスキーマを渡す)を使うと、スキーマどおりの形で返り、必須の項目が欠けません。
{
"document_type": "purchase_order",
"po_no": "",
"po_date": "",
"revision": "",
"quote_no": "",
"ship_to": "",
"currency": "",
"lines": [
{ "customer_part_no": "", "description": "", "qty": "", "unit": "",
"unit_price": "", "amount": "", "requested_date": "",
"own_part_candidates": [ { "part_no": "", "evidence": "" } ] }
],
"incoterms_text": "",
"payment_terms_text": "",
"terms_pages": []
}
この後に、Python が照合を足します。
| 確かめること | 規則 | 結果 |
|---|---|---|
| 見積 | 見積番号か、顧客と品番で1件に引けるか | 引けなければ needs_human |
| 有効期限 | 注文日が見積の有効期限の内か | 外なら quote_expired |
| 単価・通貨 | 見積の単価・通貨と一致するか | 違えば price_diff と差額 |
| 数量 | 最小発注数量以上か | 下回れば below_moq |
| 納期 | 希望納期が、注文日に納期のめやすを足した日以降か | 前なら lead_time_short |
| インコタームズ | 規則のコードと場所が見積と一致するか、11の規則のコードに当たるか | 違えば terms_diff |
| 支払条件 | 見積・顧客マスタの既定の条件と一致するか | 違えば terms_diff |
| 品番 | 対応表で1つに引けるか、候補が1つか | 引けなければ needs_human |
1つ目の理由は、インコタームズを規則のコードと場所に分けて照らせることです。 Python が原文からコードと場所と版の年を取り出し、コードが一覧に無いもの(2020年版で名前が変わった旧来のDATなど)は terms_diff にします。ICCは、2020年版で旧来のDAT(Delivered at Terminal)をDPU(Delivered at Place Unloaded)に改めたとしています。
2つ目は、支払条件の照合を「一致」か「違う」かに限れることです。 支払条件の書き方は顧客ごとにばらばらなので、顧客マスタに過去に一致と確かめた書き方を積み、それと文字列で照らします。 積んでいない書き方は terms_diff で人に回し、確かめたら積みます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ(Amazon S3) | 保存の通知で Lambda を起動 | 注文書の受け取り |
| AWS Textract | StartDocumentAnalysis/GetDocumentAnalysis | キーと値、明細の表、質問への答え |
| Claude API | API呼び出し | 受注データへの整形と品番の候補、注文請書の下書き |
| 販売管理の仕組み | 見積・品番の対応表・顧客マスタの読み取り | 照合の材料 |
| 販売管理の仕組み | 受注データの下書きの取り込み | 確定は人が行う |
| 確認の一覧 | 表への書き出し | 営業アシスタントと営業担当が見る一覧 |
受注の確定は自動にしません。 この構成が作るのは受注データの下書きまでで、確定と注文請書の送付は人が行います。 確定すると出荷の手配と仕入先への発注が動き出すため、誤りが一息に広がります。
人が確認する
営業アシスタントは全件の下書きを見ますが、見方を判定で分けます。
matchは下書きと原本を並べて確定する … 照らす作業は済んでいるので、品番と数量を目で追うだけですterms_diffを最優先で営業担当に回す … インコタームズと支払条件の違いは、運賃・保険料・支払の時期に直結しますprice_diffとquote_expiredを営業担当に回す … 差額と期限を添えて、顧客に確かめるかを決めてもらいますbelow_moqとlead_time_shortは、仕入先のメーカーの回答を待つ … 受けられるかを確かめてから顧客に返します- 品番の候補を確定したら対応表に積む … 翌月から同じ品番は機械で引けます
5番目が、この構成を月ごとに速くします。 最初の月は needs_human が多く出ますが、対応表が育つと、継続の注文は確定のボタンを押すだけになります。
目標は、360件をならして1件7分です。 match は数分、terms_diff のある注文は営業担当とのやり取りを含めて15分以上かかる想定です。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワードで保護されたPDF | 読めない。顧客に保護のないものを送り直してもらう |
| 英語以外の注文書で質問が使えない | FORMS と TABLES で読み、主要な項目は生成AIがキーと値から拾う |
| 見積番号が書かれていない | 顧客と品番で見積を引く。複数当たれば needs_human |
| 同じ注文番号で改訂版が届く | 前の版との差だけを出し、新しい注文として登録しない |
| インコタームズの版の年が書かれていない | terms_diff にはせず、確認の一覧に「版の記載なし」と添える |
| 約款のページが付いている | ページ番号を添えて営業担当に知らせる。受け入れの判断は法務と営業 |
| 送り元のアドレスで顧客が引けない | 注文書の会社名で引く。引けなければ受け付けず担当者へ |
| OCRが応答しない | 受付フォルダに残す。処理済みへ移すのは成功時だけ |
4行目を軽く見ないでください。 改訂版の注文書は、変わった行だけでなく全体が送り直されてきます。新しい注文として取り込むと、同じ品物を二重に手配します。
5行目で版の記載なしを terms_diff にしないのは、書かない顧客が多いからです。 ICCは契約で使う版を明記するよう案内しています。全件を止めると確認が回らないので、添え書きにとどめ、顧客との基本契約で版を決めておきます。
記録を残す
- 元の注文書のPDFと、受け取った日時・送り元
- OCRが返したJSONの全文
- AIが返したJSONと、そのとき渡した品番の対応表の範囲
- 照合に使った見積の版と、照合の結果
- 人が受注を確定した記録と、確定までに変えた項目
- 顧客への確認の内容と回答、注文請書を送った日時
「見積の版」を残すのは、見積が改訂されるためです。 顧客と単価を合わせ直して見積を出し直すと、古い見積で照らした結果と新しい見積で照らした結果が違ってきます。 どちらで受けたかを、後から確かめられるようにします。
04実装レベルの3段階
本記事の想定は半自動化です。 1件20分が7分になります。本格構成で仕入先への発注まで下書きを作ると、受注の誤りが発注の誤りに広がります。 半自動化で照合の判定を3か月見て、terms_diff と needs_human が落ち着いてから進めます。
05工数削減シミュレーション
導入後 360件 × 7分 ÷ 60 = 42 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 国内のメーカーの部品・材料・機器を海外の顧客へ輸出する専門商社と、海外の顧客から直接注文を受けるメーカーの海外営業部門。顧客の購買の仕組みから出た英文の注文書がPDFで月に数百件届き、営業アシスタントが販売管理の仕組みへ手で入力している場合。見積書を販売管理の仕組みか表で番号付きで管理しており、注文書と突き合わせる先がある場合。
- 注文書が日本語・中国語で届く場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めず、日本語の注文書は UC-0058 の構成が向きます)。顧客とEDIでつながっており、注文がデータで届く場合。月の注文が数十件の場合。なお、顧客の取引条件(裏面約款)を受け入れるかの判断と、価格・納期の交渉は、この構成では代替できません。
07最小構成で試す方法
- 先月の注文書から10件を選ぶ(明細の多いもの、見積番号が書かれていないもの、改訂版のもの、約款付きのものを入れる)
- 10件について、営業アシスタントが入力した受注データを書き出しておく
- 注文書のPDFと、その顧客の品番の対応表を手元のAIサービスに貼り付ける
- 「この注文書から、注文番号・見積番号・明細の行・インコタームズ・支払条件を書き出してください。インコタームズと支払条件は原文のまま写してください。書かれていない項目は『不明』としてください。見積と合っているかは判断しないでください」と指示する
- 出てきた内容を、受注データと突き合わせる
10件は必ずやってください。 組む前に、「書式の違う注文書から、同じ項目を同じ形で取れるか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 受注データとほぼ同じ値が出た | OCRと照合の仕組みに進む |
| インコタームズや支払条件を言い換えた | 指示の書き方で直る。構成は有効 |
| 明細の列がずれて数量と単価が入れ替わる | 表の読み取りの確認が先。 顧客の書式ごとに列見出しを確かめる |
3行目が出たら、書式の問題です。 罫線の無い表や、1行が2段に折り返された明細で起きやすく、その顧客の書式だけ列見出しの対応を顧客マスタに持たせると安定します。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| AIがインコタームズを直してしまう | 原文のまま写させ、誤りに見えても直さないと書く |
| 支払条件を「60日」と要約する | 原文で切り出し、起算日まで照らす |
| 約款のページから支払条件を拾う | 質問を当てるページを Pages で絞る |
| 千と小数の区切りを読み違える | 顧客マスタで決め打ちし、AIに読ませない |
| 改訂版を新しい注文として登録する | 同じ注文番号の改訂を見分け、差だけを出す |
| 見積番号が無いと照らせない | 顧客と品番で引く経路を用意する |
| 品名が似た別の品番を候補にする | 対応表の品番からだけ選ばせる |
| 英語以外の注文書で質問が空になる | 質問は英語の文書だけ。 言語で設定を切り替える |
| 受注を自動で確定する | 下書きまでにする。 確定は人 |
| 対応表が育たない | 確定した品番を毎回対応表に積む |
上の3行が、この構成の失敗のほとんどです。 どれも取引条件の文字列が、どこかで「それらしく」変わってしまうことから出ています。原文を切り出し、照らすのは規則、という分け方を崩さないことです。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 顧客の名前と出荷先、注文の品物と数量と単価、見積の単価と最小発注数量、支払条件です。見積の単価は、顧客ごとに違う取引の条件で、他の顧客に知られてはならない情報です。
- 外部へ渡す範囲を、整形に必要な項目に限る … 生成AIに渡すのは読み取り結果と、その顧客の品番の対応表だけです。見積の単価と他の顧客の情報は渡しません
- 受注の確定を自動にしない … 確定は顧客との約束で、出荷と発注が動き出します
- 約款の判断をAIに任せない … 顧客の購買の約款を受け入れるかは、法務と営業が決めます。AIが出すのは約款のページがあるという事実だけです
- 顧客への確認を自動で送らない … 条件の違いを確かめる連絡は、営業担当が顧客との関係を見て行います
- 保存先を暗号化する … 非同期の分析では、結果を自社のバケットに出し、KMSの鍵で暗号化する設定ができます
- 見られる人を絞る … 確認の一覧は、その顧客を担当する営業と営業アシスタントだけが見られるようにします
誤りが起きた場合のリスクは、見積と違う条件で受けることと、二重の手配の2つです。 前者はインコタームズや支払条件の言い換えで、後者は改訂版の取り違えで起きます。どちらも、原文を残して規則で照らす設計で防ぎます。
10まず何から始めるか
1週目:見積を引ける形にする
販売管理の仕組みから、有効な見積を見積番号・顧客・品番・単価・通貨・最小発注数量・納期のめやす・インコタームズ・支払条件・有効期限の列で取り出せるかを確かめます。取り出せない項目があれば、それが最初の課題です。
2週目:10件で試す
手元のAIサービスで、注文書を受注データの形に書き出させます。インコタームズと支払条件を言い換えていないかを最優先で見ます。
3週目:照合の規則を決める
顧客マスタに既定のインコタームズと支払条件を入れ、どの違いを terms_diff にするかを営業部で合わせます。過去に一致と確かめた支払条件の書き方を、顧客ごとに積み始めます。
4週目:受付から確認の一覧までをつなぐ
S3 の受付フォルダから StartDocumentAnalysis を呼び、受注データの下書きと見積との照合を一覧に書き出すところまで作ります。この時点では販売管理の仕組みへの取り込みは手で行い、一覧の判定だけを見ます。
2か月目: 品番の候補と改訂版の見分けを足し、match 以外の件数を毎週数えます。3か月目以降: 注文請書の下書きを足し、1件20分が何分になったかを実測します。継続の注文の大半が match で確定できるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
StartDocumentAnalysis がJPEG・PNG・TIFF・PDFを非同期で分析し、完了をSNSに通知し、GetDocumentAnalysis で結果を取ること。FeatureTypes に TABLES・FORMS・QUERIES などを指定できること。ClientRequestToken で二重起動を防げること、JobId が7日間有効なこと、OutputConfig と KMSKeyId で自社のバケットへの出力と暗号化ができること | AWS: StartDocumentAnalysis | 2026-10-06 |
AnalyzeDocument がキーと値(KEY_VALUE_SET)、表とセル、質問(QUERY・QUERY_RESULT、答えに信頼度)、チェック欄(SELECTION_ELEMENT)を返すこと。QueriesConfig が Text・Alias・Pages を持つこと | AWS: AnalyzeDocument | 2026-10-06 |
質問の答えが QUERY_RESULT として信頼度とともに返り、答えが見つからないときは空のまま返ること | AWS: Queries | 2026-10-06 |
| 同期の処理がPDFで1ページ・10MBまで、非同期がPDFで500MB・3,000ページまで、XFA形式とパスワード保護のPDFは不可、対応言語が6言語、質問の検出は英語の文書だけ、文字の高さが15ピクセル以上(150dpiで8ポイント)であること | AWS: Set Quotas in Amazon Textract | 2026-10-06 |
| インコタームズが売買契約で使われる11の3文字の取引条件であること、2020年版で旧来のDAT(Delivered at Terminal)がDPU(Delivered at Place Unloaded)に改められたこと、契約で使う版を明記するよう案内していること | ICC: Incoterms® 2020 | 2026-10-06 |
構造化出力を output_config.format(type: "json_schema")で指定でき、スキーマどおりの形で必須の項目が欠けずに返ること | Claude Docs: Structured outputs | 2026-10-06 |
取引条件の解釈と顧客の約款の扱いは、自社の法務と顧客との基本契約で決めてください。 本記事は上記の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0587)についてのご相談はこちらから。
