AnpherosAnpheros PlatformDevelopers

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

Cum se integrează sistemele clinice cu un backend FHIR

Tutorial: conectați un EMR de clinică la dosarele FHIR R4 ale pacienților — director de medici, potrivire după numărul dosarului, o vizită ca o singură tranzacție cu medicul ca autor, rapoarte de laborator, date de la alți furnizori și webhooks.

Acest tutorial conectează software-ul unei clinici (un EMR, un sistem de management al practicii sau un instrument de rezervare) la înregistrările HL7 FHIR R4 ale pacienților din Anpheros: clinica și medicii săi sunt înregistrați în director, pacienții sunt potriviți după numărul de înregistrare al clinicii, o vizită este înregistrată ca o singură tranzacție cu medicul numit ca autor, iar clinica află despre datele pe care le adaugă alți furnizori. Fiecare cerere este curl împotriva sandbox-ului gratuit, iar răspunsurile sunt ale platformei.

Integrarea rulează pe serverul clinicii, cu o cheie API de proiect pentru pacienții pe care clinica îi înregistrează și, pentru persoanele care au deja o înregistrare Anpheros, o autorizație OAuth pe care o aprobă.

Ce se mapează la ce

În sistemul clinicii În FHIR R4
clinica, departamentele sale Organization
un medic sau asistent medical Practitioner
acea persoană care lucrează la acea clinică, cu o specialitate PractitionerRole
fișa pacientului și numărul acesteia Patient cu un identifier în sistemul clinicii
o vizită Encounter
semne vitale, rezultate măsurate în timpul vizitei Observation legate de Encounter
un diagnostic Condition (ICD-10), cu verificationStatus provizoriu sau confirmat
o prescripție, tratament curent MedicationStatement (ATC)
o scrisoare, un sumar de externare, o scanare DocumentReference cu fișierul
rezultate de laborator conectorul de laborator, în Observation

Pasul 1: înregistrați clinica și medicii săi

Resursele de tip Director nu au pacienți. Alte proiecte din același mediu le pot citi, astfel încât alți furnizori ai unui pacient să vadă cine a scris ce, dar numai proiectul dumneavoastră le poate modifica.

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

Păstrați ID-urile returnate lângă înregistrările personalului dumneavoastră. Când cineva pleacă, setați PractitionerRole la "active": false; scrierile lor anterioare își păstrează numele, iar ei nu mai pot acționa prin sistemul dumneavoastră.

Pasul 2: potrivirea pacienților

Pentru pacienții pe care clinica îi înregistrează, creați Patient cu numărul de înregistrare al clinicii ca identificator:

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

De atunci, găsiți pacientul după acel număr, niciodată după nume și data nașterii:

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

Când persoana are deja o înregistrare Anpheros, din propria aplicație sau de la un alt furnizor, clinica nu creează o a doua. Aceasta solicită persoanei acces cu OAuth, de pe o tabletă la recepție sau printr-un link trimis înainte de vizită, folosind o aplicație confidențială (serverul clinicii păstrează secretul). Persoana își alege înregistrarea și cât timp clinica poate accesa aceasta. Pașii sunt detaliați în Cum se implementează consimțământul pacientului cu SMART on FHIR; câmpul patient al token-ului este id-ul de stocat cu fișierul dumneavoastră.

Pasul 3: scrieți o vizită ca o singură tranzacție

O vizită produce mai multe resurse care aparțin împreună. Trimiteți-le într-o transaction pentru ca acestea să fie stocate toate odată sau deloc, și specificați cine lucrează: X-Anpheros-Acting-As numește rolul medicului. Acesta devine autorul în Provenance, este scris în logul de acces și este afișat pacientului pe nume.

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 are 201 Created pentru Encounter, Observation și Condition. Observation și Condition indică acum Encounter/0ca25459-… real. Provenance-ul fiecăruia numește rolul medicului, clinica și sistemul sursă:

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

Diagnosticul este provisional până când este confirmat. Actualizați-l la confirmed mai târziu, iar istoricul păstrează ambele. Ce înseamnă fiecare câmp este explicat în Medical data provenance explained.

Pasul 4: Rezultate de laborator și documente

Rezultatele de la laboratorul propriu al clinicii sau rapoartele aduse de pacient trec prin conectorul de laborator într-o singură cerere per 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

Scrisorile și rezumatele de externare sunt documente: creați un DocumentReference prin /v1/patients/{id}/documents și încărcați PDF-ul. Fișierul original nu este niciodată modificat, iar valorile extrase din acesta indică înapoi către el. Consultați Cum se importă rezultatele de laborator într-un fișier FHIR și API-ul de date medicale.

Pasul 5: citiți ce au scris alți furnizori și respectați-vă aria de competență

Cu consimțământul pacientului, clinica citește întregul dosar în limitele domeniilor sale de aplicare, inclusiv ceea ce au adăugat alte clinici, laboratoare și pacientul. Poate modifica doar ceea ce a scris ea însăși. O actualizare sau ștergere a unui resursă al altei organizații va returna 403, iar originalul va rămâne așa cum a fost. Pentru a corecta ceva scris de un alt furnizor, scrieți propria resursă (de exemplu, un nou Condition cu evaluarea dumneavoastră) și lăsați dosarul să arate ambele, fiecare cu autorul său.

Înainte de o vizită, GET $BASE/Patient/$PID/$summary oferă rezumatul internațional al pacientului din dosar: probleme, medicamente, alergii și semne vitale recente, din fiecare sursă.

Pasul 6: Aflați despre date noi

Înregistrați un webhook o singură dată pentru proiectul clinicii:

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

Când un alt proiect scrie într-o înregistrare la care clinica dvs. are acces, evenimentul indică acest lucru cu data.external: true și sursa, astfel încât EMR-ul dvs. să poată afișa „rezultate noi de la un alt laborator” fără a interoga. Un eveniment consent.revoked înseamnă că persoana a retras accesul clinicii: opriți sincronizarea acelei înregistrări. Semnăturile, reîncercările și sarcinile utile sunt acoperite în Webhooks.

Ce vede pacientul

Pacientul vede vizita, ritmul cardiac și diagnosticul provizoriu în fișa sa, fiecare marcat ca fiind adăugat de Dr. Ana Popescu de la Clinica Cardio Nord. În conexiunile sale, aplicația clinicii listează fiecare acces, după nume atunci când un practician a acționat. Această transparență este ceea ce îi face pe pacienți dispuși să acorde acces următoarei clinici.

Listă de verificare pentru lansarea în producție

Întrebări frecvente

Are Anpheros un conector gata făcut pentru EMR-ul meu?

Nu. Nu există conectori gata făcuți pentru EMR-uri sau sisteme de laborator specifice; integrarea se construiește pe baza API-urilor FHIR R4 și REST, de obicei ca un mic serviciu lângă EMR. Mesajele de laborator HL7 v2 sunt acceptate așa cum sunt.

Poate un medic să lucreze pentru două clinici?

Da. Un Practitioner poate avea un PractitionerRole la fiecare organizație. Rolul menționat în X-Anpheros-Acting-As decide pentru ce clinică este înregistrat fiecare scriere.

Ce se întâmplă când pacientul revocă accesul clinicii?

Apelurile clinicii pentru acea înregistrare răspund cu 401, iar un webhook consent.revoked este trimis. Ceea ce a scris clinica rămâne în dosarul pacientului cu proveniența sa; clinica pur și simplu nu mai poate citi sau modifica.

Conexe

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