Welcome To Our Shell

Mister Spy & Souheyl Bypass Shell

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

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/lohn.py

#  coding: utf-8

import os,sys,re,glob,random

from konto.lohnbuchhaltung import lohnsteuer
from konto.base import config

#************************************************************************************

class Lohn (object):

    def __init__(self,lohnkto="13-6000",sozkto="13-6010",kugkto=""):

        self.lohnkto = lohnkto
        self.sozkto  = sozkto
        self.kugkto  = kugkto

#        bezeichner  = [
#            
#            'LS'        ,  "Lohnsteuer",                                       "11-1503-LS",
#            'SZ'        ,  "Solidaritaetszuschlag",                            "11-1503-SZ",
#            'KI'        ,  "Kirchensteuer",                                    "11-1503-KI",
#            'AN-KV-S'   ,  "Arbeitnehmerbeitrag  Krankenversicherung",         "11-XXXX-KV-S-AN",
#            'AN-KV-Z'   ,  "Arbeitnehmerzuschlag Krankenversicherung",         "11-XXXX-KV-Z-AN",
#            'AN-RV'     ,  "Arbeitnehmerbeitrag  Rentenversicherung",          "11-XXXX-RV-AN",
#            'AN-AV'     ,  "Arbeitnehmerbeitrag  Arbeitslosenversicherung",    "11-XXXX-AV-AN",
#            'AN-PV-S'   ,  "Arbeitnehmerbeitrag  Pflegeversicherung",          "11-XXXX-PV-S-AN",
#            'AN-PV-Y'   ,  "Arbeitnehmerzuschlag Pflegeversicherung",          "11-XXXX-PV-Y-AN",
#            'AR-KV-S'   ,  "Arbeitgeberbeitrag   Krankenversicherung",         "11-XXXX-KV-S-AR",
#            'AR-KV-Z'   ,  "Arbeitgeberzuschlag  Krankenversicherung",         "11-XXXX-KV-Z-AR",
#            'AR-RV'     ,  "Arbeitgeberbeitrag   Rentenversicherung",          "11-XXXX-RV-AR",
#            'AR-AV'     ,  "Arbeitgeberbeitrag   Arbeitslosenversicherung",    "11-XXXX-AV-AR",
#            'AR-PV'     ,  "Arbeitgeberbeitrag   Pflegeversicherung",          "11-XXXX-PV-AR",
#            'AR-ST'     ,  "Pauschalsteuer geringfuegig Beschaeftigte",        "11-XXXX-ST-AR",
#            'AR-PS'     ,  "Pauschalsteuer kurzfristig Beschaeftigte",         "11-XXXX-PS-AR",
#            'AR-U1'     ,  "Arbeitgeber-Umlage   krankheitsbedingter Ausfall", "11-XXXX-U1-AR",
#            'AR-U2'     ,  "Arbeitgeber-Umlage   Mutterschutz",                "11-XXXX-U2-AR",
#            'AR-U3'     ,  "Arbeitgeber-Umlage   Insolvenzschutz",             "11-XXXX-U3-AR",
#            
#            ]
            
        bezeichner  = [
            
            'LS'        ,  "Lohnsteuer",                                       "11-C13-3065-LS",
            'SZ'        ,  "Solidaritaetszuschlag",                            "11-C13-3065-SZ",
            'KI'        ,  "Kirchensteuer",                                    "11-C13-3065-KI",
            'AN-KV-S'   ,  "Arbeitnehmerbeitrag  Krankenversicherung",         "11-C13-3740-XXXX-KV-S-AN",
            'AN-KV-Z'   ,  "Arbeitnehmerzuschlag Krankenversicherung",         "11-C13-3740-XXXX-KV-Z-AN",
            'AN-RV'     ,  "Arbeitnehmerbeitrag  Rentenversicherung",          "11-C13-3740-XXXX-RV-AN",
            'AN-AV'     ,  "Arbeitnehmerbeitrag  Arbeitslosenversicherung",    "11-C13-3740-XXXX-AV-AN",
            'AN-PV-S'   ,  "Arbeitnehmerbeitrag  Pflegeversicherung",          "11-C13-3740-XXXX-PV-S-AN",
            'AN-PV-Y'   ,  "Arbeitnehmerzuschlag Pflegeversicherung",          "11-C13-3740-XXXX-PV-Y-AN",
            'AR-KV-S'   ,  "Arbeitgeberbeitrag   Krankenversicherung",         "11-C13-3740-XXXX-KV-S-AR",
            'AR-KV-Z'   ,  "Arbeitgeberzuschlag  Krankenversicherung",         "11-C13-3740-XXXX-KV-Z-AR",
            'AR-RV'     ,  "Arbeitgeberbeitrag   Rentenversicherung",          "11-C13-3740-XXXX-RV-AR",
            'AR-AV'     ,  "Arbeitgeberbeitrag   Arbeitslosenversicherung",    "11-C13-3740-XXXX-AV-AR",
            'AR-PV'     ,  "Arbeitgeberbeitrag   Pflegeversicherung",          "11-C13-3740-XXXX-PV-AR",
            'AR-ST'     ,  "Pauschalsteuer geringfuegig Beschaeftigte",        "11-C13-3740-XXXX-ST-AR",
            'AR-PS'     ,  "Pauschalsteuer kurzfristig Beschaeftigte",         "11-C13-3065-PS",
            'AR-PZ'     ,  "Pauschal-Soli  kurzfristig Beschaeftigte",         "11-C13-3065-PZ",
            'AR-PK'     ,  "Pauschal-KiSt  kurzfristig Beschaeftigte",         "11-C13-3065-PK",
            'AR-U1'     ,  "Arbeitgeber-Umlage   krankheitsbedingter Ausfall", "11-C13-3740-XXXX-U1-AR",
            'AR-U2'     ,  "Arbeitgeber-Umlage   Mutterschutz",                "11-C13-3740-XXXX-U2-AR",
            'AR-U3'     ,  "Arbeitgeber-Umlage   Insolvenzschutz",             "11-C13-3740-XXXX-U3-AR",

            'KN-KV-S'   ,  "KUG Arbeitnehmerbeitrag  Krankenversicherung",         "11-C13-3740-XXXX-KV-S-AN",
            'KN-KV-Z'   ,  "KUG Arbeitnehmerzuschlag Krankenversicherung",         "11-C13-3740-XXXX-KV-Z-AN",
            'KN-RV'     ,  "KUG Arbeitnehmerbeitrag  Rentenversicherung",          "11-C13-3740-XXXX-RV-AN",
            'KN-PV-S'   ,  "KUG Arbeitnehmerbeitrag  Pflegeversicherung",          "11-C13-3740-XXXX-PV-S-AN",
            'KN-PV-Y'   ,  "KUG Arbeitnehmerzuschlag Pflegeversicherung",          "11-C13-3740-XXXX-PV-Y-AN",
            'KR-KV-S'   ,  "KUG Arbeitgeberbeitrag   Krankenversicherung",         "11-C13-3740-XXXX-KV-S-AR",
            'KR-KV-Z'   ,  "KUG Arbeitgeberzuschlag  Krankenversicherung",         "11-C13-3740-XXXX-KV-Z-AR",
            'KR-RV'     ,  "KUG Arbeitgeberbeitrag   Rentenversicherung",          "11-C13-3740-XXXX-RV-AR",
            'KR-PV'     ,  "KUG Arbeitgeberbeitrag   Pflegeversicherung",          "11-C13-3740-XXXX-PV-AR",
            ]
            
        self.abgabenarten = bezeichner[::3]
        self.bezeichner   = dict(zip(bezeichner[::3],bezeichner[1::3]))
        self.gegenkonto   = dict(zip(bezeichner[::3],bezeichner[2::3]))
        self.bezeichner['LOHN-AR']  = "Arbeitgeberanteil    Gehalt"
        self.bezeichner['LOHN-KUG'] = "Arbeitgeberanteil    KUG"

#        try:
#            self.fibu.rules
#        except:
#            self.fibu.rules = self.fibu

        self.gleitzone = {
         '12A': 400, '12B': 800,
         '15A': 450, '15B': 850,
         
         2007: 0.7673,
         2008: 0.7732, 2009: 0.7472,
         2010: 0.7585, 2011: 0.7435,
         2012: 0.7491, 2013: 0.7605,
         2014: 0.7605, 2015: 0.7585,
         2016: 0.7547, 2017: 0.7547,
         2018: 0.7547
         
             }  #  Gleitzonenfaktor     FIBU-GLEITZONE-002-VALID
                          #  FIBU-BEMESSUNGSGRENZEN-002-VALID
         
#        self.rv_obergrenze = {2007: 5800.0, 2008: 5800.0, 2009: 5800.0, 2010: 5800.0,
#                              2011: 5800.0, 2012: 5800.0, 2013: 5800.0,
#                              2014: 5950.0, 2015: 6050.0, 2016: 6200.0,
#                              2017: 6350.0, 2018: 6500.0}
#        self.kv_obergrenze = {2007: 3937.5, 2008: 3937.5, 2009: 3937.5, 2010: 3937.5,
#                              2011: 3937.5, 2012: 3937.5, 2013: 3937.5,
#                              2014: 4050.0, 2015: 4125.0, 2016: 4237.5,
#                              2017: 4350.0, 2018: 4425}


                          #  FIBU-BEMESSUNGSGRENZEN-002

#*************************************************************************

    def kknr (self,kk):
    
        kk = kk.upper()
        kk = re.sub(r"\n"," ",kk,99999999)
    
        if " DAK" in kk:
            return("1510","DAK")
        elif "AOK HESSEN" in kk:
            return("1511","AOKHES")
        elif " AOK RHEINL" in kk:
            return("1520","AOKRPS")
        elif " AOK NORD" in kk:
            return("1521","AOKNWE")
        elif " MINIJOB" in kk or " KNAPPSCHAFT" in kk:
            return("1512","MINIJO")
        elif re.search("( BKK_?VER|[- ]VBU)",kk):
            return("1513","VBU")
        elif " AOK BAYERN" in kk:
            return("1514","AOKBAY")
        elif re.search("( BKK_?MOBIL| MOBILOI?L?| BKKMOIL|LFD.\s*NR.\s*ERFASSUNG)",kk):
            return("1515","MOBILO")
        elif re.search("( BKK_?SIEMENS | SBK )",kk):
            return("1516","SBK")
        elif " TECHNIKER" in kk or " TKK" in kk or " TECHNKK" in kk:
            return("1517","TKK")
        elif " BARMER" in kk:
            return("1518","BARMER")
        elif " DEBEKA" in kk:
            return("1519","DEBEKA")
        return("1528","UNKNOWN")

#*************************************************************************

    def parse_lohndaten (self,buchungsdaten_text,ktoslip,ktolstb):

        self.lstfile = {}
        self.lsttext = {}

        buchungen         = []
        lohndaten         = {}
        gesetzte_betraege = {}
        ktoslips          = {}
        ukto              = "-"
        
        uebertragsbuchhaltung = ""
#        m = re.search(r" (10\-B23\-1890\-[\da-z]+\-)",buchungsdaten_text)
#        if m:
#            uebertragsbuchhaltung = m.group(1)
        

        for zeile in buchungsdaten_text.split('\n'):

#            print(zeile)  
            m = re.search('^(\d\d\d\d\d\d\d\d) +(\-?\d+\.\d\d) +(\S+?) +(\S+) +(\-?\d+\.\d\d) +(.*)', zeile)
            if not m:
                continue
                
            datum  = m.group(1)
            betrag = m.group(2)
            ktoa   = m.group(3)
            ktob   = m.group(4)
            remark = m.group(6)

            if ktob.startswith(config.LOHNSTEUER_KONTO):
                uebertragsbuchhaltung = ""
            else:
                m = re.search("(10\-B23\-1890\-[\da-z]+\-)"+config.LOHNSTEUER_KONTO,ktob)
                if m:
                    uebertragsbuchhaltung = m.group(1)
                    
        diffs = {}
        for art in self.abgabenarten:
            diffs[art] = 0.00
            

#   1.   Daten einlesen aus Lohnbescheinigungen

        for slip in ktoslip:
            erg = self.read_lohnbescheinigung(slip)
            if erg:
                jm                    = erg[0]
                slipdata              = erg[1]
                ktoslips[jm]          = slip
                if not jm == "000001":
                    lohndaten[jm]            = slipdata
                    lohndaten[jm]['ZAHL']    = []
                    lohndaten[jm]['LFAKTOR'] = '1'

        jms = list(lohndaten.keys())
        jms.sort()


#   2.   Daten einlesen aus Konto
        
        export_zahl = {}
        export_sum  = {}
        rest_lines  = []

        for zeile in buchungsdaten_text.split("\n"):

            m  = re.search('^(\d\d\d\d)(\d\d)(\d\d) +(\-?\d+\.\d\d\*?\d?) +(\S*?)\-([A-Z\-]+\d?) +\S+ +(\-?\d+\.\d\d) +(.*)', zeile)
            if not m:
                rest_lines.append(zeile)
                continue

            ukto = m.group(5)

#            print(zeile)
#            print("================",m.group(5))

            jm     = m.group(1) + m.group(2)
            betrag = "%3.2f" % eval(m.group(4))
            art    = m.group(6)
            rem    = m.group(8)
            
            if art == "ZAHL":     #   Zahlungen
                buchungen.append(zeile)
                if not jm in export_zahl:
                    export_zahl[jm] = ""
                    export_sum[jm]  = 0.00
                export_sum[jm]  = export_sum[jm]  + float(betrag)
                betrag = m.group(3) + "." + m.group(2) + ".  " + ("%11.2f" % float(betrag)) 
                while (0 == 0):
                    export_zahl[jm] = export_zahl[jm] + betrag + "  " + rem[0:75] + "\n"
                    rem    = re.sub(r"^ +","",rem[75:])
                    betrag = "                   "
                    if rem == "":
                        break
                        
            elif art == "LOHN-AN" or art == "LOHN-KN":  #   and not "KUG-Berechnung" in rem:
                if not jm in lohndaten:
                    lohndaten[jm] = {}
                if not 'LOHN1' in lohndaten[jm]:
                    lohndaten[jm]['LOHN1'] = []
                m = re.search("(\d+)fach ",rem)
                if m:
                    lohndaten[jm]['LFAKTOR'] = m.group(1)
                    lohndaten[jm]['LOHN1'].append("%3.2f" % (- float(betrag)/float(m.group(1)) ) )
                else:
                    lohndaten[jm]['LFAKTOR'] = "1"
                    lohndaten[jm]['LOHN1'].append("%3.2f" % (- float(betrag) ) )
                lohndaten[jm]['LOHN1'].append(rem)
                if 'KV' in rem:
                    lohndaten[jm]['UEKV'] = 1
                if 'RV' in rem or 'XV' in rem:
                    lohndaten[jm]['UERV'] = 1
                m = re.search("KUG(SOZ|SOH|)(\d\d).*?(\d+)([,\.]\d\d|)",rem)
                if m:
                    lohndaten[jm]['kugjahr'] = m.group(2)
                    lohndaten[jm]['kugdiff'] = abs(float(re.sub(r",",".",m.group(3)+m.group(4))))
                    lohndaten[jm]['kugausz'] = abs(float(betrag))
                else:
                    lohndaten[jm]['kugausz'] = 0.0

            else:
                m = re.search(r"( *\(.*gesetzt.*?)(\-?\d+\.\d\d)(.*\).*)",rem)
                if m:
                    if jm not in gesetzte_betraege:
                        gesetzte_betraege[jm] = {}
                    gesetzte_betraege[jm][art] = (float(m.group(2)),m.group(1)+m.group(2)+m.group(3))

