/** * Vom Wort des Prüflings zum Wort des Katalogs. * * ## Warum es das gibt * * Der Wortschatz eines Kursteilnehmers ist nicht der des Gesetzgebers. * Nachgemessen am amtlichen Katalog finden **null Fragen**: „Diebstahl“, * „gestohlen“, „verloren“, „Pfefferspray“, „Elektroschocker“, „Umzug“, * „Todesfall“, „Springmesser“. Der Katalog sagt stattdessen „abhanden“, * „Reizstoff“, „Elektroimpulsgerät“, „Wohnung“, „verstorben“. Das sind genau * die Wörter, die niemand tippt, der sie noch nicht kennt – und das ist die * erste Suche, die ein Kursteilnehmer eintippt. * * ## Warum als Festwert im Quelltext und nicht als Inhaltsdatei * * Dieselbe Überlegung wie bei `hilfe.ts` und `kontakt.ts`: Die Liste ist * klein, sie gehört zur Bedienung und nicht zum Lehrstoff, und sie ist mit * dem Quelltext versioniert und getestet. Eine eigene Inhaltsdatei brächte * Schema, Validierung im Hauptprozess, einen Ladeweg und einen * Pflegeprozess – für zwei Dutzend Wortpaare. * * ## Sie wirkt sichtbar, nie heimlich * * Es findet **keine** stille Erweiterung der Suche statt. Die Brücke wird als * Angebot mit der Zahl in der Beschriftung gezeigt: „Der Katalog nennt das * ‚Sicherheitsbehältnis‘ – auch danach suchen (23 Fragen)“. Wer eine * Trefferliste sieht, soll wissen, wonach gesucht wurde. * * ## Was sie nicht ist * * Kein Glossar – das erklärt Begriffe und steht in `content/glossar.json`. * Kein Stemmer und keine Tippfehlertoleranz. Nur eine Übersetzung zwischen * zwei Wortschätzen, für die Fälle, in denen der Katalog schweigt. */ export interface Brueckeneintrag { /** Wörter, die jemand tippt, der die Fachsprache nicht kennt. */ readonly gesucht: readonly string[]; /** Wörter, unter denen der Katalog dieselbe Sache führt. */ readonly katalog: readonly string[]; } export const BEGRIFFSBRUECKE: readonly Brueckeneintrag[] = Object.freeze([ Object.freeze({ gesucht: Object.freeze(['tresor', 'waffenschrank', 'panzerschrank', 'safe', 'stahlschrank']), katalog: Object.freeze(['Sicherheitsbehältnis', 'Widerstandsgrad', 'Aufbewahrung']), }), Object.freeze({ gesucht: Object.freeze([ 'diebstahl', 'gestohlen', 'geklaut', 'klauen', 'verloren', 'weggekommen', 'einbruch', ]), katalog: Object.freeze(['abhanden', 'Verlust', 'unverzüglich']), }), Object.freeze({ gesucht: Object.freeze(['pfefferspray', 'reizgas', 'tränengas', 'cs-gas', 'abwehrspray']), katalog: Object.freeze(['Reizstoff']), }), Object.freeze({ gesucht: Object.freeze(['elektroschocker', 'taser', 'schocker']), katalog: Object.freeze(['Elektroimpulsgerät']), }), Object.freeze({ gesucht: Object.freeze(['springmesser', 'butterflymesser', 'faustmesser', 'klappmesser']), katalog: Object.freeze(['Messer', 'Hieb', 'Stoß']), }), Object.freeze({ gesucht: Object.freeze(['erbwaffe', 'geerbt', 'vererbt', 'todesfall', 'gestorben', 'nachlass']), katalog: Object.freeze(['Erbe', 'verstorben', 'Blockiersystem']), }), Object.freeze({ gesucht: Object.freeze(['umzug', 'umgezogen', 'ummelden', 'adressänderung', 'wohnungswechsel']), katalog: Object.freeze(['Wohnung', 'anzeigen']), }), Object.freeze({ gesucht: Object.freeze(['nachtsichtgerät', 'laserpointer', 'zielhilfe', 'rotpunkt']), katalog: Object.freeze(['Zielscheinwerfer']), }), Object.freeze({ gesucht: Object.freeze(['betrunken', 'alkoholisiert', 'drogen', 'promille']), katalog: Object.freeze(['Alkohol']), }), Object.freeze({ gesucht: Object.freeze(['putzen', 'reinigen', 'pflegen', 'ölen']), katalog: Object.freeze(['instand']), }), Object.freeze({ gesucht: Object.freeze(['dekowaffe', 'deko', 'salutwaffe', 'attrappe']), katalog: Object.freeze(['unbrauchbar', 'Dekoration']), }), Object.freeze({ gesucht: Object.freeze(['sammler', 'sammeln']), katalog: Object.freeze(['Sammlung']), }), ]);