gwoe-antragspruefer/docs/reference/adapter-capabilities.md

82 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Adapter-Capabilities: Vergleichsmatrix
Stand: 2026-04-10. Automatisch aus `parlamente.py` + `bundeslaender.py` extrahiert.
## Übersicht
16 Bundesländer + Bundestag, alle aktiv.
| BL | Adapter | WP | Suche | Fuzzy | Typ-Filter | API |
|---|---|---|---|---|---|---|
| **BUND** | BundestagAdapter | 21 | Server (DIP REST) + Title-Filter | Nein | Server (`f.drucksachetyp`) | REST JSON |
| **NRW** | NRWAdapter | 18 | Server (HTML-Form) + AND-Filter | Nein | Server (`dokTyp`) | HTML POST |
| **LSA** | PortalaAdapter | 8 | Server (eUI) + Title-Filter | Nein | Server (`ETYPF=Antrag`) | eUI 2-Step |
| **BE** | PortalaAdapter | 19 | Server (eUI, 730d-Fenster) + Title-Filter | Nein | Client-only | eUI 2-Step |
| **BB** | PortalaAdapter | 8 | Server (eUI) + Title-Filter | Nein | Server (`ETYPF=Antrag`) | eUI 2-Step |
| **RP** | PortalaAdapter | 18 | Server (eUI) + Title-Filter | Nein | Server (`ETYPF=Antrag`) | eUI 2-Step |
| **MV** | ParLDokAdapter | 8 | Server (ParlDok JSON) + Typ-Filter | Nein | Client (`type=="Antrag"`) | REST JSON |
| **HH** | ParLDokAdapter | 23 | Server (ParlDok JSON) + Typ-Filter | Nein | Client (`type=="Antrag"`) | REST JSON |
| **TH** | ParLDokAdapter | 8 | Server (ParlDok JSON) + Typ-Filter | Nein | Client (Substring `"Antrag"` in type) | REST JSON |
| **SH** | StarFinderCGI | 20 | Server (CGI, `dtyp=antrag`) + Title-Filter | Nein | Server (`dtyp`) | Legacy CGI |
| **HE** | StarWebHEAdapter | 21 | Server (eUI, VTDRS) + Title+Typ-Filter | Nein | Client (`"antrag"` in typ) | eUI 2-Step |
| **HB** | PARiSHBAdapter | 21 | Server (PARiS-Servlet) + Typ-Filter | Nein (Thesaurus only) | Client (`"antrag"` in typ) | HTML POST |
| **BW** | PARLISAdapter | 17 | Server (eUI, async Polling) + Title-Filter | Nein | Server (`lines.l4=Antrag`) | eUI async |
| **BY** | BayernAdapter | 19 | **Server-Volltext (Solr)** + Typ-Filter | **Ja (Solr)** | Client (`typ=="antrag"`) | HTML Scraping |
| **SL** | SaarlandAdapter | 17 | **Server-Volltext (Umbraco)** + Typ-Filter | Umbraco-Relevanz | Client (`DocumentType`) | REST JSON |
| **SN** | SNEdasXmlAdapter | 8 | Statisch (manueller XML-Export) + Title-Filter | Nein | N/A | XML Import |
## Such-Architekturen
### Volltext-Suche server-seitig
Nur **BY** (TYPO3-Solr) und **SL** (Umbraco) bieten echte Volltextsuche
über den gesamten Dokumentkorpus. Alle anderen filtern entweder nur den
Titel client-seitig oder nutzen eingeschränkte Server-Filter (WP + Datum).
### Client-seitige Title-Filterung
Die Mehrheit (portala/eUI, ParlDok, StarFinder, BUND) holt einen breiten
Satz von Treffern nach WP/Datum/Typ und filtert dann im Python-Code per
`all(t in title.lower() for t in query_terms)`. Das bedeutet:
- **Nur Titel-Matches** — Inhalte der Drucksachen werden nicht durchsucht
- **AND-Logik** — alle Suchbegriffe müssen im Titel vorkommen
- **Keine Fuzzy-Toleranz** — Tippfehler oder Synonym-Drift werden nicht abgefangen
- **Performance ok** — max. 1000-1500 Treffer pro Request (via chunksize)
### Sonderfälle
| BL | Besonderheit |
|---|---|
| **SN** | Kein Scraping möglich (`robots.txt`); manueller wöchentlicher XML-Export aus EDAS |
| **BE** | `document_type=None` weil Berlin's ETYPF andere Values nutzt; 730-Tage-Fenster als Workaround |
| **TH** | Anträge heißen "Antrag gemäß § 79 GO" → Substring-Match statt Exact-Match; `kinds=["Drucksache", "Vorlage"]` |
| **BW** | Async 2-Step mit Search-ID-Polling (2-15 Versuche × 2s Pause), JSON-in-HTML-Comments |
| **HE** | Perl-Data::Dumper in HTML-Comments, Hex-Escape-Decoding (`\x{e9}` → `é`) |
| **NI** | ❌ **Nicht implementiert** — NILAS-StarWeb braucht Session-Cookie, HAR-Capture nötig |
## Historien-Tiefe (ältere WPs)
Alle Adapter sind aktuell auf **eine feste Wahlperiode** konfiguriert.
Keiner unterstützt Queries über mehrere WPs hinweg. Ältere Drucksachen
aus früheren WPs sind nicht abrufbar ohne Adapter-Rekonfiguration.
Für eine künftige Multi-WP-Suche müsste pro Adapter geprüft werden, ob
das Backend WP-übergreifende Queries unterstützt:
| API-Typ | Multi-WP möglich? |
|---|---|
| portala/eUI | Ja (WP-Term aus dem JSON-Tree weglassen) |
| ParlDok | Ja (`facet_lp` weglassen) |
| StarFinder/PARiS | Ja (WP-Param weglassen) |
| TYPO3-Solr (BY) | Ja (`wahlperiodeid[]` weglassen) |
| DIP-API (BUND) | Ja (`f.wahlperiode` weglassen) |
| Umbraco (SL) | Ja (`Filter.Periods=[]`) |
| EDAS-XML (SN) | Nur innerhalb des exportierten Datenbestands |
## Fehlende Adapter
| BL | Status | Blocker |
|---|---|---|
| **NI** (Niedersachsen) | Issue #22 offen | NILAS-StarWeb erfordert Session-Cookie, HAR-Capture vom User nötig |