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"