# Orvosi nyilvántartások tárolása FHIR R4 segítségével

> Oktatóanyag: hozzon létre egy Beteget, egy vérnyomás-megfigyelést (Observation) és egy Állapotot (Condition), használjon tranzakciót, keressen, frissítsen előzménnyel és olvassa el a származtatást (provenance) — minden kérés curl-lel és a valós válaszával, az ingyenes sandbox-ban.

Source: https://developers.anpheros.com/hu/guides/store-medical-records-fhir

Ez az oktatóanyag egy kis orvosi nyilvántartást tárol HL7 FHIR R4 erőforrásként: egy `Patient`, egy vérnyomás `Observation` és egy diagnózis mint `Condition`, majd egy beteget és egy mérést együtt egyetlen tranzakcióban. Keresi ezeket, frissíti a diagnózist az előző verzió elvesztése nélkül, és elolvassa, ki mit írt. Minden kérés egyszerű `curl` az ingyenes Anpheros sandbox ellen, és minden megjelenített válasz az, amit az API visszaad.

Ha új a FHIR-ben, olvassa el először a [FHIR platform](https://developers.anpheros.com/hu/guides/fhir) oldalt a koncepciók megértéséhez. Ez az oldal a gyakorlati rész.

## A három erőforrás, amellyel a legtöbb rekord kezdődik

| Erőforrás | Mit tartalmaz | Kódolva |
|---|---|---|
| `Patient` | kire vonatkozik a rekord: név, születési dátum, nem, azonosítók más rendszerekből | az Ön azonosító rendszerei |
| `Observation` | bármi, amit mértek vagy jelentettek: vitális jelek, laboreredmények, súly, tünetek pontszáma | LOINC, UCUM egységek |
| `Condition` | egy diagnózis vagy egészségügyi probléma, annak időbeli státuszával | ICD-10 (SNOMED CT licencjelző mögött) |

A gyógyszerek (`MedicationStatement`), allergiák (`AllergyIntolerance`), immunizálások és dokumentumok ugyanazt a mintát követik; a [26 támogatott erőforrástípus](https://developers.anpheros.com/hu/guides/fhir) a képességnyilatkozat sorolja fel a `/fhir/R4/metadata` címen.

## Kezdés előtt

Szerezzen be egy sandbox kulcsot (`sk_test_…`) a [platform.anpheros.com/dashboard](https://platform.anpheros.com/dashboard/) oldalon a **Get a sandbox key** gombbal. Az itt létrehozott adatok nem valós betegek adatai, és nem láthatók más projektek számára.

```bash
export BASE=https://platform.anpheros.com/fhir/R4
export KEY=sk_test_…
```

## 1. lépés: Beteg létrehozása

```bash
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`, a szerver által hozzárendelt azonosítóval és verzióval:

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

Tartsa meg saját azonosítóit a `identifier`-ban egy általad vezérelt `system`-tal (itt egy klinika nyilvántartási száma), így mindig megtalálhatja a beteget a `GET $BASE/Patient?identifier=https://clinic.example/mrn|MRN-10442` segítségével. A FHIR `id` a platform azonosítója, és specifikus a projektedre: egy másik projekt ugyanazt a személyt más azonosítóval látja.

```bash
export PID=d09e3942-ed86-4458-b099-fa674ab21b84
```

## 2. lépés: Mérési eredmény tárolása megfigyelésként (Observation)

A vérnyomás egy olyan megfigyelés, amely két komponensből áll: szisztolés és diasztolés, mindkettőnek saját LOINC kódja van. Mondja meg, ki mérte: itt egy otthoni eszköz.

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

A válasz a tárolt erőforrás, amely tartalmazza a `id` és a `meta.versionId: "1"`. Három részlet számít egy használható rekord szempontjából:

- **Kódok, nem címkék.** A `85354-9` minden FHIR rendszerben "vérnyomás panel"-t jelent; egy szabad szöveges "BP" nem. Keresse meg a kódokat a `GET /v1/terminology/loinc?q=blood pressure` segítségével ([FHIR kódrendszerek](https://developers.anpheros.com/hu/guides/fhir-code-systems)).
- **UCUM egységek** (`mm[Hg]`, `kg`, `mg/dL`) a `valueQuantity.code`-ben, így az értékek összehasonlíthatók és konvertálhatók.
- **`Idempotency-Key`.** Időtúllépés utáni újrapróbálkozás az első választ adja vissza a leolvasás kétszeri tárolása helyett.

A laboreredmények ugyanazok az erőforrások, `category` `laboratory` és általában egy `referenceRange`. A teljes laborjelentések behozatalához lásd: [Laboreredmények importálása FHIR rekordba](https://developers.anpheros.com/hu/guides/import-lab-results-fhir).

## 3. lépés: Diagnózis rögzítése Conditionként

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

A `clinicalStatus` (aktív, feloldott, remisszióban) és a `verificationStatus` (megerősített, ideiglenes) szándékosan külön vannak kezelve: a gyanított diagnózis nem ugyanaz, mint a megerősített, és a feloldott probléma továbbra is a kórtörténet része.

## 4. lépés: Kapcsolódó erőforrások létrehozása egy tranzakcióban

Amikor egy páciens és az első mérése együtt érkezik, például egy klinikai rendszerből, küldje el őket egy `transaction` Bundle-ként. Vagy minden tárolódik, vagy semmi. Az új erőforrások közötti hivatkozások ideiglenes `urn:uuid:` azonosítókat használnak, amelyeket a szerver lecserél:

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

A `transaction-response` minden erőforráshoz tartalmaz egy bejegyzést, benne a `"status": "201 Created"`-vel, annak `location`-vel és a tárolt erőforrással. Az Observation `subject`-je most már a valós `Patient/fad3665a-…`-re mutat.

## 5. lépés: keresés

```bash
curl "$BASE/Observation?patient=$PID&code=http://loinc.org|85354-9&date=ge2026-10-01&_sort=-date" \
     -H "Authorization: Bearer $KEY"
```

Egy `searchset` Bundle-t kap, amely `total` és a hozzá illeszkedő erőforrásokat tartalmazza, a legújabbak elöl. Más gyakran használt keresések: `Condition?patient=$PID&clinical-status=active`, `Observation?patient=$PID&category=laboratory` és `Patient/$PID/$everything` a teljes rekordhoz.

## 6. lépés: frissítés előzmények elvesztése nélkül

A magas vérnyomás megszűnik. Módosítsa az állapotot és adja hozzá a befejezési dátumot, és használja a `If-Match` azonosítót az olvasott verzióval, hogy soha ne írjon felül mások módosításait:

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

a `200 OK` a `ETag: W/"2"` segítségével. Ha egy másik írási művelet megelőzte, akkor `412` hibát kap, és újra kell olvasnia. A korábbi verzió továbbra is ott lesz:

```bash
curl "$BASE/Condition/$CID/_history" -H "Authorization: Bearer $KEY"
```

mindkét verziót visszaadja: `versionId` 2 (`resolved`) és 1 (`active`). A `GET $BASE/Condition/$CID/_history/1` az előzőt olvassa. Egy rekordban semmi sem íródik felül csendben.

## 7. lépés: Lásd, ki mit írt

Minden írás létrehoz egy `Provenance` erőforrást. A vérnyomásméréshez:

```bash
curl "$BASE/Provenance?target=Observation/$OBS" -H "Authorization: Bearer $KEY"
```

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

Az általad küldött szerző típusa (`device`) rögzítésre kerül a projekttel és a szervezettel együtt. Küldj `X-Anpheros-Author-Ref: Practitioner/<id>`-ot, hogy megnevezd az írás mögötti klinikust.

## 8. lépés: A rekord összefoglalóként

```bash
curl "$BASE/Patient/$PID/\$summary" -H "Authorization: Bearer $KEY"
```

egy Nemzetközi Betegösszefoglalót (International Patient Summary) ad vissza: egy `document` Bundle-t, amely egy `Composition`-val kezdődik, és olyan szakaszokat tartalmaz, mint a Problémák, Gyógyszerek, Allergiák és Életjelek, a fenti erőforrásokból felépítve. Ez az a formátum, amelyet átadhat egy másik rendszernek, vagy kinyomtathat egy orvosnak ([FHIR platform](https://developers.anpheros.com/hu/guides/fhir)).

## Preferálja a JSON-t FHIR nélkül?

Ugyanazok az adatok elérhetők egy egyszerűbb REST nézeten keresztül is, `/v1`, ugyanazokkal az azonosítókkal: a `POST /v1/patients/{id}/observations` a `{"code": "85354-9", "category": "vital-signs", "effective_at": "…", "components": […]}`-et veszi igénybe, és ugyanazt a FHIR Observation-t tárolja. Használja azt, amelyik illeszkedik a kódjához. Lásd: [Medical data API](https://developers.anpheros.com/hu/guides/medical-data-api) és az [SDK-k](https://developers.anpheros.com/hu/guides/sdks).

## Gyakran ismételt kérdések

### Mi a legjobb módja az orvosi nyilvántartások tárolására?
Kódolt, verziózott erőforrásokként, minden egyes bejegyzés írójának rögzítésével. Az HL7 FHIR R4 megadja a struktúrát (Patient, Observation, Condition és mások), szabványos kódrendszereket, mint például a LOINC és az ICD-10, valamint a történetet; egy FHIR backend pedig hozzáadja a keresést, a hozzájárulást és a származást.

### Szükségem van FHIR szerverre a FHIR használatához?
Szüksége van egy helyre, amely tárolja és keresi a FHIR erőforrásokat, és érvényesíti, hogy ki olvashatja őket. Futtathat saját maga egy nyílt forráskódú FHIR szervert, vagy használhat egy felügyeltet, mint például az Anpheros; a [Hogyan hasonlítható össze az Anpheros más FHIR szerverekkel](https://developers.anpheros.com/hu/guides/fhir-server-comparison) mérlegeli a lehetőségeket, a [FHIR vs. egyedi orvosi adatbázis](https://developers.anpheros.com/hu/guides/fhir-vs-custom-database) pedig a saját séma felépítését tárgyalja.

### Hogyan tárolhatok vérnyomást FHIR-ben?
Egy `Observation`-ként a LOINC `85354-9` kóddal és két `component` bejegyzéssel: szisztolés `8480-6` és diasztolés `8462-4`, mindegyik egy `valueQuantity`-tel `mm[Hg]`-ben.

### Megváltoztathatok egy tárolt erőforrást?
Igen, `PUT` és `If-Match` segítségével. Minden változás új verziót hoz létre; a korábbi verziók továbbra is olvashatók a `_history`-en keresztül, és a Provenance rögzíti, hogy ki végezte el az egyes változtatásokat. A törlések lágyak és megőrzik a történetet.

## Kapcsolódó

- [FHIR platform](https://developers.anpheros.com/hu/guides/fhir): a fogalmak, erőforrás-típusok és műveletek
- [FHIR kódrendszerek](https://developers.anpheros.com/hu/guides/fhir-code-systems): LOINC, ICD-10, ATC, UCUM
- [Laboreredmények importálása FHIR rekordba](https://developers.anpheros.com/hu/guides/import-lab-results-fhir)
- [Medical data API](https://developers.anpheros.com/hu/guides/medical-data-api): az adatok egyszerűbb REST nézete
- [Ingyenes FHIR adatbázis és sandbox](https://developers.anpheros.com/hu/guides/free-fhir-database)
