Media > AI活用ユースケース > 物流 > 運送会社で集荷先が手書きした送り状の控えを読み取り、届け先・個数・重量・品名を運賃計算と荷主への請求データに転記する

運送会社で集荷先が手書きした送り状の控えを読み取り、届け先・個数・重量・品名を運賃計算と荷主への請求データに転記する

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

ドライバーが持ち帰る手書きの送り状の控えを読み取り、届け先・個数・重量・品名を運賃の計算表に転記します。荷主ごとの運賃料金表で運賃を計算し、月末の請求データまでつなげます。

サマリー
生成AI
ChatGPT/Claude/Gemini
AIサービス
Azure AI/Google Document AI
連携・自動化
Google Apps Script/Python
対象業界
物流
対象部門
物流/経理
対象業務
データ入力・転記/集計・分析
主な課題
人手が足りない/入力作業が多い/確認ミスが多い
AIで行う処理
読み取り(OCR)
主な効果
入力漏れ削減/対応スピード向上/工数削減
導入難易度
★★☆☆☆
実装レベル
本格構成
費用感
API連携(中)
人間の確認
必須
現在工数
120h/月
AI導入後
30h/月
想定削減
75%
年間削減
1,080h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. ドライバーが集荷のときに送り状の会社の控えを受け取り、夕方に事務所へ持ち帰る
  2. 事務員が控えを荷主ごとに分ける
  3. 1枚ずつ、届け先の住所から地域の区分を決め、個数と重量を読む
  4. 計算表に荷主・届け先・地域・個数・重量・品名・支払の区分を打ち込む
  5. 荷主の運賃料金表を引き、運賃を入れる
  6. 字が読めない控えは、ドライバーか荷主に電話で確かめる
  7. 月末に荷主ごとに集計し、着払いを外して請求書を作る
導入後(After)
  1. 人事務員がドライバーごとの控えの束を、複合機でまとめてスキャンする
  2. 自動毎日19時に Python のスクリプトが動き、その日のファイルを1枚ずつに分ける
  3. 自動Document AI の Enterprise Document OCR が、全文・位置・信頼度と画質の評価を返す
  4. 自動画質の評価で薄い・かすれた控えを `rescan` に分け、残りを次へ回す
  5. 自動Claude API が、読み取り結果を荷主・届け先・個数・重量・品名・支払の区分に書かれたとおりに分ける
  6. 自動スクリプトが届け先の住所から地域の区分を決め、重量の書き方を荷主ごとの規則で解釈する
  7. 自動荷主の運賃料金表で運賃を計算し、`ok` / `ambiguous_weight` / `low_confidence` / `rescan` を付ける
  8. 自動`ok` は計算表に入れ、それ以外は確認の一覧に出す
  9. 人事務員が確認の一覧だけを見て、控えと見比べて直す
  10. 自動月末に荷主ごとに集計し、元払いだけを請求データに出す
  11. 人請求データを確かめて、請求書の作成ソフトに取り込む
各工程の詳しい説明を読む
  1. ドライバーが集荷のときに送り状の会社の控えを受け取り、夕方に事務所へ持ち帰る
  2. 事務員が控えを荷主ごとに分ける
  3. 1枚ずつ、届け先の住所から地域の区分を決め、個数と重量を読む
  4. 計算表に荷主・届け先・地域・個数・重量・品名・支払の区分を打ち込む
  5. 荷主の運賃料金表を引き、運賃を入れる
  6. 字が読めない控えは、ドライバーか荷主に電話で確かめる
  7. 月末に荷主ごとに集計し、着払いを外して請求書を作る

(a)打ち込みが夕方以降にずれ込む。 控えが戻るのは夕方で、1日90枚前後をその日のうちに打ち込むと、事務員の残業がそのまま毎日の業務になります。 翌日に回すと、月末の締めに束が残ります。

(b)重量の書き方で運賃が変わる。 個数と重量の関係が書き手によって違い、事務員が「この荷主はいつも合計で書く」と覚えていることで回っています。 覚えている人が休むと、運賃がぶれます。

