0) { $ztabfb = $ztabfb + $kfb; mlstjahr(); $jbmg = $st; } else $jbmg = $lstjahr; msolz(); $jre4 = $jre4 + $jsonstb; // nicht im PAP, berücksichtigt schon abgerechnete Einmalbezüge/Jahr msonst(); mvmt(); } function mre4lzz() { //Freibetraege fuer Versorgungsbezuege, Altersentlastungsbetrag (§39b Abs. 2 Satz 2 EStG) PAP Seite 10 global $re4, $vbez, $vbezm, $vbezs, $vbs, $vjahr, $vkapa, $vmt, $wfundf, $zmvb, $jvbez, $vjahr, $lzz, $sterbe, $vkapa, $vbezb, $fvbz, $fvb, $anteil2, $alter1, $ajahr, $alte, $lzz, $jw, $anteil1, $anteil2; $tab1 = Array (0, 0.4, 0.384, 0.368, 0.352, 0.336, 0.32, 0.304, 0.288, 0.272, 0.256, 0.24, 0.224, 0.208, 0.192, 0.176, 0.16, 0.152, 0.144, 0.136, 0.128, 0.12, 0.112, 0.104, 0.096, 0.088, 0.08, 0.072, 0.064, 0.056, 0.048, 0.04, 0.032, 0.024, 0.016, 0.008, 0); $tab2 = Array (0, 3000, 2880, 2760, 2640, 2520, 2400, 2280, 2160, 2040, 1920, 1800, 1680, 1560, 1440, 1320, 1200, 1140, 1080, 1020, 960, 900, 840, 780, 720, 660, 600, 540, 480, 420, 360, 300, 240, 180, 120, 60, 0); $tab3= Array (0, 900, 864, 828, 792, 756, 720, 684, 648, 612, 576, 540, 504, 468, 432, 396, 360, 342, 324, 306, 288, 270, 252, 234, 216, 198, 180, 162, 144, 126, 108, 90, 72, 54, 36, 18, 0); $tab4 = $tab1; $tab5 = Array (0,1900, 1824, 1748, 1672, 1596, 1520, 1444, 1368, 1292, 1216, 1140, 1064, 988, 912, 836, 760, 722, 684, 646, 608, 570, 532, 494, 456, 418, 380, 342, 304, 266, 228, 190, 152, 114, 76, 38, 0); if ($vbez == 0) { $fvbz = 0; $fvb = 0; } else { if ($vjahr < 2006) $j = 1; else { if ($vjahr < 2040) $j = $vjahr - 2004; else $j = 36; } if ($lzz == 1) { if ($sterbe + $vkapa > 0) { $vbezb = $vbezm * $zmvb + $vbezs; $hfvb = $tab2[$j] * 100; $fvbz = $tab3[$j]; } else { $vbezb = $vbezm * $zmvb + $vbezs; $hfvb = $tab2[$j] / 12 * $zmvb * 100; $fvbz = ceil($tab3[$j] / 12 * $zmvb); } } else { $vbezb = $vbezm * 12 + $vbezs; $hfvb = $tab2[$j] * 100; $fvbz = $tab3[$j]; } $fvb = ceil($vbezb * $tab1[$j]); if ($fvb > $hfvb) $fvb = $hfvb; $jw = $fvb; upanteil(); $fvb = $anteil2; } if ($alter1 == 0) $alte = 0; else { if ($ajahr < 2006) $k = 1; else { if ($ajahr < 2040) $k = $ajahr - 2004; else $k = 36; } $bmg = $re4 - $vbez; $alte = max(0,ceil($bmg * $tab4[$k])); $jw = $tab5[$k] * 100; upanteil(); if ($alte > $anteil2) $alte = $anteil2; } } function mre4() { //Massgeblicher Arbeitslohn fuer die Jahreslohnsteuer PAP Seite 12 //mit Zufügen eine Jahreshochrechnungsfaktors (Sinn?) global $lzz, $zre4, $zre4vp, $zvbez, $vbez, $fvb, $zre4, $re4lzz, $re4lzzv; if ($lzz == 1) { $zre4 = floor($re4lzz) / 100; $zre4vp = floor($re4lzzv) / 100; $zvbez = floor($vbez - $fvb) / 100; } if ($lzz == 2) { $zre4 = floor(($re4lzz + 0.67) * 12)/100; $zre4vp = floor(($re4lzzv + 0.67) * 12)/100; $zvbez = floor(($vbez - $fvb + 0.67) * 12)/100; } if ($lzz == 3) { $zre4 = floor(($re4lzz + 0.89) * 360 / 7)/100; $zre4vp = floor(($re4lzzv + 0.89) * 360 / 7)/100; $zvbez = floor(($vbez - $fvb + 0.89) * 360 / 7)/100; } if ($lzz == 4) { $zre4 = floor(($re4lzz + 0.56) * 360)/100; $zre4vp = floor(($re4lzzv + 0.56) * 360)/100; $zvbez = floor(($vbez - $fvb + 0.56) * 360)/100; } if ($zre4 < 0) $zre4 = 0; if ($zvbez <=0 || $vbez<=0) //abweichend vom PAP $zvbez = 0; } function mztabfb() { //Ermittlung der festen Tabellenfreibetraege (ohne Vorsorgepauschale) PAP Seite 13 global $kfb, $vbez, $zvbez, $fvbz, $zre4, $anp, $stkl, $zkf, $ztabfb, $kztab; $efa = 0; $sap = 0; $kfb = 0; $anp = 0; if ($vbez > 0) { if ($zvbez < $fvbz) $fvbz = $zvbez; } if ($stkl < 6) { if ($zvbez > 0) { if ($zvbez - $fvbz < 102) $anp = $zvbez - $fvbz; else $anp = 102; } } if ($stkl < 6) { if ($zre4 > $zvbez) { if ($zre4 - $zvbez < 920) $anp = $anp + $zre4 - $zvbez; else $anp = $anp + 920; } } $kztab = 1; if ($stkl == 1) { $sap = 36; $kfb = $zkf * 5808; } if ($stkl == 2) { $efa = 1308; $sap = 36; $kfb = $zkf * 5808; } if ($stkl == 3) { $kztab = 2; $sap = 72; $kfb = $zkf * 5808; } if ($stkl == 4) { $sap = 36; $kfb = $zkf * 2904; } if ($stkl == 5) $kfb = 0; if ($stkl == 6) $kfb = 0; $ztabfb = $efa + $anp + $sap + $fvbz; } function mlstjahr() { //Ermittlung der Jahreslohnsteuer, PAP S. 14 global $zve, $stkl, $zre4, $ztabfb, $vsp, $kztab, $x; if ($stkl < 5) upevp(); else $vsp = 0; $zve = $zre4 - $ztabfb - $vsp; if ($zve < 1) { $zve = 0; $x = 0; } else $x = floor($zve / $kztab); // auf Euro abrunden if ($stkl < 5) uptab07(); else mst5_6(); } function upevp() { // Vorsorgepauschale (§39b Abs. 2 Satz 6 Nr 3 EStG)PAP Seite 15 global $krv, $zre4vp, $kztab, $vsp; if ($krv == 1) $vsp1 = 0; else { if ($zre4vp > 63000) $zre4vp = 63000; $vsp1 = 0.28 * $zre4vp; $vsp1 = $vsp1 * 0.0995; } $vsp2 = 0.11 * $zre4vp; $vhb = 1500 * $kztab; if ($vsp2 > $vhb) $vsp2 = $vhb; $vspn = ceil($vsp1 + $vsp2); //auf Euro aufrunden mvsp(); if ($vspn > $vsp) $vsp = $vspn; } function mvsp() { //Vorsorgepauschale (§39b Abs. 2 Satz 6 Nr 3 EStG) Vergleichsberechnung //fuer Guenstigerpruefung PAP Seite 16 global $kennz, $zre4vp1, $zre4vp, $kztab, $krv, $vspvor, $vspmax1, $vspmax2, $vspo; if ($kennz == 1) $vspo = $zre4vp1 * 0.2; else $vspo = $zre4vp * 0.2; $vspvor = 3068 * $kztab; $vspmax1 = 1334 * $kztab; $vspmax2 = 667 * $kztab; $vspkurz = 1134 * $kztab; if ($krv == 1) { if ($vspo > $vspkurz) $vsp = $vspkurz; else $vsp = floor($vspo); // auf Euro abrunden } else umvsp(); } function umvsp() { //Vorsorgepauschale, PAP 2007, S. 17 global $kennz, $zre4vp1, $zre4vp, $kztab, $krv, $vspvor, $vspmax1, $vspmax2, $vspo, $vsp; if ($kennz == 1) $vspvor = $vspvor - $zre4vp1 * 0.16; else $vspvor = $vspvor - $zre4vp * 0.16; if ($vspvor < 0) $vspvor = 0; if ($vspo > $vspvor) { $vsp = $vspvor; $vsprest = $vspo - $vspvor; if ($vsprest > $vspmax1) { $vsp = $vsp + $vspmax1; $vsprest = floor(($vsprest - $vspmax1)*100) / 200; //auf Cent aufrunden if ($vsprest > $vspmax2) $vsp = floor($vsp + $vspmax2); //auf Euro abrunden else $vsp = floor($vsp + $vsprest); //auf Euro abrunden } else $vsp = floor($vsp + $vsprest); //auf Euro abrunden } else $vsp = floor($vspo); // auf Euro abfrunden } function mst5_6() { // Lohnsteuer fuer die Steuerklassen V und VI (§ 39b Abs. 2 Satz 8 EStG) PAP Seite 18 global $zx, $x, $st; $zzx = $x; if ($zzx > 25812) { $zx = 25812; up5_6(); if ($zzx > 200000){ $st = $st + (200000 - 25812) * 0.42; $st = floor($st + ($zzx - 200000) * 0.45); } else $st = floor($st + ($zzx-25812) * 0.42); } else { $zx = $zzx; up5_6(); if ($zzx > 9144) { $vergl = $st; $zx = 9144; up5_6(); $hoch = floor($st + ($zzx - 9144) * 0.42); if ($hoch < $vergl) $st = $hoch; else $st = $vergl; } } } function up5_6() { global $x,$zx, $st; $x = $zx * 1.25; uptab07(); $st1 = $st; $x = $zx * 0.75; uptab07(); $st2 = $st; $diff = ($st1 - $st2) * 2; $mist = floor($zx * 0.15); if ($mist > $diff) $st = $mist; else $st = $diff; } function msolz() { // Solidaritätszuschlag, PAP S. 19 global $kztab, $jbmg, $jw, $anteil1, $solzlzz, $bk, $r; $solzfrei = 972 * $kztab; if ($jbmg > $solzfrei) { $solzj = $jbmg * 5.5 / 100; $solzmin = ($jbmg - $solzfrei) * 20 / 100; if ($solzmin < $solzj) $solzj = $solzmin; $jw = $solzj * 100; upanteil(); $solzlzz = $anteil1; } else $solzlzz = 0; if ($r > 0){ $jw = $jbmg * 100; upanteil(); $bk = $anteil1; } else $bk = 0; } function upanteil() { // Anteil der Jahresbeiträge für einen LZZ // PAP 2007, S. 20 // anteil1 abrunden, anteil2 aufrunden global $lzz, $jw, $anteil1, $anteil2; if ($lzz == 1) { $anteil1 = $jw; $anteil2 = $jw; } if ($lzz == 2) { $anteil1 = floor($jw / 12); $anteil2 = ceil($jw / 12); } if ($lzz == 3) { $anteil1 = floor($jw * 7 / 360); $anteil2 = ceil($jw * 7 / 360); } if ($lzz == 4) { $anteil1 = floor($jw / 360); $anteil2 = ceil($jw / 360); } } function msonst() { // Berechnung sonstiger Bezüge, PAP 2007, S. 21 global $ajahr,$alte, $anp, $alter1, $anteil1, $anteil2, $bks, $fvb, $fvb, $fvbz, $jfreib, $jhinzu, $jre4, $jvbez, $jw, $lzz, $r, $re4, $re4lzz, $re4lzzv, $solzs, $sonstb, $st, $sterbe, $sts, $vbez, $vbezb, $vbezm, $vbezs, $vbs, $vjahr, $vkapa, $vmt, $zmvb, $zre4, $zre4vp, $zvbez; if ($sonstb > 0) { $lzz = 1; $vbez = $jvbez; $re4 = $jre4; mre4lzz(); mre4lzz2(); mlstjahr(); $lst1 = $st * 100; $vbs = $vbs + $sterbe; //zugefügt, Fehler im PAP $vbez = $jvbez + $vbs ; $re4 = $jre4 + $sonstb; $vbezs = $vbezs + $sterbe; mre4lzz(); mre4lzz2(); mlstjahr(); $lst2 = $st * 100; $sts = $lst2 - $lst1; $solzs = floor($sts * 5.5 / 100); if ($r > 0) $bks = $sts; else $bks = 0; } else { $sts = 0; $solzs = 0; $bks = 0; } } function mre4lzz2() { global $re4lzz, $re4lzzv, $re4, $fvb, $alte, $jfreib, $jhinzu; $re4lzz = $re4 - $fvb - $alte - $jfreib + $jhinzu; $re4lzzv = $re4 - $fvb - $alte; mre4(); mztabfb(); } function mvmt() { // Berechnung der Vergütung für mehrjährige Tätigkeit // PAP 2007, S. 22 global $ajahr,$alte, $alte, $alter1, $anteil1, $anteil2, $bkv, $fvb, $fvb, $fvbz, $jfreib, $jhinzu, $jre4, $jvbez, $jw, $kennz, $lzz, $r, $re4, $re4lzz, $re4lzzv, $solzv, $sonstb, $st, $sterbe, $stv, $vbez, $vbezb, $vbezm, $vbezs, $vbs, $vjahr, $vkapa, $vmt, $zmvb, $zre4, $zre4vp, $zre4vp1, $zvbez; if ($vmt + $vkapa > 0) { $lzz = 1; $vbez = $jvbez + $vbs; $re4 = $jre4 + $sonstb; mre4lzz(); mre4lzz2(); mlstjahr(); $lst1 = $st * 100; $vmt = $vmt + $vkapa; $vbezs = $vbezs + $vkapa; $vbez = $vbez + $vkapa; $re4 = $jre4 + $sonstb + $vmt; mre4lzz(); mre4lzz2(); $kennz = 1; $zre4vp1 = $zre4vp; mlstjahr(); $lst3 = $st * 100; $vbez = $vbez - $vkapa; $vbezs = $vbezs - $vkapa; $re4 = $jre4 + $sonstb; mre4lzz(); if ($re4 - $jfreib + $jhinzu < 0) { $re4 = $re4 - $jfreib + $jhinzu; $jfreib = 0; $jhinzu = 0; $re4 = ($re4 + $vmt) / 5; mre4lzz2(); mlstjahr(); $lst2 = $st * 100; $stv = $lst2 * 5; } else { $re4 = $re4 + $vmt / 5; mre4lzz2(); mlstjahr(); $lst2 = $st * 100; $stv = ($lst2 - $lst1) * 5; } $lst3 = $lst3 - $lst1; if ($lst3 < $stv) $stv = $lst3; $solzv = floor($stv * 5.5 / 100); if ($r > 0) $bkv = $stv; else $bkv = 0; } else { $stv = 0; $solzv = 0; $bkv = 0; } } function uptab07() { //Tarifliche Einkommensteuer, PAP 2007, S. 23 global $x, $st, $kztab; if ($x < 7665) $st = 0; else { if ($x < 12740) { $y = ($x - 7664) / 10000; $rw = $y * 883.74; $rw = $rw + 1500; $st = floor($rw * $y); } else { if ($x < 52152) { $y = ($x - 12739) / 10000; $rw = $y * 228.74; $rw = $rw + 2397; $rw = $rw * $y; $st = floor($rw + 989); } else { if( $x < 250001) $st = floor($x * 0.42 - 7914); else $st = floor($x * 0.45 - 15414); } } } $st = $st * $kztab; } //------------------------------- Parameterübergabe ----------------------- function jahranteil() { // Berechnung Jahreslohn aus LZZ-Lohn // (nicht im PAP enthalten) // für Berechnung sonstige bzw. mehrjährige Bezüge notwendig. global $lzz, $jw, $anteil1, $anteil2; if ($lzz == 1){ $anteil1 = $jw; $anteil2 = $anteil1; } if ($lzz == 2){ $anteil1 = $jw * 12; $anteil2 = $jw/12; } if ($lzz == 3){ $anteil1 = $jw * 360 / 7; $anteil2 = $jw * 7/360; } if ($lzz == 4){ $anteil1 = $jw * 360; $anteil2 = $jw/360; } } $ajahr = $_POST['ajahr']; if($ajahr>2004) $alter1=1; $stkl = $_POST['stkl']; $zkf = $_POST['zkf']; $land = $_POST['bundesland']; if($land < 3) $kist = 8; else $kist = 9; $r = $_POST['r']; $krv = $_POST['krv']; $lzz = $_POST['lzz']; $re4 = str_replace(",",".",($_POST['re4']))*100; $re4ret = $re4; $jw = $re4; jahranteil(); $jre4 = $anteil1; $sonstb = str_replace(",",".",($_POST['sonstb']))*100; $jsonstb = ($_POST['jsonstb'])*100; $vmt = ($_POST['vmt'])*100; $jfreib = ($_POST['jfreib'])*100; $jw = $jfreib; upanteil(); $wfundf = $anteil1; $jhinzu = ($_POST['jhinzu'])*100; $jw = $jhinzu; upanteil(); $hinzur = $anteil1; $vbez = str_replace(",",".",($_POST['vbez']))*100; $zmvb = $_POST['zmvb']; if($lzz==1) $jvbez = $vbez; if($lzz==2) $jvbez = $vbez * 12; $vbezs = str_replace(",",".",($_POST['vbezs']))*100; $sterbe = str_replace(",",".",($_POST['sterbe']))*100; $vkapa = ($_POST['vkapa'])*100; $vjahr = $_POST['vjahr']; $vbezm = str_replace(",",".",($_POST['vbezm']))*100; $re4soz = ($jre4 + $sonstb + $jsonstb)/100; $lzzsoz = $lzz; $brutto = komma(($re4+$sonstb+$vmt+$vkapa)/100); lst2007(); //Berechnung // ------------------ Ausgabe ------------------------------ function komma($wert) { $laenge = strlen($wert); $pos = strrpos($wert,"."); if($pos == false) $wert = $wert.".00"; elseif ($laenge - $pos == 2) $wert = $wert."0"; return $wert; } echo "
"; echo "

