配送業者の運賃請求を出荷実績と運賃表に突き合わせて過払いを見つける
配送業者から届く運賃の請求明細を、自社の出荷実績と契約運賃表に1行ずつ突き合わせ、金額の合わない行だけを洗い出します。担当者の作業は、数千行の明細を抜き取りで見ることから、差異の付いた行だけを調べることに変わります。
- 利用ツール
- AWS Textract/Azure AI/ChatGPT/Claude/Gemini/Google Apps Script/Google Document AI/Make/n8n/Power Automate/Python
- 対象業界
- EC/小売/物流/製造
- 対象部門
- 物流/経理
- 対象業務
- 内容確認・チェック/比較検討
- 主な課題
- 人手が足りない/属人化している/確認ミスが多い
- AIで行う処理
- 判定
- 主な効果
- 品質標準化/工数削減/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 月初と月中に、各配送業者から請求書と明細が届く(PDF添付、業者ポータルからのCSV)
- 担当者が明細を拠点別のフォルダに保存する
- 請求書の合計金額と、社内の物流費の見込み額を見比べる
- 明細が数千行あるため、金額の大きい行だけを抜き取る
- 抜き取った行をWMSで送り状番号から検索し、サイズ区分・地域区分・重量が合っているかを見る
- 契約運賃表のファイルを開き、その区分の単価を探す
- 付帯作業料(時間指定、再配達、荷役、待機)と燃料サーチャージを確認する
- 差異が見つかったら、業者の営業担当へ照会のメールを書く
- 経理へ回し、支払いを承認する
- 人業者ポータルから請求明細をダウンロードし、所定のフォルダに置く
- 自動PDFの明細を読み取り、CSVはそのまま読み込む
- 自動業者ごとの項目名を自社の項目名に対応づける(対応表にない項目はAIが候補を出す)
- 自動送り状番号をキーに、出荷実績と突き合わせる
- 自動出荷日から運賃表の版を選び、あるべき運賃を計算する
- 自動請求額とあるべき額の差を1行ずつ計算する
- 自動差異のある行に原因の候補を付け、区分ごとにまとめる
- 人担当者が差異の一覧を見て、「自社側の誤り」「業者へ照会」「正常」に振り分ける
- 人照会文の下書きを直して業者へ送り、支払いを承認する
各工程の詳しい説明を読む
- 月初と月中に、各配送業者から請求書と明細が届く(PDF添付、業者ポータルからのCSV)
- 担当者が明細を拠点別のフォルダに保存する
- 請求書の合計金額と、社内の物流費の見込み額を見比べる
- 明細が数千行あるため、金額の大きい行だけを抜き取る
- 抜き取った行をWMSで送り状番号から検索し、サイズ区分・地域区分・重量が合っているかを見る
- 契約運賃表のファイルを開き、その区分の単価を探す
- 付帯作業料(時間指定、再配達、荷役、待機)と燃料サーチャージを確認する
- 差異が見つかったら、業者の営業担当へ照会のメールを書く
- 経理へ回し、支払いを承認する
問題は4つあります。
(a)全件は見られない。 月約38,000行に対し、中身を見ているのは数十行です。抜き取りでは、少額で広く起きている誤りが構造的に見つかりません。1件数十円の区分違いでも、数万件に及べば無視できない額になります。
(b)運賃表の版が複数ある。 年度の改定、燃料サーチャージの改定、拠点ごとの個別条件が積み重なり、いつからどの単価が効くのかが分かりにくくなります。どの版を当てるかを言えるのは担当者1名だけ、という状態になりがちです。
(c)差異の原因が自社側にあることも多い。 出荷時のサイズ登録が実際と違う、キャンセルが出荷データに反映されていないといった誤りも、同じように差異として現れます。
(d)支払期日に追われる。 2週間で数千行を確認する時間は取れず、合計金額だけを見て支払う運用に落ち着きます。
- 【人】 業者ポータルから請求明細をダウンロードし、所定のフォルダに置く
- 【自動】 PDFの明細を読み取り、CSVはそのまま読み込む
- 【自動】 業者ごとの項目名を自社の項目名に対応づける(対応表にない項目はAIが候補を出す)
- 【自動】 送り状番号をキーに、出荷実績と突き合わせる
- 【自動】 出荷日から運賃表の版を選び、あるべき運賃を計算する
- 【自動】 請求額とあるべき額の差を1行ずつ計算する
- 【自動】 差異のある行に原因の候補を付け、区分ごとにまとめる
- 【人】 担当者が差異の一覧を見て、「自社側の誤り」「業者へ照会」「正常」に振り分ける
- 【人】 照会文の下書きを直して業者へ送り、支払いを承認する
自動化されるのは「読む」「対応づける」「突き合わせる」「計算する」「分類する」の5つです。残るのは、差異がどちら側の誤りなのかを決める判断です。
差異の出る行は全体の1〜5%程度を想定しています。1行ずつではなく、原因の候補ごとにまとめて見ます。 「A社の拠点2発、サイズ区分の違い、340行」という単位で判断します。
02今回想定するシステム構成
配送業者からの請求明細(PDF / CSV / 業者ポータル) │ ▼【トリガー】所定フォルダへの配置、または毎月6日と21日の朝8時 Make │ ├──▶ Google Document AI ── PDF明細の表を読み取る ├──▶ WMS / 受注管理システム ── 出荷実績(送り状番号・出荷日・サイズ・重量・個口数) └──▶ 運賃表マスタ ── 版(適用開始日)ごとの単価・区分・付帯料金 │ ▼【突合と金額計算】Python │ ─ 送り状番号で照合し、出荷日から版を選び、あるべき運賃を計算する │ ─ 請求額との差を1行ずつ出す │ ▼【判定】Gemini API(構造化出力) │ ─ 項目名の対応づけの候補、差異の原因の分類、照会文の下書き │ ▼ 差異一覧シート(原因の候補ごとに集計)──【人が判断】 │ ▼ 照会文を送る → 支払い承認【人が実行】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| ワークフロー | Make | Power Automate、n8n |
| 実行環境 | Python | Google Apps Script |
| 差異計算 | Python | Google Apps Script |
| OCR | Google Document AI | Azure AI Document Intelligence、AWS Textract |
| 生成AI | Gemini API(構造化出力) | Claude API、OpenAI API |
運賃の計算と支払管理まで行う物流管理システムを先に検討してください。 自前で組む価値があるのは、拠点ごとの個別条件が既製の形に収まらない場合です。
突合と金額計算をAIにさせない設計にしています。 「サイズ区分の単価に地域区分を当て、付帯料金と燃料サーチャージを足す」計算は、プログラムなら毎回同じ答えを出します。確実に出せるものを、わざわざ不確実にする理由がありません。AIには、業者ごとの書き方の違いを吸収することと、計算結果に意味を付けることだけをさせます。
03どうやって実装するのか
処理の起点を決める
所定フォルダへのファイル配置、または月2回の定時実行を起点にします。締め日が15日と月末に分かれるため、月6日と21日の朝に走らせます。
Make のシナリオはスケジュール設定で実行のタイミングを指定します。既定は15分ごとで、分単位の間隔指定のほか Daily、Weekly、Monthly(月の指定日)、On demand から選べます。最小の間隔は契約プランによります。今回は Monthly の指定日で足ります。
ポータルからのダウンロードは自動化しません。 認証があり、自動ログインが利用規約に触れないかの確認が要るためです。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 請求明細 | 送り状番号、出荷日または着荷日、届け先、区分、重量、運賃、付帯料金、燃料サーチャージ | 配送業者 |
| 出荷実績 | 送り状番号、出荷日、出荷元拠点、届け先の郵便番号、サイズ、重量、個口数 | WMS |
| 受注情報 | キャンセル、返品、時間指定の有無 | 受注管理システム |
| 運賃表マスタ | 業者別・版別の単価、地域区分、サイズ区分、付帯料金、燃料サーチャージ | 物流部が登録 |
| 付帯作業の記録 | 待機、荷役、館内配送の発生記録 | 拠点 |
| 項目対応表 | 業者の列名と自社の項目名の対応 | 物流部が登録 |
運賃表マスタと項目対応表は、この構成の前提になる自社データです。
データの取得方法を決める
CSVの請求明細: そのまま読み込みます。まず「明細をCSVで出せますか」と業者に聞いてください。 CSVで受け取れれば、OCRの工程が丸ごと消えます。
PDFの請求明細: OCRに回します。Google Document AI の Invoice parser は、ヘッダー項目と明細行の両方を抽出すると公式のプロセッサ一覧に記載があります。ただし運賃の明細は請求書の様式ではなく、数千行の一覧表であることが多いため、請求書向けのモデルが合うとは限りません。表構造の読み取りに向いた Form Parser や Layout Parser、自社の様式で学習させる Custom Extractor も候補です。自社の明細で実測してください。
出荷実績: WMSからCSVエクスポートするか、APIで取得します。送り状番号を必ず含めてください。 これが無いと突合が成立しません。
AIへ渡す前に整形する
- 項目名の対応づけ … 業者ごとに列名が違い、「サイズ」と「規格」が同じ意味だったり、「手数料」の中身が違ったりします。対応表を作り、表に無い列だけAIに候補を出させます。確定は人が行い、対応表に追記します
- 送り状番号の正規化 … ハイフン、前ゼロ、半角と全角が混ざります。数字だけを取り出して比較します
- 対象期間の切り出し … 締め日が業者ごとに違い、請求の基準も「発送日」と「着荷日」があります。 着荷日基準では月末に出した荷物が翌月の請求に載るため、締め期間だけを読むと月境の行が全部「実績なし」になります。出荷実績は前後1か月を含めて読み込みます
- 金額の型をそろえる … カンマ入りの文字列を数値に直し、税込か税抜かを業者ごとに確認します
- 運賃表の版の選択 … 請求日ではなく出荷日で版を選びます。 改定日をまたぐ月は、同じ請求書の中に2つの版が混在します
AIに処理させる
| 処理 | 内容 |
|---|---|
| 項目名の対応づけ | 対応表に無い列が自社のどの項目に当たるかの候補を出す(確定は人) |
| 差異の原因の分類 | 突合で出た差異に原因の候補を付け、区分ごとにまとめる |
| 照会文の下書き | 対象の送り状番号と差額を添えた照会の短文を作る |
AIにさせないことは4つです。金額の計算(あるべき運賃も差額もプログラムが出す)、区分の判定(サイズ区分や地域区分を住所や品名から推測させない)、運賃改定の内容の推測、過大請求の断定です。
燃料サーチャージは推測の対象にしやすいので、特に注意してください。 トラック運送では、国土交通省が令和2年4月に告示した「標準的な運賃」の一部として、令和5年3月に燃料サーチャージの算出方法等が告示されています。ただしこれは、事業者が事業を持続するための参考として示されたものです。自社の契約でどの基準価格・改定時期が適用されるかは、契約書と改定通知にしか書かれていません。 改定通知が届いたら物流部が新しい版として登録します。この登録を人の作業として残すことが安全装置になります。
指示内容を固定する
あなたは荷主企業の物流担当を支援する担当者です。
運賃の請求明細と出荷実績の突合結果を渡します。
差異のある行に、原因の候補を付けて分類してください。
【厳守事項】
- 金額、重量、個数を計算し直さず、値をそのまま引き継いでください。
- 「過大請求」と断定せず、自社の出荷データ側の誤りである
可能性を必ず併記してください。
- 原因は出力スキーマの候補から選び、当てはまらなければ
"unknown" とし、判断できない理由を書いてください。
- 運賃表に無い単価や改定内容を推測せず、該当する単価が無い行は
needs_master_update に入れてください。
- 突合できなかった行は、原因を推測せず unmatched に分けてください。
- 同じ原因の行はまとめ、件数と差額の合計を入れてください。
- 照会文の下書きは4行以内にし、事実の確認だけを書いてください。
【突合結果(差異のある行)】
{diff_rows}
【適用した運賃表の版】
{tariff_version}
「過大請求と断定しない」「自社側の誤りの可能性を併記する」の2行が最も重要です。 ここを外すと、自社の登録ミスを業者へ照会する事故が起きます。一度それをやると次から業者の対応が慎重になります。
出力形式を固定する
差異の一覧を表計算ソフトの行に落とすため、自由文では扱えません。Gemini API には、response_format に mime_type と JSON Schema を指定して出力形式を固定する構造化出力の機能があります。
{
"groups": [
{
"carrier": "",
"origin_site": "",
"cause_candidate": "size_class | area_class | weight_class | redelivery | accessorial | fuel_surcharge | tariff_version | own_data_error | actual_cost | unknown",
"row_count": 0,
"difference_total": "",
"direction": "billed_higher | billed_lower",
"own_side_possibility": "",
"carrier_side_possibility": "",
"inquiry_draft": ""
}
],
"unmatched": [
{ "tracking_number": "", "side": "billing_only | shipment_only", "reason": "" }
],
"needs_master_update": []
}
difference_total は、プログラムが計算した値を文字列として引き継がせます。数値として再出力させると、桁を落とした値が返ることがあります。 own_side_possibility と carrier_side_possibility を分けているのは、どちらの誤りか分からない状態を構造として残すためです。
システムへ連携する
差異の一覧はスプレッドシートに書き出します。列は、原因の候補、業者、拠点、件数、差額の合計、自社側の可能性、業者側の可能性、担当者の判断、照会の結果です。
担当者の判断を書く列を必ず作ってください。 「自社側の誤り」「業者へ照会」「正常」の3択にします。この列が翌月の入力になります。前月に「正常」とした組み合わせは、翌月はその旨を添えて表示します。そうしないと、毎月必ず出る正常な差異(チャーター便の実費精算など)が上位に居座ります。
支払データへの書き戻しはしません。 支払いを止めるか減額して払うかは、業者との関係を含む判断です。
人が確認する
差異の付いた行は、原因の候補ごとにまとめた単位で人が全件を確認します。 見るのは3点です。
- その差異が自社側の誤りではないか … 出荷データのサイズ登録、キャンセルの反映漏れを先に疑います。ここを飛ばして照会しないでください
- 適用した運賃表の版が正しいか … 差異が特定の日付から一斉に出ていれば、版の選択を疑います
- 照会文の内容 … 送信前に必ず読みます。返金の要求は人が判断して書き足します
突合できなかった行は、差異の行より先に見ます。 請求にあって出荷実績に無い行は、他社の荷物が混ざっているか、自社の出荷登録が漏れているかのどちらかで、金額の差異より重い話です。
例外に対処する
| 起きること | 対応 |
|---|---|
| 送り状番号が出荷実績に無い | unmatched として一覧の先頭に出す。原因をAIに推測させない |
| 出荷実績にあるが請求に無い | 同じく unmatched に出す。翌月に請求されることがあるため2か月は追跡する |
| 返品・再出荷で別の送り状番号が付く | 元の番号と紐づく列がWMSにあるか確認する。無ければ「返品扱い」として別に集計する |
| 複数個口で送り状番号が複数付く | 親番号でまとめてから突合する。個口単位の請求と出荷単位の実績を1対1で比べると全行が差異になる |
| 運賃表にその期間の版が無い | 計算を止め、needs_master_update に入れて担当へ通知する。前の版で代用しない |
記録を残す
- 請求明細の原本と、突合結果の全件(差異が無かった行も含む)
- 適用した運賃表の版のIDと、AIが付けた原因の候補
- 担当者の判断(自社側の誤り/業者へ照会/正常)と、照会の結果
最後の行が、成果を測る唯一の材料です。 「照会した120行のうち、業者が修正したのは40行、自社の登録ミスが60行、契約どおりが20行」と分かって初めて、価値が数字になります。
電子データで受け取った請求明細は、電子帳簿保存法の電子取引に当たります。国税庁の一問一答では、見読可能装置の備付け、検索機能の確保、真実性を確保するための措置が必要とされています。検索機能は、日付や取引金額などの主要な記録項目を条件にできること、日付と金額は範囲を指定できること、二以上の記録項目を組み合わせられることの3点です。自社の保存方法が要件を満たすかは顧問税理士に確認してください。
04実装レベルの3段階
半自動化の時点で効果の大半が出ます。 全件を機械的に突き合わせるだけで、抜き取り確認が不要になるためです。本格構成との差は、PDFへの対応と版管理です。 本格構成でも、支払いの保留や減額は自動化しません。 差異が自社側の誤りであることが多い以上、機械の判定だけで支払いを止めると取引を壊します。
05工数削減シミュレーション
導入後 40件 × 22分 ÷ 60 = 14.7 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 配送業者を3社以上使っている荷主企業。出荷実績が倉庫管理システムまたは受注管理システムにデータとして残っており、各行に送り状番号があること。請求明細をCSVなどの電子データで受け取れること。契約運賃表が文書として存在すること。
- 配送業者が1社で、運賃が出荷個数×一律単価で決まる場合。月の出荷が数百件で、全件を目で確認できている場合。請求明細が紙だけで送り状番号が印字されていない場合(先に電子データでの受領を業者に依頼する)。運賃を自社で計算せず、業者の請求額をそのまま販売価格に転嫁している場合。
07最小構成で試す方法
- 1つの拠点・1社・1か月分の請求明細をCSVで用意する
- 同じ期間の出荷実績をWMSからCSVで出す(送り状番号を含める)
- 表計算ソフトの関数で、送り状番号をキーに2つを突き合わせる
- 何%の行が一致したかを数える
- 一致した行について、請求の区分と自社が登録した区分が同じかを数える
AIを使わずに、ここまで進めてください。 突合が成立するかと、差異が出る行の割合が分かります。
| 送り状番号の一致率 | 判断 |
|---|---|
| 95%以上 | 突合が成立する。次へ進む |
| 80〜95% | 月をまたぐ行、複数個口、返品を分けてから数え直す |
| 80%未満 | WMSの送り状番号の記録に漏れがある。データ整備が先 |
次に、一致した行から100行を選び、運賃表を見ながら手で計算して請求額と比べてください。 ここで初めて、差異が何%の行に出るのか、どちら側の誤りが多いのかが見えます。
「いくら取り戻せるか」は、この試行で初めて分かります。導入前に見込み額を置かないでください。 差異の大半が自社側の誤りなら、取り戻せる金額はほとんどありません。それでも、自社の出荷データが正しくなる成果は残ります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 送り状番号の書式が業者ごとに違う | 数字だけを取り出して比較する。前ゼロとハイフンを落とす |
| 月をまたぐ行が毎月「実績なし」になる | 読み込み範囲を前後1か月に広げる。請求の基準が発送日か着荷日かを確認する |
| 運賃表の版をまたぐ月で差異が一斉に出る | 出荷日で版を選ぶ。差異が特定の日付から始まっていたら版を疑う |
| 自社側の誤りを業者へ照会してしまう | 「自社側の可能性」を必ず併記させ、照会の前に出荷データを確認する |
| 差異が多すぎて見きれない | 原因の候補ごとにまとめる。前月「正常」とした組み合わせは表示順を下げる |
| PDF明細の読み取り精度が出ない | 業者にCSVでの提供を依頼する。これが最も確実で、費用もかからない |
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 届け先の住所と氏名、送り状番号、運賃の単価、契約条件。個人宛の宅配があれば、届け先は個人情報です。
- 届け先情報を外部AIへ渡さない … 原因の候補付けに、届け先の氏名や住所の全文は必要ありません。AIへ渡すのは、差異の金額、区分、件数、拠点、業者名までにします。 地域区分の違いを見るときも郵便番号の上位3桁で足ります
- 運賃単価の扱い … 契約運賃は秘密保持の対象になることがあります。主要な業者との契約に秘密保持条項があるかを確認してください
- 学習利用 … 入力を学習に使わないことが契約で保証されるサービスを選びます
- アクセス権限 … 差異一覧には全業者の単価と拠点別の物流費が並びます。物流部と経理部に限定してください
- 自動実行してよい範囲 … 突合、計算、分類、照会文の下書きまで。支払いの保留、減額、照会の送信は自動化しません
リスクは2つです。自社側の誤りを業者へ照会してしまうことと、差異を見逃して払い過ぎたままにすること。前者は取引関係に響き、後者は静かに続きます。判断の履歴を残してください。
10まず何から始めるか
1週目:明細をどの形で受け取れるかを確認する
各配送業者に「請求明細をCSVで出せますか」と聞きます。この1点で難易度が変わります。 あわせて、請求の基準が発送日か着荷日か、締め日はいつかを業者ごとに書き出します。
2週目:突合の成立を確かめる
1社1拠点1か月分で、送り状番号による突合を試します(§8)。一致率を数えてください。 95%を超えないなら、複数個口・返品・月またぎを分けて数え直します。
3〜4週目:運賃表を版としてデータ化する
契約書と改定通知を集め、業者別・適用開始日別の単価表を作ります。この作業が最も重く、最も価値があります。 担当者の頭の中にある「いつからどの単価か」を外に出す作業だからです。取扱量の多い1社から始めてください。
2か月目:100行を手で計算して差異の割合を見る
あるべき運賃を手で計算し、請求額と比べます。差異が出た行がどちら側の誤りかを1件ずつ確かめてください。 この割合が導入の根拠になります。
3か月目以降: 差異の割合が運用に耐える水準なら、突合とワークフローの自動実行を作ります。原因の候補付けにAIを入れるのはそのあとで十分です。AIから始めないでください。 価値の大半は、毎月の突合を全件行うことにあります。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Google Document AI の Invoice parser がヘッダー項目と明細行の両方を抽出すること。抽出系に Custom Extractor、Form Parser、Layout Parser があること | Google Cloud: Document AI processors | 2026-09-15 |
Gemini API の構造化出力が、response_format に mime_type と JSON Schema を指定する形で提供されること | Gemini API: Structured output | 2026-09-15 |
| Make のスケジュール設定に、既定の15分間隔のほか分単位の間隔指定、Daily、Weekly、Monthly(月の指定日)、On demand があること | Make Help: Schedule a scenario | 2026-09-15 |
| 電子取引データの保存要件(見読可能装置の備付け、検索機能の確保、真実性の措置)と、検索機能の3要件(主要な記録項目を条件にできる/日付と金額は範囲指定/二以上の組み合わせ) | 国税庁 電子帳簿保存法一問一答【電子取引関係】Ⅱ 適用要件 | 2026-09-15 |
| 令和2年4月に「標準的な運賃」が告示され、令和5年3月にその一部として燃料サーチャージの算出方法等が告示されたこと。標準的な運賃が事業を持続するための参考として示されたものであること | 国土交通省 報道発表資料(令和5年3月1日) | 2026-09-15 |
特定の配送業者の運賃体系、区分ごとの単価、燃料サーチャージの適用条件は書いていません。 業者との契約で決まるため、公開情報からは確認できません。自社の契約書と改定通知でご確認ください。 倉庫管理システムからの出荷実績の取り出し方式も製品によって異なり、利用環境に応じた個別確認が必要です。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0079)についてのご相談はこちらから。
