Media > AI活用ユースケース > 物流 > 仕入先からの納期回答メールを読み取って発注残の納期を更新する

仕入先からの納期回答メールを読み取って発注残の納期を更新する

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

仕入先から届く納期回答のメールを入力に、発注番号、品番、数量、回答された納期、分納の有無を取り出し、発注残台帳の該当行と突き合わせます。当初の希望納期より遅れているものには遅延の印を付け、台帳を更新します。

サマリー
利用ツール
AWS Textract/Azure AI/ChatGPT/Claude/Gemini/Google Document AI/Make/n8n/Power Automate
対象業界
商社/建設/物流/製造
対象部門
物流/購買
対象業務
データ入力・転記/内容確認・チェック
主な課題
入力作業が多い/情報が見つからない/期限・対応漏れが起きる
AIで行う処理
抽出
主な効果
入力漏れ削減/対応スピード向上/工数削減/機会損失防止
導入難易度
★★☆☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
必須
現在工数
60h/月
AI導入後
18h/月
想定削減
70%
年間削減
504h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. 仕入先から納期回答のメールが届く
  2. 担当者がメールを開き、どの発注に対する回答かを読む
  3. 発注番号が書かれていなければ、品番と仕入先名から発注残台帳を検索して特定する
  4. 回答された納期を読み取る(添付の表なら開いて該当行を探す)
  5. 発注残台帳の該当行に、回答納期を入力する
  6. 当初の希望納期より遅れていないかを見る
  7. 遅れていれば、生産計画の担当者と営業へ連絡する
  8. 回答が来ていない発注を、期日を見ながら督促する
導入後(After)
  1. 仕入先からの納期回答が、購買の共有メールボックスに届く
  2. 自動メール本文と添付ファイルからテキストを取り出す
  3. 自動発注番号、品番、数量、回答納期、分納の内訳を抽出する
  4. 自動発注残台帳と突き合わせ、該当する発注行を特定する
  5. 自動当初の希望納期と比べ、遅延の有無と遅延日数を計算する
  6. 自動発注番号が一致し、遅延がないものは台帳を直接更新する
  7. 発注が特定できないもの、遅延があるもの、分納のものを担当者が確認して確定する
  8. 自動遅延がある案件を、生産計画担当と営業へ日次でまとめて通知する
  9. 自動回答期限を過ぎても回答がない発注を一覧にして、督促候補として出す
各工程の詳しい説明を読む
  1. 仕入先から納期回答のメールが届く
  2. 担当者がメールを開き、どの発注に対する回答かを読む
  3. 発注番号が書かれていなければ、品番と仕入先名から発注残台帳を検索して特定する
  4. 回答された納期を読み取る(添付の表なら開いて該当行を探す)
  5. 発注残台帳の該当行に、回答納期を入力する
  6. 当初の希望納期より遅れていないかを見る
  7. 遅れていれば、生産計画の担当者と営業へ連絡する
  8. 回答が来ていない発注を、期日を見ながら督促する

問題は4つあります。

(a)書式が仕入先ごとに違う。 100社の仕入先がいれば、100通りの書き方があります。「3/15出荷」と書く会社、「第12週」と書く会社、Excelの表で送ってくる会社が混在します。

(b)発注番号が書かれていない回答がある。 「先日ご注文の件」とだけ書かれた回答が届きます。品番と仕入先名から探すことになり、1件に5分以上かかることがあります。

(c)分納の扱いが手間。 「300個のうち100個が3月15日、200個が4月10日」という回答は、台帳の1行では表せません。行を分割する作業が発生します。

