AnpherosAnpheros PlatformDevelopers

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Jak importovat laboratorní výsledky do FHIR záznamu

Návod: import laboratorní zprávy jako CSV a jako HL7 v2 ORU^R01 do FHIR R4 Observations s LOINC kódy a referenčními rozsahy, zpracování nemapovaných markerů a opakovaných zpráv a sledování každého výsledku do jeho laboratoře.

Tento návod vezme laboratorní zprávu jako soubor CSV a jako zprávu HL7 v2 ORU^R01, importuje ji do HL7 FHIR R4 záznamu pacienta v každém případě jedním požadavkem a ukáže, co dostanete zpět: laboratorní Observation zdroje s LOINC kódy, referenčními rozsahy a původem. Pokrývá také dva problémy, se kterými se setká každá integrace laboratoře: markery, které nelze automaticky namapovat, a zprávy, které jsou odeslány dvakrát. Vše běží na bezplatném sandboxu se syntetickým pacientem.

Proč je ukládání laboratorních výsledků obtížné

Laboratorní zpráva vypadá jednoduše: značka, hodnota, jednotka, referenční rozmezí, datum. V praxi každá laboratoř pojmenovává značky svým vlastním způsobem ("Hemoglobina glicozilata", "HbA1c", "Glycated haemoglobin"), používá čárky nebo tečky pro desetinná místa, zapisuje rozmezí jako 4,0-5,6, <5 nebo >3.5 a při selhání opakovaně posílá stejnou zprávu. Pokud jsou výsledky uloženy jako volný text, nelze je porovnávat v čase, graficky zobrazovat, sdílet s jinou aplikací ani s jistotou předat modelu umělé inteligence.

Záznam FHIR ukládá každý výsledek jako Observation s kódem LOINC, jednotkou UCUM, hodnotou, referenčním rozmezím a datem a uchovává informaci o tom, kdo jej odeslal, v prostředku Provenance. Konektor pro laboratoře provádí tuto konverzi za vás.

 lab report (CSV, HL7 v2, JSON)
        │  POST /v1/patients/{id}/labs/import
        ▼
 ┌──────────────────────────────────────────────┐
 │ parse rows → map marker to LOINC → parse     │
 │ value, unit, range → stable id per row       │
 └──────────────────────────────────────────────┘
        │
        ▼
 Observation (category laboratory) + Provenance (author_type import, source system, report id)
        │
        ├─► the patient's app and every app they consented to
        └─► webhooks: resource.created per Observation

Než začnete

Potřebujete sandbox klíč (sk_test_…) z platform.anpheros.com/dashboard (Získat sandbox klíč). Příklady používají curl; SDK mají stejné volání (labs.importCsv, labs.importHl7, labs.importItems).

export BASE=https://platform.anpheros.com
export KEY=sk_test_…
# Elena Ionescu, a synthetic patient with type 2 diabetes
export PID=$(curl -s "$BASE/fhir/R4/Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|p02" \
  -H "Authorization: Bearer $KEY" | jq -r '.entry[0].resource.id')

Krok 1: Import CSV zprávy

Takto může rumunská laboratoř exportovat zprávu: středníky, desetinné čárky, rumunské názvy sloupců a data jako DD.MM.YYYY. Konektor rozpoznává rumunské a anglické názvy sloupců.

cat > report.csv <<'EOF'
Analiza;Rezultat;UM;Interval de referinta;Data
Hemoglobina glicozilata (HbA1c);6,9;%;4,0-5,6;01.10.2026
Glicemie;131;mg/dL;70-100;01.10.2026
TSH;2,1;mUI/L;0,4-4,0;01.10.2026
Marker foarte rar;12;U/L;0-20;01.10.2026
EOF

curl -X POST "$BASE/v1/patients/$PID/labs/import" -H "Authorization: Bearer $KEY" \
     -H "Content-Type: text/csv" -H "X-Anpheros-Source-System: labx" \
     -H "Idempotency-Key: report-2026-10-01-elena" --data-binary @report.csv

Odpověď (201):

{"created": 4, "skipped": 0, "unmapped": ["Marker foarte rar"], "warnings": [],
 "observations": [
  {"id": "ff0bbb44-…", "marker": "Hemoglobina glicozilata (HbA1c)", "code": "4548-4", "system": "http://loinc.org", "value": 6.9, "unit": "%", "date": "2026-10-01"},
  {"id": "ebe5522f-…", "marker": "Glicemie", "code": "2345-7", "system": "http://loinc.org", "value": 131.0, "unit": "mg/dL", "date": "2026-10-01"},
  {"id": "bace44a8-…", "marker": "TSH", "code": "3016-3", "system": "http://loinc.org", "value": 2.1, "unit": "mUI/L", "date": "2026-10-01"},
  {"id": "26fd2270-…", "marker": "Marker foarte rar", "code": "marker_foarte_rar", "system": "urn:anpheros:lab-code", "value": 12.0, "unit": "U/L", "date": "2026-10-01"}]}

