1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIに請求書を作らせると消費税が1円ずれる問題を、適格請求書の検査スキルで止める

1
Posted at

困りごと

AIに請求書を作らせると、品目ごとに消費税を出して足すことがあります。

品目(税抜・10%) 金額 品目ごとの税(切捨て)
コピー用紙 1,999 199
トナー 2,999 299
ボールペン 999 99
合計 5,997 597

適格請求書では、端数処理は「一請求書当たり、税率ごとに1回ずつ」です(国税庁 https://www.nta.go.jp/publication/pamph/shohi/shohizei_11.pdf )。5,997 × 10% = 599.7 → 切捨てで 599 円。品目ごとに出すと 597 円になり、2円ずれます。

同じ資料で、適格請求書の記載事項は6つと決まっています(発行者名と登録番号・取引年月日・取引内容と軽減税率の印・税率ごとの合計と税率・税率ごとの消費税額・買い手の名称)。

作ったもの

JP Invoice Check(MIT・Python標準ライブラリのみ・外部通信なし)。
https://github.com/ayatrader/jp-invoice-check

Claude などの Agent Skill(SKILL.md)・コマンド・MCPサーバーの3つの形で使えます。スキルはAIに「税を暗算しないで、JSONにして検査を走らせる」よう指示します。

python -m jpinvoice examples/line_rounding_mistake.json
E_REDUCED_NOT_MARKED 8%の品目に軽減税率の対象である印(※など)がありません(記載事項3)。
E_TAX_LINE_ROUNDING 10%の税額 597 は品目ごとに端数処理した合計です。端数処理は1つの請求書につき税率ごとに1回: 正しくは 599(floor)。
E_TAX_LINE_ROUNDING 8%の税額 285 は品目ごとに端数処理した合計です。…正しくは 286(floor)。
E_BUYER_MISSING 交付を受ける事業者(買い手)の氏名・名称がありません(記載事項6)。
W_REGNO_CHECK_DIGIT 先頭の1桁が法人番号の検査用数字と合いません。…
  • 切捨て・四捨五入・切上げは事業者が選べるので、指定がなければ3つのどれかに合えば通し、どれを使ったかを返します
  • 登録番号は全角・ハイフンを整えて「T+13桁」と法人番号の検査用数字を確認します
  • 日付は西暦・和暦(令和・平成)・期間に対応
  • メッセージは英語と日本語の両方。テスト18件

できないこと

  • 登録番号が今も有効かは確かめません(通信しないため)。国税庁の公表サイトで確認してください
  • 個人事業者の番号では、検査用数字が合わないときも「注意」までにしています
  • 適格簡易請求書・返還インボイスなどの特例は対象外。税務の助言ではありません

足りない書式や、誤判定した請求書(架空の値で)を Issue で教えてもらえると、テストに足します。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?