"""Bundestag (BUND) — Plenarprotokoll-Parser STUB (#106 Folge, ADR 0009). **Status: noch nicht implementiert.** Dieser Modul-Stub enthaelt Recherche-Findings, sodass die Implementer-Session direkt produktiv loslegen kann. Der Stub wird **nicht** in ``app.protokoll_parsers.PROTOKOLL_PARSERS`` registriert — der Auto-Ingest-Cron ueberspringt BUND solange. ## Recherche 2026-04-28 ### URL-Pattern Plenum-Protokoll als XML (strukturiert): ``` https://dserver.bundestag.de/btp/{wp}/{wp}{n:03}.xml ``` Beispiel WP20 Sitzung 184: ``https://dserver.bundestag.de/btp/20/20184.xml`` Plenum-Protokoll als PDF (rendert dasselbe): ``` https://dserver.bundestag.de/btp/{wp}/{wp}{n:03}.pdf ``` ### XML-Format Top-Level: ```` mit Children: - ```` — Sitzungsmetadaten - ```` — Reden + Tagesordnungspunkte - ```` — Beschluss-Anlagen, namentliche Abstimmungen - ```` Tags: ````, ````, ```` (Regie- Anweisungen wie "(Beifall bei der CDU/CSU)"), ```` mit ````-Untertag. **Kein ````-Tag.** Vote-Daten muessen aus Reden + Kommentaren extrahiert werden — gleiche Architektur wie NRW (Anchor-basiert), aber mit ANDEREN Anchor-Phrasen. ### Vote-Anchor-Phrasen (vom NRW-Pattern abweichend!) Bundestag-typisch: - "Wer dem [Antrag/Gesetzentwurf] seine Zustimmung gibt, den bitte ich, sich vom Platz zu erheben." - "Damit ist [...] in zweiter Beratung angenommen." - "Die Mehrheit hat den Gesetzentwurf [...] abgelehnt." - "Wir kommen zur Abstimmung in dritter Lesung." - "[...] wird zur federfuehrenden Beratung an den Ausschuss [...] ueberwiesen." **Achtung:** WP20-Sitzung 184 enthielt 0 dieser Anchors weil pure Aussprache. Echtes Sample mit Beschluessen brauchts (z.B. Sitzungen mit Gesetzentwurf-Lesungen). ### Strukturierte Alternative — namentliche Abstimmungen Bundestag publiziert namentliche Abstimmungen separat als Excel/XML unter ``bundestag.de/parlament/plenum/abstimmung/abstimmung``. Pro Abstimmung MP-level Vote-Records. Fraktions-Aggregate sind dort extrahierbar OHNE PDF-Parsing. **Empfehlung fuer Implementer:** statt PDF/XML-Parser bauen, lieber ``app/abgeordnetenwatch.py`` (existiert) auf Fraktions-Aggregat-Form runterrechnen — das deckt namentliche Abstimmungen sauber ab. Nur fuer Hammelsprung-und-Handzeichen-Abstimmungen (nicht-namentlich) muss man das XML-Plenum parsen. ### Sample-Daten fuer Tests - WP20 Sitzung 30: "{wp}{n:03}" → btp/20/20030.xml — enthaelt diverse Gesetzentwurf-Beschluesse - Sitzungen mit "namentliche Abstimmung" laut Tagesordnung sind Goldstandard fuer Tests ### Aufwand Geschaetzt 1-2 Tage: - 4h Reverse-Engineering der Anchor-Sprache (mehrere Sample-Sitzungen) - 4h Parser-Implementierung - 4h Tests (Fixture-Pinning analog NRW 19/19-Garantie) Folge-Issue: https://repo.toppyr.de/tobias/gwoe-antragspruefer/issues/148 """ from __future__ import annotations def parse_protocol(pdf_or_xml_path: str) -> list[dict]: """STUB — siehe Modul-Docstring.""" raise NotImplementedError( "BUND-Plenarprotokoll-Parser ist noch nicht implementiert. " "Siehe app/protokoll_parsers/bund.py-Docstring fuer Recherche-Findings " "und docs/protokoll-parser-roadmap.md." )