(c)着払いが請求に混ざる。 支払の区分の欄は小さな丸印で、写りが薄いと見落とします。着払いの分を荷主に請求してしまい、月初に問い合わせが来ることがあります。

(d)読めない控えの確認が後回しになる。 電話で確かめる控えは束の端に寄せられ、月末に何十枚もまとめて確かめることになります。

  1. 【人】 事務員がドライバーごとの控えの束を、複合機でまとめてスキャンする
  2. 【自動】 毎日19時に Python のスクリプトが動き、その日のファイルを1枚ずつに分ける
  3. 【自動】 Document AI の Enterprise Document OCR が、全文・位置・信頼度と画質の評価を返す
  4. 【自動】 画質の評価で薄い・かすれた控えを rescan に分け、残りを次へ回す
  5. 【自動】 Claude API が、読み取り結果を荷主・届け先・個数・重量・品名・支払の区分に書かれたとおりに分ける
  6. 【自動】 スクリプトが届け先の住所から地域の区分を決め、重量の書き方を荷主ごとの規則で解釈する
  7. 【自動】 荷主の運賃料金表で運賃を計算し、ok / ambiguous_weight / low_confidence / rescan を付ける
  8. 【自動】 ok は計算表に入れ、それ以外は確認の一覧に出す
  9. 【人】 事務員が確認の一覧だけを見て、控えと見比べて直す
  10. 【自動】 月末に荷主ごとに集計し、元払いだけを請求データに出す
  11. 【人】 請求データを確かめて、請求書の作成ソフトに取り込む

4番目で読む前に弾いているのが、この設計の分かれ目です。 写りの薄い控えを読ませると、それらしい数字が返ってきます。信頼度で後から弾くより、画質の評価で先に分けるほうが、間違った運賃が計算表に入る経路を閉じられます。

7番目で運賃をコードで計算しているのも、意図してのことです。 AIの出力に金額の欄はありません。運賃が契約の表から一意に決まることを、仕組みの側で保証します。

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

構成図
送り状の控え(手書き・複写式)
   │  ドライバーが持ち帰り、事務員が束ごとにスキャン(300dpi)
   ▼【トリガー】Python のスクリプト(毎日19時)
Python ── 1枚ずつに分け、ドライバーと日付を付ける
   ▼
Google Document AI(Enterprise Document OCR)
   │   全文・位置・信頼度・画質の評価(薄い/かすれ ほか)を返す
   ▼
Python ── 画質の評価で rescan を分ける
   ▼
Claude API ── 書かれたとおりに項目へ分ける
   │   荷主/届け先の名称と住所/個数/重量/品名/支払の区分/配達の指定
   ▼
Python ── 地域の区分、重量の解釈(荷主ごとの規則)、運賃料金表で運賃を計算
   │   ok/ambiguous_weight/low_confidence/rescan
   ├──▶ 運賃の計算表
   └──▶ 確認の一覧
   ▼
【事務員が確認の一覧だけを直す】→ 月末に元払いだけを請求データへ
役割想定する製品代替候補
OCRGoogle Document AI(Enterprise Document OCR)Azure AI Document Intelligence
生成AIClaude API(控えの読み取り結果を項目に分ける)Gemini API、OpenAI API
集計Python(地域の区分、重量の解釈、運賃の計算、荷主ごとの請求データの集計)Google Apps Script
連携Python(ファイルの分割、画質での振り分け、計算表と一覧の書き出し)Google Apps Script
保管事務所のファイルサーバー(日付・ドライバーごとのフォルダ)クラウドのストレージ

新しく作るのは、荷主ごとの重量の書き方の規則です。 「この荷主は重量の欄に合計を書く」「この荷主は1個あたりを書く」を表にし、分からない荷主は unknown のままにします。 事務員の頭の中にあった覚えを、表に移す作業です。

