Lohnsteuer Calculator

This application calculates the infamous german „Einkommenssteuer“ (Tax) and plots some fancy diagrams. You need Java WebStart to run this application. Click the button to start the application via Java WebStart. You need at least JRE 1.5

Download Sourcecode (1,7 MB)

(vereinfachte) Lohnsteuer:

/*
 * Lohnsteuer.java
 *
 * Created on 26. Juli 2006, 17:27
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

/**
 *
 * @author Marco Maniscalco
 */
public class Lohnsteuer {
    
    public class SteuerDetails extends Object {
        public double steuer;
        public double sozialabgaben;
        public double netto;
        public String details;
        
        public double lohnsteuer;
        public double kirchensteuer;
        public double solizuschlag;
        
        public double rentenversicherung;
        public double arbeitslosenversicherung;
        public double krankenversicherung;
        public double pflegeversicherung;
        public double sonderbeitrag;
    
    };
    
    /** Creates a new instance of Lohnsteuer */
    public Lohnsteuer() {
    }
    
    private double deckel(double value, double d) {
        return (value>d)?d:value;
    }
    
    private double calcEinkommenSteuer(double _zvE) {
        double steuer = 0;
        if(_zvE <= 7664) {
            steuer = 0;
        } else if(_zvE <= 12739 && _zvE >= 7665) {
            double y = (_zvE - 7664)/10000;
            steuer = (883.74 * y + 1500) * y;
        } else if(_zvE <= 52151 && _zvE >= 12740) {
            double z = (_zvE - 12739)/10000;
            steuer = (228.74 * z + 2397) * z + 989;
        } else if(_zvE >= 52152) {
            double x = _zvE;
            steuer = 0.42 * x - 7914;
        }
        return steuer;
    }
    
    private double calcLohnsteuer(double zvE, int Steuerklasse) {
        double _zvE = zvE;
        double steuer = 0;
        
        if(Steuerklasse == 5 || Steuerklasse == 6) {
            
            double de = deckel(_zvE, 25812);
            double e1 = 1.25*de;
            double e2 = 0.75*de;
            double ste1 = calcEinkommenSteuer(e1);
            double ste2 = calcEinkommenSteuer(e2);
            double ddiff = (ste1-ste2)*2;
            double st1 = ddiff;
            double st2 = (zvE-25812)*0.42;
            steuer = st1+st2;
            
        } else {
            if(Steuerklasse == 3) {
                _zvE /= 2;
            }
            
            steuer = calcEinkommenSteuer(_zvE);
            
            if(Steuerklasse == 3) {
                steuer *= 2;
            }
        }
   
        return steuer;
    }
    
    private double maxVorsorgeFreibetrag(double Bruttolohn, int Steuerklasse) {
        if(Steuerklasse == 1 || Steuerklasse == 2 || Steuerklasse == 4)
            return (0.11*Bruttolohn>1500)?1500:(0.11*Bruttolohn);
        else if(Steuerklasse == 3)
            return (0.11*Bruttolohn>3000)?3000:(0.11*Bruttolohn);
        else if(Steuerklasse == 5)
            return 0;
        else if(Steuerklasse == 6)
            return 0;
        return 0;
    }
    
