# Jak integrovat klinické systémy s FHIR backendem

> Návod: propojení klinického EMR se záznamy pacientů ve FHIR R4 — adresář lékařů, párování podle čísla záznamu, návštěva jako jedna transakce s lékařem jako autorem, laboratorní zprávy, data od jiných poskytovatelů a webhooks.

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

**Tento návod propojuje software kliniky (EMR, systém pro správu praxe nebo rezervační nástroj) se záznamy pacientů ve formátu HL7 FHIR R4 v Anpheros: klinika a její lékaři jsou registrováni v adresáři, pacienti jsou párováni podle čísla záznamu kliniky, návštěva je zaznamenána jako jedna transakce s lékařem uvedeným jako autor a klinika se dozví o datech, která přidávají jiní poskytovatelé.** Každý požadavek je `curl` proti bezplatnému sandboxu a odpovědi jsou vlastní platformy.

Integrace běží na serveru kliniky s API klíčem projektu pro pacienty, které klinika registruje, a pro lidi, kteří již mají záznam v Anpheros, s OAuth povolením, které schválí.

## Co se na co mapuje

| V klinickém systému | Ve FHIR R4 |
|---|---|
| klinika, její oddělení | `Organization` |
| lékař nebo sestra | `Practitioner` |
| tato osoba pracující na této klinice, se specializací | `PractitionerRole` |
| soubor pacienta a jeho číslo | `Patient` s `identifier` v systému kliniky |
| návštěva | `Encounter` |
| vitální funkce, výsledky měřené během návštěvy | `Observation` propojené s `Encounter` |
| diagnóza | `Condition` (ICD-10), s `verificationStatus` předběžná nebo potvrzená |
| předpis, současná léčba | `MedicationStatement` (ATC) |
| dopis, propouštěcí zpráva, sken | `DocumentReference` se souborem |
| laboratorní výsledky | [konektor laboratoře](https://developers.anpheros.com/cs/guides/lab-connector), do `Observation` |

## Krok 1: Registrace kliniky a jejích lékařů

Adresářové zdroje neobsahují pacienta. Jiné projekty ve stejném prostředí je mohou číst, takže ostatní poskytovatelé pacienta vidí, kdo co napsal, ale pouze váš projekt je může měnit.

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

Ponechte vrácená ID vedle záznamů vašeho personálu. Když někdo odejde, nastavte jeho `PractitionerRole` na `"active": false`; jeho minulé zápisy si ponechají jeho jméno a on již nemůže jednat prostřednictvím vašeho systému.

## Krok 2: párování pacientů

Pro pacienty, které klinika registruje, vytvořte `Patient` s číslem záznamu kliniky jako identifikátorem:

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

Od té chvíle vyhledávejte pacienta podle tohoto čísla, nikdy podle jména a data narození:

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

**Pokud osoba již má záznam v Anpherosu**, ze své vlastní aplikace nebo od jiného poskytovatele, klinika nevytváří druhý záznam. Požádá osobu o přístup pomocí OAuth, z tabletu u recepce nebo pomocí odkazu zaslaného před návštěvou, a to pomocí **důvěrné** aplikace (server kliniky uchovává tajemství). Osoba si vybere svůj záznam a dobu, po kterou k němu může klinika přistupovat. Kroky jsou popsány v [Jak implementovat souhlas pacienta pomocí SMART on FHIR](https://developers.anpheros.com/cs/guides/smart-on-fhir-backend); pole `patient` tokenu je ID, které se má uložit k vašemu souboru.

## Krok 3: Zápis návštěvy jako jedna transakce

Návštěva generuje několik zdrojů, které spolu souvisejí. Odešlete je v `transaction`, aby byly uloženy najednou, nebo vůbec, a uveďte, kdo pracuje: `X-Anpheros-Acting-As` pojmenovává roli lékaře. Stává se autorem v Provenance, zapisuje se do přístupového logu a zobrazuje se pacientovi jménem.

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

`transaction-response` má `201 Created` pro Encounter, Observation a Condition. Observation a Condition nyní odkazují na skutečný `Encounter/0ca25459-…`. Provenance každého z nich pojmenovává roli lékaře, kliniku a zdrojový systém:

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

Diagnóza je `provisional`, dokud není potvrzena. Aktualizujte ji na `confirmed` později a historie uchová obě. Co znamená každé pole, je vysvětleno v [Vysvětlení původu lékařských dat](https://developers.anpheros.com/cs/guides/medical-data-provenance).

## Krok 4: laboratorní výsledky a dokumenty

Výsledky z vlastní laboratoře kliniky nebo zprávy, které pacient přinese, procházejí přes laboratorní konektor v jedné žádosti na zprávu:

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

Dopisy a propouštěcí zprávy jsou dokumenty: vytvořte `DocumentReference` přes `/v1/patients/{id}/documents` a nahrajte PDF. Původní soubor se nikdy nemění a hodnoty z něj extrahované na něj odkazují. Viz [Jak importovat laboratorní výsledky do záznamu FHIR](https://developers.anpheros.com/cs/guides/import-lab-results-fhir) a [API pro lékařská data](https://developers.anpheros.com/cs/guides/medical-data-api).

## Krok 5: čtěte, co napsali ostatní poskytovatelé, a držte se svého

S pacientovým souhlasem klinika přečte celý záznam v rámci svých rozsahů, včetně toho, co přidaly jiné kliniky, laboratoře a pacient. Může změnit pouze to, co napsala sama. Aktualizace nebo smazání zdroje jiné organizace odpoví `403` a původní zůstane tak, jak byl. Chcete-li opravit něco, co napsal jiný poskytovatel, napište svůj vlastní zdroj (například nový `Condition` s vaším hodnocením) a nechte záznam zobrazit oba, každý s autorem.

Před návštěvou `GET $BASE/Patient/$PID/$summary` poskytne Mezinárodní souhrn pacienta ze záznamu: problémy, léky, alergie a nedávné vitální funkce, z každého zdroje.

## Krok 6: Informace o nových datech

Jednou pro projekt kliniky zaregistrujte webhook:

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

Když jiný projekt zapíše do záznamu, ke kterému má vaše klinika přístup, událost to oznámí pomocí `data.external: true` a zdroje, takže váš EMR může zobrazit „nové výsledky z jiné laboratoře“ bez nutnosti opakovaného dotazování. Událost `consent.revoked` znamená, že osoba odvolala přístup kliniky: přestaňte synchronizovat daný záznam. Podpisy, opakování a datové sady jsou popsány v části [Webhooks](https://developers.anpheros.com/cs/guides/webhooks).

## Co vidí pacient

Pacient ve svém záznamu vidí návštěvu, srdeční frekvenci a předběžnou diagnózu, přičemž každá položka je označena jako přidaná Dr. Ana Popescu z Clinica Cardio Nord. Ve svých připojeních aplikace kliniky uvádí každý přístup, jménem, když lékař jednal. Tato transparentnost je to, co pacienty motivuje k udělení přístupu další klinice.

## Kontrolní seznam pro spuštění do produkce

- [ ] Zaregistrované organizace, lékaři a role lékařů; odcházející nastaveni na neaktivní
- [ ] Pacienti spárováni identifikátorem kliniky, nikdy jménem
- [ ] Existující záznamy dosaženy prostřednictvím souhlasu OAuth, ne duplikovány
- [ ] Každý požadavek od klinického personálu nese `X-Anpheros-Acting-As`
- [ ] Návštěvy zapsány jako transakce; diagnózy se správným stavem ověření
- [ ] Zdrojový systém nastaven při každém zápisu; laboratorní zprávy prostřednictvím konektoru
- [ ] Koncový bod webhooku ověřující podpisy; `consent.revoked` zpracováno
- [ ] Produkční projekt s podepsanou dohodou o zpracování osobních údajů (klíče `sk_live_…`); viz [Ceník](https://developers.anpheros.com/cs/guides/pricing)

## Často kladené dotazy

### Má Anpheros hotový konektor pro můj EMR?
Ne. Neexistují žádné hotové konektory pro specifické EMR nebo laboratorní systémy; integrace je postavena proti FHIR R4 a REST API, obvykle jako malá služba vedle EMR. Laboratorní zprávy HL7 v2 jsou přijímány tak, jak jsou.

### Může lékař pracovat pro dvě kliniky?
Ano. Jedna `Practitioner` může mít `PractitionerRole` v každé organizaci. Role uvedená v `X-Anpheros-Acting-As` rozhoduje, pro kterou kliniku je každý zápis zaznamenán.

### Co se stane, když pacient zruší přístup klinice?
Volání kliniky pro daný záznam odpoví `401` a je odeslán webhook `consent.revoked`. To, co klinika zapsala, zůstává v záznamu pacienta s jeho původem; klinika jej již nemůže číst ani měnit.

## Související

- [Integrace ve zdravotnictví](https://developers.anpheros.com/cs/guides/healthcare-integrations): všechny integrační vzory na první pohled
- [Vysvětlení původu zdravotnických dat](https://developers.anpheros.com/cs/guides/medical-data-provenance)
- [Jak implementovat souhlas pacienta pomocí SMART on FHIR](https://developers.anpheros.com/cs/guides/smart-on-fhir-backend)
- [Jak importovat laboratorní výsledky do záznamu FHIR](https://developers.anpheros.com/cs/guides/import-lab-results-fhir)
- [Interoperabilita zdravotnických dat](https://developers.anpheros.com/cs/guides/interoperability)