運賃の決まり方は、標準運送約款に沿っています。 国土交通省が公示する標準貨物自動車運送約款では、運賃、料金等(燃料サーチャージを除く)とその適用方法は別に定める運賃料金表によるとされ、燃料サーチャージは燃料の市場価格に応じて別に定めるところにより収受するとされています。運送の申込みの書面には、貨物の品名、重量又は容積、荷造りの種類及び個数、配達先、運賃・料金等の支払方法、荷受人などを記載することとされています。本記事の送り状は、この記載事項に沿った自社の様式を想定しています。

2024年の約款の改正で、運賃と料金の区別がはっきりしました。 令和6年6月1日施行の改正では、積込み・取卸しなどの運送以外の業務を分けて規定し、運賃・料金、附帯業務等を記載した書面を相互に交付する旨が定められています。計算表でも、運賃と、待機時間料や附帯業務料のような料金を別の列で持ちます。

土台は Document AI の Enterprise Document OCR です。 公式のプロセッサ一覧では、手書きを含むテキストを200を超える言語の書類から取り出すとされ、対応言語の一覧には日本語(ja)が手書きの対応ありとして載っています。あわせて、内容の読みやすさに基づいて書類の画質を評価するとされ、この機能を振り分けに使います。

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

Step1

処理の起点を決める

毎日19時に、その日スキャンした控えをまとめて処理します。 控えはドライバーが夕方に持ち帰るので、1枚ずつ動かす必要はありません。翌朝には、前日の分の計算表と確認の一覧がそろっている形にします。

スキャンは、ドライバーごとの束を1ファイルにします。 ファイル名を「日付_ドライバー番号」にし、スクリプトがページごとに分けて、1枚の控えに日付とドライバーを付けます。 集荷の日付は控えに書かれていないことが多いので、ドライバーが持ち帰った日を集荷日とみなします。

同期の処理のページ数に合わせて分けます。 Enterprise Document OCR の同期の処理は15ページまでなので、分けた1枚ずつを渡し、束のまま渡しません。 1日分が多い日は、非同期の処理(500ページまで)にまとめる形も選べます。

Step2

入力データを集める

データ中身取得元
送り状の控えスキャンしたPDF。日付、ドライバー番号スキャンの保存先
読み取り結果全文、ブロック・行・語の位置、信頼度、画質の評価と不良の種類Document AI(Enterprise Document OCR)
荷主の一覧荷主コード、名称、送り状に印字された荷主番号、重量の書き方の規則スプレッドシート
運賃料金表荷主ごとの重量の区分×地域の区分の運賃、適用の方法スプレッドシート
地域の区分の表都道府県・市区町村と地域の区分の対応スプレッドシート
燃料サーチャージの表燃料の価格帯ごとの加算の決まりスプレッドシート

質を決めるのは、荷主の一覧の「重量の書き方の規則」の列です。 この列が空なら、個数が2以上の控えはすべて ambiguous_weight になります。最初の月は多く出る前提で、確認のたびに規則を埋めていきます。

荷主は、送り状に印字された荷主番号で結び付けます。 自社の様式に荷主番号を刷っておけば、手書きの荷主名を読む必要がなくなります。 番号が刷られていない白紙の様式は、荷主名を読んで照合します。

Step3

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

読み取りは、スクリプトから Document AI の処理の API を呼ぶだけです。処理のオプションで、画質の評価と言語のヒントを有効にします。

取るもの応答のどこから・どの設定で何に使うか
全文と位置text、各要素の layout の textAnchor と boundingPoly項目の欄の位置との照合
信頼度各要素の layout の confidence個数と重量の数字が確かかの判定
画質の評価ocrConfig の enableImageQualityScores薄い・かすれた控えの振り分け
言語のヒントocrConfig.hints.languageHints に ja日本語の手書きの読み取り
手書きかどうかpremiumFeatures.computeStyleInfo印字の欄と手書きの値の見分け

画質の評価は、8種類の不良で返ります。 公式には、書類が不良と判定されると quality/defect_blurry(ぼやけ)、quality/defect_faint(薄い)、quality/defect_text_too_small(文字が小さすぎる)、quality/defect_glare(反射)など8種類の不良の種類が返り、0.5を超える可能性が陽性の検出とされています。複写の控えで効くのは defect_faint です。公式には、この機能はスキャンや撮影した書類に向くとされ、反射(glare)の不良は局所的で、読みやすさ全体を妨げないこともあるとされています。そこで rescan に回す条件は薄さ・ぼやけ・文字の小ささに絞り、反射だけの控えは読ませて信頼度で見ます。 画質の評価は、OCRと同じ程度の処理時間が上乗せされるとされているので、夜間にまとめて動かす形と相性がよい機能です。

