Welcome To Our Shell

Mister Spy & Souheyl Bypass Shell

Current Path : /var/www/web-klick.de/dsh/21_finance/

Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
Upload File :
Current File : /var/www/web-klick.de/dsh/21_finance/yy.php

<?php


use Brick\Math\BigDecimal as BaseBigDecimal;
use Brick\Math\RoundingMode as RoundingMode;

/**
 * A proxy class to use BigDecimal methods
 * as they are found in PAP XML
 */
class BigDecimal {

    const ROUND_DOWN = RoundingMode::DOWN;
    const ROUND_UP = RoundingMode::UP;

    private $bd;

    public function __construct($value) {
        $this->bd = BaseBigDecimal::of($value);
    }

    public function divide($other, $scale=null, $rounding=null) {
        if (!$scale && !$rounding) {
            return new BigDecimal($this->bd->exactlyDividedBy($other));
        }
        return new BigDecimal($this->bd->dividedBy($other, $scale, $rounding));
    }

    public static function valueOf($value) {
        return new BigDecimal($value);
    }

    public function multiply($other) {
        return new BigDecimal($this->bd->multipliedBy($other));
    }

    public function setScale($scale, $rounding) {
        return new BigDecimal($this->bd->withScale($scale, $rounding));
    }

    public function add($other) {
        return new BigDecimal($this->bd->plus($other));
    }

    public function subtract($other) {
        return new BigDecimal($this->bd->minus($other));
    }

    public function longValue() {
        return $this->bd->toInteger();
    }

    public function floatValue() {
        return $this->bd->toFloat();
    }

    public function compareTo($other) {
        return $this->bd->compareTo($other);
    }

    public function __toString() {
        return $this->bd->__toString();
    }

    public static function zero() {
        return BigDecimal::valueOf(0);
    }

    public static function one() {
        return BigDecimal::valueOf(1);
    }

    public static function ten() {
        return BigDecimal::valueOf(10);
    }

}


class xyz {
    /**
     * Internal variables
     */

    // Altersentlastungsbetrag nach Alterseinkuenftegesetz in €,
    // Cent (2 Dezimalstellen)
    private $ALTE;

    // Arbeitnehmer-Pauschbetrag in EURO
    private $ANP;

    // Auf den Lohnzahlungszeitraum entfallender Anteil von Jahreswerten
    // auf ganze Cents abgerundet
    private $ANTEIL1;

    // Bemessungsgrundlage fuer Altersentlastungsbetrag in €, Cent
    // (2 Dezimalstellen)
    private $BMG;

    // Beitragsbemessungsgrenze in der gesetzlichen Krankenversicherung
    // und der sozialen Pflegeversicherung in Euro
    private $BBGKVPV;

    // allgemeine Beitragsbemessungsgrenze in der allgemeinen Renten-versicherung in Euro
    private $BBGRV;

    // Differenz zwischen ST1 und ST2 in EURO
    private $DIFF;

    // Entlastungsbetrag fuer Alleinerziehende in EURO
    private $EFA;

    // Versorgungsfreibetrag in €, Cent (2 Dezimalstellen)
    private $FVB;

    // Versorgungsfreibetrag in €, Cent (2 Dezimalstellen) fuer die Berechnung
    // der Lohnsteuer fuer den sonstigen Bezug
    private $FVBSO;

    // Zuschlag zum Versorgungsfreibetrag in EURO
    private $FVBZ;

    // Zuschlag zum Versorgungsfreibetrag in EURO fuer die Berechnung
    // der Lohnsteuer beim sonstigen Bezug
    private $FVBZSO;

    // Grundfreibetrag in Euro
    private $GFB;

    // Maximaler Altersentlastungsbetrag in €
    private $HBALTE;

    // Massgeblicher maximaler Versorgungsfreibetrag in €
    private $HFVB;

    // Massgeblicher maximaler Zuschlag zum Versorgungsfreibetrag in €,Cent
    // (2 Dezimalstellen)
    private $HFVBZ;

    // Massgeblicher maximaler Zuschlag zum Versorgungsfreibetrag in €, Cent
    // (2 Dezimalstellen) fuer die Berechnung der Lohnsteuer fuer den
    // sonstigen Bezug
    private $HFVBZSO;

    // Nummer der Tabellenwerte fuer Versorgungsparameter
    private $J;

    // Jahressteuer nach § 51a EStG, aus der Solidaritaetszuschlag und
    // Bemessungsgrundlage fuer die Kirchenlohnsteuer ermittelt werden in EURO
    private $JBMG;

    // Auf einen Jahreslohn hochgerechneter LZZFREIB in €, Cent
    // (2 Dezimalstellen)
    private $JLFREIB;

    // Auf einen Jahreslohn hochgerechnete LZZHINZU in €, Cent
    // (2 Dezimalstellen)
    private $JLHINZU;

    // Jahreswert, dessen Anteil fuer einen Lohnzahlungszeitraum in
    // UPANTEIL errechnet werden soll in Cents
    private $JW;

    // Nummer der Tabellenwerte fuer Parameter bei Altersentlastungsbetrag
    private $K;

    // Merker fuer Berechnung Lohnsteuer fuer mehrjaehrige Taetigkeit.
    // 0 = normale Steuerberechnung
    // 1 = Steuerberechnung fuer mehrjaehrige Taetigkeit
    // 2 = entfaellt
    private $KENNVMT;

    // Summe der Freibetraege fuer Kinder in EURO
    private $KFB;

    // Beitragssatz des Arbeitgebers zur Krankenversicherung
    private $KVSATZAG;

    // Beitragssatz des Arbeitnehmers zur Krankenversicherung
    private $KVSATZAN;

    // Kennzahl fuer die Einkommensteuer-Tabellenart:
    // 1 = Grundtabelle
    // 2 = Splittingtabelle
    private $KZTAB;

    // Jahreslohnsteuer in EURO
    private $LSTJAHR;

    // Zwischenfelder der Jahreslohnsteuer in Cent
    private $LST1;
    private $LST2;
    private $LST3;
    private $LSTOSO;
    private $LSTSO;

    // Mindeststeuer fuer die Steuerklassen V und VI in EURO
    private $MIST;

    // Beitragssatz des Arbeitgebers zur Pflegeversicherung
    private $PVSATZAG;

    // Beitragssatz des Arbeitnehmers zur Pflegeversicherung
    private $PVSATZAN;

    // Beitragssatz des Arbeitnehmers in der allgemeinen gesetzlichen Rentenversicherung (4 Dezimalstellen)
    private $RVSATZAN;

    // Rechenwert in Gleitkommadarstellung
    private $RW;

    // Sonderausgaben-Pauschbetrag in EURO
    private $SAP;

    // Freigrenze fuer den Solidaritaetszuschlag in EURO
    private $SOLZFREI;

    // Solidaritaetszuschlag auf die Jahreslohnsteuer in EURO, C (2 Dezimalstellen)
    private $SOLZJ;

    // Zwischenwert fuer den Solidaritaetszuschlag auf die Jahreslohnsteuer
    // in EURO, C (2 Dezimalstellen)
    private $SOLZMIN;

    // Tarifliche Einkommensteuer in EURO
    private $ST;

    // Tarifliche Einkommensteuer auf das 1,25-fache ZX in EURO
    private $ST1;

    // Tarifliche Einkommensteuer auf das 0,75-fache ZX in EURO
    private $ST2;

    // Zwischenfeld zur Ermittlung der Steuer auf Verguetungen fuer mehrjaehrige Taetigkeit
    private $STOVMT;

    // Teilbetragssatz der Vorsorgepauschale fuer die Rentenversicherung (2 Dezimalstellen)
    private $TBSVORV;

    // Bemessungsgrundlage fuer den Versorgungsfreibetrag in Cents
    private $VBEZB;

    // Bemessungsgrundlage fuer den Versorgungsfreibetrag in Cent fuer
    // den sonstigen Bezug
    private $VBEZBSO;

    // Hoechstbetrag der Vorsorgepauschale nach Alterseinkuenftegesetz in EURO, C
    private $VHB;

    // Vorsorgepauschale in EURO, C (2 Dezimalstellen)
    private $VSP;

    // Vorsorgepauschale nach Alterseinkuenftegesetz in EURO, C
    private $VSPN;

    // Zwischenwert 1 bei der Berechnung der Vorsorgepauschale nach
    // dem Alterseinkuenftegesetz in EURO, C (2 Dezimalstellen)
    private $VSP1;

    // Zwischenwert 2 bei der Berechnung der Vorsorgepauschale nach
    // dem Alterseinkuenftegesetz in EURO, C (2 Dezimalstellen)
    private $VSP2;

    // Vorsorgepauschale mit Teilbetraegen fuer die gesetzliche Kranken- und
    // soziale Pflegeversicherung nach fiktiven Betraegen oder ggf. fuer die
    // private Basiskrankenversicherung und private Pflege-Pflichtversicherung
    // in Euro, Cent (2 Dezimalstellen)
    private $VSP3;

    // Erster Grenzwert in Steuerklasse V/VI in Euro
    private $W1STKL5;

    // Zweiter Grenzwert in Steuerklasse V/VI in Euro
    private $W2STKL5;

    // Dritter Grenzwert in Steuerklasse V/VI in Euro
    private $W3STKL5;

    // Hoechstbetrag der Vorsorgepauschale nach § 10c Abs. 2 Nr. 2 EStG in EURO
    private $VSPMAX1;

    // Hoechstbetrag der Vorsorgepauschale nach § 10c Abs. 2 Nr. 3 EStG in EURO
    private $VSPMAX2;

    // Vorsorgepauschale nach § 10c Abs. 2 Satz 2 EStG vor der Hoechstbetragsberechnung
    // in EURO, C (2 Dezimalstellen)
    private $VSPO;

