|
14 Min. Lesezeit
|

Ungebundene Bindings

Zusammenfassung

Additional Bindings – eingefĂŒhrt in FHIR R5 – ermöglichen es, mehrere Terminology-Constraints an ein einzelnes Element zu knĂŒpfen, jedes mit einem eigenen Zweck: spezifische Codes fĂŒr neue Daten vorschreiben, eine Einstiegs-Teilmenge vorschlagen, UI-Hinweise geben oder jurisdiktionsspezifische Regeln durchsetzen. Sie schichten sich ĂŒber das Haupt-Binding und ersetzen es nie.

Diesen Artikel zusammenfassen mit:
ChatGPTPerplexityClaudeGrok

Ein Element, ein Binding – und seine Grenzen

Seit FHIR DSTU2 hat jedes kodierte Element genau ein Binding – eine Regel, die das Element an eine Menge erlaubter Codes (ein ValueSet) mit einer bestimmten StĂ€rke knĂŒpft. Die StĂ€rke gibt an, wie streng die Codes befolgt werden mĂŒssen: required bedeutet, Sie MÜSSEN einen Code aus dieser Menge verwenden; extensible bedeutet, verwenden Sie einen, wenn er auf Ihr Konzept zutrifft, andernfalls dĂŒrfen Sie andere Codes nutzen; preferred und example sind zunehmend lockerere Empfehlungen. FĂŒr einfache Elemente wie Patient.gender (gebunden an AdministrativeGender mit required-StĂ€rke) funktioniert dieses Modell einwandfrei.

Doch als die FHIR-Nutzung wuchs – ĂŒber Jurisdiktionen, klinische DomĂ€nen und regulatorische Regime hinweg – stieß das Ein-Binding-Modell an seine Grenzen. Profile-Autoren (Personen, die StructureDefinitions schreiben – Constraint-Mengen auf Basis von FHIR-Ressourcen) stießen immer wieder auf Probleme, die ein einzelnes ValueSet nicht ausdrĂŒcken konnte.

Die Extensible+Max-Saga

Der erste Workaround war das Extensible+Max-Muster. US Core benötigte eine Möglichkeit zu sagen: „Verwenden Sie Codes aus diesem kleinen ValueSet, aber wenn Sie erweitern mĂŒssen, bleiben Sie innerhalb dieser grĂ¶ĂŸeren Grenze." Die Lösung war die maxValueSet-Extension, eingefĂŒhrt in STU3 und in R4 verfeinert.

Sie sorgte sofort fĂŒr Verwirrung. Die Spezifikation beschrieb sie als „ein ‚required'-Binding ĂŒber dem extensible-Binding" – aber niemand war sich einig, was das in der Praxis bedeutete. Die zentrale Spannung, die in einem 182-Nachrichten-Thread auf chat.fhir.org offen zutage trat: Argonaut benötigte „diesen Code oder Freitext" fĂŒr die ONC-KonformitĂ€t – KrankenhĂ€user hatten Freitextprobleme, die „buchstĂ€blich ein String im lokalen System" waren (Jenni Syed). Aber keine Kombination von Binding-StĂ€rken konnte das ausdrĂŒcken. Josh Mandel wies darauf hin, dass US Core Immunization vaccineCode an CVX mit sowohl extensible als auch max – auf dasselbe ValueSet – gebunden hatte: „Aus einer InteroperabilitĂ€tsperspektive kann ich nicht verstehen, warum die Wahl von extensible und maximum besser ist als einfach extensible zu wĂ€hlen."

Parallel dazu versuchte eine minValueSet-Extension, eine Untergrenze fĂŒr extensible Bindings festzulegen – wenn ein Code aus dieser Menge zutrifft, mĂŒssen Sie ihn verwenden. Aber sie vermischte Sender-Constraints mit EmpfĂ€nger-Pflichten, und Validatoren konnten sie nicht durchsetzen.

Beide Extensions konnten nur zwei enge AnwendungsfĂ€lle ausdrĂŒcken, und selbst diese wurden kaum verstanden.

Das „Ich möchte mehrere Bindings"-Problem

Gleichzeitig baten IG-Autoren immer wieder nach mehreren Bindings fĂŒr ein einzelnes Element. Der hĂ€ufigste Treiber war IPS (International Patient Summary), das eine Auswahl von Terminology-Bindings auf einem CodeableConcept ausdrĂŒcken musste – verschiedene Code-Systeme fĂŒr verschiedene Jurisdiktionen. Das einzige verfĂŒgbare Werkzeug war Slicing – FHIRs Mechanismus, um zu sagen: „Dieses wiederholende Element muss EintrĂ€ge haben, die bestimmten Mustern entsprechen." Auf CodeableConcept.coding angewendet, ermöglichte Slicing, ein Coding aus SNOMED und ein weiteres aus ICD-10 zu verlangen. Aber es war komplex zu verfassen, fĂŒr Implementierer schwer verstĂ€ndlich und in der Profil-Darstellung weitschweifig.