手書きかどうかの判定は、印字と手書きを分けるのに使います。 公式には、文字の書体の検出を有効にすると、語の単位で手書きかどうかを含む書体の属性が返ります。送り状には「重量」「個数」の欄の名前が印字されていて、手書きの語だけを値の候補にすれば、欄の名前を値として拾う誤りが減ります。

Step4

AIへ渡す前に整形する

  1. 形式の確認 … Document AI の対象は PDF、TIFF、JPEG、PNG などです。複合機の設定をPDFに固定します
  2. 解像度の確認 … 公式には、スキャンは最低200dpiが望ましく、300dpi以上が一般に最もよい結果になるとされています。複写の薄い文字を拾うため、300dpiで取ります
  3. ページへの分割 … 束のファイルを1枚ずつに分け、日付とドライバー番号を付けます
  4. 画質での振り分け … defect_faint や defect_blurry が陽性の控えは rescan に回し、項目に分ける処理に渡しません
  5. 白紙・裏面の除去 … 文字がほとんど無いページは、裏面か白紙として外します
  6. 重複の確認 … 同じ荷主番号・届け先・個数の控えが同じ日に2枚あれば、二重のスキャンの疑いとして印を付けます

4番目を省かないでください。 薄い控えでも、OCRは何かしらの文字を返します。「8」が「3」に、「15」が「16」に読まれた重量で運賃が計算されても、計算表の上では正しい形の数字に見えます。 読む前に分けるのが、いちばん確実な対策です。

Step5

AIに処理させる

させるのは、読み取り結果を送り状の項目に分けることだけです。 地域の区分、重量の解釈、運賃の計算はさせません。

分ける項目当たるものの例判断できないときの扱い
荷主番号・荷主名印字の番号、「ご依頼主」の欄書かれたとおりに写す
届け先の名称・住所・電話「お届け先」の欄住所は書かれた表記のまま
個数「個数」の欄の数字数字だけを写す
重量「重量」の欄の数字と単位単位を含めて書かれたとおり。換算しない
品名「品名」の欄書かれたとおりに写す
支払の区分「元払」「着払」の印印の付いたほうを写し、両方か無しなら unclear
配達の指定指定日、時間帯、「午前着」書かれていなければ空

重量の単位を換算しないことを、表に明記しています。 「20キロ」「20kg」「20」のように単位が無いものもあり、AIは「kg」を補いたがります。 単位が無いことも、規則の判断に使う情報です。

させないこと理由
重量が1個あたりか合計かの判断荷主ごとの規則で決める。分からなければ人へ
運賃・燃料サーチャージの計算契約の運賃料金表とコードで計算する
住所からの地域の区分の判断地域の区分の表で決める
読めない数字の補完前後の控えや品名から推し量らない
品名からの重量の推定「米10袋」から重量を出さない

1行目がいちばん起きやすい失敗です。 個数が3で重量が60kgなら、AIは「1個20kg、合計60kg」と親切に両方を書きます。どちらが書き手の意図かは、控えのどこにも書かれていません。 書かれたとおりの数字だけを返させ、解釈は荷主ごとの規則か人に任せます。

Step6

指示内容を固定する

あなたは運送会社の事務員として、荷主が手書きした送り状の控えの
読み取り結果を、項目に分けて書き写す立場です。
OCRが返した読み取り結果だけを見てください。推測で埋めないでください。

【やること】
1. 次の項目を写してください。
   荷主番号、荷主名、届け先の名称・住所・電話番号、個数、重量、品名、
   支払の区分(元払い/着払い)、配達の指定
2. 印字された欄の名前(「重量」「個数」など)は値として写さないでください。
   手書きの語だけを値にしてください。