HbA1c, glukóza a TSH byly namapovány na LOINC podle jejich názvů. Desetinné čárky se změnily na čísla a rozsahy se staly referenceRange. Jeden řádek se vrátil v unmapped. Stále je uložen pod vlastním kódem laboratoře (urn:anpheros:lab-code) s přesným textem ze zprávy, takže se nic neztratilo.

Krok 2: Zpracování nemapovaných značek

Některá jména vyžadují rozhodnutí. „Glicemie“ (hladina glukózy v krvi) je dobrým příkladem: LOINC má jeden kód pro glukózu v séru nebo plazmě (2345-7, vzorek odebraný v laboratoři z žíly) a druhý pro glukózu v celé krvi (2339-0, například z prstu). V laboratorní zprávě je holá „Glicemie“ mapována na sérum nebo plazmu. Název, který říká „capilar“, „capillary“ nebo „sânge integral“, je mapován na celou krev:

{"created": 1, "skipped": 0, "unmapped": [], "warnings": [],
 "observations": [{"id": "00480a6d-…", "marker": "Glicemie capilara", "code": "2339-0", "system": "http://loinc.org", "value": 140.0, "unit": "mg/dL", "date": "2026-10-02"}]}

Pro značky, které konektor nerozpozná, vyhledejte kód:

curl "$BASE/v1/terminology/loinc?q=glucose" -H "Authorization: Bearer $KEY"
{"data": [
  {"system": "http://loinc.org", "code": "2339-0", "display": "Glucose [Mass/volume] in Blood", "display_ro": "Glicemie (sânge)", "category": "laboratory", "unit": "mg/dL"},
  {"system": "http://loinc.org", "code": "2345-7", "display": "Glucose [Mass/volume] in Serum or Plasma", "display_ro": "Glicemie (ser)", "category": "laboratory", "unit": "mg/dL"}],
 "total": 2}

Poté odešlete kód ve sloupci LOINC. Kód ve zprávě má vždy přednost před názvem. Tuto mapu uchovávejte pro každé laboratoř na vaší straně a přidejte sloupec do každé zprávy z ní:

Analiza;Rezultat;UM;Interval de referinta;Data;LOINC
Glicemie;99;mg/dL;70-100;04.10.2026;2339-0

Značky, které LOINC vůbec nepokrývá, jako například smyšlený „Marker foarte rar“, mohou zůstat pod kódem laboratoře. Jsou zobrazeny pacientovi a zahrnuty do záznamu. Nelze je porovnávat s výsledky jiných laboratoří.

Krok 3: Odeslání stejné zprávy dvakrát

Laboratoře zasílají zprávy opakovaně. Každý řádek získá stabilní identifikátor sestavený z ID zprávy, kódu, data a hodnoty, takže druhý import stejné zprávy nic nevytvoří:

{"created": 0, "skipped": 4, "unmapped": ["Marker foarte rar"], "warnings": [], "observations": []}

Řádky, které se změnily, například opravená hodnota, jsou importovány jako nové výsledky. Hlavička Idempotency-Key přidává druhou záruku: síťové opakování se stejným klíčem vrátí první odpověď nezměněnou.

Krok 4: Import zprávy HL7 v2 ORU^R01

Většina laboratorních informačních systémů komunikuje pomocí HL7 v2. Odešlete zprávu tak, jak je (text ER7, segmenty oddělené CR nebo LF):

MSH|^~\&|LABX|LAB1|ANPHEROS|EHR|202610010930||ORU^R01|MSG00077|P|2.5.1
PID|1||12345||Ionescu^Elena||19850903|F
OBR|1||R-77|24331-1^Lipid panel^LN|||202610010800
OBX|1|NM|2093-3^Cholesterol [Mass/volume] in Serum or Plasma^LN||212|mg/dL|<200|H|||F|||202610010800
OBX|2|NM|2085-9^HDL Cholesterol^LN||52|mg/dL|>40|N|||F|||202610010800
curl -X POST "$BASE/v1/patients/$PID/labs/import" -H "Authorization: Bearer $KEY" \
     -H "Content-Type: x-application/hl7-v2+er7" --data-binary @oru.hl7
{"created": 2, "skipped": 0, "unmapped": [], "warnings": [],
 "observations": [
  {"id": "b562045b-…", "marker": "Cholesterol [Mass/volume] in Serum or Plasma", "code": "2093-3", "system": "http://loinc.org", "value": 212.0, "unit": "mg/dL", "date": "2026-10-01T08:00:00Z"},
  {"id": "9b3274e4-…", "marker": "HDL Cholesterol", "code": "2085-9", "system": "http://loinc.org", "value": 52.0, "unit": "mg/dL", "date": "2026-10-01T08:00:00Z"}]}

