# Klinikai rendszerek integrálása FHIR backenddel

> Tutorial: Klinikai EMR csatlakoztatása páciensek FHIR R4 rekordjaihoz — orvosok címtára, rekord számmal való egyezés, egy látogatás mint egy tranzakció az orvossal mint szerzővel, laborjelentések, más szolgáltatók adatai és webhookok.

Source: https://developers.anpheros.com/hu/guides/integrate-clinic-systems-fhir

**Ez a tutorial egy klinika szoftverét (EMR, praxismenedzsment rendszer vagy foglalási eszköz) csatlakoztatja a páciensek HL7 FHIR R4 rekordjaihoz az Anpherosban: a klinika és orvosai regisztrálva vannak a címtárban, a páciensek a klinika rekord száma alapján kerülnek egyeztetésre, egy látogatás egy tranzakcióként kerül rögzítésre az orvossal mint szerzővel, és a klinika értesül a más szolgáltatók által hozzáadott adatokról.** Minden kérés `curl` az ingyenes sandbox ellen történik, és a válaszok a platform sajátjai.

Az integráció a klinika szerverén fut, egy projekt API kulccsal a klinika által regisztrált páciensek számára, és azok számára, akiknek már van Anpheros rekordjuk, egy általuk jóváhagyott OAuth engedéllyel.

## Mi mihez rendelődik

