Glossary
The German parliamentary terms this project deals in, and the project’s own terms. Written for someone who knows software but not the Bundestag.
The documents
Kleine Anfrage — a written question from members of parliament to the government, which the government must answer in writing. The core instrument this project collects. The Bundestag and most Länder use this name.
Schriftliche Anfrage — the same instrument under a different name, used by
Berlin and Bayern. Why document_type is a field rather than an assumption.
Große Anfrage — a larger written question, usually debated in plenary. Modelled but not collected by any adapter yet.
Antwort — the government’s written answer. Sometimes a separate Drucksache (the
Bundestag), sometimes the same PDF as the question (Berlin). Hence the
question_pdf / answer_pdf / combined_pdf roles on a source document.
Drucksache — a numbered parliamentary paper. Its number, the
Drucksachennummer, is the citation: 19/10006 is paper 10006 of the 19th
Wahlperiode. This project keeps it exactly as printed in reference.
Wahlperiode — the legislative period, the term between two elections. Numbering restarts each period, so a Drucksachennummer is only unique within one.
Plenarprotokoll — the verbatim record of a plenary sitting. Present in the feeds; not collected here.
Vorgang — a procedure: one parliamentary matter and every document belonging to it. A Kleine Anfrage is one Vorgang with two documents.
Vorgangsposition — one step of a Vorgang, in the Bundestag’s DIP data model. The question and the answer are two positions of the same Vorgang.
Urheber — the originator. For a question, the MdBs or the Fraktion who asked; for an answer, the ministry that signed it.
Fraktion — a parliamentary group. A Kleine Anfrage is often brought in by a
Fraktion rather than by named individuals; the record then names the Fraktion as
the asker with role: "Fraktion", because inventing a person would be worse.
Anlage — an attachment. Answers frequently push their substance into Anlage 1,
which is a separate file the record references but does not contain.
Verschlusssache / VS-NUR FÜR DEN DIENSTGEBRAUCH — a classification marking.
markers.classified records that a document carries one, read from the marking as it
is printed: a VS grade (VS-NfD, VS – NUR FÜR DEN DIENSTGEBRAUCH, VS-Vertraulich),
a grade stamped in capitals (GEHEIM, STRENG GEHEIM, VERSCHLUSSSACHE), or a
sentence that something is “als Verschlusssache” classified. The words in ordinary prose
— “unterliegt der Geheimhaltung” under a statistics table, “die Angaben sind geheim” —
do not set it.
The systems
DIP — Dokumentations- und Informationssystem für Parlamentsmaterialien, the Bundestag’s documentation system, and the only real JSON API in this project.
PARDOK — the Abgeordnetenhaus von Berlin’s parliamentary documentation, and the name of its daily XML open-data export.
Parlamentsspiegel — the 16 Landtage’s shared research portal, run by the Landtag NRW. Roughly 984 000 Vorgänge. No API, and by its own statement no document interface — it links to the owning Landtag.
Parlamentsspiegel Export 1.0 — the XML DTD the Länder deliver to the
Parlamentsspiegel in. Berlin publishes its own feed in exactly this format, which is
why one parser (src/sources/pardok.ts) serves both.
GLOMAS, j3s — the two vendors whose systems most Landtage run. Neither was designed for open data.
This project’s terms
The line — the deterministic runtime. Pinned code, pinned weights, no
generative model, same input → byte-identical output. ka is the line.
The factory — build-time tooling, where LLMs are allowed to live: they write the
extractors, propose the goldens, and run the repair loop. ka-factory is the
factory’s own deterministic tooling; the agent that drives it is not shipped.
Tier — which deterministic path an adapter declares: structured (map fields),
text_layer (parse the PDF’s text), ocr (a pinned perceptual model, then parse).
A record’s extraction.tier says what actually ran: text_layer when a document’s
text was read, otherwise the source’s own tier — a text-layer source whose PDF failed
is not promoted to structured.
Abstention — the extractor refusing to produce a value it cannot derive with
certainty. Recorded in abstained_fields, surfaced by ka review, whose queue is
every record with an abstention that no person has marked human_verified yet. The project’s
central safety mechanism: a record may publish with holes, because holes are honest
and invented content is not.
Some holes are named whatever the document: no asker (askers, also when a name still
carries a party word or a bracket the parser did not understand), no question date
(dates.submitted — a combined paper is dated by its answer), and for an answered
record no answer date (dates.answered) or no answering body (answered_by.ministry).
A field the schema requires keeps a placeholder while it is abstained — markers
still reads classified: false, contains_tables: false, attachments_referenced:
[] — and that placeholder is not a finding: when markers is in abstained_fields,
nothing was checked.
Golden fixture — a verified input→record pair, frozen on disk with the exact input bytes. Because the line is deterministic these are real asserts, not fuzzy scores.
Drift — an upstream changing under the line: a redesign, a moved endpoint, a new document layout. Detected by watching discovery counts and abstention rates, and repaired in the factory, never at runtime.
Practical obscurity — information that is technically public but effectively unreachable because it is scattered, unindexed and non-aggregatable. The thing this project exists to defeat. See CONCEPT.md §11.