Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Laboratuvar Sonuçları FHIR Kaydına Nasıl Aktarılır
Eğitim: bir laboratuvar raporunu CSV ve HL7 v2 ORU^R01 olarak FHIR R4 Gözlemlerine LOINC kodları ve referans aralıklarıyla aktarma, eşlenmemiş işaretçileri ve yeniden gönderilen raporları işleme ve her sonucu laboratuvarına izleme.
Bu eğitim, bir laboratuvar raporunu CSV dosyası ve HL7 v2 ORU^R01 mesajı olarak alır, her biri için tek bir istekte hastanın HL7 FHIR R4 kaydına içe aktarır ve geri dönenleri gösterir: LOINC kodları, referans aralıkları ve köken bilgileri içeren laboratuvar Observation kaynakları. Ayrıca, her laboratuvar entegrasyonunun karşılaştığı iki sorunu da kapsar: otomatik olarak eşlenemeyen işaretçiler ve iki kez gönderilen raporlar. Her şey, sentetik bir hasta ile ücretsiz sandbox üzerinde çalışır.
Laboratuvar Sonuçlarının Saklanmasının Zorlukları
Bir laboratuvar raporu basit görünür: bir işaretleyici, bir değer, bir birim, bir referans aralığı, bir tarih. Pratikte her laboratuvar işaretleyicileri kendi yöntemleriyle adlandırır ("Hemoglobina glicozilata", "HbA1c", "Glycated haemoglobin"), ondalık sayılar için virgül veya nokta kullanır, aralıkları 4,0-5,6, <5 veya >3.5 şeklinde yazar ve bir şeyler başarısız olduğunda aynı raporu yeniden gönderir. Serbest metin olarak saklanan bu sonuçlar zaman içinde karşılaştırılamaz, grafiklenemez, başka bir uygulamayla paylaşılamaz veya bir yapay zeka modeline güvenle verilemez.
Bir FHIR kaydı, her sonucu bir Observation olarak LOINC kodu, bir UCUM birimi, bir değer, bir referans aralığı ve bir tarih ile saklar ve kimin gönderdiğini bir Provenance kaynağında tutar. Laboratuvar bağlayıcısı bu dönüşümü sizin için yapar.
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
Başlamadan Önce
platform.anpheros.com/dashboard adresinden bir sandbox anahtarına (sk_test_…) ihtiyacınız olacak (Bir sandbox anahtarı alın). Örnekler curl'ü kullanır; SDK'lar aynı çağrıları kullanır (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')
Adım 1: Bir CSV raporu içe aktarın
Bir Romen laboratuvarının raporu şu şekilde dışa aktarabileceği durum: noktalı virgüller, ondalık virgüller, Romen sütun adları ve tarihler DD.MM.YYYY olarak. Bağlayıcı, Romen ve İngilizce sütun adlarını tanır.
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
Yanıt (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, glukoz ve TSH, adlarından LOINC'e eşleştirildi. Ondalık virgüller sayılara dönüştü ve aralıklar referenceRange oldu. unmapped içinde bir satır geri geldi. Laboratuvarın kendi kodu (urn:anpheros:lab-code) altında, rapordaki tam metinle birlikte hala saklanmaktadır, bu nedenle hiçbir şey kaybolmaz.
Adım 2: Eşlenmemiş işaretçileri işleme
Bazı isimler bir karar gerektirir. "Glicemie" (kan şekeri) iyi bir örnektir: LOINC'in serum veya plazmadaki glikoz için bir kodu (2345-7, laboratuvarda alınan venöz bir örnek) ve tam kanda glikoz için başka bir kodu (2339-0, örneğin parmaktan alınan bir örnek) vardır. Bir laboratuvar raporunda, sadece "Glicemie" serum veya plazmaya eşlenir. "Capilar", "capillary" veya "sânge integral" diyen bir isim tam kana eşlenir:
{"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"}]}
Bağlayıcının tanımadığı işaretçiler için kodu arayın:
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}
Ardından kodu LOINC sütununa gönderin. Rapordaki bir kod her zaman isme üstün gelir. Bu eşlemeyi laboratuvar başına kendi tarafınızda saklayın ve her rapordan buna bir sütun ekleyin:
Analiza;Rezultat;UM;Interval de referinta;Data;LOINC
Glicemie;99;mg/dL;70-100;04.10.2026;2339-0
LOINC'in hiç kapsamadığı, uydurma "Marker foarte rar" gibi işaretçiler laboratuvarın kodu altında kalabilir. Hastaya gösterilir ve kayda dahil edilir. Diğer laboratuvarların sonuçlarıyla karşılaştırılamazlar.
Adım 3: Raporu İki Kez Gönderme
Laboratuvarlar raporları yeniden gönderir. Her satır, rapor kimliği, kod, tarih ve değerden oluşan kararlı bir tanımlayıcı alır, bu nedenle aynı raporun ikinci bir içe aktarılması hiçbir şey oluşturmaz:
{"created": 0, "skipped": 4, "unmapped": ["Marker foarte rar"], "warnings": [], "observations": []}
Değişen satırlar, örneğin düzeltilmiş bir değer, yeni sonuçlar olarak içe aktarılır. Idempotency-Key üstbilgisi ikinci bir güvence ekler: aynı anahtarla bir ağ yeniden denemesi ilk yanıtı değişmeden döndürür.
Adım 4: Bir HL7 v2 ORU^R01 mesajı içe aktarın
Laboratuvar bilgi sistemlerinin çoğu HL7 v2 kullanır. Mesajı olduğu gibi (ER7 metni, segmentler CR veya LF ile ayrılmış) gönderin:
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, LN kodlama sistemi ile doğrudan LOINC olarak kullanılır. OBX-7 referans aralığı olur ve OBX-8 (H, N) yorum olur. OBR-3 (R-77) provenance'da rapor kimliği olarak saklanır. Hasta URL'deki hastadır: PID segmenti hasta bulmak için kullanılmaz, bu nedenle yanlış bir PID başkasının sonuçlarını ekleyemez.
Zaten ayrıştırılmış sonuçlarınız mı var? JSON gönderin: {"date": "2026-10-01", "origin": "report-77", "items": [{"marker": "Ferritin", "value": 38, "unit": "ng/mL", "ref_low": 15, "ref_high": 150}]}. Ferritin, LOINC 2276-4'e eşlenir.
Adım 5: Sonuçları FHIR olarak okuma
curl "$BASE/fhir/R4/Observation?patient=$PID&code=http://loinc.org|4548-4&_sort=-date&_count=1" \
-H "Authorization: Bearer $KEY"
İçe aktarılan HbA1c, şu şekilde saklanır:
{
"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 gösterimi standart İngilizce isimdir. code.text laboratuvarın kendi ifadesini korur, böylece hasta kağıt raporda gördüğünü görmeye devam eder. Kaynaklar ve arama hakkında daha fazla bilgi için FHIR platformu kılavuzuna ve FHIR kod sistemlerine bakın.
Adım 6: Göndereni Kontrol Etme
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 ve source_system: labx değerle birlikte kalır. Bir yapay zeka uygulaması bu sonucu daha sonra bağlam API'si aracılığıyla okuduğunda, bu [import/labx] olarak etiketlenir, böylece model bir laboratuvar sonucunu hastanın girdiği bir değerden ayırt edebilir.
Sonraki Adımlar
- Hasta sonuçları uygulamasında görür. Onay verdiği herhangi bir uygulama, kapsamları dahilinde bunları okuyabilir (Onay ve Erişim Modeli).
- Her Gözlem (Observation) için bir
resource.createdwebhook tetiklenir, böylece bir klinik panosu veya yapay zeka özeti yoklama yapmadan güncellenebilir. POST /fhir/R4/Observation/$validate?profile=eu-lab, bir sonucun HL7 Europe laboratuvar rapor profiline nasıl uyduğunu bildirir.- İstek başına en fazla 500 satır; sınırlar Sınırlar ve Hız Sınırları bölümünde listelenmiştir.
Sıkça Sorulan Sorular
FHIR'a hangi laboratuvar raporu formatları aktarılabilir?
Başlık satırı olan CSV (virgül, noktalı virgül veya sekme, ondalık virgül kabul edilir), HL7 v2 ORU^R01 mesajları ve JSON. PDF raporları belge olarak saklanabilir; bunlardan çıkarılan değerler belgeye geri işaret eder.
LOINC kodu olmayan işaretleyicilere ne olur?
Laboratuvarın kendi kodu altında, rapordaki tam metinle birlikte saklanır ve unmapped'te listelenir. O laboratuvar için bir LOINC sütunu eklenirse eşleştirilir. Rapordaki bir kod her zaman adın önüne geçer.
Bir raporu yeniden göndermek güvenli midir?
Evet. Her satır, rapor, kod, tarih ve değerden oluşan kararlı bir tanımlayıcıya sahiptir, bu nedenle zaten aktarılmış satırlar atlanır; değiştirilen satırlar yeni sonuçlar olarak aktarılır.
Bir laboratuvar herhangi bir hasta için sonuçları aktarabilir mi?
Hayır. Bir laboratuvar, projesinin oluşturduğu veya kişinin OAuth aracılığıyla paylaştığı kayıtların bulunduğu hastalara aktarım yapar. Diğer hastalar onun için mevcut değildir (404).
İlgili Konular
- Laboratuvar sonuçları API'si: HL7 v2 ve FHIR yan yana ve bir sonucun ne taşıması gerektiği
- Laboratuvar bağlayıcısı: her sütun adı, HL7 alanı ve yanıt alanı
- Sağlık verileri birlikte çalışabilirliği: kodlar ve köken bilgisi neden değiş tokuş edilen verileri kullanılabilir hale getirir
- Sağlık entegrasyonları: klinikler, laboratuvarlar, cihazlar ve üçüncü taraf uygulamalar
- Tıbbi veri API'si: tekil gözlemler, durumlar ve ilaçlar yazma
- FHIR arka ucu ile bir yapay zeka sağlık uygulaması nasıl oluşturulur: bu sonuçların bir yapay zeka yanıtında kullanılması
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card