Wie Grahame Grieve es formulierte: „Es gibt viel Slicing in Implementation Guides, weil Autoren sagen wollen: ‚Einer der Codes muss aus ValueSet X stammen.' Das ist die hĂ€ufigste Verwendung von Slicing, und man muss es tun, weil ein Binding auf alle Wiederholungen des Codes zutrifft. Aber Slicing ist fĂŒr Implementierer schwierig."

Grahames Vorschlag (Februar 2022)

Im Februar 2022 schlug Grahame Grieve eine neue Extension auf ElementDefinition.binding vor – additional bindings. Die Kernidee: Das Haupt-Binding bleibt das KonformitĂ€ts-Binding (was der Validator durchsetzt), aber Sie können zusĂ€tzliche Bindings mit verschiedenen Zwecken anhĂ€ngen:

Ich möchte eine Extension auf ElementDefinition.binding definieren, die zusĂ€tzliche Bindings spezifiziert. ElementDefinition.binding ist das KonformitĂ€ts-Binding: was der Validator durchsetzt – und davon kann es nur eines geben. Aber darĂŒber hinaus werden Designer in der Lage sein, zusĂ€tzliche Bindings anzugeben.

Seine ursprĂŒngliche Zweck-Liste – conformance, required, recommended, UI, starter, component, minimum, maximum – adressierte jede LĂŒcke, um die die Community Workarounds entwickelt hatte. Die Motivation:

An einigen Stellen verwenden wir extensible+max und wollen eigentlich ein Basis-ValueSet mit einem empfohlenen ValueSet. An einigen Stellen verwenden wir extensible, und wir wollen eigentlich ein ziemlich großes Basis-ValueSet mit einem required – das ist es, was die Gesetzgebung fĂŒr neue DatensĂ€tze will.

Rob Hausam erkannte sofort den Wert fĂŒr IPS: „Ich stimme zu, dass dies wie ein Ersatz fĂŒr Slicing auf CodeableConcept.coding aussieht... Wenn das alles zutrifft, wann können wir damit in IPS beginnen?"

Lloyd McKenzie widersprach: „Wenn Regeln fĂŒr verschiedene Kontexte unterschiedlich sind, dann braucht man verschiedene Profile." Aber Grahame entgegnete: „Es ist kein guter Dienst an den Nutzern, unzĂ€hlige Profile zu haben, die sich nur nach Nutzungskontext und einigen Bindings unterscheiden."

Bis April 2022 hatte der IG Publisher Entwurfs-Rendering-UnterstĂŒtzung, und Grahame fĂŒgte das any-Flag hinzu – „wenn any = true, dann gilt das Binding nur fĂŒr eine der Wiederholungen, nicht fĂŒr alle." Bis August 2022 verwendete IPS es bereits. Das Feature wurde dem R5-Ballot zugesagt als ElementDefinition.binding.additional und wurde in R5 (MĂ€rz 2023) als erstklassiges Element ausgeliefert – nicht mehr als Extension.

Wie es funktioniert: Semantik zuerst

Bevor wir in den Zweck-Katalog eintauchen, zwei grundlegende Regeln.

Regel 1: Alle Bindings sind UND. Das Haupt-Binding und jedes zusĂ€tzliche Binding gelten gleichzeitig. Lloyd McKenzie formulierte es klar: „Alle Bindings gelten immer. Punkt." Allerdings beißen nicht alle Bindings gleich stark:

  • Bindings mit einem usage-Kontext werden ignoriert, wenn Sie sich nicht in diesem Kontext befinden
  • Guidance-Zwecke (starter, ui, component, preferred) haben kein KonformitĂ€tsgewicht
  • current-Bindings gelten nur fĂŒr Daten, die seit der ErklĂ€rung der KonformitĂ€t erfasst wurden – nicht fĂŒr Legacy-Daten
  • extensible-Bindings haben den Standard-Ausweg: Sie mĂŒssen nicht konform sein, wenn kein Code im ValueSet auf Ihr Konzept zutrifft

