Das Terminologie-Mismatch
Organisationen stehen vor einer anhaltenden Integrationsherausforderung: Terminologie-Mismatch zwischen Systemen. Legacy-HL7v2-Schnittstellen und -Daten, moderne FHIR-Implementierungen, interne Prozedurkataloge und Anforderungen von Drittanbietern erzeugen ein komplexes Geflecht an Code-Übersetzungsbedarfen. Ein Laborsystem sendet Ergebnisse mit internen Codes, während das KIS LOINC erfordert. Die Radiologie verwendet proprietäre Prozedurcodes, während die Abrechnung CPT verlangt. Jedes Mismatch erfordert eine Übersetzung, und in großem Maßstab multiplizieren sich diese Übersetzungen zu tausenden täglichen Konvertierungen.
Manuelle Ansätze scheitern schnell. Das Pflegen von Tabellenkalkulationen mit Code-Mappings wird fehleranfällig, sobald mehrere Teams unterschiedliche Versionen aktualisieren. Benutzerdefinierte Übersetzungslogik, die in Integrationsengines eingebettet ist, schafft technische Herausforderungen und macht Aktualisierungen kostspielig. Ohne systematisches Mapping-Management sind Organisationen mit Integrationsfehlern, Datenqualitätsproblemen und steigenden Wartungskosten konfrontiert.
Die FHIR-Ressource ConceptMap und die Operation $translate bieten eine strukturierte, interoperable Möglichkeit zur Verwaltung von Terminologie-Mappings. ConceptMap definiert die Beziehungen zwischen Konzepten aus verschiedenen Code-Systemen und erstellt wiederverwendbare, versionierte Mapping-Regeln. Die Operation $translate führt diese Mappings programmgesteuert aus und ermöglicht automatisierte, konsistente Übersetzungen in Ihrem gesamten Ökosystem. Dieser Artikel erläutert, wie Sie ConceptMap und $translate für die automatisierte Code-Übersetzung nutzen und wie sie sich in einer Hybridumgebung verhalten.
Die Grundlagen verstehen
Was ist eine ConceptMap?
ConceptMap ist eine FHIR-Ressource, die definiert, wie Codes in einem Terminologiesystem auf Codes in einem anderen abgebildet werden. Stellen Sie sich dies als ein Übersetzungswörterbuch für medizinische Codes vor — eines, das maschinenlesbar, versioniert und teilbar ist.
Beispielsweise könnte Ihr Krankenhaus interne Laborcodes haben, die für den externen Austausch auf LOINC abgebildet werden müssen:
- Krankenhauscode: GLU-FAST-001 → LOINC: 1558-6 (Nüchternglukose)
- Krankenhauscode: HBA1C-TOTAL → LOINC: 4548-4 (Hämoglobin A1c)
Jedes Mapping enthält einen Beziehungstyp — wie „equivalent" (gleiche Bedeutung) oder „source-is-broader-than-target" (Ziel ist spezifischer) —, damit verarbeitende Systeme verstehen, wie eng die Codes übereinstimmen. Mit diesen Definitionen wird eine ConceptMap zur einzigen Quelle der Wahrheit, die wiederverwendbar und versioniert ist und innerhalb Ihrer Organisation geteilt oder sogar für andere veröffentlicht werden kann.
Was ist $translate?
Die Operation $translate ist eine FHIR-API, die ConceptMaps verwendet, um Codes automatisch von einem System in ein anderes zu übersetzen. Anstatt benutzerdefinierte Lookup-Logik zu schreiben, stellen Sie eine einfache HTTP-Anfrage:
Eingabe: „Übersetze Code GLU-FAST-001 aus unserem Krankenhaussystem nach LOINC"
Ausgabe: „Code 1558-6 in LOINC, mit Beziehung: equivalent"
Im Hintergrund verarbeitet die Operation die gesamte Komplexität — das Auffinden relevanter ConceptMaps, das Nachschlagen des Codes, das Filtern nach Zielsystem und die Rückgabe strukturierter Ergebnisse. Als Ergebnis erhalten Sie konsistente, zuverlässige Übersetzungen, ohne benutzerdefinierten Code über mehrere Systeme hinweg zu pflegen.
Einfaches Anfrage-/Antwortbeispiel
So sieht eine grundlegende Übersetzungsanfrage aus:
POST /fhir/ConceptMap/$translate
Content-Type: application/json
{
"resourceType": "Parameters",
"parameter": [
{
"name": "sourceCode",
"valueCode": "female"
},
{
"name": "sourceSystem",
"valueUri": "http://hl7.org/fhir/administrative-gender"
},
{
"name": "targetSystem",
"valueUri": "http://terminology.hl7.org/CodeSystem/v2-0001"
}
]
}
Die Antwort gibt an, ob eine Übersetzung gefunden wurde (result: true) und liefert den Zielcode:
{
"resourceType": "Parameters",
"parameter": [
{
"name": "result",
"valueBoolean": true
},
{
"name": "match",
"part": [
{
"name": "relationship",
"valueCode": "equal"
},
{
"name": "concept",
"valueCoding": {
"system": "http://terminology.hl7.org/CodeSystem/v2-0001",
"code": "F",
"display": "F"
}
},
{
"name": "source",
"valueUri": "http://hl7.org/fhir/ConceptMap/cm-administrative-gender-v2"
}
]
}
]
}
Mehrere Treffer
Sobald Sie ConceptMap in realen Szenarien einsetzen, werden Sie feststellen, dass manche Codes in mehreren Mapping-Kontexten vorkommen. Dies ist besonders häufig bei generischen Statuscodes oder administrativen Konzepten, die von verschiedenen FHIR-Ressourcen und Implementation Guides wiederverwendet werden. In solchen Fällen verhält sich $translate vorhersehbar: Anstatt ein einzelnes „bestes" Mapping auszuwählen, gibt es alle relevanten Treffer zurück, damit Clients entscheiden können, wie sie damit umgehen.
Die einfachste Verwendung von $translate ist das Auffinden von Mapping-Treffern für einen Coding-Wert. Benutzer können lediglich das System und den Code angeben, und translate ist in der Lage, die anwendbaren ConceptMaps sowie die passenden Einträge zu finden. Das ist der Fall des vorherigen Beispiels. Es kann Situationen geben, in denen das zu übersetzende Konzept mit Mappings übereinstimmt, die in verschiedenen Code-Systemen definiert sind. Angenommen, unsere Aidbox-Instanz enthält mehrere ConceptMaps einschließlich eines Mappings für http://hl7.org/fhir/event-status|completed, erhalten wir alle Treffer aus den verschiedenen ConceptMaps.
Anfrage
POST /fhir/ConceptMap/$translate
Content-Type: application/json
{
"resourceType": "Parameters",
"parameter": [
{
"name": "sourceCode",
"valueCode": "completed"
},
{
"name": "sourceSystem",
"valueUri": "http://hl7.org/fhir/event-status"
}
]
}
{
"resourceType": "Parameters",
"parameter": [
{
"name": "result",
"valueBoolean": true
},
{
"name": "match",
"part": [
{
"name": "relationship",
"valueCode": "equivalent"
},
{
"name": "concept",
"valueCoding": {
"system": "http://hl7.org/fhir/resource-status",
"code": "complete",
"display": "complete"
}
},
{
"name": "source",
"valueUri": "http://hl7.org/fhir/ConceptMap/sc-clinicalimpression-status"
}
]
},
{
"name": "match",
"part": [
{
"name": "relationship",
"valueCode": "equivalent"
},
{
"name": "concept",
"valueCoding": {
"system": "http://hl7.org/fhir/resource-status",
"code": "complete",
"display": "complete"
}
},
{
"name": "source",
"valueUri": "http://hl7.org/fhir/ConceptMap/sc-event-status"
}
]
},
{
"name": "match",
"part": [
{
"name": "relationship",
"valueCode": "equivalent"
},
{
"name": "concept",
"valueCoding": {
"system": "http://hl7.org/fhir/resource-status",
"code": "complete",
"display": "complete"
}
},
{
"name": "source",
"valueUri": "http://hl7.org/fhir/ConceptMap/sc-immunization-status"
}
]
}
]
}
Bekannte ConceptMap
ConceptMap definiert Gruppen von Mappings. Jede Gruppe hat ein source- und ein target-System, die jeweils das Quellsystem, in dem der zu mappende Code definiert ist, und das Zielsystem, auf das das Konzept abgebildet wird, repräsentieren. In manchen Fällen ist Ihnen bereits bekannt, welche ConceptMap Sie verwenden möchten. Vielleicht implementieren Sie ein bestimmtes Profil oder folgen den Mapping-Regeln eines bestimmten IG. Anstatt sich auf eine systemweite Suche zu verlassen, können Sie $translate anweisen, eine einzelne, bekannte ConceptMap zu verwenden.
Dadurch wird der Übersetzungsumfang eingeschränkt und vorhersehbare, kontextspezifische Ergebnisse werden sichergestellt — was besonders wertvoll ist, wenn mehrere ConceptMaps ähnliche Mappings definieren.
Anfrage
POST /fhir/ConceptMap/$translate
Content-Type: application/json
{
"resourceType": "Parameters",
"parameter": [
{
"name": "url",
"valueUri": "http://hl7.org/fhir/ConceptMap/sc-composition-status"
},
{
"name": "sourceCode",
"valueCode": "preliminary"
},
{
"name": "sourceSystem",
"valueUri": "http://hl7.org/fhir/composition-status"
}
]
}
Der Parameter url gibt die bei der Übersetzung zu verwendende ConceptMap an. Der Server wird angewiesen, diesen spezifischen Mapping-Container bei der Übersetzung zu verwenden.
Antwort
{
"resourceType": "Parameters",
"parameter": [
{
"name": "result",
"valueBoolean": true
},
{
"name": "match",
"part": [
{
"name": "relationship",
"valueCode": "equivalent"
},
{
"name": "concept",
"valueCoding": {
"system": "http://hl7.org/fhir/resource-status",
"code": "draft",
"display": "draft"
}
},
{
"name": "source",
"valueUri": "http://hl7.org/fhir/ConceptMap/sc-composition-status"
}
]
}
]
}
Der Hybrid-Vorteil
Das Erstellen von ConceptMaps für die spezifischen Anforderungen Ihrer Organisation — etwa interne Codes zu LOINC — ist absolut sinnvoll. Sie kennen Ihre Codes, Sie kontrollieren die Mappings und können sie bei Bedarf aktualisieren. Das Erstellen jeder möglichen ConceptMap ist jedoch unrealistisch. Ähnlich wie bei externen/Standard-Code-Systemen gibt es ConceptMaps, die Übersetzungsdaten für gängige Szenarien definieren. Hier einige Beispiele:
- Administrativecodes in FHIR → HL7 V2
- Alle US Core ConceptMaps
- ICD-10 → SNOMED CT
- Regionale und fachspezifische Maps
Hier glänzt der hybride Ansatz von Aidbox. Aidbox prüft zuerst Ihre lokalen ConceptMaps. Wird eine Übersetzung gefunden, wird sie sofort zurückgegeben — schnell und lokal. Wenn keine Übersetzung gefunden wird und keine lokale ConceptMap für dieses Quellsystem vorhanden ist, delegiert Aidbox die Übersetzung automatisch an den konfigurierten externen Terminologieserver (wie tx.health-samurai.io).
Das bedeutet, Sie erhalten:
- Ihre benutzerdefinierten Mappings (von Ihnen gepflegt, zuerst verwendet)
- Standardmappings (extern gepflegt, automatisch abgerufen)
- Keine Duplikation (Sie erstellen keine Standard-Maps neu)
Anfrage
POST /fhir/ConceptMap/$translate
Content-Type: application/json
{
"resourceType": "Parameters",
"parameter": [
{
"name": "sourceCode",
"valueCode": "D"
},
{
"name": "sourceSystem",
"valueUri": "http://hl7.org/fhir/us/vr-common-library/CodeSystem/codesystem-ije-vr"
},
{
"name": "targetSystem",
"valueUri": "http://snomed.info/sct"
}
]
}
Antwort
{
"resourceType": "Parameters",
"parameter": [
{
"name": "result",
"valueBoolean": true
},
{
"name": "match",
"part": [
{
"name": "equivalence",
"valueCode": "equivalent"
},
{
"name": "concept",
"valueCoding": {
"system": "http://snomed.info/sct",
"code": "434651000124107"
}
},
{
"name": "source",
"valueString": "http://hl7.org/fhir/us/vrdr/ConceptMap/CertifierTypesCM"
}
]
},
{
"name": "match",
"part": [
{
"name": "equivalence",
"valueCode": "equivalent"
},
{
"name": "concept",
"valueCoding": {
"system": "http://snomed.info/sct",
"code": "449951000124101"
}
},
{
"name": "source",
"valueString": "http://hl7.org/fhir/us/vrdr/ConceptMap/MethodOfDispositionCM"
}
]
}
]
}
ConceptMap-Übersetzung in Aidbox
Aidbox hat ConceptMap im Release 2508 eingeführt, mit Unterstützung für die Operation $translate. Weitere Informationen finden Sie im Capabilities-Register. Wenn Sie dies lokal ausprobieren möchten, starten Sie mit dem Ausführen von Aidbox gemäß der Anleitung zum lokalen Ausführen von Aidbox.
Lokale Mapping-Ressource vorbereiten
Öffnen Sie die REST-Konsole von Aidbox und senden Sie:
PUT /fhir/ConceptMap/cm1
Content-Type: application/json
{
"resourceType": "ConceptMap",
"id": "cm1",
"url": "http://hl7.org/fhir/ConceptMap/sc-clinicalimpression-status-TEST",
"version": "0.1.0",
"status": "active",
"group": [
{
"source": "http://hl7.org/fhir/event-status|5.0.0",
"target": "http://hl7.org/fhir/resource-status",
"element": [
{
"code": "entered-in-error",
"target": [
{
"code": "error",
"equivalence": "equivalent"
}
]
},
{
"code": "preparation",
"target": [
{
"code": "planned",
"equivalence": "equivalent"
}
]
},
{
"code": "in-progress",
"target": [
{
"code": "active",
"equivalence": "equivalent"
}
]
},
{
"code": "on-hold",
"target": [
{
"code": "suspended",
"equivalence": "equivalent"
}
]
},
{
"code": "stopped",
"target": [
{
"code": "failed",
"equivalence": "equivalent"
}
]
},
{
"code": "completed",
"target": [
{
"code": "complete",
"equivalence": "equivalent"
}
]
},
{
"code": "not-done",
"target": [
{
"code": "abandoned",
"equivalence": "equivalent"
}
]
},
{
"code": "unknown",
"target": [
{
"code": "unknown",
"equivalence": "equivalent"
}
]
}
]
}
]
}
ConceptMap $translate-Operation ausführen
POST /fhir/ConceptMap/$translate
Content-Type: application/json
{
"resourceType": "Parameters",
"parameter": [
{
"name": "url",
"valueUri": "http://hl7.org/fhir/ConceptMap/sc-clinicalimpression-status-TEST"
},
{
"name": "sourceCode",
"valueCode": "completed"
},
{
"name": "sourceSystem",
"valueUri": "http://hl7.org/fhir/event-status"
},
{
"name": "sourceVersion",
"valueString": "5.0.0"
}
]
}
Antwort
{
"resourceType": "Parameters",
"parameter": [
{
"name": "result",
"valueBoolean": true
},
{
"name": "match",
"part": [
{
"name": "relationship",
"valueCode": "equivalent"
},
{
"name": "concept",
"valueCoding": {
"system": "http://hl7.org/fhir/resource-status",
"code": "complete",
"display": "complete"
}
},
{
"name": "source",
"valueUri": "http://hl7.org/fhir/ConceptMap/sc-clinicalimpression-status-TEST"
}
]
}
]
}
Starten Sie Ihre Aidbox-Instanz und automatisieren Sie die Terminologieübersetzung auf die FHIR-konforme Art. Hören Sie auf, benutzerdefinierten Lookup- und Übersetzungscode zu schreiben.
Siehe auch:
- Einführung in die Hybrid Terminology Engine
- Aidbox TX Engine - ConceptMap
- Aidbox TX Engine - Hybrid-Modus
Siehe auch: Residualkategorien in der FHIR Terminology.






