---
{
  "title": "Termbox: Ein FHIR-Terminologieserver (Einführung)",
  "description": "Termbox ist ein hochperformanter FHIR-Terminologieserver: SNOMED, LOINC, RxNorm, ICD-10 und Konformität mit FHIR R4/R5 — kostenlos testen.",
  "date": "2026-04-20",
  "author": "Orlando Osorio",
  "tags": [
    "Terminology",
    "Termbox",
    "Announcement"
  ]
}
---
Wir freuen uns, Termbox ankündigen zu dürfen: einen [FHIR-Terminologieserver](/articles/two-phase-fhir-terminology). Von Grund auf mit Fokus auf Performance entwickelt. Konzipiert für Skalierbarkeit und Anpassungsfähigkeit an jede Terminologie, unabhängig von ihrer Komplexität.

## Warum wir Termbox entwickelt haben

Nach über 20 Jahren im Gesundheitswesen und mehr als 10 Jahren Arbeit mit FHIR haben wir ein wiederkehrendes Muster beobachtet: Organisationen entwickeln eine Lösung, die häufig Benutzeroberflächen, Speicherschichten, Integrations-Pipelines, Validierung und vieles mehr umfasst. Sie setzen FHIR auf mehreren Ebenen ein, damit verschiedene Komponenten problemlos miteinander interagieren können. Irgendwann müssen sie Daten aus externen Quellen beziehen: Arzneimittelinformationen, klinisches Wissen, Labortests, Krankheitsklassifikationen. Sie müssen Daten validieren, Sucheingaben unterstützen, lokale Codes in Standardcodes übersetzen. All das sind Terminologieprobleme.

Für einfachere Fälle haben wir bisher das [Aidbox-Terminologiemodul](/docs/aidbox/terminology-module/aidbox-terminology-module) empfohlen — einen schlanken Ansatz, der gängige Anwendungsfälle abdeckt und Teams einen schnellen Einstieg ermöglicht (ein verbreiteter Ansatz in der Branche: eine leichtgewichtige Implementierung der Grundfunktionen). Doch mit wachsenden Anforderungen werden die Grenzen sichtbar: komplexe Filterung, Hierarchien, Lokalisierung, komplexe Wertesets, syntaxbasierte Terminologien. Hinzu kommt die Frage des Inhalts selbst: Quellen finden, unterschiedliche Formate verarbeiten, verschiedene Veröffentlichungszyklen managen, Lizenzen verwalten, alles aktuell halten. Die Empfehlung lautet dann: einen Terminologieserver einzusetzen.

Implementierer erkennen schnell den Mehrwert, Terminologie als eigenständigen Server oder als eigene Komponente auszulagern. Angesichts der Natur der Daten — unveränderlich, mit eigenem Ursprung und Lebenszyklus, mandantenunabhängig — ergibt das architektonisch Sinn. Es gibt jedoch Bedenken: Ein Terminologieserver kann zum Flaschenhals werden. Benutzeranfragen müssen innerhalb von Millisekunden beantwortet werden, auch bei der Suche über Hunderttausende von Begriffen; Validierung während der Datenaufnahme kann das gesamte System verlangsamen. Hinzu kommt der Betriebsaspekt, eine häufige Sorge: einen weiteren Dienst betreiben, Pipelines einrichten, um die Daten aktuell zu halten. Wir haben Termbox entwickelt, um all diese Bedenken auszuräumen.

## Performance

Termbox ist schnell — wirklich schnell.

Wir wussten, dass Performance eine kritische Anforderung war, und haben uns vorgenommen, einen Server zu entwickeln, der jede Terminologie verarbeiten kann — egal wie komplex — und dabei selbst bei komplexen Operationen Ergebnisse in unter 40 ms liefert.

Anfang dieses Monats haben wir den [FHIR TX Benchmark](fhir-tx-benchmark) veröffentlicht: einen offenen Benchmark-Vergleich der wichtigsten Terminologieserver auf dem Markt. Termbox belegte den ersten Platz, und das mit deutlichem Abstand: mehrfach schneller als die Konkurrenz, bei den komplexesten Operationen bis zu 30-mal schneller.

