This commit is contained in:
2025-06-19 09:44:33 +00:00
parent d190a8b35e
commit 3953eaffe1

View File

@@ -109,34 +109,25 @@ PATTERNS_FILE_TXT = "technician_patterns.txt" # Alt (Optional beibehalten)
PATTERNS_FILE_JSON = "technician_patterns.json" # Neu (Empfohlen) PATTERNS_FILE_JSON = "technician_patterns.json" # Neu (Empfohlen)
def load_branch_mapping(file_path='Branchen.csv'): def load_branch_mapping(file_path='Branchen.csv'):
logger = logging.getLogger(__name__) # Logger holen, um sicherzugehen logger = logging.getLogger(__name__)
# +++ Zusätzlicher Debugging-Schritt: Pfad und Existenz prüfen +++
absolute_path = os.path.abspath(file_path) absolute_path = os.path.abspath(file_path)
logger.info(f"Versuche Branchen-Mapping zu laden von: '{absolute_path}'") logger.info(f"Versuche Branchen-Mapping zu laden von: '{absolute_path}'")
if not os.path.exists(file_path): if not os.path.exists(file_path):
logger.error(f"DATEI NICHT GEFUNDEN an Pfad: '{absolute_path}'") logger.error(f"DATEI NICHT GEFUNDEN an Pfad: '{absolute_path}'")
return {} # Gib leeres Dict zurück, wenn Datei nicht existiert return {}
try: try:
df_mapping = pd.read_csv(file_path, sep=';', encoding='utf-8-sig') df_mapping = pd.read_csv(file_path, sep=';', encoding='utf-8-sig')
logger.info(f"Datei '{file_path}' erfolgreich mit pandas gelesen. {len(df_mapping)} Zeilen gefunden.") logger.info(f"Datei '{file_path}' erfolgreich mit pandas gelesen. {len(df_mapping)} Zeilen gefunden.")
logger.debug(f"Gelesene Spaltennamen: {list(df_mapping.columns)}")
# Spaltennamen bereinigen
df_mapping.columns = [str(col).strip() for col in df_mapping.columns] df_mapping.columns = [str(col).strip() for col in df_mapping.columns]
logger.debug(f"Bereinigte Spaltennamen: {list(df_mapping.columns)}")
expected_cols = ['Branch Group', 'Branch'] expected_cols = ['Branch Group', 'Branch']
if not all(col in df_mapping.columns for col in expected_cols): if not all(col in df_mapping.columns for col in expected_cols):
logger.error(f"FEHLER: Erwartete Spalten {expected_cols} in '{file_path}' nicht gefunden. " logger.error(f"FEHLER: Erwartete Spalten {expected_cols} in '{file_path}' nicht gefunden. Gefundene Spalten: {list(df_mapping.columns)}")
f"Gefundene Spalten nach Bereinigung: {list(df_mapping.columns)}")
return {} return {}
# Normalisierte Keys erstellen
df_mapping['normalized_keys'] = df_mapping['Branch'].apply(normalize_for_mapping) df_mapping['normalized_keys'] = df_mapping['Branch'].apply(normalize_for_mapping)
# Duplikate in den normalisierten Keys prüfen
if df_mapping['normalized_keys'].duplicated().any(): if df_mapping['normalized_keys'].duplicated().any():
duplicates = df_mapping[df_mapping['normalized_keys'].duplicated()]['normalized_keys'] duplicates = df_mapping[df_mapping['normalized_keys'].duplicated()]['normalized_keys']
logger.warning(f"WARNUNG: Duplikate in normalisierten Branchen-Keys gefunden! Dies kann zu inkonsistentem Mapping führen. Duplikate: {list(duplicates)}") logger.warning(f"WARNUNG: Duplikate in normalisierten Branchen-Keys gefunden! Dies kann zu inkonsistentem Mapping führen. Duplikate: {list(duplicates)}")
@@ -151,7 +142,6 @@ def load_branch_mapping(file_path='Branchen.csv'):
except Exception as e: except Exception as e:
logger.error(f"FATALER FEHLER beim Laden oder Verarbeiten der Branchen-Mapping-Datei '{file_path}':") logger.error(f"FATALER FEHLER beim Laden oder Verarbeiten der Branchen-Mapping-Datei '{file_path}':")
# Gib den vollständigen Traceback in das Log aus, um den genauen Fehlerort zu sehen
logger.error(traceback.format_exc()) logger.error(traceback.format_exc())
return {} return {}
@@ -517,6 +507,20 @@ def token_count(text, model=None):
# --- Logging Helpers --- # --- Logging Helpers ---
LOG_FILE = None # Initialisierung LOG_FILE = None # Initialisierung
def normalize_for_mapping(text):
"""
Normalisiert einen String aggressiv für Mapping-Zwecke.
Entfernt Leerzeichen, macht alles klein, ersetzt gängige Sonderzeichen.
"""
if not isinstance(text, str):
return ""
text = text.lower()
text = text.strip()
# Ersetze alle Nicht-Alphanumerischen Zeichen durch nichts
text = re.sub(r'[^a-z0-9]', '', text)
return text
def create_log_filename(mode): def create_log_filename(mode):
"""Erstellt einen zeitgestempelten Logdateinamen im LOG_DIR.""" """Erstellt einen zeitgestempelten Logdateinamen im LOG_DIR."""
logger = logging.getLogger(__name__) # Logger-Instanz holen logger = logging.getLogger(__name__) # Logger-Instanz holen