Grenzsteuersätze und Deckelungen der Sozialbeiträge

Wenn man mehr Geld verdient, zahlt man auch mehr Steuern. Das gilt zwar generell, jedoch nicht unbedingt für jeden einzelnen EUR, den man zusätzlich verdient. Insbesondere die Begrenzung der Krankenversicherungsbeiträge finde ich suspekt.

Ich nehme das Steuerjahr 2023 als Grundlage, da sind ja inzwischen alle Dinge fest. Und ich betrachte eine einzeln veranlagte Person.

Zur Einkommensteuer habe ich vom Land BW gefunden:

  • Der Grundfreibetrag ist 10.908 EUR.
  • Danach ist der Eingangssteuersatz 14 %.
  • Jenseits der 62.810 EUR sind es 42 %.
  • Jenseits der 277.826 EUR sind es 45 % Spitzensteuersatz.

Bei Lohn-Info findet man noch das hier:

  • Arbeitnehmer zahlt 7,3 % in die Krankenversicherung.
  • Arbeitnehmer zahlt 0,8 % in die Pflegeversicherung.
  • 9,3 % in die Rentenversicherung.
  • 1,3 % in die Arbeitslosenversicherung.
  • Beitragsbemessensgrenze Kranken- und Pflegeversicherung 59.850,00 EUR.
  • Beitragsbemessensgrenze Renten- und Arbeitslosigkeitsverischerung 87.600,00 EUR.
  • Die Geringfügigkeitsgrenze ist 520 EUR/Monat = 6.240 EUR/Jahr.

Der Solidaritätszuschlag ist aktuell ziemlich komplex. Auf Finanztip erklären sie es, es ist aber eher wild:

  • Ob man Soli zahlt, richtet sich nach der Höhe der Einkommensteuer, die man zahlt.
  • Es gibt eine Freigrenze von 17.543 EUR Einkommensteuer, unterhalb derer man keinen Soli zahlt.
  • Bis 32.619,02 EUR Einkommensteuer steigt der Solidaritätszuschlag linear bis 5,5 % an.

Grafische Darstellung

Das ganze habe ich dann mal als Python-Funktionen umgesetzt anschließend grafisch dargestellt. Für die vier Komponenten der Abgaben haben wir das hier:

Man kann gut erkennen, dass die Lohnsteuer das meiste ausmacht. Allerdings werden Kranken-, Pflege-, Renten- und Arbeitslosigkeitsversicherung dann gedeckelt. Der Solidaritätszuschlag steigt später, wird aber nicht riesig.

Addiert man diese Komponenten alle auf, so erhält man den Abgabensatz, den man auf den jeweiligen EUR zahlen muss.

Diese Kurve sieht dann schon etwas wild aus, weil da so viele Stufen drinstecken. Interessant ist auch, dass der Grenzsteuersatz nochmal nach unten geht. Besonders pikant finde ich hier folgendes Szenario: Jemand verdient 70.000 EUR/a und bekommt eine Gehaltserhöhung von 1000 EUR/a. Da der Grenzsteuersatz dort bei so 57 % liegt, darf die Person nur 430 EUR davon behalten.

Bekommt eine Person jenseits der 130.000 EUR/a die gleiche Erhöhung, dann ist bei einem Grenzsteuersatz von nur 44 % noch 560 EUR nach Steuern übrig. Wenn man also so viel verdient, dass man schon die Grenzen für die ganzen Sozialversicherungen überschritten hat, zahlt man auf zusätzliches Geld weniger Steuern als eine Person, die das noch nicht erreicht hat.

Man kann sich nun die mittlere Steuerlast anschauen, also den Durchschnitt bis zu einem bestimmten Einkommen:

Man sieht, dass dieses Mittel nie nach unten geht, es steigt monoton an. Mehr Brutto bedeutet also auch immer höhere Abgaben.

Insgesamt kommt mir diese Decklung der Sozialversicherungsbeiträge allerdings ein bisschen Suspekt vor. Bei der Rente kann ich es noch verstehen, damit ist die maximale Rente auch gedeckelt. Das ist an sich noch okay. Die Arbeitslosigkeitsversicherung ist auch gedeckelt, man kann da nicht beliebig viel ausgezahlt bekommen.

