diff --git a/app/main.py b/app/main.py index 58bdff8..1b9dff2 100644 --- a/app/main.py +++ b/app/main.py @@ -436,16 +436,38 @@ def _row_to_detail(row): symbol = cell.get("symbol", "○") matrix_dict[field] = {"rating": rating_normalized, "symbol": symbol} + # Fallback fuer ist_antragsteller / ist_regierung wenn LLM-Output sie + # nicht gesetzt hat: aus den Drucksachen-Metadaten ableiten. + # - antragsteller: aus row.fraktionen (das ist die Antragsteller-Liste) + # - regierung: aus BUNDESLAENDER[bl].regierungsfraktionen + bl_code = (row.get("bundesland") or "").strip().upper() + antragsteller_set = set(fraktionen or []) + try: + from .bundeslaender import BUNDESLAENDER + regierung_set = set( + BUNDESLAENDER.get(bl_code).regierungsfraktionen + if bl_code in BUNDESLAENDER else [] + ) + except Exception: + regierung_set = set() + # fraktions_scores: numerische Scores + Begründungen + leere Zitat-Listen (Fix 2+3) fraktions_scores = [] for wp in (wahlprogramm_scores or []): fraktion = wp.get("fraktion", "") wp_src = wp.get("wahlprogramm") or {} pp_src = wp.get("parteiprogramm") or {} + # LLM-Wert hat Vorrang, sonst Fallback aus Drucksachen-Meta. + ist_antrag = wp.get("istAntragsteller", wp.get("ist_antragsteller")) + if ist_antrag is None: + ist_antrag = fraktion in antragsteller_set + ist_reg = wp.get("istRegierung", wp.get("ist_regierung")) + if ist_reg is None: + ist_reg = fraktion in regierung_set fraktions_scores.append({ "fraktion": fraktion, - "ist_antragsteller": wp.get("istAntragsteller", wp.get("ist_antragsteller")), - "ist_regierung": wp.get("istRegierung", wp.get("ist_regierung")), + "ist_antragsteller": ist_antrag, + "ist_regierung": ist_reg, "wahlprogramm": { "score": wp_src.get("score", 0), "begruendung": wp_src.get("begruendung", wp_src.get("begründung", "")),