3. 1枚に複数の届け先が書かれている場合は、届け先ごとに分けてください。

【厳守事項】
- 数字は書かれたものをそのまま入れてください。読めない数字を補わないでください。
- 重量は、数字と単位を書かれたとおりに写してください。
  単位が書かれていなければ、単位は空にしてください。換算しないでください。
- 重量が1個あたりか合計かについて、判断を書かないでください。計算もしないでください。
- 住所は書かれた表記のまま写してください。地域や区分に直さないでください。
- 支払の区分は、印が付いているほうを写してください。
  両方に印がある、またはどちらにも無い場合は unclear としてください。
- 運賃や料金について、何も書かないでください。
- evidence には、各値の根拠にした文字列をそのまま写してください。

【読み取り結果(全文と、手書きの語の一覧)】{ocr_result}

「1個あたりか合計かについて判断を書かない」を入れるのは、AIが計算を手伝うからです。 何も言わなければ、重量の欄に「60kg(20kg×3個)」のように書きます。括弧の中の掛け算が書き手の意図と違えば、運賃が3倍か3分の1になります。

Step7

出力形式を固定する

Claude API の構造化出力で、次の形のJSONに固定して受け取ります。 公式には、output_config.format に json_schema の形でスキーマを渡すと、制約付きのデコードでスキーマに従う応答を返すとされています。enum と required を使え、オブジェクトの additionalProperties は false にする必要があります。

{
  "shipper_no": "",
  "shipper_name": "",
  "consignments": [
    {
      "consignee_name": "",
      "consignee_address": "",
      "consignee_phone": "",
      "pieces": "",
      "weight_value": "",
      "weight_unit": "",
      "item": "",
      "payment": "prepaid | collect | unclear",
      "delivery_note": ""
    }
  ],
  "evidence": [{ "field": "", "text": "" }]
}

金額の欄は、このJSONにありません。 運賃は Python が荷主の運賃料金表で計算し、計算に使った重量の区分・地域の区分・料金表の版を、計算表の同じ行に残します。

状態付ける条件(Python が決める)
ok画質の不良なし、個数と重量の信頼度が基準以上、重量の解釈が規則で決まる
ambiguous_weight個数が2以上で、荷主の重量の書き方の規則が unknown
low_confidence個数か重量の欄に、信頼度が基準を下回る文字がある
payment_unclear支払の区分が unclear(両方に印、またはどちらにも無い)
rescan薄さ・ぼやけ・文字の小ささの不良が陽性(読む前に分けたもの)

payment_unclear を独立させたのは、第3章の(c)のためです。 着払いを荷主に請求する誤りは、支払の区分の見落としから起きます。区分が決まらない控えは、請求データに入れる前に必ず人に見せます。

Step8

システムへ連携する

つなぎ先方式内容
スキャンの保存先Python のスクリプト(毎日19時)その日の束を拾い、1枚ずつに分ける
Document AIAPI呼び出し全文・位置・信頼度・画質の評価を返す
Claude APIAPI呼び出し(構造化出力)読み取り結果を送り状の項目に分ける
荷主の一覧・料金表・地域の表スプレッドシートの読み取り重量の解釈、地域の区分、運賃の計算
運賃の計算表スプレッドシートへの書き込みok の行を、運賃と計算の根拠つきで入れる
確認の一覧スプレッドシートへの書き込み状態、控えの画像へのリンク、候補の値
請求書の作成ソフト月末の請求データ(CSV)の取り込み元払いの分だけ、荷主ごとに

請求書の作成ソフトには、事務員が取り込みます。 スクリプトが出すのは請求データのファイルまでで、取り込む前に荷主ごとの合計を前月と並べて見る手順を置きます。前月から大きく増えた荷主は、重量の解釈の誤りを先に疑います。

着払いの分は、別の一覧に出します。 届け先から集金する分として、配達の担当に渡す一覧にし、荷主への請求データには入れません。

Step9

人が確認する

