AnpherosAnpheros PlatformDevelopers

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

Jak normalizować dane medyczne

Samouczek: przekształć dane medyczne z wielu źródeł w jedną, porównywalną formę — wyszukiwanie LOINC, jednostki UCUM, daty ISO, zakresy referencyjne, brak duplikatów przy ponownej próbie i walidacja względem europejskiego profilu laboratoryjnego.

Normalizacja danych medycznych oznacza przekształcenie wartości, które docierają w wielu formach, w jedną, porównywalną formę: ten sam kod dla tego samego badania, ten sam system jednostek, daty w jednym formacie, każda wartość z jej zakresem referencyjnym i jej źródłem oraz brak duplikatów. Ten samouczek pokazuje, jak to zrobić przed dotarciem danych do rekordu HL7 FHIR R4: wyszukiwanie kodów LOINC i ATC, używanie jednostek UCUM, odrzucanie niejednoznacznych dat, zachowywanie zakresów, unikanie duplikatów przy ponownej próbie i sprawdzanie wyniku względem europejskiego profilu laboratoryjnego. Każda pokazana odpowiedź pochodzi z API Anpheros.

Dlaczego to ważne

Ten sam wynik HbA1c może dotrzeć do Ciebie jako „HbA1c 6,4 %”, „Hemoglobina glicozilata: 6.4”, „Glycated haemoglobin 46 mmol/mol” lub tylko kod laboratoryjny, który rozumie jedno laboratorium. Dopóki nie staną się jednym kodem z jedną jednostką:

Normalizacja powinna odbywać się w momencie, gdy dane trafiają do rekordu, raz, a nie w każdej aplikacji, która je później odczytuje.

Co zawiera znormalizowana wartość

Część Znormalizowana forma Przykład
Co zostało zmierzone kod ze standardowego systemu LOINC 4548-4 (HbA1c), RxNorm 6809 (metformina), ICD-10 E11 (cukrzyca typu 2)
Wartość liczba lub tekst tylko wtedy, gdy wynik nie jest liczbowy 6.4
Jednostka UCUM %, mg/dL, mm[Hg], kg
Kiedy data i czas w formacie ISO 8601, ze strefą czasową, gdy czas ma znaczenie 2026-10-01T07:30:00Z
Zakres normalny dolna i górna granica, w tej samej jednostce 4.0–5.6
Źródło kto wyprodukował i z jakiego systemu import z labx
Tożsamość coś, co sprawia, że powtórzenie jest rozpoznawalne klucz idempotencji lub identyfikator źródła

Który system kodowania pasuje do jakiego typu zasobu, jest wymieniony w Systemach kodowania FHIR.

Krok 1: Znajdź kod

Wyszukaj terminologię platformy według nazwy angielskiej lub rumuńskiej, albo według skrótu:

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"

Oba zwracają tę samą koncepcję:

{"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}

Dla leków, Anpheros Search znajduje substancję według nazwy lub marki i podaje jej kod składnika RxNorm oraz numery produktów EMA:

curl "https://platform.anpheros.com/v1/search?q=metformin&type=treatment" -H "Authorization: Bearer $KEY"

Pole unit to jednostka, której oczekuje LOINC dla danego testu. Użyj go, aby sprawdzić, co otrzymałeś. Zbuduj mapowanie z własnych nazw każdego źródła na kody raz, dla każdego źródła, i przechowuj je w swojej integracji. Nie zgaduj w czasie zapisu: gdy nazwa jest niejednoznaczna i nic w źródle tego nie wyjaśnia, pozostaw ją niezmapowaną i zapytaj źródło. Jak zaimportować wyniki laboratoryjne do rekordu FHIR pokazuje, jak przechowywane i raportowane są niezmapowane markery laboratoryjne.

Krok 2: Pisanie z kodami, jednostkami i zakresami

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-…"}

Kiedy wysyłasz tylko kod, platforma uzupełnia standardową nazwę LOINC, zarówno w REST API, jak i w FHIR API (/fhir/R4), dzięki czemu każda aplikacja odczytuje to samo display. display, które wysyłasz samodzielnie, jest zachowywane w niezmienionej postaci.

Zachowaj również oryginalne sformułowania. W przypadku raportu laboratoryjnego, code.text w FHIR Observation zawiera nazwę laboratorium ("Hemoglobina glicozilata (HbA1c)") obok kodowania LOINC. Pacjent nadal rozpoznaje swój papierowy raport, a nic nie zostanie utracone, jeśli mapowanie kiedykolwiek zostanie zakwestionowane.

Krok 3: Jednostki

Używaj kodów UCUM: mg/dL, mmol/L, %, mm[Hg], kg, cm, /min, Cel. Dwie zasady zapobiegają większości błędów:

Anpheros nie konwertuje jednostek za Ciebie; przechowuje jednostkę, którą wysyłasz.

Krok 4: daty

Przed zapisaniem konwertuj daty do formatu ISO 8601, używając znanego formatu źródła. 01.10.2026 to 1 października w Rumunii i wielu krajach europejskich, ale 10/01/2026 to 1 października tylko w Stanach Zjednoczonych. API odrzuca wszystko, co nie jest w formacie ISO, zamiast zgadywać:

{"error": {"type": "invalid", "message": "Input should be a valid datetime or date, invalid character in year (at effective_at)", "field": "effective_at"}}

Wyjątkiem jest konektor laboratoryjny: akceptuje on DD.MM.YYYY i DD/MM/YYYY, ponieważ wie, że odczytuje europejski raport.

W przypadku pomiarów, w których ważna jest pora dnia (ciśnienie krwi, glukoza, dawki leków), przesyłaj czas wraz ze strefą czasową. Odczyt o 23:30 w Bukareszcie przypada na poprzedni dzień w strefie UTC, a pacjent oczekuje go w dniu, w którym został wykonany.

Krok 5: brak duplikatów

Duplikaty powstają w wyniku ponownych prób, dwukrotnego wysłania tego samego raportu oraz otrzymania tej samej wartości przez dwie ścieżki.

Krok 6: Sprawdzenie zgodności z profilem

W przypadku wyników laboratoryjnych, przed poleganiem na nich, zapytaj platformę, jak zasób wypada w porównaniu z profilem raportu laboratoryjnego HL7 Europe:

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": "%"}
}'

Ten nieznormalizowany wynik otrzymuje precyzyjną listę:

{"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"]}]}

Każdy problem odpowiada jednemu z powyższych kroków. Uruchom $validate w swoich testach integracyjnych, używając rzeczywistych próbek z każdego źródła.

Krok 7: zachowaj źródło

Normalizacja zmienia sposób zapisu wartości, nigdy jej pochodzenie. Wysyłaj author_type (device, import, practitioner, patient) i X-Anpheros-Source-System przy każdej operacji zapisu. To właśnie pozwala lekarzowi, audytorowi lub modelowi AI odróżnić wynik laboratoryjny od wartości wpisanej w domu. Zobacz Wyjaśnienie pochodzenia danych medycznych.

Lista kontrolna

Często zadawane pytania

Czym jest normalizacja danych medycznych?

Konwersja danych medycznych z różnych źródeł do jednej standardowej formy: wspólnych kodów (LOINC dla testów i pomiarów, ICD-10 dla diagnoz, ATC dla leków), jednostek UCUM, dat ISO, zakresów referencyjnych i zarejestrowanego źródła, tak aby wartości z różnych systemów można było porównywać, łączyć i wymieniać.

Czy powinienem przeliczać wszystkie wartości na jedną jednostkę?

Przechowuj jednostkę, w której mierzyło źródło, o ile jest to prawidłowa jednostka UCUM pasująca do kodu, i konwertuj podczas wyświetlania lub analizy. Dzięki temu każda przechowywana wartość jest możliwa do prześledzenia do oryginalnego raportu.

Czy normalizacja może być w pełni automatyczna?

W większości przypadków. Kody w źródle, znane nazwy i dobrze sformułowane jednostki można mapować automatycznie. Niejednoznaczne nazwy i nieznane lokalne kody wymagają jednorazowej decyzji człowieka dla każdego źródła, po czym mapowanie staje się automatyczne.

Powiązane

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