    // Fuer den Abzug nach § 10c Abs. 2 Nrn. 2 und 3 EStG verbleibender
    // Rest von VSPO in EURO, C (2 Dezimalstellen)
    private $VSPREST;

    // Hoechstbetrag der Vorsorgepauschale nach § 10c Abs. 2 Nr. 1 EStG
    // in EURO, C (2 Dezimalstellen)
    private $VSPVOR;

    // Zu versteuerndes Einkommen gem. § 32a Abs. 1 und 2 EStG €, C
    // (2 Dezimalstellen)
    private $X;

    // gem. § 32a Abs. 1 EStG (6 Dezimalstellen)
    private $Y;

    // Auf einen Jahreslohn hochgerechnetes RE4 in €, C (2 Dezimalstellen)
    // nach Abzug der Freibetraege nach § 39 b Abs. 2 Satz 3 und 4.
    private $ZRE4;

    // Auf einen Jahreslohn hochgerechnetes RE4 in €, C (2 Dezimalstellen)
    private $ZRE4J;

    // Auf einen Jahreslohn hochgerechnetes RE4 in €, C (2 Dezimalstellen)
    // nach Abzug des Versorgungsfreibetrags und des Alterentlastungsbetrags
    // zur Berechnung der Vorsorgepauschale in €, Cent (2 Dezimalstellen)
    private $ZRE4VP;

    // Feste Tabellenfreibetraege (ohne Vorsorgepauschale) in €, Cent
    // (2 Dezimalstellen)
    private $ZTABFB;

    // Auf einen Jahreslohn hochgerechnetes (VBEZ abzueglich FVB) in
    // EURO, C (2 Dezimalstellen)
    private $ZVBEZ;

    // Auf einen Jahreslohn hochgerechnetes VBEZ in €, C (2 Dezimalstellen)
    private $ZVBEZJ;

    // Zu versteuerndes Einkommen in €, C (2 Dezimalstellen)
    private $ZVE;

    // Zwischenfelder zu X fuer die Berechnung der Steuer nach § 39b
    // Abs. 2 Satz 7 EStG in €
    private $ZX;
    private $ZZX;
    private $HOCH;
    private $VERGL;

    // Jahreswert der beruecksichtigten Beitraege zur privaten Basis-Krankenversicherung und
    // privaten Pflege-Pflichtversicherung (ggf. auch die Mindestvorsorgepauschale) in Cent.
    private $VKV;

    /**
     * Input variables
     */

    // 1, wenn die Anwendung des Faktorverfahrens gewaehlt wurden (nur in Steuerklasse IV)
    private $af;

    // Auf die Vollendung des 64. Lebensjahres folgende
    // Kalenderjahr (erforderlich, wenn ALTER1=1)
    private $AJAHR;

    // 1, wenn das 64. Lebensjahr zu Beginn des Kalenderjahres vollendet wurde, in dem
    // der Lohnzahlungszeitraum endet (§ 24 a EStG), sonst = 0
    private $ALTER1;

    // in VKAPA und VMT enthaltene Entschaedigungen nach §24 Nummer 1 EStG in Cent
    private $ENTSCH;

    // eingetragener Faktor mit drei Nachkommastellen
    private $f;

    // Jahresfreibetrag nach Massgabe der Eintragungen auf der
    // Lohnsteuerkarte in Cents (ggf. 0)
    private $JFREIB;

    // Jahreshinzurechnungsbetrag in Cents (ggf. 0)
    private $JHINZU;

    // Voraussichtlicher Jahresarbeitslohn ohne sonstige Bezuege und ohne Verguetung fuer mehrjaehrige Taetigkeit in Cent.
    // Anmerkung: Die Eingabe dieses Feldes (ggf. 0) ist erforderlich bei Eingabe „sonsti-ger Bezuege“ (Feld SONSTB)
    // oder bei Eingabe der „Verguetung fuer mehrjaehrige Taetigkeit“ (Feld VMT).
    // Sind in einem vorangegangenen Abrechnungszeitraum bereits sonstige Bezuege gezahlt worden, so sind sie dem
    // voraussichtlichen Jahresarbeitslohn hinzuzurechnen. Verguetungen fuer mehrere Jahres aus einem vorangegangenen
    // Abrechnungszeitraum sind in voller Hoehe hinzuzurechnen.
    private $JRE4;

    // In JRE4 enthaltene Versorgungsbezuege in Cents (ggf. 0)
    private $JVBEZ;

    // Merker fuer die Vorsorgepauschale
    // 2 = der Arbeitnehmer ist NICHT in der gesetzlichen Rentenversicherung versichert.
    // 
    // 1 = der Arbeitnehmer ist in der gesetzlichen Rentenversicherung versichert, es gilt die
    // Beitragsbemessungsgrenze OST.
    // 
    // 0 = der Arbeitnehmer ist in der gesetzlichen Rentenversicherung versichert, es gilt die
    // Beitragsbemessungsgrenze WEST.
    private $KRV;

    // Einkommensbezogener Zusatzbeitragssatz eines gesetzlich krankenversicherten Arbeitnehmers,
    // auf dessen Basis der an die Krankenkasse zu zahlende Zusatzbeitrag berechnet wird,
    // in Prozent (bspw. 0,90 fuer 0,90 %) mit 2 Dezimalstellen.
    // Der von der Kranken-kasse festgesetzte Zusatzbeitragssatz ist bei Abweichungen unmassgeblich.
    private $KVZ;

    // Lohnzahlungszeitraum:
    // 1 = Jahr
    // 2 = Monat
    // 3 = Woche
    // 4 = Tag
    private $LZZ;

    // In der Lohnsteuerkarte des Arbeitnehmers eingetragener Freibetrag fuer
    // den Lohnzahlungszeitraum in Cent
    private $LZZFREIB;

    // In der Lohnsteuerkarte des Arbeitnehmers eingetragener Hinzurechnungsbetrag
    // fuer den Lohnzahlungszeitraum in Cent
    private $LZZHINZU;

    // Dem Arbeitgeber mitgeteilte Zahlungen des Arbeitnehmers zur privaten
    // Kranken- bzw. Pflegeversicherung im Sinne des §10 Abs. 1 Nr. 3 EStG 2010
    // als Monatsbetrag in Cent (der Wert ist inabhaengig vom Lohnzahlungszeitraum immer
    // als Monatsbetrag anzugeben).
    private $PKPV;

    // Krankenversicherung:
    // 0 = gesetzlich krankenversicherte Arbeitnehmer
    // 1 = ausschliesslich privat krankenversicherte Arbeitnehmer OHNE Arbeitgeberzuschuss
    // 2 = ausschliesslich privat krankenversicherte Arbeitnehmer MIT Arbeitgeberzuschuss
    private $PKV;

    // 1, wenn bei der sozialen Pflegeversicherung die Besonderheiten in Sachsen zu beruecksichtigen sind bzw.
    // zu beruecksichtigen waeren, sonst 0.
    private $PVS;

    // 1, wenn er der Arbeitnehmer den Zuschlag zur sozialen Pflegeversicherung
    // zu zahlen hat, sonst 0.
    private $PVZ;

    // Religionsgemeinschaft des Arbeitnehmers lt. Lohnsteuerkarte (bei
    // keiner Religionszugehoerigkeit = 0)
    private $R;

    // Steuerpflichtiger Arbeitslohn vor Beruecksichtigung der Freibetraege
    // fuer Versorgungsbezuege, des Altersentlastungsbetrags und des auf
    // der Lohnsteuerkarte fuer den Lohnzahlungszeitraum eingetragenen
    // Freibetrags in Cents.
    private $RE4;

    // Sonstige Bezuege (ohne Verguetung aus mehrjaehriger Taetigkeit) einschliesslich
    // Sterbegeld bei Versorgungsbezuegen sowie Kapitalauszahlungen/Abfindungen,
    // soweit es sich nicht um Bezuege fuer mehrere Jahre handelt in Cents (ggf. 0)
    private $SONSTB;

    // Sterbegeld bei Versorgungsbezuegen sowie Kapitalauszahlungen/Abfindungen,
    // soweit es sich nicht um Bezuege fuer mehrere Jahre handelt
    // (in SONSTB enthalten) in Cents
    private $STERBE;

    // Steuerklasse:
    // 1 = I
    // 2 = II
    // 3 = III
    // 4 = IV
    // 5 = V
    // 6 = VI
    private $STKL;

    // In RE4 enthaltene Versorgungsbezuege in Cents (ggf. 0)
    private $VBEZ;

    // Vorsorgungsbezug im Januar 2005 bzw. fuer den ersten vollen Monat
    // in Cents
    private $VBEZM;

    // Voraussichtliche Sonderzahlungen im Kalenderjahr des Versorgungsbeginns
    // bei Versorgungsempfaengern ohne Sterbegeld, Kapitalauszahlungen/Abfindungen
    // bei Versorgungsbezuegen in Cents
    private $VBEZS;

    // In SONSTB enthaltene Versorgungsbezuege einschliesslich Sterbegeld
    // in Cents (ggf. 0)
    private $VBS;

    // Jahr, in dem der Versorgungsbezug erstmalig gewaehrt wurde; werden
    // mehrere Versorgungsbezuege gezahlt, so gilt der aelteste erstmalige Bezug
    private $VJAHR;

    // Kapitalauszahlungen / Abfindungen / Nachzahlungen bei Versorgungsbezuegen
    // fuer mehrere Jahre in Cent (ggf. 0)
    private $VKAPA;

    // Verguetung fuer mehrjaehrige Taetigkeit ohne Kapitalauszahlungen und ohne Abfindungen
    // bei Versorgungsbezuegen in Cent (ggf. 0)
    private $VMT;

    // Zahl der Freibetraege fuer Kinder (eine Dezimalstelle, nur bei Steuerklassen
    // I, II, III und IV)
    private $ZKF;

