Cas d'utilisation
Fiche du professionel de santé
Dans ce cas d’utilisation, nous allons aborder la récupération d’éléments à la demande. Nous allons faire une application annuaire qui permet de trouver des professionnels de santé.
Qui est concerné ?
- Vous avez une application existante et vous souhaitez sur certains composants ajouter de la données provenant de notre api
- Vous avez un système d’information et vous souhaitez enrichir certaines données bien précises
- Vous souhaitez construire une application sans stocker la donnée dans votre système
Ce dont vous aurez besoin
- Une API Key d’accès à l’API que vous pouvez récupérer en ligne à cette adresse
- Java 11+
- Un IDE (IntelliJ, Eclipse…)
- Maven 3+
Initialisation du projet
Voir la section Démarrage/Java
Trouver un Practitioner avec son numéro RPPS
Pour l’exemple, nous allons rechercher un practitioner role qui a un numéro RPPS : 10000001111
Effectuer une recherche FHIR par identifier. Cela va retourner un Bundle qui contiendra le résultat de recherche. Comme nous cherchons par RPPS, s’il y a un résultat, il sera unique.
curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v1/Practitioner?identifier=10000001111&_pretty=true&_format=json"
// créez le client de l'api FHIR:
var ctx = FhirContext.forR4();
var client = ctx.newRestfulGenericClient("https://https://gateway.api.esante.gouv.fr/fhir/v1/");
// ajoutez ensuite la clé de sécurité comme dans le starter java
var practitionerBundle = (Bundle) client.search().forResource(Practitioner.class).where(Practitioner.IDENTIFIER.exactly().codes("10000001111")).execute();
if(!practitionerBundle.hasEntry()){
logger.info("No results found with this rpps number");
return;
}
// get the practitioner:
var practitioner = (Practitioner) practitionerBundle.getEntry().get(0).getResource();
Le practitioner retourné contiendra différentes informations comme la civilité, d’autres identifiants…
Professionnel 10000001111:
Id technique (champs id): 003-131111
Identifiants:
Numéro urn:oid:1.2.250.1.71.4.2.1 : 810000001111
Numéro http://rpps.fr : 10000001111
Démographie:
Civilité : [M]
...
Récupérer les PractitionerRole du Practitioner précédemment trouvé
Pour aller plus loin, nous allons chercher les exercices professionnels de ce practitioner pour obtenir plus d’informations.
Nous faisons donc une requête sur la ressource PractitionerRole en précisant de trouver les PractitionerRole qui sont liés à ce Practitioner :
curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v1/PractitionerRole?practitioner=003-131111&_pretty=true&_format=json"
var practitionerRoleBundle = (Bundle) client.search().forResource(PractitionerRole.class).where(PractitionerRole.PRACTITIONER.hasId(practitioner.getIdElement().getIdPart())).execute();
var practitionerRoles = practitionerRoleBundle.getEntry().stream().map(pre -> pre.getResource()).map(PractitionerRole.class::cast).collect(Collectors.toList());
Le point important ici est de mettre la clause where sur le paramètre practitioner en spécifiant l’id du Practitioner précédemment trouvé.
Cela va retourner un résultat de recherche avec tous les PractitionerRole liés à ce Practitioner :
Exercices:
Exercice 005-71111:
Noms :[JEAN] MARTIN
Spécialités : SM26 S
...
Lier les exercices avec une Organization
Dans cette étape, nous allons récupérer les Organization rattachées aux Exercices professionels.
Pour ce faire, nous modifions la requête de l’étape précédente pour demander de récupérer les PractitionerRole ainsi que leurs Organization attachées dans une même requête. Cela se fait par le biais du paramètre _include :
curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v1/PractitionerRole?practitioner=003-131111&_include=PractitionerRole:organization&_pretty=true&_format=json"
var practitionerRoleBundle = (Bundle) client.search().forResource(PractitionerRole.class).where(PractitionerRole.PRACTITIONER.hasId(practitioner.getIdElement().getIdPart())).include(new Include("PractitionerRole:organization")).execute();
var practitionerRolesAndOrganizations = practitionerRoleBundle.getEntry().stream().map(pre -> pre.getResource()).collect(Collectors.toList());
var practitionerRoles = practitionerRolesAndOrganizations.stream().filter(pre -> pre instanceof PractitionerRole).map(PractitionerRole.class::cast).collect(Collectors.toList());
var organizations = practitionerRolesAndOrganizations.stream().filter(pre -> pre instanceof Organization).map(Organization.class::cast).collect(Collectors.toList());
Cette requête va vous retourner un Bundle contenant à la fois les PractitionerRole et les Organization. Votre programme devra lui-même lier les PractitionerRole aux Organization grâce aux champs “PractitionerRole.organization” et “Organization.id”.
Dans l’exemple ci-dessous nous voyons par exemple que le PractitionerRole est lié à la ressource Organization qui à l’id "organization": {"reference": "Organization/org-6922"}
et cette Organization est une autre entrée dans le Bundle
qui a pour champs ‘id’ org-6922.
{
"resourceType": "Bundle",
"total": 1,
"entry": [
{
"fullUrl": "https://gateway.api.esante.gouv.fr/fhir/v1/PractitionerRole/prarole-6922",
"resource": {
"resourceType": "PractitionerRole",
"id": "prarole-6922",
"organization": {
"reference": "Organization/org-6922"
},
...
}
},
{
"fullUrl": "https://gateway.api.esante.gouv.fr/fhir/v1/Organization/org-6922",
"resource": {
"resourceType": "Organization",
"id": "org-6922",
...
}
}
...
}
Aller plus loin
Trouver le nom, le prénom, la civilité (ou le genre), l’adresse postale et les adresses MSS d’un Practitioner en partant de son identifiant ADELI/RPPS
Cliquez ici pour accéder à l’exemple.
Trouver l’identifiant ADELI/RPPS, les BAL MSS, les activités ainsi que les structures d’exercice d’un Practitien en partant de son nom et son prénom d’exercice
Cliquez ici pour accéder à l’exemple.
Récupération par lots
Vous pouvez tout à fait imaginer récupérer des Practitioner complets par lot. Cela nécessitera cependant à minima 2 requêtes.
La première requête va vous premettre de trouver les Practitioner, la seconde vous permettra de chercher des informations complémentaires dans des PractitionerRole ou Organization.
Imaginons que vous cherchiez les fiches de 2 professionnels avec pour identifiants RPPS : 10000001111 et 10000001112
Dans ce cas la première requête sera :
curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v1/Practitioner?identifier=10000001111,10000001112&_pretty=true&_format=json"
Cette requête permet de demander tous les Practitioner qui ont un identifier à 10000001111 OU 10000001112.
La liste retournée contiendra plusieurs Practitioner si les identifiants RPPS existent.
Ensuite, vous pourrez là encore effectuer une unique requête pour aller chercher les ressources associées:
curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v1/PractitionerRole?practitioner=003-131111,003-131112&_pretty=true&_format=json"