blob: d3050ec135ca1230853b210d4b3c5ce635af3763 [file] [log] [blame]
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +01001= ÄndGgner -- Programmbibliothek zur Konsolidierung von Änderungsgesetzen des Bundes und der Länder
2Matthias Andreas Benkard
3// Meta
4:experimental:
5:data-uri:
6:sectnums:
7:toc:
8:stem:
9:toclevels: 2
10:description: ÄndGgner Manual
11:keywords: mulk
12// Settings
13:icons: font
14:source-highlighter: pygments
15
16
17== Resources
18
19|===
20|Resource |Links
21
22|Public Artifact
23|https://bintray.com/mulk/maven/aendggner[Bintray]
24
25|Bug Tracker
26|MantisBT
27|===
28
29
30[[building]]
31== Building a JAR
32
Matthias Andreas Benkardc7f11362020-11-22 15:01:07 +010033To build an executable JAR at `target/aendggner-${REVISION}.jar`:
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +010034
35[source,shell script]
36----
37./mvnw package
38----
39
40`${REVISION}` defaults to `0.1.0-SNAPSHOT` unless you override it by
41passing the `-Drevision` flag to `mvnw`.
42
43
44== Running the Command Line Application
45
46To run the command line application after <<building,building>> it:
47
48[source,shell script]
49----
50./mvnw exec:java
51----
52
53
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +020054[[usage]]
55== Usage
56
57ÄndGgner erzeugt aus einem Stammgesetz und einem Änderungsgesetz eine
58zweispaltige HTML-Synopse (alte Fassung links, neue rechts, Änderungen
59wortweise hervorgehoben).
60
61Eingaben:
62
Matthias Andreas Benkard65eff082026-07-18 12:24:32 +020063* Stammgesetz (Bundesrecht): XML im gii-norm-Format von
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +020064 https://www.gesetze-im-internet.de/[gesetze-im-internet.de]
Matthias Andreas Benkard2cfea002026-07-26 13:32:26 +020065* Stammgesetz (Landesrecht): konsolidierte Fassung als PDF oder als
Matthias Andreas Benkardbac648b2026-07-28 07:51:09 +020066 kanonischer Klartext im Format der `--extract-only`-Ausgabe. Eine Zeile
67 Inhaltsübersicht eröffnet darin die gleichnamige Norm, auf die die
68 Angabe-Befehle zielen; ihre Zeilen tragen das Übersichtsformat
69 „§ N | Titel“. Amtliche
Matthias Andreas Benkard65eff082026-07-18 12:24:32 +020070 Satznummern und Fußnotenmarker stehen als Unicode-Superskripte im
Matthias Andreas Benkard2cfea002026-07-26 13:32:26 +020071 Text („¹Die freilebende Tierwelt …“, Enteignung⁶)“); ob sie erhalten
72 bleiben, ergibt sich aus der geladenen Stammfassung, nicht aus einer
73 Länderkennung. Ebenso folgt das Zitiersigel oder Art.) aus den
74 Normköpfen der Stammfassung.
Matthias Andreas Benkard65eff082026-07-18 12:24:32 +020075* Änderungsgesetz: BGBl-, GVBl- oder Drucksachen-PDF (Bundestag,
Matthias Andreas Benkard2cfea002026-07-26 13:32:26 +020076 Bundesrat, Landtage) oder Klartext
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +020077
78[source,shell script]
79----
80java -jar target/aendggner-0.1.0-SNAPSHOT.jar \
81 stammgesetz.xml aenderungsgesetz.pdf -o synopse.html
82----
83
84Wichtige Optionen:
85
86`-o, --output <file>`::
87 Ausgabedatei (Default `synopse.html`; `-` = Standardausgabe).
88`--vollstaendig`::
89 Auch unveränderte Normen in die Synopse aufnehmen.
90`--artikel <n>`::
91 Nur diesen Artikel des Änderungsgesetzes anwenden (Default: alle
92 Artikel, deren Einleitung das Stammgesetz nennt).
93`--extract-only`::
94 Nur den bereinigten Lineartext des Änderungsgesetzes ausgeben. Nützlich,
95 wenn die PDF-Extraktion fehlerhaft ist: Text prüfen, von Hand
96 korrigieren und als Klartextdatei wieder einspeisen.
97
98Erkannt werden die gebräuchlichsten Änderungsbefehle des Handbuchs der
99Rechtsförmlichkeit (Ersetzen, Neufassung, Einfügen, Anfügen, Aufheben,
Matthias Andreas Benkardebd5a7b2026-07-15 20:54:27 +0200100Streichen, Umnummerierung) einschließlich zahlreicher Sonderformen:
101Bereichs- und Koordinationsziele („Die Absätze 8 und 9 werden durch die
102folgenden Absätze 8 bis 10 ersetzt“), strukturelle Streichungen ganzer
103Einheiten („§ 9 wird gestrichen“), §- und Gliederungs-Umnummerierungen
104(„§ 9a wird zu § 9“, Der bisherige Abschnitt 2 wird zu Abschnitt 3“),
Matthias Andreas Benkardb7e9f0f2026-07-16 21:12:08 +0200105das Einfügen/Ersetzen ganzer §-Blöcke, Chapeau-Lokatoren („Im
106Satzteil vor Nummer 1 …“), Änderungen an Anhängen und Anlagen („Der
107Anhang wird wie folgt geändert: Nach Nummer 2 wird die folgende
108Nummer 2a eingefügt“), Angabe-Befehle auf die Inhaltsübersicht (gefasst,
109ersetzt, eingefügt, gestrichen sie werden auf die
110Inhaltsübersichts-Norm angewandt), das Einfügen und Ersetzen von
111Gliederungsberschriften („Nach § 33 werden die folgenden Überschriften
112zu Teil 3 eingefügt“), Voranstellungen, Mehrfach-Ersetzungs- und
Matthias Andreas Benkard5f30f562026-07-28 06:00:16 +0200113-Einfügepaare, Einfügungen, deren Position ein Wortanker statt einer
114Stellenangabe bestimmt („Vor den Wörtern Aus dem Bereich Verkehr:“ wird
115folgender Absatz 5 eingefügt“), Verbünde aus Umnummerierung und
Matthias Andreas Benkardbac648b2026-07-28 07:51:09 +0200116Folgeänderung („§ 50 wird zu § 38 und wird wie folgt geändert“),
117Verb-Rahmen, deren Unterpunkte allein die Fundstelle tragen („Es werden
118ersetzt: in § 35 Absatz 3 die Angabe X jeweils durch die Angabe
119Y“,“) sowie die Neufassung der Gesetzesüberschrift.
120
121Angewandt wird nicht stur in Dokumentreihenfolge: Umnummerierungen
122beziehen sich stets auf die ursprüngliche Zählung, nicht auf den Stand
123nach den vorangegangenen Punkten. Wer eine Bezeichnung räumt, kommt
124deshalb vor den, der sie neu besetzt. Aus dieser einen Regel folgt die
125absteigende Abarbeitung einer aufsteigenden Kaskade („Der bisherige
126Absatz 3 wird Absatz 4“, Der bisherige Absatz 4 wird Absatz 5“, …)
127ebenso wie der Vorrang einer Umnummerierung vor der Einfügung, die deren
128Bezeichnung neu vergibt. Verschoben wird dabei nur nach vorn, sodass
129jede Folgeänderung hinter der Umnummerierung bleibt, auf deren neue
130Bezeichnung sie zeigt. Die PDF-Aufbereitung toleriert dabei
Matthias Andreas Benkardb7e9f0f2026-07-16 21:12:08 +0200131Drucksachen-Artefakte (Seitenköpfe und -füße, Vorabfassungs-Wasserzeichen,
Matthias Andreas Benkard5f30f562026-07-28 06:00:16 +0200132vertauschte oder gerade Anführungszeichen, verklebte Wortgrenzen, zerlegt
133kodierte Umlaute) und bestimmt die Brotschrift seitenweise, sodass auch
134Ministeriumsentwürfe mit gemischten Layouts vollständig extrahiert
135werden. Fehlt im amtlichen Satz ein schließendes Anführungszeichen, endet
136das Zitat an der nächsten Strukturgrenze an einer Artikelberschrift
137oder, wo die Anführungszeichen eines Artikels nachweislich nicht
138aufgehen, am nächsten Aufzählungspunkt des Änderungsgesetzes; gemeldet
139wird das als Warnung. Auf den
Matthias Andreas Benkardb7e9f0f2026-07-16 21:12:08 +0200140Beispieldaten werden damit alle Befehle der BGBl-Fassungen und der
141aktuellen Entwürfe angewandt (UWG/AGG/ProdHaftG: 0 manuell); was
142unsicher bleibt etwa Befehle gegen eine ältere Gesetzesfassung, deren
143Zieltext nicht mehr existiert landet mit Begründung im Abschnitt
144*Manuell prüfen* der Synopse und wird niemals stillschweigend verworfen.
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +0200145
Matthias Andreas Benkard65eff082026-07-18 12:24:32 +0200146Für das bayerische Landesrecht versteht ÄndGgner die dortigen
147Konventionen: Stammgesetze gliedern sich in Artikel („Art. 6 Abs. 2
148Satz 1 Nr. 2“, durchgängig abgekürzt zitiert), Änderungsgesetze dagegen
149in Paragraphen auch mehrere Gesetze in einem GVBl-Heft, aus denen die
150auf das Stammgesetz zielenden §§ (einschließlich Weitere Änderung“)
151anhand des Einleitungssatzes ausgewählt werden. Amtliche Satznummern
152bleiben als Superskripte erhalten und dienen als exakte Satzgrenzen;
153zusätzlich erkannt werden die bayerischen Befehlsformen („Fußnote 1
154wird aufgehoben“, In Satz 1 wird die Satznummerierung 1 gestrichen“,
155Dem Wortlaut werden die folgenden Abs. 1 bis 4 vorangestellt“, Der
156bisherige Wortlaut wird Abs. 5“, Halbsatz-Ziele, Klauselketten mit
157gemeinsamem Schlussverb) sowie das Fortführungszeichen des GVBl (jedes
158neugefasste Aufzählungsglied öffnet erneut mit „). Metanderungen an
159Drucksachen nderungsanträge des Landtags) sind bewusst noch nicht
160abgedeckt.
161
Matthias Andreas Benkard2cfea002026-07-26 13:32:26 +0200162Die übrigen Länder gliedern ihre Stammgesetze wie der Bund in
163Paragraphen; die Unterschiede liegen im Gesetzblatt-Satz und in
164Befehlsidiomen. Belegt sind Sachsen (SächsBeamtVG), Niedersachsen
Matthias Andreas Benkardbac648b2026-07-28 07:51:09 +0200165(NEFG) und Nordrhein-Westfalen (Telemedienzuständigkeitsgesetz,
166Landesmediengesetz und mit 101 Befehlen an 31 Normen der größte
167Landesrechtsfall das WDR-Gesetz) mit Akzeptanztests gegen die
168amtlichen Nachfassungen; für Schleswig-Holstein und Berlin
Matthias Andreas Benkard5f30f562026-07-28 06:00:16 +0200169reicht die Prüfung bis zur Befehlserkennung dort vollständig, aber ohne
170Anwendung —, weil deren Landesportale ihre Stammfassungen nur über eine
171anmeldepflichtige Schnittstelle ausgeben. Welche Konvention welches Land beisteuert, welche
Matthias Andreas Benkard2cfea002026-07-26 13:32:26 +0200172Stammfassungen woher stammen und was noch offen ist, verzeichnet
173`src/main/resources/sampledata/Landesrecht-Beispiele.adoc`.
174
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +0200175
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +0100176== Running the Tests
177
178To build and run the tests:
179
180[source,shell script]
181----
182./mvnw verify
183----