Quellformate jenseits des verkündeten Gesetzes
Bisher nahm ÄndGgner nur verkündete Artikelgesetze und Gesetzentwürfe an, ohne
den Unterschied zu kennen. Dokumente, die einen Entwurf ändern statt ein
Gesetz, lieferten still null Befehle.
Neu:
* Dokumentart-Erkennung aus dem Rohtext (DokumentErkenner, DokumentArt,
DokumentKopf) — vor der Bereinigung, weil gerade die Drucksachenköpfe als
Kolumnentitel wegfallen. Erkannt wird nie am Dateinamen: Die Beispieldaten
enthalten eine Datei namens Beschlussempfehlung, die in Wahrheit ein
Entschließungsantrag ist. Dokumente ohne Befehle erzeugen jetzt eine
benannte Warnung statt stiller Leere.
* Änderungsanträge (AenderungsantragParser, EntwurfsPatcher): Der Antrag wird
auf den Entwurfstext angewandt, der geänderte Entwurf danach wie gewohnt auf
das Stammgesetz — eine komponierte Synopse. Drucksachen- und Gesetzesstellen
bleiben getrennte Typen; die Zuordnung Antrag→Entwurf läuft über die
Drucksachennummer, nicht über die Argumentreihenfolge. Der 1910 Zeilen große
BefehlAnwender bleibt unberührt.
* Beschlussempfehlungen werden erkannt und mit Begründung übergangen, die den
brauchbaren Entwurf beim Namen nennt. Die Spaltentrennung der
Zusammenstellung ist gebaut (FontgroessenFilter.Spalte, koordinatenbasiert
am Steg) und belegt: Die linke Spalte ergibt Befehl für Befehl den
Regierungsentwurf. Die rechte Spalte bleibt bewusst offen — sie vermerkt
„unverändert“ auch zeilenweise innerhalb zitierter Blöcke, ihre
Anführungszeichen gehen daher nicht auf; nötig ist die zeilenweise Zuordnung
beider Spalten über die gemeinsame Grundlinie.
Die Synopse kennzeichnet eine Entwurfsfassung als solche.
296 Tests grün (vorher 269); alle gepinnten Akzeptanzzahlen unverändert.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I0001d25fcbd9969fc06eea675edc4326ce2e02f9
diff --git a/README.adoc b/README.adoc
index b092904..a29b7ac 100644
--- a/README.adoc
+++ b/README.adoc
@@ -72,8 +72,11 @@
bleiben, ergibt sich aus der geladenen Stammfassung, nicht aus einer
Länderkennung. Ebenso folgt das Zitiersigel (§ oder Art.) aus den
Normköpfen der Stammfassung.
-* Änderungsgesetz: BGBl-, GVBl- oder Drucksachen-PDF (Bundestag,
- Bundesrat, Landtage) oder Klartext
+* Änderungsdokument: BGBl-, GVBl- oder Drucksachen-PDF (Bundestag,
+ Bundesrat, Landtage) oder Klartext. Die Dokumentart wird aus dem Text
+ erschlossen, nicht aus dem Dateinamen (siehe <<quellformate>>);
+ Änderungsanträge dürfen zusammen mit dem Entwurf angegeben werden, den
+ sie ändern.
[source,shell script]
----
@@ -158,9 +161,7 @@
„Dem Wortlaut werden die folgenden Abs. 1 bis 4 vorangestellt“, „Der
bisherige Wortlaut wird Abs. 5“, Halbsatz-Ziele, Klauselketten mit
gemeinsamem Schlussverb) sowie das Fortführungszeichen des GVBl (jedes
-neugefasste Aufzählungsglied öffnet erneut mit „). Meta-Änderungen an
-Drucksachen (Änderungsanträge des Landtags) sind bewusst noch nicht
-abgedeckt.
+neugefasste Aufzählungsglied öffnet erneut mit „).
Die übrigen Länder gliedern ihre Stammgesetze wie der Bund in
Paragraphen; die Unterschiede liegen im Gesetzblatt-Satz und in
@@ -178,6 +179,96 @@
`src/main/resources/sampledata/Landesrecht-Beispiele.adoc`.
+[[quellformate]]
+== Quellformate: Gesetz, Entwurf, Antrag
+
+Ein Änderungsbefehl steht nicht nur im verkündeten Gesetzblatt. Dasselbe
+Vorhaben durchläuft als Referenten-, Regierungs- und Fraktionsentwurf,
+als Änderungsantrag und als Beschlussempfehlung mehrere Fassungen, und
+die Frage „was gälte, wenn das durchkommt?“ stellt sich in jeder davon.
+ÄndGgner erschließt die Art eines Dokuments deshalb aus seinem Kopf —
+nie aus dem Dateinamen, der lügen kann (im Beispielkorpus heißt ein
+Entschließungsantrag `BT-Drs-21-7071_Beschlussempfehlung.pdf`) und nie
+aus einer Kennung, die von außen mitzugeben wäre.
+
+Unterschieden werden:
+
+Änderungsgesetz::
+ Das verkündete Artikelgesetz aus BGBl, GVBl oder GVOBl. Der Regelfall.
+Gesetzentwurf::
+ Referenten-, Regierungs- und Fraktionsentwürfe, auch als Drucksache von
+ Bundestag, Bundesrat oder Landtag. Der Begründungsteil hinter dem
+ Regelungstext erzeugt keine Befehle; erkannt wird er an „Begründung“
+ ebenso wie an den Entwurfsvarianten („A. Allgemeiner Teil“, „Zu
+ Artikel 1“).
+Änderungsantrag::
+ Ändert nicht das Stammgesetz, sondern eine *Drucksache* — siehe unten.
+Beschlussempfehlung::
+ Trägt ihre Fassung in einer zweispaltigen Zusammenstellung. Erkannt,
+ aber noch nicht angewandt (siehe unten).
+Dokument ohne Änderungsbefehle::
+ Entschließungs- und schlichter Antrag, Plenarprotokoll, Bericht. Sie
+ werden übergangen und gemeldet — nicht stillschweigend zu null
+ Befehlen verarbeitet.
+
+Sobald ein Entwurf, ein Antrag oder eine Beschlussempfehlung beteiligt
+ist, trägt die Synopse den Hinweis *Entwurfsfassung — nicht geltendes
+Recht*; die Quellenzeile nennt je Datei die erkannte Art.
+
+=== Änderungsanträge
+
+Ein Änderungsantrag ist eine Meta-Änderung: Er ändert den Entwurf, nicht
+das Gesetz. Sein Rahmensatz adressiert deshalb zwei Ebenen zugleich —
+„In § 3 Nr. 22 wird § 18 Nr. 1 wie folgt geändert:“ nennt erst die
+Stelle _in der Drucksache_ (den 22. Änderungsbefehl ihres dritten
+Paragraphen) und dann die Stelle _in dem Text, den dieser Befehl
+zitiert_. Angegeben wird der Antrag zusammen mit seinem Entwurf:
+
+[source,shell script]
+----
+java -jar target/aendggner-0.1.0-SNAPSHOT.jar \
+ BayJG-alt.txt Ltg-Drs-19-9707_Gesetzentwurf.pdf \
+ Ltg-Drs-19-10365_Aenderungsantrag-Gruene.pdf -o synopse.html
+----
+
+ÄndGgner wendet dann erst den Antrag auf den Entwurf an und danach den
+so geänderten Entwurf auf das Stammgesetz; die Synopse zeigt also, was
+gälte, wenn Entwurf _und_ Antrag durchkämen. Welcher Entwurf gemeint
+ist, entscheidet die Drucksachennummer, die der Antrag selbst nennt
+(„(Drs. 19/9707)“), nicht die Reihenfolge der Argumente. Fehlt der
+Entwurf, bleibt der Antrag unangewandt und wird gemeldet — ihn
+ersatzweise auf das Stammgesetz loszulassen wäre falsch, denn seine
+Stellenangaben zielen auf die Drucksache. Erkannt wird auch die
+elliptische Antragsform, die das Hilfsverb nur einmal in der
+Beschlussformel führt („1. In Nr. 1.29 die Angabe „,“ am Ende durch die
+Angabe „;“ ersetzt.“).
+
+=== Beschlussempfehlungen: erkannt, noch nicht angewandt
+
+Die maßgebliche Fassung einer Beschlussempfehlung steht in einer
+zweispaltigen Zusammenstellung: links der Entwurf, rechts die Beschlüsse
+des Ausschusses. Die Spaltentrennung ist erledigt und belegt — anders
+als beim alten BGBl und beim Berliner GVBl stehen die Spalten *nicht*
+nacheinander im Inhaltsstrom, sondern zeilenweise verschränkt, weshalb
+sie erstmals koordinatenbasiert getrennt werden (`PatchTextExtraktor.
+extrahiereSpalten`, Schnitt an der Blattmitte, aber nur an einem
+tatsächlichen Spaltensteg, damit ganzseitenbreite Zeilen ungeschnitten
+bleiben). Der Akzeptanztest hält fest, dass die linke Spalte Befehl für
+Befehl den Regierungsentwurf ergibt, aus dem die Zusammenstellung gebaut
+ist.
+
+Was fehlt, ist die Auflösung der rechten Spalte. Sie druckt Unverändertes
+nicht ab, sondern vermerkt bloß „unverändert“ — und zwar nicht nur je
+Gliederungspunkt, sondern auch zeilenweise innerhalb zitierter Blöcke.
+Dadurch ist die rechte Spalte für sich genommen kein vollständiges
+Dokument: Ihre Anführungszeichen gehen nicht auf. Eine Auflösung über
+Gliederungspfade allein scheitert daran nachweislich; nötig ist die
+zeilenweise Zuordnung beider Spalten über ihre gemeinsame Grundlinie im
+PDF. Bis dahin wird eine Beschlussempfehlung erkannt und mit Begründung
+übergangen — samt Hinweis auf die Drucksachennummer des Entwurfs, der
+sich stattdessen eignet. Eine halb aufgelöste Fassung auszugeben wäre
+schlimmer als keine.
+
[[web]]
== Web-App