(d)遅延の発見が遅れる。 入力が追いつかないと、遅れていることに気づくのが数日後になります。気づくのが遅れるほど、生産計画の組み替えが難しくなります。

  1. 仕入先からの納期回答が、購買の共有メールボックスに届く
  2. 【自動】 メール本文と添付ファイルからテキストを取り出す
  3. 【自動】 発注番号、品番、数量、回答納期、分納の内訳を抽出する
  4. 【自動】 発注残台帳と突き合わせ、該当する発注行を特定する
  5. 【自動】 当初の希望納期と比べ、遅延の有無と遅延日数を計算する
  6. 【自動】 発注番号が一致し、遅延がないものは台帳を直接更新する
  7. 【人】 発注が特定できないもの、遅延があるもの、分納のものを担当者が確認して確定する
  8. 【自動】 遅延がある案件を、生産計画担当と営業へ日次でまとめて通知する
  9. 【自動】 回答期限を過ぎても回答がない発注を一覧にして、督促候補として出す

自動化されるのは「読む」「探す」「打ち込む」「遅延を見つける」「督促対象を洗い出す」の5つです。人が見るのは、特定できなかったものと、遅れているものだけになります。

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

構成図
仕入先からの納期回答メール(本文 / Excel添付 / PDF添付)
   │
   ▼
購買の共有メールボックス
   │
   ▼【トリガー】新しいメールが届いたとき(添付を含む)
Power Automate
   │
   ├──▶ 添付の振り分け(Excel → 変換 / PDF → OCR)
   │       └─ Azure AI Document Intelligence(prebuilt-layout)
   │
   ├──▶ LLM API ── 発注番号 / 品番 / 数量 / 回答納期 / 分納 を構造化JSONで抽出
   │
   └──▶ 発注残台帳と突合(発注番号 → 品番+仕入先の順で照合)
   │
   ├─【一致・遅延なし】──▶ 台帳を自動更新
   │
   └─【不一致 / 遅延あり / 分納】──▶ 確認キュー【人が確定】
   │
   ▼
生産管理システムの発注残を更新 + 遅延一覧を日次で通知
役割想定する製品代替候補
ワークフローPower AutomateMake、n8n
OCRAzure AI Document Intelligence(prebuilt-layout)Google Document AI、AWS Textract
生成AIClaude API(structured outputs)OpenAI API、Gemini API
台帳生産管理システムの発注残Google スプレッドシート、kintone
通知Teamsメール、Slack

仕入先の大半がEDIやWeb発注ポータルを使えるなら、そちらを先に検討してください。 回答が構造化データで届けば、この構成は不要になります。自前で組む価値があるのは、仕入先が小規模でEDIを導入できず、メールでの回答が当面変わらない場合です。実際には、上位10社はEDI・残りはメールという二本立てになることが多く、そのメール側を受け持つ構成になります。

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

Step1

処理の起点を決める

購買の共有メールボックスへの着信を起点にします。

Office 365 Outlook コネクタの「When a new email arrives (V3)(新しいメールが届いたとき)」トリガーを使います。このトリガーには、件名での絞り込み(Subject Filter)、差出人アドレスでの絞り込み(From)、監視するフォルダーの指定(Folder)、添付ファイルの内容を取得するかどうか(Include Attachments)、添付のあるメールだけを対象にするか(Only with Attachments)といったパラメーターがあります。

専用の共有メールボックスを用意し、仕入先にそこへ返信してもらうのが確実です。 担当者個人のメールボックスを監視する構成にすると、担当者が休んだときに止まります。

添付の中身は、「Get Attachment (V2)」アクションでメッセージIDと添付IDを指定して取得します。返るのは Content Bytes(バイナリ)です。

Step2

入力データを集める

データ中身取得元
メール本文納期回答の文面共有メールボックス
添付ファイル納期回答表(Excel・PDF)メール添付
発注残発注番号、仕入先コード、品番、数量、希望納期、回答納期、ステータス生産管理システム
仕入先マスタ仕入先コード、正式名称、担当者のメールアドレス生産管理システム
品番マスタ自社品番、仕入先品番、品名生産管理システム

品番マスタに「仕入先品番」を持っているかどうかが、この構成の成否を分けます。 仕入先は自社の品番で回答してきます。対応表がないと、照合が人手に戻ります。

Step3

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

メール本文: トリガーの出力から取ります。HTMLメールの場合はテキストに変換します。

