Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Jak ukládat zdravotní záznamy pomocí FHIR R4
Návod: vytvořte Pacienta, Observation krevního tlaku a Stav, použijte transakci, vyhledejte, aktualizujte s historií a čtěte původ dat — každý požadavek s curl a skutečnou odpovědí, na bezplatném sandboxu.
Tento návod ukládá malý lékařský záznam jako zdroje HL7 FHIR R4: Patient, záznam o krevním tlaku Observation a diagnózu jako Condition, poté pacienta a měření dohromady v jedné transakci. Vyhledá je, aktualizuje diagnózu bez ztráty předchozí verze a přečte si, kdo co napsal. Každý požadavek je prostý curl proti bezplatnému sandboxu Anpheros a každá zobrazená odpověď je to, co API vrátí.
Pokud jste noví ve FHIR, nejprve si přečtěte FHIR platform pro koncepty. Tato stránka je praktickou částí.
Tři zdroje, kterými většina záznamů začíná
| Zdroj | Co obsahuje | Kódováno pomocí |
|---|---|---|
Patient |
o kom záznam je: jméno, datum narození, pohlaví, identifikátory z jiných systémů | vaše identifikační systémy |
Observation |
cokoli měřeného nebo hlášeného: vitální funkce, laboratorní výsledky, váha, skóre symptomů | LOINC, jednotky UCUM |
Condition |
diagnóza nebo zdravotní problém s jeho stavem v průběhu času | ICD-10 (SNOMED CT za licenční vlajkou) |
Léky (MedicationStatement), alergie (AllergyIntolerance), imunizace a dokumenty následují stejný vzor; 26 podporovaných typů zdrojů je uvedeno ve výpisu schopností na /fhir/R4/metadata.
Než začnete
Získejte klíč pro sandbox (sk_test_…) na adrese platform.anpheros.com/dashboard pomocí možnosti Get a sandbox key. Nic, co zde vytvoříte, nejsou skutečná pacientská data a nic není viditelné pro jiné projekty.
export BASE=https://platform.anpheros.com/fhir/R4
export KEY=sk_test_…
Krok 1: Vytvoření pacienta
curl -X POST "$BASE/Patient" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" -d '{
"resourceType": "Patient",
"identifier": [{"system": "https://clinic.example/mrn", "value": "MRN-10442"}],
"name": [{"family": "Marin", "given": ["Ioana"]}],
"gender": "female",
"birthDate": "1979-04-12"
}'
201 Created, s ID a verzí, které server přiřadil:
{"resourceType": "Patient",
"identifier": [{"system": "https://clinic.example/mrn", "value": "MRN-10442"}],
"name": [{"family": "Marin", "given": ["Ioana"]}], "gender": "female", "birthDate": "1979-04-12",
"id": "d09e3942-ed86-4458-b099-fa674ab21b84",
"meta": {"versionId": "1", "lastUpdated": "2026-10-12T20:16:51.043Z"}}
Svá vlastní ID si ponechte v identifier s system, které máte pod kontrolou (zde číslo záznamu kliniky), abyste pacienta mohli vždy znovu najít pomocí GET $BASE/Patient?identifier=https://clinic.example/mrn|MRN-10442. FHIR id je platformy a je specifické pro váš projekt: jiný projekt vidí stejnou osobu pod jiným ID.
export PID=d09e3942-ed86-4458-b099-fa674ab21b84
Krok 2: Uložení měření jako Observation
Krevní tlak je jedno pozorování se dvěma složkami, systolickým a diastolickým, z nichž každá má svůj vlastní LOINC kód. Uveďte, kdo měření provedl: zde domácí zařízení.
curl -X POST "$BASE/Observation" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" \
-H "X-Anpheros-Author-Type: device" -H "Idempotency-Key: bp-2026-10-10-0830" -d '{
"resourceType": "Observation",
"status": "final",
"category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "vital-signs"}]}],
"code": {"coding": [{"system": "http://loinc.org", "code": "85354-9", "display": "Blood pressure panel"}]},
"subject": {"reference": "Patient/'$PID'"},
"effectiveDateTime": "2026-10-10T08:30:00Z",
"component": [
{"code": {"coding": [{"system": "http://loinc.org", "code": "8480-6"}]},
"valueQuantity": {"value": 138, "unit": "mmHg", "system": "http://unitsofmeasure.org", "code": "mm[Hg]"}},
{"code": {"coding": [{"system": "http://loinc.org", "code": "8462-4"}]},
"valueQuantity": {"value": 88, "unit": "mmHg", "system": "http://unitsofmeasure.org", "code": "mm[Hg]"}}
]
}'
Odpovědí je uložený zdroj s id a meta.versionId: "1". Pro použitelný záznam jsou důležité tři detaily:
- Kódy, nikoli popisky.
85354-9znamená "panel krevního tlaku" v každém FHIR systému; text "BP" nikoli. Kódy vyhledejte pomocíGET /v1/terminology/loinc?q=blood pressure(FHIR code systems). - UCUM jednotky (
mm[Hg],kg,mg/dL) vvalueQuantity.code, aby bylo možné hodnoty porovnávat a převádět. Idempotency-Key. Opakování po vypršení časového limitu vrátí první odpověď namísto dvojího uložení měření.
Laboratorní výsledky jsou stejný zdroj s category laboratory a obvykle referenceRange. Chcete-li importovat celé laboratorní zprávy, viz Jak importovat laboratorní výsledky do FHIR záznamu.
Krok 3: Záznam diagnózy jako Stav (Condition)
curl -X POST "$BASE/Condition" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" \
-H "X-Anpheros-Author-Type: practitioner" -d '{
"resourceType": "Condition",
"subject": {"reference": "Patient/'$PID'"},
"clinicalStatus": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/condition-clinical", "code": "active"}]},
"verificationStatus": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/condition-ver-status", "code": "confirmed"}]},
"code": {"coding": [{"system": "http://hl7.org/fhir/sid/icd-10", "code": "I10", "display": "Essential (primary) hypertension"}]},
"onsetDateTime": "2026-03-02"
}'
clinicalStatus (active, resolved, in remission) a verificationStatus (confirmed, provisional) jsou záměrně oddělené: podezřelá diagnóza není totéž co potvrzená a vyřešený problém je stále součástí historie.
Krok 4: Vytvoření souvisejících zdrojů v jedné transakci
Když pacient a jeho první měření dorazí společně, například z klinického systému, odešlete je jako transaction Bundle. Buď se uloží vše, nebo nic. Odkazy mezi novými zdroji používají dočasná urn:uuid: ID, která server nahradí:
curl -X POST "$BASE" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" -d '{
"resourceType": "Bundle", "type": "transaction",
"entry": [
{"fullUrl": "urn:uuid:9f1c0d1e-0000-4000-8000-000000000001",
"resource": {"resourceType": "Patient", "name": [{"family": "Stan", "given": ["Mihai"]}], "gender": "male", "birthDate": "1990-02-01"},
"request": {"method": "POST", "url": "Patient"}},
{"resource": {"resourceType": "Observation", "status": "final",
"category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "vital-signs"}]}],
"code": {"coding": [{"system": "http://loinc.org", "code": "29463-7", "display": "Body weight"}]},
"subject": {"reference": "urn:uuid:9f1c0d1e-0000-4000-8000-000000000001"},
"effectiveDateTime": "2026-10-10",
"valueQuantity": {"value": 82.4, "unit": "kg", "system": "http://unitsofmeasure.org", "code": "kg"}},
"request": {"method": "POST", "url": "Observation"}}
]
}'
transaction-response má jeden záznam na zdroj, s "status": "201 Created", jeho location a uloženým zdrojem. Pole subject v Observation nyní odkazuje na skutečný Patient/fad3665a-….
Krok 5: vyhledávání
curl "$BASE/Observation?patient=$PID&code=http://loinc.org|85354-9&date=ge2026-10-01&_sort=-date" \
-H "Authorization: Bearer $KEY"
Získáte searchset Bundle s total a odpovídajícími zdroji, nejnovější první. Další často používaná vyhledávání: Condition?patient=$PID&clinical-status=active, Observation?patient=$PID&category=laboratory a Patient/$PID/$everything pro celý záznam.
Krok 6: aktualizace bez ztráty historie
Hypertenze se vyřeší. Změňte stav a přidejte datum ukončení a použijte If-Match s verzí, kterou jste přečetli, abyste nikdy nepřepsali něčí jinou změnu:
curl -X PUT "$BASE/Condition/$CID" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" \
-H 'If-Match: W/"1"' -d '{ …the same Condition…, "clinicalStatus": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/condition-clinical", "code": "resolved"}]}, "abatementDateTime": "2026-10-11" }'
200 OK s ETag: W/"2". Pokud se tam mezitím zapsal jiný zápis, obdržíte 412 a znovu si přečtete. Starší verze je stále k dispozici:
curl "$BASE/Condition/$CID/_history" -H "Authorization: Bearer $KEY"
vrátí obě verze: versionId 2 (resolved) a 1 (active). GET $BASE/Condition/$CID/_history/1 přečte tu starou. V záznamu se nic nepřepisuje potichu.
Krok 7: Zobrazení autora zápisu
Každý zápis vytvoří Provenance zdroj. Pro záznam krevního tlaku:
curl "$BASE/Provenance?target=Observation/$OBS" -H "Authorization: Bearer $KEY"
{"resourceType": "Provenance",
"target": [{"reference": "Observation/d83d9075-…/_history/1"}],
"recorded": "2026-10-12T20:16:51.056000Z",
"activity": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/v3-DataOperation", "code": "CREATE"}]},
"agent": [{"type": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/provenance-participant-type", "code": "author"}]},
"who": {"identifier": {"system": "https://anpheros.com/fhir/CodeSystem/author-type", "value": "device"}, "display": "proj_…"},
"onBehalfOf": {"identifier": {"system": "https://anpheros.com/fhir/sid/organization", "value": "org_…"}, "display": "…"}}]}
Typ autora, který jste odeslali (device), je zaznamenán s projektem a organizací. Odešlete X-Anpheros-Author-Ref: Practitioner/<id> pro pojmenování klinického lékaře stojícího za zápisem.
Krok 8: Záznam jako souhrn
curl "$BASE/Patient/$PID/\$summary" -H "Authorization: Bearer $KEY"
vrací International Patient Summary: document Bundle, který začíná Composition a obsahuje sekce jako Problémy, Léky, Alergie a Životní funkce, sestavené z výše uvedených zdrojů. Toto je formát pro předání jinému systému nebo pro tisk pro lékaře (FHIR platform).
Preferujete JSON bez FHIR?
Stejná data jsou dostupná prostřednictvím jednoduššího REST pohledu, /v1, se stejnými ID: POST /v1/patients/{id}/observations bere {"code": "85354-9", "category": "vital-signs", "effective_at": "…", "components": […]} a ukládá stejné FHIR Observation. Použijte to, co se hodí vašemu kódu. Viz Medical data API a SDKs.
Často kladené dotazy
Jaký je nejlepší způsob ukládání zdravotnických záznamů?
Jako kódované, verzované zdroje s záznamem o tom, kdo je napsal. HL7 FHIR R4 vám poskytuje strukturu (Patient, Observation, Condition a další), standardní kódovací systémy jako LOINC a ICD-10 a historii; FHIR backend přidává vyhledávání, souhlas a původ navíc.
Potřebuji FHIR server k použití FHIR?
Potřebujete místo, které ukládá a prohledává FHIR zdroje a vynucuje, kdo je může číst. Můžete si spustit open-source FHIR server sami nebo použít spravovaný, jako je Anpheros; Jak si Anpheros stojí v porovnání s jinými FHIR servery zvažuje možnosti a FHIR vs. vlastní databáze zdravotnických záznamů pokrývá vytvoření vlastního schématu.
Jak ukládat krevní tlak ve FHIR?
Jako jedno Observation s kódem LOINC 85354-9 a dvě component položky: systolický 8480-6 a diastolický 8462-4, každý s valueQuantity v mm[Hg].
Mohu změnit uložený zdroj?
Ano, s PUT a If-Match. Každá změna vytvoří novou verzi; dřívější verze zůstávají čitelné prostřednictvím _history a Provenance zaznamenává, kdo provedl každou změnu. Smazání jsou měkká a zachovávají historii.
Související
- Platforma FHIR: koncepty, typy zdrojů a operace
- Kódovací systémy FHIR: LOINC, ICD-10, ATC, UCUM
- Jak importovat laboratorní výsledky do záznamu FHIR
- API pro lékařská data: jednodušší pohled REST na stejná data
- Bezplatná databáze a sandbox FHIR
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card