    // Zahl der Monate, fuer die Versorgungsbezuege gezahlt werden (nur
    // erforderlich bei Jahresberechnung (LZZ = 1)
    private $ZMVB;

    // In JRE4 enthaltene Entschaedigungen nach § 24 Nummer 1 EStG in Cent
    private $JRE4ENT;

    // In SONSTB enthaltene Entschaedigungen nach § 24 Nummer 1 EStG in Cent
    private $SONSTENT;

    /**
     * Output variables
     */

    // Bemessungsgrundlage fuer die Kirchenlohnsteuer in Cents
    private $BK;

    // Bemessungsgrundlage der sonstigen Einkuenfte (ohne Verguetung
    // fuer mehrjaehrige Taetigkeit) fuer die Kirchenlohnsteuer in Cents
    private $BKS;
    private $BKV;

    // Fuer den Lohnzahlungszeitraum einzubehaltende Lohnsteuer in Cents
    private $LSTLZZ;

    // Fuer den Lohnzahlungszeitraum einzubehaltender Solidaritaetszuschlag
    // in Cents
    private $SOLZLZZ;

    // Solidaritaetszuschlag fuer sonstige Bezuege (ohne Verguetung fuer mehrjaehrige
    // Taetigkeit) in Cents
    private $SOLZS;

    // Solidaritaetszuschlag fuer die Verguetung fuer mehrjaehrige Taetigkeit in
    // Cents
    private $SOLZV;

    // Lohnsteuer fuer sonstige Einkuenfte (ohne Verguetung fuer mehrjaehrige
    // Taetigkeit) in Cents
    private $STS;

    // Lohnsteuer fuer Verguetung fuer mehrjaehrige Taetigkeit in Cents
    private $STV;

    // Fuer den Lohnzahlungszeitraum beruecksichtigte Beitraege des Arbeitnehmers zur
    // privaten Basis-Krankenversicherung und privaten Pflege-Pflichtversicherung (ggf. auch
    // die Mindestvorsorgepauschale) in Cent beim laufenden Arbeitslohn. Fuer Zwecke der Lohn-
    // steuerbescheinigung sind die einzelnen Ausgabewerte ausserhalb des eigentlichen Lohn-
    // steuerbescheinigungsprogramms zu addieren; hinzuzurechnen sind auch die Ausgabewerte
    // VKVSONST
    private $VKVLZZ;

    // Fuer den Lohnzahlungszeitraum beruecksichtigte Beitraege des Arbeitnehmers
    // zur privaten Basis-Krankenversicherung und privaten Pflege-Pflichtversicherung (ggf.
    // auch die Mindestvorsorgepauschale) in Cent bei sonstigen Bezuegen. Der Ausgabewert kann
    // auch negativ sein. Fuer tarifermaessigt zu besteuernde Verguetungen fuer mehrjaehrige
    // Taetigkeiten enthaelt der PAP keinen entsprechenden Ausgabewert.
    private $VKVSONST;

    // Verbrauchter Freibetrag bei Berechnung des laufenden Arbeitslohns, in Cent
    private $VFRB;

    // Verbrauchter Freibetrag bei Berechnung des voraussichtlichen Jahresarbeitslohns, in Cent
    private $VFRBS1;

    // Verbrauchter Freibetrag bei Berechnung der sonstigen Bezuege, in Cent
    private $VFRBS2;

    // Fuer die weitergehende Beruecksichtigung des Steuerfreibetrags nach dem DBA Tuerkei verfuegbares ZVE ueber
    // dem Grundfreibetrag bei der Berechnung des laufenden Arbeitslohns, in Cent
    private $WVFRB;

    // Fuer die weitergehende Beruecksichtigung des Steuerfreibetrags nach dem DBA Tuerkei verfuegbares ZVE ueber dem Grundfreibetrag
    // bei der Berechnung des voraussichtlichen Jahresarbeitslohns, in Cent
    private $WVFRBO;

    // Fuer die weitergehende Beruecksichtigung des Steuerfreibetrags nach dem DBA Tuerkei verfuegbares ZVE
    // ueber dem Grundfreibetrag bei der Berechnung der sonstigen Bezuege, in Cent
    private $WVFRBM;

    public function __construct() {
        $this->initialize();
    }

