From 7235b34eeb6ff331c152116cbe4df846d7476110 Mon Sep 17 00:00:00 2001
From: Matthias Andreas Benkard <code@mail.matthias.benkard.de>
Date: Fri, 14 Aug 2026 18:58:25 +0200
Subject: =?UTF-8?q?Quellformate=20jenseits=20des=20verk=C3=BCndeten=20Gese?=
 =?UTF-8?q?tzes?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

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
---
 README.adoc | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 96 insertions(+), 5 deletions(-)

(limited to 'README.adoc')

diff --git a/README.adoc b/README.adoc
index b092904..a29b7ac 100644
--- a/README.adoc
+++ b/README.adoc
@@ -72,8 +72,11 @@ Eingaben:
   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 @@ wird aufgehoben“, „In Satz 1 wird die Satznummerierung „1“ gestrichen“
 „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 @@ Stammfassungen woher stammen und was noch offen ist, verzeichnet
 `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
 
-- 
cgit v1.2.1