#  3.   Alle Buchungszeitraeume durchgehen:

        jm0 = "000001"
        jms = list(lohndaten.keys())
        jms.sort()

        betraege = {}
        for jm in jms:

            jahr        = jm[0:4]
            monat       = jm[4:6]
            
#  4.   Lohnsumme berechnen

            if not jm0[0:4] == jm[0:4]:
                lohnsumme   = 0.0
                ls_sum      = 0.0
                sz_sum      = 0.0
                ki_sum      = 0.0
                monate      = 0
                ch_merk     = None
                jahressumme = {}
                for art in self.abgabenarten:
                    jahressumme[art] = 0.00
                jm0       = jm

            betraege[jm] = {}
            lst_exists = True
            if not 'LOHN-AN' in lohndaten[jm]:   #  wenn noch keine Lohnsteuerbescheinigung vorliegt
                lohndaten[jm]['LOHN-AN'] = lohndaten[jm]['LOHN1']
                lst_exists = False
                

            lohn = 0.0
            for entry in lohndaten[jm]['LOHN-AN']:
            
                if not 'MERK' in lohndaten[jm]:
                    m = re.search(r"(\d\d\d\d[r\-]*)/(\d\d\d\d)",entry)
                    if m:
                        lohndaten[jm]['MERK'] = m.group(1)
                        lohndaten[jm]['NR']   = m.group(2)
                        self.set_rahmendaten(lohndaten[jm],jahr,monat)
                        
                if not 'STKL' in lohndaten[jm]:
                    m = re.search(r" (\d)/(\-?[0-9\.\-]+)/([0-9\.]+)",entry)
                    if m:
                        lohndaten[jm]['STKL']   = m.group(1)
                        lohndaten[jm]['KINDER'] = m.group(2)
                        lohndaten[jm]['KIST']   = m.group(3)
                m = re.search(r" (\d\d\d\d)\.(\d\d\d\d)",entry)
                if m:
                    lohndaten[jm]['KLIMIT'] = "%3.2f" % float(m.group(1))
                    lohndaten[jm]['RLIMIT'] = "%3.2f" % float(m.group(2))
                try:
                    lohn = lohn + float(entry)
                except:
                    pass
                    
            if 'kugausz' in lohndaten[jm]:
                lohn = lohn - lohndaten[jm]['kugausz']  #  KUG ist kein Lohn
            lohnsumme = lohnsumme + lohn   #  Lohn
            monate    = monate + 1

#  4.   Lohnsteuer berechnen

            try:
                stkl = int(lohndaten[jm]['STKL'])
            except:
                print("No data for STKL in " + jm)
            kist = lohndaten[jm]['KIST']
            merk = lohndaten[jm]['MERK']
            if not merk[0] == "0":
                kv_zuschlag_f_lst_berechnung = float(lohndaten[jm]['ZV'])  #  average 'ZU' 
                kv_zuschlag_f_lst_berechnung = float(lohndaten[jm]['ZU'])
            else:
                kv_zuschlag_f_lst_berechnung = 0.0
            if float(lohndaten[jm]['KINDER']) < 0:
                kv_zuschlag_f_lst_berechnung = kv_zuschlag_f_lst_berechnung + float(lohndaten[jm]['PZ'])

            if ch_merk == 0:
                ch_merk = [stkl,kv_zuschlag_f_lst_berechnung,kist]
            elif not ch_merk == 1:
                if not ch_merk == [stkl,kv_zuschlag_f_lst_berechnung,kist]:
                    ch_merk = 1

#            exec('import pap.lst' + jahr)

            kinderfreibetrag = 0
            
            ls = 0.00
            sz = 0.00
            ki = 0.00
            
            if stkl > 0:
                for i in (1,2):
                    stobj = eval('lohnsteuer.lst' + jahr + '.Lst' + jahr + '()')
                    stobj.setKrv(0)
                    stobj.setLzz(2)
                    stobj.setR(int(float(kist)>0))
                    stobj.setRe4( max(0, int ( (float(lohn)-float(kinderfreibetrag)) *100) ) )
                    stobj.setStkl(stkl)
                    try:
                        stobj.setKvz(kv_zuschlag_f_lst_berechnung)
                    except Exception as e:
                        str(e)
                    stobj.setZkf(max(0.0,float(lohndaten[jm]['KINDER'])))
                    stobj.MAIN()
#                    kinderfreibetrag = float(stobj.KFB)/12     #   nicht klar, wozu ndiese Berechnung gemacht wurde

#                print("XX", int ( (float(lohn)-float(kinderfreibetrag)) *100) )
                ls = 0.01 * float( stobj.getLstlzz() )
                sz = 0.01 * float( stobj.getSolzlzz() )
                ki = 0.01 * ( float(stobj.getBk()) + float(stobj.getBks()) + float(stobj.getBkv())) * (0.01 * float(kist))
                
#                print(lohndaten[jm])
#                print(jm,ls,sz,ki)
            
            if monate == 12 and type(ch_merk) == type([]):  #  Jahresausgleich nur dann machen,
                stobj.setLzz(1)                             #  wenn alle 12 Monate bei IfT und sich keine Merkmale
                stobj.setRe4( int(lohnsumme*100) )          #  geaendert haben
                stobj.MAIN()
                jahres_ls = 0.01 * float( stobj.getLstlzz() )
                jahres_sz = 0.01 * float( stobj.getLstlzz() )
                jahres_ki = 0.01 * ( float(stobj.getBk()) + float(stobj.getBks()) + float(stobj.getBkv())) * float(kist)
                ls = jahres_ls - ls_sum
                sz = jahres_sz - ls_sum
                ki = jahres_ki - ls_sum
            else:
                ls_sum = ls_sum + ls
                sz_sum = sz_sum + sz
                ki_sum = ki_sum + ki
            betraege[jm]['LS'] = "%3.2f" % ls
            betraege[jm]['SZ'] = "%3.2f" % sz
            betraege[jm]['KI'] = "%3.2f" % ki
            
#  5.  Sozialversicherung berechnen
            
#            restlohnrv = max(0,12*float(lohndaten[jm]['RLIMIT']) - lohnsumme)
#            restlohnkv = max(0,12*float(lohndaten[jm]['KLIMIT']) - lohnsumme)
#            lohnrv     = min(lohn,restlohnrv)
#            lohnkv     = min(lohn,restlohnkv)

            lohnkv     = min(lohn,float(lohndaten[jm]['KLIMIT']))
            lohnrv     = min(lohn,float(lohndaten[jm]['RLIMIT']))
            if 'UEKV' in lohndaten[jm]:   #   wenn aufgrund von Lohnsteigerungen im Jahr die
                lohnkv = lohnrv           #   Beitragsbemessungsgrenzen keine Anwendung finden sollen
            if 'UERV' in lohndaten[jm]:
                lohnkv = lohn
                lohnrv = lohn

            merk       = lohndaten[jm]['MERK']
            mode       = "s"  #   Standard
            kinder     = lohndaten[jm]['KINDER']

#            print(merk,stkl)
            if merk[0:4] == "3321":
                merk = "1111r-" + merk[4:]

            if merk[0:4] == "1100" or merk[0:4] == "6500" and stkl == 0:
                mode     = "g"   #   geringfuegig beschaeftigt
                merk     = "1100" + merk[4:]
            if merk[0:4] == "1110" or merk[0:4] == "6100" and stkl == 0:
                mode     = "h"   #   geringfuegig beschaeftigt, mit Rentenversicherung
                merk     = "1110" + merk[4:]
            elif merk[0:4] == "0000":   #  kurzfristig beschaeftigt
                if stkl == 0:
                    mode    = "p"   #   Pauschalversteuerung 25 vH, ohne U1 und U2
                else:
                    mode    = "k"   #   Individualversteuerung
            if float(kinder) < 0:
                kinder = "0"
                mode   = re.sub(r"s","o",mode)   #   ueber 23, keine Kinder

            betraege[jm]['AN-KV-S'] = "%3.2f" % ( 0.01 * float(lohndaten[jm]['KV']) * lohnkv * int(mode in "so")  * int(merk[0]) )
            krankengeld             = "%3.2f" % ( 0.01 * float(lohndaten[jm]['KG']) * lohnkv * int(mode in "so")  * int(merk[0]) )
            betraege[jm]['AN-KV-Z'] = "%3.2f" % ( 0.01 * float(lohndaten[jm]['ZU']) * lohnkv * int(mode in "so")  * int(merk[0]) )
            betraege[jm]['AR-KV-S'] = "%3.2f" % ( 0.01 * float(lohndaten[jm]['KV']) * lohnkv * int(mode in "sogh")* int(merk[0]) )
            betraege[jm]['AR-KV-Z'] = "%3.2f" % ( 0.01 * float(lohndaten[jm]['ZA']) * lohnkv * int(mode in "sogh")* int(merk[0]) )

            betraege[jm]['AN-RV']   = "%3.2f" % ( 0.01 * float(lohndaten[jm]['RV']) * lohnrv * int(mode in "so")  * int(merk[1]) +
                                                  0.01 * float(lohndaten[jm]['AV']) * lohnrv * int(mode in "h")   * int(merk[1]) )
            betraege[jm]['AR-RV']   = "%3.2f" % ( 0.01 * float(lohndaten[jm]['RV']) * lohnrv * int(mode in "sogh")* int(merk[1]) )

            betraege[jm]['AN-AV']   = "%3.2f" % ( 0.01 * float(lohndaten[jm]['AV']) * lohnrv * int(mode in "so")  * int(merk[2]) )
            betraege[jm]['AR-AV']   = "%3.2f" % ( 0.01 * float(lohndaten[jm]['AV']) * lohnrv * int(mode in "so")  * int(merk[2]) )

            betraege[jm]['AN-PV-S'] = "%3.2f" % ( 0.01 * float(lohndaten[jm]['PV']) * lohnkv * int(mode in "so")  * int(merk[3]) )
            betraege[jm]['AN-PV-Y'] = "%3.2f" % ( 0.01 * float(lohndaten[jm]['PZ']) * lohnkv * int(mode in "o")   * int(merk[3]) )
            betraege[jm]['AR-PV']   = "%3.2f" % ( 0.01 * float(lohndaten[jm]['PV']) * lohnkv * int(mode in "so")  * int(merk[3]) )

            betraege[jm]['AR-ST']   = "%3.2f" % ( 0.01 * float(lohndaten[jm]['ST']) * lohn * int(mode in "gh") )
            betraege[jm]['AR-PS']   = "%3.2f" % ( 0.01 * float(lohndaten[jm]['PS']) * lohn * int(mode in "p") )
            betraege[jm]['AR-PZ']   = "%3.2f" % ( 0.01 * float(lohndaten[jm]['SOLIANTEIL']) * 
                                                         float(lohndaten[jm]['PS']) * lohn * int(mode in "p") )
            betraege[jm]['AR-PK']   = "%3.2f" % ( 0.01 * 0.01  * float(kist) * 
                                                         float(lohndaten[jm]['PS']) * lohn * int(mode in "p") )

            betraege[jm]['AR-U1']   = "%3.2f" % ( 0.01 * float(lohndaten[jm]['U1']) * lohn  * int(mode not in "") )
            betraege[jm]['AR-U2']   = "%3.2f" % ( 0.01 * float(lohndaten[jm]['U2']) * lohn  * int(mode not in "") )
            betraege[jm]['AR-U3']   = "%3.2f" % ( 0.01 * float(lohndaten[jm]['U3']) * lohn  * int(mode not in "") )

            if "r" in merk or "g" in merk:   #  Rentner
                betraege[jm]['AN-RV']   = "0.00"
                betraege[jm]['AN-AV']   = "0.00"
                betraege[jm]['AR-RV']   = "x" + betraege[jm]['AR-RV']   #   das dient dazu, um die Soz-Vers-Klasse mit EV (ermaessigt) statt als KV zu kennzeichnen
                betraege[jm]['AR-AV']   = "x" + betraege[jm]['AR-AV']   #   genauso mit BV fuer AV und XV fuer RV
            if lohndaten[jm]['NR'] == "1579":   #  Srpska
                betraege[jm]['AR-RV']   = "0.00"
                betraege[jm]['AR-KV-S']   = "0.00"
                betraege[jm]['AR-KV-Z']   = "0.00"
                betraege[jm]['AR-AV']   = "0.00"
                betraege[jm]['AR-PV']   = "0.00"
            if "-" in merk:   #  ohne Krankengeld
                betraege[jm]['AN-KV-S'] = "x" + "%3.2f" % ( float(betraege[jm]['AN-KV-S']) - float(krankengeld) )
                if 'AR-KV-S' in betraege[jm]:
                    betraege[jm]['AR-KV-S'] = "x" + "%3.2f" % ( float(betraege[jm]['AR-KV-S']) - float(krankengeld) )
                else:
                    betraege[jm]['AR-KV']   = "x" + "%3.2f" % ( float(betraege[jm]['AR-KV']) - float(krankengeld) )
            

#            if 'FIX' in lohndaten[jm] and lohndaten[jm]['FIX'] == 1:
#                for art in self.abgabenarten:
#                    betraege[jm][art] = 0.00
#                    for o in lohndaten[jm][art]:
#                        betraege[jm][art] = betraege[jm][art] + float(o)
#                        break

#  7.  Sozialversicherung Kurzarbeitergeld:

            if 'kugdiff' in lohndaten[jm]:     #   Sozialversicherung des KUG muss der Arbeitgeber tragen:
#                print("KUG",lohndaten[jm]['kugdiff'],lohn)
                lohn_eigen  = lohn
                lohn_fiktiv = (lohndaten[jm]['kugdiff'] - lohn)
                lohn        = 0.8 * lohn_fiktiv
            else:
                lohn        = 0.0
                lohn_eigen  = 0.0
                lohn_fiktiv = 0.0
            lohnkv = min(lohn,float(lohndaten[jm]['KLIMIT']))
            lohnrv = min(lohn,float(lohndaten[jm]['RLIMIT']))
#            print(lohnkv,lohnrv)

            lohndaten[jm]['LOHNFIKTIV'] = "%3.2f" % ( lohn + lohn_eigen)
            betraege[jm]['KN-KV-S'] = "%3.2f" % ( 0.01 * float(lohndaten[jm]['KV']) * lohnkv * int(mode in "so")  * int(merk[0]) )