事務員が見るのは、確認の一覧に出た控えだけです。 ok の行は計算表で件数を流し見るだけにします。全件を控えと見比べる設計にすると、第10章の30.0時間には収まりません。

  1. rescan を先に処理する … 濃さを上げて取り直し、それでも読めなければ荷主かドライバーに確かめます
  2. payment_unclear を確かめる … 元払いか着払いかが決まらないまま請求データに入れません
  3. ambiguous_weight を控えと見比べる … 荷主に確かめた結果を、荷主の一覧の重量の書き方の規則に書き足します
  4. low_confidence の数字を控えと見比べる

3番目の書き足しが、この構成を育てます。 1つの荷主について規則が決まれば、その荷主の控えは次の日から ok になります。最初の月に多く出る ambiguous_weight は、規則を埋めるための材料です。

目標は、1,800件をならして1件1分です。 確認の一覧に出るのが1割台という想定で、それより多い月は、規則の未記入の荷主か、スキャンの濃さを疑います。

Step10

例外に対処する

起きること対応
写りが薄い控えrescan。読む前に分け、濃さを上げて取り直す
重量に単位が無い荷主の規則で単位を決める。決まらなければ ambiguous_weight
容積(才数など)で書かれている料金表の適用の方法に沿って Python が扱う。決まりが無ければ人へ
届け先の住所が地域の表に無い地域の区分を空にして確認の一覧へ
1枚に複数の届け先届け先ごとに行を分け、運賃もそれぞれ計算する
荷主番号が刷られていない様式荷主名で照合し、決まらなければ確認の一覧へ
待機や積込みなど運送以外の作業の記載運賃とは別の料金の候補として、確認の一覧に出す
API が応答しないその日の束を未処理に残し、翌日の実行で拾う

7行目は、運賃に混ぜないでください。 2024年の改正で、運送以外の業務の対価は運賃と分けて扱う形になっています。控えの余白の「荷待ち1時間」のような書き込みは、料金の列の候補として人に見せます。

Step11

記録を残す

  • 元の控えの画像と、日付・ドライバー番号・ページ番号
  • Document AI が返した Document のJSONの全文(画質の評価を含む)
  • Claude API に渡した読み取り結果と、返ってきたJSON
  • 計算表の行ごとの、運賃の計算に使った重量の区分・地域の区分・料金表の版
  • 事務員が直した値と、直した理由(重量の解釈、読み違い、支払の区分)
  • 荷主の一覧の重量の書き方の規則を書き足した日と、根拠にした確認
  • rescan に回した控えの割合(ドライバーごと・荷主ごと)

4つ目で料金表の版を残すのは、料金表が契約の更新で変わるからです。 月の途中で運賃が改定された荷主について、どの控えにどちらの表を当てたかを後から示せないと、請求の問い合わせに答えられません。

最後の行は、複写の紙と書き方を見直す材料になります。 特定の荷主の控えだけが薄いなら、筆圧の弱い筆記具か複写の枚数の多い様式が理由のことがあります。荷主に様式の変更をお願いするときの根拠として使えます。

04実装レベルの3段階

最小構成:控えを手でAIの画面に貼り、項目を写させる / 1枚ごとの書き起こし
半自動化:上記+OCRのAPIを呼び、項目を計算表の形で書き出す / 読み取りと転記
本格構成:上記+毎日の束を自動で処理し、画質で振り分け、荷主ごとの規則と料金表で運賃を計算し、月末の請求データまで出す / 転記・運賃の計算・請求データの作成

最小構成は、確かめるための段階です。 月1,800枚には使えません。 半自動化で、1件4分が2分程度になります。 転記は自動になりますが、地域の区分の判断と料金表の参照が残ります。本格構成で1分になり、この段階が本記事の想定です。 差が大きいのは、料金表を引く作業が、1枚ずつの手作業だからです。 段階を飛ばさないでください。 半自動化の1か月で、重量の書き方の規則を埋めるべき荷主が先に分かります。

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

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

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

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

AI活用について相談する

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

向いている
  1. 中小の荷主から毎日集荷し、荷主が手書きする複写式の送り状の控えをドライバーが持ち帰り、事務員が運賃の計算表に打ち込んでから月末に荷主ごとの請求書を作っている地場の運送会社。荷主ごとに契約の運賃料金表があり、重量と届け先の地域で運賃が決まる場合。月末の請求の締めに打ち込みが追いつかない場合。