Ergebnis PHP-Gehaltsrecher"; echo "

"; //print_r($_POST); // zur überprüfung der übergebenen Parameter $steuer = komma(floor($lstlzz+$stv+$sts)/100); $soli = komma(floor($solzlzz+$solzs+$solzv)/100); $kirche = komma(floor(($bk+$bkv+$bks)*$kist/100)/100); $stges = $steuer+$soli+$kirche; echo "Bruttolohn: ".$brutto." Euro"; echo"
"; echo "
Lohnsteuer:   ".$steuer." Euro"; echo "
davon Steuer für laufenden Lohn ".komma($lstlzz/100)." Euro"; echo "
davon Steuer für Einmalbezug   ".komma($sts/100)." Euro"; echo "
davon Steuer für Vergütung mehrjäriger Tätigkeit   ".komma($stv/100)." Euro"; echo "

Solidaritätszuschlag: ".$soli." Euro"; echo "
".$kist."% Kirchensteuer: ".$kirche." Euro"; echo "
"; function soz() { global $jre4, $re4soz, $lzzsoz, $land, $re4ret, $sonstb, $jsonstb, $krv, $lzz, $kinderlos, $kvsatz, $anteil1, $anteil2, $jw, $rentewert, $rentewertag, $kvwert, $kvwertag, $pflegewert, $pflegewertag, $aloswert, $aloswertag, $pkv; $lzz = $lzzsoz; if($krv==1) $re4soz=0; $pflege = 0.85; $pflege_ag = $pflege; if($land==13) { $pflege = 1.35; $pflege_ag = 0.35; } $pvzusatz = 0; if ($kinderlos == 1) $pvzusatz = 0.25; if($kvsatz<=10.4) $kvsatz=0; else $kvsatz = floor($kvsatz*10)/10; $bemesk= min(42750,$re4soz); if($pkv>0) $bemesk = 0; if ($land==4||$land==8||$land==13||$land==14||$land==16) $bemesr = min(54600,$re4soz); else $bemesr = min(63000,$re4soz); if($bemesk-$jsonstb/100 <= 0) $bemesk=0; if($bemesk == $re4soz) $bemesk = $re4ret/100 + $sonstb/100; else { $restsonstb = max($bemesk-($jre4/100 + $jsonstb/100),0); $jw = min($jre4/100,$bemesk); upanteil(); $bemesk = $restsonstb + $anteil2; } if($bemesr-$jsonstb/100 <= 0) $bemesr=0; if($bemesr>=$re4soz) $bemesr = $re4ret/100 + $sonstb/100; else { $restsonstb = max($bemesr-($jre4/100 + $jsonstb/100),0); $jw = min($jre4/100,$bemesr); upanteil(); $bemesr = $restsonstb + $anteil2; } if($re4soz <= 0) {$bemesk=0;$bemesr=0;} $rente = 9.95; $alos = 2.1; $kzahn = 0.9; if ($kvsatz==0) $bemesk=0; $rentewert=round($bemesr*$rente)/100; $rentewertag=$rentewert; $kvwert=round($bemesk*$kvsatz/2 + $bemesk*$kzahn)/100; $kvwertag=round($bemesk*$kvsatz/2)/100; $pflegewert=round($bemesk*$pflege + $bemesk*$pvzusatz)/100; $pflegewertag=round($bemesk*$pflege_ag)/100; $aloswert=round($bemesr*$alos)/100; $aloswertag=$aloswert; if ($pkv>0){ $jw = $pkv*100/2; jahranteil(); $jw = min($anteil1,320625); jahranteil(); $kvwertag = round($anteil2/100); if($land==13){ $jw = $pkv*100/2; jahranteil(); $jw = min($anteil1,299250); jahranteil(); $kvwertag = round($anteil2/100); } $kvwert=$pkv-$kvwertag; } } //--------------- Auswertung und Ausgabe -------------------- $kinderlos = $_POST['kinderlos']; $pkv = str_replace(",",".",($_POST['e_pkv'])); $kvsatz=0; if($pkv == 0) $kvsatz = str_replace(",",".",($_POST['kvsatz'])); $aganzeige = $_POST['aganzeige']; $u1 = str_replace(",",".",($_POST['e_u1']))*0.01; $u2 = str_replace(",",".",($_POST['e_u2']))*0.01; //print_r($_POST); soz(); if($re4soz>0) { echo "
"; if($pkv>0) echo "Anteil private Krankenversicherung: ".komma($kvwert)." Euro
"; else { echo "Krankenversicherung: ".komma($kvwert)." Euro
"; echo "Pflegeversicherung: ".komma($pflegewert)." Euro
"; } echo "Rentenversicherung: ".komma($rentewert)." Euro
"; echo "Arbeitslosenversicherung: ".komma($aloswert)." Euro
"; echo "
"; } echo "
"; echo "Summe der Steuern: ".komma($stges)." Euro"; $sozges = komma($kvwert+$pflegewert+$rentewert+$aloswert); echo"
Summe Sozialversicherung: ".komma($sozges)." Euro"; $netto = komma($brutto-($stges+$sozges)); echo "
Nettoverdienst: ".$netto." Euro"; echo "
"; if($aganzeige==1) { echo"
"; echo "
"; echo "Arbeitgeberanteil:
"; if($pkv>0) echo "Zuschuss zur privaten Krankenversicherung: ".komma($kvwertag)." Euro
"; if($kvsatz>0) { echo "Krankenversicherung: ".komma($kvwertag)." Euro
"; echo "Pflegeversicherung: ".komma($pflegewertag)." Euro
"; } if($re4soz>0){ echo "Rentenversicherung: ".komma($rentewertag)." Euro
"; echo "Arbeitslosenversicherung: ".komma($aloswertag)." Euro
"; } if($u1>0) { $jw = 4275000; jahranteil(); $umlwert=min($re4ret,$anteil2); echo "Umlage U1: ".komma(floor($umlwert*$u1)/100)." Euro
"; echo "Umlage U2: ".komma(floor($umlwert*$u2)/100)." Euro
"; } echo "
"; if($pkv>0) $pflegewert=0; $agsumme=$kvwertag+$pflegewertag+$aloswertag+$rentewertag+$brutto+floor($umlwert*$u1)/100+ floor($umlwert*$u2)/100; echo "Arbeitgeber Gesamtbelastung: ".komma($agsumme)." Euro
"; echo "
"; } echo "

zurück"; echo ""; // diese Statuszeile kann man dann löschen ?>