This sounds mostly right. ZH also has a minimum rate of 2% (before the canton/municipality multiplication). Or expressed in LibreOffice Basic:
Function fnFederalCapitalTax(capital)
fnFederalCapitalTax = fnFederalTax(capital) / 5
End Function
Function fnZHCapitalTax(capital)
fnZHCapitalTax = fnZHSimpleTax(capital / 20) * 20
' No Max() function?
If fnZHCapitalTax < capital * 0.02 Then
fnZHCapitalTax = capital * 0.02
EndIf
End Function
Thanks @jay, I had omitted the minimum 2% for simplicity.
But where does the *20 term in your fnZHCapitalTax come from?
Shouldnât it be just fnZHCapitalTax = fnZHSimpleTax(capital / 20)?, I.e.:
Function fnZHCapitalTax(capital)
fnZHCapitalTax = fnZHSimpleTax(capital / 20)
If fnZHCapitalTax < capital * 0.02 Then
fnZHCapitalTax = capital * 0.02
EndIf
End Function
I donât think wealth or second pillar withdrawal is covered but I think TaxMaze has the tax rates for income on federal, cantonal, and municipality level. If I recall the data is collected via web scrape from the official gov webpage. Maybe this helps?
Edit: Taxmap.ch might also be worth checking?
For ZH, the tax rate is as if the amount was just 1/20 of the actual amount. However, that reduced tax rate is still applied to the full amount. If the helper function was fnZHSimpleTaxRate() instead of fnZHSimpleTax(), it would be
fnZHCapitalTax = fnZHSimpleTaxRate(capital / 20) * capital
I.e., the ZH capital withdrawal tax is equivalent to withdrawing 1/20 of the amount every year for 20 years, and paying regular income taxes on that amount every year (assuming there is no other income and ignoring the 2% minimum). This is intended to make the withdrawal taxes similar to taxes you would pay on pension income.
Durch das Lesen und die Teilnahme an diesem Forum bestÀtigst du, dass du den auf http://www.mustachianpost.com/de/ dargestellten Haftungsausschluss gelesen hast und damit einverstanden bist.