| A klinikai rendszerben | FHIR R4-ben |
|---|---|
| a klinika, annak osztályai | `Organization` |
| orvos vagy nővér | `Practitioner` |
| az adott klinikán dolgozó személy, szakterülettel | `PractitionerRole` |
| a páciens aktája és annak száma | `Patient` a klinika rendszerében lévő `identifier`-mal |
| egy vizit | `Encounter` |
| életjelek, a vizit során mért eredmények | `Observation` a `Encounter`-hoz kapcsolva |
| egy diagnózis | `Condition` (ICD-10), `verificationStatus` ideiglenes vagy megerősített státusszal |
| egy recept, jelenlegi kezelés | `MedicationStatement` (ATC) |
| egy levél, zárójelentés, lelet | `DocumentReference` az aktához |
| laboreredmények | a [lab csatlakozó](https://developers.anpheros.com/hu/guides/lab-connector) segítségével, `Observation`-ként |

## 1. lépés: A klinika és orvosai regisztrálása

A könyvtár erőforrások nem tartalmaznak beteget. Az azonos környezetben lévő többi projekt olvashatja őket, így a beteg más szolgáltatói látják, ki mit írt, de csak a saját projektje módosíthatja azokat.

```bash
export BASE=https://platform.anpheros.com/fhir/R4
export KEY=sk_test_…
H=(-H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json")

curl -X POST $BASE/Organization "${H[@]}" -d '{"resourceType": "Organization", "active": true, "name": "Clinica Cardio Nord",
  "identifier": [{"system": "https://clinic.example/org", "value": "CCN"}]}'

curl -X POST $BASE/Practitioner "${H[@]}" -d '{"resourceType": "Practitioner", "active": true,
  "name": [{"family": "Popescu", "given": ["Ana"], "prefix": ["Dr."]}]}'

curl -X POST $BASE/PractitionerRole "${H[@]}" -d '{"resourceType": "PractitionerRole", "active": true,
  "practitioner": {"reference": "Practitioner/'$PRACTITIONER'"},
  "organization": {"reference": "Organization/'$ORG'"},
  "code": [{"text": "Cardiologist"}]}'
```

Tartsa meg a visszaadott azonosítókat a személyzeti nyilvántartásai mellett. Amikor valaki távozik, állítsa a `PractitionerRole` értékét `"active": false`-ra; korábbi bejegyzései megőrzik a nevüket, és nem tudnak többé a rendszerén keresztül eljárni.

## 2. lépés: páciensek egyeztetése

A klinika által regisztrált páciensek esetében hozzon létre egy `Patient` rekordot a klinika nyilvántartási számával mint azonosítóval:

```bash
curl -X POST $BASE/Patient "${H[@]}" -d '{"resourceType": "Patient",
  "identifier": [{"system": "https://clinic.example/mrn", "value": "MRN-20981"}],
  "name": [{"family": "Dinu", "given": ["Andrei"]}], "gender": "male", "birthDate": "1968-11-05"}'
```

Ettől kezdve a pácienst ezen a számon keresztül keresse, soha név és születési dátum alapján:

```bash
curl "$BASE/Patient?identifier=https://clinic.example/mrn|MRN-20981" -H "Authorization: Bearer $KEY"
```

**Ha az illetőnek már van Anpheros rekordja**, a saját alkalmazásából vagy egy másik szolgáltatótól, a klinika nem hoz létre másodikat. Hozzáférést kér az illetőtől OAuth segítségével, egy táblagépen a recepción, vagy a látogatás előtt küldött linken keresztül, egy **bizalmas** alkalmazás használatával (a klinika szervere tartja titokban a titkot). Az illető kiválasztja a rekordját és azt, hogy mennyi ideig férhet hozzá a klinika. A lépések a [Hogyan implementálható a páciens hozzájárulás SMART on FHIR segítségével](https://developers.anpheros.com/hu/guides/smart-on-fhir-backend) dokumentumban találhatók; a token `patient` mezője az az azonosító, amelyet a fájljával együtt tárolnia kell.

## 3. lépés: Látogatás írása egy tranzakcióként

Egy látogatás több, összetartozó erőforrást hoz létre. Küldje el őket egy `transaction`-ként, hogy egyszerre vagy egyáltalán ne legyenek tárolva, és adja meg, ki dolgozik: a `X-Anpheros-Acting-As` megnevezi az orvos szerepét. Ez lesz a szerző a Provenance-ben, bekerül a hozzáférési naplóba, és név szerint megjelenik a betegnek.

```bash
curl -X POST $BASE "${H[@]}" \
  -H "X-Anpheros-Acting-As: PractitionerRole/$ROLE" \
  -H "X-Anpheros-Author-Type: practitioner" \
  -H "X-Anpheros-Source-System: ccn-emr" -d '{
  "resourceType": "Bundle", "type": "transaction",
  "entry": [
    {"fullUrl": "urn:uuid:aa000000-0000-4000-8000-000000000001",
     "resource": {"resourceType": "Encounter", "status": "finished",
       "class": {"system": "http://terminology.hl7.org/CodeSystem/v3-ActCode", "code": "AMB", "display": "ambulatory"},
       "subject": {"reference": "Patient/'$PID'"},
       "serviceProvider": {"reference": "Organization/'$ORG'"},
       "participant": [{"individual": {"reference": "PractitionerRole/'$ROLE'"}}],
       "period": {"start": "2026-10-09T10:00:00Z", "end": "2026-10-09T10:30:00Z"}},
     "request": {"method": "POST", "url": "Encounter"}},
    {"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": "8867-4", "display": "Heart rate"}]},
       "subject": {"reference": "Patient/'$PID'"},
       "encounter": {"reference": "urn:uuid:aa000000-0000-4000-8000-000000000001"},
       "effectiveDateTime": "2026-10-09T10:10:00Z",
       "valueQuantity": {"value": 92, "unit": "/min", "system": "http://unitsofmeasure.org", "code": "/min"}},
     "request": {"method": "POST", "url": "Observation"}},
    {"resource": {"resourceType": "Condition",
       "subject": {"reference": "Patient/'$PID'"},
       "encounter": {"reference": "urn:uuid:aa000000-0000-4000-8000-000000000001"},
       "clinicalStatus": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/condition-clinical", "code": "active"}]},
       "verificationStatus": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/condition-ver-status", "code": "provisional"}]},
       "code": {"coding": [{"system": "http://hl7.org/fhir/sid/icd-10", "code": "I48.0", "display": "Paroxysmal atrial fibrillation"}]}},
     "request": {"method": "POST", "url": "Condition"}}
  ]}'
```

A `transaction-response` tartalmazza a `201 Created`-t az Encounter, az Observation és a Condition számára. Az Observation és a Condition most a valódi `Encounter/0ca25459-…`-ra mutat. Mindegyik Provenance-e megnevezi az orvos szerepét, a klinikát és a forrásrendszert:

```json
"agent": [{"who": {"reference": "PractitionerRole/e6d8c227-…",
                   "identifier": {"system": "https://anpheros.com/fhir/CodeSystem/author-type", "value": "practitioner"}},
           "onBehalfOf": {"reference": "Organization/c3a56a4b-…", "display": "Clinica Cardio Nord"}}],
"entity": [{"role": "source", "what": {"identifier": {"system": "ccn-emr"}}}]
```

A diagnózis `provisional`, amíg meg nem erősítik. Később frissítse `confirmed`-re, és a történet mindkettőt megőrzi. Az egyes mezők jelentését a [Medical data provenance explained](https://developers.anpheros.com/hu/guides/medical-data-provenance) magyarázza el.

## 4. lépés: Laboratóriumi eredmények és dokumentumok

A klinika saját laboratóriumából származó eredmények, vagy a páciens által hozott jelentések a laboratóriumi összekötőn keresztül, jelentésenként egy kérésben kerülnek feldolgozásra:

```bash
curl -X POST "https://platform.anpheros.com/v1/patients/$PID/labs/import" -H "Authorization: Bearer $KEY" \
     -H "Content-Type: x-application/hl7-v2+er7" -H "X-Anpheros-Source-System: ccn-lab" --data-binary @oru.hl7
```

Levelek és zárójelentések dokumentumok: hozzon létre egy `DocumentReference`-t a `/v1/patients/{id}/documents`-en keresztül, és töltse fel a PDF-et. Az eredeti fájl soha nem módosul, és az abból kinyert értékek arra mutatnak vissza. Lásd: [Laboratóriumi eredmények importálása FHIR rekordba](https://developers.anpheros.com/hu/guides/import-lab-results-fhir) és [Medical data API](https://developers.anpheros.com/hu/guides/medical-data-api).

## 5. lépés: Olvassa el, mit írtak más szolgáltatók, és maradjon a saját hatáskörében

A páciens beleegyezésével a klinika a hatáskörébe tartozó teljes rekordot elolvassa, beleértve azt is, amit más klinikák, laboratóriumok és a páciens adott hozzá. Csak azt változtathatja meg, amit maga írt. Egy másik szervezet erőforrásának frissítése vagy törlése `403`-re válaszol, és az eredeti változat változatlan marad. Egy másik szolgáltató által írt dolog javításához írjon saját erőforrást (például egy új `Condition`-ot az Ön értékelésével), és hagyja, hogy a rekord mindkettőt mutassa, mindegyiket a saját szerzőjével.

Egy látogatás előtt a `GET $BASE/Patient/$PID/$summary` a rekord Nemzetközi Betegösszefoglalóját adja meg: problémák, gyógyszerek, allergiák és a közelmúltbeli életjelek, minden forrásból.

## 6. lépés: Értesülj az új adatokról

Regisztrálj egy webhookot egyszer a klinika projektjéhez:

```bash
curl -X POST https://platform.anpheros.com/v1/webhooks -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
     -d '{"url": "https://ccn.example/anpheros/hook", "events": ["resource.created", "resource.updated", "consent.revoked"]}'
```

Amikor egy másik projekt ír egy olyan rekordba, amelyhez a klinikádnak hozzáférése van, az esemény ezt jelzi a `data.external: true` és a forrás megadásával, így az EMR-ed "új eredmények egy másik laboratóriumból" üzenetet jeleníthet meg anélkül, hogy lekérdezné az adatokat. A `consent.revoked` esemény azt jelenti, hogy a személy visszavonta a klinika hozzáférését: állítsd le az adott rekord szinkronizálását. Aláírások, újrapróbálkozások és terhelések a [Webhooks](https://developers.anpheros.com/hu/guides/webhooks) részben találhatók.

## Mit lát a páciens

A páciens a vizitet, a pulzusszámot és az ideiglenes diagnózist látja a rekordjában, mindegyiket Dr. Ana Popescu jelölte meg a Clinica Cardio Nord-nál hozzáadottként. A kapcsolataiban a klinika alkalmazása felsorolja minden hozzáférést, név szerint, amikor egy gyakorló orvos járt el. Ez az átláthatóság teszi a pácienseket hajlandóvá arra, hogy hozzáférést biztosítsanak a következő klinikának.

## Élőre lépés ellenőrzőlista

- [ ] Szervezet, gyakorlók és gyakorlói szerepkörök regisztrálva; kilépők inaktívra állítva
- [ ] Betegek a klinika azonosítójával egyeznek, soha névvel nem
- [ ] Meglévő rekordok OAuth hozzájárulással érhetők el, nem duplikálva
- [ ] Minden klinikai személyzet kérése `X-Anpheros-Acting-As`-et tartalmaz
- [ ] Látogatások tranzakcióként írva; diagnózisok megfelelő ellenőrzési státusszal
- [ ] Forrásrendszer beállítva minden írásnál; laborjelentések a csatlakozón keresztül
- [ ] Webhook végpont aláírásokat ellenőriz; `consent.revoked` kezelve
- [ ] Produkciós projekt aláírt DPA-val (`sk_live_…` kulcsok); lásd [Árazás](https://developers.anpheros.com/hu/guides/pricing)

## Gyakran ismételt kérdések

### Van az Anpherosnak kész csatlakozója az EMR-emhez?
Nem. Nincsenek kész csatlakozók specifikus EMR-ekhez vagy laboratóriumi rendszerekhez; az integráció a FHIR R4 és a REST API-k ellen épül, általában egy kis szolgáltatásként az EMR mellett. A HL7 v2 laborüzenetek változatlanul elfogadásra kerülnek.

### Dolgozhat egy orvos két klinikán?
Igen. Egy `Practitioner` lehet `PractitionerRole` minden szervezetnél. A `X-Anpheros-Acting-As`-ben megnevezett szerepkör határozza meg, hogy melyik klinikára kerül rögzítésre minden írás.

### Mi történik, amikor a páciens visszavonja a klinika hozzáférését?
A klinika hívásai erre a rekordra `401`-tal válaszolnak, és egy `consent.revoked` webhook kerül elküldésre. Amit a klinika írt, az a páciens rekordjában marad a származásával együtt; a klinika egyszerűen már nem tudja olvasni vagy módosítani azt.

## Kapcsolódó

- [Egészségügyi integrációk](https://developers.anpheros.com/hu/guides/healthcare-integrations): minden integrációs minta áttekintése
- [Az orvosi adatok eredetének magyarázata](https://developers.anpheros.com/hu/guides/medical-data-provenance)
- [Beteg hozzájárulás implementálása SMART on FHIR használatával](https://developers.anpheros.com/hu/guides/smart-on-fhir-backend)
- [Laboratóriumi eredmények importálása FHIR rekordba](https://developers.anpheros.com/hu/guides/import-lab-results-fhir)
- [Egészségügyi adatok interoperabilitása](https://developers.anpheros.com/hu/guides/interoperability)
