Close the NRW issue: 17. RÄStV-AusfG as a fourth acceptance case
Article 4 of the 22nd Broadcasting Amendment Act recasts § 1 of the act
implementing the 17th Broadcasting Amendment Treaty. Both the pre- and
the post-amendment consolidated version are served by recht.nrw.de, so
this closes the last open article of GV. NRW. 7/2026.
No production code needed changing: the article carries its single
command without an enumeration item, and the recast quote contains
nested quotation marks — both are already handled. The result matches
the official version of 1 April 2026 character for character, including
its editorial placeholders.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: If63606d113f2801f0c9e82350215443da8e8be8b
diff --git a/src/main/resources/sampledata/Landesrecht-Beispiele.adoc b/src/main/resources/sampledata/Landesrecht-Beispiele.adoc
index 3c05d90..45c4e4f 100644
--- a/src/main/resources/sampledata/Landesrecht-Beispiele.adoc
+++ b/src/main/resources/sampledata/Landesrecht-Beispiele.adoc
@@ -99,8 +99,8 @@
(`EndToEndTest.kommunalrechtAendGSchleswigHolstein`): Artikel 1 trifft die Gemeindeordnung,
Artikel 2 die Kreisordnung, je ein Neufassungsbefehl, kein unbekannter Befehl. Ein voller
Akzeptanztest ist *nicht* möglich — siehe „Noch offen“.
-* *Nordrhein-Westfalen* ist der Massentest-Fall: aus demselben Heft sind drei Artikel als
- Akzeptanzfälle hinterlegt.
+* *Nordrhein-Westfalen* ist der Massentest-Fall: aus demselben Heft sind alle vier ändernden
+ Artikel als Akzeptanzfälle hinterlegt.
+
--
`EndToEndTest.tmzGesetzAcceptance`:: Artikel 3 (Telemedienzuständigkeitsgesetz), vier Befehle,
@@ -113,14 +113,20 @@
Nr. 13 e) aa): „der Punkt am Ende des Satzes“ ist in einer zweisätzigen Nummer nicht eindeutig.
`EndToEndTest.lmgNrwAcceptance`:: Artikel 2 (Landesmediengesetz), 18 Befehle, kein Rest. Stamm
`NRW/LMG-NRW-alt.txt` (Fassung vom 01.01.2025).
+`EndToEndTest.rundfunkAusfuehrungsgesetzAcceptance`:: Artikel 4 (17. RÄStV-AusfG), ein Befehl,
+kein Rest. Stamm `NRW/17-RAEStV-AusfG-alt.txt` (Erstfassung vom 17.12.2015, bis 2026 unverändert).
+Der Artikel führt seinen Befehl *ohne* Gliederungspunkt — der Text nach der Änderungsformel ist
+der Befehl —, und das Zitat der neuen Fassung trägt verschachtelte Anführungszeichen (ein
+vollständiges „durch Artikel 3 …“ innerhalb einer eckigen Klammer). Beides trägt die vorhandene
+Maschinerie.
--
+
-Alle drei Ergebnisse sind normweise gegen die amtliche Fassung vom 01.04.2026 abgeglichen. Es
+Alle vier Ergebnisse sind normweise gegen die amtliche Fassung vom 01.04.2026 abgeglichen. Es
bleiben nur Abweichungen, in denen die amtliche Nachfassung selbst vom Befehlswortlaut abweicht
(§ 15 WDR-Gesetz: „des“ vor „Bundesreisekostengesetzes“ entfallen; § 7 und § 21 WDR-Gesetz: ein
überzähliges Anführungszeichen aus dem Änderungsgesetz; § 93 LMG NRW: zusätzlich die Wörter
-„Film (“ gestrichen) — ÄndGgner wendet dort den Wortlaut an. Offen bleibt Artikel 4
-(17. RÄStV-AusfG).
+„Film (“ gestrichen) — ÄndGgner wendet dort den Wortlaut an. Damit ist das Heft GV. NRW. 7/2026
+vollständig belegt.
* *Berlin* ist bis zur Befehlserkennung umgesetzt (`EndToEndTest.asogLafAendGBerlin`): Artikel 2
(LAF-Errichtungsgesetz) wird vollständig erkannt, beide Punkte erben ihr Ziel aus der
Änderungsformel. Artikel 1 wird seit der Wortanker-Einfügung und der Zitatgrenze am
diff --git a/src/main/resources/sampledata/NRW/17-RAEStV-AusfG-alt.txt b/src/main/resources/sampledata/NRW/17-RAEStV-AusfG-alt.txt
new file mode 100644
index 0000000..58d6d02
--- /dev/null
+++ b/src/main/resources/sampledata/NRW/17-RAEStV-AusfG-alt.txt
@@ -0,0 +1,10 @@
+Gesetz zur Ausführung des Siebzehnten Rundfunkänderungsstaatsvertrags
+(Siebzehnter Rundfunkänderungsstaatsvertrag Ausführungsgesetz)
+Vom 17. Dezember 2015
+(Artikel 2 des Gesetzes vom 17. Dezember 2015 (GV. NRW. S. 872))
+§ 1 Entsendungsbefugnis
+Die Vertreterin oder der Vertreter aus dem Bereich „Medienwirtschaft und Film“ nach § 21 Absatz 1 Satz 1 Buchstabe q Doppelbuchstabe jj des ZDF-Staatsvertrags vom 31. August 1991 (GV. NRW. S. 408), der zuletzt durch Staatsvertrag vom 18. Juni 2015 geändert worden ist (GV. NRW. S. 872), wird gemeinsam durch den Film und Medienverband NRW e.V., das Filmbüro NW e.V. und den Kulturrat NRW e.V., Sektion Medien, in den Fernsehrat des ZDF entsandt.
+§ 2 Entsendung und Abberufung
+Für die Entsendung und Abberufung sowie die Anforderungen an die Person der Vertreterin oder des Vertreters gelten die Maßgaben des ZDF-Staatsvertrags.
+§ 3 Inkrafttreten
+Dieses Gesetz tritt am 1. Januar 2016 in Kraft, wenn nach Artikel 2 Siebzehnter Rundfunkänderungsstaatsvertrag alle Ratifikationsurkunden bis zum 31. Dezember 2015 bei der Staatskanzlei des Vorsitzenden der Ministerpräsidentenkonferenz hinterlegt sind.
diff --git a/src/main/resources/sampledata/NRW/SOURCES b/src/main/resources/sampledata/NRW/SOURCES
index 09cca21..df67eb7 100644
--- a/src/main/resources/sampledata/NRW/SOURCES
+++ b/src/main/resources/sampledata/NRW/SOURCES
@@ -6,10 +6,10 @@
01.04.2026
- https://recht.nrw.de/gvnrw/2026-7
(GV-NRW-2026-S202_22-Rundfunkaenderungsgesetz.pdf)
-- Das Heft ändert fünf Gesetze; Artikel 1 (WDR-Gesetz), Artikel 2
- (Landesmediengesetz) und Artikel 3 (Telemedienzuständigkeitsgesetz)
- sind als Akzeptanzfälle hinterlegt, Artikel 4 (17. RÄStV-AusfG) und
- Artikel 5 (Inkrafttreten) nicht.
+- Das Heft ändert vier Gesetze; alle vier sind als Akzeptanzfälle
+ hinterlegt: Artikel 1 (WDR-Gesetz), Artikel 2 (Landesmediengesetz),
+ Artikel 3 (Telemedienzuständigkeitsgesetz) und Artikel 4
+ (17. RÄStV-AusfG). Artikel 5 regelt nur das Inkrafttreten.
Stammfassungen (jeweils die vor dem Änderungsgesetz geltende Fassung):
- recht.nrw.de gibt jede Fassung unter
@@ -28,6 +28,12 @@
- TMZ-Gesetz-alt.txt: Telemedienzuständigkeitsgesetz vom 29.03.2007
(GV. NRW. S. 137), Stand 27.04.2022, aus
.../27042022-gesetz-zur-regelung-der-zustaendigkeit-fuer-die-ueberwachung-von-telemedien
+- 17-RAEStV-AusfG-alt.txt: Gesetz zur Ausführung des Siebzehnten
+ Rundfunkänderungsstaatsvertrags (Siebzehnter
+ Rundfunkänderungsstaatsvertrag Ausführungsgesetz) vom 17.12.2015
+ (GV. NRW. S. 872), Stand 01.01.2016 — das Gesetz war bis 2026
+ unverändert, die Erstfassung ist also zugleich die Stammfassung; aus
+ .../01012016-gesetz-zur-ausfuehrung-des-siebzehnten-rundfunkaenderungsstaatsvertrags
- Aufbereitung ins kanonische Klartextformat des LandesRechtLoaders:
je <section class="legaldoc-article"> ein Normkopf aus
field_num + field_headline, darunter die <p>-Absätze; die
@@ -44,3 +50,6 @@
„Bundesreisekostengesetzes“ entfallen; §§ 7 und 21: ein überzähliges
Anführungszeichen aus dem Änderungsgesetz übernommen; LMG NRW § 93
Absatz 3 Nummer 11: zusätzlich die Wörter „Film (“ gestrichen).
+- Beim 17. RÄStV-AusfG stimmt das Ergebnis zeichengenau mit der
+ amtlichen Nachfassung überein, einschließlich der dort stehenden
+ amtlichen Platzhalter („[einsetzen: Datum der Bekanntmachung]“).
diff --git a/src/test/java/eu/mulk/aendggner/EndToEndTest.java b/src/test/java/eu/mulk/aendggner/EndToEndTest.java
index 959e664..035c3f1 100644
--- a/src/test/java/eu/mulk/aendggner/EndToEndTest.java
+++ b/src/test/java/eu/mulk/aendggner/EndToEndTest.java
@@ -772,4 +772,76 @@
assertThat(ZitatExtraktor.extrahiere(text).warnungen())
.anyMatch(w -> w.startsWith("Zitat vor dem Aufzählungspunkt „cc)“ nicht geschlossen"));
}
+
+ /**
+ * Nordrhein-Westfalen: Artikel 4 desselben Heftes fasst § 1 des Ausführungsgesetzes zum
+ * Siebzehnten Rundfunkänderungsstaatsvertrag neu. Damit sind alle vier ändernden Artikel des
+ * Heftes GV. NRW. 7/2026 belegt.
+ *
+ * <p>Zwei Eigenheiten: Der Artikel führt seinen einzigen Befehl <em>ohne</em> Gliederungspunkt,
+ * und das Zitat der neuen Fassung trägt verschachtelte Anführungszeichen (ein vollständiges
+ * „durch Artikel 3 …“ innerhalb einer eckigen Klammer). Das Ergebnis stimmt zeichengenau mit der
+ * amtlichen Fassung vom 1. April 2026 (recht.nrw.de) überein — einschließlich der amtlichen
+ * Platzhalter „[einsetzen: …]“.
+ */
+ @Test
+ void rundfunkAusfuehrungsgesetzAcceptance() throws Exception {
+ var alt = SAMPLEDATA.resolve("NRW/17-RAEStV-AusfG-alt.txt");
+ var pdf = SAMPLEDATA.resolve("NRW/GV-NRW-2026-S202_22-Rundfunkaenderungsgesetz.pdf");
+ assumeTrue(Files.exists(alt) && Files.exists(pdf), "17.-RÄStV-AusfG-Beispieldaten fehlen");
+
+ var gesetz = new eu.mulk.aendggner.gesetz.land.LandesRechtLoader().load(alt);
+ // Der Klammerzusatz führt hier nur eine (mehrteilige) Bezeichnung, keinen Kurztitel am
+ // Gedankenstrich; genau sie nennt der Einleitungssatz des Artikels 4.
+ assertThat(gesetz.jurabk()).isEqualTo("Siebzehnter Rundfunkänderungsstaatsvertrag"
+ + " Ausführungsgesetz");
+ assertThat(gesetz.kurzue()).isNull();
+ assertThat(gesetz.normen()).hasSize(3);
+ // Der alte § 1 besteht aus einem einzigen, unbezeichneten Absatz.
+ assertThat(gesetz.norm("§ 1").orElseThrow().absaetze()).hasSize(1);
+ assertThat(gesetz.norm("§ 1").orElseThrow().absaetze().get(0).nummer()).isNull();
+
+ var text = TextBereiniger.bereinige(new PatchTextExtraktor().extrahiere(pdf));
+ var parseErgebnis = new AenderungsgesetzParser().parse(text, gesetz, null);
+ // Nur Artikel 4 trifft dieses Gesetz — die Auswahl gelingt über die Bezeichnung allein.
+ assertThat(parseErgebnis.artikel()).containsExactly("4");
+ // Der Artikel trägt keine nummerierten Punkte: Der Text nach der Änderungsformel ist der Befehl.
+ assertThat(parseErgebnis.befehle()).hasSize(1);
+ assertThat(parseErgebnis.befehle().get(0)).isInstanceOf(Aenderungsbefehl.Neufassung.class);
+ assertThat(parseErgebnis.befehle().get(0).stelle().anzeigeText()).isEqualTo("§ 1");
+
+ var anwendung = BefehlAnwender.anwenden(gesetz, parseErgebnis.befehle());
+ assertThat(anwendung.anzahlAngewandt()).isEqualTo(1);
+ assertThat(anwendung.protokoll())
+ .noneMatch(a -> a.status() == BefehlAnwender.Status.MANUELL_PRUEFEN);
+
+ // Abgleich mit der amtlichen Fassung vom 01.04.2026: aus dem einen unbezeichneten Absatz sind
+ // zwei nummerierte geworden, Überschrift und Wortlaut stimmen zeichengenau.
+ var neu = anwendung.neu();
+ var paragraph1 = neu.norm("§ 1").orElseThrow();
+ assertThat(paragraph1.titel()).isEqualTo("Entsendungsbefugnis");
+ assertThat(paragraph1.absaetze()).hasSize(2);
+ assertThat(paragraph1.absaetze().get(0).text())
+ .isEqualTo(
+ "Die Vertreterin oder der Vertreter aus dem Bereich „Medienwirtschaft und Film“ nach"
+ + " § 21 Absatz 1 Satz 1 Buchstabe q Doppelbuchstabe jj des ZDF-Staatsvertrags vom"
+ + " 31. August 1991 (GV. NRW. S. 408), der zuletzt durch Artikel 2 des Vierten"
+ + " Medienänderungsstaatsvertrages vom 9. bis 16. Mai 2023 geändert worden ist"
+ + " (GV. NRW. S. 1252) [noch erforderliche Anpassung: „durch Artikel 3 des Siebten"
+ + " Medienänderungsstaatsvertrages vom 14. bis 26. März 2025 geändert worden ist"
+ + " (GV. NRW. [einsetzen: Datum der Bekanntmachung])“], wird gemeinsam durch die"
+ + " Allianz Deutscher Produzentinnen und Produzenten – Film, Fernsehen und"
+ + " Audiovisuelle Medien e.V., Produktionsallianz NRW, das Filmbüro NW e.V. und den"
+ + " Kulturrat NRW e.V., Sektion Medien, in den Fernsehrat des ZDF entsandt.");
+ assertThat(paragraph1.absaetze().get(1).text())
+ .isEqualTo(
+ "Bis zum Ende der zum Stichtag 31. Dezember 2025 laufenden Amtsperiode des Fernsehrates"
+ + " des ZDF ist § 1 in der am [einsetzen: Datum der Verkündung dieses Gesetzes]"
+ + " geltenden Fassung weiter anzuwenden.");
+ // §§ 2 und 3 bleiben unberührt.
+ assertThat(neu.norm("§ 2").orElseThrow().gesamtText())
+ .isEqualTo(gesetz.norm("§ 2").orElseThrow().gesamtText());
+ assertThat(neu.norm("§ 3").orElseThrow().gesamtText())
+ .isEqualTo(gesetz.norm("§ 3").orElseThrow().gesamtText());
+ }
}