diff options
| author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2026-08-24 21:12:44 +0200 |
|---|---|---|
| committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2026-08-24 21:12:44 +0200 |
| commit | e8213085ebb446081cfe6ce45f047d6862e1a755 (patch) | |
| tree | c311888baa3c23cfc678d763470a8b459aa5def6 /src/test/java | |
| parent | a88d5707a4a58b1d37db97b211770d3509e95ee5 (diff) | |
Nicht jedes Landesportal versteckt seinen Text
Brandenburg ist das erste Land, dessen Portal keine juris-Einseitenanwendung ist:
BRAVORS gibt seine Vorschriften als gewöhnliches HTML aus und führt unter
„Änderungshistorie“ jede Fassung einzeln. Vor- und Nachfassung entstammen damit
derselben Quelle — kein Wayback, keine Browsersteuerung, nur zwei Adressen. Die
Hefte lassen sich am Dokumententitel des PDF einordnen; „FraktG-1AendG“ verrät
mehr als jede Volltextsuche.
Der Belegfall ist das Erste Gesetz zur Änderung des Fraktionsgesetzes (GVBl. I
2026 Nr. 12): vier Befehle, vier angewandt, alle 24 Normen gleich der amtlichen
Nachfassung — auf Anhieb, ohne einen einzigen Eingriff am Parser. Zugleich ist er
die Gegenprobe zum Inkrafttreten: Artikel 2 ordnet es schlicht an („am Tag nach
der Verkündung“), also darf keine Staffelung gerügt und kein Datum erfunden
werden.
Drei Eigenheiten fürs Aufbereiten stehen in Brandenburg/SOURCES: Die
Abschnittsbezeichnung steht im Kopfelement vor der Überschrift; die Aufzählungen
sind echte Listen, deren Marken erst das Stilblatt erzeugt; und an ehemaligen
Trennstellen führt das Portal vereinzelt Steuerzeichen mit (U+0002 in
„Mitglie<STX>der“), die kein Textbestand sind.
Ein allgemeiner Fund kam doch dazu: Die Überschrift des Schlussartikels geriet in
den Wortlaut der Inkrafttretens-Anordnung, weil ein Artikel ohne Absatz-
bezeichnungen im ganzen ein Absatz ist. Auf das bloße Vorkommen von „tritt“ ist
dabei kein Verlass — das Wort „Inkrafttreten“ trägt es selbst.
Geprüft: 349 Tests, REUSE 185/185.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I17660864fdf589d280024c9ba310e23902781515
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/eu/mulk/aendggner/EndToEndTest.java | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/test/java/eu/mulk/aendggner/EndToEndTest.java b/src/test/java/eu/mulk/aendggner/EndToEndTest.java index e1da584..7aa1727 100644 --- a/src/test/java/eu/mulk/aendggner/EndToEndTest.java +++ b/src/test/java/eu/mulk/aendggner/EndToEndTest.java @@ -1765,4 +1765,55 @@ class EndToEndTest { assertThat(aprilFassung.anzahlAngewandt()).isEqualTo(75); assertThat(aprilFassung.html()).doesNotContain("Am Stichtag noch nicht in Kraft"); } + + /** + * Brandenburg: das Erste Gesetz zur Änderung des Fraktionsgesetzes (GVBl. I 2026 Nr. 12). + * + * <p>Der erste Belegfall aus einem Portal, das kein juris-Portal ist: BRAVORS gibt seine + * Vorschriften als freies HTML aus und führt zu jedem Gesetz die einzelnen Fassungen, sodass Vor- + * und Nachfassung derselben Quelle entstammen. Zwei Eigenheiten des Satzes waren beim Aufbereiten + * zu beachten und sind in {@code Brandenburg/SOURCES} vermerkt: Die Abschnittsbezeichnung steht + * im Kopfelement vor der Überschrift, und die Aufzählungen sind echte Listen, deren Marken erst + * das Stilblatt erzeugt. + * + * <p>Zugleich die Gegenprobe zum Inkrafttreten: Artikel 2 ordnet es schlicht an („am Tag nach der + * Verkündung“). Es ist nicht gestaffelt — also darf die Synopse nicht davor warnen —, und ein + * Datum nennt der Wortlaut nicht, also wird keines gezeigt. + */ + @Test + void fraktionsgesetzBrandenburg() throws Exception { + var alt = SAMPLEDATA.resolve("Brandenburg/FraktG-alt.txt"); + var pdf = SAMPLEDATA.resolve("Brandenburg/GVBl-I-2026-12_FraktG-AendG.pdf"); + assumeTrue(Files.exists(alt) && Files.exists(pdf), "Brandenburger Beispieldaten fehlen"); + + var gesetz = new eu.mulk.aendggner.gesetz.land.LandesRechtLoader().load(alt); + assertThat(gesetz.jurabk()).isEqualTo("FraktG"); + assertThat(gesetz.normen()).hasSize(24); + // Die Abschnitte des Gesetzes sind als Gliederung erkannt, nicht als Normtext. + assertThat(gesetz.gliederungen()) + .extracting(g -> g.titel()) + .contains("Status und Organisation"); + + var text = TextBereiniger.bereinige(new PatchTextExtraktor().extrahiere(pdf)); + var parseErgebnis = new AenderungsgesetzParser().parse(text, gesetz, null); + assertThat(parseErgebnis.artikel()).containsExactly("1"); + assertThat(parseErgebnis.befehle()).hasSize(4); + assertThat(parseErgebnis.befehle()).noneMatch(b -> b instanceof UnbekannterBefehl); + + // Vier Befehle, vier Normen der Nachfassung gleich — § 1, § 10 und § 21 geändert. + pruefeGegenNachfassung(gesetz, parseErgebnis, "Brandenburg/FraktG-neu.txt"); + + // Artikel 2 ordnet das Inkrafttreten ohne Staffelung und ohne bestimmtes Datum an. + var inkrafttreten = parseErgebnis.inkrafttreten(); + assertThat(inkrafttreten).isNotNull(); + assertThat(inkrafttreten.gestaffelt()).isFalse(); + var grundregel = inkrafttreten.grundregel().orElseThrow(); + assertThat(grundregel.datum()).isNull(); + assertThat(grundregel.wortlaut()) + .isEqualTo("Dieses Gesetz tritt am Tag nach der Verkündung in Kraft."); + + var synopse = Pipeline.erzeugeSynopse(alt, List.of(pdf), null, false); + assertThat(synopse.anzahlAngewandt()).isEqualTo(4); + assertThat(synopse.html()).doesNotContain("tritt gestaffelt in Kraft"); + } } |
