---
{
  "title": "Terminologieübersetzung automatisieren mit der Aidbox TX Engine",
  "description": "Gesundheitssysteme tauschen kontinuierlich Daten mit unterschiedlichen Code-Sets aus und erzeugen täglich tausende Terminologieübersetzungen. Die Aidbox TX Engine automatisiert diesen Prozess mit FHIR ConceptMap und $translate und macht Tabellenkalkulationen, benutzerdefinierte Skripte und Integrationsfehler überflüssig.",
  "date": "2025-12-08",
  "author": "Guillermo Rodríguez",
  "reading-time": "7 minutes",
  "tags": [
    "Terminology",
    "Aidbox"
  ]
}
---
## Das Terminologie-Mismatch

Organisationen stehen vor einer anhaltenden Integrationsherausforderung: [Terminologie-Mismatch](/blog/introducing-hybrid-terminology-engine) zwischen Systemen. Legacy-HL7v2-Schnittstellen und -Daten, moderne [FHIR-Implementierungen](/articles/how-to-create-a-fhir-implementation-guide), 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](https://build.fhir.org/conceptmap.html) 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](https://build.fhir.org/conceptmap-operation-translate.html) 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:


```javascript
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:


```javascript
{
  "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**


```javascript
POST /fhir/ConceptMap/$translate
Content-Type: application/json

{
  "resourceType": "Parameters",
  "parameter": [
    {
      "name": "sourceCode",
      "valueCode": "completed"
    },
    {
      "name": "sourceSystem",
      "valueUri": "http://hl7.org/fhir/event-status"
    }
  ]
}
```



```javascript
{
  "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**


```javascript
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**


```javascript
{
  "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](https://www.health-samurai.io/docs/aidbox/terminology-module/aidbox-terminology-module/hybrid#external-terminology-servers) (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**


```javascript
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**


```javascript
{
  "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](https://www.health-samurai.io/docs/aidbox/overview/release-notes#august-2025-2508) eingeführt, mit Unterstützung für die Operation `$translate`. Weitere Informationen finden Sie im [Capabilities-Register](https://www.health-samurai.io/docs/aidbox/terminology-module/aidbox-terminology-module/capabilities). Wenn Sie dies lokal ausprobieren möchten, starten Sie mit dem Ausführen von Aidbox gemäß der [Anleitung zum lokalen Ausführen von Aidbox](https://www.health-samurai.io/docs/aidbox/getting-started/run-aidbox-locally).

**Lokale Mapping-Ressource vorbereiten**

Öffnen Sie die [REST-Konsole](http://localhost:8080/ui/console#/rest) von Aidbox und senden Sie:


```javascript
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**


```javascript
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**


```javascript
{
 "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](https://www.health-samurai.io/articles/introducing-hybrid-terminology-engine)
- [Aidbox TX Engine - ConceptMap](https://www.health-samurai.io/docs/aidbox/terminology-module/fhir-terminology/conceptmap)
- [Aidbox TX Engine - Hybrid-Modus](https://www.health-samurai.io/docs/aidbox/terminology-module/aidbox-terminology-module/hybrid)

Siehe auch: [Residualkategorien in der FHIR Terminology](/blog/residual-categories-in-fhir-terminology).