# Labor-Konnektor

> Senden Sie einen vollständigen Laborbericht als CSV, HL7 v2 ORU^R01 oder JSON und erhalten Sie Laborbeobachtungen mit LOINC-Codes und Referenzbereichen.

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

Ein Labor (oder jeder, der einen Laborbericht besitzt) sendet den gesamten Bericht in einer Anfrage und die
Plattform wandelt jedes Ergebnis in eine Labor-`Observation` des Patienten um:

```
POST /v1/patients/{patient_id}/labs/import
Authorization: Bearer <project key>
Content-Type: text/csv | x-application/hl7-v2+er7 | application/json
X-Anpheros-Source-System: labx        (optional; recorded in Provenance)
Idempotency-Key: <report id>          (optional; a retry returns the same answer)
```

## Formate

**CSV** mit Kopfzeile; Trennzeichen `,` `;` oder Tabulator, Dezimalkomma akzeptiert, Daten im ISO-Format,
`DD.MM.YYYY` oder `DD/MM/YYYY`. Erkannte Spalten (Rumänisch oder Englisch): Marker
(`analiza`, `test`, `marker`, `name`) — oder nur eine LOINC `code`-Spalte, in diesem Fall wird der LOINC-Name zum Marker —
Wert (`rezultat`, `valoare`, `value`, `result`), Einheit (`um`, `unitate`, `unit`),
Referenzbereich (`interval`, `referinta`: `70-100`, `<5`, `>3.5`) oder `ref_low`/`ref_high`,
Datum (`data`, `recoltare`), optional LOINC (`loinc`, `code`), Notiz.

```
Analiza;Rezultat;UM;Interval de referinta;Data
Hemoglobina glicozilata (HbA1c);6,4;%;4,0-5,6;01.09.2026
TSH;2,1;mUI/L;0,4-4,0;01.09.2026
```

**HL7 v2 ORU^R01** (ER7-Text, Segmente getrennt durch CR oder LF): `OBX-3`-Identifikator (`code^text^LN`
ist LOINC; ein lokaler Code (`^L`, `^99zzz`) oder ein beliebiges anderes Codierungssystem wird als eigener Code des Labors unter
`urn:anpheros:lab-code` beibehalten), `OBX-5`-Wert (`NM`, `SN` oder Text),
`OBX-6`-Einheit, `OBX-7`-Referenzbereich, `OBX-8`-Abnormalitätsflag → `interpretation`, `OBX-11`-Status,
`OBX-14` oder `OBR-7`-Datum; `OBR-3`/`MSH-10` werden zur Berichts-ID in Provenance.

**Das Labor.** Jedes Ergebnis benennt, wer es erstellt hat, in `performer`, wie es das HL7 Europe Laboratory Report 2.1.0
verlangt: die Organisation, für die Sie handeln (`X-Anpheros-Acting-As`), andernfalls `MSH-4` (sendende Einrichtung) für HL7 oder
`laboratory` in JSON (Top-Level oder pro Element). Eine CSV-Datei enthält kein Labor; solche Ergebnisse werden mit einem fehlenden
Performer validiert, was der Wahrheit entspricht.

**Textberichte, Dokumente und fehlende Daten.** Ein Textbericht, der eine Zeile pro OBX sendet (`TX`/`FT`, dasselbe `OBX-3`),
wird zu einem Ergebnis, bei dem die Zeilen verbunden sind. Ein ganzes Dokument in `OBX-5` (`ED` oder ein beliebiger Wert, der `Base64` kodiert ist) wird nicht
als Ergebnis gespeichert; die Antwort warnt und das Dokument gehört in `/documents`. Ohne `OBR-7` werden Ergebnisse nach
`OBR-14` (Probenempfang) datiert, mit einer Warnung.

**Zeiten und Zeitzonen.** Eine v2-Zeit ohne Zeitzone ist die lokale Zeit des Absenders, nicht UTC. Der mit
`OBX-14`/`OBR-7` (`20260901081000+0300`) gesendete Offset wird beibehalten (`2026-09-01T08:10:00+03:00`). Ohne einen wird der Offset von `MSH-7`
verwendet und eine Warnung gibt dies an; ohne Offset irgendwo behält das Ergebnis nur sein Datum, ebenfalls mit einer Warnung. CSV-Zeiten
(`01.09.2026 08:10`) enthalten keine Zeitzone, daher werden sie nur als Daten gespeichert. Bis zum 17. Oktober 2026 wurden solche Zeiten
als UTC gekennzeichnet; zu diesem Zeitpunkt importierte Ergebnisse behalten ihre Identifikatoren und werden bei erneutem Senden eines Berichts weiterhin erkannt.

HL7-Ergebnisse, die noch ausstehen (OBX-11 `I`), nicht erhältlich sind (`X`), gelöscht wurden (`D`) oder falsch sind (`W`) und OBX-Segmente
ohne Wert werden nicht zu Observations; jedes wird in `warnings` benannt.

**JSON**: `{"date": "2026-09-01", "origin": "report-77", "laboratory": "Synevo", "items": [{"marker": "TSH", "value": 2.1, "unit": "mUI/L", "ref_low": 0.4, "ref_high": 4.0, "date": "2026-09-01", "code": "3016-3"}]}`.

