# Lab Results API: HL7 v2, FHIR und LOINC

> Wie Laborergebnisse als HL7 v2- und FHIR R4-Daten übertragen werden, was ein Ergebnis enthalten muss und wie Laborberichte in einen FHIR-Datensatz aufgenommen werden, mit einem realen Beispiel.

Source: https://developers.anpheros.com/de/guides/lab-results-api

**Eine API für Laborergebnisse liefert Laborergebnisse als strukturierte Daten – Testcode, Wert, Einheit, Referenzbereich, Status und Zeit – anstelle eines PDFs, damit Software sie speichern, vergleichen, grafisch darstellen und teilen kann.** Heute werden diese Daten in drei Formen übertragen: HL7 v2 ORU^R01-Nachrichten (immer noch das Rückgrat zwischen Laboren und Krankenhäusern), HL7 FHIR R4 `Observation` und `DiagnosticReport`-Ressourcen (das Format moderner APIs) sowie labs-spezifische CSV-, JSON- oder PDF-Exporte. Diese Seite erklärt, wie die Teile zusammenpassen, was eine gute Laborergebnis-API enthalten muss und wie Labordaten mit Anpheros in den FHIR-Datensatz eines Patienten aufgenommen werden.

## Wer tauscht Laborergebnisse aus und in welchem Format

| Von → Nach | Übliches Format heute | Anmerkungen |
|---|---|---|
| Labor → Krankenhaus- oder Kliniksystem | HL7 v2 ORU^R01 (in den USA oft gemäß dem HL7 v2.5.1 Laboratory Results Interface guide) | Bestellungen gehen in die andere Richtung als ORM/OML-Nachrichten |
| Labor → Gesundheitsamt | HL7 v2 elektronische Laborberichterstattung, zunehmend FHIR | Nur meldepflichtige Erkrankungen |
| Kliniksystem → Patienten-App | FHIR R4 über eine Patientenzugriffs-API | In den USA stellen zertifizierte EHRs Laborergebnisse als FHIR (US Core) bereit; in der EU listet der European Health Data Space Laborergebnisse unter seinen priorisierten Datenkategorien auf |
| Labor → Patient | PDF-Bericht, Portal, manchmal CSV | Das Format, das die meisten Patienten tatsächlich erhalten |
| App → KI-Modell | Strukturierter Kontext, aufgebaut aus Observations | Benötigt Codes und Einheiten, um zuverlässig zu sein |

Die Richtung ist wichtig: Ein Laborinformationssystem (LIS) ist die Quelle der Wahrheit für ein Ergebnis, und jedes nachgelagerte System behält eine Kopie. Was die Kopien vertrauenswürdig macht, ist, dass jede den Code, die Einheit, den Bereich und den Ursprung des Wertes beibehält.

## Was ein Laborergebnis mitführen muss

Ein Ergebnis, das nur "Glukose 126" besagt, kann nicht sicher interpretiert werden. Ein vollständiges Ergebnis enthält:

- **Einen Standardcode.** LOINC identifiziert das Analyten, die Probe und die Methode: `2345-7` ist Glukose in Serum oder Plasma, `2339-0` ist Glukose in Vollblut. Der eigene Code des Labors kann daneben mitgeführt werden.
- **Einen Wert mit einer Einheit.** Idealerweise eine UCUM-Einheit (`mg/dL`, `mmol/L`, `10*3/uL`), damit Werte aus zwei Laboren konvertiert und verglichen werden können.
- **Den Referenzbereich**, den das Labor verwendet hat, und eine **Interpretationsflagge** (H, L, N…), wenn das Labor eine angibt.
- **Status:** vorläufig, endgültig, korrigiert oder geändert. Korrekturen kommen vor; eine API muss es Ihnen ermöglichen, die neue Version zu sehen, ohne die alte zu verlieren.
- **Zeitstempel:** wann die Probe entnommen wurde (`effectiveDateTime`) und wann das Ergebnis freigegeben wurde (`issued`).
- **Herkunft:** welches Labor es produziert hat und zu welchem Bericht oder welcher Anforderung es gehört.

