AnpherosAnpheros PlatformDevelopers

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

Comment intégrer les systèmes de clinique avec un backend FHIR

Tutoriel : connecter un DSE de clinique aux dossiers FHIR R4 des patients — répertoire des médecins, correspondance par numéro de dossier, une visite comme une transaction unique avec le médecin comme auteur, rapports de laboratoire, données d'autres prestataires et webhooks.

Ce tutoriel connecte le logiciel d'une clinique (un DME, un système de gestion de cabinet ou un outil de réservation) aux enregistrements HL7 FHIR R4 des patients dans Anpheros : la clinique et ses médecins sont enregistrés dans le répertoire, les patients sont mis en correspondance par le numéro d'enregistrement de la clinique, une visite est enregistrée comme une transaction unique avec le médecin nommé comme auteur, et la clinique est informée des données ajoutées par d'autres fournisseurs. Chaque requête est curl contre le bac à sable gratuit, et les réponses proviennent de la plateforme elle-même.

L'intégration s'exécute sur le serveur de la clinique, avec une clé API de projet pour les patients que la clinique enregistre et, pour les personnes qui ont déjà un enregistrement Anpheros, une autorisation OAuth qu'elles approuvent.

Ce qui correspond à quoi

Dans le système clinique Dans FHIR R4
la clinique, ses départements Organization
un médecin ou une infirmière Practitioner
cette personne travaillant dans cette clinique, avec une spécialité PractitionerRole
le dossier du patient et son numéro Patient avec un identifier dans le système de la clinique
une visite Encounter
signes vitaux, résultats mesurés pendant la visite Observation liés au Encounter
un diagnostic Condition (ICD-10), avec verificationStatus provisoire ou confirmé
une prescription, traitement actuel MedicationStatement (ATC)
une lettre, un compte rendu de sortie, une radiographie DocumentReference avec le dossier
résultats de laboratoire le connecteur de laboratoire, dans Observation

Étape 1 : enregistrer la clinique et ses médecins

Les ressources de répertoire n'ont pas de patient. D'autres projets dans le même environnement peuvent les lire, de sorte que les autres prestataires d'un patient voient qui a écrit quoi, mais seul votre projet peut les modifier.

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

Conservez les identifiants retournés à côté de vos enregistrements du personnel. Lorsqu'une personne quitte l'organisation, définissez son PractitionerRole sur "active": false ; ses écritures passées conservent son nom, et elle ne peut plus agir via votre système.

Étape 2 : faire correspondre les patients

Pour les patients que la clinique enregistre, créez le Patient avec le numéro d'enregistrement de la clinique comme identifiant :

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

À partir de ce moment, trouvez le patient par ce numéro, jamais par nom et date de naissance :

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

Lorsque la personne a déjà un dossier Anpheros, depuis sa propre application ou celle d'un autre fournisseur, la clinique n'en crée pas un second. Elle demande à la personne un accès avec OAuth, depuis une tablette à la réception ou un lien envoyé avant la visite, en utilisant une application confidential (le serveur de la clinique conserve le secret). La personne choisit son dossier et la durée pendant laquelle la clinique peut y accéder. Les étapes sont décrites dans Comment implémenter le consentement du patient avec SMART on FHIR ; le champ patient du token est l'id à stocker avec votre fichier.

Étape 3 : écrire une visite en une seule transaction

Une visite produit plusieurs ressources qui vont ensemble. Envoyez-les dans une transaction afin qu'elles soient stockées toutes en même temps ou pas du tout, et indiquez qui travaille : X-Anpheros-Acting-As nomme le rôle du médecin. Il devient l'auteur dans Provenance, est écrit dans le journal d'accès et est affiché au patient par son nom.

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

La transaction-response contient 201 Created pour l'Encounter, l'Observation et la Condition. L'Observation et la Condition pointent maintenant vers le véritable Encounter/0ca25459-…. La Provenance de chacune nomme le rôle du médecin, la clinique et le système source :

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

Le diagnostic est provisional jusqu'à sa confirmation. Mettez-le à jour vers confirmed plus tard, et l'historique conserve les deux. La signification de chaque champ est expliquée dans Provenance des données médicales expliquée.

Étape 4 : Résultats de laboratoire et documents

Les résultats du laboratoire de la clinique, ou les rapports apportés par le patient, passent par le connecteur de laboratoire en une requête par rapport :

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

Les lettres et les résumés de sortie sont des documents : créez un DocumentReference via /v1/patients/{id}/documents et téléchargez le PDF. Le fichier original n'est jamais modifié, et les valeurs qui en sont extraites y renvoient. Voir Comment importer des résultats de laboratoire dans un enregistrement FHIR et API de données médicales.

Étape 5 : lire ce que d'autres fournisseurs ont écrit, et rester dans votre domaine

Avec le consentement du patient, la clinique lit l'intégralité du dossier dans ses périmètres, y compris ce que d'autres cliniques, laboratoires et le patient ont ajouté. Elle ne peut modifier que ce qu'elle a écrit elle-même. Une mise à jour ou une suppression d'une ressource d'une autre organisation répond 403, et l'original reste tel quel. Pour corriger quelque chose qu'un autre fournisseur a écrit, écrivez votre propre ressource (par exemple, un nouveau Condition avec votre évaluation) et laissez le dossier montrer les deux, chacun avec son auteur.

Avant une visite, GET $BASE/Patient/$PID/$summary fournit le Résumé International du Patient du dossier : problèmes, médicaments, allergies et signes vitaux récents, provenant de toutes les sources.

Étape 6 : être informé des nouvelles données

Enregistrez un webhook une seule fois pour le projet de la clinique :

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

Lorsqu'un autre projet écrit dans un enregistrement auquel votre clinique peut accéder, l'événement l'indique avec data.external: true et la source, afin que votre DME puisse afficher "nouveaux résultats d'un autre laboratoire" sans interroger. Un événement consent.revoked signifie que la personne a retiré l'accès de la clinique : arrêtez de synchroniser cet enregistrement. Les signatures, les nouvelles tentatives et les charges utiles sont abordées dans Webhooks.

Ce que le patient voit

Le patient voit la visite, la fréquence cardiaque et le diagnostic provisoire dans son dossier, chacun marqué comme ajouté par le Dr Ana Popescu à la Clinica Cardio Nord. Dans ses connexions, l'application de la clinique liste chaque accès, par nom lorsqu'un praticien était en action. Cette transparence est ce qui incite les patients à accorder l'accès à la clinique suivante.

Liste de contrôle pour la mise en production

Questions fréquemment posées

Anpheros dispose-t-il d'un connecteur prêt à l'emploi pour mon DME ?

Non. Il n'existe pas de connecteurs prêts à l'emploi pour des DME ou des systèmes de laboratoire spécifiques ; l'intégration est construite contre les API FHIR R4 et REST, généralement sous la forme d'un petit service à côté du DME. Les messages de laboratoire HL7 v2 sont acceptés tels quels.

Un médecin peut-il travailler pour deux cliniques ?

Oui. Un Practitioner peut avoir un PractitionerRole dans chaque organisation. Le rôle nommé dans X-Anpheros-Acting-As décide pour quelle clinique chaque écriture est enregistrée.

Que se passe-t-il lorsque le patient révoque l'accès de la clinique ?

Les appels de la clinique pour cet enregistrement répondent 401, et un webhook consent.revoked est envoyé. Ce que la clinique a écrit reste dans le dossier du patient avec sa provenance ; la clinique ne peut tout simplement plus le lire ou le modifier.

Liens Utiles

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