Resource with tax brackets at the federal/cantonal/local level

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?

Thanks, @DonaldDuck, they both use the same data that we are talking about. My last questions were aimed at filling some gaps in the published data.

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.

1 Like

Each canton has their own way and there are various approaches described here:

ZH seems to use the rentensatz method.

I live on the boarder of 3 different cantons so have looked at the benefits of moving canton prior to withdrawal as the differenced can be large.

Thank you, very useful resource!