Bei Kranken- und Pflegeversicherung kann man auch argumentieren, dass man als einzelne Person nicht beliebig hohe Kosten im Gesundheitssystem verursacht und daher eine Bemessungsgrenze angemessen ist. Allerdings ist die Sozialversicherung ganz klar auf Umverteilung ausgelegt. Leute, die sehr wenig verdienen, zahlen ja deutlich weniger ein. Und das wird querfinanziert von Leuten, die mehr Gehalt bekommen. Das soll so im Sozialstaat. Von daher finde ich es merkwürdig, dass gerade die noch höheren Einkommen irgendwann nicht noch mehr beitragen müssen.

Würde man dies nicht deckeln, so könnte man wahrscheinlich die Prozentwerte auch ein bisschen senken. Das käme dann allen unterhalb der Grenze zu gute. Wobei das eher Wunschdenken ist, weil man sich ja schon kurz vor der Grenze einfach privat versichern kann und somit aus dem System ganz aussteigt.

Anhang: Code

Hier noch der Code für die Grenzsteuer-Komponenten:

def kv_pv_grenz(brutto):
    if brutto <= 6_240:
        return 0.0
    elif brutto <= 59_850.0:
        return 0.073 + 0.008
    else:
        return 0.0


def rv_av_grenz(brutto):
    if brutto <= 6_240:
        return 0.0
    elif brutto <= 87_600.0:
        return 0.093 + 0.013
    else:
        return 0.0


def einkommensteuer_grenz(brutto):
    if brutto <= 10_908.0:
        return 0.0
    elif brutto <= 62_810:
        drüber = (brutto - 10_908.0) / (62_810.0 - 10_908.0)
        return drüber * (0.42 - 0.14) + 0.14
    elif brutto <= 277_826.0:
        return 0.42
    else:
        return 0.45


def soli_grenz(brutto):
    einkommensteuersatz = np.mean(
        [einkommensteuer_grenz(b) for b in np.linspace(0.0, brutto, 100)]
    )
    einkommensteuer = einkommensteuersatz * brutto
    if einkommensteuer <= 17_543.0:
        soli_satz = 0.0
    elif einkommensteuer <= 32_619.02:
        soli_satz = (einkommensteuer - 17_543.0) / (32_619.02 - 17_543.0) * 0.055
    else:
        soli_satz = 0.055
    return einkommensteuersatz * soli_satz

Dann können wir damit Daten erzeugen:

brutto = np.linspace(0, 300_000, 500)

kv_pv = np.array(list(map(kv_pv_grenz, brutto)))
av_rv = np.array(list(map(rv_av_grenz, brutto)))
einkommensteuer = np.array(list(map(einkommensteuer_grenz, brutto)))
soli = np.array(list(map(soli_grenz, brutto)))

Und noch die Plots:

pl.clf()
pl.plot(brutto, kv_pv * 100, label="Kranken- + Pflege-V")
pl.plot(brutto, av_rv * 100, label="Renten- + Arbeitslosigkeits-V")
pl.plot(brutto, einkommensteuer * 100, label="Einkommensteuer")
pl.plot(brutto, soli * 100, label="Solidaritätszuschlag")
pl.grid(True)
pl.legend(loc="best")
pl.title("Bestandteile der Abgaben")
pl.xlabel("Bruttoeinkommen / EUR")
pl.ylabel("Grenzwert / %")
pl.savefig("grenz.svg")
pl.show()

Für die Kombination:

alles = kv_pv + av_rv + einkommensteuer + soli

pl.clf()
pl.plot(brutto, alles * 100)
pl.grid(True)
pl.title("Abgaben-Grenzwert")
pl.xlabel("Bruttoeinkommen / EUR")
pl.ylabel("Grenzwert / %")
pl.savefig("alles.svg")
pl.show()

Und für den Mittelwert:

alles = kv_pv + av_rv + einkommensteuer + soli
mittel = np.cumsum(alles) / np.arange(len(alles))
mittel[0] = 0.0

pl.clf()
pl.plot(brutto, mittel * 100)
pl.grid(True)
pl.title("Abgaben-Durchschnittswert")
pl.xlabel("Bruttoeinkommen / EUR")
pl.ylabel("Abgaben / %")
pl.savefig("mittel.svg")
pl.show()