# Ako normalizovať lekárske dáta

> Tutoriál: premeňte lekárske dáta z viacerých zdrojov do jednej porovnateľnej formy — vyhľadávanie LOINC, jednotky UCUM, dátumy ISO, referenčné rozsahy, žiadne duplikáty pri opakovanom pokuse a validácia voči európskemu laboratórnemu profilu.

Source: https://developers.anpheros.com/sk/guides/normalize-medical-data

**Normalizácia lekárskych dát znamená premenu hodnôt, ktoré prichádzajú v mnohých podobách, do jednej porovnateľnej formy: rovnaký kód pre rovnaký test, rovnaký systém jednotiek, dátumy v jednom formáte, každá hodnota s jej referenčným rozsahom a jej zdrojom, a žiadne duplikáty.** Tento tutoriál ukazuje, ako to urobiť pred tým, ako dáta dosiahnu záznam HL7 FHIR R4: vyhľadávanie kódov LOINC a ATC, používanie jednotiek UCUM, odmietanie nejednoznačných dátumov, uchovávanie rozsahov, vyhýbanie sa duplikátom pri opakovanom pokuse a kontrola výsledku voči európskemu laboratórnemu profilu. Každá zobrazená odpoveď pochádza z Anpheros API.

## Prečo je to dôležité

Rovnaký výsledok HbA1c k vám môže prísť ako „HbA1c 6,4 %“, „Hemoglobina glicozilata: 6.4“, „Glycated haemoglobin 46 mmol/mol“ alebo len ako laboratórny kód, ktorému rozumie iba jedno laboratórium. Kým sa tieto hodnoty nestanú jedným kódom s jednou jednotkou:

- graf HbA1c pacienta v priebehu času zobrazuje tri nesúvisiace čiary;
- upozornenie na „HbA1c nad 6,5 %“ vynechá dve z hodnôt;
- AI model vidí štyri fakty namiesto jedného trendu;
- iný systém, ktorý prijíma záznam, ho nedokáže interpretovať.

Normalizácia patrí do bodu, kde dáta vstupujú do záznamu, raz, nie do každej aplikácie, ktorá ich neskôr číta.

## Čo obsahuje normalizovaná hodnota

| Časť | Normalizovaná forma | Príklad |
|---|---|---|
| Čo bolo merané | kód zo štandardného systému | LOINC `4548-4` (HbA1c), RxNorm `6809` (metformín), ICD-10 `E11` (diabetes mellitus 2. typu) |
| Hodnota | číslo, alebo text iba vtedy, keď výsledok nie je numerický | `6.4` |
| Jednotka | UCUM | `%`, `mg/dL`, `mm[Hg]`, `kg` |
| Kedy | dátum a čas v ISO 8601, s časovou zónou, keď je čas dôležitý | `2026-10-01T07:30:00Z` |
| Normálny rozsah | dolná a horná hranica, v rovnakej jednotke | `4.0`–`5.6` |
| Zdroj | kto ju vyprodukoval a z akého systému | `import` z `labx` |
| Identita | niečo, čo robí opakovanie rozpoznateľným | kľúč na idempotenciu alebo identifikátor zdroja |

