gwoe-antragspruefer/app/wahlprogramm_check.py
Dotty Dotter 2c0e94d29d feat(#106,#135,#128): Monitoring + abgeordnetenwatch + Wahlprogramm-Check
- monitoring.py: taeglicher Scan-Adapter aller aktiven BL, kein Auto-Fetch (#135)
- monitoring_digest.html: Mail-Template mit '0-Kontext'-Hinweis
- abgeordnetenwatch.py + sync_*.py: Phase 1 Roll-Call-Voting (#106)
  - 17 Parlamente (16 BL + BT)
  - 9 BL-spezifische Drucksachen-Patterns + Date-Title-Fallback
  - 28977 Votes fuer BUND in DB
- wahlprogramm_check.py: fehlende Programme erkennen (#128)
- NI-Skip-Liste, NRW Empty-Query-Fallback

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 20:55:16 +02:00

38 lines
1.3 KiB
Python

"""Erkennung fehlender Wahlprogramme (#128).
Prüft für ein gegebenes Bundesland, welche der im Landtag vertretenen
Fraktionen in der WAHLPROGRAMME-Registry nicht hinterlegt sind.
Wird nach dem LLM-Call in analyze_antrag() aufgerufen, damit das
Assessment-Ergebnis die Lücken explizit ausweist.
"""
from .bundeslaender import BUNDESLAENDER
from .wahlprogramme import WAHLPROGRAMME
def check_missing_programmes(bundesland: str, fraktionen: list[str]) -> list[str]:
"""Gibt eine Liste der Fraktions-Namen zurück, für die kein Wahlprogramm
im gegebenen Bundesland hinterlegt ist.
Args:
bundesland: Bundesland-Code (z.B. "NRW", "BY").
fraktionen: Liste der Fraktionen, die geprüft werden sollen
(typischerweise aus BUNDESLAENDER[bl].landtagsfraktionen).
Returns:
Geordnete Liste der Fraktions-Namen ohne hinterlegtes Wahlprogramm.
Leere Liste, wenn für alle Fraktionen Programme vorliegen oder
fraktionen leer ist.
Raises:
ValueError: Wenn das Bundesland nicht in BUNDESLAENDER bekannt ist.
"""
if bundesland not in BUNDESLAENDER:
raise ValueError(f"Unbekanntes Bundesland: {bundesland!r}")
if not fraktionen:
return []
indexed = WAHLPROGRAMME.get(bundesland, {})
return [f for f in fraktionen if f not in indexed]