blob: dc1893dd603aca80a41d95a49d61da08f510807e [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
66 kanonischer Klartext im Format der `--extract-only`-Ausgabe. Amtliche
Matthias Andreas Benkard65eff082026-07-18 12:24:32 +020067 Satznummern und Fußnotenmarker stehen als Unicode-Superskripte im
Matthias Andreas Benkard2cfea002026-07-26 13:32:26 +020068 Text („¹Die freilebende Tierwelt …“, Enteignung⁶)“); ob sie erhalten
69 bleiben, ergibt sich aus der geladenen Stammfassung, nicht aus einer
70 Länderkennung. Ebenso folgt das Zitiersigel oder Art.) aus den
71 Normköpfen der Stammfassung.
Matthias Andreas Benkard65eff082026-07-18 12:24:32 +020072* Änderungsgesetz: BGBl-, GVBl- oder Drucksachen-PDF (Bundestag,
Matthias Andreas Benkard2cfea002026-07-26 13:32:26 +020073 Bundesrat, Landtage) oder Klartext
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +020074
75[source,shell script]
76----
77java -jar target/aendggner-0.1.0-SNAPSHOT.jar \
78 stammgesetz.xml aenderungsgesetz.pdf -o synopse.html
79----
80
81Wichtige Optionen:
82
83`-o, --output <file>`::
84 Ausgabedatei (Default `synopse.html`; `-` = Standardausgabe).
85`--vollstaendig`::
86 Auch unveränderte Normen in die Synopse aufnehmen.
87`--artikel <n>`::
88 Nur diesen Artikel des Änderungsgesetzes anwenden (Default: alle
89 Artikel, deren Einleitung das Stammgesetz nennt).
90`--extract-only`::
91 Nur den bereinigten Lineartext des Änderungsgesetzes ausgeben. Nützlich,
92 wenn die PDF-Extraktion fehlerhaft ist: Text prüfen, von Hand
93 korrigieren und als Klartextdatei wieder einspeisen.
94
95Erkannt werden die gebräuchlichsten Änderungsbefehle des Handbuchs der
96Rechtsförmlichkeit (Ersetzen, Neufassung, Einfügen, Anfügen, Aufheben,
Matthias Andreas Benkardebd5a7b2026-07-15 20:54:27 +020097Streichen, Umnummerierung) einschließlich zahlreicher Sonderformen:
98Bereichs- und Koordinationsziele („Die Absätze 8 und 9 werden durch die
99folgenden Absätze 8 bis 10 ersetzt“), strukturelle Streichungen ganzer
100Einheiten („§ 9 wird gestrichen“), §- und Gliederungs-Umnummerierungen
101(„§ 9a wird zu § 9“, Der bisherige Abschnitt 2 wird zu Abschnitt 3“),
Matthias Andreas Benkardb7e9f0f2026-07-16 21:12:08 +0200102das Einfügen/Ersetzen ganzer §-Blöcke, Chapeau-Lokatoren („Im
103Satzteil vor Nummer 1 …“), Änderungen an Anhängen und Anlagen („Der
104Anhang wird wie folgt geändert: Nach Nummer 2 wird die folgende
105Nummer 2a eingefügt“), Angabe-Befehle auf die Inhaltsübersicht (gefasst,
106ersetzt, eingefügt, gestrichen sie werden auf die
107Inhaltsübersichts-Norm angewandt), das Einfügen und Ersetzen von
108Gliederungsberschriften („Nach § 33 werden die folgenden Überschriften
109zu Teil 3 eingefügt“), Voranstellungen, Mehrfach-Ersetzungs- und
Matthias Andreas Benkard5f30f562026-07-28 06:00:16 +0200110-Einfügepaare, Einfügungen, deren Position ein Wortanker statt einer
111Stellenangabe bestimmt („Vor den Wörtern Aus dem Bereich Verkehr:“ wird
112folgender Absatz 5 eingefügt“), Verbünde aus Umnummerierung und
113Folgeänderung („§ 50 wird zu § 38 und wird wie folgt geändert“) sowie die
114Neufassung der Gesetzesüberschrift. Die PDF-Aufbereitung toleriert dabei
Matthias Andreas Benkardb7e9f0f2026-07-16 21:12:08 +0200115Drucksachen-Artefakte (Seitenköpfe und -füße, Vorabfassungs-Wasserzeichen,
Matthias Andreas Benkard5f30f562026-07-28 06:00:16 +0200116vertauschte oder gerade Anführungszeichen, verklebte Wortgrenzen, zerlegt
117kodierte Umlaute) und bestimmt die Brotschrift seitenweise, sodass auch
118Ministeriumsentwürfe mit gemischten Layouts vollständig extrahiert
119werden. Fehlt im amtlichen Satz ein schließendes Anführungszeichen, endet
120das Zitat an der nächsten Strukturgrenze an einer Artikelberschrift
121oder, wo die Anführungszeichen eines Artikels nachweislich nicht
122aufgehen, am nächsten Aufzählungspunkt des Änderungsgesetzes; gemeldet
123wird das als Warnung. Auf den
Matthias Andreas Benkardb7e9f0f2026-07-16 21:12:08 +0200124Beispieldaten werden damit alle Befehle der BGBl-Fassungen und der
125aktuellen Entwürfe angewandt (UWG/AGG/ProdHaftG: 0 manuell); was
126unsicher bleibt etwa Befehle gegen eine ältere Gesetzesfassung, deren
127Zieltext nicht mehr existiert landet mit Begründung im Abschnitt
128*Manuell prüfen* der Synopse und wird niemals stillschweigend verworfen.
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +0200129
Matthias Andreas Benkard65eff082026-07-18 12:24:32 +0200130Für das bayerische Landesrecht versteht ÄndGgner die dortigen
131Konventionen: Stammgesetze gliedern sich in Artikel („Art. 6 Abs. 2
132Satz 1 Nr. 2“, durchgängig abgekürzt zitiert), Änderungsgesetze dagegen
133in Paragraphen auch mehrere Gesetze in einem GVBl-Heft, aus denen die
134auf das Stammgesetz zielenden §§ (einschließlich Weitere Änderung“)
135anhand des Einleitungssatzes ausgewählt werden. Amtliche Satznummern
136bleiben als Superskripte erhalten und dienen als exakte Satzgrenzen;
137zusätzlich erkannt werden die bayerischen Befehlsformen („Fußnote 1
138wird aufgehoben“, In Satz 1 wird die Satznummerierung 1 gestrichen“,
139Dem Wortlaut werden die folgenden Abs. 1 bis 4 vorangestellt“, Der
140bisherige Wortlaut wird Abs. 5“, Halbsatz-Ziele, Klauselketten mit
141gemeinsamem Schlussverb) sowie das Fortführungszeichen des GVBl (jedes
142neugefasste Aufzählungsglied öffnet erneut mit „). Metanderungen an
143Drucksachen nderungsanträge des Landtags) sind bewusst noch nicht
144abgedeckt.
145
Matthias Andreas Benkard2cfea002026-07-26 13:32:26 +0200146Die übrigen Länder gliedern ihre Stammgesetze wie der Bund in
147Paragraphen; die Unterschiede liegen im Gesetzblatt-Satz und in
148Befehlsidiomen. Belegt sind Sachsen (SächsBeamtVG), Niedersachsen
149(NEFG) und Nordrhein-Westfalen (Telemedienzuständigkeitsgesetz) mit
150vollen Akzeptanztests ohne Rest; für Schleswig-Holstein und Berlin
Matthias Andreas Benkard5f30f562026-07-28 06:00:16 +0200151reicht die Prüfung bis zur Befehlserkennung dort vollständig, aber ohne
152Anwendung —, weil deren Landesportale ihre Stammfassungen nur über eine
153anmeldepflichtige Schnittstelle ausgeben. Welche Konvention welches Land beisteuert, welche
Matthias Andreas Benkard2cfea002026-07-26 13:32:26 +0200154Stammfassungen woher stammen und was noch offen ist, verzeichnet
155`src/main/resources/sampledata/Landesrecht-Beispiele.adoc`.
156
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +0200157
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +0100158== Running the Tests
159
160To build and run the tests:
161
162[source,shell script]
163----
164./mvnw verify
165----