適格請求書の記載事項をClaudeで点検 — 受け取ったPDF請求書の不備を洗い出す
受け取った請求書PDFが適格請求書の記載事項を満たすかを、項目表・再計算・依頼文の3段でClaudeと点検する手順。登録番号の形式や軽減税率の表示、小売業などの特例の扱いまでまとめました。
受け取った請求書PDFが適格請求書の記載事項を満たすかどうかは、Claudeに「記載事項の項目表」を作らせ、数字の突合だけをスクリプトで確かめる分担にすると、見落としが減ります。仕入税額控除を受けるには、記載事項が揃った請求書等の保存が要件になるためです。
この記事では、国税庁のタックスアンサーNo.6625に載っている6項目を点検ルールに置き換え、PDFを読ませて項目表にし、不備のあった請求書には発行元への依頼文まで作る流れを説明します。税務上の最終判断はこの流れの外に置き、経理担当者や税理士が行う前提です。
点検の対象は6項目 — 受け取る請求書のルールを先に固定する
仕入先から受け取る請求書や納品書が適格請求書になるには、次の6項目が書かれている必要があります。No.6625の表の「取引の相手方から交付を受ける、請求書、納品書等」の行がこれにあたります。
| 番号 | 記載事項 | PDFで見る場所の例 |
|---|---|---|
| ① | 記載事項書類作成者の氏名または名称、登録番号 | PDFで見る場所の例発行元の社名欄、右上の番号欄 |
| ② | 記載事項取引年月日 | PDFで見る場所の例請求日・納品日・対象期間 |
| ③ | 記載事項取引内容(軽減税率の対象品目である旨) | PDFで見る場所の例明細の品名欄、※や☆の印 |
| ④ | 記載事項税率ごとに区分して合計した税込対価または税抜対価の額、適用税率 | PDFで見る場所の例合計欄、税率別の小計 |
| ⑤ | 記載事項税率ごとに区分した消費税額等 | PDFで見る場所の例税率別の消費税欄 |
| ⑥ | 記載事項書類の交付を受ける事業者の氏名または名称 | PDFで見る場所の例宛名欄 |
この6項目をそのままClaudeに渡すのが出発点です。ただし、一般的な「請求書の必須項目」を尋ねる形では、モデルの記憶に頼った答えになります。点検の基準は、上の表を自分でプロンプトに貼って固定してください。
登録番号の形式も基準に入れます。No.6498には、登録番号の構成が、法人番号を持つ課税事業者なら「T+法人番号」、それ以外なら「T+13桁の数字」とあります。どちらも「Tに数字13桁」という形なので、形式の点検は機械的にできます。
発行元が違うと、確かめる書類の種類も変わる
No.6625の表には、受領する請求書のほかに3種類の行があります。自分が作る仕入明細書・仕入計算書、媒介または取次ぎに係る業務を行った事業者から受ける請求書、輸入許可書です。仕入明細書は①の主語が自社になり、相手方の登録番号を書く側に回ります。しかも、取引の相手方の確認を受けたものに限られます。
この手順の対象は受領した請求書です。仕入明細書を点検するときは、記載事項の表を差し替えてから同じ流れを回します。
手順1: 点検ルールを渡し、PDFを項目表にする
Claudeには、PDFと一緒に点検ルールを渡します。ここで効くのは、判定を「〇か×か」にせず、次の4値に分けさせることです。
- 記載あり: 該当の文字列を原文のまま引用できる
- 記載なし: PDF上に該当する情報が見当たらない
- 判読不能: 画像が粗い、文字が欠けているなどで読めない
- 要確認: 書いてあるが、別の項目と食い違う、または特例が絡む
「×」と一括りにすると、本当に書いていないのか、読み取れなかったのかが区別できません。依頼文を出す前に、この区別が必要になります。
プロンプトの骨子は次のとおりです。
添付のPDFは、取引先から受け取った請求書です。
次の6項目を点検し、JSONで返してください。
①書類作成者の氏名または名称、登録番号
②取引年月日
③取引内容(軽減税率の対象品目である旨を含む)
④税率ごとに区分した合計額(税込または税抜)と適用税率
⑤税率ごとに区分した消費税額等
⑥交付を受ける事業者の氏名または名称
判定は 記載あり / 記載なし / 判読不能 / 要確認 の4値。
「記載あり」には、PDFの該当箇所を原文のまま引用すること。
ページ番号も付けること。
推測で補わないこと。見当たらない項目は「記載なし」とすること。「推測で補わない」の一行は省かないでください。登録番号がPDFのどこにも無いときに、社名から番号を埋めてしまう誤りを避けるための指示です。
PDFの形式にも条件がある
API経由でPDFを渡す場合、リクエスト全体で32MB、1リクエストあたり最大600ページ(コンテキストウィンドウが1Mトークン未満のときは100ページ)という上限があります。パスワードや暗号化のかかったPDFは対象外で、標準的なPDFである必要があります。
PDFの各ページは、抽出されたテキストとページ画像の両方としてClaudeに渡されます。画像としても渡されるので、スキャンした請求書も読み取りの対象になります。ただし文字が小さい書類や表が込み入った書類は、ページ数の上限に届く前にコンテキストを使い切ることがあります。請求書が月末にまとめて届く場合は、1通ずつ処理するか、上限に近いなら分割してください。
渡す前に伏せるもの
請求書には、振込先の口座番号や担当者名が載っています。点検に必要なのは上の6項目だけなので、口座番号の欄を黒塗りしたPDFを使うのが無難です。個人事業主の請求書では、氏名や自宅住所が発行元として載ります。取引先の情報を外部サービスに渡してよいかは、社内の取り扱いルールに沿って決めてください。
手順2: 数字の整合は、Claudeに任せずスクリプトで確かめる
項目表で「記載あり」と判定されても、中身が正しいとは限りません。④と⑤は、税率ごとの合計額と消費税額が合っているかを計算で確かめる箇所です。言語モデルに暗算させるより、抽出された数字をスクリプトに渡すほうが確実です。
そこで、手順1のJSONに加えて、Claudeに次の形でも返してもらいます。
{
"issuer_name": "株式会社サンプル",
"registration_no": "T123456789012",
"date": "2026-09-30",
"recipient_name": "有限会社テスト",
"totals": [
{"rate": 10, "amount": 100000, "basis": "excl", "tax": 10000},
{"rate": 8, "amount": 5000, "basis": "excl", "tax": 450}
]
}basis は、amount が税抜(excl)か税込(incl)かを表します。この形式で受け取ったJSONを、次のスクリプトに通します。
import json, re, sys
REQUIRED = ["issuer_name", "registration_no", "date", "recipient_name"]
def check(doc):
out = []
for key in REQUIRED:
if not doc.get(key):
out.append(("記載なし", key))
no = doc.get("registration_no") or ""
if no and not re.fullmatch(r"T\d{13}", no):
out.append(("形式不一致", f"registration_no={no}"))
for t in doc.get("totals", []):
rate, amount, tax = t.get("rate"), t.get("amount"), t.get("tax")
if rate is None:
out.append(("記載なし", "適用税率")); continue
if tax is None:
out.append(("記載なし", f"税率{rate}%の消費税額")); continue
if t.get("basis") == "incl":
calc = amount * rate / (100 + rate)
else:
calc = amount * rate / 100
if abs(calc - tax) >= 1:
out.append(("要確認", f"税率{rate}%: 記載{tax} / 再計算{calc:.1f}"))
return out
if __name__ == "__main__":
doc = json.load(open(sys.argv[1], encoding="utf-8"))
results = check(doc)
for label, detail in results:
print(f"{label}\t{detail}")
print("指摘なし" if not results else f"{len(results)}件")上のJSONで動かすと、次の結果になります。このJSONは動作確認用に作った例です。
python3 check_invoice.py sample.json形式不一致 registration_no=T123456789012
要確認 税率8%: 記載450 / 再計算400.0
2件例の登録番号は、Tのあとが12桁しかありません。税率8%の行は、5,000円に対する消費税額が450円と書かれており、再計算の400円とずれています。どちらもClaudeの目視では見落としやすい種類の不備です。
スクリプトが出した「要確認」は不備の断定ではありません。端数の扱いや、明細ごとの積み上げと合計の差で小さなずれが出ることがあるため、金額差が出た請求書は人が原本と見比べます。逆に、スクリプトが「指摘なし」を返しても、登録番号が実在するかどうかまでは確かめていません。
登録番号の実在は別の手順に任せる
形式が合っていても、その番号が実際に登録されているとは限りません。国税庁適格請求書発行事業者公表サイトで公表されている情報と照合する手順は、適格請求書発行事業者のWeb-APIをClaude Codeで呼ぶ手順にまとめています。この記事の点検では、番号があるか、形式が合うかまでを扱います。
不備と誤判定を分ける — 記載方法が認められている例外
点検でいちばん誤判定が出やすいのは、「書き方が違うだけで要件は満たしている」請求書です。No.6625には、次の記載方法も認められると書かれています。
- 課税期間の範囲内で、一定の期間内の取引をまとめて記載する
- 商品名が個々の名称でなく包括的な記載でも、課税資産の譲渡等にあたることが明らかである
- 商品名が記号や番号で表示されていても、記号表などで課税資産の譲渡等にあたることが明らかである
- 軽減税率の対象品目に「※」や「☆」を付ける。または、同一請求書内で税率ごとに商品を区分する、税率ごとに請求書を分けて発行する
これをプロンプトに入れないと、明細に「軽減税率対象」という文言が無いだけで「記載なし」と判定されやすくなります。③の判定には、次の補足を添えてください。
③の判定では、次の表示も記載ありとして扱うこと。
- 品目に※や☆が付き、凡例にその意味が書かれている
- 税率ごとに明細が区分され、区分見出しに税率が書かれている
- 税率ごとに別の請求書として発行されている
該当する場合は、どの方法かを備考に書くこと。もう一つ、取引内容が複数ページや別紙にわたるケースがあります。請求書本体には「別紙のとおり」とだけあり、明細が別紙に載っている場合です。PDF全体を渡して判定させ、別紙のページ番号を引用させます。別紙が別ファイルのときは、同じ請求書として束ねて渡してください。
小売業・飲食店・タクシーの特例
注1として、小売業・飲食店業・タクシー等の事業者が交付する書類は、④の適用税率と⑤の消費税額等がどちらか一方の記載で足りるとされています。この場合、⑥の記載も不要です。
仕入先がこうした業種のとき、レシート形式のPDFで宛名が無くても不備にはなりません。業種はPDFから読み取れないことが多いため、プロンプトには「宛名が無い、または税率か税額の片方しかない場合は、不備と決めず『要確認(特例の可能性)』とすること」と書いておきます。判定を人に回すのが安全です。
税率が変わる期間の書類
No.6625には、令和9年4月1日から令和11年3月31日までの2年間、飲食料品の譲渡について消費税率が引き下げられるとの注記があります。この期間の請求書を点検するルールには、税率の値を固定で書かないでください。「10%と8%のどちらか」のように固定すると、正しい請求書を要確認に回してしまいます。税率の妥当性は、取引日と対象品目に照らして人が見る項目に分けておくのが無難です。
手順3: 不備のある請求書に、発行元への依頼文を作る
項目表で「記載なし」または「判読不能」が出た請求書は、発行元に再発行か記載の追加を依頼します。Claudeには、項目表から依頼文の下書きまで作らせます。
次の点検結果をもとに、取引先への依頼メールの下書きを作ってください。
条件:
- 宛先は請求書の発行元の経理担当者
- 不足している項目だけを、番号付きで具体的に書く
- 登録番号が無い場合は、適格請求書として受領できない旨を事務的に伝える
- 責める調子にしない。再発行を依頼する文面にする
- 請求書の番号と日付を冒頭に書く不備が登録番号だけなら、依頼文は短くなります。「要確認」が混ざる請求書は、依頼する前に人が原本を確認してください。Claudeの判定が誤読だった場合、取引先に誤った依頼を送ってしまいます。
依頼文に入れてはいけないのは、法的な結論です。「この請求書では仕入税額控除ができません」のように断定する文面は、特例の可能性を残したまま送ると誤りになります。依頼文は「記載事項を確認させてください」の水準にとどめます。
運用の分担と保存
点検結果の持ち方は、最小限なら次の3列で足ります。
| 列 | 内容 |
|---|---|
| 請求書の識別 | 内容発行元・請求日・請求番号 |
| 判定 | 内容6項目ごとの4値 |
| 対応 | 内容依頼済み・再発行待ち・確認済み |
No.6625には、請求書等の保存期間も書かれています。保存は、閉鎖または受領した日の属する課税期間の末日の翌日から2か月を経過した日から7年間です。6年目と7年目は、帳簿または請求書等のどちらか一方を保存すればよいとされています。確定申告の期限の延長特例を受けている法人は、起算が3か月を経過した日になります。
点検に使った項目表やJSONは、請求書本体の代わりにはなりません。点検結果を残す場合は、請求書のPDFと対応づけて同じ期間保存してください。
電子インボイス(JP PINT)のようにデータで受け取る請求書は、PDFを読むより構造化データを直接照合するほうが確実です。その手順は電子インボイスの受領データをClaudeで読みPDFと照合する記事で説明しています。発注書・納品書・請求書の数量や金額を突き合わせる場合は三点照合の手順が先に使えます。経過措置の仕入税額控除を割合別に集計するなら、Claude for Excelの試算手順につなげられます。
つまずきやすい点
引用が原文と違う。「原文のまま引用」と指示しても、全角と半角の違いなどで微妙に変わることがあります。登録番号と金額は、引用した文字列とPDFを人が一度見比べてください。
複数の請求書を一度に渡すと、項目が混ざる。1通ずつ処理し、結果のJSONに請求書の識別情報を必ず持たせます。
「記載あり」の判定が多すぎる。発行元の社名が見出しにあるだけで①を記載ありとする誤りが出ます。①は登録番号の有無まで見る項目だと、判定の条件に書いてください。
書式がテンプレートごとに違う。取引先ごとにレイアウトが違うため、初回は結果を目視で確認し、判定がずれる取引先は備考に書き残します。同じ取引先から毎月届くなら、その備考をプロンプトに足すと精度が安定します。
まとめ
Claudeに任せられるのは、PDFから6項目の有無と引用箇所を拾う作業です。形式と計算の点検はスクリプトに寄せ、特例にあたるかどうかと、取引先への依頼の可否は人が決めます。判定を4値に分け、認められている記載方法をプロンプトに入れておけば、「書き方が違うだけ」の請求書を不備として扱う誤りを減らせます。