OBX-3 se systémem kódování LN je použit přímo jako LOINC. OBX-7 se stává referenčním rozsahem a OBX-8 (H, N) interpretací. OBR-3 (R-77) je zachováno jako ID zprávy v původu (provenance). Pacientem je ten, který je v URL: segment PID se nepoužívá k nalezení pacienta, takže nesprávný PID nemůže připojit výsledky k někomu jinému.

Již máte zpracované výsledky? Odešlete JSON: {"date": "2026-10-01", "origin": "report-77", "items": [{"marker": "Ferritin", "value": 38, "unit": "ng/mL", "ref_low": 15, "ref_high": 150}]}. Ferritin je namapován na LOINC 2276-4.

Krok 5: čtení výsledků jako FHIR

curl "$BASE/fhir/R4/Observation?patient=$PID&code=http://loinc.org|4548-4&_sort=-date&_count=1" \
     -H "Authorization: Bearer $KEY"

Importovaný HbA1c, jak je uložen:

{
  "resourceType": "Observation",
  "id": "62b1b0c0-…",
  "meta": {"versionId": "1", "lastUpdated": "2026-10-12T20:05:57.011Z"},
  "identifier": [{"system": "urn:anpheros:lab-import", "value": "c52d3cd6449291d34f6bef1516d0ac05"}],
  "status": "final",
  "category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "laboratory"}]}],
  "code": {"coding": [{"system": "http://loinc.org", "code": "4548-4", "display": "Hemoglobin A1c/Hemoglobin.total in Blood"}],
           "text": "Hemoglobina glicozilata (HbA1c)"},
  "subject": {"reference": "Patient/…"},
  "effectiveDateTime": "2026-10-01",
  "valueQuantity": {"value": 6.9, "unit": "%"},
  "referenceRange": [{"low": {"value": 4.0, "unit": "%"}, "high": {"value": 5.6, "unit": "%"}}]
}

LOINC display je standardní anglický název. code.text zachovává vlastní formulaci laboratoře, takže pacient stále vidí to, co bylo na papírové zprávě. Další informace o zdrojích a vyhledávání naleznete v příručce FHIR platform a FHIR code systems.

Krok 6: Kontrola odesílatele

curl "$BASE/v1/patients/$PID/provenance/Observation/62b1b0c0-…" -H "Authorization: Bearer $KEY"
{"data": [{"version": 1, "activity": "CREATE", "recorded": "2026-10-12T20:05:57.011000Z",
           "author_type": "import", "author": "proj_…", "source_system": "labx", "origin_id": null,
           "fhir": "Provenance/f15c4fee-…"}], "total": 1}

author_type: import a source_system: labx zůstávají s hodnotou. Když AI aplikace později tuto výsledek přečte prostřednictvím context API, je označen jako [import/labx], takže model dokáže rozlišit laboratorní výsledek od hodnoty zadané pacientem.

Co se děje dál

Často kladené dotazy

Jaké formáty laboratorních zpráv lze importovat do FHIR?

CSV s hlavičkovým řádkem (akceptuje se čárka, středník nebo tabulátor, desetinná čárka), zprávy HL7 v2 ORU^R01 a JSON. Zprávy PDF lze ukládat jako dokumenty; hodnoty z nich extrahované odkazují zpět na dokument.

Co se stane se značkami bez kódu LOINC?

Jsou uloženy pod vlastním kódem laboratoře s přesným textem ze zprávy a uvedeny v unmapped. Přidejte sloupec LOINC pro danou laboratoř a dojde k jejich mapování. Kód ve zprávě má vždy přednost před názvem.

Je bezpečné znovu odeslat zprávu?

Ano. Každý řádek má stabilní identifikátor vytvořený ze zprávy, kódu, data a hodnoty, takže již importované řádky jsou přeskočeny; změněné řádky jsou importovány jako nové výsledky.

Může laboratoř importovat výsledky pro libovolného pacienta?

Ne. Laboratoř importuje do pacientů, které její projekt vytvořil, nebo jejichž záznamy jí osoba sdílela prostřednictvím OAuth. Jiní pacienti pro ni neexistují (404).

Související

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Product updates by email

New features, guides and the end of the beta. One email a month at most.

Send me occasional Anpheros Platform updates by email (new features, API changes, guides). I'll confirm by email and can unsubscribe in one click from any email. Privacy