waffensachkunde

Waffensachkunde – Lernsoftware für die Sachkundeprüfung nach § 7 WaffG. Barrierefrei, offline, EUPL-1.2.

/ REUSE.toml

10,1 KB Rohdatei
REUSE.toml — 207 Zeilen
1 # Lizenzangaben nach dem REUSE-Standard (https://reuse.software/).
2 #
3 # Das Projekt vereint zwei rechtlich verschiedene Arten von Inhalten, die
4 # strikt auseinandergehalten werden müssen:
5 #
6 # 1. Eigene Software und eigene didaktische Inhalte -> EUPL-1.2
7 # 2. Der amtliche Fragenkatalog des Bundesverwaltungsamtes
8 # -> amtliches Werk, KEIN eigenes Urheberrecht. Er wird unverändert
9 # übernommen und mit Quellenangabe geführt. Eine eigene Lizenz kann
10 # und darf darauf nicht erteilt werden.
11 #
12 # Prüfen mit: pipx run reuse lint
13
14 version = 1
15
16 SPDX-PackageName = "Waffensachkunde-Lernsoftware"
17 SPDX-PackageSupplier = "Olaf Willerding <Olaf@olaf-willerding.de>"
18 SPDX-PackageDownloadLocation = ""
19
20 # ── Eigene Software ────────────────────────────────────────────────────────
21 [[annotations]]
22 path = [
23 "app/**",
24 "data-pipeline/**",
25 "tools/**",
26 ".githooks/**",
27 # Die vorbereitete Prüfstrecke. Sie stand bis Fassung 0.24.1 in keiner
28 # Liste, und `reuse lint` fiel daran durch – gemeldet als einzige Datei ohne
29 # Copyright- und Lizenzangabe. Aufgefallen war es nicht, weil die Prüfung
30 # in keinem Torwächter läuft: Ohne Fernarchiv gibt es keinen Runner, und
31 # `npm run gate` ruft `reuse` nicht auf.
32 ".github/**",
33 # Arbeitsregeln und Prüfhaken für Claude Code: CLAUDE.md in der Wurzel,
34 # Einstellungen, Haken-Skript und die Fehlersuche-Anleitung unter .claude/.
35 ".claude/**",
36 "CLAUDE.md",
37 "PLAN.md",
38 "CHANGELOG.md",
39 "README.md",
40 ".gitignore",
41 ".gitattributes",
42 ".prettierignore",
43 "REUSE.toml",
44 ]
45 precedence = "aggregate"
46 SPDX-FileCopyrightText = "2026 Olaf Willerding"
47 SPDX-License-Identifier = "EUPL-1.2"
48
49 # ── Lizenztexte im Projektverzeichnis ──────────────────────────────────────
50 # Kopien der EUPL fuer Werkzeuge und Menschen, die nur die Wurzel absehen; die
51 # massgeblichen Fassungen liegen unter LICENSES/. Der Text gehoert der
52 # Europaeischen Union und wird unveraendert wiedergegeben - das Projekt kann
53 # darauf keine eigene Lizenz erteilen, deshalb steht hier nicht der eigene
54 # Urheberrechtsvermerk.
55 [[annotations]]
56 path = ["LICENSE", "LICENSE.de.txt"]
57 precedence = "aggregate"
58 SPDX-FileCopyrightText = "European Union 2007, 2016"
59 SPDX-License-Identifier = "EUPL-1.2"
60
61 # ── Eigene didaktische Inhalte ─────────────────────────────────────────────
62 # Alternativtexte, Erklärungen und Glossar sind eigene Werke. Sie sind bewusst
63 # vom amtlichen Katalog getrennt, damit die Grenze nachvollziehbar bleibt.
64 #
65 # Das Glossar gibt an vielen Stellen gesetzliche Begriffsbestimmungen wieder.
66 # Die sind nach § 5 Abs. 1 UrhG gemeinfrei und begründen kein fremdes Recht;
67 # eigenes Werk sind Auswahl, Anordnung und die erklärenden Texte.
68 [[annotations]]
69 path = ["content/erklaerungen.json", "content/glossar.json"]
70 precedence = "aggregate"
71 SPDX-FileCopyrightText = "2026 Olaf Willerding"
72 SPDX-License-Identifier = "EUPL-1.2"
73
74 # ── Fundstellenindex der Gesetze ───────────────────────────────────────────
75 # Maschinell erzeugt aus dem amtlichen XML von gesetze-im-internet.de. Gesetze
76 # und Verordnungen sind nach § 5 Abs. 1 UrhG gemeinfrei; die Datei wird nicht
77 # mit der Anwendung ausgeliefert und dient allein der Pruefung der
78 # Fundstellen im Entwicklungsbaum.
79 [[annotations]]
80 path = ["content/gesetze/index.json"]
81 precedence = "aggregate"
82 SPDX-FileCopyrightText = "gemeinfrei nach § 5 Abs. 1 UrhG; zusammengestellt aus gesetze-im-internet.de"
83 SPDX-License-Identifier = "LicenseRef-Gesetzestext-Gemeinfrei"
84
85 # ── Ausgelieferte Normtexte ────────────────────────────────────────────────
86 # Anders als der Index oben wird diese Datei mitgeliefert: Sie enthaelt den
87 # Wortlaut der Normen, die in Erklaerungen und Glossar zitiert werden, damit
88 # sich „Im Gesetz nachlesen“ ohne Netz erfuellen laesst. Der Wortlaut ist der
89 # amtliche und unveraendert; Gesetze und Verordnungen sind nach § 5 Abs. 1 UrhG
90 # gemeinfrei. Eigene Leistung ist allein die Auswahl der zitierten Normen —
91 # und die ist keine schoepferische, sondern eine Folge der Fundstellen.
92 [[annotations]]
93 path = ["content/normtexte.json"]
94 precedence = "aggregate"
95 SPDX-FileCopyrightText = "gemeinfrei nach § 5 Abs. 1 UrhG; Wortlaut aus gesetze-im-internet.de"
96 SPDX-License-Identifier = "LicenseRef-Gesetzestext-Gemeinfrei"
97
98 # Die Themengliederung ist eigene redaktionelle Leistung: Der amtliche Katalog
99 # gliedert die Kapitel II bis IV gar nicht auf, die Gruppen und ihre Titel
100 # stammen vollstaendig von hier. Uebernommen sind nur die Fragen-Kennungen.
101 [[annotations]]
102 path = ["content/themen.json"]
103 precedence = "aggregate"
104 SPDX-FileCopyrightText = "2026 Olaf Willerding"
105 SPDX-License-Identifier = "EUPL-1.2"
106
107 [[annotations]]
108 path = ["content/alttexte.json"]
109 precedence = "aggregate"
110 SPDX-FileCopyrightText = "2026 Olaf Willerding"
111 SPDX-License-Identifier = "EUPL-1.2"
112
113 # ── Amtlicher Fragenkatalog ────────────────────────────────────────────────
114 # Herausgeber: Bundesverwaltungsamt, Referat S II 6, im Auftrag des BMI.
115 # Stand 16.12.2024. Der Wortlaut wird unverändert wiedergegeben; Änderungen am
116 # Katalog bedürfen laut Katalog-Hinweis der schriftlichen Zustimmung des BVA
117 # (entspricht dem Änderungsverbot des § 62 UrhG). Die Quellenangabe nach
118 # § 63 UrhG führt die Software sichtbar mit.
119 [[annotations]]
120 path = [
121 "content/katalog/**",
122 "Fragenkatalog_sachkunde_mitAntworten.pdf",
123 ]
124 precedence = "aggregate"
125 SPDX-FileCopyrightText = "Bundesverwaltungsamt – amtliches Werk"
126 SPDX-License-Identifier = "LicenseRef-Amtliches-Werk-BVA"
127
128 # ── Lizenzübersicht der Fremdsoftware ──────────────────────────────────────
129 # Selbst erzeugtes Verzeichnis der mitgelieferten Pakete. Die darin zitierten
130 # Lizenztexte gehören ihren jeweiligen Urhebern; die Datei als solche ist ein
131 # Erzeugnis dieses Projekts und läuft deshalb unter dessen Lizenz.
132 #
133 # Frühere Fassung setzte hier "MIT". Das war doppelt unrichtig: Die Datei ist
134 # kein MIT-lizenzierter Fremdcode, und ohne LICENSES/MIT.txt schlug
135 # `reuse lint` mit "MISSING LICENSES" fehl.
136 [[annotations]]
137 path = ["content/drittlizenzen.json"]
138 precedence = "aggregate"
139 SPDX-FileCopyrightText = "2026 Olaf Willerding"
140 SPDX-License-Identifier = "EUPL-1.2"
141
142 # Die Datenschutzerklärung für die Anwendung, erzeugt aus docs/datenschutz.md
143 # über tools/datenschutz_anwendung.py. Eigener Text, keine amtliche Quelle –
144 # derselbe Urheber und dieselbe Lizenz wie das Markdown daneben.
145 [[annotations]]
146 path = ["content/datenschutz.json"]
147 precedence = "aggregate"
148 SPDX-FileCopyrightText = "2026 Olaf Willerding"
149 SPDX-License-Identifier = "EUPL-1.2"
150
151 # ── Übrige Dokumentation ───────────────────────────────────────────────────
152 # Eigene Texte und Bildschirmfotos ohne amtlichen Wortlaut – darunter die
153 # vier Store-Bilder 03, 04, 06 und 07.
154 #
155 # **Diese Regel steht bewusst VOR der genaueren darunter.** Treffen mehrere
156 # Einträge auf dieselbe Datei, gilt der letzte. Bis Fassung 0.24.1 stand
157 # `docs/**` hinter der Aufzählung der Bilder mit amtlichem Wortlaut und
158 # überschrieb sie damit vollständig: Am `reuse lint --json` nachgemessen
159 # trugen alle neun Dateien und der Prüfbericht die Angabe `EUPL-1.2`, also
160 # genau die Zuordnung, die der Block darunter verhindern sollte. Die
161 # Aufzählung war zwölf Zeilen Begründung ohne jede Wirkung.
162 [[annotations]]
163 path = ["docs/**"]
164 precedence = "closest"
165 SPDX-FileCopyrightText = "2026 Olaf Willerding"
166 SPDX-License-Identifier = "EUPL-1.2"
167
168 # ── Dokumente, die amtlichen Katalogtext wiedergeben ───────────────────────
169 # Nur diese: der Prüfbericht und die Bildschirmfotos, auf denen eine Frage
170 # des amtlichen Katalogs im Wortlaut zu sehen ist. Eine pauschale Zuordnung
171 # aller Dateien unter docs/ wäre unzutreffend – der Barrierefreiheits-Prüfplan
172 # und das Antragsdossier enthalten keinen Wortlaut des BVA.
173 #
174 # Dazugekommen mit den Store-Bildern (docs/store-bilder/, erzeugt von
175 # app/e2e/store-bilder.spec.ts). Von den sieben zeigen genau drei amtlichen
176 # Wortlaut: die Frage 1.37 mit ihren Antwortmoeglichkeiten (01), dieselbe mit
177 # der Rueckmeldung (02) und die Trefferliste der Suche mit drei Fragen (05).
178 # Die uebrigen vier zeigen Startbildschirm, Profilwahl und Glossar – dort
179 # steht kein Katalogtext.
180 #
181 # Ebenfalls nachgetragen: 13-suche.png. Auf ihm stehen fuenf Fragen im
182 # amtlichen Wortlaut; die Datei lief bislang unter der allgemeinen
183 # docs/**-Regel mit EUPL (offener Punkt 6 in docs/store-eintrag.md). Derselbe
184 # Sachverhalt wie bei 04, 05, 08 und 10 – also dieselbe Auszeichnung.
185 #
186 # `app/v2-frage.png` ist ein Bildschirmfoto aus der Entwicklung und zeigt
187 # ebenfalls eine Frage im amtlichen Wortlaut. Es lag unter der `app/**`-Regel
188 # und war damit als eigenes EUPL-Werk ausgezeichnet – dieselbe unzutreffende
189 # Zuordnung, die bei 13-suche.png schon einmal aufgefallen ist. Die Datei ist
190 # in keinem Dokument und keinem Test verwendet; ob sie bleibt, entscheidet
191 # der Betreiber. Bis dahin steht sie wenigstens richtig.
192 [[annotations]]
193 path = [
194 "docs/katalog-pruefbericht.html",
195 "docs/bildschirmfotos/04-lernsitzung.png",
196 "docs/bildschirmfotos/05-lernsitzung-feedback.png",
197 "docs/bildschirmfotos/08-pruefungslauf.png",
198 "docs/bildschirmfotos/10-erklaerung.png",
199 "docs/bildschirmfotos/13-suche.png",
200 "docs/store-bilder/01-frage-mit-antwortmoeglichkeiten.png",
201 "docs/store-bilder/02-rueckmeldung-mit-begruendung.png",
202 "docs/store-bilder/05-fragen-durchsuchen.png",
203 "app/v2-frage.png",
204 ]
205 precedence = "aggregate"
206 SPDX-FileCopyrightText = "2026 Olaf Willerding; enthält amtlichen Text des Bundesverwaltungsamtes"
207 SPDX-License-Identifier = "LicenseRef-Amtliches-Werk-BVA"