Adapter-Bugs aus #61: BB Datum + BB/RP Type-Filter

Drei aus #61 identifizierte Production-Bugs gefixt:

- **Bug 4 (BB Datum)**: BB.wahlperiode_start vom 2024-10-23 (Konstituie-
  rende Sitzung) auf 2024-09-22 (Wahltag) zurückgesetzt. Damit fällt
  die Geschäftsordnungs-Drucksache 8/2 vom 2024-10-17 in den
  Plausibilitäts-Check. Ist auch semantisch sauberer — die WP fängt
  mit der Wahl an, nicht mit der formalen Konstituierung.

- **Bug 2/3 (BB/RP Type-Filter leakt Kleine Anfrage / Beschluss-
  empfehlung)**: Server-side ETYPF/DTYPF-Filter ist best-effort über
  die portala-Instanzen — BB+RP lassen die nicht-Antrag-Typen durch.
  Client-side strict-filter im PortalaAdapter.search() nach Aufruf von
  _parse_hit_list_html: nur Hits, deren typ-String das Substring
  "antrag" enthält, kommen weiter. Substring-Match (nicht exact),
  damit "Antrag gemäß § 79 GO" und ähnliche Subtypen passieren.

176 Unit-Tests grün, Live-Verifikation via Sub-A im Container nach
Deploy.

Refs: #61 (Bug 2, 3, 4)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dotty Dotter 2026-04-09 11:56:20 +02:00
parent 4bc583e490
commit e72dd3ec21
2 changed files with 15 additions and 1 deletions

View File

@ -141,7 +141,10 @@ BUNDESLAENDER: dict[str, Bundesland] = {
name="Brandenburg",
parlament_name="Landtag Brandenburg",
wahlperiode=8,
wahlperiode_start="2024-10-23",
# Wahltag (statt Konstituierende Sitzung am 2024-10-23), damit
# die Geschäftsordnungs-Drucksachen der konstituierenden Sitzung
# in den Plausibilitäts-Check fallen (siehe #61 Bug 4).
wahlperiode_start="2024-09-22",
naechste_wahl="2029-09-23",
regierungsfraktionen=["SPD", "BSW"],
landtagsfraktionen=["SPD", "AfD", "CDU", "BSW"],

View File

@ -770,6 +770,17 @@ class PortalaAdapter(ParlamentAdapter):
return []
results = self._parse_hit_list_html(report_resp.text, query_filter=query)
# Server-side ETYPF/DTYPF filter is best-effort across portala
# instances — BB/RP let "Kleine Anfrage" und "Beschluss-
# empfehlung" durch (siehe #61 Bug 2/3). Client-side strict
# filter on the parsed typ-string. Whitelist via Substring,
# damit "Antrag gemäß § 79 GO" und ähnliche Subtypen passieren.
if self.document_type:
target = self.document_type.lower()
results = [
d for d in results
if target in (d.typ or "").lower()
]
return results[:limit]
except Exception: