# Amateurfunk-Anki Download the German amateur-radio exam question catalog from the Bundesnetzagentur and turn it into Anki decks. ## Quick start ```sh make # fetch + build (default) make fetch # download + extract the catalog only → data/ make anki # rebuild .apkg files from data/ → anki/ make test # run both test suites make clean # remove data/ and anki/ ``` Output: five `.apkg` files under `anki/`. Betriebliche and Vorschriften get one deck each (shared across all license classes); Technische is split per class into three decks (N / E / A) following the catalog's `class` field. A class-A candidate who wants every Technische question imports all three Technische decks. Re-importing a newer build preserves your review history. ## Exam question source The catalog is published by the Bundesnetzagentur (BNetzA), the German federal regulator for telecommunications. Current edition: **3. Auflage, März 2024** (issued 2024-03-20, ~1750 questions across license classes N, E, A). - Landing page: - Machine-readable ZIP (what we download): [`PruefungsfragenZIP.zip`](https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Amateurfunk/Fragenkatalog/PruefungsfragenZIP.zip?__blob=publicationFile) — contains the JSON question tree, the `svgs/` figure folder, and a `README.txt` with the official Quellenvermerk. - Human-readable PDF (not used by this pipeline): [`Pruefungsfragen.pdf`](https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Amateurfunk/Fragenkatalog/Pruefungsfragen.pdf?__blob=publicationFile) BNetzA replaces the file in place across editions, so the URL is stable; the fetcher detects updates via the HTTP `Last-Modified` header. ## See also [**50ohm.de**](https://50ohm.de/) is an excellent companion learning resource for the same exam — community-maintained explanations, worked examples, and study material that complement the bare question catalog the decks built here are based on. ## Requirements Python 3.11+, standard library only. No third-party dependencies. ## Explanations The back of each card optionally carries a terse English explanation of *why* the right answer is right. Explanations are not part of the BNetzA catalog — they're authored separately (by humans or AI agents) into `explanations.json` at the repo root. The build is non-blocking on this: questions without an entry just show no explanation block. Entries with `confidence < 7` render a small "low confidence" badge so learners know the reasoning is provisional. `EXPLANATIONS.md` is the editorial contract: schema, sourcing guidance, confidence scale, and the workflows an AI agent should follow when asked to add or improve entries. ## More - `CLAUDE.md` — project orientation, pipeline overview. - `DESIGN.md` — source-discovery notes, JSON schema, per-stage design contracts. - `EXPLANATIONS.md` — schema + workflows for the explanations database. ## License The downloader and builder code is in this repo. The exam questions themselves are published by the Bundesnetzagentur under [DL-DE→BY-2.0](https://www.govdata.de/dl-de/by-2-0); attribution is preserved in every generated artifact (`README.txt` inside `data//`, `attribution` field in the per-edition manifest).