Wenn Sie ODER-Semantik wĂŒnschen („senden Sie einen Code aus ValueSet A oder ValueSet B"), kombinieren Sie diese in einem einzelnen gruppierten ValueSet. Additional Bindings geben Ihnen kein ODER.

Bei einem CodeableConcept – FHIRs Datentyp, der mehrere parallele Code-Darstellungen (Codings) desselben Konzepts tragen kann – bedeuten mehrere required Bindings, dass Sie möglicherweise mehrere Codings benötigen, wobei jedes einem Binding entspricht. So funktioniert „muss SNOMED UND ICD-10 senden" ohne Slicing.

Regel 2: Das any-Flag Ă€ndert die Wiederholungs-Semantik. StandardmĂ€ĂŸig gilt ein Binding fĂŒr alle Wiederholungen eines Elements. Das Setzen von any = true bedeutet, dass das Binding erfĂŒllt ist, wenn irgendeine Wiederholung passt. Dies ist der SchlĂŒsselmechanismus, der Coding-Slices ersetzt – und wie Lloyd McKenzie anmerkte: „Die Verwendung von Slicing fĂŒr ‚und'-Bindings gilt jetzt als Anti-Pattern und wird nicht mehr empfohlen."

Struktur und Zwecke

Ein Additional Binding ersetzt niemals das Haupt-Binding – es schichtet sich darĂŒber. Jedes hat:

EigenschaftBeschreibung
purposeWarum dieses Binding existiert (siehe Tabellen unten)
valueSetDie ValueSet-URL
documentationMarkdown, das die Verwendung im Kontext erklÀrt
shortDocoEine kurze Klartextzusammenfassung fĂŒr die tabellarische Darstellung
usageUsageContext-EinschrÀnkung nach Jurisdiktion, DomÀne oder Workflow
anyWenn true, erfĂŒllt, wenn irgendeine Wiederholung passt (Standard: alle mĂŒssen passen)

So sieht es in einer StructureDefinition aus (vereinfachte Notation):

binding:
  strength: extensible
  valueSet: http://hl7.org/fhir/ValueSet/observation-codes
  additional:
    - purpose: starter
      valueSet: http://example.org/ValueSet/common-lab-codes
      documentation: >
        A manageable subset of ~200 common laboratory codes
        for implementers getting started.
    - purpose: current
      valueSet: http://example.org/ValueSet/2026-lab-codes
      documentation: >
        Required for all new observations captured after 2026-01-01.
        Legacy data may use codes outside this set.

Die Zwecke haben sich seit Grahames Vorschlag von 2022 weiterentwickelt (einige wurden umbenannt, conformance wurde entfernt). Das purpose-Element hat ein required Binding – Sie können nur Codes aus dem AdditionalBindingPurposeCodes-ValueSet verwenden, keine eigenen Zwecke sind erlaubt. Hier sind die R5-Codes:

KonformitÀtszwecke

ZweckBedeutung
requiredDas Element MUSS einen Code aus diesem ValueSet verwenden – im angegebenen Nutzungskontext
extensibleVerwenden Sie Codes aus diesem ValueSet, wenn zutreffend – im angegebenen Nutzungskontext
currentNeue DatensĂ€tze MÜSSEN dieses ValueSet verwenden. Legacy- oder extern bezogene Daten dĂŒrfen andere Codes verwenden

Guidance-Zwecke

ZweckBedeutung
minimumAlle konformen Anwendungen mĂŒssen diese Codes als gĂŒltig akzeptieren (Anwendungspflicht, keine Instanz-Constraint)
candidateKann das Haupt-ValueSet in dokumentierten Situationen ersetzen (z. B. wenn eine Jurisdiktion einen Ersatz definiert)
preferredDieses ValueSet wird in einem bestimmten Kontext bevorzugt (die Dokumentation sollte erlÀutern, warum)
uiVorgeschlagene Codes fĂŒr die BenutzeroberflĂ€chen-Suche und -Auswahl
starterEine praktische Teilmenge zum Einstieg, wenn das vollstĂ€ndige ValueSet zu groß ist
componentDokumentiert, wie ein Teil des Haupt-ValueSets verwendet wird (z. B. pro Code-System)

R6 fĂŒgt current-extensible (extensible-Semantik fĂŒr neue Daten), best-practice (im Best-Practice-Validierungsmodus markiert) und open (keine EinschrĂ€nkungen, zur Dokumentation) hinzu.

Der Zweck maximum existiert in R5, ist aber in R6 veraltet. Er war ursprĂŒnglich dazu gedacht, extensible Bindings zu begrenzen, aber seine Semantik war unklar (siehe die Extensible+Max-Saga oben). Verwenden Sie stattdessen required mit einem Nutzungskontext.

Über FHIR-Versionen hinweg

VersionFunktionsweise von Additional Bindings
R4 und frĂŒherNicht nativ. Verwenden Sie die additional-binding-Extension aus dem Tooling Extensions IG. Der IG Publisher stellt sie dar; der Validator unterstĂŒtzt sie. Die alten maxValueSet- und minValueSet-Extensions funktionieren noch, sind aber abgelöst.
R5Nativ als ElementDefinition.binding.additional. VollstĂ€ndige Validator-UnterstĂŒtzung. Kein key-Element – die EinschrĂ€nkung von Additional Bindings in abgeleiteten Profilen ist begrenzt.
R6Nativ + key-Element zur EinschrĂ€nkung ĂŒber Profil-Ebenen hinweg. Neue Zwecke: current-extensible, best-practice, open. maximum veraltet.

FĂŒr R4-IGs werden Additional Bindings als Extension auf ElementDefinition.binding ausgedrĂŒckt:

binding:
  strength: extensible
  valueSet: http://hl7.org/fhir/ValueSet/observation-codes
  extension:
    - url: http://hl7.org/fhir/tools/StructureDefinition/additional-binding
      extension:
        - url: purpose
          valueCode: current
        - url: valueSet
          valueCanonical: http://example.org/ValueSet/2026-codes
        - url: documentation
          valueMarkdown: Required for new records.

In R5+ wird dasselbe nativ ausgedrĂŒckt – kein Extension-Wrapper erforderlich.

Szenarien

KonformitĂ€t ĂŒber mehrere Jurisdiktionen

Ein internationales Profil benötigt verschiedene Code-Systeme in verschiedenen LĂ€ndern – SNOMED CT in den USA, ICD-10-GM in Deutschland. Vor Additional Bindings bedeutete dies entweder separate Profile pro Jurisdiktion oder komplexes Slicing. Jetzt können Sie es in einem einzigen Profil mit required + any: true + usage ausdrĂŒcken:

binding:
  strength: extensible
  valueSet: http://hl7.org/fhir/ValueSet/condition-code
  additional:
    - purpose: required
      valueSet: http://example.org/ValueSet/us-snomed-conditions
      any: true
      usage:
        - code: { code: US, system: urn:iso:std:iso:3166 }
      documentation: US jurisdiction — at least one SNOMED CT coding required.
    - purpose: required
      valueSet: http://example.org/ValueSet/de-icd10gm-conditions
      any: true
      usage:
        - code: { code: DE, system: urn:iso:std:iso:3166 }
      documentation: German jurisdiction — at least one ICD-10-GM coding required.

Drei Funktionen arbeiten hier zusammen: required macht das Binding durchsetzbar, any: true bedeutet „mindestens ein Coding muss passen" (nicht alle – Sie können also weiterhin andere Codings daneben senden), und usage begrenzt jedes Binding auf seine Jurisdiktion. Ein US-System sieht nur die SNOMED-Anforderung; ein deutsches System sieht nur ICD-10-GM. Das extensible Haupt-Binding gilt fĂŒr beide.

Legacy-Datenmigration

Ein hĂ€ufiges Problem: Ein Land wechselt zu einem neuen Kodierungsstandard, aber KrankenhĂ€user haben jahrzehntelange Daten im alten Format. Ohne Additional Bindings musste man wĂ€hlen – entweder ist das Binding locker genug fĂŒr Legacy-Daten (und man verliert die KonformitĂ€t fĂŒr neue Daten) oder es ist streng fĂŒr neue Daten (und alte DatensĂ€tze scheitern bei der Validierung).

Additional Bindings lösen dies mit current + minimum:

binding:
  strength: extensible
  valueSet: http://hl7.org/fhir/ValueSet/condition-code
  additional:
    - purpose: current
      valueSet: http://example.org/ValueSet/icd-11-conditions
      documentation: >
        All new diagnoses captured after 2026-01-01 must use ICD-11.
    - purpose: minimum
      valueSet: http://example.org/ValueSet/icd-10-icd-11-conditions
      documentation: >
        Systems must accept both ICD-10 and ICD-11 codes.

Das Haupt-Binding bleibt breit (condition-code – extensible). Das current-Binding sagt: „Ab jetzt ICD-11 verwenden." Das minimum-Binding sagt: „Aber jedes konforme System muss ICD-10 in eingehenden Daten weiterhin akzeptieren." Keines ersetzt das Haupt-Binding – sie fĂŒgen PrĂ€zision dort hinzu, wo das alte Modell nur einen Regler hatte.

Kategorie-abhÀngige Bindings (SDOH)

Dies ist ein reales Muster aus US Core SDOH-Profilen. Condition.code ist an ein breites ValueSet gebunden, aber verschiedene Kategorien erhalten engere Bindings – wenn die Kategorie food-insecurity ist, muss der Code aus dem SDOH Food Insecurity Diagnoses VS stammen; bei housing-instability aus einem anderen VS. Jedes Additional Binding verwendet usage, um nach Kategorienwert einzugrenzen:

# Condition.code
binding:
  strength: required
  valueSet: http://hl7.org/fhir/us/core/ValueSet/us-core-condition-code
  additional:
    - purpose: required
      valueSet: http://hl7.org/fhir/us/sdoh/ValueSet/food-insecurity-diagnoses
      usage:
        - code: { code: food-insecurity, system: http://hl7.org/fhir/us/sdoh/CodeSystem/sdoh-category }
      documentation: >
        When Condition.category = food-insecurity,
        code must come from this ValueSet.
    - purpose: required
      valueSet: http://hl7.org/fhir/us/sdoh/ValueSet/housing-instability-diagnoses
      usage:
        - code: { code: housing-instability, system: http://hl7.org/fhir/us/sdoh/CodeSystem/sdoh-category }
      documentation: >
        When Condition.category = housing-instability,
        code must come from this ValueSet.

Der usage-Kontext hier ist keine Jurisdiktion – es ist eine klinische Kategorie innerhalb derselben Ressource. Der Validator prĂŒft: Wenn die Condition category = food-insecurity hat, dann gilt das Additional Binding fĂŒr food-insecurity und code muss aus diesem spezifischen ValueSet stammen. Wenn die Kategorie nicht passt, wird das Binding ignoriert. Wie Grahame bestĂ€tigte: „Wenn Ihre Kategorie eine der festgelegten Kategorien ist, dann gilt das ValueSet fĂŒr diese Kategorie."

UI-Hinweise fĂŒr große ValueSets

Nicht alle Additional Bindings betreffen KonformitĂ€t. Die Zwecke ui und starter haben kein Validierungsgewicht – sie helfen Implementierern, bessere OberflĂ€chen zu erstellen. Ein Vitalzeichen-Profil hat möglicherweise 100.000+ LOINC-Codes in seinem extensible Binding, aber die UI benötigt nur eine Handvoll:

# Observation.code (vital signs)
binding:
  strength: extensible
  valueSet: http://hl7.org/fhir/ValueSet/observation-vitalsignresult
  additional:
    - purpose: starter
      valueSet: http://example.org/ValueSet/common-vitals
      documentation: >
        15 most common vital sign codes. Start here
        if you're building a new system.
    - purpose: ui
      valueSet: http://example.org/ValueSet/vitals-picker
      documentation: >
        Curated list optimized for dropdown selection.
        Not a conformance constraint.

Der Zweck starter sagt „beginnen Sie Ihre Implementierung mit diesen Codes." Der Zweck ui sagt „zeigen Sie diese Codes in einem Auswahl-Element an." Keiner beeinflusst die Validierung – ein System kann jeden Code senden, der unter dem extensible Haupt-Binding gĂŒltig ist. Aber sie lösen ein reales Problem: Implementierer, die einem 100.000-Code-ValueSet gegenĂŒberstehen und nicht wissen, wo sie anfangen sollen.

Noch in Entwicklung

Der Mechanismus ist ausgereift, aber die Community arbeitet noch an GrenzfĂ€llen. Noch Ende 2025 schrieb Eric Haas: „Wir haben dieses Thema beim WGM diskutiert, und als Profiler bin ich immer noch verwirrt, wie Additional Bindings funktionieren sollen." Er und Gay Dolin erstellen eine Matrix expliziter AnwendungsfĂ€lle mit Beispielen fĂŒr den FHIR Guidance IG. Wichtige Bereiche, die noch verfeinert werden:

  • Bedingte Bindings – die Verwendung von usage (UsageContext) zur Eingrenzung von Bindings nach Jurisdiktion oder Workflow ist mĂ€chtig, aber in der Praxis komplex (66 Nachrichten und mehr).
  • Validator-Verhalten – wie VerstĂ¶ĂŸe gemeldet werden, variiert je nach Zweck: required erzeugt Fehler, Guidance-Zwecke wie starter und ui sind nur informativ.

Referenzen und Community-Diskussionen

Spezifikation:

Community (chat.fhir.org):

Siehe auch: Residualkategorien in der FHIR Terminology.

Diesen Artikel teilen
Comments
Comments
Sign in
Loading comments...
Subscribe to our blog

Get the latest articles on FHIR, interoperability, and healthcare IT.