Excel添付: 表を読み取ってCSVまたはテキストに変換します。Excelファイルをそのまま生成AIに渡すことはできません。 Claude API のドキュメントには、.txt や .csv などのプレーンテキストは document ブロックで直接使えるが、.xlsx や .docx などのバイナリ形式は対応しておらず、テキストかPDFに変換する必要があると明記されています。ワークフロー側で変換工程を必ず挟んでください。

PDF添付: Azure AI Document Intelligence の prebuilt-layout モデルに渡します。このモデルは文字に加えて表を抽出し、行数・列数・行結合・列結合の情報を返します。outputContentFormat=markdown を指定するとMarkdown形式で出力でき、v4.0(2024-11-30 GA)以降は結合セルや複数行ヘッダーを表現するため表がHTML形式で出力されます。納期回答表は結合セルが多いので、この形式で受け取れることが効きます。

なお、Claude API は PDF を直接扱うこともできます(1リクエストあたり最大32MB・600ページ、コンテキストウィンドウが1Mトークン未満の場合は100ページ)。ページ数の少ない回答表ならこちらでも足ります。表の構造を厳密に取りたい場合はOCRサービス、文章混じりの回答書ならClaude直接、と使い分けます。

発注残・マスタ: 生産管理システムのAPI、または日次エクスポートを参照します。照合の対象は「未回答または回答済みで未納品」の発注に限れば、数百行から数千行に収まります。

Step4

AIへ渡す前に整形する

  1. 引用部分の除去 … 返信メールには自社が出した発注メールがぶら下がっています。ここに書かれた希望納期を「回答納期」として拾う事故が起きます。 区切り行から下を必ず落とします
  2. 署名の除去 … 署名の電話番号を数量として拾うことがあります
  3. 添付の種別判定 … 納期回答表、請求書、図面が混ざります。ファイル名と中身から判定し、回答表以外は処理対象から外します
  4. 照合対象の絞り込み … 発注残のうち「その仕入先の未納品分」だけをプロンプトに渡します。全件を渡すと誤照合が増えます
  5. 年の補完 … 「3/15」とだけ書かれた回答が届きます。発注日と希望納期から年を推定するルールを前処理に置き、AIに推測させません
Step5

AIに処理させる

処理内容
発注の特定文面から発注番号を取り出す。なければ品番と数量から候補を挙げる
回答納期の抽出「3月15日出荷」「第12週」「月末」などの表現を日付に直す
分納の展開「100個を3/15、200個を4/10」を2行に分ける
出荷日か着荷日かの判別「出荷予定」と「納入予定」を区別する。書かれていなければ不明とする
条件付き回答の検出「〇日までにご発注いただければ」のような条件を拾う
回答以外の内容の検出値上げの連絡、欠品の連絡、代替品の提案が混ざっていることを知らせる

「出荷日か着荷日か」の判別を入れてください。 ここを取り違えると、輸送日数の分だけ納期の見込みがずれます。遠方の仕入先では1週間ずれることがあります。

Step6

指示内容を固定する

あなたは製造業の購買部で納期管理を担当する担当者です。
仕入先からの納期回答メールを読み、発注残と突き合わせる項目を取り出してください。

【厳守事項】
- 引用部分(自社が送信した発注メールの内容)は読まないでください。
  回答は今回書かれた本文と添付にだけ書かれています。
- 発注番号が本文に書かれていない場合は、po_number を null にし、
  【この仕入先の発注残】から候補を最大3件まで candidates に挙げてください。
  1つに決めないでください。
- 日付は YYYY-MM-DD で返してください。年が書かれていない場合は
  year_missing を true にし、date_raw に原文の表記をそのまま残してください。
  年を推測して補わないでください。
- 「出荷」「発送」とあれば ship、「納入」「着荷」「入荷」とあれば arrive、
  どちらとも読めなければ unknown を date_type に入れてください。
- 分納の場合は splits に数量と日付の組を分けて入れてください。
- 納期回答以外の連絡(値上げ、欠品、代替品の提案、条件付きの回答)が
  含まれていれば、other_notices に原文を引用してください。

