imple fdc5932d7d Randomize questions on every Anki regen
Also make explanation section slightly more readable
2026-06-04 11:10:08 +02:00
2026-05-26 15:26:04 +02:00
2026-05-20 17:56:48 +02:00
2026-05-20 13:59:06 +02:00
2026-05-26 15:25:42 +02:00
2026-05-26 23:04:54 +02:00
2026-05-26 15:28:15 +02:00
2026-05-20 18:18:53 +02:00

Amateurfunk-Anki

Download the German amateur-radio exam question catalog from the Bundesnetzagentur and turn it into Anki decks.

Quick start

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 sections

The BNetzA exam has three parts (Prüfungsteile): two shared across all license classes plus the technical part, which is split per license tier. The question ID's first letter encodes which part it belongs to:

Non-technical (one deck each, taken by every candidate):

Section ID prefix Questions
Betriebliche Kenntnisse B* 172
Kenntnisse von Vorschriften V* 204

Technical (one deck per license class):

Class Section name ID prefix Questions
N Technische Kenntnisse (N) N* 195
E Technische Kenntnisse (E) E* 463
A Technische Kenntnisse (A) A* 716

Counts are from the current edition (3. Auflage, März 2024; ~1750 questions total). The license tiers are cumulative for the exam: a class-E candidate is responsible for N* + E* + B* + V*; a class-A candidate is responsible for everything. Filter inside Anki by deck, by the klasse-N|E|A tag, or by the Number field prefix.

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).

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 — community-maintained explanations, worked examples, and study material for the same exam. Pairs well with these decks for the why behind each question.
  • DARC — Deutscher Amateur-Radio-Club, the German national IARU member-society. Publishes the German band plan, regulatory liaison material, and a large body of technical and operating guidance referenced throughout the amateur-radio community.

Requirements

Python 3.11+, standard library only. No third-party dependencies.

Explanations

⚠ Important: AI-generated content. Every explanation shipped with these decks is written by an AI agent following the contract in EXPLANATIONS.md. AI agents make mistakes — they misread formulas, misquote law text, and confidently cite wrong sources. Do not treat any explanation as the ultimate source of truth. If something looks off, or if an explanation contradicts your existing understanding, verify against the primary source listed in the card (or against the catalog itself, the AFuV/AFuG on gesetze-im-internet.de, or the resources under See also). The official answer is always the one from the BNetzA catalog — the explanation is just a study aid, not an authority. Cards with a small low confidence badge are explicitly flagged as provisional and should be double-checked before you rely on them.

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.

References

⚠ Important: AI-generated content. The files under references/ are compiled by an AI agent from the exam catalog and public sources. AI agents make mistakes — they mis-transcribe figures, miscopy table boundaries, and confidently state things that are subtly wrong. Do not treat these tables as authoritative. Verify against the primary sources cited in each file (the official IARU Region 1 band plans, the AFuV/AFuG on gesetze-im-internet.de, or the BNetzA catalog itself) before relying on them.

The references/ directory holds study aids that span many questions — lookup tables cross-referenced to the catalog. They are reading material, not part of the build, and are not bundled into the .apkg decks.

  • references/Frequencies.md — IARU Region 1 band-plan frequency recommendations (HF through microwave), cross-referenced to the exam questions that test them.
  • references/Call-Signs.md — call-sign patterns, suffixes, and country prefixes that appear in the catalog.
  • references/Q-Codes.md — Q-codes and operating shorthand used in the questions.

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; attribution is preserved in every generated artifact (README.txt inside data/<edition>/, attribution field in the per-edition manifest).

S
Description
No description provided
Readme 2.3 MiB
Languages
Python 99.8%
Makefile 0.2%