# Lizenzangaben nach dem REUSE-Standard (https://reuse.software/). # # Das Projekt vereint zwei rechtlich verschiedene Arten von Inhalten, die # strikt auseinandergehalten werden müssen: # # 1. Eigene Software und eigene didaktische Inhalte -> EUPL-1.2 # 2. Der amtliche Fragenkatalog des Bundesverwaltungsamtes # -> amtliches Werk, KEIN eigenes Urheberrecht. Er wird unverändert # übernommen und mit Quellenangabe geführt. Eine eigene Lizenz kann # und darf darauf nicht erteilt werden. # # Prüfen mit: pipx run reuse lint version = 1 SPDX-PackageName = "Waffensachkunde-Lernsoftware" SPDX-PackageSupplier = "Olaf Willerding " SPDX-PackageDownloadLocation = "" # ── Eigene Software ──────────────────────────────────────────────────────── [[annotations]] path = [ "app/**", "data-pipeline/**", "tools/**", ".githooks/**", # Die vorbereitete Prüfstrecke. Sie stand bis Fassung 0.24.1 in keiner # Liste, und `reuse lint` fiel daran durch – gemeldet als einzige Datei ohne # Copyright- und Lizenzangabe. Aufgefallen war es nicht, weil die Prüfung # in keinem Torwächter läuft: Ohne Fernarchiv gibt es keinen Runner, und # `npm run gate` ruft `reuse` nicht auf. ".github/**", # Arbeitsregeln und Prüfhaken für Claude Code: CLAUDE.md in der Wurzel, # Einstellungen, Haken-Skript und die Fehlersuche-Anleitung unter .claude/. ".claude/**", "CLAUDE.md", "PLAN.md", "CHANGELOG.md", "README.md", ".gitignore", ".gitattributes", ".prettierignore", "REUSE.toml", ] precedence = "aggregate" SPDX-FileCopyrightText = "2026 Olaf Willerding" SPDX-License-Identifier = "EUPL-1.2" # ── Lizenztexte im Projektverzeichnis ────────────────────────────────────── # Kopien der EUPL fuer Werkzeuge und Menschen, die nur die Wurzel absehen; die # massgeblichen Fassungen liegen unter LICENSES/. Der Text gehoert der # Europaeischen Union und wird unveraendert wiedergegeben - das Projekt kann # darauf keine eigene Lizenz erteilen, deshalb steht hier nicht der eigene # Urheberrechtsvermerk. [[annotations]] path = ["LICENSE", "LICENSE.de.txt"] precedence = "aggregate" SPDX-FileCopyrightText = "European Union 2007, 2016" SPDX-License-Identifier = "EUPL-1.2" # ── Eigene didaktische Inhalte ───────────────────────────────────────────── # Alternativtexte, Erklärungen und Glossar sind eigene Werke. Sie sind bewusst # vom amtlichen Katalog getrennt, damit die Grenze nachvollziehbar bleibt. # # Das Glossar gibt an vielen Stellen gesetzliche Begriffsbestimmungen wieder. # Die sind nach § 5 Abs. 1 UrhG gemeinfrei und begründen kein fremdes Recht; # eigenes Werk sind Auswahl, Anordnung und die erklärenden Texte. [[annotations]] path = ["content/erklaerungen.json", "content/glossar.json"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 Olaf Willerding" SPDX-License-Identifier = "EUPL-1.2" # ── Fundstellenindex der Gesetze ─────────────────────────────────────────── # Maschinell erzeugt aus dem amtlichen XML von gesetze-im-internet.de. Gesetze # und Verordnungen sind nach § 5 Abs. 1 UrhG gemeinfrei; die Datei wird nicht # mit der Anwendung ausgeliefert und dient allein der Pruefung der # Fundstellen im Entwicklungsbaum. [[annotations]] path = ["content/gesetze/index.json"] precedence = "aggregate" SPDX-FileCopyrightText = "gemeinfrei nach § 5 Abs. 1 UrhG; zusammengestellt aus gesetze-im-internet.de" SPDX-License-Identifier = "LicenseRef-Gesetzestext-Gemeinfrei" # ── Ausgelieferte Normtexte ──────────────────────────────────────────────── # Anders als der Index oben wird diese Datei mitgeliefert: Sie enthaelt den # Wortlaut der Normen, die in Erklaerungen und Glossar zitiert werden, damit # sich „Im Gesetz nachlesen“ ohne Netz erfuellen laesst. Der Wortlaut ist der # amtliche und unveraendert; Gesetze und Verordnungen sind nach § 5 Abs. 1 UrhG # gemeinfrei. Eigene Leistung ist allein die Auswahl der zitierten Normen — # und die ist keine schoepferische, sondern eine Folge der Fundstellen. [[annotations]] path = ["content/normtexte.json"] precedence = "aggregate" SPDX-FileCopyrightText = "gemeinfrei nach § 5 Abs. 1 UrhG; Wortlaut aus gesetze-im-internet.de" SPDX-License-Identifier = "LicenseRef-Gesetzestext-Gemeinfrei" # Die Themengliederung ist eigene redaktionelle Leistung: Der amtliche Katalog # gliedert die Kapitel II bis IV gar nicht auf, die Gruppen und ihre Titel # stammen vollstaendig von hier. Uebernommen sind nur die Fragen-Kennungen. [[annotations]] path = ["content/themen.json"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 Olaf Willerding" SPDX-License-Identifier = "EUPL-1.2" [[annotations]] path = ["content/alttexte.json"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 Olaf Willerding" SPDX-License-Identifier = "EUPL-1.2" # ── Amtlicher Fragenkatalog ──────────────────────────────────────────────── # Herausgeber: Bundesverwaltungsamt, Referat S II 6, im Auftrag des BMI. # Stand 16.12.2024. Der Wortlaut wird unverändert wiedergegeben; Änderungen am # Katalog bedürfen laut Katalog-Hinweis der schriftlichen Zustimmung des BVA # (entspricht dem Änderungsverbot des § 62 UrhG). Die Quellenangabe nach # § 63 UrhG führt die Software sichtbar mit. [[annotations]] path = [ "content/katalog/**", "Fragenkatalog_sachkunde_mitAntworten.pdf", ] precedence = "aggregate" SPDX-FileCopyrightText = "Bundesverwaltungsamt – amtliches Werk" SPDX-License-Identifier = "LicenseRef-Amtliches-Werk-BVA" # ── Lizenzübersicht der Fremdsoftware ────────────────────────────────────── # Selbst erzeugtes Verzeichnis der mitgelieferten Pakete. Die darin zitierten # Lizenztexte gehören ihren jeweiligen Urhebern; die Datei als solche ist ein # Erzeugnis dieses Projekts und läuft deshalb unter dessen Lizenz. # # Frühere Fassung setzte hier "MIT". Das war doppelt unrichtig: Die Datei ist # kein MIT-lizenzierter Fremdcode, und ohne LICENSES/MIT.txt schlug # `reuse lint` mit "MISSING LICENSES" fehl. [[annotations]] path = ["content/drittlizenzen.json"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 Olaf Willerding" SPDX-License-Identifier = "EUPL-1.2" # Die Datenschutzerklärung für die Anwendung, erzeugt aus docs/datenschutz.md # über tools/datenschutz_anwendung.py. Eigener Text, keine amtliche Quelle – # derselbe Urheber und dieselbe Lizenz wie das Markdown daneben. [[annotations]] path = ["content/datenschutz.json"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 Olaf Willerding" SPDX-License-Identifier = "EUPL-1.2" # ── Übrige Dokumentation ─────────────────────────────────────────────────── # Eigene Texte und Bildschirmfotos ohne amtlichen Wortlaut – darunter die # vier Store-Bilder 03, 04, 06 und 07. # # **Diese Regel steht bewusst VOR der genaueren darunter.** Treffen mehrere # Einträge auf dieselbe Datei, gilt der letzte. Bis Fassung 0.24.1 stand # `docs/**` hinter der Aufzählung der Bilder mit amtlichem Wortlaut und # überschrieb sie damit vollständig: Am `reuse lint --json` nachgemessen # trugen alle neun Dateien und der Prüfbericht die Angabe `EUPL-1.2`, also # genau die Zuordnung, die der Block darunter verhindern sollte. Die # Aufzählung war zwölf Zeilen Begründung ohne jede Wirkung. [[annotations]] path = ["docs/**"] precedence = "closest" SPDX-FileCopyrightText = "2026 Olaf Willerding" SPDX-License-Identifier = "EUPL-1.2" # ── Dokumente, die amtlichen Katalogtext wiedergeben ─────────────────────── # Nur diese: der Prüfbericht und die Bildschirmfotos, auf denen eine Frage # des amtlichen Katalogs im Wortlaut zu sehen ist. Eine pauschale Zuordnung # aller Dateien unter docs/ wäre unzutreffend – der Barrierefreiheits-Prüfplan # und das Antragsdossier enthalten keinen Wortlaut des BVA. # # Dazugekommen mit den Store-Bildern (docs/store-bilder/, erzeugt von # app/e2e/store-bilder.spec.ts). Von den sieben zeigen genau drei amtlichen # Wortlaut: die Frage 1.37 mit ihren Antwortmoeglichkeiten (01), dieselbe mit # der Rueckmeldung (02) und die Trefferliste der Suche mit drei Fragen (05). # Die uebrigen vier zeigen Startbildschirm, Profilwahl und Glossar – dort # steht kein Katalogtext. # # Ebenfalls nachgetragen: 13-suche.png. Auf ihm stehen fuenf Fragen im # amtlichen Wortlaut; die Datei lief bislang unter der allgemeinen # docs/**-Regel mit EUPL (offener Punkt 6 in docs/store-eintrag.md). Derselbe # Sachverhalt wie bei 04, 05, 08 und 10 – also dieselbe Auszeichnung. # # `app/v2-frage.png` ist ein Bildschirmfoto aus der Entwicklung und zeigt # ebenfalls eine Frage im amtlichen Wortlaut. Es lag unter der `app/**`-Regel # und war damit als eigenes EUPL-Werk ausgezeichnet – dieselbe unzutreffende # Zuordnung, die bei 13-suche.png schon einmal aufgefallen ist. Die Datei ist # in keinem Dokument und keinem Test verwendet; ob sie bleibt, entscheidet # der Betreiber. Bis dahin steht sie wenigstens richtig. [[annotations]] path = [ "docs/katalog-pruefbericht.html", "docs/bildschirmfotos/04-lernsitzung.png", "docs/bildschirmfotos/05-lernsitzung-feedback.png", "docs/bildschirmfotos/08-pruefungslauf.png", "docs/bildschirmfotos/10-erklaerung.png", "docs/bildschirmfotos/13-suche.png", "docs/store-bilder/01-frage-mit-antwortmoeglichkeiten.png", "docs/store-bilder/02-rueckmeldung-mit-begruendung.png", "docs/store-bilder/05-fragen-durchsuchen.png", "app/v2-frage.png", ] precedence = "aggregate" SPDX-FileCopyrightText = "2026 Olaf Willerding; enthält amtlichen Text des Bundesverwaltungsamtes" SPDX-License-Identifier = "LicenseRef-Amtliches-Werk-BVA"