配送先から戻る紙の受領書を読み取り、伝票番号・受領日・受領印の有無を配達実績と突き合わせて、未回収と受領印の欠けを拾う
乗務員が持ち帰った紙の受領書をスキャンして読み取り、伝票番号・受領日・受領印の有無を配達実績と突き合わせます。荷主へ返す前に、戻っていない伝票と、受領印や受領日の欠けた受領書を毎日拾います。
- 生成AI
- Azure OpenAI Service/Claude
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- 商社/小売/物流/製造
- 対象部門
- 物流
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 入力作業が多い/期限・対応漏れが起きる/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/工数削減/機会損失防止
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 乗務員が配送を終えて、受領書を事務所のトレーへ出す
- 事務担当が、配送管理システムから前日の配達実績の一覧を印刷する
- 受領書を1枚ずつ取り、伝票番号を一覧で探して印を付ける
- 同じ受領書の受領印の欄に印影かサインがあるか、受領日が書かれているかを見る
- 欠けがあれば付箋を貼り、乗務員の名前を書いて別のトレーに分ける
- 一覧で印の付かなかった伝票を拾い、乗務員に口頭で確かめる
- 月末に荷主ごとに受領書を束ね、回収の一覧を作って荷主へ返す
- 人乗務員が受領書をトレーへ出し、事務担当が複合機でまとめてスキャンする
- 自動スキャンの PDF が保管先に入ったことをきっかけに処理が動き、1ページ1枚に分ける
- 自動読み取りのモデルが、荷主の様式ごとに伝票番号・受領日・受領印の欄・備考の手書きを返す
- 自動伝票番号を前日までの配達実績と突き合わせ、回収済みの印を付ける
- 自動受領印の欄と受領日の欄について、`present` / `absent` / `uncertain` を付ける
- 自動備考欄に手書きがあれば、生成AIが「数量の相違」「破損」「その他」に分けて写す
- 自動欠けと未回収と備考ありの一覧を作り、翌朝の点呼の前に営業所の画面と乗務員ごとの一覧に出す
- 人事務担当が `absent` と `uncertain` のものだけ画像を開いて確かめる
- 人乗務員が、受領印の欠けた配送先へ次に行くときにもらい直す
- 【人/自動】 月末に、回収の一覧を荷主ごとに書き出し、受領書と一緒に返す
各工程の詳しい説明を読む
- 乗務員が配送を終えて、受領書を事務所のトレーへ出す
- 事務担当が、配送管理システムから前日の配達実績の一覧を印刷する
- 受領書を1枚ずつ取り、伝票番号を一覧で探して印を付ける
- 同じ受領書の受領印の欄に印影かサインがあるか、受領日が書かれているかを見る
- 欠けがあれば付箋を貼り、乗務員の名前を書いて別のトレーに分ける
- 一覧で印の付かなかった伝票を拾い、乗務員に口頭で確かめる
- 月末に荷主ごとに受領書を束ね、回収の一覧を作って荷主へ返す
(a)番号を探すところで時間が消える。 一覧は配達順、受領書は出された順なので、1枚ごとに一覧の上から番号を探します。
(b)受領印の欄は、番号が合うと見なくなる。 3番で番号を見つけた安心感で、4番を飛ばします。押し忘れの受領書は、一覧の上では回収済みと区別がつきません。 欠けが見つかるのは、月末に荷主ごとに束ねるときに、もう一度1枚ずつめくったときです。
(c)未回収は、月末にまとめて見つかる。 照らしが翌日以降にずれると、6番の確認の時間がなくなります。月末に「10日の伝票が無い」と分かっても、乗務員は覚えていません。
(d)荷主ごとに見る場所が違う。 受領印の欄の位置も、受領日の欄の有無も荷主ごとに違い、新しい事務担当が覚えるまでに数か月かかります。
- 【人】 乗務員が受領書をトレーへ出し、事務担当が複合機でまとめてスキャンする
- 【自動】 スキャンの PDF が保管先に入ったことをきっかけに処理が動き、1ページ1枚に分ける
- 【自動】 読み取りのモデルが、荷主の様式ごとに伝票番号・受領日・受領印の欄・備考の手書きを返す
- 【自動】 伝票番号を前日までの配達実績と突き合わせ、回収済みの印を付ける
- 【自動】 受領印の欄と受領日の欄について、
present/absent/uncertainを付ける - 【自動】 備考欄に手書きがあれば、生成AIが「数量の相違」「破損」「その他」に分けて写す
- 【自動】 欠けと未回収と備考ありの一覧を作り、翌朝の点呼の前に営業所の画面と乗務員ごとの一覧に出す
- 【人】 事務担当が
absentとuncertainのものだけ画像を開いて確かめる - 【人】 乗務員が、受領印の欠けた配送先へ次に行くときにもらい直す
- 【人/自動】 月末に、回収の一覧を荷主ごとに書き出し、受領書と一緒に返す
8番目が、この設計の分かれ目です。人が見るのは全件ではありません。 欠けがあると出たものと、機械が判断に迷ったものだけに時間を使います。
7番目を翌朝の点呼の前に置いているのも意図してのことです。 次に同じ配送先へ行く前に乗務員の手元に届くことが、もらい直しを現実の段取りにします。
02今回想定するシステム構成
乗務員が持ち帰った受領書(紙) │ 事務担当が複合機でまとめてスキャン ▼【トリガー】保管先(Blob Storage)への PDF の保存 Azure Functions(保存を起点に動く処理) ├──▶ ページの分割・向きと寸法の確認 ▼ Azure AI Document Intelligence(カスタム ニューラル モデル) │ 伝票番号・受領日・受領印の欄(署名の項目)・備考の手書き・信頼度 ▼ Azure Functions ── 配達実績(配送管理システムのCSV)との突合 │ 回収済み/未回収/番号の該当なし ├──▶ Azure OpenAI ── 備考の手書きを区分に分けて写す ▼ 判定(そろっている complete / 欠けあり missing / 確認が要る review) ▼ 【事務担当が欠けと迷いだけ確認】 ├──▶ 乗務員ごとの一覧(翌朝の点呼の前) └──▶ 荷主ごとの回収の一覧(月末)
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Azure AI Document Intelligence(カスタム ニューラル モデル) | Google Document AI(Form Parser)、AWS Textract(英文の書類に限る。日本語の受領書には使えない) |
| 生成AI | Azure OpenAI(Microsoft Foundry) | Claude API |
| 差異計算 | 突合の処理(Python。Azure Functions で動かす) | ─ |
| 連携 | Azure Functions(Blob Storage のトリガー) | Azure Logic Apps |
| 保管 | Azure Blob Storage(受領書の画像と読み取り結果) | 営業所のファイルサーバー |
配送管理システムは、新しく足すものではありません。 配達実績の CSV を読むだけで、書き戻すかどうかは運用が落ち着いてから決めます。
読み取りの中心は、Azure AI Document Intelligence のカスタム ニューラル モデルです。 公式のページでは、レイアウトと言語の特徴を組み合わせてラベル付けした項目を取り出すモデルで、同じ情報を持ちながら見た目が違う文書に向くとされています。荷主ごとに受領書の様式が少しずつ違うこの題材に合います。
決め手は、署名の検出です。 カスタム ニューラル モデルは v4.0(2024-11-30 GA)で署名の検出に対応し、項目の型を Signature にして署名の領域を囲んでラベル付けします。署名の項目でラベル付けした見本を少なくとも5つ使い、ばらつきも含めるとされています。手書きの文字の対応言語には日本語が含まれます。
注意が1つあります。 公式のページが扱っているのは「署名(signature)」で、日本の受領印の印影を署名の項目として学習させてどこまで見分けられるかは、書かれていません。 印影とサインが混ざる実際の受領書で、見本を使って確かめる前提にします(第8章)。
様式が決まりきった上位10社だけなら、カスタム テンプレート モデルも候補です。 署名の項目に対応し、決まった見た目の書式に向く一方、見た目が変わると精度が落ちるとされ、様式ごとにモデルを分けてまとめる(compose)方法が示されています。
03どうやって実装するのか
処理の起点を決める
スキャンした PDF が保管先(Azure Blob Storage)に入ったことを起点にします。 乗務員の帰着は夕方の1〜2時間に集中するので、事務担当はトレーにたまった受領書を数回に分けてまとめてスキャンします。スキャンのたびに処理が動き、点呼の前には前日分の結果がそろうようにします。
起点の仕組みは Azure Functions の Blob Storage のトリガーです。公式のページでは、イベント方式とポーリング方式の2つがあり、遅れが小さいイベント方式が推奨され、ポーリング方式は従量課金のプランで最大10分の遅れが出うるとされています。翌朝までに終われば足りる題材ですが、取りこぼしを避けるためにイベント方式を選びます。
夜間に一度、その日の配達実績の CSV を取り込む処理も動かします。 受領書の読み取りは帰着した順に進みますが、未回収の判定は「その日に配達した伝票のうち、受領書が戻っていないもの」なので、配達実績がそろってからでないと出せません。 未回収の一覧は、翌朝の点呼の前の時刻にまとめて作ります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 受領書の画像 | スキャンした PDF(1ファイルに数十枚)、スキャンした営業所と日時 | 営業所の複合機 → 保管先 |
| 読み取り結果 | 伝票番号、受領日、受領印の欄(署名の項目)、備考の手書き、それぞれの信頼度 | Azure AI Document Intelligence |
| 配達実績 | 伝票番号、荷主、配送先、配達日、乗務員、車両 | 配送管理システムの CSV |
| 荷主の様式の台帳 | 荷主ごとの様式の名前、受領日の欄があるか、受領印とサインのどちらでよいか | 営業所で作る台帳 |
質を決めるのは、いちばん下の台帳です。 受領日の欄が無い様式の荷主に「受領日が無い」と出し続けると、事務担当は一覧を信用しなくなります。荷主ごとに「何がそろっていればよいか」を台帳に持たせ、判定はその台帳を見て行います。
配達実績は、乗務員と車両まで持たせます。 欠けと未回収の一覧を乗務員ごとに分けて出すためで、伝票番号だけでは「誰に伝えればよいか」が分かりません。
データの取得方法を決める
読み取りは、Azure Functions からカスタム ニューラル モデルを呼ぶだけです。モデルは荷主の様式をまとめて1つにし、様式の判別もさせます。 返ってきた結果から、次のものを取り出します。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 文書の種類と信頼度 | 分析結果の文書(documents)の種類 | どの荷主の様式かの判別。低ければ人へ |
| 伝票番号・受領日の値と信頼度 | ラベル付けした項目 | 配達実績との突合、受領日の有無 |
| 受領印の欄(署名の項目)と信頼度 | Signature 型の項目 | 受領印かサインがあるか |
| 備考の手書き | ラベル付けした項目(領域) | 数量の相違・破損の記載の有無 |
| 単語ごとの信頼度 | ページの単語 | 伝票番号の読み違いの疑い |
信頼度は2層で見ます。 公式のページでは、カスタム モデルの項目の信頼度は「取り出した値の位置」についての確からしさで、文字の読み取り(OCR)の信頼度もあわせて見て総合するよう書かれています。伝票番号なら、項目の位置は合っていても、数字の1文字を読み違えていることがあります。項目の信頼度と単語の信頼度の両方が基準を超えたときだけ「読めた」とします。
配達実績の CSV は、配送管理システムが毎晩出すものを保管先に置き、突合の処理が読みます。照らす範囲は、配達日から7日前までにします。 受領書は配達の翌日以降に戻ることがあり、当日分だけで照らすと、遅れて戻った受領書が「該当なし」になります。
AIへ渡す前に整形する
- ページの分割 … 1つの PDF に数十枚の受領書が入るので、1ページ1枚に分けます。複写式の伝票で2枚が重なって読み込まれたものは、寸法で見つけて人へ回します
- 向きの確認 … 上下逆に差し込まれたページを直します
- 寸法と解像度の確認 … 画像は50×50〜10,000×10,000ピクセル、文字の最小の高さは1024×768の画像で12ピクセル(150dpiで約8ポイント)です。複合機の既定の解像度のままにせず、200dpi以上でそろえます
- ファイルの大きさ … 有料(S0)レベルで500MB、PDF は2,000ページまでです。夕方のスキャンはこの範囲に十分収まります
- 白紙と裏面の除外 … 両面スキャンで出る裏面の白紙を除きます
- 重複の検知 … 同じ伝票番号の受領書が二度読まれたら、新しい方を「二重」と印を付けて人へ回します
3番目を軽く見ないでください。 受領印は朱肉がかすれていることが多く、解像度が低いと「欄が空いている」と区別がつきません。
AIに処理させる
読み取りのモデルにさせるのは、4つの項目の値と、受領印の欄に署名(印影・サイン)があるかの検出です。 生成AIにさせるのは、備考欄の手書きを区分に分けて写すことだけです。
| 見るもの | 誰がするか | 判定の仕方 | 判断できないとき |
|---|---|---|---|
| 伝票番号 | 読み取りのモデル | 値を取り出し、配達実績と突き合わせる | 信頼度が低ければ uncertain |
| 受領日 | 読み取りのモデル | 日付として解釈できるか。様式に欄が無ければ見ない | 読めなければ uncertain |
| 受領印の欄 | 読み取りのモデル | 署名の項目が検出されたか | 信頼度が中間なら uncertain |
| 備考の手書き | 読み取りのモデル → 生成AI | 手書きがあれば区分に分けて写す | 区分が決まらなければ other |
受領印の欄の判定は、規則で決めます。 署名の項目が高い信頼度で検出されれば present、何も検出されず、その欄の周りに文字も無ければ absent、検出はされたが信頼度が中間なら uncertain です。どこで線を引くかは、第8章の試しで決めます。
生成AIに受領印の有無を判断させない理由は、根拠を数値に置くためです。 信頼度という数値で線を引けば、線を動かしたときに何件が入れ替わるかを数えられます。
| させないこと | 理由 |
|---|---|
| 受領印が有効かどうかの判断 | 誰の印でよいかは荷主との取り決め。機械は欄に何かあるかだけを見る |
| 読めない伝票番号の推測 | 似た番号に寄せると、別の伝票を回収済みにしてしまう |
| 受領日の補完 | 配達日で埋めると、書かれていないという事実が消える |
| 備考の内容の要約・言い換え | 「2ケース不足」を「数量の相違あり」とだけ書くと、荷主への説明に使えない |
| 未回収の理由の推測 | 乗務員に確かめるまで分からない |
2行目がいちばん起きやすい失敗です。 伝票番号の1文字が読めないとき、配達実績に近い番号があれば「たぶんこれ」と寄せたくなります。寄せた瞬間、本当に戻っていない伝票が回収済みになり、未回収の一覧から消えます。
指示内容を固定する
あなたは運送会社の営業所で、配送先から戻った受領書の備考欄を整理する担当です。
渡すのは、受領書の備考欄から読み取った手書きの文字列だけです。
書かれていることを区分に分けて写してください。推測で補わないでください。
【区分】
- shortage ..... 数量が足りない、個数が違う、欠品の記載
- damage ....... 破損、へこみ、濡れ、汚れの記載
- refusal ...... 受け取りを断った、持ち帰りの記載
- time ......... 時間の指定、遅れ、早着の記載
- other ........ 上のどれにも当たらない記載
1つの備考に複数の記載があれば、記載ごとに分けてください。
【厳守事項】
- 原文の文字列を original にそのまま写してください。言い換えないでください。
- 数量が書かれていれば quantity に数字と単位をそのまま入れてください。
書かれていなければ空にしてください。計算しないでください。
- 品名が書かれていれば item に写してください。書かれていなければ空にしてください。
- 読めない文字は「■」に置き換え、unreadable を true にしてください。
前後から推測して埋めないでください。
- 受領印の有無、配達の成否、責任の所在については書かないでください。
- 備考欄が空、または印刷された文字だけの場合は、notes を空の配列にしてください。
【備考欄の読み取り結果】{remarks_text}
【読み取りの信頼度】{remarks_confidence}
【荷主の名前】{shipper_name}
「言い換えない」を明記しないと、短くまとめます。 「外箱1ケースへこみ有、中身未確認」を「破損あり」と書かれると、荷主へ返すときに中身を確かめたかどうかが分かりません。区分は付けさせても、原文は必ず残させます。
「計算しない」も同じ理由です。 「10ケース中2ケース不足」から「8ケース受領」と書き換えさせると、配送先が書いた事実ではなく、AIの計算が残ります。数量は書かれたとおりに写させ、計算が要るなら突合の処理の側で行います。
出力形式を固定する
読み取りと突合と生成AIの結果を、受領書1枚ごとに次の形のJSONにまとめます。 生成AIの部分は、Azure OpenAI の構造化出力で受け取ります。公式のページでは、response_format に json_schema を指定して strict: true にし、すべての項目を必須にして、オブジェクトに additionalProperties: false を付ける必要があるとされています。
{
"receipt_id": "2026-10-13_A営業所_0042",
"shipper_form": "shipper_07",
"form_confidence": 0.93,
"slip_no": { "value": "", "confidence": 0, "word_min_confidence": 0 },
"delivery_match": "matched | not_found | duplicate",
"received_date": { "status": "present | absent | uncertain | not_required", "value": "" },
"receipt_seal": { "status": "present | absent | uncertain", "confidence": 0 },
"notes": [
{ "category": "shortage | damage | refusal | time | other",
"original": "", "quantity": "", "item": "", "unreadable": false }
],
"verdict": "complete | missing | review",
"driver": "",
"delivered_on": ""
}
1つ目の理由は、status と verdict を別の層に置けることです。 receipt_seal と received_date の status は読み取りの結果をそのまま写したもので、verdict は突合の処理が荷主の様式の台帳を見て決めます。荷主との取り決めが変わっても、直すのは台帳と規則だけです。
| 条件 | verdict |
|---|---|
伝票番号が matched、受領印が present、受領日が present か not_required | complete |
受領印か受領日のどちらかが absent | missing |
どれかが uncertain、または伝票番号が not_found ・ duplicate、または様式の信頼度が低い | review |
notes が1つでもある | verdict とは別に「備考あり」の印を付ける |
2つ目は、乗務員ごとに分けられることです。 driver と delivered_on を持たせておけば、翌朝の一覧を乗務員ごとに並べ替えるだけで、「Aさん:昨日の3件、受領印なし」という形で渡せます。
3つ目は、未回収をこのJSONの外で出すことです。 未回収は「戻ってこなかった伝票」なので、配達実績から matched の付かなかった伝票を引き算して別の一覧にします。
【未回収の一覧(2026-10-14 朝)】
乗務員 / 配達日 / 伝票番号 / 荷主 / 配送先 / 配達からの日数 システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 保管先(Blob Storage) | Azure Functions のトリガー | スキャンの PDF の保存を検知する |
| Azure AI Document Intelligence | API呼び出し | 項目・署名の項目・信頼度を返す |
| 配送管理システム | 毎晩の CSV の書き出しを読む | 配達実績を照らす |
| Azure OpenAI | API呼び出し(構造化出力) | 備考の手書きを区分に分けて写す |
| 営業所の画面と一覧 | 突合の処理が書き出す | 欠け・迷い・未回収・備考ありの一覧 |
配送管理システムへは書き込みません。 回収済みの印を自動で書き戻すと、読み取りの誤りがそのまま配送管理システムの記録になります。最初の数か月は、営業所の一覧で事務担当が確かめたものだけを、これまでどおり手で入れます。
荷主へも自動では送りません。 月末の回収の一覧は書き出しまでにし、受領書の束と一緒に事務担当が返します。
人が確認する
人が開くのは missing と review のものだけです。 complete のものは、件数と乗務員ごとの内訳を一覧で見るだけにします。全件を開く設計にすると、第10章の30.0時間には収まりません。
reviewを先に見る … 伝票番号が該当なし、受領印か受領日が迷い、様式の判別が低いもの。多くは画像を見れば数秒で決まりますmissingの根拠を画像で確かめる … 受領印の欄が本当に空いているか、受領日が本当に無いかを目で見ます。朱肉のかすれでabsentになっていないかを見ます- 乗務員への一覧を確定する … 確かめた欠けだけを、点呼の前に乗務員ごとの一覧に載せます
- 未回収を乗務員に確かめる … 一覧の伝票について、トレーに出し忘れていないか、車に残っていないかを聞きます
- 判定を覆したら記録する …
absentをpresentに直した、などを残します
2番目を省かないでください。 missing と出た受領書は、乗務員を配送先へもらい直しに行かせる理由になります。
開くのが2割を超える月は、解像度か見本が足りていません。
例外に対処する
| 起きること | 対応 |
|---|---|
| 複写の2枚が重なって読み込まれた | 寸法と様式の判別で見つけ、review で人へ。スキャンし直す |
| 様式の判別の信頼度が低い | 見本に無い様式の可能性。review で人へ回し、5枚たまったら見本に足して学習し直す |
| 伝票番号が配達実績に無い | 配達日の7日前より古いか、別の営業所の伝票。not_found で人へ |
| 同じ伝票番号が二度読まれた | duplicate。新しい方を人へ回し、二重に回収済みにしない |
| 受領印の欄に印影とサインの両方がある | present として扱う。有効かどうかは見ない |
| 受領印の欄の外に押されている | 欄に何も無ければ absent になる。事務担当が画像で確かめて覆し、記録に残す |
| 画像の寸法や文字の高さが下限を下回る | 50×50ピクセル未満、または文字が12ピクセル(1024×768)未満のものは review |
| パスワード付きの PDF | 複合機の設定で付いた場合。解除が要るので、保存の設定を見直す |
| 読み取りが応答しない | 処理を何度かやり直し、それでも失敗したものは失敗の記録に残して朝の一覧に「未処理」と出す |
5行目と6行目は、荷主との取り決めで決まる運用の決めごとです。
最後の行は、Azure Functions の仕組みで受けます。 公式のページでは、Blob Storage のトリガーの関数が失敗すると既定で合計5回やり直し、すべて失敗すると webjobs-blobtrigger-poison という名前のキューにメッセージが入るとされています。このキューを朝の一覧の「未処理」に出せば、読まれなかった受領書が黙って消えることはありません。 また、同じファイルを二度処理しないための受領記録(blob receipts)を持つとされているので、再処理したいときはその記録を消してやり直します。
記録を残す
- 受領書の画像(1ページ1枚に分けたもの)と、スキャンした営業所・日時
- 読み取りの結果の JSON の全文(項目・署名の項目・信頼度・単語の信頼度)
- 突合の結果(
delivery_match)と、そのとき照らした配達実績の CSV の日付 - 判定(
verdict)と、そのとき使った荷主の様式の台帳の版 - 人が判定を覆した記録 … どの項目を、どちらに変えたか
- 乗務員がもらい直した日と、もらい直した受領書との対応
- 荷主ごとの
uncertainとabsentの発生率
4つ目で「台帳の版」を残すのは、荷主との取り決めが後から変わるためです。 受領日の欄を必須にする荷主が増えると、同じ受領書の判定が変わります。当時の台帳が残っていないと、過去の判定が正しかったかを確かめられません。
最後の行は、見本を足す順番を決める材料になります。
04実装レベルの3段階
最小構成では枚数がさばけません。 1枚ずつ読ませて書き写すので、月3,000枚には使えません。受領印を見分けられるかを確かめるための段階です。 半自動化で、1枚2分が0.6分になり、この段階が本記事の想定です。 人に残るのは欠けと迷いだけの確認です。 本格構成の価値は時間よりも、手入力の転記の誤りが消えることにあります。 段階を飛ばさないでください。 半自動化の一覧を2か月見て、uncertain の多い荷主と台帳の食い違いを直してから書き戻しに進むほうが、配送管理システムの記録を汚しません。
05工数削減シミュレーション
導入後 3,000件 × 0.6分 ÷ 60 = 30 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 荷主から預かった貨物を配送し、配送先の受領印(またはサイン)をもらった紙の受領書を荷主へ返す運用が残っている運送会社・3PL。営業所の事務担当が、乗務員の持ち帰った受領書を配達実績の一覧と1枚ずつ照らして印を付けており、受領印の押し忘れや未回収に月末の返却の直前まで気づかない場合。荷主ごとに受領書の様式が数種類に限られている場合。
- 配送先の受領を端末の電子サインで取っていて、紙の受領書がほとんど戻らない場合。月の受領書が数百枚以下で、目で照らしても負担にならない場合。荷主ごとに受領書の様式がばらばらで、数十種類を超える場合(見本をそろえる手間が読み取りの効果を上回る)。なお、受領印の欠けた荷物の責任をどう扱うか、荷主へどう説明するかは、この構成では代替できません。
07最小構成で試す方法
- 先月の受領書から、上位3社の荷主の様式で各30枚、合わせて90枚を選ぶ(うち10枚は、受領印の押し忘れや受領日の書き忘れがあると分かっているものを入れる)
- Document Intelligence Studio で荷主ごとに5枚ずつ、伝票番号・受領日・受領印の欄(Signature 型)・備考の領域をラベル付けする
- カスタム ニューラル モデルを学習させる(v4.0 では10時間までの学習が無料とされている)
- 残りの75枚を Studio で読ませ、受領印の欄の検出と信頼度を一覧に書き写す
- 当時の目視の結果と突き合わせる
90枚は必ずやってください。 印影を署名として見分けられるかは、公式のページに書かれていない部分です。
| 出てきた内容 | 判断 |
|---|---|
| 押し忘れの10枚がすべて信頼度の低い側に分かれた | 線を引いて、突合の処理に進む |
| 押されているのに信頼度が低い受領書が多い | 見本を足す。かすれた印影の見本を意図して入れる |
| 印影とサインで信頼度の出方が大きく違う | 荷主ごとに線を分ける。構成は有効 |
| 伝票番号の読み違いが多い | 解像度が先。 200dpi以上で取り直す |
2行目が出ることは珍しくありません。 「かすれていても押されている」という事務担当の基準を、見本として教えていなかったということです。かすれた印影を5枚以上足し、同じ75枚で分かれ方がどう変わるかを見てください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
押されている受領印が absent になる | 朱肉のかすれ。 かすれた見本を足し、解像度を200dpi以上にする |
| 印影を署名として見分けられるか分からない | 公式のページは署名の検出として書いている。90枚で確かめてから進む |
| 署名の項目のラベルに周りの文字が入る | 公式のページは、署名と領域のラベルに周りの文字を含めないよう書いている |
| 伝票番号の1文字を読み違える | 項目の信頼度と単語の信頼度の両方を見る。似た番号に寄せない |
| 新しい荷主の様式が混ざる | 様式の判別の信頼度で見つける。5枚たまったら見本に足す |
| 受領日の欄が無い様式で「受領日なし」が出続ける | 荷主の様式の台帳に「受領日の欄なし」を持たせる |
| 一覧が乗務員に届くのが遅い | 翌朝の点呼の前に出す。 月末にまとめて出しても意味がない |
| 回収済みの印を自動で書き戻して誤りが残る | 最初は書き戻さない。確かめたものだけを手で入れる |
| 受領印の有効性まで機械に判断させる | 誰の印でよいかは荷主との取り決め。 機械は欄に何かあるかだけを見る |
上の2行が、この構成の失敗のほとんどです。 最初の90枚で線の引き方を決め、運用中も absent を覆した記録を見て線を動かせるかで、運用に乗るかが決まります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 荷主の名前、配送先の会社名と住所、品名と数量、受領した人の印影やサイン、乗務員の名前と配達の記録です。
- 受領書は荷主のものとして扱う … 荷主との契約で定めた目的の外で使わず、読み取りの結果を別の荷主の分析に混ぜないよう、保管先を荷主ごとに分けます
- 印影とサインを集めた一覧を作らない … 欄の画像を切り出して一覧にすると、印影の見本帳になってしまいます。 判定に要るのは「あるかないか」と信頼度だけです
- 生成AIに渡すのは備考欄の文字列だけにする … 受領書の画像全体や配送先の住所は渡しません
- 乗務員の評価に直結させない … 件数だけで乗務員を評価すると、受領書をトレーに出さなくなるほうへ動きます
- 配送管理システムへの書き戻しは、人が確かめたものだけにする
- この構成は、荷主に対する責任の判断を代替しません … 受領印の欠けた荷物の扱いや数量の相違の負担は、荷主との取り決めと営業所の責任者が決めることです
誤りが起きた場合のリスクは、欠けを見落として荷主へ返すことと、押されている受領書の受領印をもらい直しに行かせることの2つです。 どちらも、信頼度で線を引き、迷いを人に回すことで防ぎます。
10まず何から始めるか
1週目:荷主の様式の台帳を作る
上位10社の様式の見本を集め、受領日の欄があるか、受領印とサインのどちらでよいか、受領印の欄がどこにあるかを台帳に書きます。
2週目:90枚で試す
上位3社の様式で90枚を選び、Studio で学習させて残りを読ませます。押し忘れの受領書が信頼度の低い側に分かれるかを最優先で見ます。
3週目:スキャンの設定をそろえる
複合機の解像度を200dpi以上にそろえ、保存先を1か所に決めます。 配達実績の CSV を毎晩書き出す設定も確かめます。
4週目:保存から一覧までをつなぐ
読み取り・突合・一覧の作成までを作ります。この時点では乗務員への一覧は出さず、事務担当がこれまでの目視と見比べます。
2か月目: 翌朝の点呼の前に乗務員ごとの一覧を出し始め、missing と review の件数を毎週数えます。備考の区分分けを足します。3か月目以降: 1枚2分が何分になったかを実測し、残りの荷主の様式を見本に足します。荷主ごとの uncertain の発生率が落ち着き、月末に束ねるときに欠けが見つからなくなった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| カスタム ニューラル モデルがレイアウトと言語の特徴を組み合わせ、同じ情報で見た目が違う文書に向くこと。v4.0(2024-11-30 GA)で署名の検出に対応し、Signature 型で領域を囲んでラベル付けし、署名をラベル付けした見本を少なくとも5つ使うこと。様式のばらつきごとに見本を5つ以上足すこと。入力の形式・寸法・文字の最小の高さ・S0 で500MB・PDF 2,000ページ。v4.0 で10時間までの学習が無料であること | Microsoft Learn: Custom neural document model | 2026-10-14 |
| カスタム テンプレート モデルが署名の項目・選択マーク・表に対応し、決まった見た目の書式に向くこと。見た目が変わると精度が落ち、様式ごとに見本を5つ以上用意してモデルを分け、compose で1つの窓口にまとめられること。パスワード付きの PDF は解除が要ること | Microsoft Learn: Custom template document model | 2026-10-14 |
| カスタム ニューラル モデルとカスタム テンプレート モデルの手書きの文字の対応言語に日本語が含まれること | Microsoft Learn: Language support for custom models | 2026-10-14 |
| 単語・キーと値・選択マーク・領域・署名に信頼度が返ること。カスタム モデルの項目の信頼度は値の位置についてのもので、OCR の信頼度とあわせて総合すること。署名と領域のラベルに周りの文字を含めないこと。信頼度で自動採用か人の確認かを分けられること | Microsoft Learn: Interpret and improve model accuracy and confidence scores | 2026-10-14 |
Blob Storage のトリガーにイベント方式とポーリング方式があり、遅れの小さいイベント方式が推奨されること。ポーリング方式は従量課金のプランで最大10分の遅れが出うること。失敗時は既定で合計5回やり直し、すべて失敗すると webjobs-blobtrigger-poison キューに入ること。blob receipts で同じファイルを二度処理しないこと | Microsoft Learn: Azure Blob storage trigger for Azure Functions | 2026-10-14 |
Azure OpenAI の構造化出力が response_format の json_schema と strict: true で指定し、すべての項目を必須にして additionalProperties: false を付ける必要があること | Microsoft Learn: How to use structured outputs with Azure OpenAI | 2026-10-14 |
受領印の欠けた荷物の扱いと、誰の印を有効とするかは、荷主との取り決めと営業所の責任者で決めてください。 本記事は Microsoft Learn の公開ページで確認できた範囲だけを扱っています。日本の受領印の印影を署名の項目として見分けられるかは公式のページに書かれておらず、自社の受領書で確かめる前提です。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1446)についてのご相談はこちらから。
