I work to implement a set of German tax deduction macros in Python for private use and have some errors, one of my troubles is correct deduction of Lohnsteuer.

There are quite many online calculators but they do not really provide transparency on such things as Vorsorgepauschale and Solidaritätszuschlag and if you work for a public service, things get even more complicated with VBL and so on.

So the actual tax progression function seems to work fine but tax reduction formulae not. I have followed Wikipedia definitions of these things but it seems like I am misreading something there.

How to proceed? I have considered to publish these macros on GitHub but not sure how many people really want to dig into both Python and German tax system in their freetime.

To be more specific: what are exact formulae with complete input variables/constants for:

  • Vorsorgepauschale
  • Solidaritätszuschlag?

== UPDATE ==

I have found reference examples and published a GitHub project. Unfortunately there is still no control value for Vorsorgepauschale.

Example output:

| Position                        |   Value | Test | Control |
| brutto-svbrutto                 | 4926.59 |  OK  | 4926.59 |
| sozialversicherung-kv           |  362.85 |  !   |   389.4 |
| sozialversicherung-rv           |  458.17 |  OK  |  458.17 |
| sozialversicherung-av           |    73.9 |  OK  |    73.9 |
| sozialversicherung-pv           |   56.42 |  OK  |   56.42 |
| freibetrag-kinderfreibetrag     |  3714.0 |  !   |       0 |
| freibetrag-vorsorgepauschale    | 7442.41 |  !   |       0 |
| steuer-soli                     |   51.53 |  !   |    42.2 |
| steuer-lohnsteuer               |  936.91 |  !   | 1000.75 |
| netto                           |  2986.8 |  !   | 2804.49 |
  • Hi J Doe, the question as stated is not a right fit for this site. If there are specific questions in terms of understanding how a section of tax works, it may be more on topic. – Dheer Nov 29 at 11:06
  • 1
    @Dheer added more specific question – J. Doe Nov 29 at 11:25
  • 1
    I'm no help on German tax law, but I would suggest focusing on help with the formulas and finding some examples that you can then use to validate your code rather than trying to get help with both at once. – Hart CO Nov 29 at 16:04
  • Isn't Solidaritätszuschlag just an added percentage of the Lohnsteuer you already pay ? The other one should be a daily thing, so you just need to take the number of days it applies to and multiply it by the number..... – xyious Nov 29 at 16:38
  • @HartCO this is great hint, I'd even accept it as an aswer, because I started searching for exemplary data and this will allow me to use it as reference in my tests and following questions. – J. Doe Nov 30 at 11:49


It is almost straightforward (5.5% surcharge on Lohnsteuer), but has two complications:

  1. It is not computed based on the actual Lohnsteuer, but on the Lohnsteuer that would result if Kinderfreibeträge are taken into account (these are otherwise ignored for Lohnsteuer).

  2. It is zero if Lohnsteuer is less or equal 972€/year (1944 € in Steuerklasse 3) and it is only 20% of (Lohnsteuer-972€) if this is less than 5.5%.

Source: Relevant law


A bit more complicated. In most cases, it is the sum of:

  1. employee's part of health insurance
  2. employee's part of long term care insurance
  3. (in 2018) 72% of employee's part of pension insurance. The factor increases by 4 percentage points each year.

However: If 1+2 is less than 12% of income, and 12% of income is not more than 1900€ (3000€ in Steuerklasse 3), then 12% can be deducted instead.

Source: Wikipedia

Additional note: This is a very good calculator where you can even download spreadsheets so that you can inspect how the calculation works.

  • thanks @WerKater, will check. Can't see the Vorsorgepauschale. – J. Doe Dec 6 at 9:12

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.