#            print(betraege[jm]['KN-KV-S'],lohndaten[jm]['KN-KV-S'])
            krankengeld             = "%3.2f" % ( 0.01 * float(lohndaten[jm]['KG']) * lohnkv * int(mode in "so")  * int(merk[0]) )
            betraege[jm]['KN-KV-Z'] = "%3.2f" % ( 0.01 * float(lohndaten[jm]['ZU']) * lohnkv * int(mode in "so")  * int(merk[0]) )
            betraege[jm]['KR-KV-S'] = "%3.2f" % ( 0.01 * float(lohndaten[jm]['KV']) * lohnkv * int(mode in "sogh")* int(merk[0]) )
            betraege[jm]['KR-KV-Z'] = "%3.2f" % ( 0.01 * float(lohndaten[jm]['ZA']) * lohnkv * int(mode in "sogh")* int(merk[0]) )
   
            betraege[jm]['KN-RV']   = "%3.2f" % ( 0.01 * float(lohndaten[jm]['RV']) * lohnrv * int(mode in "so")  * int(merk[1]) +
                                              0.01 * float(lohndaten[jm]['AV']) * lohnrv * int(mode in "h")   * int(merk[1]) )
            betraege[jm]['KR-RV']   = "%3.2f" % ( 0.01 * float(lohndaten[jm]['RV']) * lohnrv * int(mode in "sogh")* int(merk[1]) )

            betraege[jm]['KN-AV']   = "%3.2f" % ( 0.01 * float(lohndaten[jm]['AV']) * lohnrv * int(mode in "so")  * int(merk[2]) )
            betraege[jm]['KR-AV']   = "%3.2f" % ( 0.01 * float(lohndaten[jm]['AV']) * lohnrv * int(mode in "so")  * int(merk[2]) )

            betraege[jm]['KN-PV-S'] = "%3.2f" % ( 0.01 * float(lohndaten[jm]['PV']) * lohnkv * int(mode in "so")  * int(merk[3]) )
            betraege[jm]['KN-PV-Y'] = "%3.2f" % ( 0.01 * float(lohndaten[jm]['PZ']) * lohnkv * int(mode in "o")   * int(merk[3]) )
            betraege[jm]['KR-PV']   = "%3.2f" % ( 0.01 * float(lohndaten[jm]['PV']) * lohnkv * int(mode in "so")  * int(merk[3]) )

            if "-" in merk:
                betraege[jm]['KN-KV-S'] = "%3.2f" % ( float(betraege[jm]['KN-KV-S']) - float(krankengeld) )
                if 'KR-KV-S' in betraege[jm]:
                    betraege[jm]['KR-KV-S'] = "%3.2f" % ( float(betraege[jm]['KR-KV-S']) - float(krankengeld) )
                else:
                    betraege[jm]['KR-KV']   = "%3.2f" % ( float(betraege[jm]['KR-KV']) - float(krankengeld) )
                        

#   8.   KUG-Anteile hinzurechnen


#            betraege[jm]['AR-KV-S'] = "%3.2f" % ( float(betraege[jm]['AR-KV-S']) + float(betraege[jm]['KN-KV-S']) 
#                                                         + float(betraege[jm]['KR-KV-S'])  )
#            betraege[jm]['AR-KV-Z'] = "%3.2f" % ( float(betraege[jm]['AR-KV-Z']) + float(betraege[jm]['KN-KV-Z']) 
#                                                         + float(betraege[jm]['KR-KV-Z'])  )
#            betraege[jm]['AR-PV']   = "%3.2f" % ( float(betraege[jm]['AR-PV'])   + float(betraege[jm]['KN-PV-S']) 
#                                                         + float(betraege[jm]['KR-PV'])  )
#            betraege[jm]['AR-RV']   = "%3.2f" % ( float(betraege[jm]['AR-RV'])   + float(betraege[jm]['KN-RV'])   
#                                                         + float(betraege[jm]['KR-RV'])  )
#            
#            kug_sozialbeitraege     = ( float(betraege[jm]['KN-KV-S']) + float(betraege[jm]['KR-KV-S'])
#                                        float(betraege[jm]['KN-KV-Z']) + float(betraege[jm]['KR-KV-Z'])
#                                        float(betraege[jm]['KN-PV'])   + float(betraege[jm]['KR-PV'])
#                                        float(betraege[jm]['KN-RV'])   + float(betraege[jm]['KR-RV'])  )

            for art in self.abgabenarten:
                try:
                    betraege[jm][art] = "%3.2f" % gesetzte_betraege[jm][art][0]
                except:
                    pass

#   9.  Korrekturen berechnen

            if not lst_exists:
                for art in self.abgabenarten:
                    lohndaten[jm][art] = [ re.sub("x","",betraege[jm][art]), "%3.2f" % diffs[art] ]
                    diffs[art]         = 0.00
                    jahressumme[art]   = -99999999
                    
            else:
                for art in self.abgabenarten:
                    sum = 0.00
                    for o in lohndaten[jm][art]:
                        try:
                            sum = sum + float(o)
                        except:
                            pass
                    jahressumme[art] = jahressumme[art] + sum
                    diffs[art] = diffs[art] + ( float(re.sub("x","",betraege[jm][art])) - sum )

#    8.  Buchungen schreiben

        jm0         = "000001"
        jahressumme = {}
        if jm0 in ktoslips:
            ktoslip0     = ktoslips["000001"]
            export_slip0 = open(ktoslip0).read()
        else:
            ktoslip0     = ""
            export_slip0 = ""
        
        
        for jm in jms:
            
            if jm in ktoslips:
                ktoslip0     = ktoslips[jm]
                export_slip0 = open(ktoslip0).read()

            export_slip  = ""
            day          = "03"
            lohnsumme    = 0.00
            kugausz      = 0.00
            an_soz       = 0.00
            ar_soz       = 0.00
            kug_soz      = 0.00
            st_soz       = 0.00

            if not jm0[0:4] == jm[0:4]:
                jahressumme = {}
                for art in (self.abgabenarten + [1,2,3,4,5,6,7,8]):
                    jahressumme[art] = 0.00
                jm0 = jm

            fiktives_gehalt = 0.00
            if 'LOHNFIKTIV' in lohndaten[jm]:
                fiktives_gehalt = float(lohndaten[jm]['LOHNFIKTIV'])

            agentur_zahlt_sozialabgaben = 0
 #           kug_is_null = 0
            while (0 == 0):
                if len(lohndaten[jm]['LOHN-AN']) == 0:
                    break
                betrag = "%3.2f" % (-float(lohndaten[jm]['LOHN-AN'].pop(0)))
                remark = "Gehalt"
                if len(lohndaten[jm]['LOHN-AN']) > 0:
                    try:
                        float(lohndaten[jm]['LOHN-AN'][0])
                    except:
                        remark = lohndaten[jm]['LOHN-AN'].pop(0)
                kug_faktor = 0.0
                if "KUGSOZ" in remark:
                    agentur_zahlt_sozialabgaben = 1
                if "KUGSOH" in remark:
                    agentur_zahlt_sozialabgaben = 0.5000001
                if "KUG" in remark:
  #                  if float(betrag) < 0.001:
  #                      remark = ""
  #                      kug_is_null = 1
  #                      continue
  #                  else:
                        kugausz = kugausz - float(betrag)
                buchungen.append(jm + day + "  " + betrag + "*" + lohndaten[jm]['LFAKTOR'] + "  " + ukto + ["-LOHN-AN  ","-LOHN-KN  "][int("KUG" in remark)]
                             + [self.lohnkto,self.kugkto+"-LOHN"][int("KUG" in remark)]
                             + "-" + self.employee + "  0.00  " + remark)
                lohnsumme   = lohnsumme - float(betrag)
                export_slip = export_slip +  ["LOHN-AN ","LOHN-KN "][int("KUG" in remark)] + ("%11.2f" % -float(betrag)) + "   " + remark + "\n"
                day         = "%02u" % (int(day)+1)

            export_slip = export_slip + ("LOHN-AR -ARBEITGEBER-   Arbeitgeberabgaben, davon " +
                                          ["","durch Agentur erstattete "][int(agentur_zahlt_sozialabgaben>0.999)] +
                                          "KUG-Sozialabgaben:" +  " -ARBEITG_KUG-\n\n")

            o  = "keine Zahlungen\n"
			
            if jm in export_zahl:
                o  = export_zahl[jm]
            export_slip = export_slip + "Zahlungen:\n\n" + o
            export_slip = export_slip + "\nSteuern:       Aktuell    Vormonate    Jahressummen\n\n"

            lohn_ar         = [0.00,0.00]
            lohn_kug        = [0.00,0.00]
            art0            = ""
            vorletzter_wert = [0,0,0]
            for art in self.abgabenarten:
                if not art0 == art[0:2] and art[0:2] == "AN":
                    export_slip = export_slip + "\nSozialabgaben Arbeitnehmer:\n\n"
                if not art0 == art[0:2] and art[0:2] == "AR":
                    export_slip = export_slip + "\nSozialabgaben Arbeitgeber:\n\n"
                art0 = art[0:2]
                if not art in list(lohndaten[jm].keys()):
                    continue
                day          = "12"
                add          = ""
                buchungen1   = []
                consider_b   = False
                export_zeile = (art + "          ")[0:9]

                sum1         = 0.00
                letzter_wert = []  #  fuer jahressummenbildung
                for lssoz_str in lohndaten[jm][art]:

                    betrag       = betraege[jm][art]
#                    print(betrag)
                    lssoz        = float(lssoz_str)
                    art1         = art
                    if betrag[0] == "x":
                        betrag  = betrag[1:]
                        art1    = re.sub("RV","XV",art)
                        art1    = re.sub("AV","BV",art1)
                        art1    = re.sub("KV","EV",art1)
                    betrag = float(betrag)
#                    print(jm,art,art1,lssoz_str,betrag)

                    if abs(betrag) > 0.001 or abs(lssoz) > 0.001:
                        consider_b = True

                    if add == "":
                        if jm in gesetzte_betraege and art in gesetzte_betraege[jm]:
#                            lssoz      = float(gesetzte_betraege[jm][art][0])
                            add        = gesetzte_betraege[jm][art][1]
                            consider_b = True
                        elif  abs( betrag - lssoz ) > 0.001:
                            add        = " (berechnet " + betraege[jm][art] + ")"
                            consider_b = True

                    sum1         = sum1 + lssoz
                    letzter_wert.append("%13.2f" % lssoz)
                    export_zeile = export_zeile + letzter_wert[-1]
                        
                    kto2  = re.sub(r"XXXX",lohndaten[jm]['NR'],uebertragsbuchhaltung+self.gegenkonto[art])
                    zeile = jm + day + "  " + ("%3.2f"%lssoz) + "*" + lohndaten[jm]['LFAKTOR'] + "  " + ukto + "-" + art1 + "  " 
                    zeile = zeile + kto2 + "-" + self.employee + "  0.00  " + self.bezeichner[art] + add
                    if art[0:2] == "AR":
                        lohn_ar[int("Vor" in add)] = lohn_ar[int("Vor" in add)] - lssoz
                        ar_soz = ar_soz + lssoz
                    elif art[0:2] == "KN" or art[0:2] == "KR":
