Phase H: HE StarWebHEAdapter (#24/#30) — Hessen aktiv
Schließt #24 (HE Card-Parser) und #36 (UI-Aktivierung). Eigenständige
``StarWebHEAdapter``-Klasse für starweb.hessen.de.
Backend-Discovery aus HAR-Trace (TEMP/starweb.hessen.de.har):
- starweb.hessen.de läuft auf einem eUI-Backend mit synchronem 2-Step-
Flow (kein Polling wie BW PARLIS): POST ``browse.tt.json`` →
``report_id`` direkt in der Response → GET ``report.tt.html?
report_id=...&start=0&chunksize=1500``
- Source: ``hlt.lis``
- Server verlangt ZWINGEND einen ``search.json``-Term-Tree, ``parsed``/
``sref`` allein reichen nicht. Top-NOT mit zwei Operanden:
``not(WP-Filter, NOWEB=X)``
- Hit-Format: Cards (``efxRecordRepeater``) mit Daten in HTML-Kommentar-
Perl-Dumps ``<!--<pre class="dump">$VAR1 = ...</pre>-->``
- Field-Mapping: WEV01=Title, WEV02=Datum, WEV03=Typ, WEV07=PDF-URL,
WEV08=Drucksachen-Nummer, WEV12=Urheber
Pipeline:
- ``search()`` synchron 2-Step, client-side ``"antrag"``-Filter (analog
#61 für portala) — fängt "Dringlicher Berichtsantrag" und ähnliche
Subtypen
- ``get_document()`` linearer Lookup über die ersten 200 Hits
- ``download_text()`` PDF-via-fitz (HE-PDF-URLs werden auf https
upgegradet)
BL-Eintrag in ``bundeslaender.py``:
- ``HE.aktiv = True``
- ``doku_system="portala"`` (statt "StarWeb" — die /starweb/LIS-Pfade
sind nur Legacy, das echte Backend ist /portal)
- ``doku_base_url="https://starweb.hessen.de/portal"``
ADAPTERS-Registrierung an Position vor NRW.
Live-Probe:
```
21/4157 2026-04-07 | [GRÜNE] | Dringlicher Berichtsantrag | Vorstellung, Kosten...
21/4156 2026-04-02 | [GRÜNE] | Berichtsantrag | Schulische Prävention...
21/4136 2026-03-30 | [GRÜNE] | Dringlicher Berichtsantrag | Streichung des Schulfachs...
```
176 Unit-Tests grün, Sub-A im Container nach Deploy zu verifizieren.
Refs: #24, #30, #36, #59 (Phase H)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>