fire-planner/fire_planner/tax/nomad.py
2026-05-07 17:06:19 +00:00

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}"))