#                        if kug_is_null == 1:
#                            continue
                        lohn_kug[int("Vor" in add)] = lohn_kug[int("Vor" in add)] - lssoz
                        kug_soz = kug_soz + lssoz
                    elif art[0:2] == "AN":
                        an_soz = an_soz + lssoz
                    elif art[0:2] == "AN":
                        an_soz = an_soz + lssoz
                    else:
                        st_soz = st_soz + lssoz
                    day   = "%02u" % (int(day)+1)
                    add   = ", Vormonate"
                    zeile = re.sub(r" 11-1512-PS"," 11-1503-PS",zeile)
                    if not ("Vormonate" in zeile and abs(lssoz) < 0.001):
                        buchungen1.append(zeile)

                jahressumme[art] = jahressumme[art] + sum1
                letzter_wert.append("%13.2f" % jahressumme[art])
                export_zeile     = export_zeile + letzter_wert[-1]
                export_zeile     = export_zeile + "   " + self.bezeichner[art]
                

                if consider_b:
                    for o in buchungen1:
                        buchungen.append(o)
                if re.search(r"^AR-KV-Z +0\.00 +0\.00 +0\.00 ",export_zeile):
                    continue
                export_slip = export_slip + export_zeile + "\n"
                if art in ("AN-KV-Z","AN-PV-Y","AR-KV-Z"):
                    export_zeile = art[0:5] + "     " + ( 
                        ( "(" + "%11.2f" % (float(vorletzter_wert[0]) + float(letzter_wert[0])) ) + ")" +
                        ( "(" + "%11.2f" % (float(vorletzter_wert[1]) + float(letzter_wert[1])) ) + ")" +
                        ( "(" + "%11.2f" % (float(vorletzter_wert[2]) + float(letzter_wert[2])) ) + ")" +
                          {"AN-KV-Z": "  Arbeitnehmer Gesamt  Krankenversicherung",
                           "AN-PV-Y": "  Arbeitnehmer Gesamt  Pflegeversicherung",
                           "AR-KV-Z": "  Arbeitgeber Gesamt   Krankenversicherung"
                           }[art] )
                    export_zeile = re.sub("\(( +)",'\\1'+"(",export_zeile,99)
                    export_slip = export_slip + export_zeile + "\n"
                vorletzter_wert = letzter_wert
                    
            
            ar = self.bezeichner['LOHN-AR']
            if abs(lohn_ar[0]) > 0.001 or abs(lohn_ar[1]) > 0.001:
                buchungen.append(jm + "10  " + ("%3.2f"%lohn_ar[0]) + "*" + lohndaten[jm]['LFAKTOR'] + "  " + ukto + "-LOHN-AR  " +
                                    self.sozkto + "-" + self.employee + "  0.00  " + ar)
            if abs(lohn_ar[1]) > 0.001:
                buchungen.append(jm + "11  " + ("%3.2f"%lohn_ar[1]) + "*" + lohndaten[jm]['LFAKTOR'] + "  " + ukto + "-LOHN-AR  " +
                                    self.sozkto + "-" + self.employee + "  0.00  " + ar + ", Vormonate")


            if agentur_zahlt_sozialabgaben < 0.001:
                kug1 = self.bezeichner['LOHN-KUG']
                kug2 = self.bezeichner['LOHN-KUG']
            elif agentur_zahlt_sozialabgaben < 0.999:
                kug1 = self.bezeichner['LOHN-KUG'] + ", Erstattung durch Arbeitsagentur " + ("%1u" % int(agentur_zahlt_sozialabgaben*100) ) + " Prozent"
                kug2 = self.bezeichner['LOHN-KUG'] + ", Eigenanteil " + ("%1u" % (100-int(agentur_zahlt_sozialabgaben*100)) ) + " Prozent"
            else:                
                kug1 = self.bezeichner['LOHN-KUG'] + ", Erstattung durch Arbeitsagentur"
                kug2 = self.bezeichner['LOHN-KUG'] + ", Erstattung durch Arbeitsagentur"

            if abs(lohn_kug[0]) > 0.001 or abs(lohn_kug[1]) > 0.001:
                if agentur_zahlt_sozialabgaben > 0.001:
                    buchungen.append(jm + "10  " + ("%3.2f"%(lohn_kug[0]*  agentur_zahlt_sozialabgaben  )) + "*" + lohndaten[jm]['LFAKTOR'] + "  " + ukto + "-LOHN-KUG  " +
                                        self.kugkto+"-SOZ" + "-" + self.employee + "  0.00  " + kug1)
                if agentur_zahlt_sozialabgaben < 0.999:
                    buchungen.append(jm + "10  " + ("%3.2f"%(lohn_kug[0]*(1-agentur_zahlt_sozialabgaben))) + "*" + lohndaten[jm]['LFAKTOR'] + "  " + ukto + "-LOHN-KUG  " +
                                        self.sozkto + "-" + self.employee + "  0.00  " + kug2)
                
            if abs(lohn_kug[1]) > 0.001:
                if agentur_zahlt_sozialabgaben > 0.001:
                    buchungen.append(jm + "10  " + ("%3.2f"%(lohn_kug[1]*  agentur_zahlt_sozialabgaben  )) + "*" + lohndaten[jm]['LFAKTOR'] + "  " + ukto + "-LOHN-KUG  " +
                                        self.kugkto+"-SOZ" + "-" + self.employee + "  0.00  " + kug1 + ", Vormonate")
                if agentur_zahlt_sozialabgaben < 0.999:
                    buchungen.append(jm + "10  " + ("%3.2f"%(lohn_kug[1]*(1-agentur_zahlt_sozialabgaben))) + "*" + lohndaten[jm]['LFAKTOR'] + "  " + ukto + "-LOHN-KUG  " +
                                        self.sozkto + "-" + self.employee + "  0.00  " + kug2 + ", Vormonate")

            netto = lohnsumme - st_soz - an_soz
            try:
                ausz = float(export_sum[jm])
            except:
                ausz = 0.00
            ueber = ausz - netto

            jahressumme[1] = jahressumme[1] + lohnsumme
            jahressumme[2] = jahressumme[2] + st_soz
            jahressumme[3] = jahressumme[3] + an_soz
            jahressumme[4] = jahressumme[4] + netto
            jahressumme[5] = jahressumme[5] + ausz
            jahressumme[6] = jahressumme[6] + ueber
            jahressumme[7] = jahressumme[7] + fiktives_gehalt
            jahressumme[8] = jahressumme[8] + kugausz

            export_slip  = export_slip + "\n"
            if (abs(jahressumme[7]) > 0.00001):
                export_zeile = "fiktives Gehalt bei KUG:(" + ("%10.2f" % fiktives_gehalt) + ")(" + ("%11.2f" % jahressumme[7]) + ")\n\n"
                export_zeile = re.sub("\(( +)",'\\1'+"(",export_zeile,99)
                export_slip  = export_slip + export_zeile 
            export_slip  = export_slip + "Gehalt Brutto:        " + ("%13.2f" % (lohnsumme-kugausz)) + ("%13.2f" % (jahressumme[1]-jahressumme[8])) + "\n"
            export_slip  = export_slip + "minus Steuern:        " + ("%13.2f" % st_soz)    + ("%13.2f" % jahressumme[2]) + "\n"
            export_slip  = export_slip + "minus Sozialabgaben:  " + ("%13.2f" % an_soz)    + ("%13.2f" % jahressumme[3]) + "\n"
            export_slip  = export_slip + "                            -------      -------\n"
            export_slip  = export_slip + "Gehalt Netto:         " + ("%13.2f" % (netto-kugausz))     + ("%13.2f" % (jahressumme[4]-jahressumme[8])) + "\n"
            if (abs(jahressumme[8]) > 0.00001):
                export_slip = export_slip + "Zahlung KUG:          " + ("%13.2f" % kugausz) + ("%13.2f" % jahressumme[8]) + "\n"
            export_slip  = export_slip + "                            -------      -------\n"
            if (abs(jahressumme[8]) > 0.00001):
                export_zeile = "Netto plus KUG gesamt:" + ("%13.2f" % netto) + "" + ("%13.2f" % jahressumme[1]) + "\n"
                export_zeile = re.sub("\(( +)",'\\1'+"(",export_zeile,99)
                export_slip  = export_slip + export_zeile 
            export_slip  = export_slip + "Auszahlung:           " + ("%13.2f" % ausz)      + ("%13.2f" % jahressumme[5]) + "\n"
            export_slip  = export_slip + "                            -------      -------\n"
            export_slip  = export_slip + "Ueberzahlung:         " + ("%13.2f" % ueber)     + ("%13.2f" % jahressumme[6]) + "        (Werte in Klammern: nachrichtlich)\n"
            export_slip  = re.sub(r"-ARBEITGEBER-",("%11.2f" % (ar_soz+kug_soz)),export_slip)
            if agentur_zahlt_sozialabgaben > 0.001 and agentur_zahlt_sozialabgaben < 0.999:
                export_slip  = re.sub(r"-ARBEITG_KUG-",("%3.2f" % (kug_soz*(1-agentur_zahlt_sozialabgaben))) + " plus " + ("%3.2f" % (kug_soz*(agentur_zahlt_sozialabgaben))) + " Erstattung AA",export_slip)
            else:
                export_slip  = re.sub(r"-ARBEITG_KUG-",("%3.2f" % (kug_soz)),export_slip)
            
            m = re.search(r"^(.*?)(LOHN-AN.*?Ueberzahlung.*?\n)(.*)$",export_slip0,re.DOTALL)
            if m:
                export_slip = m.group(1) + export_slip + m.group(3)

            export_slip = re.sub(r" \d\d\/\d\d\d\d"," "+jm[4:6]+"/"+jm[0:4],export_slip)
            
            export_slip = re.sub(r", davon [a-z]* ?KUG-[^\n]+ 0.00 *","",export_slip,9999)
            export_sl0  = export_slip
            export_slip = re.sub(r"\n(KN|KR)\S+ +0.00 +0.00 +0.00 +([^\n]+)","",export_slip,9999)
            if re.search(r"\n(KN|KR)",export_slip):
                export_slip = re.sub(r"\n(LS|SZ|KI|AR-ST|AR-PS) +0.00 +0.00 +0.00 +([^\n]+)","",export_sl0,9999)
                export_slip = re.sub(r", davon [a-z]* ?KUG-[^\n]+ 0.00 *","",export_slip,9999)
                if not re.search("\n(LS|SZ|KI)   ",export_slip,re.DOTALL):
                    export_slip = re.sub(r"\nSteuern:( .*)\n","\nAbgaben:\\1    [KEINE STEUERN]",export_slip,re.DOTALL)
                export_slip = re.sub(r"\n(LOHN-KUG) +0.00 +([^\n]+)","",export_slip,9999)

            if lohndaten[jm]['NR'] == "1579":  # Srpska
                o9 = ""
                for o7 in export_slip.split("\n"):
                    if re.search(r"(Arbeitgeber|^AR\-|^AN\-KV\-Z|^AN\-KV |^AN\-PV\-Y|^AN\-PV |^SZ |^KI )",o7):
                        continue
                    o9 = o9 + o7 + "\n"
                export_slip = re.sub(r"\(Werte .+?\)","",o9)

            if jm in ktoslips:
                self.lstfile[jm] = None
                self.lsttext[jm] = None
            else:
                m = re.search(r"^(.*?\D)(\d\d\d\d)(\D+)(\d\d)(\D.*)$",ktoslip0)
                if m:
                    self.lstfile[jm] = m.group(1) + jm[0:4] + m.group(3) + jm[4:6] + m.group(5)
                else:
                    self.lstfile[jm] = "lohnbescheinigung_" +jm[0:4] + "_" + jm[4:6] + ".md"
                self.lsttext[jm] = export_slip

#                print ("---->   ",jm)
#                print(self.lstfile[jm])
#                print(self.lsttext[jm])

        self.diff = ""
        is_null   = True
        for art in self.abgabenarten:
            betrag          = "%13.2f" % diffs[art]
            self.diff = self.diff + (art+"           ")[0:9] + betrag + "\n"
            if abs(diffs[art]) > 0.001:
                is_null = False
        if is_null:
            self.diff = ""
            
        
        return ("\n".join(rest_lines+buchungen)+"\n")
        

        
#*************************************************************************

    def read_lohnbescheinigung (self,slip):
    
        text    = ""
        monate  = "JA|FE|MR|AP|MA|JN|JL|AU|SE|OC|NO|DE|01|02|03|04|05|06|07|08|09|10|11|12"
        abgaben = "|".join(self.abgabenarten+['LOHN-AN','LOHN-KN','ZAHL'])
        
        m             = re.search(r"^(.*)[\\\/]([a-z]+)[\\\/]",os.path.abspath("."))
        self.employee = m.group(2)
        print("EMPLOYEE:",self.employee)

        m = re.search(r"(\d\d\d\d)_("+monate+")",slip)
        if not m:
            return(None)
        
        jahr  = m.group(1)
        monat = "%02u" % ( (monate.split("|").index(m.group(2)) % 12) + 1 )
        text  = open(slip).read()
        text  = re.sub("AR-KV ","AR-KV-S ",text)
        erg   = { "FIX": int("FIX" in text) }

        for zeile in text.split("\n"):
            m = re.search(r"^("+abgaben+").*? (\-?\d+)[,\.](\d\d) *(.*?) *$",zeile)
            if m:
                abgabe = m.group(1)
                if abgabe == "LOHN-KN":
                    abgabe = "LOHN-AN"
                betrag = m.group(2)+"."+m.group(3)
                if not abgabe in erg:
                    erg[abgabe] = []
                erg[abgabe].append(betrag)
                if len(m.group(4)) > 0:
                    rem = m.group(4)
                    m   = re.search(r"^ *(\-?\d+)[,\.](\d\d) .*$",rem)
                    if m:
                        erg[abgabe].append(m.group(1)+"."+m.group(2))
                    else:
                        erg[abgabe].append(rem)

        for art in self.abgabenarten:
            if not art in erg:
                erg[art] = ["0.0","0.0","0.0"]
                
        return(jahr+monat,erg)

