diff --git a/src/agents/orchestrator.py b/src/agents/orchestrator.py index 04a4eed..a1c3b6b 100644 --- a/src/agents/orchestrator.py +++ b/src/agents/orchestrator.py @@ -1152,15 +1152,28 @@ class AgentOrchestrator: defined_nrs.add(nr) # Keep alphanumeric like '389a' missing_nrs = sorted(referenced_nrs - defined_nrs) if missing_nrs: - logger.warning( - "Incident %d: %d Quellennummern im Summary ohne Eintrag in sources: %s", - incident_id, len(missing_nrs), missing_nrs[:20] - ) - # Platzhalter einfuegen damit die Nummern nicht unverlinkt bleiben + truly_missing = [] for nr in missing_nrs: - sources.append({"nr": nr, "name": "Quelle", "url": ""}) - logger.info("Platzhalter fuer fehlende Quelle [%d] eingefuegt", nr) - sources.sort(key=lambda s: int(s.get("nr", 0)) if isinstance(s.get("nr"), int) or (isinstance(s.get("nr"), str) and str(s.get("nr", "")).isdigit()) else 9999) + # Buchstaben-Suffix (z.B. "22b") -> Basisnummer (22) aufloesen + if isinstance(nr, str) and _re.match(r"^\d+[a-z]$", nr): + base_nr = int(nr[:-1]) + if base_nr in defined_nrs: + new_summary = new_summary.replace(f"[{nr}]", f"[{base_nr}]") + logger.info( + "Incident %d: Suffix-Ref [%s] auf Basisquelle [%d] aufgeloest", + incident_id, nr, base_nr + ) + continue + truly_missing.append(nr) + if truly_missing: + logger.warning( + "Incident %d: %d Quellennummern im Summary ohne Eintrag in sources: %s", + incident_id, len(truly_missing), truly_missing[:20] + ) + for nr in truly_missing: + sources.append({"nr": nr, "name": "Quelle", "url": ""}) + logger.info("Platzhalter fuer fehlende Quelle [%s] eingefuegt", nr) + sources.sort(key=lambda s: int(s.get("nr", 0)) if isinstance(s.get("nr"), int) or (isinstance(s.get("nr"), str) and str(s.get("nr", "")).isdigit()) else 9999) # Sicherstellen dass alle nr-Werte Integer sind (Claude liefert manchmal Strings) if sources: