英文の航空貨物運送状(AWB)とインボイスを読み取り、輸入台帳に転記して、個数・重量の食い違いを通関の前に拾う
航空便で届く英文のAWBとインボイスを読み取り、AWB番号・個数・重量・品名を輸入台帳に転記します。2つの書類の個数と重量を比べ、通関業者に渡す前に食い違いを拾います。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- 商社/小売/物流/製造
- 対象部門
- 物流/購買
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 人手が足りない/入力作業が多い/確認ミスが多い
- AIで行う処理
- 抽出
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 共有受信箱に届いたAWBとインボイスのPDFを、担当者が開く
- AWBからハウスAWB番号、マスターAWB番号、仕出人、荷受人、出発空港、到着空港、便名、個数、総重量、運賃計算重量、品名を読む
- インボイスからインボイス番号、発注番号、品名、数量、梱包の数、重量を読む
- 輸入台帳で荷主と発注番号の行を探し、転記する
- AWBの個数・重量とインボイスの梱包の数・重量を見比べる
- 食い違いがあれば、フォワーダーと荷主に確かめてから、通関業者に書類を渡す
- 自動共有受信箱に届いたAWBとインボイスのPDFが、受付フォルダ(Amazon S3)に保存される
- 自動保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめ、AWBかインボイスかを振り分ける
- 自動OCRが、AWBは全文・キーと値・表・質問への答えを、インボイスは請求書の標準項目と明細を、それぞれ信頼度付きで返す
- 自動生成AIが、AWBの番号・個数・重量・品名と、インボイスの番号・数量・梱包の数・重量を、原文と単位を残して取り出す
- 自動プログラムが、ハウスAWB番号とインボイス番号で書類を組にし、輸入台帳の行に書く
- 自動プログラムが、比べてよい値どうしだけを比べ、食い違いに印を付ける
- 人担当者が、印の付いた件を確かめ、フォワーダー・荷主・仕出人に問い合わせる
- 人担当者が、印の無い件と解決した件を通関業者に渡す
各工程の詳しい説明を読む
- 共有受信箱に届いたAWBとインボイスのPDFを、担当者が開く
- AWBからハウスAWB番号、マスターAWB番号、仕出人、荷受人、出発空港、到着空港、便名、個数、総重量、運賃計算重量、品名を読む
- インボイスからインボイス番号、発注番号、品名、数量、梱包の数、重量を読む
- 輸入台帳で荷主と発注番号の行を探し、転記する
- AWBの個数・重量とインボイスの梱包の数・重量を見比べる
- 食い違いがあれば、フォワーダーと荷主に確かめてから、通関業者に書類を渡す
(a)食い違いに通関の段で気づく。 5番目の見比べは、到着が重なる日ほど省かれます。通関業者が申告の準備で個数や重量の違いに気づき、問い合わせが戻ってきたときには、貨物はもう着いています。 仕出人の訂正を待つあいだ、急ぎの部品が倉庫に留まります。
(b)マスターとハウスを取り違える。 混載の貨物では、マスターAWBの個数と重量は混載全体の値です。マスターの値を台帳に写すと、自社の貨物が数倍の重量で記録されます。 書式が似ているため、急いでいると取り違えます。
(c)単位の違う値を比べてしまう。 キログラムとポンド、総重量と正味重量を確かめずに比べると、正しい書類を食い違いとして問い合わせてしまいます。
- 【自動】 共有受信箱に届いたAWBとインボイスのPDFが、受付フォルダ(Amazon S3)に保存される
- 【自動】 保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめ、AWBかインボイスかを振り分ける
- 【自動】 OCRが、AWBは全文・キーと値・表・質問への答えを、インボイスは請求書の標準項目と明細を、それぞれ信頼度付きで返す
- 【自動】 生成AIが、AWBの番号・個数・重量・品名と、インボイスの番号・数量・梱包の数・重量を、原文と単位を残して取り出す
- 【自動】 プログラムが、ハウスAWB番号とインボイス番号で書類を組にし、輸入台帳の行に書く
- 【自動】 プログラムが、比べてよい値どうしだけを比べ、食い違いに印を付ける
- 【人】 担当者が、印の付いた件を確かめ、フォワーダー・荷主・仕出人に問い合わせる
- 【人】 担当者が、印の無い件と解決した件を通関業者に渡す
7番目が、この設計の分かれ目です。 担当者は400件を開かず、食い違いと比べられなかった印の付いたものだけを見ます。
6番目をAIにさせないのも意図してのことです。 単位の換算も許容差の判定も規則で決まる処理で、AIには値を読み取り、その値が何を表すかを記録するところまでをさせます。
02今回想定するシステム構成
英文のAWB・インボイス(PDF。フォワーダーからのメール添付) ▼【トリガー】受付フォルダ(Amazon S3)への保存 AWS Lambda ── 形式・ページ数・パスワードの確認、書類の振り分け ├─▶ AWB:AWS Textract(StartDocumentAnalysis:FORMS/TABLES/QUERIES) └─▶ インボイス:AWS Textract(StartExpenseAnalysis) ▼ Claude API ── 値を原文・単位・種類つきで取り出す │ ① AWB番号(マスター/ハウス) ② 便名と空港 ③ 個数 │ ④ 総重量と運賃計算重量 ⑤ 品名 ⑥ インボイスの数量・梱包の数・重量 ▼ Python ── 書類を組にし、台帳に書き、比べてよい値どうしを比べる ▼ 台帳(ok / pieces_mismatch / weight_mismatch / not_comparable / needs_human) ▼ 【担当者が印の付いた件を確認】 └──▶ フォワーダー・荷主・仕出人に確かめ、通関業者に渡す
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | AWS Textract(StartDocumentAnalysis/StartExpenseAnalysis) | Azure AI Document Intelligence、Google Document AI |
| 生成AI | Claude API(AWBとインボイスの値の取り出し) | OpenAI API、Gemini API |
| 差異計算 | Python(書類の組み合わせ、単位の換算、個数・重量の照合) | 輸入管理システムの照合の機能 |
| 連携 | AWS Lambda(保存と完了の通知を起点に処理を動かす) | Amazon EventBridge |
| 保管 | Amazon S3(書類、読み取り結果、照合の結果) | 社内のファイルサーバー |
輸入台帳と発注番号の一覧は、新しく足すものではありません。 最初の準備は、荷主ごとの照合の規則を、プログラムが読める表にすることです。重量の許容差、梱包の数をどの書類から取るか、分割して送られる貨物の扱いを1行ずつ持たせます。
OCRに AWS Textract を選ぶのは、AWBとインボイスが英文だからです。 公式の上限の表で、対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語とされ、日本語や中国語は読めず、縦書きにも対応しません。 中国の仕出人が中国語を併記したインボイスは、英語の部分が読めても品名の照合には使わず、担当者が目で見る一覧に入れます。
この題材で効くのは、書類ごとに読み方を変えることです。 AWBは決まった欄に番号と値が並ぶ書類なので、キーと値(FORMS)と質問(QUERIES)で読みます。インボイスは請求書・領収書の分析(StartExpenseAnalysis)で読みます。請求書の分析は、請求書番号を INVOICE_RECEIPT_ID、品名を ITEM、数量を QUANTITY のように、書式が違っても同じ名前の項目にそろえて返します。
照合が要る理由は、税関の手続きにあります。 税関のカスタムスアンサーは、輸入申告の際に輸入(納税)申告書のほかに、仕入書(インボイス)、包装明細書、船荷証券又は海上運送状(航空貨物については航空貨物運送状)などの提出が必要としています。書類どうしが食い違っていると、通関業者の申告の準備がそこで止まります。
03どうやって実装するのか
処理の起点を決める
起点は、受付フォルダ(Amazon S3)にPDFが保存されたことです。 共有受信箱のルールで、登録したフォワーダーと航空会社のアドレスから届いたメールの添付をS3へ転送します。保存の通知で AWS Lambda が動き、読み取りから台帳への記録までを済ませます。
AWBとインボイスは別々のメールで、別々の時刻に届くことがあります。 先に届いた書類だけで台帳の行を作り、相手の書類が来るまで照合を「待ち」にします。 相手が届いた時点で照合をやり直します。
毎朝8時にも1回動かします。 到着便が翌日までなのに書類の片方が届いていない件と、needs_human のまま残っている件を一覧にして、担当者に送ります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| AWB | PDF。マスターAWB番号、ハウスAWB番号、仕出人、荷受人、出発空港、到着空港、便名、個数、総重量と単位、運賃計算重量、品名(Nature and Quantity of Goods) | 受付フォルダ(Amazon S3) |
| インボイス | PDF。インボイス番号、日付、仕出人、買い手、発注番号、品名・数量・単価の明細、梱包の数、総重量・正味重量(書かれていれば) | 受付フォルダ(Amazon S3) |
| 読み取り結果 | 全文、キーと値、表、質問への答え、請求書の標準項目と明細、それぞれの信頼度 | AWS Textract |
| 輸入台帳 | ハウスAWB番号、マスターAWB番号、荷主、仕出人、インボイス番号、発注番号、通関の状態 | 航空輸入課のスプレッドシート |
| 照合の規則の表 | 荷主ごとの重量の許容差、梱包の数を取る書類、分割の貨物の扱い | 荷主と決めた条件を表にしたもの |
質を決めるのは、照合の規則の表です。 許容差を決めずに比べると、包装材の重さの違いで毎回印が付きます。
AWBには発注番号が書かれていないことが多いので、インボイスの発注番号で台帳の行を決め、AWBはハウスAWB番号で結びます。
データの取得方法を決める
AWBは StartDocumentAnalysis で読みます。 S3の場所と FeatureTypes を渡して始め、完了は NotificationChannel に指定した Amazon SNS のトピックに通知されます。状態が SUCCEEDED なら GetDocumentAnalysis で結果を取ります。
| 指定するもの | 値 | 理由 |
|---|---|---|
FeatureTypes | FORMS、TABLES、QUERIES | 欄のキーと値、個数と重量の表、名前で受け取りたい項目 |
QueriesConfig | 質問の文と Alias の組 | 番号や重量を項目名で受け取る |
ClientRequestToken | ファイルのハッシュ | 同じ書類で二重に読み取りを始めない |
JobTag | 書類の種類とフォワーダーの識別子 | 完了の通知から書類の種類を引く |
Alias | 質問の文 |
|---|---|
MAWB_NO | What is the master air waybill number? |
HAWB_NO | What is the house air waybill number? |
PIECES | What is the total number of pieces? |
GROSS_WEIGHT | What is the total gross weight and its unit? |
CHARGEABLE_WEIGHT | What is the chargeable weight? |
FLIGHT | What is the flight number and date? |
GOODS | What is the nature and quantity of goods? |
質問は英語の文書でしか使えず、1ページあたり非同期で30個までです。 答えが見つからなければ空のまま返るので、空のときは全文から Pieces、Gross Weight、Chargeable を含む行を探し、それでも無ければ missing にします。
インボイスは StartExpenseAnalysis で読みます。 請求書・領収書から、仕入先や品目、合計などを取り出す非同期の処理で、結果は GetExpenseAnalysis で取ります。入力はJPEG、PNG、PDFです。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| インボイス番号、日付、発注番号 | INVOICE_RECEIPT_ID、INVOICE_RECEIPT_DATE、PO_NUMBER | 台帳の行を決める |
| 品名と数量 | 明細の ITEM、QUANTITY、UNIT_PRICE、PRICE | 品名の照合と台帳への記録 |
| 梱包の数、重量 | 標準項目に当たらない OTHER の項目と、その LabelDetection | AWBとの照合 |
梱包の数と重量は、請求書の標準項目にありません。 標準に当たらない項目は OTHER として返り、書類に書かれていた項目名が LabelDetection に入ります。Total Cartons、Gross Weight、Net Weight といった項目名から、どの値が何かを生成AIに決めさせます。
結果は1回最大1,000ブロックで区切られ、NextToken が返る限り呼び直します。輸入台帳と照合の規則の表は Python が読み、生成AIには渡しません。
AIへ渡す前に整形する
- 形式の確認 … JPEG、PNG、PDF、TIFF であることを確かめます。インボイスを請求書の分析に回すのはJPEG、PNG、PDFだけで、TIFFはPDFに変換します
- パスワードの確認 … PDFはパスワードで保護されていてはいけないとされています。保護されたものは送り元に解除したものを頼みます
- サイズとページ数の確認 … 非同期の処理で、PDFとTIFFは500MB・3,000ページまでです
- 書類の振り分け … ファイル名、メールの件名、1ページ目の見出しの語(
Air Waybill、Commercial Invoice、Packing List)で、AWB・インボイス・その他に分けます - 言語の確認 … 6言語に入らない書類は読み取りに回さず、担当者が目で見る一覧に入れます
- 1つのPDFに複数の書類が入っているものの分割 … AWBとインボイスが1つのPDFにまとまって届くことがあります。ページごとの見出しで分け、それぞれの読み方に回します
6番目を省くと、AWBの運賃の欄が請求書の合計として返ります。
AIに処理させる
させるのは、AWBとインボイスから値を読み取り、その値が「何の数で、どの単位か」を書き出すことです。 照合と許容差の判定はさせません。
| 見るもの | 取り出し方 | 判断できないときの扱い |
|---|---|---|
| AWB番号 | マスターとハウスを分けて原文のまま | どちらか決まらなければ ambiguous |
| 便名と空港 | 便名、日付、出発空港、到着空港を原文のまま | 書かれていなければ missing |
| AWBの個数 | 原文と数値。マスターかハウスかを付ける | 数字が読めなければ unreadable |
| AWBの重量 | 総重量と運賃計算重量を分け、単位(kg/lb)を付ける | 単位が無ければ unit_unknown |
| AWBの品名 | 原文のまま | 書かれていなければ missing |
| インボイスの数量 | 明細の行ごとに数量と単位(pcs、sets など) | 単位が無ければ空 |
| インボイスの梱包の数 | 項目名と値を原文のまま | 書かれていなければ not_stated |
| インボイスの重量 | 総重量か正味重量かを分け、単位を付ける | 種類が決まらなければ ambiguous |
重量の「総重量か正味重量か、運賃計算重量か」を分けるのが、いちばん大事な区別です。 AWBの総重量とインボイスの正味重量を比べると、包装材の分だけいつも食い違います。種類が分からない重量は、比べずに not_comparable にします。
| させないこと | 理由 |
|---|---|
| 個数・重量が合っているかの判断 | 照合の規則の表で Python が行う |
| 単位の換算 | ポンドとキログラムの換算は Python が行う |
| 書かれていない梱包の数の補完 | 明細の数量から推し量ると、比べられない値を比べることになる |
| AWB番号の補正 | 1桁違うと別の貨物になる |
| 食い違いの原因の推測 | 分割の出荷か、書き誤りかは人が確かめる |
3行目がいちばん起きやすい失敗です。 明細の数量の合計を個数として返すと、100個の商品を3箱で送った貨物が、AWBの3個と食い違って見えます。
指示内容を固定する
あなたは物流会社の航空輸入課で、英文のAWBとインボイスの記載を
記録する担当です。OCRの読み取り結果だけを使ってください。
推測で埋めないでください。
【AWBから取り出す項目】
mawb_no、hawb_no、flight_raw、origin_raw、destination_raw、
pieces_raw、pieces、pieces_level(master / house / unknown)、
gross_weight_raw、gross_weight、gross_weight_unit(kg / lb / unknown)、
chargeable_weight_raw、goods_raw
【インボイスから取り出す項目】
invoice_no、invoice_date、po_no、
lines(配列:item_raw、quantity、quantity_unit)、
packages_raw、packages、
weights(配列:label_raw、kind(gross / net / unknown)、value、unit)
【status の選び方】
- ok ............. 値が読み取れており、その項目として解釈できる
- missing ........ 書かれていない
- not_stated ..... インボイスに梱包の数が書かれていない
- unreadable ..... 文字は検出されているが値として確定できない
- ambiguous ...... 候補が複数ある、または種類が決まらない
- unit_unknown ... 重量の単位が決まらない
【厳守事項】
- マスターAWBとハウスAWBを区別してください。混載の書類では
マスターの個数・重量を、ハウスの値として入れないでください。
- 重量は、総重量(gross)、正味重量(net)、運賃計算重量
(chargeable)を分けてください。項目名から決まらなければ
kind を unknown にしてください。
- 単位は書類に書かれたものだけを入れてください。kg と lb を
換算しないでください。
- インボイスに梱包の数が書かれていない場合は not_stated に
してください。明細の数量の合計で埋めないでください。
- AWB番号は読み取った文字列をそのまま入れてください。
桁を補ったり、似た文字に直したりしないでください。
- 個数や重量が合っているか、食い違いの理由が何かを書かないでください。
- AWBでもインボイスでもない書類(パッキングリスト、運賃の請求書、
原産地証明書など)と判断した場合は、項目を取り出さず
document_type に種類を書いてください。
【書類の種類】{document_type_hint}
【読み取り結果】{textract_result}
「明細の数量の合計で埋めない」を明記しないと、埋めます。 梱包の数の欄が無いインボイスで、何か数を返そうとして明細の数量を足し合わせ、後段の照合でAWBの個数と大きく食い違って見えます。
出力形式を固定する
Claude API の構造化出力(output_config.format に json_schema を指定)で、書類ごとに次の形のJSONを受け取ります。
{
"file": "",
"document_type": "air_waybill",
"mawb_no": "000-00000000",
"hawb_no": "HKG26100123",
"flight_raw": "XX123/10OCT",
"pieces_raw": "5",
"pieces": 5,
"pieces_level": "house",
"gross_weight_raw": "86.5 K",
"gross_weight": 86.5,
"gross_weight_unit": "kg",
"chargeable_weight_raw": "120.0",
"goods_raw": "ELECTRONIC PARTS",
"items": [
{ "item": "pieces", "status": "ok", "confidence": 0, "source": "" }
]
}
インボイスは document_type を commercial_invoice とし、invoice_no、po_no、lines、packages、weights を同じ形の items とあわせて返させます。
1つ目の理由は、照合をプログラムの側に置けることです。 Python がハウスAWB番号とインボイス番号で組を作り、照合の規則の表を引いて、比べてよい値どうしだけを比べます。
| 印 | 付ける条件 |
|---|---|
ok | 個数が梱包の数と一致し、総重量どうしの差が許容差の範囲内 |
pieces_mismatch | AWBのハウスの個数と、インボイスの梱包の数が違う |
weight_mismatch | 総重量どうしの差が、荷主ごとの許容差を超える |
not_comparable | 梱包の数が not_stated、重量の種類が合わない、または単位が分からない |
needs_human | ambiguous、unreadable の項目がある、組になる相手が無い、または書類でない |
2つ目は、「比べられなかった」を記録として残せることです。 not_comparable は食い違いではありませんが、照合が済んでいない印として担当者の一覧に出します。 同じ仕出人で毎回 not_comparable になるなら、インボイスに梱包の数と総重量を書いてもらうよう、荷主から頼む先が決まります。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ(Amazon S3) | 保存の通知 | 書類の保存を検知して AWS Lambda を動かす |
| AWS Textract | API呼び出し(非同期) | AWBは文書の分析、インボイスは請求書の分析。完了の通知で結果を取る |
| Claude API | API呼び出し | 値の取り出しと、種類・単位の記録 |
| 輸入台帳 | 読み取りと書き込み | 行を決めて値を書き、照合の印を付ける |
| 照合の規則の表 | 読み取り | 荷主ごとの許容差と梱包の数を取る書類を引く |
| 通知 | メール | 毎朝の未着・要確認の一覧を担当者に送る |
通関業者への受け渡しと、税関への申告は、この構成からは行いません。 照合の済んだ件を通関業者のフォルダに移すのは担当者です。申告の内容をどうするかは、通関業者が書類を見て判断します。
人が確認する
担当者が開くのは、ok 以外の印が付いたものです。 印の無いものは台帳の値のまま扱います。human_check を「条件付き」としているのはこのためです。
pieces_mismatchとweight_mismatchを最初に片付ける … 分割の出荷か、書き誤りかをフォワーダーと仕出人に確かめますneeds_humanの値を画像で確定させる … AWB番号、マスターとハウスの別、重量の単位を確かめますnot_comparableを流し見る … 比べられなかった理由を見て、急ぎの貨物だけはパッキングリストで個数を確かめます- 解決した件を通関業者に渡す … 訂正されたインボイスが届いたら、照合をやり直してから渡します
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワードで保護されたPDF | 読めない。送り元に解除したものを頼む |
| 6言語に入らない書類 | 読み取りに回さず、担当者が目で見る |
| AWBとインボイスが1つのPDF | ページの見出しで分割してから、それぞれの読み方に回す |
| インボイスが複数のAWBに分かれて送られる | 照合の規則の表で分割の貨物とし、同じインボイス番号のAWBの個数と重量を合計して比べる |
| 1通のAWBに複数のインボイス | インボイスの梱包の数と重量を合計して比べる |
| 重量の単位が書かれていない | unit_unknown。比べずに not_comparable |
| 組になる相手の書類が届かない | 「待ち」のまま毎朝の一覧に出す |
ジョブが FAILED または PARTIAL_SUCCESS | StatusMessage と Warnings のページ番号を記録し、そのページを人へ |
上から4行目と5行目は、組み方を規則の表に書いておかないと、正しい書類がすべて食い違いに見えます。
記録を残す
- 元のAWBとインボイスと、受け取った日時、送り元、メールの件名
- AWS Textract が返したJSONの全文と、使った質問の一覧
- Claude API が返したJSON(原文と、数値・単位・種類の解釈の両方)
- 照合の結果と、そのとき参照した照合の規則の表の版
- 担当者が印を覆した記録と、フォワーダー・仕出人への問い合わせの回答
- 訂正されたインボイスと、元のインボイスとの対応
最後の行は、通関の後で問い合わせがあったときに、どの版のインボイスで照合したかを引く材料になります。
04実装レベルの3段階
本記事の想定は半自動化です。 読み取りと転記と照合が自動になり、担当者は印の付いた件を確かめて問い合わせます。1件9分が3分になるのはこの段階です。 本格構成で足すのは、パッキングリストです。 読めば、インボイスとパッキングリストの数量、パッキングリストの箱の数とAWBの個数を、それぞれ照合できます。 段階を飛ばさないでください。 半自動化で not_comparable が多い仕出人と分割の多い荷主を先に知り、規則の表を整えてからパッキングリストに進みます。
05工数削減シミュレーション
導入後 400件 × 3分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 部品・サンプル・医療機器・電子部材などを航空便で月に数百件輸入する物流会社の輸入業務部門と、自社で輸入を管理する商社・メーカー・小売。フォワーダーや航空会社から英文のAWBとインボイスがPDFで届き、AWB番号・個数・重量を担当者が輸入台帳に手で写している場合。通関業者に書類を渡したあとで個数や重量の食い違いが分かり、通関が止まることがある場合。
- 航空便の輸入が月に数件の企業。フォワーダーの貨物追跡のデータ連携でAWBの項目を受け取れており、PDFを読む工程が無い場合。AWBやインボイスが英語以外(中国語・韓国語・日本語など)で届くことが多い場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めず、手書きは英語のみです)。なお、食い違いの原因の特定、仕出人への訂正の依頼、税関への申告内容の判断は、輸入業務の担当者と通関業者が行うもので、この構成では代替できません。
07最小構成で試す方法
- 先月の航空貨物から30件を選ぶ(混載でマスターとハウスが両方あるもの、重量がポンドで書かれたもの、インボイスに梱包の数が無いもの、分割で送られたものを必ず入れる)
- 手元の生成AIの画面にAWBとインボイスを1件ずつ貼り付け、「このAWBのマスターとハウスの番号、個数、総重量と単位、運賃計算重量、品名を、書かれたとおりに表にしてください。インボイスの梱包の数と重量(総重量か正味重量か)も表にしてください。書かれていない値は『記載なし』とし、明細の数量で埋めないでください」と指示する
- 出てきた表を、台帳の当時の値と、通関業者から問い合わせがあった件の記録と見比べる
30件は必ずやってください。 仕組みを組む前に、マスターとハウスの区別、重量の種類と単位、梱包の数の補完を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 番号・個数・重量の種類と単位を原文どおりに取り出した | OCRのAPIと照合の処理に進む |
| 梱包の数を明細の数量で埋めた | 補完を禁じる指示を足す。直るまで先に進まない |
| マスターの値をハウスとして返した | 混載の書類の見分け方を指示に足す。構成は有効 |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| AWBの個数とインボイスの数量を比べる | 梱包の数とだけ比べる。 書かれていなければ not_comparable |
| 総重量と正味重量を比べる | 重量の種類を記録し、総重量どうしだけを比べる |
| マスターの値を自社の貨物の値として記録する | マスターとハウスを分けて取り出し、照合はハウスで行う |
| ポンドとキログラムを取り違える | 単位を原文のまま残し、換算は Python で行う |
| 梱包の数を明細の数量で埋める | 補完を禁じ、not_stated で記録する |
| 1つのPDFにAWBとインボイスが入っている | ページの見出しで分割してから読む |
| 分割の出荷が全部食い違いに見える | 照合の規則の表で分割を扱い、同じインボイス番号で合計する |
| 許容差を決めずに比べて印が増える | 荷主と許容差を決め、表に持たせる |
上の2行が、この構成の失敗のほとんどです。 どちらも意味の違う値を並べる誤りで、印が当てにならなくなると、担当者は結局すべての書類を自分で見比べるようになります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 荷主と仕出人の名称と住所、AWB番号、品名、数量、単価、インボイスの金額です。個人の情報はほとんど含みませんが、荷主の仕入先と仕入値は外に出せない情報です。
- 外部へ渡す範囲を、読み取りに必要なものに限る … 生成AIに渡すのはAWBとインボイスの読み取り結果だけです。輸入台帳、照合の規則の表、他の荷主の情報は渡しません
- 単価と金額を、照合に使わない項目として扱う … 個数と重量の照合に単価は要りません。台帳に金額を写すかは荷主との取り決めで決め、写さないなら生成AIの出力からも外します
- 仕出人への連絡を自動で送らない … 食い違いの問い合わせは、担当者がフォワーダーと荷主に確かめてから行います
- 荷主ごとに見られる範囲を分ける … 台帳を荷主に共有するときは、その荷主の行だけが見えるようにします
誤りが起きた場合のリスクは、食い違いを見落としたまま通関業者に書類を渡し、申告の準備で止まることです。 比べられないものは比べない設計を崩さないでください。
10まず何から始めるか
1週目:照合の規則を表にする
荷主ごとに、重量の許容差、梱包の数を取る書類、分割の出荷の扱いを表にします。件数の多い上位5社の荷主から始めます。
2週目:30件で試す
先月の航空貨物から30件を選び、手元の生成AIの画面でAWBとインボイスの項目を表にさせます。マスターとハウスを分けられるか、重量の種類と単位を残せるか、梱包の数を補わないかを最優先で見ます。
3週目:書類の振り分けを作る
受付フォルダに入ったPDFを、AWB・インボイス・その他に分け、1つのPDFに複数の書類が入っているものを分割するところまで作ります。ここが誤ると、後段の読み取りがすべてずれます。
4週目:受付フォルダから台帳までをつなぐ
S3、Lambda、Textract、Claude API、Python の照合をつなぎ、台帳に値と印を書くところまで作ります。この時点では、件数の多い2社のフォワーダーの書類だけを対象にします。
2か月目: 対象を全フォワーダーに広げ、pieces_mismatch と not_comparable の件数を毎週数えて照合の規則の表を直します。3か月目以降: 毎朝の未着・要確認の一覧を運用に乗せ、1件9分が何分になったかを実測します。通関業者からの個数・重量の問い合わせが、書類が届いた日のうちに拾われるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 輸入申告は輸入(納税)申告書を税関長に提出して行い、ほかに仕入書(インボイス)、包装明細書、船荷証券又は海上運送状(航空貨物については航空貨物運送状)、運賃明細書、保険料明細書、契約書、価格表の提出が必要とされること。航空貨物運送状(AWB)が航空貨物の運送に関する荷送人と運送人の運送契約書であること | 税関: カスタムスアンサー 1107 輸入申告の際に必要な書類 | 2026-10-08 |
| 対応する形式がJPEG、PNG、PDF、TIFFであること。同期はPDF1ページ・10MB、非同期はPDFとTIFFで500MB・3,000ページであること。PDFはパスワードで保護できないこと。対応言語が英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語で、縦書きに対応しないこと。質問の検出は英語の文書だけで、非同期で1ページ30個までであること。手書きは英語のみであること | AWS: Set Quotas in Amazon Textract | 2026-10-08 |
StartDocumentAnalysis の FeatureTypes(TABLES/FORMS/QUERIES/SIGNATURES/LAYOUT)、QueriesConfig、ClientRequestToken、JobTag、NotificationChannel で Amazon SNS に完了を通知すること | AWS: StartDocumentAnalysis | 2026-10-08 |
GetDocumentAnalysis がキーと値・表とセル・質問と答えのブロックを返すこと。JobStatus(SUCCEEDED/FAILED/PARTIAL_SUCCESS ほか)、MaxResults(最大1,000)と NextToken、StatusMessage、Warnings | AWS: GetDocumentAnalysis | 2026-10-08 |
| 質問の応答が別名(Alias)と信頼度を持ち、答えが見つからなければ空のまま返ること | AWS: Queries | 2026-10-08 |
| StartExpenseAnalysis が請求書・領収書の非同期の分析で、JPEG、PNG、PDFを対象とし、完了を Amazon SNS に通知して GetExpenseAnalysis で結果を取ること | AWS: StartExpenseAnalysis | 2026-10-08 |
請求書の分析が INVOICE_RECEIPT_ID、PO_NUMBER、ITEM、QUANTITY、UNIT_PRICE、PRICE などの標準項目を返し、標準に当たらない項目は OTHER とされること。書類上の項目名が LabelDetection、値が ValueDetection に入り、それぞれ信頼度を持つこと | AWS: Analyzing Invoices and Receipts | 2026-10-08 |
構造化出力を output_config.format に json_schema を指定して受け取れること | Claude Docs: Structured outputs | 2026-10-08 |
申告に用いる書類とその内容の判断は、通関業者と税関の求めに従ってください。 本記事は税関のカスタムスアンサーで確認できた範囲だけを扱っており、貨物の種類によって必要な書類が変わる場合があります。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0946)についてのご相談はこちらから。