【この仕入先の発注残(未納品分)】
{open_po_list}

【品番の対応表(自社品番 / 仕入先品番)】
{part_mapping}

【メール本文】
{mail_body}

【添付の内容】
{attachment_text}

「年を推測して補わない」の1行が重要です。 12月に「1/20」という回答が届いたとき、それが翌年の1月20日であることは文面からは決まりません。発注日との関係で判断すべきものなので、前処理のルールで補い、AIには推測させません。

Step7

出力形式を固定する

{
  "supplier_name": "",
  "po_number": "",
  "candidates": [
    { "po_number": "", "part_no": "", "qty": 0, "reason": "" }
  ],
  "part_no": "",
  "qty": 0,
  "answer_date": "",
  "date_raw": "",
  "date_type": "ship | arrive | unknown",
  "year_missing": false,
  "splits": [
    { "qty": 0, "date": "", "date_type": "ship | arrive | unknown" }
  ],
  "other_notices": [],
  "confidence": "high | medium | low"
}

Claude API の structured outputs を使うと、output_config.format に JSON スキーマを渡すことで、制約付きデコードによりスキーマに沿った出力が保証されます。公式ドキュメントは「JSONのパースエラーが起きない」「型と必須項目が保証される」「スキーマ違反によるリトライが不要」と説明しています。日付を文字列型、数量を数値型で固定しておくと、後段の台帳更新で型変換の失敗が起きません。

Step8

システムへ連携する

生産管理システムの発注残を更新します。連携方法は3通りあります。

方式内容
API連携生産管理システムがAPIを提供していれば、確定と同時に更新する
ファイル取込所定のCSV形式で書き出し、システムの取込機能で読ませる
中間台帳システムを直接更新せず、スプレッドシートの中間台帳に書き、購買が一括で取り込む

最初は中間台帳から始めることを勧めます。 生産管理システムを直接書き換える構成は、誤った納期が入ったときの影響が大きく、切り戻しも面倒です。中間台帳で2か月運用して精度を測ってから、直接更新に移します。

遅延の通知は、1件ごとに送らず日次でまとめて1通にします。1件ずつ飛ばすと、受け取る側が見なくなります。

Step9

人が確認する

全件は確認しません。条件を決めて分けます。

条件扱い
発注番号が一致し、遅延がなく、確信度が high自動で更新する(人は見ない)
発注番号が特定できない人が確認する
当初の希望納期より遅れている人が確認する
分納が含まれている人が確認する
出荷日か着荷日かが unknown人が確認する
年が書かれていない人が確認する
納期回答以外の連絡が含まれている人が確認する

この分け方が、この構成の設計の中心です。遅延なしの回答を自動で通すから工数が減り、遅延のある回答を人に回すから見落としが防げます。 全件を人が見る設計にすると、削減効果は半分以下になります。

自動更新した分も、監査のために日次の更新一覧を担当者に送ります。 見るのは1日1回、数分です。

運用を始めて2か月は、自動更新の対象も全件を人が見てください。精度が分かる前から自動で通す範囲を広げないでください。

Step10

例外に対処する

起きること対応
発注番号が書かれていない候補を最大3件挙げて人へ回す。1つに決めさせない
品番が仕入先の品番で書かれている品番対応表で変換する。対応表にない場合は人へ回す
1通に複数の発注への回答が入っている発注ごとに分割して処理する
「3/15」と年が書かれていない前処理のルールで補完し、year_missing が立っていれば人が確認する
「未定」「確認中」という回答納期を更新せず、督促の予定日だけを更新する
分納の回答台帳の行を分割する。自動では行わず、人が確定してから分割する
値上げや欠品の連絡が混ざっているother_notices に入れ、購買担当へ別途通知する。納期の更新だけで終わらせない
添付が画像(写真・スキャン)OCRに回す。読み取れなければ人へ回す
Excelの添付が開けない・壊れている人へ回す。中身を推測しない
自動更新した納期が誤っていた更新履歴から元の値に戻せるようにする。上書きだけの設計にしない
回答が来ないまま期限を過ぎた督促候補として一覧に出す。自動で督促メールを送らない
Step11