    protected function initialize() {
        // Initialize internal variables
        $this->ALTE = new BigDecimal(0);
        $this->ANP = new BigDecimal(0);
        $this->ANTEIL1 = new BigDecimal(0);
        $this->BMG = new BigDecimal(0);
        $this->BBGKVPV = new BigDecimal(0);
        $this->BBGRV = new BigDecimal(0);
        $this->DIFF = new BigDecimal(0);
        $this->EFA = new BigDecimal(0);
        $this->FVB = new BigDecimal(0);
        $this->FVBSO = new BigDecimal(0);
        $this->FVBZ = new BigDecimal(0);
        $this->FVBZSO = new BigDecimal(0);
        $this->GFB = new BigDecimal(0);
        $this->HBALTE = new BigDecimal(0);
        $this->HFVB = new BigDecimal(0);
        $this->HFVBZ = new BigDecimal(0);
        $this->HFVBZSO = new BigDecimal(0);
        $this->J = 0;
        $this->JBMG = new BigDecimal(0);
        $this->JLFREIB = new BigDecimal(0);
        $this->JLHINZU = new BigDecimal(0);
        $this->JW = new BigDecimal(0);
        $this->K = 0;
        $this->KENNVMT = 0;
        $this->KFB = new BigDecimal(0);
        $this->KVSATZAG = new BigDecimal(0);
        $this->KVSATZAN = new BigDecimal(0);
        $this->KZTAB = 0;
        $this->LSTJAHR = new BigDecimal(0);
        $this->LST1 = new BigDecimal(0);
        $this->LST2 = new BigDecimal(0);
        $this->LST3 = new BigDecimal(0);
        $this->LSTOSO = new BigDecimal(0);
        $this->LSTSO = new BigDecimal(0);
        $this->MIST = new BigDecimal(0);
        $this->PVSATZAG = new BigDecimal(0);
        $this->PVSATZAN = new BigDecimal(0);
        $this->RVSATZAN = new BigDecimal(0);
        $this->RW = new BigDecimal(0);
        $this->SAP = new BigDecimal(0);
        $this->SOLZFREI = new BigDecimal(0);
        $this->SOLZJ = new BigDecimal(0);
        $this->SOLZMIN = new BigDecimal(0);
        $this->ST = new BigDecimal(0);
        $this->ST1 = new BigDecimal(0);
        $this->ST2 = new BigDecimal(0);
        $this->STOVMT = new BigDecimal(0);
        $this->TBSVORV = new BigDecimal(0);
        $this->VBEZB = new BigDecimal(0);
        $this->VBEZBSO = new BigDecimal(0);
        $this->VHB = new BigDecimal(0);
        $this->VSP = new BigDecimal(0);
        $this->VSPN = new BigDecimal(0);
        $this->VSP1 = new BigDecimal(0);
        $this->VSP2 = new BigDecimal(0);
        $this->VSP3 = new BigDecimal(0);
        $this->W1STKL5 = new BigDecimal(0);
        $this->W2STKL5 = new BigDecimal(0);
        $this->W3STKL5 = new BigDecimal(0);
        $this->VSPMAX1 = new BigDecimal(0);
        $this->VSPMAX2 = new BigDecimal(0);
        $this->VSPO = new BigDecimal(0);
        $this->VSPREST = new BigDecimal(0);
        $this->VSPVOR = new BigDecimal(0);
        $this->X = new BigDecimal(0);
        $this->Y = new BigDecimal(0);
        $this->ZRE4 = new BigDecimal(0);
        $this->ZRE4J = new BigDecimal(0);
        $this->ZRE4VP = new BigDecimal(0);
        $this->ZTABFB = new BigDecimal(0);
        $this->ZVBEZ = new BigDecimal(0);
        $this->ZVBEZJ = new BigDecimal(0);
        $this->ZVE = new BigDecimal(0);
        $this->ZX = new BigDecimal(0);
        $this->ZZX = new BigDecimal(0);
        $this->HOCH = new BigDecimal(0);
        $this->VERGL = new BigDecimal(0);
        $this->VKV = new BigDecimal(0);

        // Initialize input variables
        $this->af = 1;
        $this->AJAHR = 0;
        $this->ALTER1 = 0;
        $this->ENTSCH = new BigDecimal(0);
        $this->f = 1.0;
        $this->JFREIB = new BigDecimal(0);
        $this->JHINZU = new BigDecimal(0);
        $this->JRE4 = new BigDecimal(0);
        $this->JVBEZ = new BigDecimal(0);
        $this->KRV = 0;
        $this->KVZ = new BigDecimal(0);
        $this->LZZ = 0;
        $this->LZZFREIB = new BigDecimal(0);
        $this->LZZHINZU = new BigDecimal(0);
        $this->PKPV = new BigDecimal(0);
        $this->PKV = 0;
        $this->PVS = 0;
        $this->PVZ = 0;
        $this->R = 0;
        $this->RE4 = new BigDecimal(0);
        $this->SONSTB = new BigDecimal(0);
        $this->STERBE = new BigDecimal(0);
        $this->STKL = 0;
        $this->VBEZ = new BigDecimal(0);
        $this->VBEZM = new BigDecimal(0);
        $this->VBEZS = new BigDecimal(0);
        $this->VBS = new BigDecimal(0);
        $this->VJAHR = 0;
        $this->VKAPA = new BigDecimal(0);
        $this->VMT = new BigDecimal(0);
        $this->ZKF = new BigDecimal(0);
        $this->ZMVB = 0;
        $this->JRE4ENT = BigDecimal::zero();
        $this->SONSTENT = BigDecimal::zero();

        // Initialize output variables
        $this->BK = new BigDecimal(0);
        $this->BKS = new BigDecimal(0);
        $this->BKV = new BigDecimal(0);
        $this->LSTLZZ = new BigDecimal(0);
        $this->SOLZLZZ = new BigDecimal(0);
        $this->SOLZS = new BigDecimal(0);
        $this->SOLZV = new BigDecimal(0);
        $this->STS = new BigDecimal(0);
        $this->STV = new BigDecimal(0);
        $this->VKVLZZ = new BigDecimal(0);
        $this->VKVSONST = new BigDecimal(0);
        $this->VFRB = new BigDecimal(0);
        $this->VFRBS1 = new BigDecimal(0);
        $this->VFRBS2 = new BigDecimal(0);
        $this->WVFRB = new BigDecimal(0);
        $this->WVFRBO = new BigDecimal(0);
        $this->WVFRBM = new BigDecimal(0);

        // Initialize "constants"
        $this->TAB1 = array(BigDecimal::valueOf(0.0), BigDecimal::valueOf(0.4), BigDecimal::valueOf(0.384), BigDecimal::valueOf(0.368), BigDecimal::valueOf(0.352), BigDecimal::valueOf(0.336), BigDecimal::valueOf(0.32), BigDecimal::valueOf(0.304), BigDecimal::valueOf(0.288), BigDecimal::valueOf(0.272), BigDecimal::valueOf(0.256), BigDecimal::valueOf(0.24), BigDecimal::valueOf(0.224), BigDecimal::valueOf(0.208), BigDecimal::valueOf(0.192), BigDecimal::valueOf(0.176), BigDecimal::valueOf(0.16), BigDecimal::valueOf(0.152), BigDecimal::valueOf(0.144), BigDecimal::valueOf(0.136), BigDecimal::valueOf(0.128), BigDecimal::valueOf(0.12), BigDecimal::valueOf(0.112), BigDecimal::valueOf(0.104), BigDecimal::valueOf(0.096), BigDecimal::valueOf(0.088), BigDecimal::valueOf(0.08), BigDecimal::valueOf(0.072), BigDecimal::valueOf(0.064), BigDecimal::valueOf(0.056), BigDecimal::valueOf(0.048), BigDecimal::valueOf(0.04), BigDecimal::valueOf(0.032), BigDecimal::valueOf(0.024), BigDecimal::valueOf(0.016), BigDecimal::valueOf(0.008), BigDecimal::valueOf(0.0));
        $this->TAB2 = array(BigDecimal::valueOf(0), BigDecimal::valueOf(3000), BigDecimal::valueOf(2880), BigDecimal::valueOf(2760), BigDecimal::valueOf(2640), BigDecimal::valueOf(2520), BigDecimal::valueOf(2400), BigDecimal::valueOf(2280), BigDecimal::valueOf(2160), BigDecimal::valueOf(2040), BigDecimal::valueOf(1920), BigDecimal::valueOf(1800), BigDecimal::valueOf(1680), BigDecimal::valueOf(1560), BigDecimal::valueOf(1440), BigDecimal::valueOf(1320), BigDecimal::valueOf(1200), BigDecimal::valueOf(1140), BigDecimal::valueOf(1080), BigDecimal::valueOf(1020), BigDecimal::valueOf(960), BigDecimal::valueOf(900), BigDecimal::valueOf(840), BigDecimal::valueOf(780), BigDecimal::valueOf(720), BigDecimal::valueOf(660), BigDecimal::valueOf(600), BigDecimal::valueOf(540), BigDecimal::valueOf(480), BigDecimal::valueOf(420), BigDecimal::valueOf(360), BigDecimal::valueOf(300), BigDecimal::valueOf(240), BigDecimal::valueOf(180), BigDecimal::valueOf(120), BigDecimal::valueOf(60), BigDecimal::valueOf(0));
        $this->TAB3 = array(BigDecimal::valueOf(0), BigDecimal::valueOf(900), BigDecimal::valueOf(864), BigDecimal::valueOf(828), BigDecimal::valueOf(792), BigDecimal::valueOf(756), BigDecimal::valueOf(720), BigDecimal::valueOf(684), BigDecimal::valueOf(648), BigDecimal::valueOf(612), BigDecimal::valueOf(576), BigDecimal::valueOf(540), BigDecimal::valueOf(504), BigDecimal::valueOf(468), BigDecimal::valueOf(432), BigDecimal::valueOf(396), BigDecimal::valueOf(360), BigDecimal::valueOf(342), BigDecimal::valueOf(324), BigDecimal::valueOf(306), BigDecimal::valueOf(288), BigDecimal::valueOf(270), BigDecimal::valueOf(252), BigDecimal::valueOf(234), BigDecimal::valueOf(216), BigDecimal::valueOf(198), BigDecimal::valueOf(180), BigDecimal::valueOf(162), BigDecimal::valueOf(144), BigDecimal::valueOf(126), BigDecimal::valueOf(108), BigDecimal::valueOf(90), BigDecimal::valueOf(72), BigDecimal::valueOf(54), BigDecimal::valueOf(36), BigDecimal::valueOf(18), BigDecimal::valueOf(0));
        $this->TAB4 = array(BigDecimal::valueOf(0.0), BigDecimal::valueOf(0.4), BigDecimal::valueOf(0.384), BigDecimal::valueOf(0.368), BigDecimal::valueOf(0.352), BigDecimal::valueOf(0.336), BigDecimal::valueOf(0.32), BigDecimal::valueOf(0.304), BigDecimal::valueOf(0.288), BigDecimal::valueOf(0.272), BigDecimal::valueOf(0.256), BigDecimal::valueOf(0.24), BigDecimal::valueOf(0.224), BigDecimal::valueOf(0.208), BigDecimal::valueOf(0.192), BigDecimal::valueOf(0.176), BigDecimal::valueOf(0.16), BigDecimal::valueOf(0.152), BigDecimal::valueOf(0.144), BigDecimal::valueOf(0.136), BigDecimal::valueOf(0.128), BigDecimal::valueOf(0.12), BigDecimal::valueOf(0.112), BigDecimal::valueOf(0.104), BigDecimal::valueOf(0.096), BigDecimal::valueOf(0.088), BigDecimal::valueOf(0.08), BigDecimal::valueOf(0.072), BigDecimal::valueOf(0.064), BigDecimal::valueOf(0.056), BigDecimal::valueOf(0.048), BigDecimal::valueOf(0.04), BigDecimal::valueOf(0.032), BigDecimal::valueOf(0.024), BigDecimal::valueOf(0.016), BigDecimal::valueOf(0.008), BigDecimal::valueOf(0.0));
        $this->TAB5 = array(BigDecimal::valueOf(0), BigDecimal::valueOf(1900), BigDecimal::valueOf(1824), BigDecimal::valueOf(1748), BigDecimal::valueOf(1672), BigDecimal::valueOf(1596), BigDecimal::valueOf(1520), BigDecimal::valueOf(1444), BigDecimal::valueOf(1368), BigDecimal::valueOf(1292), BigDecimal::valueOf(1216), BigDecimal::valueOf(1140), BigDecimal::valueOf(1064), BigDecimal::valueOf(988), BigDecimal::valueOf(912), BigDecimal::valueOf(836), BigDecimal::valueOf(760), BigDecimal::valueOf(722), BigDecimal::valueOf(684), BigDecimal::valueOf(646), BigDecimal::valueOf(608), BigDecimal::valueOf(570), BigDecimal::valueOf(532), BigDecimal::valueOf(494), BigDecimal::valueOf(456), BigDecimal::valueOf(418), BigDecimal::valueOf(380), BigDecimal::valueOf(342), BigDecimal::valueOf(304), BigDecimal::valueOf(266), BigDecimal::valueOf(228), BigDecimal::valueOf(190), BigDecimal::valueOf(152), BigDecimal::valueOf(114), BigDecimal::valueOf(76), BigDecimal::valueOf(38), BigDecimal::valueOf(0));
        $this->ZAHL1 = BigDecimal::one();
        $this->ZAHL2 = new BigDecimal(2);
        $this->ZAHL5 = new BigDecimal(5);
        $this->ZAHL7 = new BigDecimal(7);
        $this->ZAHL12 = new BigDecimal(12);
        $this->ZAHL100 = new BigDecimal(100);
        $this->ZAHL360 = new BigDecimal(360);
        $this->ZAHL500 = new BigDecimal(500);
        $this->ZAHL700 = new BigDecimal(700);
        $this->ZAHL1000 = new BigDecimal(1000);
        $this->ZAHL10000 = new BigDecimal(10000);
    }

    public function getBk() {
        return $this->BK;
    }

    public function getBks() {
        return $this->BKS;
    }

    public function getBkv() {
        return $this->BKV;
    }

    public function getLstlzz() {
        return $this->LSTLZZ;
    }

    public function getSolzlzz() {
        return $this->SOLZLZZ;
    }

    public function getSolzs() {
        return $this->SOLZS;
    }

    public function getSolzv() {
        return $this->SOLZV;
    }

    public function getSts() {
        return $this->STS;
    }

    public function getStv() {
        return $this->STV;
    }

    public function getVkvlzz() {
        return $this->VKVLZZ;
    }

    public function getVkvsonst() {
        return $this->VKVSONST;
    }

    public function getVfrb() {
        return $this->VFRB;
    }

    public function getVfrbs1() {
        return $this->VFRBS1;
    }

    public function getVfrbs2() {
        return $this->VFRBS2;
    }

    public function getWvfrb() {
        return $this->WVFRB;
    }

    public function getWvfrbo() {
        return $this->WVFRBO;
    }

    public function getWvfrbm() {
        return $this->WVFRBM;
    }

    public function setAf($value) {
        $this->af = $value;
    }

    public function setAjahr($value) {
        $this->AJAHR = $value;
    }

    public function setAlter1($value) {
        $this->ALTER1 = $value;
    }