Ktorý kódový systém zodpovedá ktorému typu zdroja je uvedený v [FHIR kódových systémoch](https://developers.anpheros.com/sk/guides/fhir-code-systems).

## Krok 1: Nájdite kód

Vyhľadajte terminológiu platformy podľa anglického alebo rumunského názvu, alebo podľa skratky:

```bash
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"
```

Obe vracajú rovnaký koncept:

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

Pre lieky, [Anpheros Search](https://developers.anpheros.com/sk/guides/anpheros-search) nájde látku podľa názvu alebo značky a poskytne jej RxNorm kód zložky a čísla produktov EMA:

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

Pole `unit` je jednotka, ktorú LOINC očakáva pre daný test. Použite ho na kontrolu toho, čo ste prijali. Vytvorte mapovanie z vlastných názvov každého zdroja na kódy raz, pre každý zdroj, a uchovávajte ho vo vašej integrácii. Nehádajte pri zápise: keď je názov nejednoznačný a nič v zdroji to nevyrieši, nechajte ho nemapovaný a požiadajte zdroj. [Ako importovať laboratórne výsledky do FHIR záznamu](https://developers.anpheros.com/sk/guides/import-lab-results-fhir) ukazuje, ako sa nemapované laboratórne markery uchovávajú a hlásia.

## Krok 2: Zápis s kódmi, jednotkami a rozsahy

```bash
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"
}'
```

```json
{"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-…"}
```

Keď odošlete iba kód, platforma doplní štandardný názov LOINC, rovnako na REST API ako aj na FHIR API (`/fhir/R4`), takže každá aplikácia číta to isté `display`. `display`, ktorý odošlete sami, sa zachová tak, ako je.

Zachovajte aj pôvodné znenie. Pre laboratórnu správu, `code.text` na FHIR Observation drží názov laboratória ("Hemoglobina glicozilata (HbA1c)") vedľa kódovania LOINC. Pacient stále spoznáva svoju papierovú správu a nič sa nestratí, ak by sa mapovanie niekedy spochybnilo.

## Krok 3: jednotky

Použite kódy UCUM: `mg/dL`, `mmol/L`, `%`, `mm[Hg]`, `kg`, `cm`, `/min`, `Cel`. Dve pravidlá zabránia väčšine chýb:

- **Nevykonávajte tiché konverzie.** Ak laboratórium hlási glukózu v `mmol/L` a vaša aplikácia zobrazuje `mg/dL`, uložte to, čo laboratórium nameralo, a konvertujte to pri zobrazovaní. Uložená hodnota zostáva sledovateľná k hláseniu.
- **Skontrolujte jednotku oproti kódu.** Kódy LOINC sú špecifické: HbA1c v `%` je `4548-4`, zatiaľ čo HbA1c v `mmol/mol` má iný kód LOINC. Hodnota, ktorej jednotka nezodpovedá očakávanej jednotke kódu, je chybou mapovania, nie problémom konverzie.

Anpheros nekonvertuje jednotky za vás; ukladá jednotku, ktorú odošlete.

## Krok 4: dátumy

Pred zápisom konvertujte dátumy do formátu ISO 8601 pomocou známeho formátu zdroja. `01.10.2026` je 1. október v Rumunsku a mnohých európskych krajinách, ale `10/01/2026` je 1. október iba v Spojených štátoch. API odmieta čokoľvek, čo nie je v ISO formáte, namiesto toho, aby sa pokúšalo hádať:

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

Výnimkou je laboratórny konektor: akceptuje `DD.MM.YYYY` a `DD/MM/YYYY`, pretože vie, že číta európsku správu.

Pre merania, kde záleží na dennom čase (krvný tlak, glukóza, dávky liekov), posielajte čas s jeho časovým pásmom. Odčítanie o 23:30 v Bukurešti je v UTC predchádzajúci deň a pacient očakáva, že bude zaznamenané v deň, kedy ho vykonal.

## Krok 5: žiadne duplikáty

Duplikáty vznikajú z opakovaných pokusov, z dvoch rovnakých odoslaných správ a z rovnakých hodnôt prichádzajúcich dvoma cestami.

- **Opakované pokusy:** odošlite `Idempotency-Key`, ktorý identifikuje hodnotu vo zdroji, napríklad ID správy a test. Opätovné odoslanie rovnakej požiadavky s rovnakým kľúčom vráti prvú odpoveď a nič nové neuloží. SDK pridávajú k každému vytvoreniu jednu položku.
- **Tá istá správa dvakrát:** konektor laboratória zostavuje stabilný identifikátor na riadok zo správy, kódu, dátumu a hodnoty a preskakuje už importované riadky.
- **Dve cesty:** uložte si vlastné ID zdrojového systému pomocou `X-Anpheros-Origin-Id` (alebo v `identifier` na FHIR zdrojoch) a vyhľadajte ho pred zápisom hodnôt, ktoré sa môžu vrátiť inou cestou.

## Krok 6: Kontrola voči profilu

Pre laboratórne výsledky sa pred tým, ako sa na ne budete spoliehať, opýtajte platformy, ako sa zdroj zhoduje s profilom laboratórnej správy HL7 Europe:

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

Tento nenormalizovaný výsledok získa presný zoznam:

```json
{"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ždý problém zodpovedá jednému z vyššie uvedených krokov. Spustite `$validate` vo svojich integračných testoch s reálnymi vzorkami z každého zdroja.

## Krok 7: Zachovanie zdroja

Normalizácia mení spôsob zápisu hodnoty, nikdy nie jej pôvod. Pri každom zápise posielajte `author_type` (`device`, `import`, `practitioner`, `patient`) a `X-Anpheros-Source-System`. To lekárovi, audítorovi alebo modelu AI umožní rozlíšiť laboratórny výsledok od hodnoty zadanej doma. Pozrite si [Vysvetlenie pôvodu lekárskych údajov](https://developers.anpheros.com/sk/guides/medical-data-provenance).

## Kontrolný zoznam

- [ ] Každý zdroj má mapovanie svojich názvov na LOINC / ATC / ICD-10, uložené vo vašej integrácii
- [ ] Nejednoznačné názvy zostávajú nemapované a sú hlásené, nikdy sa nehádajú
- [ ] Jednotky UCUM, zodpovedajúce kódu; žiadna tichá konverzia
- [ ] Dátumy ISO 8601, s časovými zónami tam, kde na čase záleží
- [ ] Referenčné rozsahy uchované s laboratórnymi hodnotami
- [ ] Pôvodné znenie zachované (`code.text`)
- [ ] Idempotentné kľúče alebo zdrojové ID pri každom zápise
- [ ] `author_type` a zdrojový systém pri každom zápise
- [ ] `$validate` v testoch pre laboratórne výsledky

## Často kladené otázky

### Čo je normalizácia lekárskych údajov?
Konverzia zdravotných údajov z rôznych zdrojov do jednej štandardnej formy: zdieľané kódy (LOINC pre testy a merania, ICD-10 pre diagnózy, ATC pre lieky), jednotky UCUM, dátumy ISO, referenčné rozsahy a zaznamenaný zdroj, aby bolo možné porovnávať, kombinovať a vymieňať hodnoty z rôznych systémov.

### Mám konvertovať všetky hodnoty na jednu jednotku?
Ukladajte jednotku, v ktorej zdroj meral, pokiaľ je to platná jednotka UCUM zodpovedajúca kódu, a konvertujte pri zobrazovaní alebo analýze. Týmto spôsobom zostáva každá uložená hodnota sledovateľná k pôvodnej správe.

### Môže byť normalizácia plne automatická?
Vo väčšine prípadov. Kódy vo zdroji, známe názvy a dobre formované jednotky je možné mapovať automaticky. Nejednoznačné názvy a neznáme lokálne kódy si vyžadujú ľudské rozhodnutie raz na zdroj, po ktorom je mapovanie automatické.

## Súvisiace

- [FHIR kódové systémy](https://developers.anpheros.com/sk/guides/fhir-code-systems)
- [Ako importovať laboratórne výsledky do FHIR záznamu](https://developers.anpheros.com/sk/guides/import-lab-results-fhir)
- [Vysvetlenie pôvodu lekárskych údajov](https://developers.anpheros.com/sk/guides/medical-data-provenance)
- [Interoperabilita zdravotníckych údajov](https://developers.anpheros.com/sk/guides/interoperability)
- [API pre lekárske údaje](https://developers.anpheros.com/sk/guides/medical-data-api)