記録を残す

  • メールの原本(本文・添付)
  • 抽出結果(生のJSON)と確信度
  • 照合の結果(どの発注に紐づけたか、その根拠)
  • 台帳の更新前後の値
  • 自動更新か、人の確定かの区別
  • 人が修正した項目と、修正前後の値

自動更新か人の確定かを区別して残してください。 後で納期のトラブルが起きたとき、誰の判断で入った値かが分かる必要があります。更新前の値を残しておけば、誤更新の切り戻しもできます。

04実装レベルの3段階

最小構成:生成AIの画面にメール本文を貼り、抽出結果を見ながら台帳に入力する / 読み取りのみ
半自動化:メール監視 → 抽出 → 照合 → 中間台帳へ出力 → 購買が確認して取り込む / 読み取りと照合
本格構成:上記+条件付き自動更新+遅延の日次通知+未回答の督促候補抽出 / 確認以外のすべて

半自動化の時点で、6分が3分程度になります。 読み取りと照合が消えるためです。本格構成にすると1.8分程度になります。遅延なしの回答を人が見なくなる分が大きく、ここが削減の主な源です。

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

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

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

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

AI活用について相談する

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

向いている
  1. 仕入先への発注が月300件以上あり、納期回答がメール(本文または添付)で個別に届いている企業。発注番号を発注書に印字していて、仕入先の回答にもその番号が引用されていること。発注残を台帳またはシステムで管理していて、更新用のAPIかCSV取込があること。
向いていない
  1. 仕入先の大半がEDIやWeb発注ポータルで回答していて、納期がすでに自動で入ってくる場合。発注が月50件以下で、担当者が全件を記憶の範囲で追えている場合。個別受注生産で1件あたりの納期調整に長い交渉が必要な取引(読み取りより交渉が本体になる)。

07最小構成で試す方法

  1. 直近の納期回答メールを30通用意する(仕入先はばらばらに選ぶ。添付ありを1/3ほど含める)
  2. その仕入先の発注残と、品番の対応表をテキストにまとめる
  3. ChatGPTかClaudeの画面に、発注残と対応表を貼り、メール本文を貼って上のプロンプトを試す
  4. 発注番号の特定、回答納期、出荷か着荷かの3点が正しく取れたのが何通かを数える

この検証を必ずやってください。 仕入先の書き方の幅は、実際のメールを見るまで分かりません。判断の目安は次のとおりです。

30通の結果判断
27通以上(9割)正しい自動化する価値がある
21〜26通自動で通す条件を絞れば使える。遅延なし・確信度highだけを自動にする
20通以下発注番号が引用されていない回答が多いはず。仕入先に「発注番号を引用して返信してください」と依頼するほうが先

最後の行は、この業務でよくある結論です。依頼で改善する余地がある場合、AIを入れる前にそちらをやってください。

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

問題対策
引用部分の希望納期を回答納期として拾う区切り行から下を落とす前処理を必ず入れる。もっとも多い事故
発注番号が書かれていない回答が多い仕入先に発注番号の引用を依頼する。並行して品番と数量からの候補提示で凌ぐ
仕入先の品番で回答されて照合できない品番対応表を先に作る。ここが無いと構成が成立しない
Excelの添付を生成AIに渡せない.xlsx は document ブロックで扱えない。テキストかPDFに変換する工程を挟む
「3/15」の年を取り違える前処理のルールで補い、AIに推測させない。年が無い回答は人が確認する
出荷日と着荷日を取り違えるdate_type を必ず返させる。unknown は人へ回す
分納を1行で扱ってしまうsplits で分けて返させ、人が確定してから台帳の行を分割する
自動更新の範囲を最初から広げる最初の2か月は全件を人が見る。精度を測ってから範囲を決める
遅延通知を1件ずつ送って見られなくなる日次でまとめて1通にする
誤った納期で上書きして戻せない更新履歴を残す。上書きだけの設計にしない
結合セルの多い回答表が読めないprebuilt-layout の Markdown 出力を使う。v4.0 以降は表がHTML形式で出力される

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