    public function setEntsch($value) {
        $this->ENTSCH = BigDecimal::valueOf($value);
    }

    public function setF($value) {
        $this->f = $value;
    }

    public function setJfreib($value) {
        $this->JFREIB = BigDecimal::valueOf($value);
    }

    public function setJhinzu($value) {
        $this->JHINZU = BigDecimal::valueOf($value);
    }

    public function setJre4($value) {
        $this->JRE4 = BigDecimal::valueOf($value);
    }

    public function setJvbez($value) {
        $this->JVBEZ = BigDecimal::valueOf($value);
    }

    public function setKrv($value) {
        $this->KRV = $value;
    }

    public function setKvz($value) {
        $this->KVZ = BigDecimal::valueOf($value);
    }

    public function setLzz($value) {
        $this->LZZ = $value;
    }

    public function setLzzfreib($value) {
        $this->LZZFREIB = BigDecimal::valueOf($value);
    }

    public function setLzzhinzu($value) {
        $this->LZZHINZU = BigDecimal::valueOf($value);
    }

    public function setPkpv($value) {
        $this->PKPV = BigDecimal::valueOf($value);
    }

    public function setPkv($value) {
        $this->PKV = $value;
    }

    public function setPvs($value) {
        $this->PVS = $value;
    }

    public function setPvz($value) {
        $this->PVZ = $value;
    }

    public function setR($value) {
        $this->R = $value;
    }

    public function setRe4($value) {
        $this->RE4 = BigDecimal::valueOf($value);
    }

    public function setSonstb($value) {
        $this->SONSTB = BigDecimal::valueOf($value);
    }

    public function setSterbe($value) {
        $this->STERBE = BigDecimal::valueOf($value);
    }

    public function setStkl($value) {
        $this->STKL = $value;
    }

    public function setVbez($value) {
        $this->VBEZ = BigDecimal::valueOf($value);
    }

    public function setVbezm($value) {
        $this->VBEZM = BigDecimal::valueOf($value);
    }

    public function setVbezs($value) {
        $this->VBEZS = BigDecimal::valueOf($value);
    }

    public function setVbs($value) {
        $this->VBS = BigDecimal::valueOf($value);
    }

    public function setVjahr($value) {
        $this->VJAHR = $value;
    }

    public function setVkapa($value) {
        $this->VKAPA = BigDecimal::valueOf($value);
    }

    public function setVmt($value) {
        $this->VMT = BigDecimal::valueOf($value);
    }

    public function setZkf($value) {
        $this->ZKF = BigDecimal::valueOf($value);
    }

    public function setZmvb($value) {
        $this->ZMVB = $value;
    }

    public function setJre4ent($value) {
        $this->JRE4ENT = BigDecimal::valueOf($value);
    }

    public function setSonstent($value) {
        $this->SONSTENT = BigDecimal::valueOf($value);
    }

    /**
     * PROGRAMMABLAUFPLAN, PAP Seite 13
     */
    public function MAIN() {
        $this->MPARA();
        $this->MRE4JL();
        $this->VBEZBSO = BigDecimal::zero();
        $this->KENNVMT = 0;
        $this->MRE4();
        $this->MRE4ABZ();
        $this->MBERECH();
        $this->MSONST();
        $this->MVMT();
    }

    /**
     * Zuweisung von Werten fuer bestimmte Sozialversicherungsparameter  PAP Seite 14
     */
    protected function MPARA() {
        if ($this->KRV < 2) {
            if ($this->KRV == 0) {
                $this->BBGRV = new BigDecimal(76200);
            } else {
                $this->BBGRV = new BigDecimal(68400);
            }
            $this->RVSATZAN = BigDecimal::valueOf(0.0935);
            $this->TBSVORV = BigDecimal::valueOf(0.68);
        }
        $this->BBGKVPV = new BigDecimal(52200);
        $this->KVSATZAN = $this->KVZ->divide($this->ZAHL100)->add(BigDecimal::valueOf(0.07));
        $this->KVSATZAG = BigDecimal::valueOf(0.07);
        if ($this->PVS == 1) {
            $this->PVSATZAN = BigDecimal::valueOf(0.01775);
            $this->PVSATZAG = BigDecimal::valueOf(0.00775);
        } else {
            $this->PVSATZAN = BigDecimal::valueOf(0.01275);
            $this->PVSATZAG = BigDecimal::valueOf(0.01275);
        }
        if ($this->PVZ == 1) {
            $this->PVSATZAN = $this->PVSATZAN->add(BigDecimal::valueOf(0.0025));
        }
        $this->W1STKL5 = new BigDecimal(10240);
        $this->W2STKL5 = new BigDecimal(27029);
        $this->W3STKL5 = new BigDecimal(205043);
        $this->GFB = new BigDecimal(8820);
        $this->SOLZFREI = new BigDecimal(972);
    }

    /**
     * Ermittlung des Jahresarbeitslohns nach § 39 b Abs. 2 Satz 2 EStG, PAP Seite 15
     */
    protected function MRE4JL() {
        if ($this->LZZ == 1) {
            $this->ZRE4J = $this->RE4->divide($this->ZAHL100, 2, BigDecimal::ROUND_DOWN);
            $this->ZVBEZJ = $this->VBEZ->divide($this->ZAHL100, 2, BigDecimal::ROUND_DOWN);
            $this->JLFREIB = $this->LZZFREIB->divide($this->ZAHL100, 2, BigDecimal::ROUND_DOWN);
            $this->JLHINZU = $this->LZZHINZU->divide($this->ZAHL100, 2, BigDecimal::ROUND_DOWN);
        } else {
            if ($this->LZZ == 2) {
                $this->ZRE4J = $this->RE4->multiply($this->ZAHL12)->divide($this->ZAHL100, 2, BigDecimal::ROUND_DOWN);
                $this->ZVBEZJ = $this->VBEZ->multiply($this->ZAHL12)->divide($this->ZAHL100, 2, BigDecimal::ROUND_DOWN);
                $this->JLFREIB = $this->LZZFREIB->multiply($this->ZAHL12)->divide($this->ZAHL100, 2, BigDecimal::ROUND_DOWN);
                $this->JLHINZU = $this->LZZHINZU->multiply($this->ZAHL12)->divide($this->ZAHL100, 2, BigDecimal::ROUND_DOWN);
            } else {
                if ($this->LZZ == 3) {
                    $this->ZRE4J = $this->RE4->multiply($this->ZAHL360)->divide($this->ZAHL700, 2, BigDecimal::ROUND_DOWN);
                    $this->ZVBEZJ = $this->VBEZ->multiply($this->ZAHL360)->divide($this->ZAHL700, 2, BigDecimal::ROUND_DOWN);
                    $this->JLFREIB = $this->LZZFREIB->multiply($this->ZAHL360)->divide($this->ZAHL700, 2, BigDecimal::ROUND_DOWN);
                    $this->JLHINZU = $this->LZZHINZU->multiply($this->ZAHL360)->divide($this->ZAHL700, 2, BigDecimal::ROUND_DOWN);
                } else {
                    $this->ZRE4J = $this->RE4->multiply($this->ZAHL360)->divide($this->ZAHL100, 2, BigDecimal::ROUND_DOWN);
                    $this->ZVBEZJ = $this->VBEZ->multiply($this->ZAHL360)->divide($this->ZAHL100, 2, BigDecimal::ROUND_DOWN);
                    $this->JLFREIB = $this->LZZFREIB->multiply($this->ZAHL360)->divide($this->ZAHL100, 2, BigDecimal::ROUND_DOWN);
                    $this->JLHINZU = $this->LZZHINZU->multiply($this->ZAHL360)->divide($this->ZAHL100, 2, BigDecimal::ROUND_DOWN);
                }
            }
        }
        if ($this->af == 0) {
            $this->f = 1;
        }
    }

    /**
     * Freibetraege fuer Versorgungsbezuege, Altersentlastungsbetrag (§ 39b Abs. 2 Satz 3 EStG), PAP Seite 16
     */
    protected function MRE4() {
        if ($this->ZVBEZJ->compareTo(BigDecimal::zero()) == 0) {
            $this->FVBZ = BigDecimal::zero();
            $this->FVB = BigDecimal::zero();
            $this->FVBZSO = BigDecimal::zero();
            $this->FVBSO = BigDecimal::zero();
        } else {
            if ($this->VJAHR < 2006) {
                $this->J = 1;
            } else {
                if ($this->VJAHR < 2040) {
                    $this->J = $this->VJAHR - 2004;
                } else {
                    $this->J = 36;
                }
            }
            if ($this->LZZ == 1) {
                $this->VBEZB = $this->VBEZM->multiply(BigDecimal::valueOf($this->ZMVB))->add($this->VBEZS);
                $this->HFVB = $this->TAB2[$this->J]->divide($this->ZAHL12)->multiply(BigDecimal::valueOf($this->ZMVB));
                $this->FVBZ = $this->TAB3[$this->J]->divide($this->ZAHL12)->multiply(BigDecimal::valueOf($this->ZMVB))->setScale(0, BigDecimal::ROUND_UP);
            } else {
                $this->VBEZB = $this->VBEZM->multiply($this->ZAHL12)->add($this->VBEZS)->setScale(2, BigDecimal::ROUND_DOWN);
                $this->HFVB = $this->TAB2[$this->J];
                $this->FVBZ = $this->TAB3[$this->J];
            }
            $this->FVB = $this->VBEZB->multiply($this->TAB1[$this->J])->divide($this->ZAHL100)->setScale(2, BigDecimal::ROUND_UP);
            if ($this->FVB->compareTo($this->HFVB) == 1) {
                $this->FVB = $this->HFVB;
            }
            if ($this->FVB->compareTo($this->ZVBEZJ) == 1) {
                $this->FVB = $this->ZVBEZJ;
            }
            $this->FVBSO = $this->FVB->add($this->VBEZBSO->multiply($this->TAB1[$this->J])->divide($this->ZAHL100))->setScale(2, BigDecimal::ROUND_UP);
            if ($this->FVBSO->compareTo($this->TAB2[$this->J]) == 1) {
                $this->FVBSO = $this->TAB2[$this->J];
            }
            $this->HFVBZSO = $this->VBEZB->add($this->VBEZBSO)->divide($this->ZAHL100)->subtract($this->FVBSO)->setScale(2, BigDecimal::ROUND_DOWN);
            $this->FVBZSO = $this->FVBZ->add($this->VBEZBSO->divide($this->ZAHL100))->setScale(0, BigDecimal::ROUND_UP);
            if ($this->FVBZSO->compareTo($this->HFVBZSO) == 1) {
                $this->FVBZSO = $this->HFVBZSO->setScale(0, BigDecimal::ROUND_UP);
            }
            if ($this->FVBZSO->compareTo($this->TAB3[$this->J]) == 1) {
                $this->FVBZSO = $this->TAB3[$this->J];
            }
            $this->HFVBZ = $this->VBEZB->divide($this->ZAHL100)->subtract($this->FVB)->setScale(2, BigDecimal::ROUND_DOWN);
            if ($this->FVBZ->compareTo($this->HFVBZ) == 1) {
                $this->FVBZ = $this->HFVBZ->setScale(0, BigDecimal::ROUND_UP);
            }
        }
        $this->MRE4ALTE();
    }