#*************************************************************************

    def set_rahmendaten (self,jw,jahr,monat):
    
        if monat[0] == "1":
            monat = { "10": "A", "11": "B", "12": "C"}[ monat ]
        else:
            monat = monat[1]

        jw['KKNAME'] = {
                         "1510": "DAK",
                         "1512": "MINIJO",
                         "1513": "BKKFUT",
                         "1514": "AOKHES",
                         "1515": "MOBILO",
                         "1516": "SBK",
                         "1517": "TKK7",
                         "1518": "BARMER",
                         "1519": "DEBEKA",
                         "1520": "AOKRP5",
                         "1521": "AOKNW5",
                         "1522": "AOKBW5",
                         "1523": "IKKCLA",
                         "1524": "HEK", 
                         "1579": "SRPSKA" 
                         } [ jw['NR'] ]


        jw['ZA'] = "0.0"
        jw['SOLIANTEIL'] = 0.055
        

        if jahr == "2007":
        
            jw['RLIMIT']  = "5800"
            jw['KLIMIT']  = "3937.50"
            jw['RV'] = ["9.95","15"]  [ int( jw['NR'] == "1512" ) ] 
            jw['AV'] = ["2.1" ,"3.6"] [ int( jw['NR'] == "1512" ) ] 
            jw['KV'] = { "1510": "7.25", "1512" : "13",  "1513": "6.95", "1515": "6.45"} [ jw['NR'] ]  
            jw['KG'] = "0.0"
            jw['ZU'] = { "1510": "0.9",  "1512" : "0.0", "1513": "0.9",  "1515": "0.9"}  [ jw['NR'] ]  
            jw['ZV'] = "0.9"
            jw['PV'] = "0.85"
            jw['PZ'] = "0.25"
            jw['U1'] = { "1510": "1.2",  "1512" : "0.1",  "1513": "1.6",  "1515": "1.1"}  [ jw['NR'] ]  
            jw['U2'] = { "1510": "0.18", "1512" : "0.0",  "1513": "0.1",  "1515": "0.15"} [ jw['NR'] ]  
            jw['U3'] = "0.0"

            '''
PERSON         LST   SZ  KS   KK      KNR   PL ST   RVN   AVN   KVN  PVN  ZUN   KIN  ART  RVR   AVR  KVR  PVR   U1    U2   U3
-----------------------------------------------------------------------------------------------------------------------------
arjasanow      0       0  0   Mini    1512  25  0     0    0     0     0   0     0  999     0    0     0    0    0     0    0
cpkettner      1     5.5  0  Mobiloil 1515   0  0  9.95  2.1  6.45  0.85 0.9  0.25  999  9.95  2.1  6.45 0.85  1.1  0.15    0
dblaesche      0       0  0   Mini    1512  25  0     0    0     0     0   0     0  999     0    0     0    0    0     0    0
etoo           0       0  0   Mini    1512  25  0     0    0     0     0   0     0  999     0    0     0    0    0     0    0
jclaussnitzer  0       0  0   Mini    1512  25  0     0    0     0     0   0     0  999     0    0     0    0    0     0    0
jengewald      1       0  0   Mini    1512   0  2     0    0     0     0   0     0  991    15    0    13    0  0.1     0    0
jkoch          0       0  0   Mini    1512  25  0     0    0     0     0   0     0  999     0    0     0    0    0     0    0
klaewer        1     5.5  0   DAK     1510   0  0  9.95  2.1  7.25  0.85 0.9  0.25  331  9.95  2.1  7.25 0.85  1.2  0.18    0
oppenl         0       0  0   Mini    1512  25  0     0    0     0     0   0     0  999     0    0     0    0    0     0    0
20071201       1     5.5  8e BKKfutur 1513   0  0  9.95  2.1  6.95  0.85 0.9  0.25  999  9.95  2.1  6.95 0.85  1.6  0.10    0
tfelder        0       0  0   Mini    1512  25  0     0    0     0     0   0     0  999     0    0     0    0    0     0    0
tjungblut      0       0  0   Mini    1512  25  0     0    0     0     0   0     0  999     0    0     0    0    0     0    0
ulerich        0       0  0   Mini    1512  25  0     0    0     0     0   0     0  999     0    0     0    0    0     0    0
wkapraun       0       0  0   Mini    1512  25  0     0    0     0     0   0     0  999     0    0     0    0    0     0    0
-----------------------------------------------------------------------------------------------------------------------------
'''

        if jahr == "2008":
        
            for zeitraum in ("123456","789ABC"):
                if monat in zeitraum:
                    break

            jw['RLIMIT']  = "5800"
            jw['KLIMIT']  = "3937.50"
            jw['RV'] = ["9.95","15"]   [ int( jw['NR'] == "1512" ) ] 
            jw['AV'] = ["1.65" ,"3.6"] [ int( jw['NR'] == "1512" ) ] 
            jw['KV'] = { "1510": "7.25", "1512" : "13",  "1513": "7.05", "1518": "7.2"} [ jw['NR'] ]  
            jw['KG'] = "0.0"
            jw['ZU'] = { "1510": "0.9",  "1512" : "0.0", "1513": "0.9",  "1518": "0.9"}  [ jw['NR'] ]  
            jw['ZV'] = "0.9"
            jw['PV'] = { "123456": "0.85", "789ABC": "0.975"} [zeitraum]
            jw['PZ'] = "0.25"
            jw['U1'] = { "1510": "1.2",  "1512" : "0.1",  "1513": "1.2",  "1518": "1.0"}  [ jw['NR'] ]  
            jw['U2'] = { "1510": "0.15", "1512" : "0.0",  "1513": "0.1",  "1518": "0.15"} [ jw['NR'] ]  
            jw['U3'] = "0.0"


            '''
PERSON         LST   SZ  KS  PL  KK     KNR    RVN   AVN  KVN   PVN  ZUN   KIN  ART  RVR   AVR  KVR  PVR  ST   U1    U2   U3
----------------------------------------------------------------------------------------------------------------------------
arjasanow      0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
20081001       6     5.5  0   0  BEK     1518  9.95    0    0     0    0     0  999  9.95    0    0    0   0  1.0  0.15    0
20081201       6     5.5  0   0  BEK     1518  9.95    0    0     0    0     0  999  9.95    0    0    0   0  1.0  0.15    0
axrxjasanow       1     5.5  0   0  BEK     1518  9.95 1.65  7.2  0.85  0.9  0.25  999  9.95 1.65  7.2 0.85   0  1.0  0.15    0
ashawky        0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
cnawrot        0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
dblaesche      0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
hmaamoun       0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
hzaazou        0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
jclaussnitzer  0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
jengewald      1       0  0   0  Minijob 1512     0    0    0     0    0     0  991    15    0   13    0   2  0.1     0    0
jkaiser        0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
jkoch          0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
jschuladen     0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
klangschwager  0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
mtruemper      0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
mweber         0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
oppenl         1     5.5  8e  0 BKKfutur 1513  9.95 1.65 7.05  0.85  0.9  0.25  999  9.95 1.65 7.05 0.85   0  1.2  0.10    0
20080701       1     5.5  8e  0 BKKfutur 1513  9.95 1.65 7.05 0.975  0.9  0.25  999  9.95 1.65 7.05 0.975  0  1.2  0.10    0
sgeier         0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
stockbauer     0       0  0   0  Minijob 1512     0    0    0     0    0     0  991    15    0   13    0   2  0.1     0    0
tfelder        0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
20080601       6     5.5  8e  0  DAK     1510  9.95 1.65 7.25  0.85  0.9  0.25  999  9.95 1.65 7.25  0.85  0  1.2  0.15    0
20080701       6     5.5  8e  0  DAK     1510  9.95 1.65 7.25 0.975  0.9  0.25  999  9.95 1.65 7.25 0.975  0  1.2  0.15    0
20081201       6     5.5  8e  0  DAK     1510  9.95 1.65 7.25 0.975  0.9  0.25  999  9.95 1.65 7.25 0.975  0  1.2  0.15    0
tjungblut      0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
20081001       6     5.5  0   0  DAK     1510  9.95 1.65 7.25 0.975  0.9  0.25  999  9.95 1.65 7.25 0.975  0  1.2  0.15    0
20081201       6     5.5  0   0  DAK     1510  9.95 1.65 7.25 0.975  0.9  0.25  999  9.95 1.65 7.25 0.975  0  1.2  0.15    0
tkinzl         0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
20081001       0       0  0   0  Minijob 1512     0    0    0     0    0     0  991    15    0   13    0   2  0.1     0    0
wkapraun       0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
wsarhan        0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
----------------------------------------------------------------------------------------------------------------------------
'''

        if jahr == "2009":
        
            for zeitraum in ("123456","789ABC"):
                if monat in zeitraum:
                    break

            jw['RLIMIT']  = "5800"
            jw['KLIMIT']  = "3937.50"
            jw['RV'] = ["9.95","15"]  [ int( jw['NR'] == "1512" ) ] 
            jw['AV'] = ["1.4" ,"3.6"] [ int( jw['NR'] == "1512" ) ] 
            jw['KV'] = [ {"123456": "7.3", "789ABC": "7.0"}[zeitraum], "13"]  [ int( jw['NR'] == "1512" ) ] 
            jw['KG'] = ["0.3","0.0"] [ int( jw['NR'] == "1512" ) ] 
            jw['ZU'] = { "1510": "0.9",  "1512" : "0.0", "1518": "0.9"}  [ jw['NR'] ]  
            jw['ZV'] = "0.9"
            jw['PV'] = "0.975"
            jw['PZ'] = "0.25"
            jw['U1'] = { "1510": "1.8",  "1512" : "0.6",  "1518": "1.4"}  [ jw['NR'] ]  
            jw['U2'] = { "1510": "0.2",  "1512" : "0.07", "1518": "0.22"} [ jw['NR'] ]  
            jw['U3'] = "0.1"


            '''
PERSON         LST   SZ  KS  PL  KK     KNR    RVN   AVN  KVN  PVN   ZUN   KIN  ART  RVR   AVR  KVR  PVR  ST   U1    U2   U3
----------------------------------------------------------------------------------------------------------------------------
arjasanow      6     5.5  0e  0  BEK     1518  9.95    0    0     0    0     0  999  9.95    0    0    0   0  1.4  0.22  0.1
20090301       6     5.5  0   0  BEK     1518  9.95    0    0     0    0     0  999  9.95    0    0    0   0  1.4  0.22  0.1
axrxjasanow      1     5.5  0   0  BEK     1518  9.95  1.4  7.3 0.975  0.9  0.25  999  9.95  1.4  7.3 0.975  0  1.4  0.22  0.1
dkullick       1       0  0   0  Minijob 1512     0    0    0     0    0     0  991    15    0   13    0   2  0.6  0.07  0.1
jengewald      1       0  0   0  Minijob 1512     0    0    0     0    0     0  991    15    0   13    0   2  0.6  0.07  0.1
klangschwager  0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
srodenberg     0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
tfelder        6     5.5  8e  0  DAK     1510  9.95  1.4  7.3 0.975  0.9  0.25  999  9.95  1.4  7.3 0.975  0  1.8   0.2  0.1
tjungblut      1       0  0   0  Minijob 1512     0    0    0     0    0     0  991    15    0   13    0   2  0.6  0.07  0.1
ukrohn         1       0  0   0  Minijob 1512     0    0    0     0    0     0  991    15    0   13    0   2  0.6  0.07  0.1
wsarhan        0       0  0  25  Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0    0     0    0
----------------------------------------------------------------------------------------------------------------------------
'''


        if jahr == "2010":
        
            jw['RLIMIT']  = "5800"
            jw['KLIMIT']  = "3937.50"
            jw['RV'] = ["9.95","15"]  [ int( jw['NR'] == "1512" ) ] 
            jw['AV'] = ["1.4" ,"3.6"] [ int( jw['NR'] == "1512" ) ] 
            jw['KV'] = ["7.0","13"]  [ int( jw['NR'] == "1512" ) ] 
            jw['KG'] = ["0.3","0.0"] [ int( jw['NR'] == "1512" ) ] 
            jw['ZU'] = { "1510": "0.9",  "1512" : "0.0", "1518": "0.9"}  [ jw['NR'] ]  
            jw['ZV'] = "0.9"
            jw['PV'] = "0.975"
            jw['PZ'] = "0.25"
            jw['U1'] = { "1510": "1.8",  "1512" : "0.6",  "1518": "1.4"}  [ jw['NR'] ]  
            jw['U2'] = { "1510": "0.2",  "1512" : "0.07", "1518": "0.22"} [ jw['NR'] ]  
            jw['U3'] = "0.41"


            '''
PERSON         LST   SZ  KS  PL KK     KNR    RVN   AVN  KVN  PVN   ZUN   KIN  ART  RVR   AVR  KVR  PVR  ST    U1    U2   U3
----------------------------------------------------------------------------------------------------------------------------
arjasanow      1     5.5  9   0 BEK     1513  9.95    0    0     0    0     0  999  9.95    0    0    0   0   1.4  0.22  0.1
jengewald      1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13    0   2   0.6  0.07 0.41
klangschwager  1       0  0  25 Minijob 1512     0    0    0     0    0     0  999     0    0    0    0   0     0     0    0
tfelder        1     5.5  9   0 DAK     1513  9.95  1.4  7.3 0.975  0.9  0.25  999  9.95  1.4  7.3 0.975  0   1.8   0.2 0.41
tjungblut      1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13    0   2   0.6  0.07 0.41
----------------------------------------------------------------------------------------------------------------------------
'''

        if jahr == "2011":
        
            jw['RLIMIT']  = "5800"
            jw['KLIMIT']  = "3937.50"
            jw['RV'] = ["9.95","15"]  [ int( jw['NR'] == "1512" ) ] 
            jw['AV'] = ["1.5" ,"3.6"] [ int( jw['NR'] == "1512" ) ] 
            jw['KV'] = ["7.3","13"]  [ int( jw['NR'] == "1512" ) ] 
            jw['KG'] = ["0.3","0.0"] [ int( jw['NR'] == "1512" ) ] 
            jw['ZU'] = { "1512" : "0.0",  "1514": "0.9",  "1515": "0.9", "1516": "0.9", "1517": "0.9", "1518": "0.9"}  [ jw['NR'] ]  
            jw['ZV'] = "0.9"
            jw['PV'] = "0.975"
            jw['PZ'] = "0.25"
            jw['U1'] = { "1512" : "0.6",  "1514": "1.6",  "1515": "3.5", "1516": "1.35", "1517": "1.7", "1518": "1.7"}  [ jw['NR'] ]  
            jw['U2'] = { "1512" : "0.14", "1514": "0.39", "1515": "0.36","1516": "0.21", "1517": "0.3", "1518": "0.33"} [ jw['NR'] ]  
            jw['U3'] = "0.0"


            '''
PERSON         LST   SZ  KS  PL KK     KNR    RVN   AVN  KVN   PVN  ZUN   KIN  ART  RVR   AVR  KVR   PVR ST    U1    U2   U3
----------------------------------------------------------------------------------------------------------------------------
arjasanow      1     5.5  0   0 BEK     1518  9.95    0    0     0    0     0  999  9.95    0    0     0  0   1.7  0.33    0
ccsengery      1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.6  0.14    0
ddienlin       1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.6  0.14    0
20111101       1     5.5  0   0 AOK     1514  9.95    0    0     0    0     0  999  9.95    0    0     0  0   1.6  0.39    0
dperic         1     5.5  8r  0 TechnKK 1517  9.95    0    0     0    0     0  999  9.95    0    0     0  0   1.7  0.3     0
hparfuss       3     5.5  0   0 BKKSiem 1516     0    0  7.0 0.975  0.9  0.25  999  9.95  1.5  7.0 0.975  0  1.35  0.21    0
jengewald      1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.6  0.14    0
jfriedrichs    1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.6  0.14    0
jkleckow       1     5.5  8e  0 BKKMOil 1515  9.95    0    0     0    0     0  999  9.95    0    0     0  0   3.5  0.36    0
mherrschel     1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.6  0.14    0
----------------------------------------------------------------------------------------------------------------------------
'''

        if jahr == "2012":
        
            jw['RLIMIT']  = "5800"
            jw['KLIMIT']  = "3937.50"
            jw['RV'] = ["9.8","15"]   [ int( jw['NR'] == "1512" ) ] 
            jw['AV'] = ["1.5" ,"3.6"] [ int( jw['NR'] == "1512" ) ] 
            jw['KV'] = ["7.3","13"] [ int( jw['NR'] == "1512" ) ] 
            jw['KG'] = ["0.3","0.0"] [ int( jw['NR'] == "1512" ) ] 
            jw['ZU'] = { "1512" : "0.0",  "1514": "0.9",  "1515": "0.9", "1516": "0.9", "1517": "0.9", "1518": "0.9"}  [ jw['NR'] ]  
            jw['ZV'] = "0.9"
            jw['PV'] = "0.975"
            jw['PZ'] = "0.25"
            jw['U1'] = { "1512" : "0.7",  "1514": "1.6",  "1515": "3.5", "1516": "1.35", "1517": "2.1",  "1518": "1.7"}  [ jw['NR'] ]  
            jw['U2'] = { "1512" : "0.14", "1514": "0.39", "1515": "0.36","1516": "0.28", "1517": "0.39", "1518": "0.33"} [ jw['NR'] ]  
            jw['U3'] = "0.04"

            '''
PERSON         LST   SZ  KS  PL KK     KNR    RVN   AVN  KVN   PVN  ZUN   KIN  ART  RVR   AVR  KVR   PVR ST    U1    U2   U3
----------------------------------------------------------------------------------------------------------------------------
arjasanow      1     5.5  0   0 BEK     1518   9.8    0    0     0    0     0  999   9.8    0    0     0  0   1.7  0.33 0.04
ccsengery      1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.04
ddienlin       1     5.5  0   0 AOK     1514   9.8    0    0     0    0     0  999   9.8    0    0     0  0   1.6  0.39 0.04
dperic         1     5.5  8r  0 TechnKK 1517   9.8    0    0     0    0     0  999   9.8    0    0     0  0   2.1  0.39 0.04
hparfuss       3     5.5  0   0 BKKSiem 1516     0    0  7.0 0.975  0.9  0.25  999   9.8  1.5  7.0 0.975  0  1.35  0.28 0.04
jengewald      1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.04
jfriedrichs    1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.04
jkleckow       1     5.5  8e  0 BKKMOil 1515   9.8    0    0     0    0     0  999   9.8    0    0     0  0   3.5  0.36 0.04
mherrschel     1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.04
vgabriel       1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.04
----------------------------------------------------------------------------------------------------------------------------
'''

        if jahr == "2013":
        
            jw['RLIMIT']  = "5800"
            jw['KLIMIT']  = "3937.50"
            jw['RV'] = ["9.45","15"]  [ int( jw['NR'] == "1512" ) ] 
            jw['AV'] = ["1.5" ,"3.6"] [ int( jw['NR'] == "1512" ) ] 
            jw['KV'] = ["7.3","13"]  [ int( jw['NR'] == "1512" ) ] 
            jw['KG'] = ["0.3","0.0"] [ int( jw['NR'] == "1512" ) ] 
            jw['ZU'] = { "1512" : "0.0",  "1516": "0.9", "1517": "0.9", "1518": "0.9", "1519": "0.9"}  [ jw['NR'] ]  
            jw['ZV'] = "0.9"
            jw['PV'] = "1.025"
            jw['PZ'] = "0.25"
            jw['U1'] = { "1512" : "0.7",  "1516": "1.35", "1517": "1.7",  "1518": "1.7",  "1519": "1.7"}  [ jw['NR'] ]  
            jw['U2'] = { "1512" : "0.14", "1516": "0.28", "1517": "0.33", "1518": "0.38", "1519": "0.34"} [ jw['NR'] ]  
            jw['U3'] = "0.15"

            '''
PERSON         LST   SZ  KS  PL KK     KNR    RVN   AVN  KVN   PVN  ZUN   KIN  ART  RVR   AVR  KVR   PVR ST    U1    U2   U3
----------------------------------------------------------------------------------------------------------------------------
arjasanow      1     5.5  0   0 BEK     1518  9.45    0    0     0    0     0  999  9.45    0    0     0  0   1.7  0.38 0.15
20130601       1     5.5  0   0 BEK     1518  9.45    0    0     0    0     0  999  9.45    0    0     0  0   1.7  0.38 0.15
20131001       1     5.5  0   0 BEK     1518  9.45  1.5  7.3 1.025  0.9     0  999  9.45  1.5  7.3 1.025  0   1.7  0.38 0.15
ccsengery      1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.15
ddienlin       1     5.5  0   0 Debeka  1519  9.45    0    0     0    0     0  999  9.45    0    0     0  0   1.7  0.34 0.15
dperic         1     5.5  8r  0 TechnKK 1517  9.45    0    0     0    0     0  999  9.45    0    0     0  0   1.7  0.33 0.15
hparfuss       3     5.5  0   0 BKKSiem 1516     0    0  7.0 1.025  0.9  0.25  999  9.45  1.5  7.0 1.025  0  1.35  0.28 0.15
jengewald      1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.15
jfriedrichs    1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.15
tjungblut      1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.15
mherrschel     1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.15
stschwarz      1.05  5.5  0   0 TechnKK 1517  9.45  1.5  7.3 1.025  0.9     0  999  9.45  1.5  7.3 1.025  0   1.7  0.33 0.15
swonneberger   3.20  5.5  0   0 TechnKK 1517  9.45  1.5  7.3 1.025  0.9     0  999  9.45  1.5  7.3 1.025  0   1.7  0.33 0.15
vgabriel       1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.15
lpschierer     1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.15
----------------------------------------------------------------------------------------------------------------------------
'''

        if jahr == "2014":


            jw['RLIMIT']  = "5950"
            jw['KLIMIT']  = "4050"
            jw['RV'] = ["9.45","15"]  [ int( jw['NR'] == "1512" ) ] 
            jw['AV'] = ["1.5" ,"3.6"] [ int( jw['NR'] == "1512" ) ] 
            jw['KV'] = ["7.3","13"]  [ int( jw['NR'] == "1512" ) ] 
            jw['KG'] = ["0.3","0.0"] [ int( jw['NR'] == "1512" ) ] 
            jw['ZU'] = { "1512" : "0.0",  "1516": "0.9", "1517": "0.9", "1518": "0.9", "1519": "0.9"}  [ jw['NR'] ]  
            jw['ZV'] = "0.9"
            jw['PV'] = "1.025"
            jw['PZ'] = "0.25"
            jw['U1'] = { "1512" : "0.7",  "1516": "1.35", "1517": "1.7",  "1518": "1.7",  "1519": "1.7"}  [ jw['NR'] ]  
            jw['U2'] = { "1512" : "0.14", "1516": "0.28", "1517": "0.33", "1518": "0.38", "1519": "0.37"} [ jw['NR'] ]  
            jw['U3'] = "0.15"

            '''

PERSON         LST   SZ  KS  PL KK     KNR    RVN   AVN  KVN   PVN  ZUN   KIN  ART  RVR   AVR  KVR   PVR ST    U1    U2   U3
----------------------------------------------------------------------------------------------------------------------------
arjasanow      1     5.5  0   0 BEK     1518  9.45  1.5  7.3 1.025  0.9     0  999  9.45  1.5  7.3 1.025  0   1.7  0.38 0.15
ccsengery      1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.15
ddienlin       1     5.5  0   0 Debeka  1519  9.45    0    0     0    0     0  999  9.45    0    0     0  0   1.7  0.37 0.15
dperic         1     5.5  8r  0 TechnKK 1517  9.45    0    0     0    0     0  999  9.45    0    0     0  0   1.7  0.33 0.15
hparfuss       1     5.5  0   0 BKKSiem 1516     0    0  7.3 1.025  0.9  0.25  999  9.45  1.5  7.3 1.025  0  1.35  0.28 0.15
jengewald      1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.15
jfriedrichs    1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.15
tjungblut      1     5.5  0   0 TechnKK 1517  9.45  1.5  7.3 1.025  0.9  0.25  999  9.45  1.5  7.3 1.025  0   1.7  0.33 0.15
mherrschel     1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.15
stschwarz      4.15  5.5  8r  0 TechnKK 1517  9.45  1.5  7.3 1.025  0.9     0  999  9.45  1.5  7.3 1.025  0   1.7  0.33 0.15
swonneberger   3.20  5.5  0   0 TechnKK 1517  9.45  1.5  7.3 1.025  0.9     0  999  9.45  1.5  7.3 1.025  0   1.7  0.33 0.15
vgabriel       1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.15
lpschierer     1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.14 0.15
rbetageri      1     5.5  0   0 TechnKK 1517  9.45  1.5  7.3 1.025  0.9  0.25  999  9.45  1.5  7.3 1.025  0   1.7  0.33 0.15
----------------------------------------------------------------------------------------------------------------------------
'''