    public SteuerDetails calculate(double Bruttolohn, int Steuerklasse) {
        SteuerDetails d = new SteuerDetails();
                
        boolean debug = false;
        
        double pKS = 0.08; // kirchensteuer
        double pSZ = 0.055;// solidaritätszuschlag
        
        double pRV = 0.195; // rentenversicherung
        double pAV = 0.065; // arbeitslosenversicherung
        double pKV = 0.133; // krankenversicherung
        double pPV = 0.017; // pflegeversicherung
        double pSB = 0.009; // sonderbeitrag
        
        double ArbPausch = 920;
        double SonderAusgPausch = 36;
        
        d.details = "";
                
        double zvE = Bruttolohn;
        if(Steuerklasse != 5 && Steuerklasse != 6) {
            zvE -= maxVorsorgeFreibetrag(Bruttolohn, Steuerklasse);
            zvE -= (0.12*pRV*Bruttolohn);
        }
        zvE -= ArbPausch;
        zvE -= SonderAusgPausch;
        if(zvE<0) zvE = 0;
        if(debug) System.out.println("Brutto Einkommen: "+Bruttolohn);
        d.details += "Brutto Einkommen: "+(int)Bruttolohn+"\n";
        
        double netto = Bruttolohn;
        
        double stLohn = calcLohnsteuer(zvE, Steuerklasse);
        if(debug) System.out.println("Lohnsteuer: "+stLohn);
        d.details += "\tLohnsteuer: "+(int)stLohn+"\n";
        d.lohnsteuer = (int)stLohn;
        
        double stKirche = pKS*stLohn;
        if(debug) System.out.println("Kirchensteuer: "+stKirche);
        d.details += "\tKirchensteuer: "+(int)stKirche+"\n";
        d.kirchensteuer = (int)stKirche;
        
        double stSoli = pSZ*stLohn;
        if(debug) System.out.println("Solidaritätszuschlag: "+stSoli);
        d.details += "\tSolidaritätszuschlag: "+(int)stSoli+"\n";
        d.solizuschlag = (int)stSoli;
        
        netto -= stLohn;
        netto -= stKirche;
        netto -= stSoli;
        
        double sumSteuer = stLohn+stKirche+stSoli;
        d.steuer = sumSteuer;
        if(debug) System.out.println("\tSumme Steuern: "+sumSteuer);
        d.details += "Summe Steuern: "+(int)sumSteuer+"\n";
        
        if(debug) System.out.println("zu versteuerndes Einkommen: "+zvE);
        d.details += "zu versteuerndes Einkommen: "+(int)zvE+"\n";
        
        // vom arbeitnehmen UND arbeitgeben zu zahlen
        double vsRente = (pRV*Bruttolohn)/2; 
        if(debug) System.out.println("Rentenversicherung: "+vsRente);
        d.details += "\tRentenversicherung: "+(int)vsRente+"\n";
        d.rentenversicherung = (int)vsRente;
        
        double vsArbeit = (pAV*Bruttolohn)/2;
        if(debug) System.out.println("Arbeitslosenversicherung: "+vsArbeit);
        d.details += "\tArbeitslosenversicherung: "+(int)vsArbeit+"\n";
        d.arbeitslosenversicherung = (int)vsArbeit;
        
        double vsKranken = (pKV*Bruttolohn)/2;
        if(debug) System.out.println("Krankenversicherung: "+vsKranken);
        d.details += "\tKrankenversicherung: "+(int)vsKranken+"\n";
        d.krankenversicherung = (int)vsKranken;
                
        double vsPflege = (pPV*Bruttolohn)/2;
        if(debug) System.out.println("Pflegeversicherung: "+vsPflege);
        d.details += "\tPflegeversicherung: "+(int)vsPflege+"\n";
        d.pflegeversicherung = (int)vsPflege;
                
        // vom arbeitnehmer zu zahlen
        double vsSonder = (pSB*Bruttolohn);
        if(debug) System.out.println("Sonderbeitrag: "+vsSonder);
        d.details += "\tSonderbeitrag: "+(int)vsSonder+"\n";
        d.sonderbeitrag = (int)vsSonder;
        
        netto -= vsRente;
        netto -= vsArbeit;
        netto -= vsKranken;
        netto -= vsPflege;
        netto -= vsSonder;
        
        double sumSozi = vsRente+vsArbeit+vsKranken+vsPflege+vsSonder;
        if(debug) System.out.println("\tSumme Sozialabgaben: "+sumSozi);
        d.details += "Summe Sozialabgaben: "+(int)sumSozi+"\n";
        d.sozialabgaben = sumSozi;
        
        if(debug) System.out.println("Netto: "+(int)netto);
        d.details += "Netto: "+(int)netto+"\n";
        d.netto = netto;

        int nettoMtl = (int)netto/12;
        if(debug) System.out.println("Netto mtl.: "+nettoMtl);
        d.details += "Netto mtl.: "+nettoMtl+"\n";
        
        return d;
    }
}

German:

Diese Anwendung ist keine komplette Berechnung der Lohnsteuer, sondern stellt einen speziellen Fall dar, die sogenannte vereinfachte Lohnsteuer. Ziel war es die Berechnung zu Durchleuchten und die Knickpunkte und Extremwerte zu visualisieren. Als Freibeträge wurden die Daten von 2006 verwendet.

Speziell wurden die folgenden Parameter verwendet:

  • Kirchensteuer 8 %
  • Solidaritätszuschlag 5,5 %
  • Rentenversicherung 19,5 %
  • Arbeitslosenversicherung 6,5 %
  • Krankenversicherung 13,3 %
  • Pflegeversicherung 1,7 %
  • Sonderbeitrag 0,9 %
  • Arbeitnehmerpauschale 920 €
  • Sonderausgabenpauschale 36 €
  • ..

Schreibe einen Kommentar