AnpherosAnpheros PlatformDevelopers

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Jak zintegrować systemy przychodni z backendem FHIR

Samouczek: połącz EMR przychodni z repozytoriami FHIR R4 pacjentów — katalog lekarzy, dopasowanie numerem rekordu, wizyta jako jedna transakcja z lekarzem jako autorem, wyniki laboratoryjne, dane od innych dostawców i webhooks.

Ten samouczek łączy oprogramowanie kliniki (system EMR, system zarządzania praktyką lub narzędzie do rezerwacji) z rekordami HL7 FHIR R4 pacjentów w Anpheros: klinika i jej lekarze są zarejestrowani w katalogu, pacjenci są dopasowywani według numeru rekordu kliniki, wizyta jest zapisywana jako jedna transakcja z lekarzem wskazanym jako autor, a klinika dowiaduje się o danych dodawanych przez innych dostawców. Każde zapytanie jest curl kierowane do darmowego środowiska sandbox, a odpowiedzi pochodzą z platformy.

Integracja działa na serwerze kliniki, z kluczem API projektu dla pacjentów, których klinika rejestruje, oraz, dla osób posiadających już rekord Anpheros, z udzielonym przez nich upoważnieniem OAuth.

Co się do czego mapuje

W systemie kliniki W FHIR R4
klinika, jej oddziały Organization
lekarz lub pielęgniarka Practitioner
ta osoba pracująca w tej klinice, ze specjalizacją PractitionerRole
karta pacjenta i jej numer Patient z identifier w systemie kliniki
wizyta Encounter
parametry życiowe, wyniki zmierzone podczas wizyty Observation powiązane z Encounter
diagnoza Condition (ICD-10), z verificationStatus tymczasowa lub potwierdzona
recepta, bieżące leczenie MedicationStatement (ATC)
list, karta wypisu, skan DocumentReference z plikiem
wyniki laboratoryjne łącznik laboratoryjny, do Observation

Krok 1: rejestracja kliniki i jej lekarzy

Zasoby katalogowe nie zawierają pacjentów. Inne projekty w tym samym środowisku mogą je odczytywać, dzięki czemu inni świadczeniodawcy pacjenta widzą, kto co napisał, ale tylko Twój projekt może je modyfikować.

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

Zachowaj zwrócone identyfikatory obok rekordów personelu. Gdy ktoś odchodzi, ustaw jego PractitionerRole na "active": false; jego wcześniejsze wpisy zachowują jego imię, a on nie może już działać za pośrednictwem Twojego systemu.

Krok 2: dopasowanie pacjentów

Dla pacjentów rejestrowanych przez klinikę, utwórz Patient z numerem rekordu kliniki jako identyfikatorem:

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 tego momentu wyszukuj pacjenta według tego numeru, nigdy według imienia i daty urodzenia:

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

Gdy osoba posiada już rekord w Anpheros, ze swojej własnej aplikacji lub od innego dostawcy, klinika nie tworzy drugiego rekordu. Prosi osobę o dostęp za pomocą OAuth, z tabletu przy recepcji lub linku wysłanego przed wizytą, używając poufnej aplikacji (serwer kliniki przechowuje sekret). Osoba wybiera swój rekord i czas, przez jaki klinika może mieć do niego dostęp. Kroki opisano w Jak zaimplementować zgodę pacjenta z SMART on FHIR; pole patient tokenu to identyfikator do przechowywania w pliku.

Krok 3: zapis wizyty jako jedna transakcja

Wizyta generuje kilka zasobów, które do siebie należą. Wyślij je w ramach transaction, aby zostały zapisane od razu lub wcale, i określ, kto pracuje: X-Anpheros-Acting-As określa rolę lekarza. Staje się ona autorem w Provenance, jest zapisywana w logu dostępu i jest wyświetlana pacjentowi pod nazwiskiem.

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 zawiera 201 Created dla Encounter, Observation i Condition. Observation i Condition wskazują teraz na rzeczywiste Encounter/0ca25459-…. Provenance każdego z nich określa rolę lekarza, klinikę i system źródłowy:

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

