Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Kliniksysteme mit einem FHIR-Backend integrieren
Tutorial: Verbinden Sie ein Klinik-EMR mit den FHIR R4 Akten von Patienten – Ärzteverzeichnis, Abgleich nach Aktennummer, ein Besuch als eine Transaktion mit dem Arzt als Autor, Laborberichte, Daten anderer Anbieter und Webhooks.
Dieses Tutorial verbindet die Software einer Klinik (ein EMR, ein Praxisverwaltungssystem oder ein Buchungstool) mit den HL7 FHIR R4-Aufzeichnungen von Patienten in Anpheros: Die Klinik und ihre Ärzte werden im Verzeichnis registriert, Patienten werden anhand der Aktennummer der Klinik abgeglichen, ein Besuch wird als eine Transaktion mit dem genannten Arzt als Autor geschrieben, und die Klinik erfährt von Daten, die andere Anbieter hinzufügen. Jede Anfrage wird curl gegen die kostenlose Sandbox gestellt, und die Antworten stammen von der Plattform selbst.
Die Integration läuft auf dem Server der Klinik, mit einem Projekt-API-Schlüssel für die von der Klinik registrierten Patienten und, für Personen, die bereits eine Anpheros-Aufzeichnung haben, einer OAuth-Berechtigung, die sie genehmigen.
Was wird abgebildet auf was
| Im Kliniksystem | In FHIR R4 |
|---|---|
| die Klinik, ihre Abteilungen | Organization |
| ein Arzt oder eine Krankenschwester | Practitioner |
| diese Person, die in dieser Klinik arbeitet, mit einer Spezialisierung | PractitionerRole |
| die Patientenakte und ihre Nummer | Patient mit einer identifier im Kliniksystem |
| ein Besuch | Encounter |
| Vitalparameter, während des Besuchs gemessene Ergebnisse | Observation verknüpft mit der Encounter |
| eine Diagnose | Condition (ICD-10), mit verificationStatus vorläufig oder bestätigt |
| eine Verschreibung, aktuelle Behandlung | MedicationStatement (ATC) |
| ein Brief, ein Entlassungsbericht, ein Scan | DocumentReference mit der Akte |
| Laborergebnisse | der Labor-Konnektor, in Observation |
Schritt 1: Registrieren Sie die Klinik und ihre Ärzte
Directory-Ressourcen haben keinen Patienten. Andere Projekte in derselben Umgebung können sie lesen, sodass andere Anbieter eines Patienten sehen können, wer was geschrieben hat, aber nur Ihr Projekt sie ändern kann.
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"}]}'
Bewahren Sie die zurückgegebenen IDs neben Ihren Personalakten auf. Wenn jemand ausscheidet, setzen Sie dessen PractitionerRole auf "active": false; seine früheren Einträge behalten seinen Namen, und er kann nicht mehr über Ihr System agieren.
Schritt 2: Patienten zuordnen
Für Patienten, die die Klinik registriert, erstellen Sie die Patient mit der Klinik-Record-Nummer als Identifikator:
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"}'
Von da an finden Sie den Patienten anhand dieser Nummer, niemals anhand von Name und Geburtsdatum:
curl "$BASE/Patient?identifier=https://clinic.example/mrn|MRN-20981" -H "Authorization: Bearer $KEY"
Wenn die Person bereits einen Anpheros-Datensatz hat, von ihrer eigenen App oder einem anderen Anbieter, erstellt die Klinik keinen zweiten. Sie bittet die Person um Zugriff mit OAuth, von einem Tablet am Empfangstresen oder über einen Link, der vor dem Besuch gesendet wird, unter Verwendung einer vertraulichen Anwendung (der Server der Klinik bewahrt das Geheimnis). Die Person wählt ihren Datensatz und wie lange die Klinik darauf zugreifen darf. Die Schritte finden Sie unter How to implement patient consent with SMART on FHIR; das patient-Feld des Tokens ist die ID, die Sie mit Ihrer Datei speichern.
Schritt 3: Eine Visite als eine Transaktion schreiben
Eine Visite erzeugt mehrere Ressourcen, die zusammengehören. Senden Sie diese in einer transaction, damit sie entweder alle oder gar keine gespeichert werden, und geben Sie an, wer arbeitet: X-Anpheros-Acting-As benennt die Rolle des Arztes. Sie wird zum Autor in Provenance, wird in das Zugriffsprotokoll geschrieben und dem Patienten namentlich angezeigt.
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"}}
]}'
Die transaction-response hat 201 Created für die Encounter, die Observation und die Condition. Die Observation und die Condition verweisen nun auf die echte Encounter/0ca25459-…. Die Provenance jeder Ressource benennt die Rolle des Arztes, die Klinik und das Quellsystem:
"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"}}}]
Die Diagnose ist provisional, bis sie bestätigt ist. Aktualisieren Sie sie später auf confirmed, und die Historie behält beide. Was jedes Feld bedeutet, wird in Erklärung der Provenance medizinischer Daten erläutert.
Schritt 4: Laborergebnisse und Dokumente
Ergebnisse aus dem hauseigenen Labor der Klinik oder vom Patienten mitgebrachte Berichte durchlaufen den Labor-Connector in einer Anfrage pro Bericht:
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
Briefe und Entlassungsberichte sind Dokumente: Erstellen Sie einen DocumentReference über /v1/patients/{id}/documents und laden Sie die PDF-Datei hoch. Die Originaldatei wird niemals geändert, und daraus extrahierte Werte verweisen auf sie zurück. Siehe How to import laboratory results into a FHIR record und Medical data API.
Schritt 5: Lesen, was andere Anbieter geschrieben haben, und bei den eigenen Beiträgen bleiben
Mit der Zustimmung des Patienten liest die Klinik den gesamten Datensatz innerhalb ihrer Berechtigungen, einschließlich dessen, was andere Kliniken, Labore und der Patient hinzugefügt haben. Sie kann nur ändern, was sie selbst geschrieben hat. Eine Aktualisierung oder Löschung einer Ressource einer anderen Organisation wird mit 403 beantwortet, und das Original bleibt unverändert. Um etwas zu korrigieren, das ein anderer Anbieter geschrieben hat, schreiben Sie Ihre eigene Ressource (z. B. eine neue Condition mit Ihrer Einschätzung) und lassen Sie den Datensatz beide anzeigen, jeweils mit seinem Autor.
Vor einem Besuch gibt GET $BASE/Patient/$PID/$summary die International Patient Summary des Datensatzes aus: Probleme, Medikamente, Allergien und aktuelle Vitalwerte aus jeder Quelle.
Schritt 6: Benachrichtigungen über neue Daten erhalten
Registrieren Sie einen Webhook einmalig für das Projekt der Klinik:
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"]}'
Wenn ein anderes Projekt in einen Datensatz schreibt, auf den Ihre Klinik zugreifen kann, teilt Ihnen das Ereignis dies mit data.external: true und der Quelle mit, sodass Ihre EMR "neue Ergebnisse von einem anderen Labor" anzeigen kann, ohne abzufragen. Ein consent.revoked-Ereignis bedeutet, dass die Person den Zugriff der Klinik widerrufen hat: Stoppen Sie die Synchronisierung dieses Datensatzes. Signaturen, Wiederholungsversuche und Payloads werden in Webhooks behandelt.
Was der Patient sieht
Der Patient sieht den Besuch, die Herzfrequenz und die vorläufige Diagnose in seiner Akte, jeweils markiert als hinzugefügt von Dr. Ana Popescu in der Clinica Cardio Nord. In seinen Verbindungen listet die Anwendung der Klinik jeden Zugriff auf, namentlich wenn ein Praktiker tätig war. Diese Transparenz ist es, was Patienten bereit macht, den Zugang zur nächsten Klinik zu gewähren.
Checkliste für den Livegang
- [ ] Organisationen, Praktiker und Praktikerrollen registriert; ausscheidende Personen auf inaktiv gesetzt
- [ ] Patienten werden über die Kennung der Klinik abgeglichen, niemals über den Namen
- [ ] Bestehende Datensätze werden über OAuth-Einwilligung erreicht, nicht dupliziert
- [ ] Jede Anfrage von klinischem Personal enthält
X-Anpheros-Acting-As - [ ] Besuche als Transaktionen geschrieben; Diagnosen mit dem richtigen Verifizierungsstatus
- [ ] Quellsystem bei jedem Schreibvorgang gesetzt; Laborberichte über den Connector
- [ ] Webhook-Endpunkt mit Signaturprüfung;
consent.revokedbehandelt - [ ] Produktionsprojekt mit unterzeichnetem DPA (
sk_live_…Schlüssel); siehe Preise
Häufig gestellte Fragen
Bietet Anpheros einen fertigen Connector für mein EMR?
Nein. Es gibt keine fertigen Konnektoren für spezifische EMRs oder Laborsysteme; die Integration erfolgt über die FHIR R4 und REST APIs, üblicherweise als kleiner Service neben dem EMR. HL7 v2 Labor-Nachrichten werden unverändert akzeptiert.
Kann ein Arzt für zwei Kliniken arbeiten?
Ja. Ein Practitioner kann an jeder Organisation eine PractitionerRole haben. Die in X-Anpheros-Acting-As genannte Rolle entscheidet, für welche Klinik jeder Schreibvorgang aufgezeichnet wird.
Was passiert, wenn der Patient den Zugriff der Klinik widerruft?
Die Aufrufe der Klinik für diesen Datensatz ergeben 401, und ein consent.revoked Webhook wird gesendet. Was die Klinik geschrieben hat, bleibt mit seiner Herkunft im Datensatz des Patienten; die Klinik kann ihn nur nicht mehr lesen oder ändern.
Verwandte Themen
- Gesundheitsintegrationen: Alle Integrationsmuster im Überblick
- Nachvollziehbarkeit medizinischer Daten erklärt
- Patienteneinwilligung mit SMART on FHIR implementieren
- Laborergebnisse in einen FHIR-Datensatz importieren
- Interoperabilität von Gesundheitsdaten
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card