
| Current Path : /home/ift/52_procpy/fibu/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : //home/ift/52_procpy/fibu/fibu_sozvers.py |
# coding: utf-8
import os
import sys
import re
import codecs
class Sozvers (object):
def __init__ (self,fibu):
self.fibu = fibu
self.betriebsnr_kk = {}
#******************************************************
def monatnr (self,text):
text = re.sub(r"Januar", "01",text,9999)
text = re.sub(r"Februar", "02",text,9999)
text = re.sub(r"M..?rz", "03",text,9999)
text = re.sub(r"April", "04",text,9999)
text = re.sub(r"Mai", "05",text,9999)
text = re.sub(r"Juni", "06",text,9999)
text = re.sub(r"Juli", "07",text,9999)
text = re.sub(r"August", "08",text,9999)
text = re.sub(r"September", "09",text,9999)
text = re.sub(r"Oktober", "10",text,9999)
text = re.sub(r"November", "11",text,9999)
text = re.sub(r"Dezember", "12",text,9999)
text = re.sub(r"alenderjahr","13",text,9999)
return(text)
#******************************************************
def parse_beitragsnachweise (self,files):
kkdatum = {}
buchungen = []
texte = self.fibu.import_file(files)
self.betriebsnr_kk = {}
for text in texte:
text = self.fibu.normalize_text(text)
m = re.search("TAN +(\d\d\d\d\d\d\d\d\d)\D",text)
if not m:
continue
newname = m.group(1)
m = re.search("Betriebsnummer +(\d\d\d\d\d\d\d\d)\D",text)
if not m:
continue
newname = newname + "_" + m.group(1)
m = re.search("Sendedatum\:? +(\d\d)\.(\d\d)\.(\d\d)(\d\d)\D",text)
if not m:
continue
newname = newname + "_" + m.group(4) + m.group(2) + m.group(1)
text = re.sub(r"Techniker Krankenkasse","TKK", text,9999)
text = re.sub(r"Minijob.*Zentrale","Knappschaft",text,9999)
text = re.sub(r"\-?Rechtskreis +(West|Ost)"," RK\\1",text,9999)
text = re.sub(r" BKK +"," BKK", text,9999)
text = re.sub(r" DAK-"," DAK ", text,9999)
text = re.sub(r"(.*) +ohne +Sozialausgleich(.*)","", text,9999) # wegen doppelt eingetragener Betraege
m = re.search("Einzugs+telle.*?Name +([a-zA-Z0-9]+)",text,re.DOTALL)
if m:
(kknr,kk) = self.fibu.buchh.kknr(text)
m = re.search(r"Zeitraum +von (\d+)\.(\d+)\.(\d+).*?Zeitraum +bis +(\d+)\.(\d+)\.(\d+)",text,re.DOTALL)
if not m:
continue
if not m.group(2) == m.group(5) or not m.group(3) == m.group(6):
continue
jahr = m.group(3)
monat = m.group(2)
newname = newname + "_" + (kk+"______")[0:6] + "__" + jahr + "_" + monat;
newname = re.sub(r"KNAPPS","MINIJO",newname)
text = re.sub(r"(\d)\.(\d+\,\d\d)","\\1\\2",text,9999)
m = re.search(r"Einzugsstelle.*Betriebsnummer +(\d+)(.*?)Name +([^\n ]+)",text,re.DOTALL)
if not m:
continue
self.betriebsnr_kk[kknr] = m.group(1)
remark = m.group(3) + " " + m.group(1)
remark = re.sub(r"[\n-]/"," ",remark,9999,re.DOTALL)
remark = re.sub(r"^(.*?) +(.*?) .*? (\d+)$","\\1 \\2 \\3",remark)
buchungen1 = []
o = kknr + "," + jahr + monat
if o in kkdatum:
kkdatum[o] = kkdatum[o] + 1
else:
kkdatum[o] = 20
datum = jahr + monat + ("%02u" % kkdatum[o])
while (0 == 0):
m = re.search(r"^(.*)(BetrPr *| *)\nB?e?t?r?P?r? ?(einheitliche|Umlage|Beitra[e\"]?ge|Storno|Zusatzbeitr\S*) (.*?) *(\-?\d+)\,(\d\d)",
text,re.IGNORECASE+re.DOTALL)
if not m:
break
text = m.group(1)
remark1 = remark+", " + m.group(2) + m.group(3) + " " + m.group(4)
remark1 = re.sub(r"\n"," ",remark1,9999,re.DOTALL)
ktoa = None
ktob = "10-1510-" + kknr + "-meldung-" + datum[6:8]
if " zur Krankenversicherung" in remark:
ktoa = "11-"+kknr+"-KV-BE-meldung"
elif " Zusatzbei" in remark1:
ktoa = "11-"+kknr+"-KV-ZU-meldung"
elif " Arbeitsfoerderung" in remark1:
ktoa = "11-"+kknr+"-AV-meldung"
elif " Rentenversicherung" in remark1:
ktoa = "11-"+kknr+"-RV-meldung"
elif " Pflegeversicherung" in remark1:
ktoa = "11-"+kknr+"-PV-meldung"
elif " Krankheitsaufwendungen" in remark1:
ktoa = "11-"+kknr+"-U1-meldung"
elif " Mutterschaftsaufwendungen" in remark1:
ktoa = "11-"+kknr+"-U2-meldung"
elif " Insolvenzgeldversicherung" in remark1:
ktoa = "11-"+kknr+"-U3-meldung"
elif " einheitliche" in remark1:
ktoa = "11-"+kknr+"-ST-meldung"
elif " Storno" in remark1:
ktoa = "11-"+kknr+"-ZZ-meldung"
elif " UST" in remark1:
ktoa = "11-"+kknr+"-xxUSTxx-meldung"
elif " einzubehaltene" in remark1:
ktoa = "11-"+kknr+"-LS-meldung"
elif " pauschal" in remark1:
ktoa = "11-"+kknr+"-PL-meldung"
elif " Solidarit" in remark1:
ktoa = "11-"+kknr+"-SZ-meldung"
elif " Kirchensteuer roem" in remark1:
ktoa = "11-"+kknr+"-KR-meldung"
elif " Kirchensteuer evan" in remark1:
ktoa = "11-"+kknr+"-KE-meldung"
elif " Kirchensteuer altk" in remark1:
ktoa = "11-"+kknr+"-KA-meldung"
elif " Kirchensteuer isra" in remark1:
ktoa = "11-"+kknr+"-KB-meldung"
elif re.search(r" Sae?umn| Mahn|gebuehr",remark1):
ktoa = "11-"+kknr+"-saeumn"
elif re.search(r" Beitrae?g| Betriebspr",remark1):
ktoa = "11-"+kknr+"-beitrag"
elif re.search(r" Umbuchung +Leistung+ U1",remark1):
ktoa = "11-"+kknr+"-umbuchung"
buchungen1.append([datum,("%3.2f"%float((m.group(5)+"."+m.group(6)))),ktoa,ktob,remark1])
buchungen = buchungen + buchungen1
m = re.search(r"\[(.*)[\\\/](.*)\.(.*?)\]",text) # renaming the original files
filename0 = m.group(1) + "/" + m.group(2)
filename = m.group(1) + "/" + newname
if not filename0 == filename:
print "rename file " + filename0 + " to + filename"
os.rename(filename0 + "." + m.group(3),filename + "." + m.group(3))
os.rename(filename0 + ".pdf" ,filename + ".pdf")
return(buchungen)
#******************************************************
def parse_ktoauszug (self,files):
texte = self.fibu.import_file(files)
day = {}
buchungen = []
entries = {}
for text in texte:
text = self.fibu.normalize_text(text)
text = re.sub("BKK Verkehrsbau","VBU",text)
(kknr,kk) = self.fibu.buchh.kknr( re.sub("\n"," ",text,999999) )
text = re.sub(r"(\d)\.(\d\d\d)\,","\\1\\2,",text,999999);
# while (0 == 0): # Punkte und Leerzeichen entfernen in Zahlendarstellungen
# m = re.search(r"^(.*?)(\d+) ?(\d*) ?\, ?(\d) ?(\d)(.*)$",text,re.DOTALL)
# if not m:
# break
# text1 = m.group(1) + m.group(2) + m.group(3) + "," + m.group(4) + m.group(5) + m.group(6)
# if text1 == text:
# break
# text1 = text
jahr = ""
monat = ""
text1 = []
if int(kknr) == 1517: # TKK
for zeile in text.split("\n"):
m = re.search(r"(\d\d)/(\d\d\d\d) +Faelligkeit",zeile)
if m:
jahr = m.group(2)
monat = m.group(1)
continue
m = re.search(r"(Saeumnis|Beitragsnach|Gebuehr)(.*?) +(\d+)\,(\d\d)",zeile)
if m:
text1.append([jahr+monat,m.group(1) + m.group(2),m.group(3)+"."+m.group(4)])
elif int(kknr) == 1510: # DAK
for zeile in text.split("\n"):
m = re.search(r"Bezugszeitraum +(\d\d)\.(\d\d)\.(\d\d)",zeile,re.IGNORECASE)
if m:
jahr = "20" + m.group(3)
monat = m.group(2)
continue
m = re.search(r"(Forderung|Beitrag aus Betriebspruefung|Saeumniszuschlag)(.*?) +([\d ]+)\,([\d ]{2})",zeile)
if m:
text1.append([jahr+monat,m.group(1),re.sub(r" ","",m.group(3)+"."+m.group(4),99)])
else:
for zeile in text.split("\n"):
zeile = re.sub(r"\s+"," ",zeile,9999)
zeile = re.sub(r" (\d\d)\.(\d\d)\.(\d\d) "," \\1.\\2.20\\3 ",zeile)
zeile = re.sub(r"(SZ|SA) .?(B)(S?)"," Beitrag\\3 ",zeile,9999) # special MobilOil
zeile = re.sub(r"(SZ|SA) .?S"," Saeumniszuschlag ",zeile,9999) # special MobilOil
zeile = re.sub(r"(Beitragszahlung|im +Beitrag)","",zeile,9999) # special Minijob, TKK
m = re.search(r"bezugszeitraum +(.*?) *$",zeile.lower()) # special DAK
m = re.search(r"(Beitrag |Forderung )(.*?)( .*\d\d)\.(\d\d)\.(\d\d\d\d).* ([1-9]\d*),(\d\d)",zeile)
if m:
text1.append([m.group(5)+m.group(4),m.group(1)+m.group(2),m.group(6)+"."+m.group(7)])
continue
# text = re.sub(r"^(\d\d\.\d\d\.\d\d\d\d[ \-]+\d\d\.\d\d\.\d\d\d\d)(.*?)(\d\d\.\d\d\.\d\d\d\d)",
# "\\1$\\2",text,9999); # special AOK
# text = re.sub(r"^(\d\d\.\d\d\.\d\d\d\d) *\- *(\d\d\.\d\d\.\d\d\d\d)(.*?)","\\1-\\2",text,9999) # special Barmer
# text = re.sub(r"^(\d\d)[\.,](\d\d)[\.,](\d\d\d\d) "," \\1.\\2.\\3 ",text,9999)
#
# for zeile in text.split("\n"):
# zeile = re.sub(r"\s+"," ",zeile,9999)
# zeile = re.sub(r"(SZ|SA) .?(B)(S?)"," Beitrag\\3 ",zeile,9999) # special MobilOil
# zeile = re.sub(r"(SZ|SA) .?S"," Saeumniszuschlag ",zeile,9999) # special MobilOil
# zeile = re.sub(r"(Beitragszahlung|im +Beitrag)","",zeile,9999) # special Minijob, TKK
# m = re.search(r"bezugszeitraum +(.*?) *$",zeile.lower()) # special DAK
# if m:
# zeitraum = m.group(1)
# else:
# zeitraum = ""
# zeile = re.sub(r"^\s*Forderung \d\d\.\d\d\.\d\d","Forderung Beitrag "+zeitraum,zeile) # special DAK
# m = re.search(r"(Betriebspr|Beitra.?g|Saeumnis|Mahn|[A-Z].*?gebuehr|Umbuchung +Leistung +U1)(.*?)(0\d|10|11|12)([\/\.])($jahr|$jahr1)[\_ ]+(.*?)(\-?\d+)\,(\d\d)(-?)",
# zeile)
# print zeile
# if not m:
# continue
# text1.append([jahr + m.group(3) + ("%02u" % day[o9]),
# re.sub(r"--","",m.group(9) + "-" + m.group(7) + "." + m.group(8)),
# "555",
# "899",
# kk + ", " + m.group(1) + m.group(2) + m.group(3) + m.group(4) + m.group(5)])
#'''
for zeile in text1:
jjjjmm = zeile[0]
remark = zeile[1]
betrag = zeile[2]
o9 = kknr + jjjjmm + remark[0:10]
if o9 in day:
day[o9] = day[o9] + 1
else:
day[o9] = 26
dd = ("%02u" % day[o9])
if "Saeumn" in remark:
ktoa = "13-6011"
ktob = "10-1500-"+kknr+"-saeumn"
elif "Mahn" in remark:
ktoa = "13-6011"
ktob = "10-1500-"+kknr
elif "Beitrag" in remark or "Forderung" in remark:
ktob = "10-1500-"+kknr+"-meldung-"+dd
ktoa = "10-1510-"+kknr+"-beitrag"
buchung = [jjjjmm + dd,
re.sub(r"--","",zeile[2]),
ktoa,ktob,
kk + ", " + remark + ", Beitragsmonat " + jjjjmm[4:6] + "/" + jjjjmm[0:4]]
entry = jjjjmm + " " + buchung[1] + " " + ktoa + " " + buchung[4]
if not entry in entries:
buchungen.append(buchung)
entries[entry] = 1
return(buchungen)
#******************************************************