Von hier kommend habe ich nun folgende Daten und muss sagen ich bin ziemlich ratlos.
Welcher Wert ist jetzt richtig?
#1 Angesichts der Referenzdaten eines deutschen Softwareunternehmens, das sich auf Steuersoftware spezialisiert hat. In ihren Musterdarlehensabrechnungen geben sie zum Beispiel für ein monatliches Bruttoeinkommen von 4926,59 Euro (alle weiteren Werte in Euro, und immer Lohnsteuerklasse I ) an. Dies entspricht der Lohnsteuergebühr von 1000,75 .
#2 Wenn Sie dann die beliebte Seite brutto-netto-rechner.info nehmen , erhalten Sie 1003.16 .
#3 Es gibt auch offizielle Regierungsdokumente für den Steuerabzug, die als XML verfügbar sind, die ein Open-Source-Projekt in einigen gängigen Sprachen in Programmcode umwandeln kann. Mein Ansatz mit seinem Python-Produkt gibt 1247.91 aus .
#4 Das offizielle deutsche Steuertool gibt 1027 .
#5 Schließlich ergibt meine eigene Interpretation der Wikipedia-Formel mit Python 936,91 .
Das kann nicht sein?! Ich muss wirklich an die Blue Tigers -Geschichte von JLBorges denken .
UPDATE nachdem die Frage beantwortet wurde / Lösung
Dank dieser Community funktioniert der folgende Code für mich basierend auf # 3; in #2 funktioniert es auch, aber sie haben Rundungsfehler. Andere habe ich nicht doppelt überprüft.
def test_lohnexample1(self):
# source: https://www.lohnexperte.de/files/root-pdfs/pdf/Muster.pdf
brutto = 4926.59 * 100 # Brutto in ¢ent
l = Lohnsteuer2018()
l.setRe4(brutto) # cent
l.setStkl(1) # Steuerklasse
l.setLzz(2) # Lohnzahlungszeitraum, 2 = Monat
l.setZkf(1) # Kinder
l.setPkv(0) # GKV (default)
l.setKvz(1.5) # Krankenkassenzusatzbeitrag (1.50%)
l.setKrv(0) # RV-WEST (default)
l.setAlter1(0) # setze 1, wenn das 64. Lebensjahr zu Beginn des Kalenderjahres vollendet wurde
l.setAf(0) # # 1, wenn die Anwendung des Faktorverfahrens gewählt wurden (nur in Steuerklasse IV)
l.setF(1) # Faktor
l.setPvs(0) # Nur wenn in Sachsen
l.setR(0) # Religion ja/nein
l.setLzzhinzu(0) # Hinzurechnungsbetrag auf der Lohnsteuerkarte
l.setPvz(0) # 1, wenn Zuschlag zur sozialen Pflegeversicherung
l.MAIN()
print("results lohnexample1:")
print_lst(l)
steuer = math.floor(float(l.getLstlzz()) + float(l.getStv()) + float(l.getSts())) / 100.0
soli = math.floor(float(l.getSolzlzz()) + float(l.getSolzs()) + float(l.getSolzv())) / 100
stges = steuer + soli
assert steuer == 1000.75
assert soli == 42.20
Aganju hat Recht, dass es viele Variablen gibt. Berücksichtigen Sie in Ihrer ersten Quelle insbesondere den Kinderfreibetrag (Kfb) und den Krankenkassenzusatzbeitrag (1,50 %). Geben Sie genau dieselben Variablen in Ihre zweite Quelle ein, und das Ergebnis ist auf den Cent genau dasselbe. Ich gehe davon aus, dass dies auch für die 4. Quelle gilt.
Leon
Aganju
J. Doe