    /**
     * Altersentlastungsbetrag (§ 39b Abs. 2 Satz 3 EStG), PAP Seite 17
     */
    protected function MRE4ALTE() {
        if ($this->ALTER1 == 0) {
            $this->ALTE = BigDecimal::zero();
        } else {
            if ($this->AJAHR < 2006) {
                $this->K = 1;
            } else {
                if ($this->AJAHR < 2040) {
                    $this->K = $this->AJAHR - 2004;
                } else {
                    $this->K = 36;
                }
            }
            $this->BMG = $this->ZRE4J->subtract($this->ZVBEZJ);
            $this->ALTE = $this->BMG->multiply($this->TAB4[$this->K])->setScale(0, BigDecimal::ROUND_UP);
            $this->HBALTE = $this->TAB5[$this->K];
            if ($this->ALTE->compareTo($this->HBALTE) == 1) {
                $this->ALTE = $this->HBALTE;
            }
        }
    }

    /**
     * Ermittlung des Jahresarbeitslohns nach Abzug der Freibetraege nach § 39 b Abs. 2 Satz 3 und 4 EStG, PAP Seite 19
     */
    protected function MRE4ABZ() {
        $this->ZRE4 = $this->ZRE4J->subtract($this->FVB)->subtract($this->ALTE)->subtract($this->JLFREIB)->add($this->JLHINZU)->setScale(2, BigDecimal::ROUND_DOWN);
        if ($this->ZRE4->compareTo(BigDecimal::zero()) == -1) {
            $this->ZRE4 = BigDecimal::zero();
        }
        $this->ZRE4VP = $this->ZRE4J;
        if ($this->KENNVMT == 2) {
            $this->ZRE4VP = $this->ZRE4VP->subtract($this->ENTSCH->divide($this->ZAHL100))->setScale(2, BigDecimal::ROUND_DOWN);
        }
        $this->ZVBEZ = $this->ZVBEZJ->subtract($this->FVB)->setScale(2, BigDecimal::ROUND_DOWN);
        if ($this->ZVBEZ->compareTo(BigDecimal::zero()) == -1) {
            $this->ZVBEZ = BigDecimal::zero();
        }
    }

    /**
     * Berechnung fuer laufende Lohnzahlungszeitraueme Seite 20
     */
    protected function MBERECH() {
        $this->MZTABFB();
        $this->VFRB = $this->ANP->add($this->FVB->add($this->FVBZ))->multiply($this->ZAHL100)->setScale(0, BigDecimal::ROUND_DOWN);
        $this->MLSTJAHR();
        $this->WVFRB = $this->ZVE->subtract($this->GFB)->multiply($this->ZAHL100)->setScale(0, BigDecimal::ROUND_DOWN);
        if ($this->WVFRB->compareTo(BigDecimal::zero()) == -1) {
            $this->WVFRB = BigDecimal::valueOf(0);
        }
        $this->LSTJAHR = $this->ST->multiply(BigDecimal::valueOf($this->f))->setScale(0, BigDecimal::ROUND_DOWN);
        $this->UPLSTLZZ();
        $this->UPVKVLZZ();
        if ($this->ZKF->compareTo(BigDecimal::zero()) == 1) {
            $this->ZTABFB = $this->ZTABFB->add($this->KFB);
            $this->MRE4ABZ();
            $this->MLSTJAHR();
            $this->JBMG = $this->ST->multiply(BigDecimal::valueOf($this->f))->setScale(0, BigDecimal::ROUND_DOWN);
        } else {
            $this->JBMG = $this->LSTJAHR;
        }
        $this->MSOLZ();
    }

    /**
     * Ermittlung der festen Tabellenfreibetraege (ohne Vorsorgepauschale), PAP Seite 21
     */
    protected function MZTABFB() {
        $this->ANP = BigDecimal::zero();
        if ($this->ZVBEZ->compareTo(BigDecimal::zero()) >= 0 && $this->ZVBEZ->compareTo($this->FVBZ) == -1) {
            $this->FVBZ = BigDecimal::valueOf($this->ZVBEZ->longValue());
        }
        if ($this->STKL < 6) {
            if ($this->ZVBEZ->compareTo(BigDecimal::zero()) == 1) {
                if ($this->ZVBEZ->subtract($this->FVBZ)->compareTo(BigDecimal::valueOf(102)) == -1) {
                    $this->ANP = $this->ZVBEZ->subtract($this->FVBZ)->setScale(0, BigDecimal::ROUND_UP);
                } else {
                    $this->ANP = BigDecimal::valueOf(102);
                }
            }
        } else {
            $this->FVBZ = BigDecimal::valueOf(0);
            $this->FVBZSO = BigDecimal::valueOf(0);
        }
        if ($this->STKL < 6) {
            if ($this->ZRE4->compareTo($this->ZVBEZ) == 1) {
                if ($this->ZRE4->subtract($this->ZVBEZ)->compareTo($this->ZAHL1000) == -1) {
                    $this->ANP = $this->ANP->add($this->ZRE4)->subtract($this->ZVBEZ)->setScale(0, BigDecimal::ROUND_UP);
                } else {
                    $this->ANP = $this->ANP->add($this->ZAHL1000);
                }
            }
        }
        $this->KZTAB = 1;
        if ($this->STKL == 1) {
            $this->SAP = BigDecimal::valueOf(36);
            $this->KFB = $this->ZKF->multiply(BigDecimal::valueOf(7356))->setScale(0, BigDecimal::ROUND_DOWN);
        } else {
            if ($this->STKL == 2) {
                $this->EFA = BigDecimal::valueOf(1908);
                $this->SAP = BigDecimal::valueOf(36);
                $this->KFB = $this->ZKF->multiply(BigDecimal::valueOf(7356))->setScale(0, BigDecimal::ROUND_DOWN);
            } else {
                if ($this->STKL == 3) {
                    $this->KZTAB = 2;
                    $this->SAP = BigDecimal::valueOf(36);
                    $this->KFB = $this->ZKF->multiply(BigDecimal::valueOf(7356))->setScale(0, BigDecimal::ROUND_DOWN);
                } else {
                    if ($this->STKL == 4) {
                        $this->SAP = BigDecimal::valueOf(36);
                        $this->KFB = $this->ZKF->multiply(BigDecimal::valueOf(3678))->setScale(0, BigDecimal::ROUND_DOWN);
                    } else {
                        if ($this->STKL == 5) {
                            $this->SAP = BigDecimal::valueOf(36);
                            $this->KFB = BigDecimal::zero();
                        } else {
                            $this->KFB = BigDecimal::zero();
                        }
                    }
                }
            }
        }
        $this->ZTABFB = $this->EFA->add($this->ANP)->add($this->SAP)->add($this->FVBZ)->setScale(2, BigDecimal::ROUND_DOWN);
    }

    /**
     * Ermittlung Jahreslohnsteuer, PAP Seite 22
     */
    protected function MLSTJAHR() {
        $this->UPEVP();
        if ($this->KENNVMT != 1) {
            $this->ZVE = $this->ZRE4->subtract($this->ZTABFB)->subtract($this->VSP)->setScale(2, BigDecimal::ROUND_DOWN);
            $this->UPMLST();
        } else {
            $this->ZVE = $this->ZRE4->subtract($this->ZTABFB)->subtract($this->VSP)->subtract($this->VMT->divide($this->ZAHL100))->subtract($this->VKAPA->divide($this->ZAHL100))->setScale(2, BigDecimal::ROUND_DOWN);
            if ($this->ZVE->compareTo(BigDecimal::zero()) == -1) {
                $this->ZVE = $this->ZVE->add($this->VMT->divide($this->ZAHL100))->add($this->VKAPA->divide($this->ZAHL100))->divide($this->ZAHL5)->setScale(2, BigDecimal::ROUND_DOWN);
                $this->UPMLST();
                $this->ST = $this->ST->multiply($this->ZAHL5)->setScale(0, BigDecimal::ROUND_DOWN);
            } else {
                $this->UPMLST();
                $this->STOVMT = $this->ST;
                $this->ZVE = $this->ZVE->add($this->VMT->add($this->VKAPA)->divide($this->ZAHL500))->setScale(2, BigDecimal::ROUND_DOWN);
                $this->UPMLST();
                $this->ST = $this->ST->subtract($this->STOVMT)->multiply($this->ZAHL5)->add($this->STOVMT)->setScale(0, BigDecimal::ROUND_DOWN);
            }
        }
    }