#        if jahr == "2015a":
#        
#            jw['RLIMIT']  = "6050"
#            jw['KLIMIT']  = "4125"
#            jw['RV'] = ["9.35","15"] [ int( jw['NR'] == "1512" ) ] 
#            jw['AV'] = "1.5"
#            jw['KV'] = ["7.3","13"]  [ int( jw['NR'] == "1512" ) ] 
#            jw['ZU'] = { "1512" : "0.0",  "1517": "1.1", "1519": "1.1"}  [ jw['NR'] ]  
#            jw['ZV'] = "1.1"
#            jw['PV'] = "1.175"
#            jw['PZ'] = "0.25"
#            jw['U1'] = { "1512" : "0.7",  "1517": "1.6",  "1519": "1.6"}  [ jw['NR'] ]  
#            jw['U2'] = { "1512" : "0.24", "1517": "0.49", "1519": "0.37"} [ jw['NR'] ]  
#            jw['U3'] = "0.15"

        if jahr == "2015":
        
            jw['RLIMIT']  = "6050"
            jw['KLIMIT']  = "4125"
            jw['RV'] = ["9.35","15"]  [ int( jw['NR'] == "1512" ) ] 
            jw['AV'] = ["1.5" ,"3.6"] [ int( jw['NR'] == "1512" ) ] 
            jw['KV'] = ["7.3","13"]  [ int( jw['NR'] == "1512" ) ] 
            jw['KG'] = ["0.3","0.0"] [ int( jw['NR'] == "1512" ) ] 
            jw['ZU'] = { "1512" : "0.0",  "1517": "0.8", "1519": "1.1"}  [ jw['NR'] ]  
            jw['ZV'] = "0.9"
            jw['PV'] = "1.175"
            jw['PZ'] = "0.25"
            jw['U1'] = { "1512" : "1.0", "1517": "1.6",  "1519": "1.6"}  [ jw['NR'] ]  
            jw['U2'] = { "1512" : "0.3", "1517": "0.49", "1519": "0.37"} [ jw['NR'] ]  
            jw['U3'] = "0.15"

            '''
PERSON         LST   SZ  KS  PL KK     KNR    RVN   AVN  KVN   PVN  ZUN   KIN  ART  RVR   AVR  KVR   PVR ST    U1    U2   U3
----------------------------------------------------------------------------------------------------------------------------
ddienlin       1     5.5  0   0 Debeka  1519  9.35    0    0     0    0     0  999  9.35    0    0     0  0   1.6  0.37 0.15
rndengang      1     5.5  0   0 TechnKK 1517  9.35    0    0     0    0     0  999  9.35    0    0     0  0   1.6  0.49 0.15
hparfuss       1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.24 0.15
20150901       1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   1.0  0.30 0.15
jengewald      1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.24 0.15
20150901       1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   1.0  0.30 0.15
jfriedrichs    1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.24 0.15
20150901       1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   1.0  0.30 0.15
tjungblut      1     5.5  0   0 TechnKK 1517  9.35  1.5  7.3 1.175  0.8  0.25  999  9.35  1.5  7.3 1.175  0   1.6  0.49 0.15
stschwarz      4.15  5.5  8r  0 TechnKK 1517  9.35  1.5  7.3 1.175  0.8     0  999  9.35  1.5  7.3 1.175  0   1.6  0.49 0.15
swonneberger   3.20  5.5  0   0 TechnKK 1517  9.35  1.5  7.3 1.175  0.8     0  999  9.35  1.5  7.3 1.175  0   1.6  0.49 0.15
vgabriel       1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   0.7  0.24 0.15
20150901       1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   1.0  0.30 0.15
rbetageri      1     5.5  0   0 TechnKK 1517  9.35  1.5  7.3 1.175  0.8  0.25  999  9.35  1.5  7.3 1.175  0   1.6  0.49 0.15
sjain          1     5.5  0   0 TechnKK 1517  9.35  1.5  7.3 1.175  0.8  0.25  999  9.35  1.5  7.3 1.175  0   1.6  0.49 0.15
----------------------------------------------------------------------------------------------------------------------------
'''

        if jahr == "2016":
        
            jw['RLIMIT']  = "6200"
            jw['KLIMIT']  = "4237.5"
            jw['RV'] = ["9.35","15"]  [ int( jw['NR'] == "1512" ) ] 
            jw['AV'] = ["1.5" ,"3.6"] [ int( jw['NR'] == "1512" ) ] 
            jw['KV'] = ["7.3","13"]  [ int( jw['NR'] == "1512" ) ] 
            jw['KG'] = ["0.3","0.0"] [ int( jw['NR'] == "1512" ) ] 
            jw['ZU'] = { "1512" : "0.0",  "1514": "1.1",  "1517": "1.0", "1519": "1.1", "1520": "1.1" }   [ jw['NR'] ]  
            jw['ZV'] = "1.1"
            jw['PV'] = "1.175"
            jw['PZ'] = "0.25"
            jw['U1'] = { "1512" : "1.0", "1514": "1.5",  "1517": "1.6",  "1519": "1.4",  "1520": "1.5" }  [ jw['NR'] ]  
            jw['U2'] = { "1512" : "0.3", "1514": "0.43", "1517": "0.49", "1519": "0.37", "1520": "0.43" } [ jw['NR'] ]  
            jw['U3'] = "0.12"

            '''

PERSON         LST   SZ  KS  PL KK     KNR    RVN   AVN  KVN   PVN  ZUN   KIN  ART  RVR   AVR  KVR   PVR ST    U1    U2   U3
----------------------------------------------------------------------------------------------------------------------------
ddienlin       1     5.5  0   0 Debeka  1519  9.35    0    0     0    0     0  999  9.35    0    0     0  0   1.4  0.37 0.12
rndengang      1     5.5  0   0 TechnKK 1517  9.35    0    0     0    0     0  999  9.35    0    0     0  0   1.6  0.49 0.12
agosmann       1     5.5  0   0 TechnKK 1517  9.35    0    0     0    0     0  999  9.35    0    0     0  0   1.6  0.49 0.12
suschuster     6     5.5  0   0 TechnKK 1517  9.35    0    0     0    0     0  999  9.35    0    0     0  0   1.6  0.49 0.12
20161001       1.20  5.5  0   0 TechnKK 1517  9.35  1.5  7.3 1.175  1.0     0  999  9.35  1.5  7.3 1.175  0   1.6  0.49 0.12
hparfuss       1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   1.0  0.30 0.12
kfessmann      1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   1.0  0.30 0.12
jengewald      1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   1.0  0.30 0.12
jfriedrichs    1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   1.0  0.30 0.12
tjungblut      1     5.5  0   0 TechnKK 1517  9.35  1.5  7.3 1.175  1.0  0.25  999  9.35  1.5  7.3 1.175  0   1.6  0.49 0.12
swonneberger   3.20  5.5  0   0 TechnKK 1517  9.35  1.5  7.3 1.175  1.0     0  999  9.35  1.5  7.3 1.175  0   1.6  0.49 0.12
vgabriel       1       0  0   0 Minijob 1512     0    0    0     0    0     0  991    15    0   13     0  2   1.0  0.30 0.12
rbetageri      1     5.5  0   0 TechnKK 1517  9.35  1.5  7.3 1.175  1.0  0.25  999  9.35  1.5  7.3 1.175  0   1.6  0.49 0.12
sjain          3     5.5  0   0 TechnKK 1517  9.35  1.5  7.3 1.175  1.0  0.25  999  9.35  1.5  7.3 1.175  0   1.6  0.49 0.12
sdjomo         1     5.5  0   0 AOK     1514  9.35  1.5  7.3 1.175  1.1  0.25  999  9.35  1.5  7.3 1.175  0   1.5  0.43 0.12
20161001       1     5.5  0   0 AOK     1514  9.35    0    0     0    0     0  999  9.35    0    0     0  0   1.5  0.43 0.12
----------------------------------------------------------------------------------------------------------------------------
'''

#  DAK freiwillige versicherung: 674,05 / 121,80

        if jahr == "2017":
        
            jw['RLIMIT']  = "6350"
            jw['KLIMIT']  = "4350"
            jw['RV'] = ["9.35","15"]  [ int( jw['NR'] == "1512" ) ] 
            jw['AV'] = ["1.5" ,"3.6"] [ int( jw['NR'] == "1512" ) ] 
            jw['KV'] = ["7.3","13"]  [ int( jw['NR'] == "1512" ) ] 
            jw['KG'] = ["0.3","0.0"] [ int( jw['NR'] == "1512" ) ] 
            jw['ZU'] = { "1510": "1.5", "1512" : "0.0",  "1517": "1.0",  "1519": "1.1", "1521": "1.1", "1522": "1.1"}  [ jw['NR'] ]  
            jw['ZV'] = "1.1"
            jw['PV'] = "1.275"
            jw['PZ'] = "0.25"
            jw['U1'] = { "1510": 2.0,  "1512" : "0.9", "1517": "1.9",  "1519": "1.4" , "1521": "1.7" , "1522": "1.5"}  [ jw['NR'] ]  
            jw['U2'] = { "1510": 0.38, "1512" : "0.3", "1517": "0.49", "1519": "0.37", "1521": "0.46", "1522": "0.44"} [ jw['NR'] ]  
            jw['U3'] = "0.09"


        if jahr == "2018":
        
            jw['RLIMIT']  = "6500"
            jw['KLIMIT']  = "4425"
            jw['RV'] = ["9.3","15"]  [ int( jw['NR'] == "1512" ) ] 
            jw['AV'] = ["1.5" ,"3.6"] [ int( jw['NR'] == "1512" ) ] 
            jw['KV'] = ["7.3","13"]  [ int( jw['NR'] == "1512" ) ] 
            jw['KG'] = ["0.3","0.0"] [ int( jw['NR'] == "1512" ) ] 
            jw['ZU'] = { "1510": "1.5", "1512" : "0.0",  "1517": "0.9", "1518": "1.1",
                         "1519": "1.0", "1521": "1.0", "1522": "1.0", "1523": "1.2" }  [ jw['NR'] ]  
            jw['ZV'] = "1.0"
            jw['PV'] = "1.275"
            jw['PZ'] = "0.25"
            jw['U1'] = { "1510" : "2.2",  "1512" : "0.9", "1517": "1.9",  "1518": "2.1",
                         "1519": "1.8" , "1521": "1.9" , "1522": "1.5",  "1523": "1.7"  }  [ jw['NR'] ]  
            jw['U2'] = { "1510" : "0.47", "1512" : "0.3", "1517": "0.49",  "1518":  "0.45",
                         "1519": "0.45", "1521": "0.49", "1522": "0.44", "1523": "0.45" } [ jw['NR'] ]  
            jw['U3'] = "0.06"  #  Insolvenzumlage


        if jahr == "2019":
        
            jw['RLIMIT']  = "6700"
            jw['KLIMIT']  = "4537.50"
            jw['RV'] = ["9.3","15"]   [ int( jw['NR'] == "1512" ) ] 
            jw['AV'] = ["1.25" ,"3.6"] [ int( jw['NR'] == "1512" ) ] 
            jw['KV'] = ["7.3","13"]  [ int( jw['NR'] == "1512" ) ] 
            jw['KG'] = ["0.3","0.0"] [ int( jw['NR'] == "1512" ) ] 
            jw['ZU'] = { "1510": "0.75", "1512" : "0.0",  "1514" : "0.55", "1517": "0.35",
                         "1518": "0.55", "1522": "0.45", "1523": "0.6", "1524": "0.5" }  [ jw['NR'] ]  #  1523: ab Mai 0.5
            jw['ZA'] = { "1510": "0.75", "1512" : "0.0",  "1514" : "0.55", "1517": "0.35",
                         "1518": "0.55", "1522": "0.45", "1523": "0.6", "1524": "0.5" }  [ jw['NR'] ]  #  1523: ab Mai 0.5
            jw['ZV'] = "1.0"  # der DURCHSCHNITTLICHE Wert der Krankenkassen-Arbeitnehmerzuschlaege
            jw['PV'] = "1.525"
            jw['PZ'] = "0.25"
            jw['U1'] = { "1510" : "2.4",  "1512" : "0.9", "1514": "1.1", "1517": "1.9",
                         "1518":  "2.2", "1522": "1.4",  "1523": "1.7", "1524" : "2.4"  }  [ jw['NR'] ]  
            jw['U2'] = { "1510" : "0.47", "1512" : "0.24", "1514": "0.46", "1517": "0.47",
                         "1518":  "0.43", "1522": "0.41", "1523": "0.39", "1524": "0.60" } [ jw['NR'] ]  
            jw['U3'] = "0.06"

