仕訳データの消費税区分を一括チェックする
数千行の仕訳から、税率の取り違え・非課税と不課税の混同・インボイス経過措置の適用漏れを機械的に洗い出し、人が見るべき行だけを一覧にする方法です。プログラムはAIに書かせ、判定ルールは人が決めます。
1. Before ― 手元はどうなっているか
架空のIT企業、サンライズソリューションズ株式会社。月次の仕訳伝票をExcelで出力し、消費税区分の誤りを探しています。手元の仕訳データはこうなっています。
- 摘要欄が自由入力。「○○社 9月分」「9月度 業務委託」「請求書No.1234」と、書き方が担当者ごとに違う。
- 税区分が空欄の行がある。会計システムの初期値のまま登録された行。
- 1つの伝票に複数の明細が入っている。明細ごとに税区分が違うのに、伝票単位でしか見ていない行がある。
- 補助科目が使われていない。「支払手数料」に、振込手数料も海外送金手数料も専門家報酬も混ざっている。
- 件数が多い。月に1,200件前後あり、全件を目で見るのは現実的ではない。
2. 問題の分解 ― 何を整えれば進むのか
(a) 判定ルールを決める
科目と摘要のキーワードから、想定される税区分を表にする。
(b) 機械的に当てる
ルール表に沿って全件を判定する。ここは毎月同じ処理。
(c) 例外を人が見る
ルールと違う行を一覧にして、1行ずつ判断する。
(d) ルール表を育てる
正当な例外はルール表に足し、翌月の例外を減らす。
ルール表に沿った判定そのもの。毎月1,200件をAIに判定させると、月によって結果が変わる可能性があり、しかも根拠が残りません。ここはプログラム(またはExcelの関数)で機械的に処理し、結果を再現できる形にします。AIを使うのは、ルール表のたたき台作り、判定プログラムの作成、例外一覧の設計、そして新しいパターンが出たときの相談です。
3. AIに任せること/人が判断すること
- 判定ルールをもとにしたチェックプログラムの作成
- 全仕訳に対するルールの機械的な適用と、例外行の一覧化
- 「なぜ引っかかったか」の理由を行ごとに付けること
- ルール変更(控除割合の切替など)時のプログラム修正
- 判定ルール表の作成(科目・摘要のキーワード → 想定される税区分)
- 例外行の最終判断(本当に誤りか、正当な例外か)
- 訂正仕訳の起票と承認
- ルール表の更新と、その承認記録
4. 実行 ― AIとのやりとり
- ルール表を作る。Excelで「勘定科目」「摘要に含まれるキーワード」「想定される税区分」「根拠メモ」の4列を用意し、自社でよくある取引から30〜50行ほど埋めます。全部を網羅する必要はなく、件数の多いものと間違えやすいものから始めます。
- 仕訳データを書き出す。会計ソフトから当期の仕訳をCSV(またはExcel)で出力します。必要な列は、日付・勘定科目・摘要・金額・税区分・取引先・(あれば)登録番号の有無です。
- Claude Codeにプログラムを書かせる。下の指示文のように、ルール表と仕訳データの列名を伝えて、チェック用のプログラムを作らせます。動かすのはご自身のパソコンの中なので、仕訳データが社外に出ることはありません(AIに渡すのは列名とルール表の構造だけで済みます)。
- 例外一覧を人が見る。プログラムが出した「引っかかった行」の一覧を、理由ごとに確認し、誤りなら訂正、正当な例外ならルール表に追記します。翌月からは例外が減っていきます。
出力のイメージ(例外一覧の抜粋)
| 日付 | 勘定科目 | 摘要 | 税区分 | チェック | 理由 |
|---|---|---|---|---|---|
| 2026-08-12 | 会議費 | 打合せ弁当代(10名) | 課税10% | 2 | 摘要に「弁当」。軽減8%の可能性 |
| 2026-08-20 | 地代家賃 | 駐車場(更地)月額 | 課税10% | 3 | 土地の貸付は非課税の可能性(ただし駐車場設備がある場合は課税) |
| 2026-10-03 | 外注費 | デザイン制作(個人) | 課税10%・全額控除 | 5 | 登録番号なし。2026-10-01以降のため70%控除の経過措置の可能性 |
※ 説明用の架空の例です。実際の判定は取引の実態によります。
往復1回目 ― ルール表に無いものをAIが判定した
判定プログラムを作らせたところ、「摘要に『手数料』を含む行は課税仕入10%と判定する」という処理が入っていた。
ルール表に書いていない判定をAIが足しています。「手数料」には、振込手数料のほかに海外送金に関するものなど、扱いが異なりうるものが混ざります。一律に課税と判定すると、誤りを「正しい」と表示してしまう。誤りを見逃すより悪い状態です。
「ルール表に無いキーワードで判定しないでください。ルール表に該当しない行は『判定不能』として、例外一覧に出してください。プログラムの中に、ルール表に書いていない条件を書かないでください。」
ルール表に無い行が「判定不能」に回るようになりました。初回は判定不能が多く出ましたが、それは正しい状態です。
判定不能の行を見て、繰り返し出るものをルール表に追記します。追記には、なぜその区分なのかの根拠を1行添えて、承認を受けます。
往復2回目 ― 例外一覧が多すぎて使えなかった
1,200件のうち約300件が例外一覧に出た。全部見るのは現実的ではない。
例外一覧は、人が1行ずつ見られる量でなければ意味がありません。300件あると、結局見ずに流すことになります。
「例外一覧を、①金額の大きい順に並べる ②同じ理由・同じ科目・同じ取引先のものはまとめて1行にし、件数と合計金額を表示する、という形にしてください。」
300件が、まとめると48グループになりました。金額の大きい上位10グループで、例外の金額の大部分を占めていました。
上位から順に見ます。全部見るのではなく、金額の影響が大きいところから見て、どこまで見るかを自分で決めます。その判断と、見た範囲を記録に残します。
5. エラーと例外 ― うまくいかないとき
仕様表
| INPUT入れるもの | 会計システムから出力した仕訳伝票のExcelと、判定ルール表(科目・キーワード・想定される税区分・根拠)。 |
|---|---|
| PROCESSすること | 元ファイルは読むだけ。ルール表に沿って全件を判定し、ルールと異なる行・判定できない行を抜き出す。 |
| OUTPUT出るもの | 例外一覧(グループ化・金額順)と、判定結果の全件一覧、実行ログ。 |
| VALIDATION正しさの確かめ方 | 元データの件数=判定済み件数+判定不能件数。税区分ごとの金額合計が、会計システムの消費税集計表と一致するか。 |
| ERROR止める条件 | ルール表に無い列名がある/税区分の欄が空欄/金額が数値でない/件数が一致しない。ルール表に無い判定を足さない。 |
| RE-RUNやり直し | 同じ月のデータで何度でも実行でき、結果は同じ。ルール表を更新したら、同じ月を再実行して差分を確認する。 |
| CHANGE変更対応 | 税率や控除割合の変更は、プログラム本体ではなく設定値とルール表で切り替えられるようにする。変更の適用開始日を設定に持たせ、月をまたいでも過去月の再実行結果が変わらないようにする。 |
6. 検証 ― 正しいとどう言えるか
- 件数照合:元データの件数=判定済み+判定不能。
- 金額照合:税区分ごとの金額合計を、会計システムの消費税集計表と突き合わせる。
- 抜き取り:例外一覧の上位5件について、請求書などの原本と突き合わせる。
- 判定不能がゼロでないことの確認:毎月ゼロなら、ルールが緩すぎて何も弾いていない可能性を疑う。
- 見た範囲の記録:例外一覧のどこまでを確認したかを記録に残す。監査で聞かれるのはここです。
7. 注意点
8. After ― 翌月以降、何が変わるか
- 1,200件を目で見る作業が、例外の上位グループを見る作業に変わります。
- ルール表が毎月育ち、判定不能の件数が減っていきます。減り方そのものが、業務が整ってきた証拠になります。
- 判断の根拠がルール表に残るので、担当者が代わっても同じ判定になります。
- 制度改正が来ても、設定値とルール表の更新で対応できます。
- 先月の仕訳から「支払手数料」の行だけを抜き出し、摘要の書き方が何通りあるかを数える
- そのうち、税区分の判断が分かれうるものに印をつける
- 印がついたパターンを、ルール表の最初の5行にする
応用 ― 難易度を下げる場合
★〜★★:プログラムを作らず、Excelのフィルタと条件付き書式で同じ考え方を手動で行うこともできます。たとえば摘要に「弁当」を含む行を抽出して税区分を目視する、登録番号が空欄の行を抽出して日付で並べる、といった方法です。件数が少ない会社なら十分に実用的で、まずはここから始めて「ルール表」を育て、行数が増えたらプログラム化する順番が無理がありません。