向いていない
  1. 荷主の多くが出荷のデータを電子で送ってきて、手書きの送り状が月に数百枚に満たない場合。送り状の発行と運賃の計算をすでに配送のシステムで行っている場合。貸切の運送が中心で、1運行に1枚の運送申込書を扱う程度の場合。なお、運賃・料金の額の決定と、荷主との運賃の交渉は、この構成では代替できません。

07最小構成で試す方法

  1. 先月の控えから、荷主10社分・30枚を選ぶ(うち数枚は、写りの薄いものと、重量の書き方で迷ったものを入れる)
  2. その30枚について、当時どう打ち込み、どの荷主に確かめたかを事務員に聞き取る
  3. 控えをPDFにし、手元のAIサービスの画面に1枚ずつ貼り付ける
  4. 「この送り状から、届け先・個数・重量・品名・支払の区分を書かれたとおりに写してください。重量は単位を含めて写し、計算しないでください」と指示する
  5. 出てきた値を、当時の計算表の行と見比べる

30枚は必ずやってください。 スクリプトを組む前に、「手書きの数字と支払の区分の印が読めるか」を確かめます。

出てきた内容判断
数字と区分が読め、計算表と合っているOCRとの連携に進む
重量を掛け算した、単位を補った指示の書き方で直る。構成は有効
薄い控えの数字が別の数字になる画質の評価での振り分けが要る。 本格構成で解決する
支払の区分の丸印が読めない様式の区分の欄を、□の四角に印を付ける形に改める

3行目が出たら、 薄い控えを読ませないことの意味が具体的に分かります。複合機の濃さの設定を変えて同じ控えを取り直し、読み取りがどこまで変わるかも見てください。

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

問題対策
重量を1個あたりか合計か決めつける荷主ごとの規則で決め、分からなければ ambiguous_weight
薄い控えから、それらしい数字が返る画質の評価で読む前に分ける
AIが重量を掛け算する、単位を補う指示で禁じ、書かれたとおりに返させる
欄の名前(「重量」)を値として拾う手書きかどうかの判定で、手書きの語だけを候補にする
着払いが荷主への請求に混ざる区分が決まらない控えは請求データに入れない
運賃の改定前後で表を取り違える計算表の行に料金表の版を残す
待機や積込みの書き込みが運賃に紛れる運賃と料金を別の列で持つ
束を15ページを超えたまま渡す1枚ずつに分けて渡す
規則の未記入で確認の一覧があふれる最初の月は多い前提で、確認のたびに規則を書き足す

上の2行が、この構成の失敗のほとんどです。 どちらも、計算表の上では正しい形の数字に見えるという同じ性質を持っています。読む前に分け、解釈を規則に置けているかで、運用に乗るかが決まります。

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

この構成で扱うデータ: 荷主名、届け先の氏名・住所・電話番号、品名です。届け先には個人が含まれ、品名から生活の様子が分かることがあります。

  1. 生成AIに渡す範囲を決める … 届け先の住所は地域の区分に要りますが、電話番号は運賃の計算に要りません。電話番号の欄を伏せてから渡す形にもできます
  2. 処理する地域を決める … Document AI の処理の地域を、荷主との取引の条件と自社の規程に照らして先に決めてください
  3. 金額をAIに出させない … 運賃は契約の運賃料金表で決まるもので、AIの出力が金額に影響する経路を作らないでください
  4. 請求の前に人が確かめる … 請求データは事務員が取り込み、前月との差を見てから荷主に出します
  5. 控えの画像の保存期間を決める … 届け先の個人の情報が載る画像を、いつまで残すかを決めておきます

誤りが起きた場合のリスクは、運賃を多く請求することと、着払いを荷主に請求することの2つです。 前者は重量の解釈を決めつけると起き、後者は支払の区分を見落とすと起きます。どちらも分からないものを分からないまま人に見せることで防げるので、そこだけは設計で守ります。

