Claudeで通関書類を照合する手順 — インボイスとB/Lの数量を突合
インボイス・パッキングリスト・B/LのPDFをClaudeに渡し、数量・重量・品名の不一致を表で返させる手順。プロンプト例、API呼び出し、結果の検証方法まで。
輸入の通関前に、インボイス(商業送り状)・パッキングリスト・B/L(船荷証券)の3書類を見比べる作業は、Claudeに任せやすい照合のひとつです。3つのPDFを同じ会話に添付し、数量・総重量・品名・梱包数の食い違いを「不一致の表」として返させれば、人が目で追う範囲を絞り込めます。
ただし返ってきた表をそのまま信じる運用は危険です。PDFの読み取りは画像認識を土台にしており、数字の読み違いが起こりえます。この記事では、突合表の設計、claude.aiとAPIそれぞれの渡し方、そして結果を検証する方法までを順に説明します。
3書類を突き合わせるとき、Claudeに渡せる量
まず入力の上限を押さえます。3書類なら数十ページに収まるのが普通ですが、同じ船積み分をまとめて照合するとファイル数とページ数が効いてきます。
PDFを渡すときの主な上限
claude.aiの添付
1チャット20ファイル
PDFは1,000ページまで
図表まで読むページ数
100ページ以下
101〜1,000ページはテキストのみ
APIのリクエスト
32MB
1リクエスト最大600ページ(コンテキスト1M未満は100)
claude.aiではPDFの本文テキストに加えて、100ページ以下なら図・表・画像の中身も読まれます。101ページ以上ではテキストだけの処理になります。B/Lの本文がスキャン画像で、スタンプや手書きの補足が重要なときは、100ページ以下に収まる単位で渡してください。
APIでは各ページが画像に変換され、抽出したテキストと並べて渡されます。ページ数・サイズの上限はどちらもリクエスト全体に対するもので、PDF以外に同送する内容も含まれます。
先に決める — 照合キーと突合表の列
「3つを見比べて」とだけ頼むと、Claudeは目についた差異を気ままに挙げます。何を・どの書類のどの欄と・どう比べるかを先に決めておくと、返答がぶれません。
| 突合項目 | インボイス | パッキングリスト | B/L |
|---|---|---|---|
| 品名・品番 | インボイス明細行の品名 | パッキングリスト梱包ごとの品名 | B/L貨物の記載(総称のことが多い) |
| 数量 | インボイス明細ごとの数量 | パッキングリスト梱包ごとの入り数 | B/L総梱包数 |
| 重量 | インボイス記載があれば | パッキングリスト正味・総重量 | B/L総重量 |
| 荷姿・容積 | インボイス— | パッキングリスト寸法・容積 | B/L容積 |
| 当事者・番号 | インボイス売主・買主・インボイス番号 | パッキングリスト同左 | B/L荷送人・荷受人・B/L番号 |
上は書類の一般的な構成を想定した例で、実際の欄名や有無は発行元ごとに異なります。自社の取引で使う書式に合わせて列を作り替えてください。
ここで効くのは「書類によって粒度が違う」ことを前提にする点です。インボイスは明細行単位、パッキングリストは梱包単位、B/Lは貨物全体の合計というように、同じ数量でも見ている単位が異なります。突合表では、まず明細行を梱包に割り付けた合計を出し、その合計とB/Lの総数を比べる、という二段の比較を指示に書くと不一致の位置が絞れます。
claude.aiで3つのPDFを添付して頼む
claude.aiなら、3つのPDFを同じチャットにまとめて添付し、次のように指示します。
添付はインボイス(INV)、パッキングリスト(PL)、B/L(BL)の3つです。
次の手順で突き合わせ、結果を表で返してください。
1. INVの明細行ごとに、品名・品番・数量・単価・金額を抜き出す
2. PLの梱包ごとに、品名・入り数・正味重量・総重量・梱包数を抜き出す
3. INVの数量合計とPLの入り数合計を比べる
4. PLの総重量・梱包数の合計とBLの記載を比べる
5. 当事者名、インボイス番号、B/L番号の綴りを3書類で比べる
出力は次の列の表にしてください。
項目 / INVの値 / PLの値 / BLの値 / 判定(一致・不一致・読み取り不能) / 根拠(書類名とページ)
読み取れなかった値は推測せず「読み取り不能」と書いてください。
一致した項目も省かず、すべて行に出してください。指示のポイントは3つあります。
- 読めない値は「読み取り不能」と書かせる。推測で埋めさせない
- 一致した項目も行に出させる。不一致だけを返させると、見落としと一致の区別がつかなくなる
- 根拠として書類名とページを書かせる。人間が原本を開く場所が決まる
PDFをテキストより先に置くと精度が上がる、という推奨がAPI側にあります。claude.aiでも、ファイルを添付してから指示を書く順にしておくと無理がありません。
APIで3つのPDFを1リクエストに入れる
毎週のように船積みが発生するなら、APIで定型化できます。PDFは document ブロックとして content に並べ、最後にテキストの指示を置きます。大きなPDFはFiles APIでアップロードし、file_id で参照するとリクエストが軽くなります。
import anthropic
client = anthropic.Anthropic()
def upload(path):
with open(path, "rb") as f:
return client.files.upload(file=(path, f, "application/pdf")).id
ids = {name: upload(f"{name}.pdf") for name in ["inv", "pl", "bl"]}
instruction = open("compare_prompt.txt", encoding="utf-8").read()
content = [
{"type": "document", "source": {"type": "file", "file_id": ids[n]}}
for n in ["inv", "pl", "bl"]
]
content.append({"type": "text", "text": instruction})
message = client.messages.create(
model="claude-opus-5-5",
max_tokens=4096,
messages=[{"role": "user", "content": content}],
)
print(message.content[0].text)Files APIで送る場合は、source の type を file にして file_id を渡します。上のコードはその形を3ファイルに広げた例です。Amazon BedrockとGoogle Cloudではbase64でのPDF送信のみが使え、Microsoft FoundryでAzureにホストした環境ではFiles APIが使えません。クラウド経由で呼ぶ場合は、file_id ではなくbase64の document ブロックで書き換えてください。
BedrockのConverse APIでは、引用(citations)を有効にしないと図表の読み取りが落ち、基本的なテキスト抽出だけになります。B/Lのスタンプや表を読ませたいときは、この点を先に確認しておくと原因切り分けが楽です。詳しい症状はClaudeのBedrock ConverseでPDFの画像が読めない原因と直し方にまとめています。
不一致を機械的に扱えるよう、出力を構造化する
表を人間が読むだけなら前節の形で足ります。突合結果を後続の処理(Excelへの転記、システム登録前のチェック)に渡すなら、JSONで返させるほうが扱いやすくなります。
結果は次のJSONだけを返してください。説明文は不要です。
{
"rows": [
{
"item": "総梱包数",
"inv": null,
"pl": "24",
"bl": "24",
"status": "match | mismatch | unreadable",
"evidence": "PL p.3 / BL p.1"
}
],
"summary": {"mismatch": 0, "unreadable": 0}
}summary の件数は、rows を数え直した値と一致するか、受け取った側のコードで検算します。Claudeが自分で書いた件数は、行の実数と食い違うことがあります。
結果を信じる前の検証手順
照合の自動化で一番効くのは、数字の読み違いを人が気づける形で潰す工程です。
照合結果を確かめる4段階
- 1
不一致の行は、必ず原本の該当ページを開く
根拠欄のページ番号をたどり、値をその目で確かめます。ここは省略しない工程です。
- 2
一致の行は、重要項目だけ抜き取りで確かめる
総重量・総梱包数・B/L番号など、税額や申告に直結する項目を人が見ます。
- 3
読み取り不能の行は、より鮮明な原本で再実行する
スキャンの解像度や向きを直して、その行だけ再度照合します。
- 4
既知の不一致を仕込んだテスト書類で、定期的に試す
過去の書類をコピーし、数量を1つだけ書き換えたものを混ぜます。見つけられるか、毎回確かめます。
画像の理解には既知の制約があります。低品質・回転・200ピクセル未満の小さな画像では、誤読や作り話が起こりえます。個数を数える作業も、数が多く小さい対象では正確とは限りません。スキャンした書類が傾いていたり、FAXの再スキャンで文字がつぶれていたりする場合は、先に補正してから渡します。
仕込みテストは、手間のわりに効果が大きい検証です。数量を1つ書き換える、重量の桁を1つ変える、品名の綴りを1文字変える、といった差を意図的に作り、Claudeが拾うかを見ます。拾えない種類の差が分かれば、プロンプトの指示を足せますし、人が必ず見る項目も決められます。
つまずきやすい点
- PDFが重く、リクエストが失敗する: 小さい文字・複雑な表・画像の多いページは、ページ数の上限に届く前にコンテキストを埋めることがあります。書類を区間ごとに分け、埋め込み画像を軽くしてから再試行します。エラー文言の一覧は「Could not process PDF」400エラーの原因と対処法にあります
- パスワード付きPDFが通らない: 対応するのはパスワード・暗号化のない標準PDFです。船会社や代理店から届くPDFにロックがあるときは、解除してから渡します
- 20ファイルを超える船積みをまとめられない: claude.aiの添付は1チャット20ファイルまでです。船積みごとに会話を分けるか、APIで処理します
- 日本語と英語の品名が混ざる: インボイスは英語、社内の発注書は日本語という組み合わせでは、品名の同一性をClaudeに判断させる前に、対応表を渡しておくと誤判定が減ります。対応表自体は指示の中に表で埋め込んでかまいません
- 申告内容そのものの正否は判断材料にしない: 照合で分かるのは書類間の食い違いまでです。税番の適否や関税率の判断は、通関業者や税関の確認が前提になります
費用の見積もりと、大量処理のとき
PDFには追加料金がなく、通常のAPI料金が適用されます。1ページあたりのトークンは、内容の密度によって1,500〜3,000トークンが目安です。さらに各ページが画像としても扱われるため、画像のトークン計算が加わります。3書類で合計30ページなら、テキスト分だけで4.5万〜9万トークン前後になり、ここに画像分が上乗せされます。実際の値はトークンカウントで測ってください。
月に何百件もの船積みを処理する場合は、Message Batches APIでPDFを大量にまとめて流せます。同じ指示文を毎回付けるなら、プロンプトキャッシュも使えます。
手元のExcelと銀行明細の突合など、書類以外の照合はClaudeで取引照合し経理を自動化するが参考になります。PDF要約全般のコツはClaudeのPDF要約のコツに整理しています。
まとめ
3書類の照合は、突合表の列を先に決め、「読み取り不能」を許す指示にし、不一致の根拠をページ単位で返させると実務に乗ります。Claudeの出力は人の確認を減らす材料であり、確認そのものをなくす仕組みではありません。既知の不一致を仕込んだテスト書類で定期的に精度を測ると、任せてよい項目と人が見る項目の線引きがはっきりします。