    /**
     * PAP Seite 23
     */
    protected function UPVKVLZZ() {
        $this->UPVKV();
        $this->JW = $this->VKV;
        $this->UPANTEIL();
        $this->VKVLZZ = $this->ANTEIL1;
    }

    /**
     * PAP Seite 23
     */
    protected function UPVKV() {
        if ($this->PKV > 0) {
            if ($this->VSP2->compareTo($this->VSP3) == 1) {
                $this->VKV = $this->VSP2->multiply($this->ZAHL100);
            } else {
                $this->VKV = $this->VSP3->multiply($this->ZAHL100);
            }
        } else {
            $this->VKV = BigDecimal::zero();
        }
    }

    /**
     * PAP Seite 24
     */
    protected function UPLSTLZZ() {
        $this->JW = $this->LSTJAHR->multiply($this->ZAHL100);
        $this->UPANTEIL();
        $this->LSTLZZ = $this->ANTEIL1;
    }

    /**
     * Ermittlung der Jahreslohnsteuer aus dem Einkommensteuertarif. PAP Seite 25
     */
    protected function UPMLST() {
        if ($this->ZVE->compareTo($this->ZAHL1) == -1) {
            $this->ZVE = BigDecimal::zero();
            $this->X = BigDecimal::zero();
        } else {
            $this->X = $this->ZVE->divide(BigDecimal::valueOf($this->KZTAB))->setScale(0, BigDecimal::ROUND_DOWN);
        }
        if ($this->STKL < 5) {
            $this->UPTAB17();
        } else {
            $this->MST5_6();
        }
    }

    /**
     * Vorsorgepauschale (§ 39b Absatz 2 Satz 5 Nummer 3 und Absatz 4 EStG)
     * Achtung: Es wird davon ausgegangen, dass
     * a) Es wird davon ausge-gangen, dassa) fuer die BBG (Ost) 60.000 Euro und fuer die BBG (West) 71.400 Euro festgelegt wird sowie
     * b) der Beitragssatz zur Rentenversicherung auf 18,9 % gesenkt wird.
     * 
     * PAP Seite 26
     */
    protected function UPEVP() {
        if ($this->KRV > 1) {
            $this->VSP1 = BigDecimal::zero();
        } else {
            if ($this->ZRE4VP->compareTo($this->BBGRV) == 1) {
                $this->ZRE4VP = $this->BBGRV;
            }
            $this->VSP1 = $this->TBSVORV->multiply($this->ZRE4VP)->setScale(2, BigDecimal::ROUND_DOWN);
            $this->VSP1 = $this->VSP1->multiply($this->RVSATZAN)->setScale(2, BigDecimal::ROUND_DOWN);
        }
        $this->VSP2 = $this->ZRE4VP->multiply(BigDecimal::valueOf(0.12))->setScale(2, BigDecimal::ROUND_DOWN);
        if ($this->STKL == 3) {
            $this->VHB = BigDecimal::valueOf(3000);
        } else {
            $this->VHB = BigDecimal::valueOf(1900);
        }
        if ($this->VSP2->compareTo($this->VHB) == 1) {
            $this->VSP2 = $this->VHB;
        }
        $this->VSPN = $this->VSP1->add($this->VSP2)->setScale(0, BigDecimal::ROUND_UP);
        $this->MVSP();
        if ($this->VSPN->compareTo($this->VSP) == 1) {
            $this->VSP = $this->VSPN->setScale(2, BigDecimal::ROUND_DOWN);
        }
    }

    /**
     * Vorsorgepauschale (§39b Abs. 2 Satz 5 Nr 3 EStG) Vergleichsberechnung fuer Guenstigerpruefung, PAP Seite 27
     */
    protected function MVSP() {
        if ($this->ZRE4VP->compareTo($this->BBGKVPV) == 1) {
            $this->ZRE4VP = $this->BBGKVPV;
        }
        if ($this->PKV > 0) {
            if ($this->STKL == 6) {
                $this->VSP3 = BigDecimal::zero();
            } else {
                $this->VSP3 = $this->PKPV->multiply($this->ZAHL12)->divide($this->ZAHL100);
                if ($this->PKV == 2) {
                    $this->VSP3 = $this->VSP3->subtract($this->ZRE4VP->multiply($this->KVSATZAG->add($this->PVSATZAG)))->setScale(2, BigDecimal::ROUND_DOWN);
                }
            }
        } else {
            $this->VSP3 = $this->ZRE4VP->multiply($this->KVSATZAN->add($this->PVSATZAN))->setScale(2, BigDecimal::ROUND_DOWN);
        }
        $this->VSP = $this->VSP3->add($this->VSP1)->setScale(0, BigDecimal::ROUND_UP);
    }

    /**
     * Lohnsteuer fuer die Steuerklassen V und VI (§ 39b Abs. 2 Satz 7 EStG), PAP Seite 28
     */
    protected function MST5_6() {
        $this->ZZX = $this->X;
        if ($this->ZZX->compareTo($this->W2STKL5) == 1) {
            $this->ZX = $this->W2STKL5;
            $this->UP5_6();
            if ($this->ZZX->compareTo($this->W3STKL5) == 1) {
                $this->ST = $this->ST->add($this->W3STKL5->subtract($this->W2STKL5)->multiply(BigDecimal::valueOf(0.42)))->setScale(0, BigDecimal::ROUND_DOWN);
                $this->ST = $this->ST->add($this->ZZX->subtract($this->W3STKL5)->multiply(BigDecimal::valueOf(0.45)))->setScale(0, BigDecimal::ROUND_DOWN);
            } else {
                $this->ST = $this->ST->add($this->ZZX->subtract($this->W2STKL5)->multiply(BigDecimal::valueOf(0.42)))->setScale(0, BigDecimal::ROUND_DOWN);
            }
        } else {
            $this->ZX = $this->ZZX;
            $this->UP5_6();
            if ($this->ZZX->compareTo($this->W1STKL5) == 1) {
                $this->VERGL = $this->ST;
                $this->ZX = $this->W1STKL5;
                $this->UP5_6();
                $this->HOCH = $this->ST->add($this->ZZX->subtract($this->W1STKL5)->multiply(BigDecimal::valueOf(0.42)))->setScale(0, BigDecimal::ROUND_DOWN);
                if ($this->HOCH->compareTo($this->VERGL) == -1) {
                    $this->ST = $this->HOCH;
                } else {
                    $this->ST = $this->VERGL;
                }
            }
        }
    }

    /**
     * Unterprogramm zur Lohnsteuer fuer die Steuerklassen V und VI (§ 39b Abs. 2 Satz 7 EStG), PAP Seite 29
     */
    protected function UP5_6() {
        $this->X = $this->ZX->multiply(BigDecimal::valueOf(1.25))->setScale(2, BigDecimal::ROUND_DOWN);
        $this->UPTAB17();
        $this->ST1 = $this->ST;
        $this->X = $this->ZX->multiply(BigDecimal::valueOf(0.75))->setScale(2, BigDecimal::ROUND_DOWN);
        $this->UPTAB17();
        $this->ST2 = $this->ST;
        $this->DIFF = $this->ST1->subtract($this->ST2)->multiply($this->ZAHL2);
        $this->MIST = $this->ZX->multiply(BigDecimal::valueOf(0.14))->setScale(0, BigDecimal::ROUND_DOWN);
        if ($this->MIST->compareTo($this->DIFF) == 1) {
            $this->ST = $this->MIST;
        } else {
            $this->ST = $this->DIFF;
        }
    }

    /**
     * Solidaritaetszuschlag, PAP Seite 30
     */
    protected function MSOLZ() {
        $this->SOLZFREI = $this->SOLZFREI->multiply(BigDecimal::valueOf($this->KZTAB));
        if ($this->JBMG->compareTo($this->SOLZFREI) == 1) {
            $this->SOLZJ = $this->JBMG->multiply(BigDecimal::valueOf(5.5))->divide($this->ZAHL100)->setScale(2, BigDecimal::ROUND_DOWN);
            $this->SOLZMIN = $this->JBMG->subtract($this->SOLZFREI)->multiply(BigDecimal::valueOf(20))->divide($this->ZAHL100)->setScale(2, BigDecimal::ROUND_DOWN);
            if ($this->SOLZMIN->compareTo($this->SOLZJ) == -1) {
                $this->SOLZJ = $this->SOLZMIN;
            }
            $this->JW = $this->SOLZJ->multiply($this->ZAHL100)->setScale(0, BigDecimal::ROUND_DOWN);
            $this->UPANTEIL();
            $this->SOLZLZZ = $this->ANTEIL1;
        } else {
            $this->SOLZLZZ = BigDecimal::zero();
        }
        if ($this->R > 0) {
            $this->JW = $this->JBMG->multiply($this->ZAHL100);
            $this->UPANTEIL();
            $this->BK = $this->ANTEIL1;
        } else {
            $this->BK = BigDecimal::zero();
        }
    }

    /**
     * Anteil von Jahresbetraegen fuer einen LZZ (§ 39b Abs. 2 Satz 9 EStG), PAP Seite 31
     */
    protected function UPANTEIL() {
        if ($this->LZZ == 1) {
            $this->ANTEIL1 = $this->JW;
        } else {
            if ($this->LZZ == 2) {
                $this->ANTEIL1 = $this->JW->divide($this->ZAHL12, 0, BigDecimal::ROUND_DOWN);
            } else {
                if ($this->LZZ == 3) {
                    $this->ANTEIL1 = $this->JW->multiply($this->ZAHL7)->divide($this->ZAHL360, 0, BigDecimal::ROUND_DOWN);
                } else {
                    $this->ANTEIL1 = $this->JW->divide($this->ZAHL360, 0, BigDecimal::ROUND_DOWN);
                }
            }
        }
    }