<div class="table-wrapper narrow" style="background:#181b2e;border-radius:10px;overflow:hidden;font-family:system-ui,-apple-system,sans-serif;margin:2rem 0;border:1px solid #252840;">
  <table style="width:100%;border-collapse:collapse;font-size:14px;white-space:nowrap;">
    <thead>
      <tr style="border-bottom:1px solid #252840;">
        <th style="text-align:left;padding:8px 16px;color:#6b7280;font-size:11px;text-transform:uppercase;letter-spacing:0.06em;background:transparent;border-bottom:1px solid #252840;width:40px;">#</th>
        <th style="text-align:left;padding:8px 16px;color:#6b7280;font-size:11px;text-transform:uppercase;letter-spacing:0.06em;background:transparent;border-bottom:1px solid #252840;width:130px;">Server</th>
        <th style="text-align:left;padding:8px 16px;color:#6b7280;font-size:11px;text-transform:uppercase;letter-spacing:0.06em;background:transparent;border-bottom:1px solid #252840;width:100%;">Score</th>
      </tr>
    </thead>
    <tbody>
      <tr style="border-bottom:1px solid #252840;">
        <td style="padding:9px 16px;color:#6b7280;font-size:12px;vertical-align:middle;border-bottom:1px solid #252840;">1</td>
        <td style="padding:9px 16px;font-weight:500;color:#e4e4e4;vertical-align:middle;border-bottom:1px solid #252840;">termbox</td>
        <td style="padding:9px 16px;min-width:220px;width:100%;vertical-align:middle;border-bottom:1px solid #252840;">
          <div style="display:flex;align-items:center;gap:10px;">
            <div style="flex:1;height:22px;border-radius:4px;background:#1e2236;overflow:hidden;">
              <div style="--s:100;width:calc(var(--s) * 1%);height:100%;border-radius:4px;background:linear-gradient(90deg,#f2495c,#fade2a,#73bf69);background-size:calc(100% * 100 / var(--s)) 100%;"></div>
            </div>
            <span style="font-weight:600;color:#e4e4e4;min-width:38px;text-align:right;">100%</span>
          </div>
        </td>
      </tr>
      <tr style="border-bottom:1px solid #252840;">
        <td style="padding:9px 16px;color:#6b7280;font-size:12px;vertical-align:middle;border-bottom:1px solid #252840;">2</td>
        <td style="padding:9px 16px;font-weight:500;color:#e4e4e4;vertical-align:middle;border-bottom:1px solid #252840;">fhirsmith</td>
        <td style="padding:9px 16px;min-width:220px;width:100%;vertical-align:middle;border-bottom:1px solid #252840;">
          <div style="display:flex;align-items:center;gap:10px;">
            <div style="flex:1;height:22px;border-radius:4px;background:#1e2236;overflow:hidden;">
              <div style="--s:38;width:calc(var(--s) * 1%);height:100%;border-radius:4px;background:linear-gradient(90deg,#f2495c,#fade2a,#73bf69);background-size:calc(100% * 100 / var(--s)) 100%;"></div>
            </div>
            <span style="font-weight:600;color:#e4e4e4;min-width:38px;text-align:right;">38%</span>
          </div>
        </td>
      </tr>
      <tr style="border-bottom:1px solid #252840;">
        <td style="padding:9px 16px;color:#6b7280;font-size:12px;vertical-align:middle;border-bottom:1px solid #252840;">3</td>
        <td style="padding:9px 16px;font-weight:500;color:#e4e4e4;vertical-align:middle;border-bottom:1px solid #252840;">ontoserver</td>
        <td style="padding:9px 16px;min-width:220px;width:100%;vertical-align:middle;border-bottom:1px solid #252840;">
          <div style="display:flex;align-items:center;gap:10px;">
            <div style="flex:1;height:22px;border-radius:4px;background:#1e2236;overflow:hidden;">
              <div style="--s:21;width:calc(var(--s) * 1%);height:100%;border-radius:4px;background:linear-gradient(90deg,#f2495c,#fade2a,#73bf69);background-size:calc(100% * 100 / var(--s)) 100%;"></div>
            </div>
            <span style="font-weight:600;color:#e4e4e4;min-width:38px;text-align:right;">21%</span>
          </div>
        </td>
      </tr>
      <tr style="border-bottom:1px solid #252840;">
        <td style="padding:9px 16px;color:#6b7280;font-size:12px;vertical-align:middle;border-bottom:1px solid #252840;">4</td>
        <td style="padding:9px 16px;font-weight:500;color:#e4e4e4;vertical-align:middle;border-bottom:1px solid #252840;">snowstorm</td>
        <td style="padding:9px 16px;min-width:220px;width:100%;vertical-align:middle;border-bottom:1px solid #252840;">
          <div style="display:flex;align-items:center;gap:10px;">
            <div style="flex:1;height:22px;border-radius:4px;background:#1e2236;overflow:hidden;">
              <div style="--s:7;width:calc(var(--s) * 1%);height:100%;border-radius:4px;background:linear-gradient(90deg,#f2495c,#fade2a,#73bf69);background-size:calc(100% * 100 / var(--s)) 100%;"></div>
            </div>
            <span style="font-weight:600;color:#e4e4e4;min-width:38px;text-align:right;">7%</span>
          </div>
        </td>
      </tr>
      <tr>
        <td style="padding:9px 16px;color:#6b7280;font-size:12px;vertical-align:middle;">5</td>
        <td style="padding:9px 16px;font-weight:500;color:#e4e4e4;vertical-align:middle;">hades</td>
        <td style="padding:9px 16px;min-width:220px;width:100%;vertical-align:middle;">
          <div style="display:flex;align-items:center;gap:10px;">
            <div style="flex:1;height:22px;border-radius:4px;background:#1e2236;overflow:hidden;">
              <div style="--s:6;width:calc(var(--s) * 1%);height:100%;border-radius:4px;background:linear-gradient(90deg,#f2495c,#fade2a,#73bf69);background-size:calc(100% * 100 / var(--s)) 100%;"></div>
            </div>
            <span style="font-weight:600;color:#e4e4e4;min-width:38px;text-align:right;">6%</span>
          </div>
        </td>
      </tr>
    </tbody>
  </table>
