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-Datenextensible-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:
| Eigenschaft | Beschreibung |
|---|---|
purpose | Warum dieses Binding existiert (siehe Tabellen unten) |
valueSet | Die ValueSet-URL |
documentation | Markdown, das die Verwendung im Kontext erklÀrt |
shortDoco | Eine kurze Klartextzusammenfassung fĂŒr die tabellarische Darstellung |
usage | UsageContext-EinschrÀnkung nach Jurisdiktion, DomÀne oder Workflow |
any | Wenn 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
| Zweck | Bedeutung |
|---|---|
required | Das Element MUSS einen Code aus diesem ValueSet verwenden â im angegebenen Nutzungskontext |
extensible | Verwenden Sie Codes aus diesem ValueSet, wenn zutreffend â im angegebenen Nutzungskontext |
current | Neue DatensĂ€tze MĂSSEN dieses ValueSet verwenden. Legacy- oder extern bezogene Daten dĂŒrfen andere Codes verwenden |
Guidance-Zwecke
| Zweck | Bedeutung |
|---|---|
minimum | Alle konformen Anwendungen mĂŒssen diese Codes als gĂŒltig akzeptieren (Anwendungspflicht, keine Instanz-Constraint) |
candidate | Kann das Haupt-ValueSet in dokumentierten Situationen ersetzen (z. B. wenn eine Jurisdiktion einen Ersatz definiert) |
preferred | Dieses ValueSet wird in einem bestimmten Kontext bevorzugt (die Dokumentation sollte erlÀutern, warum) |
ui | Vorgeschlagene Codes fĂŒr die BenutzeroberflĂ€chen-Suche und -Auswahl |
starter | Eine praktische Teilmenge zum Einstieg, wenn das vollstÀndige ValueSet zu groà ist |
component | Dokumentiert, 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
| Version | Funktionsweise von Additional Bindings |
|---|---|
| R4 und frĂŒher | Nicht 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. |
| R5 | Nativ als ElementDefinition.binding.additional. VollstĂ€ndige Validator-UnterstĂŒtzung. Kein key-Element â die EinschrĂ€nkung von Additional Bindings in abgeleiteten Profilen ist begrenzt. |
| R6 | Nativ + 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:
requirederzeugt Fehler, Guidance-Zwecke wiestarterunduisind nur informativ.
Referenzen und Community-Diskussionen
Spezifikation:
- ElementDefinition.binding.additional â formale Definition
- Additional Binding Purpose Codes â alle Zweck-Codes mit Definitionen
- Terminologies: Binding Strengths â wie StĂ€rken mit Additional Bindings funktionieren
- Binding Examples â ausgearbeitete Beispiele
- Tooling Extensions IGÂ â R4-Backport-Extension
Community (chat.fhir.org):
- Extension for additional bindings â der ursprĂŒngliche Vorschlag von 2022 von Grahame Grieve (49 Nachrichten)
- Implementing Additional Bindings for each purpose â UND- vs. ODER-Semantik, Anwendungsfall-Matrix (27 Nachrichten)
- Conditional additional bindings â UsageContext-Eingrenzung (66 Nachrichten)
- Extensible+Max â das PrĂ€-R5-Muster (182 Nachrichten)
- Modifications to ElementDefinition â formale R5-Zusage (111 Nachrichten)
Siehe auch: Residualkategorien in der FHIR Terminology.

![Terminology is fun: CodeableConcept.coding[]](/assets/images/articles/horizontal-5.avif?v=2ef8.mrd)
