請求書PDFをExcelの一覧にする
請求書のPDFを置いたフォルダから、Excel の一覧と支払予定表を作ります。読み取った金額は検算し、合わないものは「要確認」にして理由を書きます。
- 入力
- 請求書のPDF(文字を選択できるもの)
- 出力
- Excel 1ファイル(一覧・明細・支払予定の3シート)
- 確かめること
- 消費税の計算、二重請求、登録番号など12項目
読ませた請求書
架空の請求元4社の、書式の違う請求書を7枚作りました。02 以外の6枚には、二重請求や消費税の誤りなどの問題をわざと入れてあります。
ほかの3枚(04、05、06)は、01 の再発行、02 と同じ書式、文字のないPDF(スキャン画像の代わり)です。画像を押すとPDFが開きます。
できあがった Excel
7枚のうち、OK は 1枚、要確認は 6枚でした。要確認には理由が付きます。
一覧シート
| ファイル名 | 請求元 | 請求書番号 | 合計 | 判定 | 要確認の理由 |
|---|---|---|---|---|---|
| 01_ | 株式会社サンプル商事 | SS-2026-0931 | ¥99,000 | 要確認 | 二重請求の疑い:同じ請求元・請求書番号 SS-2026-0931 が 05_sample-shoji_SS-2026-0931_resend.pdf にもある |
| 02_ | 架空システムズ合同会社 | KS-0457 | ¥164,960 | OK | |
| 03_ | デザイン工房サンプル(架空) | DK-26-015 | ¥53,000 | 要確認 | 10%の消費税 5,000円 が対象額 48,000円 × 10% = 4,800円 と合わない(端数処理の差 1円 を超える) |
| 04_ | 架空システムズ合同会社 | KS-0471 | ¥88,000 | 要確認 | 支払期日 2026/09/10 が発行日 2026/10/10 より前 |
| 05_ | 株式会社サンプル商事 | SS-2026-0931 | ¥99,000 | 要確認 | 二重請求の疑い:同じ請求元・請求書番号 SS-2026-0931 が 01_sample-shoji_SS-2026-0931.pdf にもある |
| 06_ | 要確認 | PDFからテキストを抽出できない(スキャン画像の可能性。OCRは対象外) | |||
| 07_ | 架空運輸株式会社 | KU-1103 | 要確認 | 読み取れない項目:発行日、支払期日、合計 |
発行日・支払期日・小計・消費税・登録番号などの列は省いています。支払期日は下の支払予定シートにあります。全部の列は Excel で見られます。
支払予定シート
支払期日の順に並べ、基準日(ここでは 2026/10/15)までの残り日数を出します。期限を過ぎたものは赤、7日以内は黄色です。
| 支払期日 | 残り日数(基準日 2026/10/15) | 状態 | 請求元 | 請求書番号 | 合計 | 判定 |
|---|---|---|---|---|---|---|
| 2026/09/10 | -35 | 期限超過 | 架空システムズ合同会社 | KS-0471 | ¥88,000 | 要確認 |
| 2026/10/20 | 5 | 7日以内 | 架空システムズ合同会社 | KS-0457 | ¥164,960 | OK |
| 2026/10/31 | 16 | 株式会社サンプル商事 | SS-2026-0931 | ¥99,000 | 要確認 | |
| 2026/10/31 | 16 | 株式会社サンプル商事 | SS-2026-0931 | ¥99,000 | 要確認 | |
| 2026/11/30 | 46 | デザイン工房サンプル(架空) | DK-26-015 | ¥53,000 | 要確認 | |
| 支払期日不明 | 要確認 | |||||
| 支払期日不明 | 架空運輸株式会社 | KU-1103 | 要確認 |
ファイル名の列は省いています。
この Excel をダウンロード10KB
確かめていること
次のどれかが成り立たないと、要確認にして理由を書きます。
- 小計+消費税=合計
- 明細の合計=小計
- 明細の数量×単価=金額
- 消費税額=対象額×税率(差1円まで)
- 合計の記載が複数あれば一致する
- 同じ税率の消費税・対象額の記載が複数あれば一致する
- 登録番号が T+13桁
- 法人の登録番号の検査用数字
- 支払期日が発行日より前でない
- 同じ請求元・請求書番号が他のファイルにない(二重請求)
- 必須の項目が読めている
- PDFから文字を取り出せる
消費税は、端数処理の違い(切り捨て・切り上げ・四捨五入)として1円までの差は認めます。登録番号の検査用数字は、法人番号の算式(国税庁の資料と省令)で確かめます。
AI の使い方
ルールで読めなかった項目だけを AI(Claude)に読ませます。AI が返した値は、PDF の本文に実際に書かれている値と照合し、照合できたものだけを使います。使った値も、ルールで読んだ値と同じ検算にかけます。
07 では、発行日・支払期日・合計を AI で補い、検算も通って OK になりました。Excel の「読み取り」列に「ルール+AI(発行日、支払期日、合計)」と出るので、どの項目を AI で補ったかが分かります。
AI を使うかどうかは実行のたびに選べます。使うときは、対象のPDFのテキストが Anthropic に送られます。使わなければ、外部には何も送りません。
できないこと
- スキャンした画像のPDF(文字のないPDF)は読めません。OCRは対象外です。要確認にして理由を出します。
- サンプルの4種類と違うレイアウトでは、ルールで読めない項目が出ることがあります。AI で補えますが、本文と照合できない値は使いません。
- 内税の表示(「うち消費税」)は税額として読みません。
- 1ファイルに1枚の請求書を前提にしています。
- 登録番号が国税庁の公表サイトに実在するかは照会しません。
- 外貨は扱いません。
使っている技術
Python 3.10 のコマンドラインツールです。PDFの読み取りに pdfplumber、Excel の書き出しに openpyxl を使っています。テストは151件で、動作は macOS で確かめています。