In FHIR R4 ist jedes Ergebnis eine `Observation` mit `category = laboratory`, und der Bericht, der sie gruppiert, ist ein `DiagnosticReport`, der die Observations in `result` auflistet. Gültige Beispiele für beide, mit den Fehlern, die Validatoren am häufigsten melden, finden Sie in den [FHIR R4 JSON-Beispielen](https://developers.anpheros.com/tools/fhir-examples/observation-lab-result) — siehe auch das [DiagnosticReport-Beispiel](https://developers.anpheros.com/tools/fhir-examples/diagnostic-report).

## HL7 v2 und FHIR nebeneinander

Dasselbe Lipidpanel-Ergebnis, wie es die meisten Labore heute senden und wie eine API es speichern sollte:

```
OBX|1|NM|2093-3^Cholesterol^LN||212|mg/dL|<200|H|||F|||20261002074500
```

| HL7 v2 Feld | Bedeutung | FHIR R4 Observation Element |
|---|---|---|
| OBX-3 `2093-3^Cholesterol^LN` | Test, kodiert in LOINC | `code.coding` (System `http://loinc.org`) |
| OBX-5 `212`, OBX-2 `NM` | Numerischer Wert | `valueQuantity.value` |
| OBX-6 `mg/dL` | Einheit | `valueQuantity.unit` |
| OBX-7 `<200` | Referenzbereich | `referenceRange.high` |
| OBX-8 `H` | Auffälligkeitskennzeichen | `interpretation` |
| OBX-11 `F` | Endergebnis | `status = final` |
| OBX-14 | Beobachtungszeitpunkt | `effectiveDateTime` |

Die Konvertierung zwischen den beiden ist hauptsächlich eine Feldzuordnung. Die schwierigen Teile liegen woanders: Labore, die ihre eigenen Codes anstelle von LOINC senden, Zahlen, die als Text geschrieben sind (`"6,4"`, `"<5"`), Bereiche in verschiedenen Notationen und Berichte, die nach einem Timeout erneut gesendet werden. [Wie man medizinische Daten normalisiert](https://developers.anpheros.com/de/guides/normalize-medical-data) behandelt diese im Detail.

## Empfangen von Laborergebnissen in einen FHIR-Datensatz mit Anpheros

Anpheros speichert den Datensatz jedes Patienten als HL7 FHIR R4 und verfügt über einen [Labor-Konnektor](https://developers.anpheros.com/de/guides/lab-connector): Eine Anfrage nimmt einen gesamten Bericht als HL7 v2, CSV oder JSON entgegen und gibt Laborbeobachtungen (Observations) mit LOINC-Codes, Referenzbereichen, Interpretationen und Herkunftsinformationen zurück.

```bash
curl -s -X POST "https://platform.anpheros.com/v1/patients/$PID/labs/import" \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: x-application/hl7-v2+er7" \
  -H "X-Anpheros-Source-System: springfield-lis" \
  --data-binary @lipid-panel.hl7
```

Für ein dreizeiliges Lipidpanel (Cholesterin, HDL, Triglyceride) lautet die Antwort einer lokalen Ausführung der Plattform:

```json
{
  "created": 3, "skipped": 0, "unmapped": [], "warnings": [],
  "observations": [
    {"id": "26ed9219-…", "marker": "Cholesterol", "code": "2093-3", "system": "http://loinc.org",
     "value": 212.0, "unit": "mg/dL", "date": "2026-10-02T07:45:00Z"},
    {"id": "2633d1d4-…", "marker": "HDL cholesterol", "code": "2085-9", "system": "http://loinc.org",
     "value": 48.0, "unit": "mg/dL", "date": "2026-10-02T07:45:00Z"},
    {"id": "a02520bb-…", "marker": "Triglyceride", "code": "2571-8", "system": "http://loinc.org",
     "value": 165.0, "unit": "mg/dL", "date": "2026-10-02T07:45:00Z"}
  ]
}
```

Jedes gespeicherte Ergebnis ist eine Standard-FHIR R4 Observation, die von jedem FHIR-Client gelesen werden kann:

```json
{
  "resourceType": "Observation",
  "status": "final",
  "category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "laboratory"}]}],
  "code": {"coding": [{"system": "http://loinc.org", "code": "2093-3",
                        "display": "Cholesterol [Mass/volume] in Serum or Plasma"}], "text": "Cholesterol"},
  "subject": {"reference": "Patient/4c3062d9-…"},
  "effectiveDateTime": "2026-10-02T07:45:00Z",
  "valueQuantity": {"value": 212.0, "unit": "mg/dL"},
  "interpretation": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation", "code": "H"}]}],
  "referenceRange": [{"high": {"value": 200.0, "unit": "mg/dL"}}]
}
```

Das erneute Senden derselben Nachricht erstellt nichts Neues (`"created": 0, "skipped": 3`): Jede Zeile erhält eine stabile Kennung aus der Berichts-ID, dem Code, dem Datum und dem Wert. Marker, die die Plattform nicht auf LOINC abbilden kann, behalten den Code des Labors und werden in `unmapped` zurückgegeben, sodass Sie die Zuordnung an der Quelle korrigieren können.

Das Zurücklesen von Ergebnissen ist eine Standard-FHIR-Suche:

```bash
curl -s "https://platform.anpheros.com/fhir/R4/Observation?patient=$PID&category=laboratory&code=http://loinc.org|2093-3" \
  -H "Authorization: Bearer $KEY"
```

Andere Wege für den Ein- und Ausstieg derselben Daten:

- **FHIR direkt:** `POST /fhir/R4/Observation` oder ein Transaktions-Bundle mit der `DiagnosticReport` und ihren Observations zusammen.
- **Ereignisse:** ein `resource.created` [Webhook](https://developers.anpheros.com/de/guides/webhooks) pro Observation, sodass eine Klinik oder eine App reagieren kann, wenn Ergebnisse eintreffen.
- **Für Menschen und KI:** Der Patient sieht die Ergebnisse in seiner App; Anwendungen, denen er zustimmt, lesen sie; `POST /v1/context` liefert einem KI-Modell eine mit Quellenangaben versehene Zusammenfassung, die aktuelle Laborwerte enthält.
- **Herkunft (Provenance):** Jedes importierte Ergebnis zeichnet `author_type = import`, das Quellsystem und die Berichts-ID auf ([Herkunft medizinischer Daten](https://developers.anpheros.com/de/guides/medical-data-provenance)).

Der vollständige Leitfaden mit einem CSV-Bericht, einer HL7 v2-Nachricht, nicht zugeordneten Markern und erneut gesendeten Berichten für einen synthetischen Patienten ist das Tutorial [How to import laboratory results into a FHIR record](https://developers.anpheros.com/de/guides/import-lab-results-fhir).

## Ergebnisse prüfen, bevor Sie sie senden

Der kostenlose [FHIR R4 Validator](https://developers.anpheros.com/tools/fhir-validator) prüft die Struktur einer Observation und die erforderlichen Wertesätze. Mit dem `eu-lab` Profil prüft er außerdem, was ein Laborergebnis enthalten sollte: die `laboratory` Kategorie, einen LOINC-Code, ein Subjekt, einen finalen Status, eine Zeit, einen Wert, eine UCUM-Einheit und einen Referenzbereich. Dieselben Prüfungen werden auf der Plattform über `POST /fhir/R4/Observation/$validate?profile=eu-lab` durchgeführt.

## Auswahl einer API für Laborergebnisse: Eine Checkliste

- Werden Ergebnisse als FHIR R4 Observations mit LOINC-Codes gespeichert oder als Zeilen in einem eigenen Schema?
- Können die Formate akzeptiert werden, die Ihre Labore tatsächlich senden (HL7 v2 in den meisten Krankenhäusern, CSV oder PDF von kleineren Laboren)?
- Was passiert mit einem Marker, der nicht zugeordnet werden kann: Wird er abgelehnt, verworfen oder mit dem Code des Labors beibehalten?
- Sind Wiederholungsversuche sicher, oder erzeugt ein erneut gesendeter Bericht Duplikate?
- Werden korrigierte Ergebnisse versioniert, wobei der frühere Wert noch lesbar ist?
- Wird der Ursprung jedes Wertes aufgezeichnet und für den Patienten sichtbar gemacht?
- Wer kann die Ergebnisse lesen und wird dies durch die Zustimmung des Patienten entschieden?

## Was Anpheros nicht tut

Anpheros ist kein Laborinformationssystem und nicht mit kommerziellen Labornetzwerken verbunden: Das Labor, die Klinik oder die App des Patienten sendet den Bericht. Es leitet keine Laboraufträge weiter, liest keine PDF-Berichte über diese API (die Anpheros Daily App extrahiert Ergebnisse von Fotos und PDFs auf der Patientenseite) und interpretiert keine Ergebnisse klinisch. Einheiten werden so gespeichert, wie das Labor sie sendet; die Umwandlung in UCUM-Codes obliegt dem Absender, wie in [Wie medizinische Daten normalisiert werden](https://developers.anpheros.com/de/guides/normalize-medical-data) beschrieben.

## Häufig gestellte Fragen

### Was ist eine Lab Results API?
Eine Schnittstelle, die es Software ermöglicht, Laborergebnisse als strukturierte Daten zu senden oder zu empfangen – ein kodierter Test, ein Wert mit einer Einheit, ein Referenzbereich, ein Status und eine Zeit – anstatt als Dokument. Moderne Lab Results APIs verwenden HL7 FHIR R4 Observation und DiagnosticReport Ressourcen; die meisten Labore geben immer noch HL7 v2 ORU^R01 Nachrichten aus.

### Welches Codesystem identifiziert Labortests?
LOINC. Jeder LOINC-Code benennt das Analyten, die Probe und oft die Methode, sodass `2345-7` (Glukose in Serum oder Plasma) und `2339-0` (Glukose in Vollblut) unterschiedliche Ergebnisse sind. Einheiten werden am besten in UCUM ausgedrückt.

### Was ist der Unterschied zwischen einem Observation und einem DiagnosticReport?
Ein Observation ist ein einzelnes Ergebnis, z. B. Cholesterin 212 mg/dL. Ein DiagnosticReport ist der Bericht als Ganzes – das bestellte Panel, wer es ausgestellt hat und wann – und listet seine Observations in `result` auf.

### Kann ich HL7 v2 Lab-Nachrichten in einen FHIR-Server importieren?
Ja. Jedes OBX-Segment wird einem Observation zugeordnet (OBX-3 zu `code`, OBX-5 und OBX-6 zu `valueQuantity`, OBX-7 zu `referenceRange`, OBX-8 zu `interpretation`). Der Anpheros Lab Connector erledigt dies in einer Anfrage und speichert die Berichts-ID des Labors in Provenance.

### Wie vermeide ich doppelte Laborergebnisse, wenn ein Bericht erneut gesendet wird?
Geben Sie jedem Ergebnis eine stabile Kennung, die sich aus dem Bericht, dem Test, der Zeit und dem Wert ableitet, und überspringen Sie Zeilen, deren Kennung bereits vorhanden ist. Der Anpheros Lab Connector tut dies automatisch und meldet die Anzahl als `skipped`.

## Verwandte Themen

- [HL7 v2 zu FHIR-Mapping](https://developers.anpheros.com/de/guides/hl7-v2-to-fhir-mapping): jedes Segment und jedes OBX-Feld
- [Laborergebnisse in einen FHIR-Datensatz importieren](https://developers.anpheros.com/de/guides/import-lab-results-fhir): das Schritt-für-Schritt-Tutorial
- [Lab Connector](https://developers.anpheros.com/de/guides/lab-connector): die Endpunktreferenz
- [Medizinische Daten normalisieren](https://developers.anpheros.com/de/guides/normalize-medical-data): LOINC, UCUM, Datumsangaben, Bereiche und Duplikate
- [Medizinische Datenherkunft erklärt](https://developers.anpheros.com/de/guides/medical-data-provenance)
- [FHIR-Codesysteme](https://developers.anpheros.com/de/guides/fhir-code-systems)
- [Kliniksysteme mit einem FHIR-Backend integrieren](https://developers.anpheros.com/de/guides/integrate-clinic-systems-fhir)
- [FHIR vs. HL7 v2: praktische Unterschiede](https://developers.anpheros.com/de/guides/fhir-vs-hl7-v2)
- [HL7 v2 und FHIR für klinische Dashboards](https://developers.anpheros.com/de/guides/clinical-dashboard-hl7-fhir): von einer Labornachricht zu einem Dashboard-Tile
