diff --git a/brancheneinstufung.py b/brancheneinstufung.py index d10d83c0..6414a8fe 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -14,7 +14,7 @@ import csv # ==================== KONFIGURATION ==================== class Config: - VERSION = "v1.2.5" # v1.2.5: Umsatzvergleich verbessert; 1 Sekunde Pause + zusätzliche Debug-Ausgabe + VERSION = "v1.2.6" # v1.2.6: Erweiterte String-Bereinigung und robustere Umwandlung von Umsatz/Mitarbeiterwerten LANG = "de" CREDENTIALS_FILE = "service_account.json" SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo" @@ -72,31 +72,30 @@ def normalize_company_name(name): return normalized.lower() def extract_numeric_value(raw_value, is_umsatz=False): + # Erweiterte Vorverarbeitung: Entferne gängige Zusätze und unerwünschte Zeichen. raw_value = raw_value.strip() if not raw_value: return "k.A." - # Entferne gängige Zusätze wie "ca.", "circa", "über" etc. - raw_value = re.sub(r'\b(ca\.?|circa|über)\b', '', raw_value, flags=re.IGNORECASE) - raw = raw_value.lower().replace("\xa0", " ") + # Entferne häufige Zusätze + raw_value = re.sub(r'\b(ca\.?|circa|etwa|über|rund)\b', '', raw_value, flags=re.IGNORECASE) + # Entferne unnötige Leerzeichen und Sonderzeichen + raw_value = raw_value.replace("\xa0", " ").strip() + raw = raw_value.lower() match = re.search(r'([\d.,]+)', raw, flags=re.UNICODE) if not match or not match.group(1).strip(): debug_print(f"Keine numerischen Zeichen gefunden im Rohtext: '{raw_value}'") return "k.A." num_str = match.group(1) - if ',' in num_str: + # Prüfe, ob Komma als Dezimaltrennzeichen genutzt wird (deutsches Format) + if ',' in num_str and num_str.count(',') == 1 and len(num_str.split(',')[1]) <= 2: num_str = num_str.replace('.', '').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: num_str = num_str.replace(' ', '').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 + 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 if is_umsatz: if "mrd" in raw or "milliarden" in raw: num *= 1000 @@ -403,12 +402,10 @@ class DataProcessor: if i >= self.sheet_handler.get_start_index(): self._process_single_row(i, row) def _process_single_row(self, row_num, row_data): - # Neues Schema: - # B: Firmenname, C: Website + # Neues Schema: + # B: Firmenname, C: Website, CRM-Umsatz in Spalte I (Index 8) # Wikipedia-Daten: Spalten K bis Q - # ChatGPT Umsatz: Spalte AF - # CRM Umsatz in Spalte I (Index 8) - # Umsatz-Abgleich: Spalte AG + # ChatGPT Umsatz in Spalte AF, Vergleich in Spalte AG, # Timestamp in Spalte AH, Version in Spalte AI. company_name = row_data[1] if len(row_data) > 1 else "" website = row_data[2] if len(row_data) > 2 else "" @@ -441,18 +438,18 @@ class DataProcessor: company_data.get('categories', 'k.A.') ] self.sheet_handler.sheet.update(values=[wiki_values], range_name=wiki_update_range) - # Pause einbauen, damit die Werte in Google Sheets aktualisiert werden. - time.sleep(1) - # ChatGPT API: Umsatzbewertung basierend auf Firmenname und Wikipedia-Umsatz + time.sleep(1) # 1 Sekunde Pause, um sicherzustellen, dass die Daten gespeichert wurden + # ChatGPT API: Umsatzbewertung wiki_umsatz = company_data.get('umsatz', 'k.A.') if wiki_umsatz != "k.A.": chatgpt_umsatz = evaluate_umsatz_chatgpt(company_name, wiki_umsatz) else: chatgpt_umsatz = "k.A." self.sheet_handler.sheet.update(values=[[chatgpt_umsatz]], range_name=chatgpt_range) - # Umsatz-Abgleich: CRM-Umsatz aus Spalte I und Wikipedia-Umsatz + # Umsatz-Abgleich: CRM-Umsatz (Spalte I) vs. Wikipedia-Umsatz crm_umsatz = row_data[8] if len(row_data) > 8 else "k.A." - abgleich_result = compare_umsatz_values(crm_umsatz, company_data.get('umsatz', 'k.A.')) + debug_print(f"Bereinigte Vergleichswerte vor Umwandlung: CRM Umsatz: '{crm_umsatz}', Wiki Umsatz: '{wiki_umsatz}'") + abgleich_result = compare_umsatz_values(crm_umsatz, wiki_umsatz) self.sheet_handler.sheet.update(values=[[abgleich_result]], range_name=abgleich_range) current_dt = datetime.now().strftime("%Y-%m-%d %H:%M:%S") self.sheet_handler.sheet.update(values=[[current_dt]], range_name=dt_range)