Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Medizinische Daten normalisieren
Tutorial: Wandeln Sie medizinische Daten aus vielen Quellen in eine vergleichbare Form um – LOINC-Lookup, UCUM-Einheiten, ISO-Daten, Referenzbereiche, keine Duplikate bei erneutem Versuch und Validierung gegen das europäische Laborprofil.
Das Normalisieren medizinischer Daten bedeutet, Werte, die in vielen Formen ankommen, in eine vergleichbare Form zu bringen: denselben Code für denselben Test, dasselbe Einheitensystem, Daten in einem Format, jeder Wert mit seinem Referenzbereich und seiner Quelle und keine Duplikate. Dieses Tutorial zeigt, wie das gemacht wird, bevor Daten in einen HL7 FHIR R4-Datensatz gelangen: LOINC- und ATC-Codes nachschlagen, UCUM-Einheiten verwenden, mehrdeutige Daten ablehnen, Bereiche beibehalten, Duplikate bei Wiederholung vermeiden und das Ergebnis gegen das European Laboratory Profile prüfen. Jede angezeigte Antwort stammt von der Anpheros API.
Warum es wichtig ist
Dasselbe HbA1c-Ergebnis kann Sie als "HbA1c 6,4 %", "Hemoglobina glicozilata: 6.4", "Glycated haemoglobin 46 mmol/mol" oder nur als Laborkode, den ein einzelnes Labor versteht, erreichen. Bis diese zu einem Code mit einer Einheit werden:
- eine Grafik des HbA1c des Patienten über die Zeit zeigt drei nicht zusammenhängende Linien;
- eine Warnung bei "HbA1c über 6,5 %" übersieht zwei der Werte;
- ein KI-Modell sieht vier Fakten statt eines Trends;
- ein anderes System, das den Datensatz empfängt, kann ihn nicht interpretieren.
Die Normalisierung gehört an den Punkt, an dem die Daten in den Datensatz gelangen, einmalig, nicht in jeder Anwendung, die sie später liest.
Was ein normalisierter Wert hat
| Teil | Normalisierte Form | Beispiel |
|---|---|---|
| Was gemessen wurde | ein Code aus einem Standard-System | LOINC 4548-4 (HbA1c), RxNorm 6809 (Metformin), ICD-10 E11 (Typ-2-Diabetes) |
| Der Wert | eine Zahl oder Text, nur wenn das Ergebnis nicht numerisch ist | 6.4 |
| Die Einheit | UCUM | %, mg/dL, mm[Hg], kg |
| Wann | ein ISO 8601 Datum-Zeit-Stempel, mit Zeitzone, wenn die Zeit relevant ist | 2026-10-01T07:30:00Z |
| Normalbereich | niedrig und hoch, in derselben Einheit | 4.0–5.6 |
| Quelle | wer es produziert hat und aus welchem System | import von labx |
| Identität | etwas, das eine Wiederholung erkennbar macht | ein Idempotenzschlüssel oder eine Quellkennung |
Welches Codesystem zu welchem Ressourcentyp gehört, ist in FHIR Code-Systemen aufgeführt.
Schritt 1: Code finden
Durchsuchen Sie die Terminologie der Plattform nach englischem oder rumänischem Namen oder nach Abkürzung:
curl "https://platform.anpheros.com/v1/terminology/loinc?q=hba1c" -H "Authorization: Bearer $KEY"
curl "https://platform.anpheros.com/v1/terminology/loinc?q=hemoglobina%20glicozilata" -H "Authorization: Bearer $KEY"
Beides gibt dasselbe Konzept zurück:
{"data": [{"system": "http://loinc.org", "code": "4548-4", "display": "Hemoglobin A1c/Hemoglobin.total in Blood",
"display_ro": "Hemoglobină glicozilată (HbA1c)", "category": "laboratory", "unit": "%"}], "total": 1}
Für Medikamente findet Anpheros Search die Substanz nach Namen oder Marke und liefert deren RxNorm-Inhaltsstoffcode und EMA-Produktnummern:
curl "https://platform.anpheros.com/v1/search?q=metformin&type=treatment" -H "Authorization: Bearer $KEY"
Das Feld unit ist die Einheit, die LOINC für diesen Test erwartet. Verwenden Sie es, um zu überprüfen, was Sie erhalten haben. Erstellen Sie die Zuordnung von den eigenen Namen jeder Quelle zu Codes einmal pro Quelle und behalten Sie sie in Ihrer Integration. Raten Sie nicht zur Schreibzeit: Wenn ein Name mehrdeutig ist und nichts in der Quelle dies klärt, lassen Sie ihn nicht zugeordnet und fragen Sie die Quelle. Wie Laborergebnisse in einen FHIR-Datensatz importiert werden zeigt, wie nicht zugeordnete Labormarker gespeichert und gemeldet werden.
Schritt 2: Schreiben mit Codes, Einheiten und Bereichen
curl -X POST "https://platform.anpheros.com/v1/patients/$PID/observations" -H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" -H "Idempotency-Key: lab-77-hba1c" -d '{
"code": "4548-4", "category": "laboratory",
"value": 6.4, "unit": "%", "effective_at": "2026-10-01T07:30:00Z",
"reference_range": {"low": 4.0, "high": 5.6},
"author_type": "import"
}'
{"id": "3296315c-…", "code": "4548-4", "system": "http://loinc.org", "display": "Hemoglobin A1c/Hemoglobin.total in Blood",
"category": "laboratory", "effective_at": "2026-10-01T07:30:00Z", "value": 6.4, "unit": "%",
"reference_range": {"low": 4.0, "high": 5.6}, "status": "final", "fhir": "Observation/3296315c-…"}
Wenn Sie nur den Code senden, füllt die Plattform den Standard-LOINC-Namen sowohl in der REST-API als auch in der FHIR-API (/fhir/R4) aus, sodass jede Anwendung dasselbe display liest. Ein display, das Sie selbst senden, wird beibehalten.
Behalten Sie auch die ursprüngliche Formulierung bei. Für einen Laborbericht enthält code.text auf der FHIR Observation den Namen des Labors ("Hemoglobina glicozilata (HbA1c)") neben der LOINC-Kodierung. Der Patient erkennt seinen Papierbericht immer noch wieder, und es geht nichts verloren, wenn die Zuordnung jemals in Frage gestellt wird.
Schritt 3: Einheiten
Verwenden Sie UCUM-Codes: mg/dL, mmol/L, %, mm[Hg], kg, cm, /min, Cel. Zwei Regeln verhindern die meisten Fehler:
- Konvertieren Sie nicht stillschweigend. Wenn ein Labor Glukose in
mmol/Lmeldet und Ihre Appmg/dLanzeigt, speichern Sie, was das Labor gemessen hat, und konvertieren Sie es bei der Anzeige. Der gespeicherte Wert bleibt nachvollziehbar zum Bericht. - Überprüfen Sie die Einheit anhand des Codes. LOINC-Codes sind spezifisch: HbA1c in
%ist4548-4, während HbA1c inmmol/moleinen anderen LOINC-Code hat. Ein Wert, dessen Einheit nicht mit der erwarteten Einheit des Codes übereinstimmt, ist ein Mapping-Fehler, kein Konvertierungsproblem.
Anpheros konvertiert Einheiten nicht für Sie; es speichert die von Ihnen gesendete Einheit.
Schritt 4: Datumsangaben
Konvertieren Sie Datumsangaben vor dem Schreiben in ISO 8601 unter Verwendung des bekannten Formats der Quelle. 01.10.2026 ist der 1. Oktober in Rumänien und vielen europäischen Ländern, aber 10/01/2026 ist der 1. Oktober nur in den Vereinigten Staaten. Die API lehnt alles ab, was nicht ISO ist, anstatt zu raten:
{"error": {"type": "invalid", "message": "Input should be a valid datetime or date, invalid character in year (at effective_at)", "field": "effective_at"}}
Der Lab-Connector ist die Ausnahme: Er akzeptiert DD.MM.YYYY und DD/MM/YYYY, da er weiß, dass er einen europäischen Bericht liest.
Bei Messungen, bei denen die Tageszeit wichtig ist (Blutdruck, Glukose, Medikamentendosierungen), senden Sie die Uhrzeit mit ihrer Zeitzone. Eine Messung um 23:30 Uhr in Bukarest liegt am Vortag in UTC und der Patient erwartet sie am Tag, an dem er sie aufgenommen hat.
Schritt 5: Keine Duplikate
Duplikate entstehen durch Wiederholungsversuche, durch das zweimalige Senden desselben Berichts und durch denselben Wert, der über zwei Wege eingeht.
- Wiederholungsversuche: Senden Sie einen
Idempotency-Key, der den Wert in der Quelle identifiziert, z. B. die Berichts-ID und den Test. Das erneute Senden derselben Anfrage mit demselben Schlüssel gibt die erste Antwort zurück und speichert nichts Neues. Die SDKs fügen jedem Create eine hinzu. - Derselbe Bericht zweimal: Der Lab-Connector erstellt eine stabile Kennung pro Zeile aus dem Bericht, dem Code, dem Datum und dem Wert und überspringt bereits importierte Zeilen.
- Zwei Wege: Speichern Sie die eigene ID des Quellsystems mit
X-Anpheros-Origin-Id(oder inidentifierbei FHIR-Ressourcen) und suchen Sie danach, bevor Sie Werte schreiben, die über einen anderen Weg zurückkommen können.
Schritt 6: Profilprüfung
Fragen Sie für Laborergebnisse die Plattform, wie eine Ressource mit dem HL7 Europe Laborberichtsprofil übereinstimmt, bevor Sie sich darauf verlassen:
curl -X POST "https://platform.anpheros.com/fhir/R4/Observation/\$validate?profile=eu-lab" -H "Authorization: Bearer $KEY" \
-H "Content-Type: application/fhir+json" -d '{
"resourceType": "Observation", "status": "final",
"category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "laboratory"}]}],
"code": {"text": "HbA1c"}, "subject": {"reference": "Patient/'$PID'"},
"valueQuantity": {"value": 6.4, "unit": "%"}
}'
Dieses nicht normalisierte Ergebnis liefert eine präzise Liste:
{"resourceType": "OperationOutcome", "issue": [
{"severity": "error", "code": "invalid", "diagnostics": "Observation.code must carry a LOINC coding.", "expression": ["Observation.code"]},
{"severity": "error", "code": "required", "diagnostics": "Observation.effective[x] is required.", "expression": ["Observation.effective"]},
{"severity": "warning", "code": "business-rule", "diagnostics": "valueQuantity should carry a UCUM system and code.", "expression": ["Observation.valueQuantity"]},
{"severity": "warning", "code": "informational", "diagnostics": "No referenceRange: interpretation will need the laboratory's ranges.", "expression": ["Observation.referenceRange"]},
{"severity": "information", "code": "informational", "diagnostics": "No performer (laboratory) recorded.", "expression": ["Observation.performer"]},
{"severity": "information", "code": "informational", "diagnostics": "No issued time (when the laboratory released the result).", "expression": ["Observation.issued"]}]}
Jedes Problem entspricht einem der obigen Schritte. Führen Sie $validate in Ihren Integrationstests mit realen Beispielen aus jeder Quelle aus.
Schritt 7: Die Quelle beibehalten
Normalisierung ändert, wie ein Wert geschrieben wird, niemals, woher er stammt. Senden Sie author_type (device, import, practitioner, patient) und X-Anpheros-Source-System bei jedem Schreibvorgang. Nur so kann ein Arzt, ein Prüfer oder ein KI-Modell ein Laborergebnis von einem zu Hause eingegebenen Wert unterscheiden. Siehe Erklärung der Herkunft medizinischer Daten.
Checkliste
- [ ] Jede Quelle hat eine Zuordnung ihrer Namen zu LOINC / ATC / ICD-10, die in Ihrer Integration gespeichert ist
- [ ] Mehrdeutige Namen bleiben ohne Zuordnung und werden gemeldet, niemals erraten
- [ ] UCUM-Einheiten, passend zum Code; keine stille Konvertierung
- [ ] ISO 8601-Daten, mit Zeitzonen, wo die Uhrzeit wichtig ist
- [ ] Referenzbereiche werden mit Laborwerten beibehalten
- [ ] Originalformulierung beibehalten (
code.text) - [ ] Idempotenzschlüssel oder Quell-IDs bei jedem Schreibvorgang
- [ ]
author_typeund Quellsystem bei jedem Schreibvorgang - [ ]
$validatein Tests für Laborergebnisse
Häufig gestellte Fragen
Was ist medizinische Daten-Normalisierung?
Die Umwandlung von Gesundheitsdaten aus verschiedenen Quellen in eine einheitliche Standardform: gemeinsame Codes (LOINC für Tests und Messungen, ICD-10 für Diagnosen, ATC für Medikamente), UCUM-Einheiten, ISO-Daten, Referenzbereiche und eine aufgezeichnete Quelle, damit Werte aus verschiedenen Systemen verglichen, kombiniert und ausgetauscht werden können.
Sollte ich alle Werte in eine Einheit umrechnen?
Speichern Sie die Einheit, in der die Quelle gemessen hat, solange es sich um eine gültige UCUM-Einheit handelt, die mit dem Code übereinstimmt, und konvertieren Sie sie bei der Anzeige oder Analyse. Dadurch bleibt jeder gespeicherte Wert nachvollziehbar zu seinem ursprünglichen Bericht.
Kann die Normalisierung vollautomatisch erfolgen?
Größtenteils. Codes in der Quelle, bekannte Namen und gut formatierte Einheiten können automatisch zugeordnet werden. Mehrdeutige Namen und unbekannte lokale Codes erfordern eine einmalige menschliche Entscheidung pro Quelle, danach ist die Zuordnung automatisch.
Verwandte Themen
- FHIR-Codesysteme
- Importieren von Laborergebnissen in einen FHIR-Datensatz
- Erklärung der Herkunft medizinischer Daten
- Interoperabilität von Gesundheitsdaten
- API für medizinische Daten
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card