Ruby で学ぶアメリカ税制 - 慈善的寄付控除の上限

最近は、アメリ所得税の項目別控除の話を調べています。どうも項目別控除は、IRS と納税者との熱い戦場の一つであるらしく、一つ一つの論点がかなり込み入っています。なんでなかなか話が先に進みません(というか自分の頭が悪いだけかもしれない)。今日は、項目別控除の一つである慈善的寄付(Charitable Contribution)控除の上限について考えます。

慈善的寄付控除は、適格団体(Qualified Organization)に対して行った寄付を所得から項目別控除できるという制度です。基本的に AGI の 20% までは、無条件に引けますからかなりお得な控除ですね。条件によっては AGI の 50% まで控除できます。この控除の上限はどうやって決まるのだろうというのが今日のお話です。

項目別控除の中でも、慈善的寄付控除の上限はかなりややこしい計算が必要です。実は「USCPA 集中講義」も Wiley も説明が今ひとつわかりません。IRS の Pub 526 を読んでようやく理解できました。この件にかぎらず、Wiley よりも本家の IRS の Publication のほうがわかりやすいと思うことがしばしばあります。Wiley はなるべく要約して書こうとして、かえってわかりずらくなっているのかも。ややこしい話をあれだけわかりやすく書く Publication の書き手たちはただ者ではありません。本当に頭のいい人たちなんでしょう。

ここでは、Pub 526 を下敷きに、その簡略化バージョンについて考えることにします。省いたのは、環境保護のための土地の寄付(qualified conservation contributions) とか寄付を信託(trust)して適格団体を受益者とした場合とか、比較的マニアックなケースだけです。

説明の便宜のため、次のような概念を定義します。適格団体を2つのグループに分けます。

50%団体
AGI の 50% の制限を受ける適格団体。国・地方自治体・教会・教育機関・病院など。
30%団体
50%団体ではないすべての適格団体

詳しい定義は、Pub 526 に譲ります。要するに寄付先によって控除の上限が決まってくるということですね。

寄付する財産の特徴を定義します。

キャピタルゲイン財産(Capital Gain Property, CGP)
仮に寄付時に売却したら長期キャピタルゲインが発生するような財産
普通財産
キャピタルゲイン財産ではないもの(Pub 526 の普通所得財産はここに含まれます。現金もそうです)

原則として、キャピタルゲイン財産は、寄付時の公正市場価格(FMV)で評価されます。普通財産に関しては、Basis か FMV の小さい方で評価されます。

最後に、寄付先の団体と寄付する財産の特徴から寄付の種類を定義します。

50%寄付
普通財産を50%団体に寄付
30%寄付
普通財産を30%団体に寄付
特別30%寄付
キャピタルゲイン財産を50%団体に寄付
20%寄付
キャピタルゲイン財産を30%団体に寄付

つまり寄付はこの4つのカテゴリーに分類され、それぞれ控除可能額が決まってきます。この計算がややこしいので、あとは Ruby のプログラムを見ていただくことにします。

class Property
  attr_accessor :deductible, :amount

  def initialize(amount)
    @amount = amount
    @deductible = 0
  end
 
  #agi AGI
  #ct50 50%寄付
  #ct30 30%寄付
  #sp30 特別30%寄付
  #ct20 20%寄付
  def self.set_deductible(agi, ct50, ct30, sp30, ct20)

    limit = agi * 0.5
    ct50.deductible = [ct50.amount, limit].min

    limit = [agi * 0.3, [0, agi * 0.5 - ct50.amount - sp30.amount].max].min
    ct30.deductible = [ct30.amount, limit].min

    limit = [agi * 0.3, [0, agi * 0.5 - ct50.amount].max].min
    sp30.deductible = [sp30.amount, limit].min

    limit = [agi * 0.2, agi * 0.3 -  sp30.amount, agi * 0.3 - ct30.amount, agi * 0.5 - ct50.amount - ct30.amount].min
    limit = [0, limit].max
    ct20.deductible = [ct20.amount, limit].min

  end
end

def main
  agi = 50000
  ct50 = Property.new(2000)
  sp30 = Property.new(30000)
  ct30 = Property.new(5000)
  ct20 = Property.new(0)

  Property.set_deductible(agi, ct50, ct30, sp30, ct20)
  puts "case1:"
  puts "ct50.deductible = %d" % ct50.deductible
  puts "ct30.deductible = %d" % ct30.deductible
  puts "sp30.deductible = %d" % sp30.deductible
  puts "ct20.deductible = %d" % ct20.deductible
  puts ""

  agi = 50000
  ct50 = Property.new(24000)
  sp30 = Property.new(0)
  ct30 = Property.new(5000)
  ct20 = Property.new(0)

  Property.set_deductible(agi, ct50, ct30, sp30, ct20)
  puts "case2:"
  puts "ct50.deductible = %d" % ct50.deductible
  puts "ct30.deductible = %d" % ct30.deductible
  puts "sp30.deductible = %d" % sp30.deductible
  puts "ct20.deductible = %d" % ct20.deductible
  puts ""
end

main

で計算結果が、

case1:
ct50.deductible = 2000
ct30.deductible = 0
sp30.deductible = 15000
ct20.deductible = 0

case2:
ct50.deductible = 24000
ct30.deductible = 1000
sp30.deductible = 0
ct20.deductible = 0

ですね。

まとめ

上の数字は Wiley の例題から持ってきました。でもこの例題自体、Wiley が Pub 526 からパクってきたものなんですよね。なんだかなあ。Wiley の中の人もこれについてはよくわかっていないような気がします。あと、20%寄付の控除可能額の計算式がおかしいような気がしなくもないのですが・・・でもこんなに気合いをいれなくてもいいのかも。さすがに AGI の50%近くを寄付する人というのは相当なにか特別な事情があるはずなので、滅多にはいないのでしょう。こういうことをしそうな高額所得者たちは、これよりも先に、項目別控除全体の AGI に依存する上限にぶつかってしまいそうです(後日談:この効果は AGI の 50% 近く寄付している場合は無視できるほど小さいことがわかった)。やれやれ。とりあえず今日はここまで。