This commit is contained in:
2025-06-19 09:00:13 +00:00
parent 0c195cf385
commit 3622b821ef

View File

@@ -109,23 +109,47 @@ 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'):
# Hole eine Referenz zum Logger direkt in der Funktion """
Lädt das Mapping von Detail-Branche zu Branchen-Gruppe aus einer CSV-Datei.
Behandelt UTF-8-BOM-Kodierung und normalisiert die Spaltennamen und Keys.
"""
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
try: try:
# Verwenden Sie hier die korrigierte Spaltenüberschrift # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
df_mapping = pd.read_csv(file_path, sep=';', usecols=['Branchgoup', 'Branch']) # +++ KORREKTUR: encoding='utf-8-sig' verwenden, um BOM zu behandeln +++
df_mapping.rename(columns={'Branchgoup': 'Branch Group'}, inplace=True) # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Wir lesen jetzt alle Spalten ein und benennen sie dann um, was robuster ist
# als sich auf exakte Header-Namen in `usecols` zu verlassen.
df_mapping = pd.read_csv(file_path, sep=';', encoding='utf-8-sig')
# Spaltennamen bereinigen (entfernt BOM und andere unsichtbare Zeichen)
df_mapping.columns = [str(col).strip() for col in df_mapping.columns]
# Erwartete Spaltennamen (jetzt ohne BOM)
expected_cols = ['Branch Group', 'Branch']
# Prüfen, ob die erwarteten Spalten nach der Bereinigung vorhanden sind
if not all(col in df_mapping.columns for col in expected_cols):
logger.error(f"FEHLER: Die erwarteten Spalten {expected_cols} wurden in '{file_path}' nicht gefunden. "
f"Gefundene Spalten: {list(df_mapping.columns)}")
return {}
# Dictionary erstellen: { 'branch-detail-lowercase': 'Branch-Group' }
branch_map_dict = pd.Series(
df_mapping['Branch Group'].str.strip().values,
index=df_mapping['Branch'].str.strip().str.lower() # Keys werden kleingeschrieben und bereinigt
).to_dict()
branch_map_dict = pd.Series(df_mapping['Branch Group'].values, index=df_mapping['Branch'].str.strip()).to_dict()
logger.info(f"Branchen-Mapping aus '{file_path}' erfolgreich geladen ({len(branch_map_dict)} Einträge).") logger.info(f"Branchen-Mapping aus '{file_path}' erfolgreich geladen ({len(branch_map_dict)} Einträge).")
return branch_map_dict return branch_map_dict
except ValueError as e: # Fange den spezifischen ValueError
logger.error(f"FEHLER: Spaltennamen in '{file_path}' passen nicht zu den erwarteten Spalten. " except FileNotFoundError:
f"Stellen Sie sicher, dass die Header 'Branchgoup' und 'Branch' sind. Fehlerdetails: {e}") logger.error(f"FEHLER: Branchen-Mapping-Datei '{file_path}' nicht gefunden.")
return {} # Gib ein leeres Dictionary zurück, damit das Skript nicht abstürzt return {}
except Exception as e: except Exception as e:
logger.error(f"FEHLER beim Laden der Branchen-Mapping-Datei '{file_path}': {e}") logger.error(f"FEHLER beim Laden oder Verarbeiten der Branchen-Mapping-Datei '{file_path}': {e}")
logger.debug(traceback.format_exc())
return {} return {}
# In Config-Klasse oder global aufrufen: # In Config-Klasse oder global aufrufen: