# Waffensachkunde – Lernsoftware

Ein Lernprogramm für die Sachkundeprüfung nach § 7 Waffengesetz. Es läuft
vollständig offline auf Windows, ist kostenlos, freie Software unter der
EUPL 1.2 und von Grund auf barrierefrei gebaut.

> **Stand: Fassung 0.26.7, in Entwicklung, aber benutzbar.** Lernsitzung,
> Kapitelwahl, Prüfungssimulation mit Auswertung und Verlauf, Lernstand,
> Lernplan zum Prüfungstermin, mehrere Lernprofile und der Bereich „Über
> diese Software" sind vorhanden und getestet. Alle 575 Fragen haben eine
> Erklärung mit geprüften Rechtsfundstellen – siehe
> [Erklärungen](#erklärungen-mit-rechtsfundstellen). Ein
> Windows-Installationspaket entsteht mit `npm run dist:win`. **Für macOS
> gibt es keines:** Der Bau ist vorbereitet (`npm run dist:mac`), aber
> nichts an dieser Software lief je auf einem Mac — kein Paket, kein
> Testlauf, keine VoiceOver-Sitzung. Wo hier von Prüfungen die Rede ist,
> sind Prüfungen unter Windows gemeint.
>
> Drei Dokumente sagen, wo das Projekt steht:
> **[docs/stand.md](docs/stand.md)** – was benutzbar ist, was fehlt und was
> als Nächstes zu tun wäre. **[CHANGELOG.md](CHANGELOG.md)** – was sich je
> Fassung geändert hat. **[PLAN.md](PLAN.md)** – was gebaut werden soll und
> warum.

## Warum es das gibt

Der amtliche Fragenkatalog des Bundesverwaltungsamtes ist auf dessen Webseite
ausdrücklich als **„nicht barrierefrei"** gekennzeichnet – es ist ein PDF im
zweispaltigen Tabellensatz, dessen Lösungen als Grafik-Kreuze hinterlegt sind.
Von den rund zwölf Lernangeboten am Markt bewirbt kein einziges
Barrierefreiheit. Wer blind ist, eine Sehbehinderung hat oder keine Maus
bedienen kann, ist von der Vorbereitung auf eine staatliche Prüfung praktisch
ausgeschlossen.

Genau das ändert dieses Projekt.

## Was die Software kann

- **Der vollständige amtliche Katalog:** 575 Fragen in vier Kapiteln, mit
  sichtbarer amtlicher Nummerierung und Angabe des Katalogstands.
- **Beide Fragetypen:** Multiple Choice – bei 114 Fragen sind mehrere Antworten
  richtig – sowie 104 offene Fragen, die ausformuliert und gegen die
  Musterantwort abgeglichen werden.
- **Wiedervorlage nach Lernstand:** Falsch beantwortete Fragen kommen häufiger,
  sicher sitzende seltener.
- **Prüfungssimulation** mit einstellbarer Fragenzahl, Zeit und
  Bestehensgrenze – reale Prüfungen unterscheiden sich je nach Prüfungsstelle.
- **Offline und ohne Konto.** Keine Anmeldung, keine Cloud, keine Telemetrie.
  Der Lernstand bleibt auf dem eigenen Rechner.

## Erklärungen mit Rechtsfundstellen

Der amtliche Katalog nennt die richtige Antwort, aber nie den Grund. Diese
Software liefert ihn nach – als eigenen, deutlich gekennzeichneten Zusatz mit
Verweis auf die Norm, in der es steht.

Bei Waffenrecht ist eine erfundene Fundstelle kein Schönheitsfehler: Wer sich
darauf verlässt, lernt geltendes Recht falsch. Deshalb wird jede Fundstelle
**maschinell gegen den amtlichen Gesetzestext geprüft**. Grundlage ist das XML
von [gesetze-im-internet.de](https://www.gesetze-im-internet.de/) (WaffG,
AWaffV, BeschG, BeschussV, StGB, SprengG, 1. SprengV); `pruefe_erklaerungen.py`
schlägt Gesetz, Paragraf, Absatz, Nummer und Buchstabe einzeln nach und bricht
ab, wenn etwas davon nicht existiert.

Was diese Prüfung nicht kann: beurteilen, ob die zitierte Norm die Aussage
inhaltlich trägt. Dafür liest jede Erklärung eine zweite, unabhängige Stelle
gegen den Normtext. Wo es keine gesetzliche Grundlage gibt – bei
Sicherheitsregeln und Waffentechnik der Normalfall –, muss das ausgesprochen
werden, statt eine Fundstelle zu erfinden.

Die Einzelheiten stehen in [data-pipeline/README.md](data-pipeline/README.md).

## Barrierefreiheit ist Abnahmekriterium

Nicht „später auch noch", sondern Bedingung für jede fertige Funktion:

- Vollständige Tastaturbedienung, sichtbarer Fokus, keine Tastaturfallen
- Screenreader-tauglich (NVDA, JAWS, Narrator, VoiceOver)
- Drei Farbschemata – hell, dunkel, hoher Kontrast – die den
  Systemeinstellungen folgen; `forced-colors` und `prefers-reduced-motion`
  werden respektiert
- Textkontrast mindestens 4,5:1, angestrebt 7:1; Schriftgröße bis 200 %
- Richtig und falsch werden nie allein über Farbe angezeigt, sondern immer
  zusätzlich über Symbol und Text
- Keine Zeitlimits außerhalb der Prüfungssimulation, und auch dort abschaltbar
- Eine Hilfe, die in jeder Ansicht an derselben Stelle steht und sich mit F1
  öffnet, ohne die laufende Sitzung oder den Prüfungsbogen zu verlassen

Zielmaß ist **WCAG 2.2 Stufe AA vollständig** (auf Software angewandt nach
WCAG2ICT) zuzüglich der Kapitel 5, 7, 11 und 12 der **EN 301 549** sowie eines
festgelegten Pakets an AAA-Kriterien. Die genaue, überprüfbare Definition steht
in [PLAN.md](PLAN.md), Abschnitt 6.

Automatisch geprüft wird mit axe-core in der Testpipeline. Das ersetzt keine
Prüfung mit echten Hilfsmitteln – ein Screenreader-Durchgang bleibt vor jeder
Veröffentlichung Pflicht.

## Aufbau

| Ordner | Inhalt |
|---|---|
| `app/` | Die Anwendung: Electron, TypeScript, React ([README](app/README.md)) |
| `data-pipeline/` | Wandelt das amtliche PDF in strukturierte Daten ([README](data-pipeline/README.md)) |
| `content/` | Fragenkatalog, Alternativtexte, Lizenzübersicht der Fremdsoftware |
| `docs/` | Projektstand, Entscheidungen mit Begründung, Datenschutzerklärung, Veröffentlichungsliste, Versionshinweise (für Anwender und für den Store), Prüfbericht zur Sichtprüfung der Daten |
| `tools/` | Hilfsskripte |

## Entwickeln

Voraussetzungen: Node.js 22, Python 3.13 (nur für die Datenpipeline).

```bash
cd app
npm install
npm run dev
```

Weitere Befehle: `npm test` (Unit-Tests), `npm run test:e2e` (Oberflächentests
inklusive Barrierefreiheitsprüfung), `npm run typecheck`, `npm run lint`,
`npm run dist:win` bzw. `npm run dist:mac` (Installationspakete).

Den Fragenkatalog neu aus dem PDF erzeugen:

```bash
python data-pipeline/parse_catalog.py
python data-pipeline/validate_catalog.py
```

Die Prüfung vergleicht das Ergebnis mit den am Original ermittelten Sollwerten
und schlägt bei jeder Abweichung fehl – 575 Fragen, 1430 Antwortoptionen, 629
markierte Lösungen.

## Lizenz und Rechtslage

Die Software steht unter der **European Union Public Licence 1.2**
([LICENSE](LICENSE) englisch, [LICENSE.de.txt](LICENSE.de.txt) deutsch – beide
Fassungen sind gleichermaßen rechtsverbindlich).

**Der Fragenkatalog gehört nicht dazu.** Er ist ein amtliches Werk des
Bundesverwaltungsamtes und bekommt bewusst *keine* eigene Lizenz. Sein Wortlaut
wird unverändert übernommen und mit Quellenangabe geführt; die Aufbereitung
beschränkt sich auf die technische Umwandlung in maschinenlesbaren Text. Die
Einzelheiten und die Begründung stehen in
[LICENSES/LicenseRef-Amtliches-Werk-BVA.txt](LICENSES/LicenseRef-Amtliches-Werk-BVA.txt).
Welche Datei unter welcher Lizenz steht, regelt [REUSE.toml](REUSE.toml).

Die Lizenztexte der mitgelieferten Fremdsoftware liegen in
`content/drittlizenzen.json` und werden in der Anwendung angezeigt.

## Quellenangabe

> Amtlicher Fragenkatalog für die Sachkundeprüfung (gemäß § 7 WaffG) des
> Bundesverwaltungsamtes, Stand 16.12.2024.
> Diese Software ist kein Angebot des Bundesverwaltungsamtes.

## Rückmeldung und Kontakt

Wer in dieser Anwendung auf eine Barriere stößt oder einen Fehler findet,
melde es bitte. Eine Antwort kommt innerhalb eines Monats.

**Olaf Willerding** · Olaf@olaf-willerding.de

Willkommen sind besonders: Barrieren in der Bedienung — etwas ist mit
Tastatur, Bildschirmleser oder Vergrößerung nicht erreichbar; Fehler im
Fragenkatalog oder in einer Erklärung; Auskunft zu den
Barrierefreiheitsmerkmalen; und die Bitte, Inhalte in einer anderen Form zu
bekommen, wenn diese Anwendung nicht nutzbar ist. Dieselben Angaben stehen in
der Anwendung unter „Über diese Software" und im Handbuch.

Eine Telefonnummer und eine Anschrift gibt es hier bewusst nicht. Prüfschritt
9.2.3 des Barrierefreiheits-Prüfplans verlangt einen Kanal, der „mindestens
E-Mail oder ein barrierefreies Formular, nicht ausschließlich Telefon" ist —
E-Mail allein erfüllt ihn, und private Angaben gehören nicht in ein
öffentliches Archiv.

## Haftungsausschluss

Dieses Programm bereitet auf eine Prüfung vor, es ersetzt keinen Lehrgang und
keine Rechtsberatung. Ob eine Sachkundeprüfung bestanden ist, entscheidet allein
der zuständige Prüfungsausschuss. Fragenzahl, Zeit und Bestehensgrenze
unterscheiden sich je nach Prüfungsstelle. Maßgeblich sind immer die geltenden
Rechtsvorschriften in ihrer jeweils aktuellen Fassung.
