Rollback auf 1.2.4

This commit is contained in:
2025-04-02 06:31:37 +00:00
parent c5bc203fab
commit 05d7a94097

View File

@@ -14,7 +14,7 @@ import csv
# ==================== KONFIGURATION ==================== # ==================== KONFIGURATION ====================
class Config: class Config:
VERSION = "v1.2.8" # v1.2.8: Verbesserte numerische Extraktion für Umsatz und Mitarbeiter; robustere Vergleichslogik VERSION = "v1.2.5" # v1.2.5: Umsatzvergleich verbessert; 1 Sekunde Pause + zusätzliche Debug-Ausgabe
LANG = "de" LANG = "de"
CREDENTIALS_FILE = "service_account.json" CREDENTIALS_FILE = "service_account.json"
SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo" SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo"
@@ -73,34 +73,34 @@ def normalize_company_name(name):
def extract_numeric_value(raw_value, is_umsatz=False): def extract_numeric_value(raw_value, is_umsatz=False):
raw_value = raw_value.strip() raw_value = raw_value.strip()
if not raw_value or raw_value.lower() in ["k.a.", "n.a."]: if not raw_value:
return "k.A." return "k.A."
# Entferne Texte wie "ca.", "circa", etc. # Entferne gängige Zusätze wie "ca.", "circa", "über" etc.
raw_value = re.sub(r'\b(ca\.?|circa|etwa|über|rund)\b', '', raw_value, flags=re.IGNORECASE) raw_value = re.sub(r'\b(ca\.?|circa|über)\b', '', raw_value, flags=re.IGNORECASE)
raw_value = raw_value.replace("\xa0", " ").strip() raw = raw_value.lower().replace("\xa0", " ")
# Entferne Textteile in Klammern match = re.search(r'([\d.,]+)', raw, flags=re.UNICODE)
raw_value = re.sub(r'\(.*?\)', '', raw_value).strip() if not match or not match.group(1).strip():
# Extrahiere den numerischen Teil
match = re.search(r'([\d.,]+)', raw_value)
if not match:
debug_print(f"Keine numerischen Zeichen gefunden im Rohtext: '{raw_value}'") debug_print(f"Keine numerischen Zeichen gefunden im Rohtext: '{raw_value}'")
return "k.A." return "k.A."
num_str = match.group(1) num_str = match.group(1)
# Wenn ein einzelnes Komma als Dezimaltrenner und kein Punkt vorhanden ist if ',' in num_str:
if ',' in num_str and '.' not in num_str and len(num_str.split(',')[1]) <= 2: num_str = num_str.replace('.', '').replace(',', '.')
num_str = num_str.replace(',', '.') try:
num = float(num_str)
except Exception as e:
debug_print(f"Fehler bei der Umwandlung von '{num_str}' (Rohtext: '{raw_value}'): {e}")
return raw_value
else: else:
num_str = num_str.replace(',', '') num_str = num_str.replace(' ', '').replace('.', '')
try: try:
num = float(num_str) num = float(num_str)
except Exception as e: except Exception as e:
debug_print(f"Fehler bei der Umwandlung von '{num_str}' (Rohtext: '{raw_value}'): {e}") debug_print(f"Fehler bei der Umwandlung von '{num_str}' (Rohtext: '{raw_value}'): {e}")
return raw_value return raw_value
if is_umsatz: if is_umsatz:
raw_lower = raw_value.lower() if "mrd" in raw or "milliarden" in raw:
if "mrd" in raw_lower or "milliarden" in raw_lower:
num *= 1000 num *= 1000
elif "mio" in raw_lower or "millionen" in raw_lower: elif "mio" in raw or "millionen" in raw:
pass pass
else: else:
num /= 1e6 num /= 1e6
@@ -172,18 +172,41 @@ class GoogleSheetHandler:
# ==================== ALIGNMENT DEMO (Modus 3) ==================== # ==================== ALIGNMENT DEMO (Modus 3) ====================
def alignment_demo(sheet): def alignment_demo(sheet):
new_headers = [ new_headers = [
"Spalte A (ReEval Flag)", "Spalte B (Firmenname)", "Spalte C (Website)", "Spalte D (Ort)", "Spalte E (Beschreibung)", "Spalte A (ReEval Flag)",
"Spalte F (Aktuelle Branche)", "Spalte G (Beschreibung Branche extern)", "Spalte H (Anzahl Techniker CRM)", "Spalte B (Firmenname)",
"Spalte I (Umsatz CRM)", "Spalte J (Anzahl Mitarbeiter CRM)", "Spalte K (Vorschlag Wiki URL)", "Spalte C (Website)",
"Spalte L (Wikipedia URL)", "Spalte M (Wikipedia Absatz)", "Spalte N (Wikipedia Branche)", "Spalte D (Ort)",
"Spalte O (Wikipedia Umsatz)", "Spalte P (Wikipedia Mitarbeiter)", "Spalte Q (Wikipedia Kategorien)", "Spalte E (Beschreibung)",
"Spalte R (Konsistenzprüfung)", "Spalte S (Begründung bei Inkonsistenz)", "Spalte T (Vorschlag Wiki Artikel ChatGPT)", "Spalte F (Aktuelle Branche)",
"Spalte U (Begründung bei Abweichung)", "Spalte V (Vorschlag neue Branche)", "Spalte W (Konsistenzprüfung Branche)", "Spalte G (Beschreibung Branche extern)",
"Spalte X (Begründung Abweichung Branche)", "Spalte Y (FSM Relevanz Ja / Nein)", "Spalte Z (Begründung für FSM Relevanz)", "Spalte H (Anzahl Techniker CRM)",
"Spalte AA (Schätzung Anzahl Mitarbeiter)", "Spalte AB (Konsistenzprüfung Mitarbeiterzahl)", "Spalte I (Umsatz CRM)",
"Spalte AC (Begründung für Abweichung Mitarbeiterzahl)", "Spalte AD (Einschätzung Anzahl Servicetechniker)", "Spalte J (Anzahl Mitarbeiter CRM)",
"Spalte AE (Begründung bei Abweichung Anzahl Servicetechniker)", "Spalte AF (Schätzung Umsatz ChatGPT)", "Spalte K (Vorschlag Wiki URL)",
"Spalte AG (Begründung für Abweichung Umsatz)", "Spalte AH (Timestamp letzte Prüfung)", "Spalte AI (Version)" "Spalte L (Wikipedia URL)",
"Spalte M (Wikipedia Absatz)",
"Spalte N (Wikipedia Branche)",
"Spalte O (Wikipedia Umsatz)",
"Spalte P (Wikipedia Mitarbeiter)",
"Spalte Q (Wikipedia Kategorien)",
"Spalte R (Konsistenzprüfung)",
"Spalte S (Begründung bei Inkonsistenz)",
"Spalte T (Vorschlag Wiki Artikel ChatGPT)",
"Spalte U (Begründung bei Abweichung)",
"Spalte V (Vorschlag neue Branche)",
"Spalte W (Konsistenzprüfung Branche)",
"Spalte X (Begründung Abweichung Branche)",
"Spalte Y (FSM Relevanz Ja / Nein)",
"Spalte Z (Begründung für FSM Relevanz)",
"Spalte AA (Schätzung Anzahl Mitarbeiter)",
"Spalte AB (Konsistenzprüfung Mitarbeiterzahl)",
"Spalte AC (Begründung für Abweichung Mitarbeiterzahl)",
"Spalte AD (Einschätzung Anzahl Servicetechniker)",
"Spalte AE (Begründung bei Abweichung Anzahl Servicetechniker)",
"Spalte AF (Schätzung Umsatz ChatGPT)",
"Spalte AG (Begründung für Abweichung Umsatz)",
"Spalte AH (Timestamp letzte Prüfung)",
"Spalte AI (Version)"
] ]
header_range = "A11200:AI11200" header_range = "A11200:AI11200"
sheet.update(values=[new_headers], range_name=header_range) sheet.update(values=[new_headers], range_name=header_range)
@@ -380,6 +403,13 @@ class DataProcessor:
if i >= self.sheet_handler.get_start_index(): if i >= self.sheet_handler.get_start_index():
self._process_single_row(i, row) self._process_single_row(i, row)
def _process_single_row(self, row_num, row_data): def _process_single_row(self, row_num, row_data):
# Neues Schema:
# B: Firmenname, C: Website
# Wikipedia-Daten: Spalten K bis Q
# ChatGPT Umsatz: Spalte AF
# CRM Umsatz in Spalte I (Index 8)
# Umsatz-Abgleich: Spalte AG
# Timestamp in Spalte AH, Version in Spalte AI.
company_name = row_data[1] if len(row_data) > 1 else "" company_name = row_data[1] if len(row_data) > 1 else ""
website = row_data[2] if len(row_data) > 2 else "" website = row_data[2] if len(row_data) > 2 else ""
wiki_update_range = f"K{row_num}:Q{row_num}" wiki_update_range = f"K{row_num}:Q{row_num}"
@@ -411,16 +441,18 @@ class DataProcessor:
company_data.get('categories', 'k.A.') company_data.get('categories', 'k.A.')
] ]
self.sheet_handler.sheet.update(values=[wiki_values], range_name=wiki_update_range) self.sheet_handler.sheet.update(values=[wiki_values], range_name=wiki_update_range)
time.sleep(1) # Sicherstellen, dass Werte synchronisiert werden # Pause einbauen, damit die Werte in Google Sheets aktualisiert werden.
time.sleep(1)
# ChatGPT API: Umsatzbewertung basierend auf Firmenname und Wikipedia-Umsatz
wiki_umsatz = company_data.get('umsatz', 'k.A.') wiki_umsatz = company_data.get('umsatz', 'k.A.')
if wiki_umsatz != "k.A.": if wiki_umsatz != "k.A.":
chatgpt_umsatz = evaluate_umsatz_chatgpt(company_name, wiki_umsatz) chatgpt_umsatz = evaluate_umsatz_chatgpt(company_name, wiki_umsatz)
else: else:
chatgpt_umsatz = "k.A." chatgpt_umsatz = "k.A."
self.sheet_handler.sheet.update(values=[[chatgpt_umsatz]], range_name=chatgpt_range) self.sheet_handler.sheet.update(values=[[chatgpt_umsatz]], range_name=chatgpt_range)
# Umsatz-Abgleich: CRM-Umsatz aus Spalte I und Wikipedia-Umsatz
crm_umsatz = row_data[8] if len(row_data) > 8 else "k.A." crm_umsatz = row_data[8] if len(row_data) > 8 else "k.A."
debug_print(f"Bereinigte Vergleichswerte vor Umwandlung: CRM Umsatz: '{crm_umsatz}', Wiki Umsatz: '{wiki_umsatz}'") abgleich_result = compare_umsatz_values(crm_umsatz, company_data.get('umsatz', 'k.A.'))
abgleich_result = compare_umsatz_values(crm_umsatz, wiki_umsatz)
self.sheet_handler.sheet.update(values=[[abgleich_result]], range_name=abgleich_range) self.sheet_handler.sheet.update(values=[[abgleich_result]], range_name=abgleich_range)
current_dt = datetime.now().strftime("%Y-%m-%d %H:%M:%S") current_dt = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
self.sheet_handler.sheet.update(values=[[current_dt]], range_name=dt_range) self.sheet_handler.sheet.update(values=[[current_dt]], range_name=dt_range)