</div>

Wir werden einen eigenen Beitrag zur Performance veröffentlichen: wie wir sie erreicht haben, welche Herausforderungen es gab und was die Zahlen in der Praxis bedeuten.

## Inhalt

Einer der versteckten Kostenfaktoren beim Betrieb eines Terminologieservers ist die Aufbereitung der Inhalte. Quellen finden, Lizenzanforderungen verstehen und verhandeln, verschiedene Formate nach FHIR konvertieren, laden und indizieren, Pipelines einrichten, um die Inhalte aktuell zu halten. Es können Wochen vergehen, bis alles eingerichtet ist.

Termbox unterstützt mehrere Wege zum Laden von Daten: FHIR-Ressourcen, Bundles, Pakete, vorindizierte Binärdateien, Atom-Feeds. Das Laden ist schnell: Von null bis zu einem vollständig indizierten SNOMED dauert es etwa 1 Minute.

Wir arbeiten außerdem an der Termbox Gallery: einem kuratierten Repository von FHIR-Terminologien, das auf jahrelanger Arbeit mit unseren Kunden basiert: Konvertierungsskripte, Datenpipelines, Lizenzvereinbarungen — einschließlich Vertriebsrechten für einige Terminologien, sodass Sie die Inhalte direkt von uns beziehen können. Dazu folgt in Kürze ein eigener Beitrag.

## Konformität

Termbox deckt die am häufigsten verwendeten FHIR-Terminologieoperationen ab: `$lookup`, `$validate-code`, `$expand`, `$subsumes` ((`$translate` folgt in Kürze)). Die Operationen, von denen die meisten Systeme abhängig sein dürften.

Wir arbeiten intensiv an der vollständigen Konformität mit der Testsuite des [FHIR TX Ecosystem IG](https://build.fhir.org/ig/HL7/fhir-tx-ecosystem-ig/) und machen gute Fortschritte. Die meisten noch fehlschlagenden Tests betreffen oberflächliche Details wie die Formatierung von Fehlermeldungen oder Metadatenparameter — keine Lücken in der Kernfunktionalität. Wir erwarten, in den kommenden Monaten vollständige Konformität zu erreichen. Ein eigener Beitrag zur Konformität ist in Vorbereitung.

## Jetzt ausprobieren

Mit Termbox können Sie in wenigen Minuten starten: ein `docker compose up` genügt. Die Development License ist kostenlos für Entwicklung, Evaluierung und den Nicht-Produktionseinsatz.

<div style="text-align:center;margin:2rem 0;">
  <a href="/docs/termbox/getting-started" style="display:inline-block;background:#ea4a35;color:#fff;font-weight:600;padding:12px 28px;border-radius:8px;text-decoration:none;font-size:15px;">Jetzt starten</a>
</div>

## Ausblick

Dies ist der erste Beitrag einer Serie über Termbox. Wir werden Performance, Content-Management und Konformität vertieft behandeln. Weitere Beiträge folgen in Kürze.

Außerdem arbeiten wir derzeit an einer gehosteten SaaS-Option für Teams, die keine eigene Instanz betreiben möchten. Darüber hinaus werden wir gemeinsam mit der Community daran arbeiten, die Konvertierungsskripte, die wir für den Aufbau der FHIR-Distributionen von Terminologien verwenden, als Open Source bereitzustellen.

Im Rahmen unserer Beratungstätigkeit arbeiten wir auch mit Enterprise-Kunden an Funktionen, die noch nicht standardisiert sind: Wissensdatenbankunterstützung, KI-Integration und -Fähigkeiten, semantische Suche. Dazu werden wir bald mehr berichten.

Wir stehen erst am Anfang. Es gibt eine Roadmap mit Funktionen, auf die wir uns freuen, und wir werden weitere Details veröffentlichen, sobald die Dinge Gestalt annehmen.

Wenn Sie Fragen haben, Feedback geben möchten oder einfach über Terminologie sprechen möchten — melden Sie sich. Sie finden uns in der [Health Samurai Community auf Zulip](https://connect.health-samurai.io/) oder über unsere [Kontaktseite](/contacts).

---

*Bearbeitung (Mai 2026): Einige Lizenzdetails in diesem Artikel wurden aktualisiert, um aktuelle Informationen widerzuspiegeln.*