rework skript, final version, added readme.md
This commit is contained in:
@@ -35,12 +35,10 @@ class Company:
|
||||
self.cleaned_data["name"] = data["Unternehmensname"]
|
||||
for year in YEARS:
|
||||
self.clean_complex(year, "vor")
|
||||
self.clean_complex(year, "nach")
|
||||
self.clean_simple(year, "Eigenkapital")
|
||||
self.clean_simple(year, "Steuern")
|
||||
|
||||
|
||||
|
||||
def clean_simple(self, year: int, type: str) -> None:
|
||||
"""Clean simple data. This means tax and capital."""
|
||||
try:
|
||||
@@ -52,43 +50,35 @@ class Company:
|
||||
"""Get suffix for the simple cleaning process"""
|
||||
return "ek" if type == "Eigenkapital" else "st"
|
||||
|
||||
|
||||
def clean_complex(self, year: int, state: str) -> None:
|
||||
"""Clean the complex data. This means earnings before/after tax."""
|
||||
try:
|
||||
if f"Gewinn/(Verlust) {state} Steuern EUR {year}" in self.data.keys() and self.data[f"Gewinn/(Verlust) {state} Steuern EUR {year}"] != '' and not self.cleaned_data.get(f"gn{year}") and self.cut_negative(state, int(self.data[f"Gewinn/(Verlust) {state} Steuern EUR {year}"])):
|
||||
if f"Gewinn/(Verlust) {state} Steuern EUR {year}" in self.data.keys() and self.data[f"Gewinn/(Verlust) {state} Steuern EUR {year}"] != '' and not self.cleaned_data.get(f"gn{year}"):
|
||||
self.cleaned_data[f"g{self.get_suffix(state)}{year}"] = int(self.data[f"Gewinn/(Verlust) {state} Steuern EUR {year}"])
|
||||
elif f"Gewinn/Verlust {state} Steuern EUR {year}" in self.data.keys() and self.data[f"Gewinn/Verlust {state} Steuern EUR {year}"] != '' and not self.cleaned_data.get(f"gn{year}") and self.cut_negative(state, int(self.data[f"Gewinn/(Verlust) {state} Steuern EUR {year}"])):
|
||||
elif f"Gewinn/Verlust {state} Steuern EUR {year}" in self.data.keys() and self.data[f"Gewinn/Verlust {state} Steuern EUR {year}"] != '' and not self.cleaned_data.get(f"gn{year}"):
|
||||
self.cleaned_data[f"g{self.get_suffix(state)}{year}"] = int(self.data[f"Gewinn/Verlust {state} Steuern EUR {year}"])
|
||||
else:
|
||||
self.report.log.debug(f"{self.cleaned_data['name']}:g{self.get_suffix(state)}{year} empty value")
|
||||
except ValueError:
|
||||
self.report.log.debug(f"{self.cleaned_data['name']}: g{self.get_suffix(state)}{year} ValueError")
|
||||
|
||||
def cut_negative(self, state: str, gv: int) -> bool:
|
||||
if state == "vor":
|
||||
return False if gv < 0 else True
|
||||
elif state == "nach":
|
||||
return True
|
||||
else:
|
||||
raise Exception("IMPOSSIBLE STATE CN")
|
||||
|
||||
def get_suffix(self, state: str) -> str:
|
||||
"""Get suffix for the complex cleaning process."""
|
||||
return "n" if state == "nach" else "v"
|
||||
|
||||
|
||||
def calculate_all_tax(self) -> None:
|
||||
"""Calculate tax for all relevant years."""
|
||||
for year in YEARS:
|
||||
self.calculate_tax(year)
|
||||
self.calculate_values(year)
|
||||
|
||||
def calculate_tax(self, year: int) -> None:
|
||||
"""Calculate simple tax from provided values."""
|
||||
def calculate_values(self, year: int) -> None:
|
||||
"""Calculate missing values from provided values. GV - ST = GN"""
|
||||
if not self.cleaned_data.get(f"st{year}") and self.cleaned_data.get(f"gv{year}") != None and self.cleaned_data.get(f"gn{year}") != None:
|
||||
self.cleaned_data[f"st{year}"] = self.cleaned_data.get(f"gv{year}") - self.cleaned_data.get(f"gn{year}")
|
||||
|
||||
|
||||
if not self.cleaned_data.get(f"gn{year}") and self.cleaned_data.get(f"gv{year}") != None and self.cleaned_data.get(f"st{year}") != None:
|
||||
self.cleaned_data[f"gn{year}"] = self.cleaned_data.get(f"gv{year}") - self.cleaned_data.get(f"st{year}")
|
||||
if not self.cleaned_data.get(f"gv{year}") and self.cleaned_data.get(f"gn{year}") != None and self.cleaned_data.get(f"st{year}") != None:
|
||||
self.cleaned_data[f"gv{year}"] = self.cleaned_data.get(f"gn{year}") + self.cleaned_data.get(f"st{year}")
|
||||
|
||||
def reporter(self) -> None:
|
||||
"""Simple class to report valid and invalid data to the main import class."""
|
||||
@@ -97,19 +87,25 @@ class Company:
|
||||
self.report.valid_data += 1
|
||||
else:
|
||||
self.report.invalid_data +=1
|
||||
|
||||
|
||||
def calculate_data(self) -> None:
|
||||
"""Calculate data relevant to the project."""
|
||||
for year in YEARS:
|
||||
if self.cleaned_data.get(f"st{year}") and self.cleaned_data.get(f"gv{year}") and self.cleaned_data.get(f"gn{year}") and self.cleaned_data.get(f"ek{year}"):
|
||||
self.cleaned_data[f"nomtax{year}"] = self.cleaned_data.get(f"st{year}") / self.cleaned_data.get(f"gv{year}")
|
||||
self.cleaned_data[f"realtax{year}"] = (self.cleaned_data.get(f"st{year}") + (INFLATION_RATES[year] * self.cleaned_data.get(f"gv{year}"))) / self.cleaned_data.get(f"gv{year}")
|
||||
self.cleaned_data[f"realefftax{year}"] = (self.cleaned_data.get(f"st{year}") + (INFLATION_RATES[year] * self.cleaned_data.get(f"gv{year}")) + (INFLATION_RATES[year] * self.cleaned_data.get(f"ek{year}"))) / self.cleaned_data.get(f"gv{year}")
|
||||
|
||||
roenom = self.cleaned_data.get(f"gv{year}") / self.cleaned_data.get(f"ek{year}")
|
||||
if roenom < 0 or roenom > 0.5:
|
||||
continue # Skip outlier
|
||||
self.cleaned_data[f"roenom{year}"] = roenom
|
||||
self.cleaned_data[f"roereal{year}"] = self.cleaned_data.get(f"roenom{year}") - INFLATION_RATES[year]
|
||||
self.cleaned_data[f"inflationloss{year}"] = self.cleaned_data.get(f"ek{year}") * INFLATION_RATES[year]
|
||||
self.cleaned_data[f"roetaxed{year}"] = (self.cleaned_data.get(f"gv{year}") - self.cleaned_data.get(f"st{year}") - self.cleaned_data[f"inflationloss{year}"]) / self.cleaned_data.get(f"ek{year}")
|
||||
self.cleaned_data[f"realefftax{year}"] = (self.cleaned_data.get(f"roereal{year}") - self.cleaned_data.get(f"roetaxed{year}")) / self.cleaned_data.get(f"roereal{year}")
|
||||
self.cleaned_data[f"totalefftax{year}"] = (self.cleaned_data.get(f"roenom{year}") - self.cleaned_data.get(f"roetaxed{year}")) / self.cleaned_data.get(f"roereal{year}")
|
||||
|
||||
def write(self) -> None:
|
||||
"""Write the current dataset to CSV"""
|
||||
#if self.cleaned_data.get("realefftax2014"):
|
||||
# raise Exception(self.cleaned_data)
|
||||
self.writer.writerow(self.cleaned_data)
|
||||
|
||||
|
||||
@@ -198,9 +194,12 @@ class dataimport:
|
||||
fieldnames.append(f"gn{year}")
|
||||
fieldnames.append(f"st{year}")
|
||||
fieldnames.append(f"ek{year}")
|
||||
fieldnames.append(f"nomtax{year}")
|
||||
fieldnames.append(f"realtax{year}")
|
||||
fieldnames.append(f"roenom{year}")
|
||||
fieldnames.append(f"roereal{year}")
|
||||
fieldnames.append(f"inflationloss{year}")
|
||||
fieldnames.append(f"roetaxed{year}")
|
||||
fieldnames.append(f"realefftax{year}")
|
||||
fieldnames.append(f"totalefftax{year}")
|
||||
return fieldnames
|
||||
|
||||
def comp_import(self, data: dict, writer) -> None:
|
||||
@@ -212,7 +211,6 @@ class dataimport:
|
||||
current.write()
|
||||
|
||||
|
||||
|
||||
parser = argparse.ArgumentParser(description='Import data from ORBIS', epilog='Copyright Denkena Consulting')
|
||||
parser.add_argument('filename', nargs="+")
|
||||
parser.add_argument('-l', '--logfile', default="log_importer", nargs="?")
|
||||
|
||||
Reference in New Issue
Block a user