Phase G: BundestagAdapter via DIP-API (#56)
Schließt #56 (Bundespolitik überprüfbar machen). Neuer
``BundestagAdapter`` in ``app/parlamente.py``, neuer ``BUND``-Eintrag in
``app/bundeslaender.py`` als 17. Parlament-Slot.
API:
- DIP-Search-API auf ``search.dip.bundestag.de/api/v1/drucksache``
- API-Key aus ``dip-config.js`` gescraped (öffentlich, klartext)
- Auth via URL-Param ``?apikey=...`` plus ``Origin: https://dip.bundestag.de``-
Header (Origin-Locking, server-to-server-tauglich)
- Pagination via ``cursor``-Parameter, 100 Hits pro Page
- ``f.drucksachetyp=Antrag`` und ``f.wahlperiode=21`` als Server-Filter
Mapping:
- ``dokumentnummer`` → ``Drucksache.drucksache``
- ``titel`` → ``title``
- ``urheber[*].titel`` → durch ``parteien.extract_fraktionen`` zu
``["AfD"]``/``["GRÜNE"]``/etc. — die ``"Fraktion der AfD"``-
Schreibweise wird vom zentralen Mapper aus #55 bereits korrekt
geparst, kein Adapter-spezifisches Pattern nötig
- ``fundstelle.pdf_url`` → ``link``
- ``datum`` → bereits ISO ``YYYY-MM-DD``
``get_document(drucksache)`` nutzt ``f.dokumentnummer`` als direkter
Server-Filter, kein linearer Pagination-Scan.
BUND-Eintrag in ``bundeslaender.py``:
- ``code="BUND"``, ``parlament_name="Deutscher Bundestag"``,
``wahlperiode=21``, ``wahlperiode_start="2025-03-25"`` (Konstituierung
21. WP nach BTW 2025), ``regierungsfraktionen=["CDU", "CSU", "SPD"]``
(Kabinett Merz)
- ``aktiv=True`` — taucht automatisch in ``alle_bundeslaender()`` und
``aktive_bundeslaender()`` auf, damit die UI- und
Auswertungs-Pipelines BUND ohne zusätzliche Sonderpfade kennen
- 17 Einträge in ``BUNDESLAENDER`` statt 16 — Tests entsprechend
aktualisiert (``test_sixteen_bundeslaender_plus_bund``,
``test_alle_bundeslaender_returns_all``,
``test_all_wahlperioden_lists_each_bl_twice``)
Live-Probe direkt im Repo:
```
adapter: Deutscher Bundestag (DIP), wahlperiode=21
search returned 5 docs
21/5136 2026-03-31 | ['AfD'] | Transparenz, Wirtschaftlichkeit ...
21/5064 2026-03-27 | ['GRÜNE'] | Ausverkauf der Energieinfrastruktur ...
21/5059 2026-03-27 | ['AfD'] | Berufsfreiheit für Selbstständige ...
get_document('21/5136') -> drucksache=21/5136
```
176 Unit-Tests grün, Live-Verifikation Sub-A im Container nach Deploy.
Refs: #56, #59 (Phase G)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>