## Was Sie zurückerhalten

```json
{"created": 3, "skipped": 0, "unmapped": ["Marker foarte rar"], "warnings": [],
 "observations": [{"id": "…", "marker": "TSH", "code": "3016-3", "system": "http://loinc.org", "value": 2.1, "unit": "mUI/L", "date": "2026-09-01"}]}
```

- Marker werden **LOINC** zugeordnet, wenn der Bericht einen LOINC-Code angibt oder der Name mit der
  Terminologie der Plattform übereinstimmt (rumänische und englische Namen sowie gängige Aliase). Andere behalten den Code des Labors unter `urn:anpheros:lab-code` mit dem exakten Text aus dem Bericht und werden in `unmapped` aufgeführt,
  damit Sie die Zuordnung auf Ihrer Seite verbessern können. Ein eigener Code eines Labors ist nur in Verbindung mit seinem Labor eindeutig:
  das Quellsystem wird in der Provenance jeder Observation (`X-Anpheros-Source-System`) aufgezeichnet.
- Namen werden mit LOINC-Namen und Synonymen abgeglichen (z. B. *Hämoglobin A1c*, *Glykiertes Hämoglobin*,
  *HDL-Cholesterin*, *LDL-C*). Ein Name, der mehreren Konzepten entspricht oder einen Qualifier trägt, den das Konzept nicht hat
  (z. B. *Urin*, *nicht-HDL*, *frei*, *Verhältnis*…), wird nicht erraten: er behält den Code des Labors und wird in
  `unmapped` aufgeführt. Senden Sie LOINC-Codes, wann immer Ihr System diese hat.
- Harnstoff und Harnstoffstickstoff (BUN) sind unterschiedliche Messungen: *Harnstoff* / *Urea* wird Harnstoff zugeordnet (LOINC `3091-6` oder
  `22664-7` in mmol/L), *BUN* / *Harnstoffstickstoff* / *Azot ureic* wird Harnstoffstickstoff zugeordnet (`3094-0` oder `14937-7` in mmol/L).
  Werte werden niemals umgerechnet.
- LDL-Cholesterin: Ein Name ohne Methode wird `2089-1` zugeordnet; *berechnet* / *calculated* / *Friedewald* dem berechneten
  LDL (`13457-7`); *direkt* dem direkten Assay (`18262-6`). Die Methode ist ein Qualifier, wie *direkt* in *Bilirubina
  directa*, was nicht Gesamtbilirubin ist und den Code des Labors behält.
- Glukose: Ein bloßes "Glicemie" / "Glucose" auf einem Laborbericht wird Serum oder Plasma zugeordnet (LOINC `2345-7`);
  ein Name, der Kapillarblut, Fingerstich oder Vollblut angibt ("capilar", "sânge integral"), wird Vollblut zugeordnet (`2339-0`).
  Ein LOINC-Code im Bericht hat immer Vorrang.
- Jede Zeile erhält eine stabile Kennung (`urn:anpheros:lab-import:v2`), die aus den Angaben des Berichts erstellt wird – Berichts-ID,
  Name und Code im Bericht, Datum, Wert und Einheit – niemals aus dem LOINC-Code, den die Plattform gewählt hat, sodass
  **erneutes Senden desselben Berichts bereits importierte Zeilen überspringt** (`skipped`), auch nachdem die Zuordnung verbessert wurde.
  Zeilen, die sich in einem dieser Punkte unterscheiden (anderer Bericht, andere Entnahmezeit, anderer Wert), werden getrennt gehalten.
  Vor dem 14. Oktober 2026 importierte Ergebnisse behalten ihre ursprüngliche Kennung und werden anhand von Name, Datum, Wert,
  Einheit und Berichts-ID erkannt. Ohne Berichts-ID (CSV) wird eine solche Übereinstimmung in `warnings` gemeldet; senden Sie eine Berichts-ID
  (HL7 `OBR-3`/`MSH-10`, JSON `origin`), um getrennte Berichte zu unterscheiden.
- Jede Observation trägt eine Provenance mit `author_type = import`, Ihrem Quellsystem und der Berichts-ID;
  Webhooks werden `resource.created` pro Observation ausgelöst; der Patient sieht die Ergebnisse in seiner App und jede
  App, der er zugestimmt hat, kann sie lesen.
- Bis zu 500 Zeilen pro Anfrage.

Beide SDKs: `labs.importCsv`, `labs.importHl7`, `labs.importItems`.

Ein praxisnahes Beispiel für den Import von Laborergebnissen in einen FHIR-Datensatz aus einem CSV- und einem HL7 v2-Bericht, mit nicht zugeordneten Markern und erneut gesendeten Berichten: [How to import laboratory results into a FHIR record](https://developers.anpheros.com/de/guides/import-lab-results-fhir).

Wie Labordaten zwischen Laboren, Kliniken, Apps und KI ausgetauscht werden und worauf Sie bei einer API für Laborergebnisse achten sollten: [Laboratory results API](https://developers.anpheros.com/de/guides/lab-results-api).