この構成で扱うデータ: 仕入先名、発注品番、数量、納期。自社の生産計画と、仕入先との取引内容が含まれます。

  1. 外部AIへの入力可否 … 発注品番と数量からは、自社が何をどれだけ作ろうとしているかが読み取れます。新製品の部品が含まれる場合はとくに注意が必要です。自社の情報管理規程と、仕入先との秘密保持契約を確認してください
  2. 学習利用 … 入力を学習に使わないことが契約で保証されるサービスを選びます
  3. 共有メールボックスの権限 … 購買部門に限定します。納期回答には単価が書かれていることがあります
  4. 自動実行してよい範囲 … 台帳の更新は自動化してよい範囲ですが、仕入先への督促メールの自動送信は入れないでください。 取引先との関係に直接影響します。督促は候補の一覧を出すところまでにします
  5. 遅延情報の扱い … 特定の仕入先の遅延が続いていることは、取引条件の見直しにつながる情報です。集計結果の共有範囲を決めてください
  6. 誤更新への備え … 自動更新した値は履歴を残し、元に戻せるようにします。監査のため、自動更新か人の確定かを区別して記録します

誤りが起きた場合のリスクは、誤った納期にもとづく生産計画の欠品、または過剰な在庫です。遅延のある回答を必ず人に回す設計にしているのは、このためです。

10まず何から始めるか

1週目:発注番号の引用率を数える

直近1か月の納期回答メールを100通取り出し、発注番号が引用されているものが何通かを数えます。この比率が、自動で通せる割合の上限になります。 3割を切るなら、仕入先への依頼から始めてください。

2週目:品番の対応表を確かめる

自社品番と仕入先品番の対応表があるか、あるなら実際の回答メールの品番が引けるかを確かめます。ここが無ければ作ります。この構成でもっとも時間がかかるのは、実はこの表の整備です。

3〜4週目:抽出を30通で試す

生成AIの画面で30通試し、発注番号の特定、回答納期、出荷か着荷かの3点の正解率を測ります。9割を超えたら次へ進みます。

2か月目:半自動化を作る

共有メールボックス、抽出、照合、中間台帳への出力までを作り、購買1名が2週間使います。6分が何分になるかを実測します。生産管理システムへの書き戻しはまだ作りません。

3か月目以降: 精度が確認できたら、自動で通す条件を決めて本格構成に進みます。最初の条件は「発注番号が一致し、遅延がなく、確信度がhigh」だけに絞ってください。 範囲を広げるのは、3か月分の実績を見てからにします。


11関連ユースケース

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

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

技術仕様確認日:2026-09-11/最終更新:2026-09-11
確認した内容情報源確認日
Office 365 Outlook コネクタに「When a new email arrives (V3)」トリガーがあり、件名・差出人・フォルダー・添付の有無で絞り込めること。添付の内容は「Get Attachment (V2)」で取得できることMicrosoft Learn: Office 365 Outlook connector2026-09-11
Azure AI Document Intelligence の prebuilt-layout が表を行数・列数・結合情報つきで抽出すること。outputContentFormat=markdown でMarkdown出力が可能で、v4.0(2024-11-30 GA)以降は結合セルや複数行ヘッダーのため表がHTML形式で出力されることMicrosoft Learn: Document layout analysis2026-09-11
Claude API の structured outputs が output_config.format に JSON スキーマを指定する方式で、制約付きデコードによりスキーマ準拠を保証することClaude Docs: Structured outputs2026-09-11
Claude API のPDF対応が1リクエストあたり最大32MB・600ページ(コンテキストウィンドウが1Mトークン未満の場合は100ページ)であること。.xlsx や .docx はdocumentブロックで扱えず、テキストかPDFへの変換が必要なことClaude Docs: PDF support2026-09-11

生産管理システムへの書き戻し方式(API / CSV取込 / 中間台帳)は製品によって異なります。この部分は利用環境に応じた個別確認が必要です。

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

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

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

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