10まず何から始めるか

1週目:料金表と地域の表をそろえる

荷主ごとの運賃料金表を、重量の区分×地域の区分の同じ形の表にそろえます。150社すべてを一度にそろえる必要はありません。控えの枚数の多い上位30社から始めます。

2週目:30枚で試す

先月の控えから30枚を選び、手元のAIサービスに貼り付けて項目を写させます。重量を掛け算していないか、支払の区分の印が読めているかを最優先で見ます。

3週目:重量の書き方の規則を作り始める

事務員に、荷主ごとに重量を合計で書くか1個あたりで書くかを聞き取り、荷主の一覧の列に入れます。分からない荷主は unknown のままにします。

4週目:毎日の束から計算表までをつなぐ

Python のスクリプトで束を分け、Enterprise Document OCR を呼び、画質で振り分けて項目を計算表の形で書き出すところまで作ります。この時点では運賃を計算せず、転記だけを見ます。

2か月目: 地域の区分と運賃の計算を足し、ambiguous_weight と rescan の件数を毎週数えます。3か月目以降: 月末の請求データの出力を足し、1件4分が何分になったかを実測します。ambiguous_weight がほとんど出なくなり、月末の締めの日に控えの束が残らなくなった時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-10-07/最終更新:2026-10-07
確認した内容情報源確認日
Enterprise Document OCR が手書きを含むテキストを200を超える言語の書類から取り出し、読みやすさに基づいて画質を評価すること。対応言語の一覧に日本語(ja)が手書きの対応ありとして載っていること。同期の処理が15ページまで、非同期が500ページまでであることGoogle Cloud: Processor list2026-10-07
画質の評価(enableImageQualityScores)で8種類の不良(quality/defect_blurry、quality/defect_faint、quality/defect_text_too_small、quality/defect_glare など)が返り、0.5を超える可能性が陽性の検出であること。スキャンや撮影した書類に向き、反射の不良は局所的であること。OCRと同程度の処理時間が加わること。言語のヒント(languageHints)。文字の書体の検出(computeStyleInfo)で語の単位の手書きかどうかが返ることGoogle Cloud: Enterprise Document OCR2026-10-07
各要素の layout に textAnchor、boundingPoly、信頼度が付くことGoogle Cloud: Handle the processing response2026-10-07
対応形式が PDF、TIFF、JPEG、PNG などであること。スキャンは最低200dpiが望ましく300dpi以上が一般に最もよいことGoogle Cloud: Supported files2026-10-07
Enterprise Document OCR の同期の処理が15ページまで、非同期が500ページまで、同期の処理のファイルサイズが40MBまでであることGoogle Cloud: Document AI quotas and limits2026-10-07
構造化出力で output_config.format に json_schema を渡すこと。制約付きのデコードでスキーマに従う応答を返すこと。enum と required を使え、オブジェクトの additionalProperties は false にする必要があることClaude API: Structured outputs2026-10-07
標準貨物自動車運送約款(最終改正 令和6年国土交通省告示第210号)第6条の運送申込書の記載事項(品名、重量又は容積、荷造りの種類及び個数、配達先、運賃・料金等の支払方法、荷受人など)。第32条(運賃、料金等は別に定める運賃料金表による。燃料サーチャージは燃料の市場価格に応じ別に定めるところにより収受する)国土交通省 近畿運輸局: 標準貨物自動車運送約款(PDF)2026-10-07
標準貨物自動車運送約款等の一部改正(令和6年国土交通省告示第210号、令和6年6月1日施行)で、積込み・取卸し等の運送以外の業務を分けて規定し、運賃・料金、附帯業務等を記載した運送申込書・運送引受書を相互に交付する旨を定めたこと(令和6年3月22日 国自貨第842号)国土交通省 近畿運輸局: 標準貨物自動車運送約款等の一部改正について(PDF)2026-10-07

運賃・料金の額と適用の方法は、各社の運賃料金表と荷主との契約に従ってください。 本記事は各製品と国土交通省の公式ページで確認できた範囲だけを扱っています。

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

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

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

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