Diagnoza jest provisional do momentu jej potwierdzenia. Zaktualizuj ją do confirmed później, a historia zachowa obie wersje. Znaczenie każdego pola jest wyjaśnione w Wyjaśnienie pochodzenia danych medycznych.

Krok 4: Wyniki laboratoryjne i dokumenty

Wyniki z własnego laboratorium kliniki lub przyniesione przez pacjenta raporty przechodzą przez konektor laboratorium w jednym żądaniu na raport:

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

Listy i podsumowania wypisu to dokumenty: utwórz DocumentReference poprzez /v1/patients/{id}/documents i prześlij plik PDF. Oryginalny plik nigdy nie jest modyfikowany, a wyodrębnione z niego wartości wskazują na niego. Zobacz Jak zaimportować wyniki laboratoryjne do rekordu FHIR i API danych medycznych.

Krok 5: odczytaj, co napisali inni dostawcy, i trzymaj się swojej roli

Za zgodą pacjenta klinika odczytuje cały rekord w ramach swoich zakresów, w tym to, co dodały inne kliniki, laboratoria i sam pacjent. Może zmieniać tylko to, co sama napisała. Aktualizacja lub usunięcie zasobu innej organizacji skutkuje odpowiedzią 403, a oryginał pozostaje niezmieniony. Aby poprawić coś, co napisał inny dostawca, napisz własny zasób (na przykład nowy Condition ze swoją oceną) i pozwól, aby rekord zawierał oba, każdy ze swoim autorem.

Przed wizytą GET $BASE/Patient/$PID/$summary udostępnia Międzynarodowe Podsumowanie Pacjenta (International Patient Summary) dotyczące problemów, leków, alergii i ostatnich parametrów życiowych, pochodzących ze wszystkich źródeł.

Krok 6: Informacje o nowych danych

Zarejestruj webhook raz dla projektu kliniki:

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

Gdy inny projekt zapisze dane do rekordu, do którego Twoja klinika ma dostęp, zdarzenie poinformuje o tym za pomocą data.external: true oraz źródła, dzięki czemu Twoje EMR może wyświetlić komunikat "nowe wyniki z innego laboratorium" bez konieczności ciągłego odpytywania. Zdarzenie consent.revoked oznacza, że osoba wycofała dostęp kliniki: przestań synchronizować ten rekord. Podpisy, ponawianie prób i ładunki (payloads) są omówione w sekcji Webhooks.

Co widzi pacjent

Pacjent widzi wizytę, tętno i wstępną diagnozę w swojej karcie, każdą oznaczoną jako dodaną przez Dr. Ana Popescu z Clinica Cardio Nord. W swoich połączeniach aplikacja kliniki wymienia każdy dostęp, podając nazwisko, gdy działał lekarz. Ta przejrzystość sprawia, że pacjenci chętnie udzielają dostępu kolejnej klinice.

Lista kontrolna przed uruchomieniem

Najczęściej zadawane pytania

Czy Anpheros posiada gotowy konektor do mojego systemu EMR?

Nie. Nie ma gotowych konektorów do konkretnych systemów EMR ani laboratoryjnych; integracja jest budowana w oparciu o FHIR R4 i API REST, zazwyczaj jako mała usługa obok systemu EMR. Wiadomości laboratoryjne HL7 v2 są akceptowane w obecnej formie.

Czy lekarz może pracować dla dwóch przychodni?

Tak. Jeden Practitioner może mieć PractitionerRole w każdej organizacji. Rola określona w X-Anpheros-Acting-As decyduje, dla której przychodni jest rejestrowany każdy wpis.

Co się dzieje, gdy pacjent odwoła dostęp przychodni?

Wywołania przychodni dla tego rekordu zwracają 401, a wysyłany jest webhook consent.revoked. To, co przychodnia zapisała, pozostaje w rekordzie pacjenta wraz z jego pochodzeniem; przychodnia po prostu nie może już go odczytać ani zmienić.

Powiązane

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Product updates by email

New features, guides and the end of the beta. One email a month at most.

Send me occasional Anpheros Platform updates by email (new features, API changes, guides). I'll confirm by email and can unsubscribe in one click from any email. Privacy