33 lines
1.3 KiB
Python
33 lines
1.3 KiB
Python
|
|
"""Bulgaria regime — 10% flat tax on worldwide income.
|
||
|
|
|
||
|
|
Article 48 of the Personal Income Tax Act sets a flat 10% on
|
||
|
|
worldwide income for residents. Capital gains on EU/EEA-listed
|
||
|
|
securities held over the relevant holding period are exempt
|
||
|
|
(Art 13(1)(3)) — most of our portfolio qualifies. We approximate
|
||
|
|
all capital gains as 10% to be conservative (CGT on US-listed
|
||
|
|
ETFs from a Bulgarian resident is contested terrain; many funds
|
||
|
|
the planner holds are Irish UCITS so the EU exemption likely
|
||
|
|
applies, but we don't optimise for that here).
|
||
|
|
"""
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from decimal import Decimal
|
||
|
|
|
||
|
|
from fire_planner.tax.base import TaxBreakdown, TaxInputs, TaxRegime
|
||
|
|
|
||
|
|
FLAT_RATE = Decimal("0.10")
|
||
|
|
|
||
|
|
|
||
|
|
class BulgariaTaxRegime(TaxRegime):
|
||
|
|
name = "bulgaria"
|
||
|
|
|
||
|
|
def compute_tax(self, inputs: TaxInputs) -> TaxBreakdown:
|
||
|
|
chargeable = (inputs.earned_income + inputs.pension_withdrawal + inputs.capital_gains +
|
||
|
|
inputs.dividends + inputs.interest)
|
||
|
|
return TaxBreakdown(
|
||
|
|
income_tax=(inputs.earned_income + inputs.pension_withdrawal) * FLAT_RATE,
|
||
|
|
capital_gains_tax=inputs.capital_gains * FLAT_RATE,
|
||
|
|
dividend_tax=(inputs.dividends + inputs.interest) * FLAT_RATE,
|
||
|
|
notes=("bulgaria-flat", f"chargeable={chargeable}"),
|
||
|
|
)
|