fix: ist_antragsteller/ist_regierung Fallback aus Drucksachen-Metadaten

LLM-Output setzt diese Flags nicht zuverlaessig (alle Werte heute None
in NRW/18/18246-Beispiel). _row_to_detail leitet sie jetzt im
Fallback aus den Drucksachen-Meta ab:
- ist_antragsteller := Fraktion in row.fraktionen (Antragsteller-Liste)
- ist_regierung := Fraktion in BUNDESLAENDER[bl].regierungsfraktionen

Damit erscheinen die 'Antragsteller:in' / 'Regierungsfraktion'-Pills
auch bei alten Assessments ohne explizite LLM-Flags. LLM-Wert (falls
gesetzt) hat weiterhin Vorrang.
This commit is contained in:
Dotty Dotter 2026-05-07 09:10:49 +02:00
parent 481a791934
commit 045461492f

View File

@ -436,16 +436,38 @@ def _row_to_detail(row):
symbol = cell.get("symbol", "") symbol = cell.get("symbol", "")
matrix_dict[field] = {"rating": rating_normalized, "symbol": 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: numerische Scores + Begründungen + leere Zitat-Listen (Fix 2+3)
fraktions_scores = [] fraktions_scores = []
for wp in (wahlprogramm_scores or []): for wp in (wahlprogramm_scores or []):
fraktion = wp.get("fraktion", "") fraktion = wp.get("fraktion", "")
wp_src = wp.get("wahlprogramm") or {} wp_src = wp.get("wahlprogramm") or {}
pp_src = wp.get("parteiprogramm") 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({ fraktions_scores.append({
"fraktion": fraktion, "fraktion": fraktion,
"ist_antragsteller": wp.get("istAntragsteller", wp.get("ist_antragsteller")), "ist_antragsteller": ist_antrag,
"ist_regierung": wp.get("istRegierung", wp.get("ist_regierung")), "ist_regierung": ist_reg,
"wahlprogramm": { "wahlprogramm": {
"score": wp_src.get("score", 0), "score": wp_src.get("score", 0),
"begruendung": wp_src.get("begruendung", wp_src.get("begründung", "")), "begruendung": wp_src.get("begruendung", wp_src.get("begründung", "")),