    /**
     * Berechnung sonstiger Bezuege nach § 39b Abs. 3 Saetze 1 bis 8 EStG), PAP Seite 32
     */
    protected function MSONST() {
        $this->LZZ = 1;
        if ($this->ZMVB == 0) {
            $this->ZMVB = 12;
        }
        if ($this->SONSTB->compareTo(BigDecimal::zero()) == 0) {
            $this->VKVSONST = BigDecimal::zero();
            $this->LSTSO = BigDecimal::zero();
            $this->STS = BigDecimal::zero();
            $this->SOLZS = BigDecimal::zero();
            $this->BKS = BigDecimal::zero();
        } else {
            $this->MOSONST();
            $this->UPVKV();
            $this->VKVSONST = $this->VKV;
            $this->ZRE4J = $this->JRE4->add($this->SONSTB)->divide($this->ZAHL100)->setScale(2, BigDecimal::ROUND_DOWN);
            $this->ZVBEZJ = $this->JVBEZ->add($this->VBS)->divide($this->ZAHL100)->setScale(2, BigDecimal::ROUND_DOWN);
            $this->VBEZBSO = $this->STERBE;
            $this->MRE4SONST();
            $this->MLSTJAHR();
            $this->WVFRBM = $this->ZVE->subtract($this->GFB)->multiply($this->ZAHL100)->setScale(2, BigDecimal::ROUND_DOWN);
            if ($this->WVFRBM->compareTo(BigDecimal::zero()) == -1) {
                $this->WVFRBM = BigDecimal::zero();
            }
            $this->UPVKV();
            $this->VKVSONST = $this->VKV->subtract($this->VKVSONST);
            $this->LSTSO = $this->ST->multiply($this->ZAHL100);
            $this->STS = $this->LSTSO->subtract($this->LSTOSO)->multiply(BigDecimal::valueOf($this->f))->divide($this->ZAHL100, 0, BigDecimal::ROUND_DOWN)->multiply($this->ZAHL100);
            if ($this->STS->compareTo(BigDecimal::zero()) == -1) {
                $this->STS = BigDecimal::zero();
            }
            $this->SOLZS = $this->STS->multiply(BigDecimal::valueOf(5.5))->divide($this->ZAHL100, 0, BigDecimal::ROUND_DOWN);
            if ($this->R > 0) {
                $this->BKS = $this->STS;
            } else {
                $this->BKS = BigDecimal::zero();
            }
        }
    }

    /**
     * Berechnung der Verguetung fuer mehrjaehrige Taetigkeit nach § 39b Abs. 3 Satz 9 und 10 EStG), PAP Seite 33
     */
    protected function MVMT() {
        if ($this->VKAPA->compareTo(BigDecimal::zero()) == -1) {
            $this->VKAPA = BigDecimal::zero();
        }
        if ($this->VMT->add($this->VKAPA)->compareTo(BigDecimal::zero()) == 1) {
            if ($this->LSTSO->compareTo(BigDecimal::zero()) == 0) {
                $this->MOSONST();
                $this->LST1 = $this->LSTOSO;
            } else {
                $this->LST1 = $this->LSTSO;
            }
            $this->VBEZBSO = $this->STERBE->add($this->VKAPA);
            $this->ZRE4J = $this->JRE4->add($this->SONSTB)->add($this->VMT)->add($this->VKAPA)->divide($this->ZAHL100)->setScale(2, BigDecimal::ROUND_DOWN);
            $this->ZVBEZJ = $this->JVBEZ->add($this->VBS)->add($this->VKAPA)->divide($this->ZAHL100)->setScale(2, BigDecimal::ROUND_DOWN);
            $this->KENNVMT = 2;
            $this->MRE4SONST();
            $this->MLSTJAHR();
            $this->LST3 = $this->ST->multiply($this->ZAHL100);
            $this->MRE4ABZ();
            $this->ZRE4VP = $this->ZRE4VP->subtract($this->JRE4ENT->divide($this->ZAHL100))->subtract($this->SONSTENT->divide($this->ZAHL100));
            $this->KENNVMT = 1;
            $this->MLSTJAHR();
            $this->LST2 = $this->ST->multiply($this->ZAHL100);
            $this->STV = $this->LST2->subtract($this->LST1);
            $this->LST3 = $this->LST3->subtract($this->LST1);
            if ($this->LST3->compareTo($this->STV) == -1) {
                $this->STV = $this->LST3;
            }
            if ($this->STV->compareTo(BigDecimal::zero()) == -1) {
                $this->STV = BigDecimal::zero();
            } else {
                $this->STV = $this->STV->multiply(BigDecimal::valueOf($this->f))->divide($this->ZAHL100, 0, BigDecimal::ROUND_DOWN)->multiply($this->ZAHL100);
            }
            $this->SOLZV = $this->STV->multiply(BigDecimal::valueOf(5.5))->divide($this->ZAHL100)->setScale(0, BigDecimal::ROUND_DOWN);
            if ($this->R > 0) {
                $this->BKV = $this->STV;
            } else {
                $this->BKV = BigDecimal::zero();
            }
        } else {
            $this->STV = BigDecimal::zero();
            $this->SOLZV = BigDecimal::zero();
            $this->BKV = BigDecimal::zero();
        }
    }

    /**
     * Sonderberechnung ohne sonstige Bezuege fuer Berechnung bei sonstigen Bezuegen oder Verguetung fuer mehrjaehrige Taetigkeit, PAP Seite 34
     */
    protected function MOSONST() {
        $this->ZRE4J = $this->JRE4->divide($this->ZAHL100)->setScale(2, BigDecimal::ROUND_DOWN);
        $this->ZVBEZJ = $this->JVBEZ->divide($this->ZAHL100)->setScale(2, BigDecimal::ROUND_DOWN);
        $this->JLFREIB = $this->JFREIB->divide($this->ZAHL100, 2, BigDecimal::ROUND_DOWN);
        $this->JLHINZU = $this->JHINZU->divide($this->ZAHL100, 2, BigDecimal::ROUND_DOWN);
        $this->MRE4();
        $this->MRE4ABZ();
        $this->ZRE4VP = $this->ZRE4VP->subtract($this->JRE4ENT->divide($this->ZAHL100));
        $this->MZTABFB();
        $this->VFRBS1 = $this->ANP->add($this->FVB->add($this->FVBZ))->multiply($this->ZAHL100)->setScale(2, BigDecimal::ROUND_DOWN);
        $this->MLSTJAHR();
        $this->WVFRBO = $this->ZVE->subtract($this->GFB)->multiply($this->ZAHL100)->setScale(2, BigDecimal::ROUND_DOWN);
        if ($this->WVFRBO->compareTo(BigDecimal::zero()) == -1) {
            $this->WVFRBO = BigDecimal::zero();
        }
        $this->LSTOSO = $this->ST->multiply($this->ZAHL100);
    }

    /**
     * Sonderberechnung mit sonstige Bezuege fuer Berechnung bei sonstigen Bezuegen oder Verguetung fuer mehrjaehrige Taetigkeit, PAP Seite 35
     */
    protected function MRE4SONST() {
        $this->MRE4();
        $this->FVB = $this->FVBSO;
        $this->MRE4ABZ();
        $this->ZRE4VP = $this->ZRE4VP->subtract($this->JRE4ENT->divide($this->ZAHL100))->subtract($this->SONSTENT->divide($this->ZAHL100));
        $this->FVBZ = $this->FVBZSO;
        $this->MZTABFB();
        $this->VFRBS2 = $this->ANP->add($this->FVB)->add($this->FVBZ)->multiply($this->ZAHL100)->subtract($this->VFRBS1);
    }

    /**
     * Tarifliche Einkommensteuer §32a EStG, PAP Seite 36
     */
    protected function UPTAB17() {
        if ($this->X->compareTo($this->GFB->add($this->ZAHL1)) == -1) {
            $this->ST = BigDecimal::zero();
        } else {
            if ($this->X->compareTo(BigDecimal::valueOf(13770)) == -1) {
                $this->Y = $this->X->subtract($this->GFB)->divide($this->ZAHL10000, 6, BigDecimal::ROUND_DOWN);
                $this->RW = $this->Y->multiply(BigDecimal::valueOf(1007.27));
                $this->RW = $this->RW->add(BigDecimal::valueOf(1400));
                $this->ST = $this->RW->multiply($this->Y)->setScale(0, BigDecimal::ROUND_DOWN);
            } else {
                if ($this->X->compareTo(BigDecimal::valueOf(54058)) == -1) {
                    $this->Y = $this->X->subtract(BigDecimal::valueOf(13769))->divide($this->ZAHL10000, 6, BigDecimal::ROUND_DOWN);
                    $this->RW = $this->Y->multiply(BigDecimal::valueOf(223.76));
                    $this->RW = $this->RW->add(BigDecimal::valueOf(2397));
                    $this->RW = $this->RW->multiply($this->Y);
                    $this->ST = $this->RW->add(BigDecimal::valueOf(939.57))->setScale(0, BigDecimal::ROUND_DOWN);
                } else {
                    if ($this->X->compareTo(BigDecimal::valueOf(256304)) == -1) {
                        $this->ST = $this->X->multiply(BigDecimal::valueOf(0.42))->subtract(BigDecimal::valueOf(8475.44))->setScale(0, BigDecimal::ROUND_DOWN);
                    } else {
                        $this->ST = $this->X->multiply(BigDecimal::valueOf(0.45))->subtract(BigDecimal::valueOf(16164.53))->setScale(0, BigDecimal::ROUND_DOWN);
                    }
                }
            }
        }
        $this->ST = $this->ST->multiply(BigDecimal::valueOf($this->KZTAB));
    }
}

bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped)
Email: contact@elmoujehidin.net bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped) Email: contact@elmoujehidin.net