53 lines
1.9 KiB
Python
53 lines
1.9 KiB
Python
|
|
"""Wahlperioden-Helper für die Auswertungen.
|
|||
|
|
|
|||
|
|
Maps a Drucksache-Datum + Bundesland auf eine Wahlperioden-Kennung.
|
|||
|
|
Single Source of Truth ist ``BUNDESLAENDER[bl].wahlperiode_start`` —
|
|||
|
|
alles vor diesem Datum gehört zur Vorgänger-WP, alles ab dem Datum zur
|
|||
|
|
aktuellen.
|
|||
|
|
|
|||
|
|
Granularität: pro Bundesland kennen wir genau zwei WP — die laufende und
|
|||
|
|
die direkt davor. Das reicht für die Aggregations-Sicht (#58), denn der
|
|||
|
|
gesamte Antragsbestand stammt aus den letzten 5–10 Jahren. Sollte später
|
|||
|
|
eine echte Multi-WP-Historie nötig werden, ist der Erweiterungspunkt
|
|||
|
|
``_wp_calendar`` als Liste von ``(start, ende, wp_id)``-Tupeln pro BL.
|
|||
|
|
"""
|
|||
|
|
from __future__ import annotations
|
|||
|
|
|
|||
|
|
from typing import Optional
|
|||
|
|
|
|||
|
|
from .bundeslaender import BUNDESLAENDER
|
|||
|
|
|
|||
|
|
|
|||
|
|
def wahlperiode_for(datum: str, bundesland: str) -> Optional[str]:
|
|||
|
|
"""Liefert die Wahlperioden-Kennung für ein Datum + Bundesland.
|
|||
|
|
|
|||
|
|
Format der Kennung: ``"<BL>-WP<n>"``, z.B. ``"NRW-WP18"``,
|
|||
|
|
``"MV-WP7"`` (Vorgänger-WP). Returns ``None`` wenn das Bundesland
|
|||
|
|
unbekannt oder das Datum nicht parsbar ist.
|
|||
|
|
|
|||
|
|
>>> wahlperiode_for("2026-03-18", "MV")
|
|||
|
|
'MV-WP8'
|
|||
|
|
>>> wahlperiode_for("2020-01-01", "MV")
|
|||
|
|
'MV-WP7'
|
|||
|
|
"""
|
|||
|
|
bl = BUNDESLAENDER.get(bundesland)
|
|||
|
|
if bl is None:
|
|||
|
|
return None
|
|||
|
|
if not datum:
|
|||
|
|
return f"{bundesland}-WP{bl.wahlperiode}" # default: aktuelle WP
|
|||
|
|
# ISO-Datum ist lexikographisch vergleichbar — keine datetime-Parsing
|
|||
|
|
# nötig, solange das Format YYYY-MM-DD eingehalten wird.
|
|||
|
|
if datum >= bl.wahlperiode_start:
|
|||
|
|
return f"{bundesland}-WP{bl.wahlperiode}"
|
|||
|
|
return f"{bundesland}-WP{bl.wahlperiode - 1}"
|
|||
|
|
|
|||
|
|
|
|||
|
|
def all_wahlperioden() -> list[str]:
|
|||
|
|
"""Liste aller bekannten Wahlperioden-Kennungen (aktuelle + Vorgänger
|
|||
|
|
pro Bundesland). Nützlich für UI-Filter-Dropdowns."""
|
|||
|
|
out: list[str] = []
|
|||
|
|
for code, bl in BUNDESLAENDER.items():
|
|||
|
|
out.append(f"{code}-WP{bl.wahlperiode}")
|
|||
|
|
out.append(f"{code}-WP{bl.wahlperiode - 1}")
|
|||
|
|
return out
|