blob: a5ae13ef95d43effb15ae5ef9e4271b85530a754 [file] [log] [blame]
Matthias Andreas Benkard856c0972026-08-16 06:56:05 +02001= ÄndGgner -- Nichtamtliche Zentralstelle für die maschinelle Fortschreibung von Stammgesetzen anhand von Änderungsvorschriften des Bundes und der Länder
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +01002Matthias Andreas Benkard
3// Meta
4:experimental:
5:data-uri:
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +02006:sectnums!:
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +01007:toc:
8:stem:
9:toclevels: 2
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +020010:description: Handbuch der Nichtamtlichen Zentralstelle für die maschinelle Fortschreibung von Stammgesetzen: Werkzeug, das Änderungsgesetze und Gesetzentwürfe selbsttätig auf ein Stammgesetz anwendet und das Ergebnis als Synopse ausgibt
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +010011:keywords: mulk
12// Settings
13:icons: font
14:source-highlighter: pygments
15
16
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +020017[.lead]
18Ein Änderungsgesetz sagt nicht, was künftig gilt. Es sagt nur, was zu tun ist:
19In § 4 Absatz 2 Satz 1 werden die Wörter X durch die Wörter Y ersetzt.“
20Wer wissen will, wie die Vorschrift danach lautet, muss Hunderte solcher Befehle
21von Hand nachvollziehen und wer wissen will, was ein Entwurf bewirken _würde_,
22findet in keinem amtlichen Angebot eine Antwort, denn konsolidiert wird erst nach
23der Verkündung.
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +010024
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +020025ÄndGgner nimmt diese Arbeit ab. Eingegeben werden ein Stammgesetz in geltender
26Fassung und ein oder mehrere Änderungsdokumente verkündete Änderungsgesetze aus
27dem Bundesgesetzblatt und den Gesetz- und Verordnungsblättern der Länder ebenso
28wie Referenten-, Regierungs- und Fraktionsentwürfe, Änderungsanträge und
29Beschlussempfehlungen. Ausgegeben wird eine zweispaltige Synopse: links die
30bisherige, rechts die künftige Fassung, die Unterschiede wortweise hervorgehoben.
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +010031
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +020032[source,shell script]
33----
34./mvnw package
35java -jar target/aendggner-0.1.0-SNAPSHOT.jar stammgesetz.xml aenderungsgesetz.pdf -o synopse.html
36----
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +010037
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +020038Ohne Einrichtung läuft dasselbe im Browser unter
39https://matthias.benkard.de/aendggner/; die dort angebotenen zwei
40durchgerechneten Beispiele sind der kürzeste Weg zum ersten Ergebnis
41 14).
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +010042
43
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +020044[[gegenstand]]
45== § 1 Gegenstand und Zweck
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +010046
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +020047(1) Dieses Handbuch regelt Herstellung, Betrieb und Anwendung des
48Softwareerzeugnisses „ÄndGgner (nachstehend: das Erzeugnis).
49
50(2) Das Erzeugnis dient der maschinellen Fortschreibung von Stammgesetzen anhand
51von Änderungsvorschriften des Bundes und der Länder. Es erschließt aus einem
52Änderungsdokument die darin enthaltenen Änderungsbefehle, wendet sie auf die
53geltende Fassung des Stammgesetzes an und stellt beide Fassungen einander
54gegenüber.
55
56(3) Das Erzeugnis ist nichtamtlich. Seine Ausgabe ist weder eine amtliche
57Bekanntmachung noch eine Rechtsauskunft; maßgeblich bleibt allein der Wortlaut
58des Gesetz- und Verordnungsblattes. Bei Entwürfen, Anträgen und
59Beschlussempfehlungen zeigt die Synopse überdies nur, was gälte, wenn die Vorlage
60so beschlossen würde; sie trägt hierauf den Hinweis *Entwurfsfassung nicht
61geltendes Recht*.
62
63(4) Es gilt der Grundsatz der Nichtverwerfung: Ein Befehl, der sich nicht
64zweifelsfrei anwenden lässt etwa weil er gegen eine ältere Gesetzesfassung
65gerichtet ist, deren Zieltext nicht mehr besteht —, wird mitsamt der Begründung
66seines Scheiterns in den Abschnitt *Manuell prüfen* der Synopse aufgenommen. Er
67wird niemals stillschweigend übergangen.
68
69
70[[begriffe]]
71== § 2 Begriffsbestimmungen
72
73Im Sinne dieses Handbuchs ist
74
75Stammgesetz::
76 das zu ändernde Gesetz in seiner geltenden (konsolidierten) Fassung, also
77 dasjenige Werk, dessen Fortschreibung begehrt wird. Bundesrecht wird als
78 gii-Norm-XML von https://www.gesetze-im-internet.de/[gesetze-im-internet.de]
79 angenommen, Landesrecht als konsolidierte Fassung aus dem jeweiligen
80 Landesportal 5).
81Änderungsdokument::
82 das Werk, das die Änderung anordnet. Hierzu zählen das verkündete
83 Änderungsgesetz, der Gesetzentwurf, der Änderungsantrag und die
84 Beschlussempfehlung 10).
85Änderungsbefehl::
86 die einzelne Anordnung innerhalb des Änderungsdokuments, gerichtet auf eine
87 bestimmte Stelle des Stammgesetzes („In § 4 Absatz 2 Satz 1 werden die Wörter
88 X durch die Wörter Y ersetzt“). Welche Befehlsformen erkannt werden,
89 bestimmt § 7.
90Norm::
91 die kleinste selbständig bezeichnete Einheit des Stammgesetzes, im Bundesrecht
92 und im Landesrecht der übrigen Länder der Paragraph, im bayerischen Landesrecht
93 der Artikel 13). Auch die Inhaltsübersicht und die Gesetzesüberschrift
94 werden als Normen geführt, weil Änderungsbefehle auf sie zielen.
95Synopse::
96 die Ausgabe des Erzeugnisses: eine zweispaltige Gegenüberstellung der bisherigen
97 und der künftigen Fassung im Format HTML, gefolgt vom Protokoll der Anwendung
98 und dem Abschnitt *Manuell prüfen* nach § 1 Absatz 4.
99Angewandt::
100 gilt ein Befehl erst, wenn er im Wortlaut des Stammgesetzes gegriffen hat. Bei
101 Verbünden mehrerer Teile 8 Absatz 3) gilt der Befehl nur dann als angewandt,
102 wenn jeder seiner Teile gegriffen hat.
103
104
105[[bezugsquellen]]
106== § 3 Bezugsquellen und Anschriften
107
108(1) Die Browserfassung wird betrieben unter
109https://matthias.benkard.de/aendggner/.
110
111(2) Fortlaufende Quelltextquelle ist
112https://gerrit.benkard.de/plugins/gitiles/aendggner. Die jeweils betriebene
113Fassung liegt der Browserfassung überdies als `aendggner-quelltext.tar.gz` bei
Matthias Andreas Benkardf3b47af2026-08-22 21:23:06 +0200114 15 Absatz 5).
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200115
116(3) Das Erzeugnis steht unter der GNU Affero General Public License, Fassung 3;
117der Lizenztext ist der Datei `COPYING` zu entnehmen.
118
119(4) Der Stand des Quelltextes wird nach Kalendertagen im Verzeichnis der
120Fassungen (`FASSUNGEN.txt`) geführt.
121
122
123[[herstellung]]
124== § 4 Herstellung des Erzeugnisses
125
126(1) Die ausführbare Archivdatei wird durch den nachstehenden Befehl unter
127`target/aendggner-${REVISION}.jar` erzeugt:
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +0100128
129[source,shell script]
130----
131./mvnw package
132----
133
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200134(2) Die Fassungsbezeichnung `${REVISION}` nach Absatz 1 lautet
135`0.1.0-SNAPSHOT`, soweit sie nicht durch Übergabe des Schalters `-Drevision` an
136`mvnw` abweichend bestimmt wird.
137
138(3) Vorausgesetzt wird ein Java-Entwicklungsbausatz der Fassung 21 oder neuer.
139Für die Herstellung der Browserfassung gilt abweichend § 14 Absatz 3.
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +0100140
141
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200142[[eingaben]]
143== § 5 Zulässige Eingaben
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +0100144
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200145(1) Als Stammgesetz des Bundes wird XML im gii-norm-Format von
146https://www.gesetze-im-internet.de/[gesetze-im-internet.de] angenommen. Das
147Portal gibt seine Werke nur als Archiv aus (`…/<kurz>/xml.zip`); das Archiv wird
148unmittelbar angenommen und der enthaltene XML-Eintrag daraus entpackt, ein
149Zwischenschritt von Hand entfällt.
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +0100150
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200151(2) Als Stammgesetz eines Landes wird die konsolidierte Fassung als PDF oder als
152kanonischer Klartext im Format der `--extract-only`-Ausgabe 6 Absatz 2)
153angenommen. Hierbei gilt:
154
1551. Eine Zeile Inhaltsübersicht eröffnet die gleichnamige Norm, auf die die
156 Angabe-Befehle zielen; ihre Zeilen tragen das Übersichtsformat
157 „§ N | Titel“.
1582. Amtliche Satznummern und Fußnotenmarker stehen als Unicode-Superskripte im
159 Text („¹Die freilebende Tierwelt …“, Enteignung⁶)“). Ob sie erhalten bleiben,
160 ergibt sich aus der geladenen Stammfassung, nicht aus einer Länderkennung.
1613. Das Zitiersigel oder Art.) folgt gleichfalls aus den Normköpfen der
162 Stammfassung.
163
164(3) Als Änderungsdokument werden PDF-Dateien des Bundesgesetzblattes, der
165Gesetz- und Verordnungsblätter der Länder und der Drucksachen von Bundestag,
166Bundesrat und Landtagen sowie Klartext angenommen. Die Dokumentart wird aus dem
167Text erschlossen, nicht aus dem Dateinamen 10). Änderungsanträge dürfen
168zusammen mit demjenigen Entwurf angegeben werden, den sie ändern 11).
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +0100169
170
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200171[[betrieb]]
172== § 6 Betrieb der Befehlszeilenfassung
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +0200173
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200174(1) Nach der Herstellung nach § 4 wird das Erzeugnis wie folgt aufgerufen:
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +0200175
176[source,shell script]
177----
178java -jar target/aendggner-0.1.0-SNAPSHOT.jar \
179 stammgesetz.xml aenderungsgesetz.pdf -o synopse.html
180----
181
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200182(2) Von den Schaltern sind die folgenden von allgemeiner Bedeutung:
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +0200183
184`-o, --output <file>`::
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200185 Ausgabedatei (Vorgabe `synopse.html`; `-` bezeichnet die Standardausgabe).
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +0200186`--vollstaendig`::
187 Auch unveränderte Normen in die Synopse aufnehmen.
188`--artikel <n>`::
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200189 Nur den bezeichneten Artikel des Änderungsgesetzes anwenden. Ohne diese Angabe
190 werden alle Artikel angewandt, deren Einleitung das Stammgesetz nennt.
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +0200191`--extract-only`::
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200192 Nur den bereinigten Lineartext des Änderungsdokuments ausgeben. Dies ist
193 angezeigt, wenn die PDF-Aufbereitung 9) fehlerhaft bleibt: Der Text ist zu
194 prüfen, von Hand zu berichtigen und als Klartextdatei wieder einzuspeisen.
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +0200195
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200196(3) Ein Aufruf unmittelbar aus dem Arbeitsbaum, ohne vorherige Herstellung nach
197§ 4, ist zulässig:
Matthias Andreas Benkardbac648b2026-07-28 07:51:09 +0200198
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200199[source,shell script]
200----
201./mvnw exec:java
202----
Matthias Andreas Benkard74a84c52026-08-16 06:08:42 +0200203
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200204(4) Die vollständige Schalterliste einschließlich der Schalter für die
205Fehlersuche gibt `--help` aus.
Matthias Andreas Benkard74a84c52026-08-16 06:08:42 +0200206
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +0200207
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200208[[befehle]]
209== § 7 Erkannte Änderungsbefehle
Matthias Andreas Benkard65eff082026-07-18 12:24:32 +0200210
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200211(1) Erkannt werden die gebräuchlichsten Änderungsbefehle des Handbuchs der
212Rechtsförmlichkeit, nämlich Ersetzen, Neufassung, Einfügen, Anfügen, Aufheben,
213Streichen und Umnummerierung.
214
215(2) Von den Sonderformen sind erkannt:
216
2171. Bereichs- und Koordinationsziele („Die Absätze 8 und 9 werden durch die
218 folgenden Absätze 8 bis 10 ersetzt“);
2192. strukturelle Streichungen ganzer Einheiten („§ 9 wird gestrichen“);
2203. §- und Gliederungs-Umnummerierungen („§ 9a wird zu § 9“, Der bisherige
221 Abschnitt 2 wird zu Abschnitt 3“);
2224. das Einfügen und Ersetzen ganzer §-Blöcke;
2235. Chapeau-Lokatoren („Im Satzteil vor Nummer 1 …“);
2246. Änderungen an Anhängen und Anlagen („Der Anhang wird wie folgt geändert:
225 Nach Nummer 2 wird die folgende Nummer 2a eingefügt“);
2267. Angabe-Befehle auf die Inhaltsübersicht (gefasst, ersetzt, eingefügt,
227 gestrichen); sie werden auf die Inhaltsübersichts-Norm angewandt;
2288. das Einfügen und Ersetzen von Gliederungsberschriften („Nach § 33 werden
229 die folgenden Überschriften zu Teil 3 eingefügt“);
2309. Voranstellungen;
23110. Mehrfach-Ersetzungs- und -Einfügepaare;
23211. Einfügungen, deren Position ein Wortanker statt einer Stellenangabe bestimmt
233 („Vor den Wörtern Aus dem Bereich Verkehr:“ wird folgender Absatz 5
234 eingefügt“);
23512. Verbünde aus Umnummerierung und Folgeänderung („§ 50 wird zu § 38 und wird
236 wie folgt geändert“, Die bisherige Nr. 7 wird Nr. 5 und das Komma wird durch
237 das Wort und ersetzt“). Eine Satzzeichen-Operation meint dabei stets die
238 soeben umnummerierte Einheit, weil ihr Zieltext nichts unterscheidet;
23913. Verb-Rahmen, deren Unterpunkte allein die Fundstelle tragen („Es werden
240 ersetzt: in § 35 Absatz 3 die Angabe X jeweils durch die Angabe Y“,“),
241 sowie
24214. die Neufassung der Gesetzesüberschrift.
243
244(3) Landesrechtliche Befehlsformen bestimmt ergänzend § 13.
245
246
247[[reihenfolge]]
248== § 8 Reihenfolge der Anwendung
249
250(1) Angewandt wird nicht stur in Dokumentreihenfolge. Umnummerierungen beziehen
251sich stets auf die ursprüngliche Zählung, nicht auf den Stand nach den
252vorangegangenen Punkten; wer eine Bezeichnung räumt, kommt deshalb vor den, der
253sie neu besetzt.
254
255(2) Aus Absatz 1 folgt
256
2571. die absteigende Abarbeitung einer aufsteigenden Kaskade („Der bisherige
258 Absatz 3 wird Absatz 4“, Der bisherige Absatz 4 wird Absatz 5“, …) sowie
2592. der Vorrang einer Umnummerierung vor derjenigen Einfügung, die deren
260 Bezeichnung neu vergibt.
261
262Wer vorrückt, nimmt dabei seine eigenen Räumer mit: Auch eine über mehrere Punkte
263verschränkte Kaskade („Die bisherige Nr. 15 wird Nr. 16“, Die bisherigen Nrn. 13
264und 14 werden die Nrn. 14 und 15“, Nach Nr. 12 wird folgende Nr. 13 eingefügt“)
265tritt geschlossen vor die Einfügung, nicht bloß mit ihrem letzten Glied.
266
267(3) Geordnet werden nicht die Befehle, sondern die einzelnen Anwendungsschritte.
268Ein Verbund aus Umnummerierung und Folgeänderung 7 Absatz 2 Nummer 12) trägt
269nämlich zwei gegenläufige zeitliche Ansprüche: Die Umnummerierung gehört nach
270vorn, die Folgeänderung dagegen an ihre Dokumentstelle, weil sie die
271vorangegangenen Punkte als vollzogen voraussetzt Die bisherige Nr. 11 wird
272Nr. 12 und die Angabe schriftliche wird gestrichen ist vorgezogen mehrdeutig,
273weil erst ein früherer Punkt die zweite Fundstelle des Wortes beseitigt.
274Verschoben wird stets nur nach vorn.
275
276(4) Das Protokoll bleibt gleichwohl befehlsweise: Ein Verbund gilt nur dann als
277angewandt, wenn jeder seiner Teile gegriffen hat; sonst nennt die Meldung den
278Teil und den Grund.
279
280
281[[aufbereitung]]
282== § 9 Aufbereitung der Druckwerke
283
284(1) Die PDF-Aufbereitung toleriert die üblichen Drucksachen-Artefakte, nämlich
285Seitenköpfe und -füße, Vorabfassungs-Wasserzeichen, vertauschte oder gerade
286Anführungszeichen, verklebte Wortgrenzen und zerlegt kodierte Umlaute. Die
287Brotschrift wird seitenweise bestimmt, sodass auch Ministeriumsentwürfe mit
288gemischten Layouts vollständig ausgelesen werden.
289
290(2) Fehlt im amtlichen Satz ein schließendes Anführungszeichen, so endet das
291Zitat an der nächsten Strukturgrenze, nämlich an einer Artikelberschrift oder
292dort, wo die Anführungszeichen eines Artikels nachweislich nicht aufgehen am
293nächsten Aufzählungspunkt des Änderungsdokuments. Der Vorgang wird als Warnung
294gemeldet.
295
296(3) Auf den Beispieldaten 17 Absatz 2) werden hiernach alle Befehle der
297Fassungen des Bundesgesetzblattes und der aktuellen Entwürfe angewandt; für
298UWG, AGG und ProdHaftG verbleibt kein Befehl zur Prüfung von Hand. Im Übrigen
299gilt § 1 Absatz 4.
300
301(4) Bleibt die Aufbereitung im Einzelfall fehlerhaft, so ist nach § 6 Absatz 2
302mittels des Schalters `--extract-only` zu verfahren.
Matthias Andreas Benkard2cfea002026-07-26 13:32:26 +0200303
Matthias Andreas Benkard58e19982026-07-13 07:09:19 +0200304
Matthias Andreas Benkard7235b342026-08-14 18:58:25 +0200305[[quellformate]]
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200306== § 10 Quellformate: Gesetz, Entwurf, Antrag
Matthias Andreas Benkard7235b342026-08-14 18:58:25 +0200307
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200308Ein Änderungsbefehl steht nicht nur im verkündeten Gesetzblatt. Dasselbe Vorhaben
309durchläuft als Referenten-, Regierungs- und Fraktionsentwurf, als Änderungsantrag
310und als Beschlussempfehlung mehrere Fassungen, und die Frage was gälte, wenn das
311durchkommt?“ stellt sich in jeder davon. Das Erzeugnis erschließt die Art eines
312Dokuments deshalb aus seinem Kopf nie aus dem Dateinamen, der lügen kann (im
313Beispielkorpus heißt ein Entschließungsantrag
314`BT-Drs-21-7071_Beschlussempfehlung.pdf`), und nie aus einer Kennung, die von
315außen mitzugeben wäre.
Matthias Andreas Benkard7235b342026-08-14 18:58:25 +0200316
317Unterschieden werden:
318
319Änderungsgesetz::
320 Das verkündete Artikelgesetz aus BGBl, GVBl oder GVOBl. Der Regelfall.
321Gesetzentwurf::
322 Referenten-, Regierungs- und Fraktionsentwürfe, auch als Drucksache von
323 Bundestag, Bundesrat oder Landtag. Der Begründungsteil hinter dem
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200324 Regelungstext erzeugt keine Befehle; erkannt wird er an Begründung ebenso wie
325 an den Entwurfsvarianten („A. Allgemeiner Teil“, Zu Artikel 1“).
Matthias Andreas Benkard7235b342026-08-14 18:58:25 +0200326Änderungsantrag::
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200327 Ändert nicht das Stammgesetz, sondern eine *Drucksache*; das Nähere bestimmt
328 § 11.
Matthias Andreas Benkard7235b342026-08-14 18:58:25 +0200329Beschlussempfehlung::
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200330 Trägt ihre Fassung in einer zweispaltigen Zusammenstellung, die aufgelöst wird;
331 die Synopse zeigt alsdann die vom Ausschuss beschlossene Fassung. Das Nähere
332 bestimmt § 12.
Matthias Andreas Benkard7235b342026-08-14 18:58:25 +0200333Dokument ohne Änderungsbefehle::
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200334 Entschließungs- und schlichter Antrag, Plenarprotokoll, Bericht. Sie werden
335 übergangen und gemeldet nicht stillschweigend zu null Befehlen verarbeitet.
Matthias Andreas Benkard7235b342026-08-14 18:58:25 +0200336
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200337Sobald ein Entwurf, ein Antrag oder eine Beschlussempfehlung beteiligt ist, trägt
338die Synopse den Hinweis *Entwurfsfassung nicht geltendes Recht* 1 Absatz 3);
339die Quellenzeile nennt je Datei die erkannte Art.
Matthias Andreas Benkard7235b342026-08-14 18:58:25 +0200340
Matthias Andreas Benkard7235b342026-08-14 18:58:25 +0200341
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200342[[antraege]]
343== § 11 Änderungsanträge
344
345(1) Ein Änderungsantrag ist eine Metanderung: Er ändert den Entwurf, nicht das
346Gesetz. Sein Rahmensatz adressiert deshalb zwei Ebenen zugleich In § 3 Nr. 22
347wird § 18 Nr. 1 wie folgt geändert:“ nennt erst die Stelle _in der Drucksache_
348(den 22. Änderungsbefehl ihres dritten Paragraphen) und dann die Stelle _in dem
349Text, den dieser Befehl zitiert_.
350
351(2) Der Antrag ist zusammen mit seinem Entwurf anzugeben:
Matthias Andreas Benkard7235b342026-08-14 18:58:25 +0200352
353[source,shell script]
354----
355java -jar target/aendggner-0.1.0-SNAPSHOT.jar \
356 BayJG-alt.txt Ltg-Drs-19-9707_Gesetzentwurf.pdf \
357 Ltg-Drs-19-10365_Aenderungsantrag-Gruene.pdf -o synopse.html
358----
359
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200360(3) Angewandt wird alsdann erst der Antrag auf den Entwurf und danach der so
361geänderte Entwurf auf das Stammgesetz; die Synopse zeigt also, was gälte, wenn
362Entwurf _und_ Antrag durchkämen. Welcher Entwurf gemeint ist, entscheidet die
363Drucksachennummer, die der Antrag selbst nennt („(Drs. 19/9707)“), nicht die
364Reihenfolge der Argumente.
365
366(4) Fehlt der Entwurf, so bleibt der Antrag unangewandt und wird gemeldet. Ihn
Matthias Andreas Benkard7235b342026-08-14 18:58:25 +0200367ersatzweise auf das Stammgesetz loszulassen wäre falsch, denn seine
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200368Stellenangaben zielen auf die Drucksache.
369
370(5) Erkannt wird auch die elliptische Antragsform, die das Hilfsverb nur einmal
371in der Beschlussformel führt („1. In Nr. 1.29 die Angabe „,“ am Ende durch die
Matthias Andreas Benkard7235b342026-08-14 18:58:25 +0200372Angabe „;“ ersetzt.“).
373
Matthias Andreas Benkard7235b342026-08-14 18:58:25 +0200374
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200375[[zusammenstellung]]
376== § 12 Beschlussempfehlungen; die beschlossene Fassung
377
378(1) Die maßgebliche Fassung einer Beschlussempfehlung steht in einer
379zweispaltigen Zusammenstellung: links der Entwurf, rechts die Beschlüsse des
380Ausschusses. Anders als beim alten BGBl und beim Berliner GVBl stehen die Spalten
381*nicht* nacheinander im Inhaltsstrom, sondern zeilenweise verschränkt; getrennt
382werden sie deshalb über die Koordinaten (`PatchTextExtraktor.extrahiereSpalten`,
383Schnitt an der Blattmitte, aber nur an einem tatsächlichen Spaltensteg, damit
Matthias Andreas Benkardffc553b2026-08-15 12:18:32 +0200384ganzseitenbreite Zeilen ungeschnitten bleiben).
Matthias Andreas Benkard7235b342026-08-14 18:58:25 +0200385
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200386(2) Die rechte Spalte für sich gelesen ist kein vollständiges Dokument: Sie druckt
387Unverändertes nicht ab, sondern vermerkt bloß unverändert und zwar nicht nur
388je Gliederungspunkt, sondern auch zeilenweise innerhalb zitierter Blöcke, weshalb
389ihre Anführungszeichen nicht aufgehen. Eine Auflösung über die Gliederungspfade
390scheitert daran nachweislich.
Matthias Andreas Benkardffc553b2026-08-15 12:18:32 +0200391
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200392(3) Maßgeblich ist stattdessen die *Grundlinie*: Beide Spalten sind zeilensynchron
393gesetzt, jeder Vermerk steht auf der Höhe der Entwurfszeile, die er meint. Der
394`ZusammenstellungsLeser` führt beide Spalten über Seite und Grundlinie in eine
395gemeinsame Lesereihenfolge zusammen und entscheidet dann Zeile für Zeile:
396unverändert holt den Wortlaut aus der Entwurfsspalte, entfällt streicht ihn,
397sonst gilt die Ausschussspalte. Dabei meint unverändert den Wortlaut, nicht die
398Zählung; streicht der Ausschuss einen Punkt, so rücken die folgenden auf, und
399seine Marke tritt an die Stelle derjenigen des Entwurfs.
Matthias Andreas Benkardffc553b2026-08-15 12:18:32 +0200400
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200401(4) Die Quellenzeile der Synopse weist die verwendete Spalte als
402`[Beschlussempfehlung …, Ausschussfassung]` aus.
403
404(5) Lässt sich die Zusammenstellung nicht auflösen, so wird die Datei mit
405Begründung übergangen, samt Hinweis auf die Drucksachennummer des Entwurfs, der
406sich stattdessen eignet. Eine halb aufgelöste Fassung auszugeben wäre schlimmer
407als keine.
408
409(6) Belegt ist beides: dass die *linke* Spalte Befehl für Befehl den
410Regierungsentwurf ergibt, aus dem die Zusammenstellung gebaut ist, und dass die
411aufgelöste Fassung mehr Befehle trägt als er der Ausschuss hat der GEG-Novelle
412zwei Artikel hinzugefügt. Zwei Beispiele stehen im Test: BT-Drs. 20/7619 (GEG)
413und BT-Drs. 19/24334 (Drittes Bevölkerungsschutzgesetz).
414
415
416[[landesrecht]]
417== § 13 Landesrecht
418
419(1) Für das bayerische Landesrecht versteht das Erzeugnis die dortigen
420Konventionen. Stammgesetze gliedern sich in Artikel („Art. 6 Abs. 2 Satz 1
421Nr. 2“, durchgängig abgekürzt zitiert), Änderungsgesetze dagegen in Paragraphen
422auch mehrere Gesetze in einem GVBl-Heft, aus denen die auf das Stammgesetz
423zielenden §§ (einschließlich Weitere Änderung“) anhand des Einleitungssatzes
424ausgewählt werden. Amtliche Satznummern bleiben als Superskripte erhalten und
425dienen als exakte Satzgrenzen. Zusätzlich erkannt werden
426
4271. die bayerischen Befehlsformen („Fußnote 1 wird aufgehoben“, In Satz 1 wird
428 die Satznummerierung 1 gestrichen“, Dem Wortlaut werden die folgenden
429 Abs. 1 bis 4 vorangestellt“, Der bisherige Wortlaut wird Abs. 5“),
430 Halbsatz-Ziele und Klauselketten mit gemeinsamem Schlussverb sowie
4312. das Fortführungszeichen des GVBl, wonach jedes neugefasste Aufzählungsglied
432 erneut mit öffnet.
433
434Der Fall ist gegen die amtliche Nachfassung belegt: Alle 154 auf das BayJG
435zielenden Befehle des Heftes 6/2026 werden an 54 Normen selbsttätig angewandt,
436auch die verschränkte Neunummerierung des Bußgeldkatalogs in Art. 56.
437
438(2) Die übrigen Länder gliedern ihre Stammgesetze wie der Bund in Paragraphen;
439die Unterschiede liegen im Gesetzblatt-Satz und in den Befehlsidiomen. Belegt sind
440Sachsen (SächsBeamtVG), Niedersachsen (NEFG), Thüringen (ThürKigaFinVO) und
441Nordrhein-Westfalen dort alle vier ändernden Artikel eines Heftes:
442Telemedienzuständigkeitsgesetz, Landesmediengesetz, Ausführungsgesetz zum
44317. Rundfunkänderungsstaatsvertrag und, mit 101 Befehlen an 31 Normen der größte
444Fall des Heftes, das WDR-Gesetz —, jeweils mit Akzeptanztests gegen die amtlichen
445Nachfassungen.
446
447(3) Für Schleswig-Holstein, Berlin und Hessen reicht die Prüfung bis zur
448Befehlserkennung dort vollständig, aber ohne Anwendung —, weil deren
449Landesportale ihre Stammfassungen nur über eine anmeldepflichtige Schnittstelle
450ausgeben. Thüringens Portal gibt sie ebensowenig aus; dort ist die konsolidierte
451Fassung aus dem Stammheft und den drei Änderungsheften des Gesetzblattes
452zusammengesetzt, die die Parlamentsdatenbank des Landtags frei ausgibt.
453
454(4) Welche Konvention welches Land beisteuert, welche Stammfassungen woher
455stammen und was noch offen ist, verzeichnet
456`src/test/resources/sampledata/Landesrecht-Beispiele.adoc`.
457
Matthias Andreas Benkard7235b342026-08-14 18:58:25 +0200458
Matthias Andreas Benkard7b455cd2026-08-09 08:33:37 +0200459[[web]]
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200460== § 14 Browserfassung
Matthias Andreas Benkard7b455cd2026-08-09 08:33:37 +0200461
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200462(1) Neben der Befehlszeilenfassung besteht eine Browserfassung, die dieselbe
463Pipeline (`eu.mulk.aendggner.Pipeline`, § 16 Absatz 1) über ein
464Upload-Formular zugänglich macht: Stammgesetz- und Änderungsgesetz-Datei(en)
465wählen, Synopse erhalten.
Matthias Andreas Benkard7b455cd2026-08-09 08:33:37 +0200466
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200467(2) Über dem Formular steht ein zugeklappter Einführungsblock, der zwei
468durchgerechnete Fälle mit Verweisen auf die amtlichen Fundstellen anbietet,
469nämlich das UWG (`gesetze-im-internet.de/uwg_2004/xml.zip`) mit dem Dritten Gesetz
470zu seiner Änderung (BGBl. 2026 I Nr. 43) und das AGG
471(`gesetze-im-internet.de/agg/xml.zip`) mit dem Regierungsentwurf BT-Drs. 21/6178.
472Mitausgeliefert wird nichts; die Seite ruft die Dateien auch nicht selbst ab, sie
473verweist nur darauf.
Matthias Andreas Benkard06da70e2026-08-16 07:34:12 +0200474
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200475(3) Ein Server ist nicht erforderlich: Die vollständige Verarbeitung
476PDF-Textgewinnung mit PDFBox eingeschlossen läuft als WebAssembly-Modul im
477Browser, übersetzt mit GraalVM Web Image aus demselben Java-Quelltext.
478Ausgeliefert werden nur statische Dateien; die gewählten Dokumente verlassen den
479Rechner der Nutzer:innen nicht. Die Herstellung verlangt abweichend von § 4
480Absatz 3 Oracle GraalVM 25.1 oder neuer, denn Web Image ist nur dort enthalten,
481nicht in der Community Edition:
Matthias Andreas Benkard7b455cd2026-08-09 08:33:37 +0200482
483[source,shell script]
484----
Matthias Andreas Benkard2b1841e2026-08-15 10:51:11 +0200485JAVA_HOME=/pfad/zu/oracle-graalvm ./mvnw -Pwasm package
Matthias Andreas Benkard7b455cd2026-08-09 08:33:37 +0200486----
487
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200488(4) Ergebnis ist `target/web/` mit `index.html`, `app.js`, `worker.js`,
Matthias Andreas Benkardf3b47af2026-08-22 21:23:06 +0200489`style.css`, `favicon.svg`, `aendggner.js` und `aendggner.js.wasm` (rund 17 MB,
490komprimiert etwa 5 MB). Das Verzeichnis ist so, wie es dasteht, auslieferbar:
Matthias Andreas Benkard2d33bf72026-08-16 06:40:07 +0200491`deploy/webpaket.sh` läuft am Ende desselben Befehls, wirft den mehrere hundert
Matthias Andreas Benkardf3b47af2026-08-22 21:23:06 +0200492Megabyte großen Textzwischenschritt `aendggner.js.wat` fort, schickt das Modul
493durch `wasm-opt -Oz` und legt den Quelltext der gebauten Fassung als
494`aendggner-quelltext.tar.gz` samt `quelltext-fassung.txt` bei.
Matthias Andreas Benkard2b1841e2026-08-15 10:51:11 +0200495
Matthias Andreas Benkardf3b47af2026-08-22 21:23:06 +0200496(5) Die Größe des Moduls beruht auf vier Vorkehrungen; wer eine davon zurücknimmt,
497handelt sich die Megabyte wieder ein:
498
4991. `-Os` beim Übersetzen statt der auf Durchsatz gerichteten Voreinstellung;
5002. kein Picocli-Annotationsprozessor im Profil `wasm`. Er meldete die
501 Befehlszeilenklasse zur Reflexion an, worauf die Erreichbarkeitsanalyse die
502 gesamte Befehlszeilenfassung ins Browser-Image zog, die dort niemand aufruft;
5033. ein enger Ressourcen-Glob in `reachability-metadata.json`. Das frühere
504 `org/apache/fontbox/**` bettete 3,3 MB CJK-CMaps, `Scripts.txt` und weil
505 `**` auch Klassendateien trifft 0,7 MB `.class`-Dateien ein, von denen
506 deutsche Gesetzes-PDFs nichts brauchen. Geblieben sind die beiden
507 Identity-CMaps; `org/apache/pdfbox/resources/**` bleibt vollständig, damit die
508 Breitenberechnung bei nicht eingebetteten Schriften unangetastet ist;
5094. `wasm-opt -Oz` als Nachlauf. Die zugelassenen Wasm-Merkmale sind in
510 `webpaket.sh` einzeln aufgezählt und nicht als `--all-features` erteilt: Sonst
511 nutzt Binaryen auch Vorschläge, die noch kein Browser annimmt, und das Modul
512 scheitert erst beim Instanziieren.
513
514(6) Im Quelltextarchiv fehlt der Beispielkorpus; `.gitattributes` nimmt
515`src/test/resources/sampledata` von `git archive` aus. Es sind Gesetzes- und
516Drucksachentexte fremder Urheberschaft, an denen allein die Tests messen
517Quelltext im Sinne der AGPLv3 sind sie nicht, gebaut wird ohne sie, und sie
518machten das Archiv dreißigmal so groß wie den Quelltext (29,7 MB statt 0,26 MB).
519`quelltext-fassung.txt` sagt dies und verweist für den vollständigen Korpus auf
520die Anschrift nach § 3 Absatz 2. Wächst das Archiv wieder über 8 MiB, so bricht
521`webpaket.sh` ab; alsdann sind Massendaten ins Repository geraten, die dort nicht
522hingehören.
523
524(7) Trägt der Arbeitsbaum uneingecheckte Änderungen, so bricht die Herstellung
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200525nach Absatz 3 ab, denn der beigelegte Quelltext wäre alsdann nicht der gebaute.
526Für einen Probelauf hilft `QUELLTEXT_UNGEPRUEFT=1`.
527
528(6) Zur örtlichen Ansicht genügt `file://` nicht; Browser laden Wasm-Module und
529Worker nur über HTTP (http://localhost:8000/):
Matthias Andreas Benkard2b1841e2026-08-15 10:51:11 +0200530
531[source,shell script]
532----
Matthias Andreas Benkard08f53072026-08-16 06:05:39 +0200533jwebserver -d target/web
Matthias Andreas Benkard2b1841e2026-08-15 10:51:11 +0200534----
535
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200536(7) Die Befehlszeilenfassung 6) bleibt hiervon unberührt und ist weiterhin der
537Weg für Massenläufe.
Matthias Andreas Benkard2b1841e2026-08-15 10:51:11 +0200538
Matthias Andreas Benkard2d33bf72026-08-16 06:40:07 +0200539
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200540[[ausrollen]]
541== § 15 Ausrollen
542
Matthias Andreas Benkardf3b47af2026-08-22 21:23:06 +0200543(1) Erforderlich ist nur ein Ort für statische Dateien. Ausgeliefert wird über
544Cloudflare Workers. Dort gilt eine Grenze von 25 MiB je Datei unkomprimiert
545gemessen —, und komprimiert wird beim Ausliefern ohnehin. `webpaket.sh` legt
546deshalb keine `.gz`/`.br`-Beilagen mehr an und hält am Ende jede Datei gegen
547diese Grenze; überschreitet eine sie, so bricht der Bau ab, statt das Hochladen
548scheitern zu lassen.
Matthias Andreas Benkard2d33bf72026-08-16 06:40:07 +0200549
550[source,shell script]
551----
552JAVA_HOME=/pfad/zu/oracle-graalvm ./mvnw -Pwasm package
Matthias Andreas Benkardf3b47af2026-08-22 21:23:06 +0200553----
554
555(2) Wer die Fassung stattdessen selbst ausliefert unter einem Unterpfad einer
556bestehenden Domain, wie zuvor unter https://matthias.benkard.de/aendggner/ —,
557braucht die Vorkompression und fordert sie beim Bau an:
558
559[source,shell script]
560----
561JAVA_HOME=/pfad/zu/oracle-graalvm VORKOMPRIMIEREN=1 ./mvnw -Pwasm package
Matthias Andreas Benkard2d33bf72026-08-16 06:40:07 +0200562rsync -av --delete target/web/ server:/var/www/aendggner/
563----
564
Matthias Andreas Benkardf3b47af2026-08-22 21:23:06 +0200565(3) `deploy/nginx-aendggner.conf` ist kein eigener `server`-Block, sondern ein
Matthias Andreas Benkard2d33bf72026-08-16 06:40:07 +0200566Schnipsel zum Einfügen in den vorhandenen (`include`). Er bringt mit:
567
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +02005681. die Weiterleitung von `/aendggner` auf `/aendggner/`, ohne die alle relativen
569 Verweise der Seite auf die Domainwurzel zielten;
5702. den MIME-Typ `application/wasm`, ohne den der Browser die Instanziierung des
571 Moduls verweigert;
Matthias Andreas Benkardf3b47af2026-08-22 21:23:06 +02005723. `gzip_static`/`brotli_static` für die nach Absatz 2 vorkomprimierten Dateien,
573 statt 17 MB je Abruf neu zu packen;
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +02005744. `Cache-Control: no-cache` statt einer Haltefrist. Die Dateinamen tragen keine
575 Fassungskennung, und ein Browser mit altem `app.js` und neuem `.wasm` bekäme
576 sonst eine Mischfassung, die es nie gegeben hat. Revalidiert wird per ETag; das
577 unveränderte Modul kostet alsdann ein 304 ohne Rumpf;
5785. die Sicherheitskopfzeilen samt einer Content-Security-Policy. Zwei ihrer
579 Freigaben sind unvermeidlich und in der Datei begründet: `'wasm-unsafe-eval'`
580 für die Instanziierung des Moduls und `'unsafe-inline'` für Stile, weil die
581 Synopse als `blob:`-Dokument die Richtlinie der erzeugenden Seite erbt, ihr
582 Stylesheet aber eingebettet trägt.
Matthias Andreas Benkard2d33bf72026-08-16 06:40:07 +0200583
Matthias Andreas Benkardf3b47af2026-08-22 21:23:06 +0200584(4) `impressum.html` und `datenschutz.html` tragen die Angaben nach § 5 DDG und
Matthias Andreas Benkard8889c182026-08-22 21:32:46 +0200585Art. 13 DSGVO. Für den Regelfall Auslieferung über Cloudflare nennt
586`datenschutz.html` Cloudflare als Auftragsverarbeiter nach Art. 28 DSGVO samt
587Drittlandsübermittlung und sagt, dass Zugriffsprotokolle dort anfallen und vom
588Verantwortlichen nicht abgerufen werden. Die daneben für die eigene Auslieferung
589(Absatz 2) genannte Frist von 14 Tagen muss zu derjenigen des eigenen Servers
590passen. Wer bei Cloudflare weitere Funktionen einschaltet Web Analytics,
591Logpush, Bot Management, Turnstile —, muss die Erklärung ergänzen; sie ist so
592gefasst, dass keine davon in Betrieb ist.
Matthias Andreas Benkard2d33bf72026-08-16 06:40:07 +0200593
Matthias Andreas Benkardf3b47af2026-08-22 21:23:06 +0200594(5) Der Footer der Startseite verweist auf den beigelegten Quelltext-Tarball; dies
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200595verlangt AGPLv3 § 13 für den Netzwerkbetrieb. Als fortlaufende Zweitquelle ist
596die Anschrift nach § 3 Absatz 2 genannt.
Matthias Andreas Benkard2b1841e2026-08-15 10:51:11 +0200597
Matthias Andreas Benkard7b455cd2026-08-09 08:33:37 +0200598
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200599[[aufbau]]
600== § 16 Aufbau des Quelltextes
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +0100601
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200602(1) Gemeinsamer Kern von Befehlszeile und Browser ist `eu.mulk.aendggner.Pipeline`:
603Stammgesetz laden, Änderungsdokumente erkennen, zerlegen und anwenden, Synopse
604ausgeben. Die Pipeline kennt kein Dateisystem; Eingaben erreichen sie als
605`eu.mulk.aendggner.Quelle` (Name und Bytes).
606
607(2) Die Pakete unterhalb von `src/main/java/eu/mulk/aendggner/` gliedern sich wie
608folgt:
609
610`aenderung/`::
611 Erkennen der Dokumentart, Textbereinigung und Zerlegung in Änderungsbefehle
612 (`parse/`), Herkunftsnachweis (`Provenienz`), Stellenangaben (`Stelle`).
613`anwendung/`::
614 Anwenden der Befehle auf die Stammfassung, Auflösen der Stellenangaben, Zerlegen
615 in Sätze, Fortschreiben der Inhaltsübersicht.
616`gesetz/`::
617 Die Stammfassung nebst Gliederung, Normen, Absätzen und Superskripten; `gii/`
618 liest das Bundesformat, `land/` die Fassungen der Länder.
619`synopse/`::
620 Wortdiff, Aufbau und HTML-Ausgabe der Synopse.
621
622(3) Der Kern ist reines Java ohne Dateisystem- und ohne Netzzugriff; nur vier
623Stellen berühren die Plattform (PDFBox, MIME-Erkennung, XML-Parser,
624Dateizugriff). Sie sind hinter `eu.mulk.aendggner.Quelle` (Name und Bytes) und
625`eu.mulk.aendggner.DateiTyp` (Signaturbytes statt Tika) gebündelt; hierauf beruht,
626dass Befehlszeile und Browser dieselbe Pipeline speisen. Ein Java-Server ist
627deshalb entbehrlich.
628
629(4) Zwei Eigenheiten von Web Image sind zu beachten und im Quelltext vermerkt:
630
6311. Die nativen zlib-Bindungen des JDK fehlen (`java.util.zip.Inflater`), ohne die
632 kein PDF lesbar ist. `src/wasm/java/.../InflaterErsatz.java` ersetzt sie durch
633 die reine Java-Umsetzung von jzlib.
6342. Typisierte Felder lassen sich derzeit nicht nach `byte[]` umsetzen; der
635 Dateiinhalt wandert deshalb als Base64-Text über die JS-Grenze.
636
637
638[[pruefung]]
639== § 17 Prüfung
640
641(1) Herstellung und Prüfung erfolgen durch den nachstehenden Befehl:
Matthias Andreas Benkardb291c362020-11-22 10:22:27 +0100642
643[source,shell script]
644----
645./mvnw verify
646----
Matthias Andreas Benkard3dc36d42026-08-22 21:06:24 +0200647
648(2) Die Prüfung umfasst neben den Einzelprüfungen Akzeptanzprüfungen, die
649vollständige Änderungshefte auf die zugehörige Stammfassung anwenden und das
650Ergebnis gegen die amtliche Nachfassung stellen. Die hierfür verwendeten
651Beispieldaten nebst Herkunftsnachweis (`SOURCES`) liegen unter
652`src/test/resources/sampledata/`.