gwoe-antragspruefer/app/protokoll_parsers
Dotty Dotter 7ebdc78331 feat(#160): SH-Parser produktiv — Schleswig-Holsteiner Plenarprotokolle
Verifiziert auf WP20 Sitzungen 115 + 116. Format ist TH-aehnlich:

Result-Anchor: "Damit ist [Subjekt] (mehrheitlich|einstimmig)? (angenommen|abgelehnt|überwiesen|so beschlossen)"
Vote-Block (Q+A im Reden-Stil):
  - JA: "Wer dem zustimmen will ... Das sind die Fraktionen von X"
  - NEIN: "Wer stimmt dagegen? ... Das sind die Fraktionen von Y"
  - ENTH: "Wer enthaelt sich? ... Z"
Drucksachen-Lookup: rueckwaerts vom Anchor

Besonderheiten:
- SSW (5%-Huerden-befreit) als feste Fraktion
- "Damit ist die Ausschussueberweisung einstimmig so beschlossen" → ergebnis="ueberwiesen"
- "Das sind alle anderen Fraktionen" → NEIN als Komplement von JA inferiert
- Soft-Hyphen-Reparatur (PDF-Zeilenumbruch "zustim- men" → "zustimmen")
- _last_match-Helper, weil 1500-char-Window mehrere Vote-Bloecke enthalten kann
  (TH-Limitierung gefixed)

URL-Pattern (verifiziert):
https://www.landtag.ltsh.de/export/sites/ltsh/infothek/wahl20/plenum/plenprot/{YYYY}/20-{n:03}_{MM-YY}.pdf

Datum-Anteile (YYYY-Pfad + MM-YY-Suffix) machen URL-Vorhersage unmoeglich
→ Auto-Ingest-Cron via Index-Scrape (analog HH/HE):
https://www.landtag.ltsh.de/infothek/wahl20/plenum/plenprot_seite/

Tests: 23 SH-Tests + Stub-Registry-Test angepasst.
Stand: 7 produktive Parser (NRW, BUND, BE, HH, TH, HE, SH).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 01:29:06 +02:00
..
__init__.py feat(#160): SH-Parser produktiv — Schleswig-Holsteiner Plenarprotokolle 2026-04-29 01:29:06 +02:00
bb.py feat(#106 Folge): 16 Stub-Parser + Tracking-Issues fuer alle Bundeslaender 2026-04-28 23:09:07 +02:00
be.py feat(#150): BE-Parser produktiv — Berliner Abgeordnetenhaus-Plenarprotokolle 2026-04-29 00:37:47 +02:00
bund.py feat(#148): BUND-Parser produktiv — Bundestags-XML-Plenarprotokolle 2026-04-28 23:21:39 +02:00
bw.py docs(#151): BW-Datenmodell-Inkompatibilitaet vermerkt 2026-04-28 23:29:31 +02:00
by.py feat(#106 Folge): 16 Stub-Parser + Tracking-Issues fuer alle Bundeslaender 2026-04-28 23:09:07 +02:00
hb.py feat(#106 Folge): 16 Stub-Parser + Tracking-Issues fuer alle Bundeslaender 2026-04-28 23:09:07 +02:00
he.py feat(#154): HE-Parser produktiv — Hessen Beschlussprotokoll (Status-Only) 2026-04-29 01:19:02 +02:00
hh.py feat(#155): HH-Parser produktiv — Hamburg Beschlussprotokolle 2026-04-29 00:57:58 +02:00
lsa.py feat(#106 Folge): 16 Stub-Parser + Tracking-Issues fuer alle Bundeslaender 2026-04-28 23:09:07 +02:00
mv.py feat(#106 Folge): 16 Stub-Parser + Tracking-Issues fuer alle Bundeslaender 2026-04-28 23:09:07 +02:00
ni.py feat(#106 Folge): 16 Stub-Parser + Tracking-Issues fuer alle Bundeslaender 2026-04-28 23:09:07 +02:00
nrw.py feat(#126): protokoll_parsers/-Sub-Package + Registry-Pattern + ADR 0009 2026-04-28 08:37:31 +02:00
rp.py feat(#106 Folge): 16 Stub-Parser + Tracking-Issues fuer alle Bundeslaender 2026-04-28 23:09:07 +02:00
sh.py feat(#160): SH-Parser produktiv — Schleswig-Holsteiner Plenarprotokolle 2026-04-29 01:29:06 +02:00
sl.py feat(#106 Folge): 16 Stub-Parser + Tracking-Issues fuer alle Bundeslaender 2026-04-28 23:09:07 +02:00
sn.py feat(#106 Folge): 16 Stub-Parser + Tracking-Issues fuer alle Bundeslaender 2026-04-28 23:09:07 +02:00
th.py feat(#163): TH-Parser produktiv — Thueringer Plenarprotokolle 2026-04-29 01:11:58 +02:00