From 634905018b09d2bcd76ddfa2d9cfc783677f45f6 Mon Sep 17 00:00:00 2001 From: Floke Date: Tue, 1 Apr 2025 17:36:38 +0000 Subject: [PATCH] v1.2.4: Added ChatGPT API Umsatz evaluation and CRM vs. Wikipedia Umsatz comparison in Spalte AG MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ChatGPT API Integration: Die Funktion evaluate_umsatz_chatgpt liest den API-Key aus api_key.txt und fragt ChatGPT zur Schätzung des Umsatzes in Mio. € basierend auf dem Firmennamen und Wikipedia-Umsatz. Das Ergebnis wird in Spalte AF ("Schätzung Umsatz ChatGPT") geschrieben. Umsatz-Vergleich: Die Funktion compare_umsatz_values vergleicht den CRM-Umsatz (Spalte I) mit dem Wikipedia-Umsatz (Spalte O). Das Vergleichsergebnis ("OK" oder eine Abweichungsangabe) wird in Spalte AG ("Begründung für Abweichung Umsatz") eingetragen. Spaltenzuordnung & Alignment: Das neue Spaltenschema wird weiterhin über den Alignment-Demo-Modus (Modus 3) getestet. --- brancheneinstufung.py | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/brancheneinstufung.py b/brancheneinstufung.py index 17a2e975..5a86d555 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -14,7 +14,7 @@ import csv # ==================== KONFIGURATION ==================== class Config: - VERSION = "v1.2.4" # v1.2.4: Integriert ChatGPT API zur Umsatzbewertung in Spalte AF + VERSION = "v1.2.4" # v1.2.4: Integriert ChatGPT API zur Umsatzbewertung, neuer Vergleich CRM vs. Wikipedia Umsatz LANG = "de" CREDENTIALS_FILE = "service_account.json" SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo" @@ -106,12 +106,22 @@ def extract_numeric_value(raw_value, is_umsatz=False): else: return str(int(round(num))) +def compare_umsatz_values(crm, wiki): + try: + crm_val = float(crm) + wiki_val = float(wiki) + except Exception: + return "Daten unvollständig" + if crm_val == 0: + return "CRM Umsatz 0" + diff = abs(crm_val - wiki_val) / crm_val + if diff < 0.1: + return "OK" + else: + diff_mio = abs(crm_val - wiki_val) + return f"Abweichung: {int(round(diff_mio))} Mio €" + def evaluate_umsatz_chatgpt(company_name, wiki_umsatz): - """ - Sendet einen strukturierten Prompt an die ChatGPT API, um den Umsatz (in Mio. €) zu evaluieren. - Liest den API-Token aus der Datei "api_key.txt". - Erwartet als Antwort eine Zahl (Mio. €). - """ try: with open("api_key.txt", "r") as f: api_key = f.read().strip() @@ -388,17 +398,18 @@ 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): - # Im neuen Schema: Firmenname in Spalte B (Index 1), Website in Spalte C (Index 2). - # Wikipedia-Daten werden in Spalten K bis Q geschrieben: - # K: Vorschlag Wiki URL (Platzhalter "k.A.") - # L: Wikipedia URL, M: Wikipedia Absatz, N: Wikipedia Branche, - # O: Wikipedia Umsatz, P: Wikipedia Mitarbeiter, Q: Wikipedia Kategorien. - # ChatGPT Umsatz wird in Spalte AF geschrieben. + # Neues Schema: + # B: Firmenname, C: Website + # Wikipedia-Daten: Spalten K bis Q + # ChatGPT Umsatz: Spalte AF + # CRM Umsatz (bestehend) in Spalte I (Index 8) + # Umsatz-Abgleich: Ergebnis 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 "" wiki_update_range = f"K{row_num}:Q{row_num}" chatgpt_range = f"AF{row_num}" + abgleich_range = f"AG{row_num}" dt_range = f"AH{row_num}" ver_range = f"AI{row_num}" print(f"\n[{datetime.now().strftime('%H:%M:%S')}] Verarbeite Zeile {row_num}: {company_name}") @@ -432,13 +443,17 @@ class DataProcessor: else: chatgpt_umsatz = "k.A." self.sheet_handler.sheet.update(values=[[chatgpt_umsatz]], range_name=chatgpt_range) + # Umsatz-Abgleich zwischen CRM-Umsatz (Spalte I) und Wikipedia-Umsatz (aus company_data) + 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.')) + 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) self.sheet_handler.sheet.update(values=[[Config.VERSION]], range_name=ver_range) print(f"✅ Aktualisiert: URL: {company_data.get('url', 'k.A.')}, Absatz: {company_data.get('first_paragraph', 'k.A.')[:30]}..., " f"Branche: {company_data.get('branche', 'k.A.')}, Wikipedia Umsatz: {company_data.get('umsatz', 'k.A.')}, " f"Mitarbeiter: {company_data.get('mitarbeiter', 'k.A.')}, Kategorien: {company_data.get('categories', 'k.A.')}, " - f"ChatGPT Umsatz: {chatgpt_umsatz}") + f"ChatGPT Umsatz: {chatgpt_umsatz}, Umsatz-Abgleich: {abgleich_result}") if MODE == "2": print("----- Vollständiger Infobox-Inhalt -----") print(company_data.get("full_infobox", "k.A."))