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つのグループに分けます。
詳しい定義は、Pub 526 に譲ります。要するに寄付先によって控除の上限が決まってくるということですね。
寄付する財産の特徴を定義します。
- キャピタルゲイン財産(Capital Gain Property, CGP)
- 仮に寄付時に売却したら長期キャピタルゲインが発生するような財産
- 普通財産
- キャピタルゲイン財産ではないもの(Pub 526 の普通所得財産はここに含まれます。現金もそうです)
原則として、キャピタルゲイン財産は、寄付時の公正市場価格(FMV)で評価されます。普通財産に関しては、Basis か FMV の小さい方で評価されます。
最後に、寄付先の団体と寄付する財産の特徴から寄付の種類を定義します。
つまり寄付はこの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 = 0case2:
ct50.deductible = 24000
ct30.deductible = 1000
sp30.deductible = 0
ct20.deductible = 0
ですね。
まとめ
上の数字は Wiley の例題から持ってきました。でもこの例題自体、Wiley が Pub 526 からパクってきたものなんですよね。なんだかなあ。Wiley の中の人もこれについてはよくわかっていないような気がします。あと、20%寄付の控除可能額の計算式がおかしいような気がしなくもないのですが・・・でもこんなに気合いをいれなくてもいいのかも。さすがに AGI の50%近くを寄付する人というのは相当なにか特別な事情があるはずなので、滅多にはいないのでしょう。こういうことをしそうな高額所得者たちは、これよりも先に、項目別控除全体の AGI に依存する上限にぶつかってしまいそうです(後日談:この効果は AGI の 50% 近く寄付している場合は無視できるほど小さいことがわかった)。やれやれ。とりあえず今日はここまで。