31 lines
1.4 KiB
Python
31 lines
1.4 KiB
Python
"""Perpetual-traveller / nomad regime — 0% income tax + 1% regulatory
|
|
risk premium on all flows.
|
|
|
|
The 1% premium captures the real-world risk that a "no tax residence"
|
|
posture eventually attracts adverse rulings, the OECD CRS net tightens,
|
|
or a destination starts taxing previously-exempt foreign income (e.g.
|
|
Thailand 2024 remittance rule). We don't try to model the actual
|
|
mechanism — it's a Bayesian fudge factor. Tunable via the constructor.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from decimal import Decimal
|
|
|
|
from fire_planner.tax.base import TaxBreakdown, TaxInputs, TaxRegime
|
|
|
|
|
|
class NomadTaxRegime(TaxRegime):
|
|
name = "nomad"
|
|
|
|
def __init__(self, regulatory_premium_rate: Decimal = Decimal("0.01")) -> None:
|
|
self.regulatory_premium_rate = regulatory_premium_rate
|
|
|
|
def compute_tax(self, inputs: TaxInputs) -> TaxBreakdown:
|
|
# ISA withdrawals are tax-free in the UK; for a nomad they're
|
|
# just cash. The risk premium applies to cash that flows
|
|
# *outside* a UK wrapper because that's the boundary the
|
|
# premium is hedging.
|
|
chargeable = (inputs.earned_income + inputs.pension_withdrawal + inputs.capital_gains +
|
|
inputs.dividends + inputs.interest)
|
|
return TaxBreakdown(other=chargeable * self.regulatory_premium_rate,
|
|
notes=("nomad", f"premium_rate={self.regulatory_premium_rate}"))
|