海外の配送業者から届く英文の配達証明(POD)を読み取り、受取人・受領日時・個数・リマークを出荷台帳に転記して、請求の前に未着・数量違い・破損の記載を拾う
海外の配送業者から届く英文の配達証明(POD)を読み取り、受取人・受領日時・個数・リマークを出荷台帳に転記します。出荷の記録と照らし、未着・数量違い・破損や不足の記載がある出荷を、顧客へ請求する前に拾います。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- 商社/物流/製造
- 対象部門
- 物流/経理
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 入力作業が多い/期限・対応漏れが起きる/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/工数削減/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 共有の受信箱に届いたPODの添付を開き、ハウスの運送状番号(HAWB/HBL)と照らして、どの出荷のものかを探す
- 受取人の名前、受領日、受領時刻、受領した個数を出荷台帳に書き写す
- 受領の署名があるかを目で見る
- リマーク欄を見て、破損・不足・濡れなどの記載が無いかを探す
- 出荷台帳の出荷個数と、PODの受領個数を見比べる
- 気になる記載があれば、営業の担当にメールで知らせる
- 配達の完了を確かめた出荷を、請求の対象として経理に回す
- 自動共有の受信箱に届いたPODの添付を、受付フォルダに保存する
- 自動保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 自動OCRがPODの文字・キーと値の組・署名の位置を読み取り、決めておいた質問への答えを信頼度付きで返す
- 自動生成AIが運送状番号・受取人・受領日時・個数を項目にそろえ、リマークの文言を区分に分ける
- 自動プログラムが運送状番号で出荷台帳を引き、個数・受領日・届け先を照らす
- 自動出荷ごとに `clean` / `exception` / `mismatch` / `needs_human` を規則で決める
- 自動配達予定日を過ぎてもPODの無い出荷を、`missing_pod` として毎朝一覧にする
- 人担当者が `exception`・`mismatch`・`needs_human`・`missing_pod` の出荷だけを開き、原本を確かめる
- 人営業の担当と相談し、請求を出すか止めるか、提携先へ照会するかを決める
各工程の詳しい説明を読む
- 共有の受信箱に届いたPODの添付を開き、ハウスの運送状番号(HAWB/HBL)と照らして、どの出荷のものかを探す
- 受取人の名前、受領日、受領時刻、受領した個数を出荷台帳に書き写す
- 受領の署名があるかを目で見る
- リマーク欄を見て、破損・不足・濡れなどの記載が無いかを探す
- 出荷台帳の出荷個数と、PODの受領個数を見比べる
- 気になる記載があれば、営業の担当にメールで知らせる
- 配達の完了を確かめた出荷を、請求の対象として経理に回す
(a)書き写しに時間の大半が消える。 1件のPODから台帳に移す項目は4〜5つですが、PODのどこに何が書いてあるかが提携先ごとに違い、探すところから始まります。 写真で届いたPODは傾いていたり、署名と日付が重なっていたりします。
(b)手書きのリマークを見落とす。 受領の署名の横に小さく「2 ctns dented」と書かれていても、署名と日付を確かめた時点で次に進んでしまいます。リマークを見落とした出荷は、顧客からの苦情で初めて分かります。
(c)未着に気づけない。 PODが届いた出荷は確認しますが、届いていない出荷は誰も見ません。 配達予定日を過ぎてもPODが無い出荷は、提携先に確かめるまで配達されたかどうかが分かりません。
(d)破損の記載に気づくのが遅れる。 運送人への申し立てや保険の手続きには、契約や約款で決まった期限があります。PODの確認が月末にずれ込むと、気づいたときに期限が迫っています。
- 【自動】 共有の受信箱に届いたPODの添付を、受付フォルダに保存する
- 【自動】 保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 【自動】 OCRがPODの文字・キーと値の組・署名の位置を読み取り、決めておいた質問への答えを信頼度付きで返す
- 【自動】 生成AIが運送状番号・受取人・受領日時・個数を項目にそろえ、リマークの文言を区分に分ける
- 【自動】 プログラムが運送状番号で出荷台帳を引き、個数・受領日・届け先を照らす
- 【自動】 出荷ごとに
clean/exception/mismatch/needs_humanを規則で決める - 【自動】 配達予定日を過ぎてもPODの無い出荷を、
missing_podとして毎朝一覧にする - 【人】 担当者が
exception・mismatch・needs_human・missing_podの出荷だけを開き、原本を確かめる - 【人】 営業の担当と相談し、請求を出すか止めるか、提携先へ照会するかを決める
8番目が、この設計の分かれ目です。 担当者は600件のPODを読みません。印の付いた出荷について、原本の該当箇所と出荷台帳を見比べることに時間を使います。
02今回想定するシステム構成
海外の配送業者・提携フォワーダーから届く英文のPOD(PDF・写真) ▼【トリガー】受付フォルダ(Amazon S3)への保存 AWS Lambda ── 形式・ページ数・パスワードの確認 ▼ AWS Textract(StartDocumentAnalysis/GetDocumentAnalysis) │ FORMS(キーと値)・QUERIES(質問への答え)・SIGNATURES(署名の位置) ▼ Claude API ── 項目のそろえ直しと、リマークの文言の区分 │ ① 運送状番号 ② 受取人 ③ 受領日時 ④ 受領個数 ⑤ リマークの区分 ▼ Python ── 出荷台帳との照合(個数・受領日・届け先)、未着の洗い出し ▼ 出荷ごとの判定(clean / exception / mismatch / 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(POD、読み取り結果、判定、確認の記録) | 社内のファイルサーバー |
出荷台帳と会計の仕組みは、新しく足すものではありません。 最初の準備は、出荷台帳に「運送状番号・届け先・出荷個数・配達予定日・提携先」の列がそろっているかを確かめることです。運送状番号が無い出荷は、PODと結び付けられません。
OCRに AWS Textract を選ぶのは、PODが英文だからです。 公式の上限の表で、対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語とされ、手書きの認識は英語だけです。 リマークは受け取った人の手書きが多いため、英語の仕向地に絞る理由はここにもあります。 中南米のスペイン語・ポルトガル語の印字は読めますが、手書きのリマークは読めない前提で扱います。
この題材で効くのは、文書の分析(StartDocumentAnalysis)に3つの機能を同時に指定できることです。 FeatureTypes に FORMS(キーと値の組)、QUERIES(決めた質問への答え)、SIGNATURES(署名)を並べると、1回の読み取りで「Received by: J. Smith」のような組、「受領した個数は何個か」への答え、署名の位置がまとめて返ります。様式の違うPODでも、同じ質問を投げれば同じ名前の答えが返るので、提携先ごとのテンプレートを作らずに済みます。
03どうやって実装するのか
処理の起点を決める
受付フォルダ(Amazon S3)にPODが保存されたことを起点にします。 PODは提携先ごとに届く日がばらばらで、配達の翌日に来るものもあれば月末にまとめて来るものもあるため、1日1回の定時実行にはしません。 届いた日に読めば、破損の記載に気づくのが最大で1か月早くなります。
S3 への保存を AWS Lambda が受け、StartDocumentAnalysis を呼びます。ClientRequestToken にファイルのハッシュから作った値を入れると、同じトークンで呼び直しても同じ JobId が返り、同じPODを二度読みません。 JobTag には提携先のコードを入れ、完了の通知(Amazon SNS)からどの提携先のPODかを引けるようにします。通知の状態が SUCCEEDED であることを確かめてから結果を取り、すぐ S3 に保存します。 JobId は7日間しか有効ではありません。
未着の一覧は、別のトリガーで動かします。 毎朝の定時に出荷台帳を読み、配達予定日から提携先ごとに決めた日数を過ぎてもPODの無い出荷を数えます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| PODのファイル | 運送状番号、受取人、受領日時、受領個数、署名、リマーク | 受付フォルダ(S3) |
| 読み取り結果 | 文字の行と単語、キーと値の組、質問への答え、署名の位置、信頼度、手書きか印字か | AWS Textract |
| 出荷台帳 | 運送状番号、荷主、届け先の会社名と住所、出荷個数、重量、配達予定日、提携先 | 輸出案件の管理システムの出力 |
| 提携先の一覧 | 提携先のコード、PODの送り方(都度・まとめて)、未着とみなす日数 | 業務担当が持つ一覧 |
| リマークの言い換えの一覧 | 「dented」「crushed」「torn」などの文言と区分の対応 | 担当者が育てる一覧 |
質を決めるのは、下の3つです。 出荷台帳に運送状番号と出荷個数が無ければ照合ができず、提携先の一覧が無ければ未着の日数を決められません。言い換えの一覧は、最初は空でかまいません。 担当者がリマークの区分を直すたびに1行ずつ増え、略語や現地の言い回しを迷わず分けられるようになります。
データの取得方法を決める
結果は GetDocumentAnalysis で取ります。1回の呼び出しで返る件数は既定・最大1,000で、NextToken が返る限り続けて取ります。 JobStatus が PARTIAL_SUCCESS のときは Warnings に出たページを記録し、そのPODを needs_human にします。
質問(Queries)は QueriesConfig に並べます。非同期の処理では1ページに30問まで投げられます。PODに投げる質問は次のとおりです。
| 別名(Alias) | 質問の文 | 何に使うか |
|---|---|---|
WAYBILL_NO | What is the waybill or tracking number? | 出荷台帳を引く鍵 |
RECEIVED_BY | Who received the shipment? | 受取人の名前 |
DELIVERY_DATE | What is the delivery date? | 受領日 |
DELIVERY_TIME | What is the delivery time? | 受領時刻 |
PIECES_RECEIVED | How many pieces were received? | 受領個数 |
REMARKS | What are the remarks or exceptions noted? | リマークの文言 |
質問への答えが見つからないときは、答えの欄が空のまま返ります。 リマークが無ければ REMARKS は空で返り、その事実を記録に残せます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 質問への答え | QUERY_RESULT の Text と Confidence | 6項目の値の候補 |
| キーと値の組 | KEY_VALUE_SET(KEY と VALUE) | 質問で取れなかった項目を補う |
| 署名 | SIGNATURE の位置と Confidence | 受領の署名があるか |
| 手書きか印字か | WORD の TextType(HANDWRITING/PRINTED) | リマークが手書きで書き加えられたかの手がかり |
| ページ番号と位置 | Page と Geometry | 原本の該当箇所に戻る手がかり |
署名は「あるかどうかと、どこにあるか」しか分かりません。 SIGNATURE のブロックは、ページ上で検出された署名の位置と信頼度を返すもので、誰が署名したか、本物かは返しません。 受取人の名前は質問への答えとキーと値の組から取り、署名の位置とは別に扱います。
AIへ渡す前に整形する
- 形式の確認 … 文書の分析は JPEG、PNG、TIFF、PDF を扱います。HEIC などで届いた写真は JPEG に変換します
- パスワードの確認 … PDFはパスワードで保護されていてはいけません。保護されたものは提携先に解除したものを頼みます
- ページ数とサイズの確認 … 非同期の処理でPDFは500MB・3,000ページが上限です。月末のまとめ送りで、1つのPDFに数十件のPODが綴じられていることがあります。 1件ごとのページに分けます
- 文字の大きさの確認 … 文字の高さが15ピクセルを下回ると検出されません。150 DPIで8ポイント相当です。ドライバーの端末の画面を小さく写した写真は、ここで止まります
- 出荷台帳の準備 … 照合用に、直近3か月の出荷台帳を読み込みます
3番目を省かないでください。 まとめ送りのPDFをそのまま読むと、質問への答えが1件目のPODのものだけになり、残りの出荷が「PODが無い」まま未着の一覧に載ります。 運送状番号が書かれた位置でページを切り分け、1件ずつ読みます。
AIに処理させる
させるのは、読み取り結果を項目にそろえ直し、リマークの文言を区分に分け、根拠の文字列を添えることだけです。
| 取り出す項目 | 中身 | 取り出せないときの扱い |
|---|---|---|
| 運送状番号 | HAWB/HBL の番号。提携先の追跡番号と並んでいることがある | 書かれていなければ not_found、複数あれば ambiguous |
| 受取人 | 受け取った人の名前(活字か手書き) | 書かれていなければ not_found |
| 受領日時 | 受領の日付と時刻 | 日付の書き方が日・月の順か月・日の順か決められなければ ambiguous |
| 受領個数 | 受け取った個数 | 書かれていなければ出荷個数で埋めず not_found |
| リマークの区分 | none・damage・shortage・wet・refused・other | 文言が読めなければ unreadable |
リマークの区分には、言い換えの一覧を渡します。 一覧にある文言なら、その区分を使います。一覧に無ければ文言から区分を選び、その行には new_term の印を付けて人に確かめてもらいます。 「OK」「Good order」「Rcvd in good condition」は none に、「Subject to inspection」「STC(said to contain)」のような留保の文言は other に入れます。
| させないこと | 理由 |
|---|---|
| 受領個数と出荷個数の比較 | プログラムが出荷台帳と照らす |
| 書かれていない個数・日付の補完 | 出荷個数で埋めると、不足の記録が消える |
| 署名があるかの判断 | OCRが返した SIGNATURE で決める |
| 破損の程度や責任の判断 | 申し立てるか、誰の責任かは担当者が決める |
| 留保の文言を「問題なし」に寄せる | 後から破損が見つかったときの手がかりが消える |
2行目がいちばん起きやすい失敗です。 受領個数の欄が空いていると、AIは「全数受領」の想定で埋めがちで、その瞬間に不足の疑いが見えなくなります。
指示内容を固定する
あなたは国際フォワーダーの輸出業務課で、海外の配送業者から届いた英文の配達証明(POD)を点検する担当です。
OCRが返した読み取り結果だけを見て、項目をそろえてください。推測で埋めないでください。
【やること】
1. 運送状番号・受取人・受領日・受領時刻・受領個数を、原文のまま写す
2. リマークの文言を原文のまま写し、下の区分のどれに当たるかを選ぶ
3. 各項目の根拠にした原文の文字列を evidence に入れる
【リマークの区分の決まり】
- まず「リマークの言い換えの一覧」を見る。一覧にある文言ならその区分を使う
- 一覧に無ければ、文言から区分を選び、term を "new_term" にする
- none ...... 異常が無い旨の記載(Good order など)、またはリマークの欄が空
- damage .... 破損・へこみ・つぶれ・破れの記載
- shortage .. 不足・欠品・個数の違いの記載
- wet ....... 濡れ・水濡れの跡の記載
- refused ... 受取の拒否の記載
- other ..... 上のどれにも当たらない記載。Subject to inspection などの留保もここに入れる
- 文字が読めず区分を決められなければ "unreadable" にする
【厳守事項】
- 受領個数が書かれていなければ "not_found" にしてください。出荷個数や「全数」で埋めないでください。
- 受領個数と出荷個数を比べないでください。不足かどうかを判断しないでください。
- 留保の文言を none にしないでください。
- 日付が日・月の順か月・日の順か決められないときは "ambiguous" にしてください。
- 署名があるかどうかを書かないでください。署名の判定は別の処理で行います。
- 破損の程度、責任の所在、申し立ての要否を書かないでください。
- 受取人の名前以外の個人の情報(電話番号・身分証の番号など)を書き出さないでください。
- confidence は OCR が返した値をそのまま入れてください。
【読み取り結果】{textract_result}
【リマークの言い換えの一覧】{remark_terms}
【この提携先の日付の書き方】{date_format}
「比べない」を書いているのは、読み取り結果に「10 PCS」と「9」が並ぶと、片方を出荷個数とみなして「不足1」と書くことがあるからです。 比較はプログラムが出荷台帳を相手に行います。
出力形式を固定する
次の形のJSONで受け取ります。 Claude API の構造化出力(output_config.format に type: "json_schema" とスキーマを指定)を使い、形の崩れた応答を照合のプログラムに流さないようにします。
{
"file_id": "",
"partner_code": "",
"waybill_no": { "value": "", "status": "ok | not_found | ambiguous", "confidence": 0, "evidence": "" },
"received_by": { "value": "", "status": "ok | not_found", "confidence": 0, "evidence": "" },
"delivery_date": { "value": "", "status": "ok | not_found | ambiguous", "confidence": 0, "evidence": "" },
"delivery_time": { "value": "", "status": "ok | not_found", "confidence": 0, "evidence": "" },
"pieces_received": { "value": "", "status": "ok | not_found", "confidence": 0, "evidence": "" },
"remarks": [
{ "text": "", "category": "none | damage | shortage | wet | refused | other | unreadable",
"term": "alias | new_term", "handwritten": true, "confidence": 0, "page": 1 }
]
}
照合のプログラムは、この結果と SIGNATURE の検出、出荷台帳を合わせて、出荷ごとに次の判定を付けます。
| 判定 | 条件 |
|---|---|
clean | 署名があり、受領個数が出荷個数と一致し、リマークがすべて none |
exception | リマークに damage・shortage・wet・refused・other がある |
mismatch | 受領個数が出荷個数と違う、または受取人の会社名・受領日が届け先・配達予定と大きく違う |
needs_human | 署名が検出されない、not_found・ambiguous・unreadable・new_term がある、運送状番号で出荷台帳を引けない |
理由は、AIの出力とプログラムの判定を別の層に置けることです。 リマークの区分はAIが原文から付け、判定は規則が出荷台帳を相手に付けます。どの区分を請求の保留にするかが変わっても、直すのは規則だけです。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 共有の受信箱 | メールのルール | PODの添付を受付フォルダへ移す |
| 受付フォルダ(S3) | AWS Lambda の起動 | 保存を検知し、読み取りを始める |
| AWS Textract | 非同期のAPI呼び出しと SNS の通知 | 文字・キーと値・質問への答え・署名の位置を返す |
| Claude API | API呼び出し | 項目のそろえ直しとリマークの区分、照会文の下書き |
| 出荷台帳 | 管理システムの出力ファイルの読み取り | 運送状番号で出荷を引き、個数と配達予定日を照らす |
| 出荷台帳への転記 | 取り込み用のファイル | 受取人・受領日時・受領個数・判定を、確認の済んだものだけ書き戻す |
| 会計の仕組み | 既存の入力経路 | 請求の対象になった出荷を回す |
出荷台帳へは直接書き込みません。 clean のものは毎日まとめて、それ以外は担当者が確かめた後に取り込みます。
人が確認する
担当者が開くのは exception・mismatch・needs_human の出荷と、未着の一覧だけです。 clean のものは一覧で件数と提携先を流し見ます。全件を開く設計にすると、第10章の2分には収まりません。
exceptionを先に見る … 原本でリマークの文言を読み、区分が正しいかを確かめます。申し立ての期限がある出荷なので、その日のうちに営業の担当へ知らせますneeds_humanの署名の無いものを確かめる … 署名が薄く検出されないことがあります。本当に無ければ、提携先に受領の証跡を求めますmismatchの個数を確かめる … 原本の受領個数を読み直し、出荷台帳の個数(梱包の数え方)とも見比べます- 未着の一覧を提携先ごとにまとめる … 照会の下書きを直して送ります。送るのは担当者です
- 判定を変えたら記録する … どの出荷を、どの判定に、なぜ変えたかを残します
3番目を急がないでください。 台帳がパレット、PODがカートンで数えていることがあり、「10」と「120」の違いは不足ではありません。 提携先ごとの数え方を一覧に足します。
例外に対処する
| 起きること | 対応 |
|---|---|
| 英語以外の手書きのリマーク | この構成では読めない。unreadable で人に回し、提携先に英語での記載を頼む |
| パスワード付きのPDF | 解除したものを提携先に頼む |
| 1つのPDFに複数のPOD | 運送状番号の位置でページを分け、1件ずつ読む |
| 写真が小さく文字が読めない | 原本のスキャンを提携先に頼む |
| 運送状番号で出荷台帳を引けない | 提携先の追跡番号しか書かれていないことがある。提携先の番号と自社の番号の対応表を引き、それでも引けなければ needs_human |
| 署名が検出されない | needs_human。原本で確かめ、無ければ受領の証跡を求める |
| 受取人の会社名が届け先と違う | 隣の会社や管理人が受け取った可能性がある。mismatch で人へ |
PARTIAL_SUCCESS で一部のページが読めない | Warnings のページを記録し、needs_human に |
| OCRが応答しない | 受付フォルダに残す。処理済みに移すのは成功したときだけ |
上から5行目が、立ち上げの時期にいちばん多く出ます。 出荷の手配のときに提携先の追跡番号を出荷台帳に記録する手順を足すと減ります。
記録を残す
- PODの原本と、受け取った日時・提携先・元のメール
- OCRが返したJSONの全文(
GetDocumentAnalysisの全ページ分) - AIのそろえ直しとリマークの区分の結果
- 照合の結果と、そのとき参照した出荷台帳の行
- 担当者が判定や区分を変えた記録
- 営業への連絡、提携先への照会と回答、請求を保留・解除した日時
- 提携先ごとの
needs_humanとnew_termの発生率、PODが届くまでの日数
4つ目で出荷台帳の行を残すのは、出荷個数や届け先が後から直されることがあるためです。 当時どの個数と照らしたかが分からないと、顧客や提携先との精算のときに説明できません。
04実装レベルの3段階
最小構成では件数がさばけません。 1件ずつ貼り付けるので、600件には使えません。確かめるための段階です。 半自動化で、1件6分が4分程度になります。 書き写しは無くなりますが、出荷台帳との照合と未着の確認が残ります。本格構成で2分になり、この段階が本記事の想定です。 差が大きいのは、出荷台帳との照合が、PODを開くたびに台帳を引き直す作業だからです。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、new_term の多い提携先と、署名の検出が崩れやすい様式が先に分かります。言い換えの一覧と提携先の数え方がそろってから本格構成に進むほうが、人に回る出荷が減ります。
05工数削減シミュレーション
導入後 600件 × 2分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 輸出の戸口配送(ドア・ツー・ドア)を請け負い、海外の現地配送業者や提携フォワーダーから英文の配達証明を月に数百件受け取っているフォワーダー・商社・メーカーの物流部門。PODのPDFや写真を1件ずつ開いて出荷台帳に受領日を書き写し、リマーク欄の手書きの記載を目で探している場合。破損や不足の記載に気づくのが、顧客から苦情が来た後になっている場合。
- 配達の完了を現地の配送業者のシステムから電子データで受け取れており、紙やPDFのPODを読む必要がない場合。PODが英語以外(中国語・日本語・韓国語・タイ語など)で届く仕向地が中心の場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めず、手書きは英語だけです)。月の件数が数十件で目視で足りる場合。なお、破損や不足を運送人へ申し立てるか、顧客への請求をどう扱うかの判断は、物流と営業の担当が行うもので、この構成では代替できません。
07最小構成で試す方法
- 先月のPODから、提携先の違う30件を選ぶ(うち数件は、破損や不足の記載があったものを入れる)
- 30件を AWS Textract のコンソールで分析し、質問への答えと署名の検出がどう返るかを見る
- 読み取り結果を手元のAIサービスに貼り、「受取人・受領日時・受領個数を原文のまま写し、リマークを破損・不足・濡れ・受取拒否・その他に分けてください。書かれていない個数を埋めないでください」と指示する
- 出てきた結果を、当時の担当者の書き写しと突き合わせる
30件は必ずやってください。 ワークフローを組む前に、「手書きのリマークが読めるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 当時と同じ記載を拾った | 出荷台帳との照合に進む |
| 書かれていない個数を出荷個数で埋めた | 指示の書き方で直る。構成は有効 |
| 手書きのリマークがほとんど読めない | 写真の撮り方の問題。 提携先にスキャンでの送付を相談する |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 受領個数の空欄を出荷個数で埋める | 指示で禁じ、not_found を返させる |
| 留保の文言を「問題なし」に寄せる | other に入れる決まりを区分の定義に書く |
署名の無いPODを clean にする | 署名の判定を SIGNATURE の検出で行い、AIに任せない |
| まとめ送りのPDFの2件目以降が未着になる | ページを1件ずつに分けてから読む |
| 日付の日・月の順を取り違える | 提携先ごとに順序を持たせ、決められなければ ambiguous |
| パレットとカートンの数え方の違いを不足とみなす | 提携先ごとの数え方を一覧に持つ |
| 提携先の追跡番号で出荷台帳を引けない | 手配のときに提携先の番号を台帳に記録する |
| 英語以外の手書きを読もうとする | 手書きは英語だけ。unreadable で人に回す |
| 未着の催促をまとめ送りの提携先に出す | 提携先ごとに未着とみなす日数を変える |
上の2行が、この構成の失敗のほとんどです。 どちらも「問題の無い配達」に見える記録を作る誤りです。埋められた個数と寄せられた留保は、後から破損の連絡が来たときに初めて誤りだと分かります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 受取人の名前と署名、届け先の会社名と住所、荷主の名前、出荷の個数と重量です。受取人の名前と署名は個人に結び付く情報で、届け先と荷主の組み合わせは取引の関係を表します。
- 生成AIに渡す範囲を読み取り結果の文字に限る … 署名の画像は渡しません。署名は
SIGNATUREの位置と信頼度だけで扱い、画像の切り出しは原本の確認のときに人が見るだけにします - 出荷台帳を生成AIに渡さない … 照合はプログラムの側で行います。荷主と届け先の一覧が外部へ出ないようにします
- 保管の暗号化を決める …
StartDocumentAnalysisのKMSKeyIdを指定すると、利用者のバケットに出力するときにそのキーで暗号化されます。指定しない場合は SSE-S3 で暗号化されます - 照会を自動で送らない … 出すのは下書きまでです。提携先との関係と、顧客への説明に直結します
- 請求の保留を自動で確定させない … 破損の記載があっても、請求を止めるかは契約と顧客との取り決めで決まります。判定は保留の候補を出すまでにします
- PODの保存期間を決める … 申し立てや保険の手続き、顧客との精算で後から求められることがあります。自社の文書の保存の規程に合わせて、原本と読み取り結果を残します
誤りが起きた場合のリスクは、破損や不足の記載を見落として期限を過ぎることと、問題の無い配達を照会して提携先や顧客の手間を増やすことの2つです。 前者は個数の補完と留保の寄せから、後者は数え方の違いと日付の取り違えから起きます。
10まず何から始めるか
1週目:出荷台帳と提携先の一覧を整える
出荷台帳に「運送状番号・届け先・出荷個数・配達予定日・提携先」の列がそろっているかを確かめます。あわせて、件数の多い上位10社の提携先について、PODの送り方・日付の書き方・数え方・未着とみなす日数を一覧にします。全社を一度にそろえる必要はありません。
2週目:30件で試す
先月のPODから提携先の違う30件を選び、コンソールで読み取り、手元のAIサービスで項目をそろえさせます。受領個数を補っていないか、留保の文言を問題なしにしていないかを最優先で見ます。
3週目:判定の規則を決める
どのリマークの区分を請求の保留の候補にするか、署名の無いPODをどう扱うかを、物流と営業と経理で決めます。 あわせて、申し立ての期限を契約・約款ごとに確かめ、exception を営業へ渡す期限を決めます。
4週目:受付フォルダから一覧までをつなぐ
S3 と Lambda で受付フォルダを見張り、OCRを呼び、項目とリマークの区分を一覧に書き出すところまで作ります。この時点では出荷ごとの判定を出さず、読み取りの結果だけを見ます。
2か月目: 出荷台帳との照合と出荷ごとの判定、未着の一覧を足します。exception と needs_human の件数を毎週数えます。3か月目以降: 照会文の下書きと出荷台帳への取り込みを足し、1件6分が何分になったかを実測します。言い換えの一覧と提携先ごとの数え方が育ち、needs_human が月に数十件まで減った時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 対応言語が英・仏・独・伊・葡・西で、手書きの認識は英語だけ。質問(Queries)は英語の文書だけ。非同期の処理でPDFが500MB・3,000ページまで。パスワード付きPDF不可。文字の高さ15ピクセル(150 DPIで8ポイント)が下限。平面上の回転に対応し、縦書きは非対応。質問は非同期で1ページ30問まで | AWS: Set Quotas in Amazon Textract | 2026-10-09 |
StartDocumentAnalysis が JPEG・PNG・TIFF・PDF を扱い、FeatureTypes に TABLES・FORMS・QUERIES・SIGNATURES・LAYOUT を指定できること。ClientRequestToken で同じ JobId が返ること。JobTag が完了の通知に含まれること。KMSKeyId の扱い。JobId が7日間有効なこと | AWS: StartDocumentAnalysis | 2026-10-09 |
MaxResults が既定・最大1,000で NextToken で続きを取ること。JobStatus に PARTIAL_SUCCESS があること。Warnings の構造。質問を使うときの INVALID_REQUEST_PARAMETERS の注意 | AWS: GetDocumentAnalysis | 2026-10-09 |
SIGNATURE のブロックが署名の位置と信頼度を返すこと。KEY_VALUE_SET・QUERY・QUERY_RESULT の構造。TextType が HANDWRITING/PRINTED を返すこと | AWS: Block | 2026-10-09 |
| 質問への答えが別名・信頼度・位置とともに返り、答えが見つからないときは空のまま返ること | AWS: Queries | 2026-10-09 |
構造化出力を output_config.format(type: "json_schema")で指定すること | Claude: Structured outputs | 2026-10-09 |
破損や不足を運送人へ申し立てる期限と手続きは、運送契約・約款・適用される条約によって違います。 本記事は公開仕様で確認できた範囲だけを扱っており、期限の判断は物流と営業の担当が契約を確かめて行ってください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1185)についてのご相談はこちらから。