#   Gleitzonenrechner:  krankenkassen-direkt.de/kassen/beitraege/midijobrechner.de
#                       www.aok.de/fk/tools/rechner/minijob-und-uebergangsbereichsrechner-2019
#                       tk-lex.tk.de/web/guest/rechner
#   Zusatzbeitrag:      krankenkassen.de/gesetzliche-krankenkassen/krankenkasse-beitrag/kein-zusatzbeitrag 


        if jahr == "2020":
        
            jw['RLIMIT']  = "6900"
            jw['KLIMIT']  = "4687.50"
            jw['RV'] = ["9.3","15"]   [ int( jw['NR'] == "1512" ) ] 
            jw['AV'] = ["1.2" ,"3.6"] [ int( jw['NR'] == "1512" ) ] 
            jw['KV'] = ["7.3","13"]  [ int( jw['NR'] == "1512" ) ] 
            jw['KG'] = ["0.3","0.0"] [ int( jw['NR'] == "1512" ) ] 
            jw['ZU'] = { "1510": "0.75", "1512" : "0.0",  "1514" : "0.55", "1517": "0.35",
                         "1518": "0.55", "1522": "0.45", "1523": "0.6", "1524": "0.5"  }  [ jw['NR'] ]  #  1523: ab Mai 0.5
            jw['ZA'] = { "1510": "0.75", "1512" : "0.0",  "1514" : "0.55", "1517": "0.35",
                         "1518": "0.55", "1522": "0.45", "1523": "0.6", "1524": "0.5"  }  [ jw['NR'] ]  #  1523: ab Mai 0.5
            jw['ZV'] = "1.1"  # der DURCHSCHNITTLICHE Wert der Krankenkassen-Arbeitnehmerzuschlaege
            jw['PV'] = "1.525"
            jw['PZ'] = "0.25"
            jw['U1'] = { "1510" : "2.4",  "1512" : "0.9", "1514": "1.1", "1517": "2.0",
                         "1518":  "2.2", "1522": "1.4",  "1523": "1.7", "1524": "2.3"   }  [ jw['NR'] ]  
            jw['U2'] = { "1510" : "0.47", "1512" : "0.19", "1514": "0.46", "1517": "0.47",
                         "1518":  "0.43", "1522": "0.41", "1523": "0.39", "1524": "0.7"  } [ jw['NR'] ]  
            jw['U3'] = "0.06"



        if jahr == "2021":       #   DAK  Arbeitgeberservice  0231/8642569450
        
            for zeitraum in ("123456789","ABC"):
                if monat in zeitraum:
                    break
    
            jw['RLIMIT']  = "7100"
            jw['KLIMIT']  = "4837.50"
            jw['RV'] = ["9.3","15"]   [ int( jw['NR'] == "1512" ) ] 
            jw['AV'] = ["1.2" ,"3.6"] [ int( jw['NR'] == "1512" ) ] 
            jw['KV'] = ["7.3","13"]  [ int( jw['NR'] == "1512" ) ] 
            jw['KG'] = ["0.3","0.0"] [ int( jw['NR'] == "1512" ) ] 
            jw['ZU'] = { "1510": "0.75", "1512" : "0.0",  "1514" : "0.55", "1515": "0.645", "1517": "0.60",
                         "1518": "0.75", "1522": "0.45", "1523": "0.6" }  [ jw['NR'] ]  #  1523: ab Mai 0.5
            jw['ZA'] = { "1510": "0.75", "1512" : "0.0",  "1514" : "0.55", "1515": "0.645", "1517": "0.60",
                         "1518": "0.75", "1522": "0.45", "1523": "0.6" }  [ jw['NR'] ]  #  1523: ab Mai 0.5
            jw['ZV'] = "1.3"  # der DURCHSCHNITTLICHE Wert der Krankenkassen-Arbeitnehmerzuschlaege
            jw['PV'] = "1.525"
            jw['PZ'] = "0.25"
            jw['U1'] = { "1510" : "2.4",  "1512" : "0.9", "1514": "1.1", "1515": "2.2", "1517": { "123456789": "2.2", "ABC": "1.6" }[zeitraum],
                         "1518":  "2.2",  "1522": "1.4",  "1523": "1.7"  }  [ jw['NR'] ]  
            jw['U2'] = { "1510" : "0.65", "1512" : "0.24", "1514": "0.46", "1515": "0.49", "1517": { "123456789": "0.55", "ABC": "0.65" }[zeitraum],
                         "1518":  "0.53", "1522": "0.41", "1523": "0.39" } [ jw['NR'] ]  
            jw['U3'] = "0.12"


        if jahr == "2022":      
        

            jw['RLIMIT']  = ["7050",   "7050",   "99999999" ][ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ]    #  ist tatsaechlich abgesenkt!
            jw['KLIMIT']  = ["4837.50","4837.50","99999999" ][ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 
            jw['RV'] = ["9.3" ,"15" ,"18.5" ]    [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 
            jw['AV'] = ["1.2" ,"3.6","10.2" ]    [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 
            jw['KV'] = ["7.3","13","1.7"]        [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 
            jw['KG'] = ["0.3","0.0","0.0"]       [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ]  
            jw['ZU'] = { "1510": "0.75", "1512" : "0.0",  "1514" : "0.55", "1515": "0.645", "1517": "0.60",
                         "1518": "0.75", "1522": "0.45", "1523": "0.6" , "1579": "0.0" }  [ jw['NR'] ]  #  1523: ab Mai 0.5
            jw['ZA'] = { "1510": "0.75", "1512" : "0.0",  "1514" : "0.55", "1515": "0.645", "1517": "0.60",
                         "1518": "0.75", "1522": "0.45", "1523": "0.6" , "1579": "0.0" }  [ jw['NR'] ]  #  1523: ab Mai 0.5
            jw['ZV'] = "1.3"  # der DURCHSCHNITTLICHE Wert der Krankenkassen-Arbeitnehmerzuschlaege
            jw['PV'] = [ "1.525","1.525","0.6" ] [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ]  
            jw['PZ'] = ["0.35","0.35","0.00"]    [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ]  
            jw['U1'] = { "1510" : "2.2",  "1512" : "0.9", "1514": "1.1", "1515": "1.7", "1517": "1.6",
                         "1518":  "2.0",  "1522": "1.4",  "1523": "1.7"  , "1579": "0.0" }  [ jw['NR'] ]  
            jw['U2'] = { "1510" : "0.65", "1512" : "0.24", "1514": "0.46", "1515": "0.56", "1517": "0.65",
                             "1518":  "0.59", "1522": "0.41", "1523": "0.39" , "1579": "0.0" } [ jw['NR'] ]  
            jw['U3'] = [ "0.09" ,"0.09","0.00"]  [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 
            
                        

        if jahr == "2023":      
        
            jw['RLIMIT']  = ["7050",   "7050",   "99999999" ][ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ]    #  ist tatsaechlich abgesenkt!
            jw['KLIMIT']  = ["4837.50","4837.50","99999999" ][ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 
            jw['RV'] = ["9.3" ,"15" ,"18.5" ]    [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 
            jw['AV'] = ["1.2" ,"3.6","10.2" ]    [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 
            jw['KV'] = ["7.3","13","1.7"]        [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 
            jw['KG'] = ["0.3","0.0","0.0"]       [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ]  
            jw['ZU'] = { "1510": "0.75", "1512" : "0.0",  "1514" : "0.55", "1515": "0.645", "1517": "0.60",
                         "1518": "0.75", "1522": "0.45", "1523": "0.6" , "1579": "0.0" }  [ jw['NR'] ]  #  1523: ab Mai 0.5
            jw['ZA'] = { "1510": "0.75", "1512" : "0.0",  "1514" : "0.55", "1515": "0.645", "1517": "0.60",
                         "1518": "0.75", "1522": "0.45", "1523": "0.6" , "1579": "0.0" }  [ jw['NR'] ]  #  1523: ab Mai 0.5
            jw['ZV'] = "1.3"  # der DURCHSCHNITTLICHE Wert der Krankenkassen-Arbeitnehmerzuschlaege
            jw['PV'] = [ "1.525","1.525","0.6" ] [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ]  
            jw['PZ'] = ["0.35","0.35","0.00"]    [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ]  
            jw['U1'] = { "1510" : "2.2",  "1512" : "0.9", "1514": "1.1", "1515": "1.7", "1517": "1.6",
                         "1518":  "2.0",  "1522": "1.4",  "1523": "1.7"  , "1579": "0.0" }  [ jw['NR'] ]  
            jw['U2'] = { "1510" : "0.65", "1512" : "0.24", "1514": "0.46", "1515": "0.56", "1517": "0.65",
                             "1518":  "0.59", "1522": "0.41", "1523": "0.39" , "1579": "0.0" } [ jw['NR'] ]  
            jw['U3'] = [ "0.09" ,"0.09","0.00"]  [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 


        if jahr == "2024":      
        
            jw['RLIMIT']  = ["7050",   "7050",   "99999999" ][ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ]    #  ist tatsaechlich abgesenkt!
            jw['KLIMIT']  = ["4837.50","4837.50","99999999" ][ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 
            jw['RV'] = ["9.3" ,"15" ,"18.5" ]    [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 
            jw['AV'] = ["1.2" ,"3.6","10.2" ]    [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 
            jw['KV'] = ["7.3","13","1.7"]        [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 
            jw['KG'] = ["0.3","0.0","0.0"]       [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ]  
            jw['ZU'] = { "1510": "0.75", "1512" : "0.0",  "1514" : "0.55", "1515": "0.645", "1517": "0.60",
                         "1518": "0.75", "1522": "0.45", "1523": "0.6" , "1579": "0.0" }  [ jw['NR'] ]  #  1523: ab Mai 0.5
            jw['ZA'] = { "1510": "0.75", "1512" : "0.0",  "1514" : "0.55", "1515": "0.645", "1517": "0.60",
                         "1518": "0.75", "1522": "0.45", "1523": "0.6" , "1579": "0.0" }  [ jw['NR'] ]  #  1523: ab Mai 0.5
            jw['ZV'] = "1.3"  # der DURCHSCHNITTLICHE Wert der Krankenkassen-Arbeitnehmerzuschlaege
            jw['PV'] = [ "1.525","1.525","0.6" ] [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ]  
            jw['PZ'] = ["0.35","0.35","0.00"]    [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ]  
            jw['U1'] = { "1510" : "2.2",  "1512" : "0.9", "1514": "1.1", "1515": "1.7", "1517": "1.6",
                         "1518":  "2.0",  "1522": "1.4",  "1523": "1.7"  , "1579": "0.0" }  [ jw['NR'] ]  
            jw['U2'] = { "1510" : "0.65", "1512" : "0.24", "1514": "0.46", "1515": "0.56", "1517": "0.65",
                             "1518":  "0.59", "1522": "0.41", "1523": "0.39" , "1579": "0.0" } [ jw['NR'] ]  
            jw['U3'] = [ "0.09" ,"0.09","0.00"]  [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 


        if jahr == "2025":      
        
            jw['RLIMIT']  = ["7050",   "7050",   "99999999" ][ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ]    #  ist tatsaechlich abgesenkt!
            jw['KLIMIT']  = ["4837.50","4837.50","99999999" ][ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 
            jw['RV'] = ["9.3" ,"15" ,"18.5" ]    [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 
            jw['AV'] = ["1.2" ,"3.6","10.2" ]    [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 
            jw['KV'] = ["7.3","13","1.7"]        [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 
            jw['KG'] = ["0.3","0.0","0.0"]       [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ]  
            jw['ZU'] = { "1510": "0.75", "1512" : "0.0",  "1514" : "0.55", "1515": "0.645", "1517": "0.60",
                         "1518": "0.75", "1522": "0.45", "1523": "0.6" , "1579": "0.0" }  [ jw['NR'] ]  #  1523: ab Mai 0.5
            jw['ZA'] = { "1510": "0.75", "1512" : "0.0",  "1514" : "0.55", "1515": "0.645", "1517": "0.60",
                         "1518": "0.75", "1522": "0.45", "1523": "0.6" , "1579": "0.0" }  [ jw['NR'] ]  #  1523: ab Mai 0.5
            jw['ZV'] = "1.3"  # der DURCHSCHNITTLICHE Wert der Krankenkassen-Arbeitnehmerzuschlaege
            jw['PV'] = [ "1.525","1.525","0.6" ] [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ]  
            jw['PZ'] = ["0.35","0.35","0.00"]    [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ]  
            jw['U1'] = { "1510" : "2.2",  "1512" : "0.9", "1514": "1.1", "1515": "1.7", "1517": "1.6",
                         "1518":  "2.0",  "1522": "1.4",  "1523": "1.7"  , "1579": "0.0" }  [ jw['NR'] ]  
            jw['U2'] = { "1510" : "0.65", "1512" : "0.24", "1514": "0.46", "1515": "0.56", "1517": "0.65",
                             "1518":  "0.59", "1522": "0.41", "1523": "0.39" , "1579": "0.0" } [ jw['NR'] ]  
            jw['U3'] = [ "0.09" ,"0.09","0.00"]  [ int( jw['NR'] == "1512" ) + 2*int( jw['NR'] == "1579")  ] 


        jw['ST'] =  "2.0"
        jw['PS'] = "25.0"
        
            

#*************************************************************************

    def parse_tabletext (self,table_text):
        
        columns = [-100,-99,99999991,99999992,99999993]
        
        fehlerzeile = None
        for zeile0 in table_text.split("\n"):

            zeile = zeile0
            if zeile and zeile[0] == "#":
                continue
            offset  = 0
            
            while (0 == 0):
                m = re.search(r"^( *)(\S+)(.*)$",zeile)
                if not m:
                    break
                a      = offset + len(m.group(1))
                offset = offset + len(m.group(1)) + len(m.group(2))
                b      = offset - 1
                zeile  = m.group(3)
                
                zaehler = 0
                while (0 == 0):
                    zaehler = zaehler + 2
#                    print(111,a,b,columns[zaehler-1],columns[zaehler+0],columns[zaehler+1],columns[zaehler+2])
                    if a <= columns[zaehler+1]:
                        if not columns[zaehler-1] < a:
                            fehlerzeile = zeile0
                        elif b < columns[zaehler]:
#                            print (222,a,b)
                            columns.insert(zaehler,a)
                            columns.insert(zaehler+1,b)
                        elif b < columns[zaehler+2]:
#                            print (333,a,b)
                            columns[zaehler]   = min(a,columns[zaehler])
                            columns[zaehler+1] = max(b,columns[zaehler+1])
                        else:
                            fehlerzeile = zeile0
                        break
                        
                if fehlerzeile:
                    print(fehlerzeile)
                    return(fehlerzeile)
                    
        columns     = columns[3:-3][::2]
        columns[-1] = columns[-1] + 1
        tablerows   = []
        tablecols   = []
        addspaces   = " " * columns[-1]
        
        for zeile0 in table_text.split("\n"):
            zeile = (zeile0 + addspaces)[0:len(addspaces)]
            tablerow = []
            zaehler  = 0
            offset   = 0
            a        = 0
            for b in columns:
                tablerow.append(zeile[a:b+1])
                a = b+1
            tablerows.append(tablerow)
        
        tablecols = []
        for col in tablerows[0]:
            tablecols.append([])

        zaehler = 0
        for tablecol in tablecols:
            for tablerow in tablerows:
                tablecol.append(tablerow[zaehler])
            zaehler = zaehler + 1

        return(tablerows,tablecols)            

#*************************************************************************
#*************************************************************************

    def xxsozvers (self,ktodata):

        self.sort_sozvers = 'LO,SO,LS,SZ,KR,KE,KA,KI,PL,KV,RV,AV,PV,U1,U2,U3,ZA'.split(',')
        ee = []
        text = []
        for zeile in ktodata['CONTENT'].split('\n'):
            m = re.search('^(\\d\\d\\d\\d)(\\d\\d)(\\d\\d) +\\-?(\\d+\\.\\d\\d) +(\\S.*?)([a-z]+)(\\-?\\S*) +\\S+ +(\\-?\\d+\\.\\d\\d) +(.*)', zeile)
            if not m:
                text.append(zeile)
                continue
            jahr = m.group(1)
            monat = int(m.group(2)) - 1
            datum = m.group(1) + m.group(2) + m.group(3)
            betrag = float(m.group(4))
            anr = m.group(5)
            person = m.group(6)
            art = re.sub('^-', '', m.group(7))
            remark = m.group(9)
            ee.append([jahr, monat, datum, betrag, anr, person, art, remark, zeile])

        ee.sort(key=lambda x: x[5] + x[0] + '%02u' % x[1] + x[2] + x[5] + '%1u' % (1 + int('LOHN' in x or 'SOND' in x)))
        ee.append(['', 0, '', '', '', '', '', '', ''])
        person0 = ''
        jahr0 = ''
        monat0 = -9
        buchungen = []
        lsk = {}
        for entry in ee:
            jahr, monat, datum, betrag, anr, person, art, remark, zeile = tuple(entry)
            if not (person0 == person and monat0 == monat):
                if not person0 == '':
                    if not has_values:
                        buchungen.extend(self.sozvers_make_buchungen(person0, jahr0, monat0, datum0, remark0, betrag0, betragk, betragr, lsk))
                person0 = person
                monat0 = monat
                datum0 = datum
                betrag0 = 0.0
                betragk = 0.0
                betragr = 0.0
                remark0 = ''
                has_values = False
                if not jahr0 == jahr:
                    jahr0 = jahr
                    lsk = [0.0, 0.0, 0.0, 0.0]
            if art == 'ZAHL':
                text.append(zeile)
            elif art in ('LOHN', 'LOHN-Q', 'LOHN-R', 'LOHN-Z', 'LOHNG', 'LOHNH', 'SOND',
                         'SOND-Q', 'SOND-R', 'SOND-Z'):
                text.append(zeile)
                remark0 = remark0 + '| ' + remark
                datum0 = datum
                m = re.search('^(.*)\\-([KRZ])', art)
                if not m:
                    betrag0 = betrag0 + betrag
                    betragk = betragk + betrag
                    betragr = betragr + betrag
                else:
                    if m.group(2) == 'Q':
                        betrag0 = betrag0 + betrag
                        betragk = betragk + betrag
                        betragr = betragr + betrag
                    if m.group(2) == 'R':
                        betrag0 = betrag0 + betrag
                        betragr = betragr + betrag
                    if m.group(2) == 'Z':
                        betrag0 = betrag0 + betrag
            elif jahr not in ('2018', '2017', '2016'):
                text.append(zeile)
                has_values = True
                continue

        for buchung in buchungen:
            o = '  '.join(buchung)
            if 'KV-Z' in o:
                o = re.sub('KV-AN-', 'KV-ZU-', o)
            if 'PV-Y' in o:
                o = re.sub('PV-AN-', 'PV-KI-', o)
            text.append(o)

        ktodata['CONTENT'] = '\n'.join(text) + '\n'
        ktodata['CONTENT'] = re.sub('AR-Anteil', 'Arbeitgeber-Anteil', ktodata['CONTENT'], 99999999)
        ktodata['CONTENT'] = re.sub('AN-Anteil', 'Arbeitnehmer-Anteil', ktodata['CONTENT'], 99999999)
        ktodata['CONTENT'] = re.sub('korrigierte Soli', 'korrigierter Soli', ktodata['CONTENT'], 99999999)

#******************************************************************* 

    def xxsozvers_make_buchungen(self, person0, jahr0, monat0, datum0, remark0, betrag0, betragk, betragr, lsk):

        buchungen = []
        kinderlos = 0
        rvbefreit = 0
        red_betr = None
        sozvers_faktoren = []
        m = re.search('Gleitzone(\\d*)', remark0)
        if m:
            d = jahr0[0:-len(m.group(1))] + m.group(1)
            if int(d) < 2013:
                gl0 = self.gleitzone['12A']
                gl1 = self.gleitzone['12B']
            else:
                gl0 = self.gleitzone['15A']
                gl1 = self.gleitzone['15B']
            if gl0 < betrag < gl1:
                red_betrag = self.gleitzone[int(jahr0)] * 450 + (gl1 / (gl1 - gl0) - gl0 / (gl1 - gl0) * self.gleitzone[int(jahr0)]) * (betrag - 450)
                ag_anteil = {'RV': 0.0, 'AV': 0.0, 'KV': 0.0, 'PV': 0.0}
                gesamt = {'RV': 0.0, 'AV': 0.0, 'KV': 0.0, 'PV': 0.0}
        kv_zuschlag_fuer_lst_berechnung = 0.0
        m = re.search('([A-Za-z]+) *, +SV-AN\\: +([\\d\\.]+)\\/([\\d\\.]+)\\/([\\d\\.]+)\\/([\\d\\.]+)', remark0)
        if m:
#            kknr, kk = self.fibu.rules.kknr(' ' + remark0 + ' ')
            kknr, kk = self.kknr(' ' + remark0 + ' ')
            sozvers_faktoren = [[m.group(2), 'RV', ''], [m.group(3), 'AV', ''], [m.group(4), 'KV', '-S'], [m.group(5), 'PV', '-S']]
            m = re.search('Zuschl\\: +([\\d\\.]+)\\/([\\d\\.]+)', remark0)
            if m:
                sozvers_faktoren = sozvers_faktoren + [[m.group(1), 'KV', '-Z'], [m.group(2), 'PV', '-Y']]
                kv_zuschlag_fuer_lst_berechnung = float(m.group(1)) + float(m.group(2))
            sozvers_faktoren.append(None)
            m = re.search(' SV-AR\\: +([\\d\\.]+)\\/([\\d\\.]+)\\/([\\d\\.]+)\\/([\\d\\.]+)', remark0)
            if m:
                sozvers_faktoren = sozvers_faktoren + [[m.group(1), 'RV', ''], [m.group(2), 'AV', ''], [m.group(3), 'KV', ''], [m.group(4), 'PV', '']]
            m = re.search(' Uml\\: +([\\d\\.]+)\\/([\\d\\.]+)\\/([\\d\\.]+)', remark0)
            if m:
                sozvers_faktoren = sozvers_faktoren + [[m.group(1), 'U1', ''], [m.group(2), 'U2', ''], [m.group(3), 'U3', '']]
            ANR = 'AR'
            sozvers_faktoren.reverse()
        m = re.search('Pausch[sS]t +(\\d+).*kurzfri', remark0)
        if m:
            buchungen.append([datum0, '%3.2f' % (float(m.group(1)) * 0.01 * betrag0),
             '11-1500-AR-' + person0, '11-1503-PL-' + person0, '0.00', 'Pauschalsteuer'])
        else:
            m = re.search('Pausch[sS]t +(\\d+)', remark0)
            if m:
                buchungen.append([datum0, '%3.2f' % (float(m.group(1)) * 0.01 * betrag0),
                 '11-1500-AR-' + person0 + '-ST', '11-' + kknr + '-ST-AR-' + person0, '0.00', 'Pauschalsteuer Minijob'])
            for o in sozvers_faktoren:
                if o == None:
                    ANR = 'AN'
                elif float(o[0]) > 0.0001:
                    if o[1] in ('RV', 'AV', 'U1', 'U2'):
                        beitrag = float(o[0]) * 0.01 * betragr
                    elif o[1] in ('KV', 'PV'):
                        beitrag = float(o[0]) * 0.01 * betragk
                    else:
                        beitrag = float(o[0]) * 0.01 * betrag0
                    if red_betr:
                        if o[1] in ('RV', 'AV', 'KV', 'PV'):
                            gesamt[o[1]] = gesamt[o[1]] + float(o[0]) * 0.01 * red_betr
                            if ANR == 'AR':
                                ar_anteil[o[1]] = beitrag
                            if ANR == 'AN' and o[2] in ('', '-S'):
                                beitrag = gesamt[o[1]] - ag_anteil[o[1]]
                    if abs(beitrag) > 0.001:
                        buchungen.append([datum0, '%3.2f' % beitrag, '11-1500-' + ANR + '-' + person0 + '-' + o[1] + o[2],
                         '11-' + kknr + '-' + o[1] + '-' + ANR + '-' + person0, '0.00', ANR + '-Anteil ' + o[1] + ', ' + kk])
                    if o[1] == 'RV':
                        rvbefreit = rvbefreit + 1
                    if o[1] + o[2] == 'PV-Y':
                        kinderlos = 1

            lsk[0] = lsk[0] + betrag0
            m = re.search('StKl.*?(\\d)\\/([\\d\\.]+)\\/([\\d\\.]+)([reia]?).*([\\d\\.]+) +Kind', remark0)
            if m:
                if not datum0[7] == '7':
                    betrag1 = betrag0
                    intmode = 2
                else:
                    betrag1 = lsk[0]
                    intmode = 1
                stkl = m.group(1)
                soli = m.group(2)
                kirchensteuersatz = float(m.group(3)) * 0.01
                religion = m.group(4)
                kinder = m.group(5)
#                exec('import pap.lst' + jahr0)
                stobj = eval('lohnsteuer.lst' + jahr0 + '.Lst' + jahr0 + '()')
                stobj.setKrv(0)
                stobj.setKvz(kv_zuschlag_fuer_lst_berechnung)
                stobj.setLzz(int(intmode))
                if kirchensteuersatz > 0:
                    stobj.setR(1)
                else:
                    stobj.setR(0)
                stobj.setRe4(int(betrag1 * 100))
                stobj.setStkl(int(stkl))
                stobj.setZkf(float(kinder))
                stobj.MAIN()
                ls = 0.01 * float(stobj.getLstlzz())
                sz = 0.01 * float(stobj.getSolzlzz())
                ks = 0.01 * (float(stobj.getBk()) + float(stobj.getBks()) + float(stobj.getBkv())) * kirchensteuersatz
                korrektur = ''
                if intmode == 1:
                    ls = ls - lsk[1]
                    sz = sz - lsk[2]
                    ks = ks - lsk[3]
                    korrektur = 'Jahreskorrigierte '
                else:
                    lsk[1] = lsk[1] + ls
                    lsk[2] = lsk[2] + sz
                    lsk[3] = lsk[3] + ks
                buchungen.append([datum0, '%3.2f' % ls, '11-1500-AN-' + person0 + '-LS', '11-1503-LS-' + person0,
                 '0.00', korrektur + ' Lohnsteuer'])
                buchungen.append([datum0, '%3.2f' % sz, '11-1500-AN-' + person0 + '-SZ', '11-1503-SZ-' + person0,
                 '0.00', korrektur + 'Solidaritaetszuschlag'])
                o = '-K' + religion.upper()
                if not o == '-K':
                    buchungen.append([datum0, '%3.2f' % ks, '11-1500-AN-' + person0 + o, '11-1503' + o + '-' + person0,
                     '0.00', korrektur + 'Lohnsteuer'])

        return (buchungen)

#*************************************************************************

    def xxsozvers_sortidx(self, pattern):

        if pattern[2:4] in self.sort_sozvers:
            return pattern[0:2] + '%02u' % self.sort_sozvers.index(pattern[2:4])
        else:
            return pattern[0:2] + '99'

#*************************************************************************

    def xxread_lstb (self,jahr):
    
        text = ""
        for file in self.ktolstb:
            m = re.search(r"(\d\d\d\d)",file)
            if m:
                if jahr == m.group(1):
                    text = open(file).read()
                    break

        if text == "":
            return(None)
        
        erg = {}
        for abgabe in self.abgabenarten + ['LOHN']:
            erg[abgabe] = 0.00
            m = re.search(abgabe+".*?(\d+)[,\.](\d\d)",text)
            if m:
                erg[abgabe] = float(m.group(1)+"."+m.group(2))

        return(erg)

#*************************************************************************


if __name__ == "__main__":

    ktofile = ( glob.glob( "*.kto"  )  + glob.glob( "*.kto.html"  ) )[0]
    ktoslip = glob.glob( "gehaltsbescheinigung*.md" )
    ktolstb = glob.glob( "LStB*.md" )

#    print(ktofile,ktoslip,ktolstb)


    lohn    = Lohn("13-D5a-6010","13-D5b-6110","10-B12-1457-1501-kug")
    erg     = lohn.parse_lohndaten(open(ktofile).read(),ktoslip,ktolstb)

    open(ktofile,"w").write(erg)  # +"\n"+str(random.randint(1,10000))) 
    open("vormonate","w").write(lohn.diff)
    if lohn.diff == "":
        os.remove("vormonate")

    if len(sys.argv) > 1:
        for jm in sys.argv[1].split(","):
            if (len(jm) < 6):
                jm = "20" + jm
            if jm in lohn.lstfile and lohn.lstfile[jm]:
                open(lohn.lstfile[jm],"w").write(lohn.lsttext[jm])
    

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