Cas d'utilisation

Fiche de structure

Cette partie de la spécification est en cours de construction.

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 structures (organization).

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 une Organization avec son numéro FINESS

Pour l’exemple, nous allons rechercher une organization ayant le numéro FINESS : 010780914

Pour ce faire, nous allons effectuer une recherche sur la ressource Organization par identifier. Cela va retourner un Bundle qui contiendra le résultat de recherche.

curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" \
  "https://gateway.api.esante.gouv.fr/fhir/v1/Organization?identifier=010780914&_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 organizationBundle = (Bundle) client.search().forResource(Organization.class).where(Organization.IDENTIFIER.exactly().codes("010780914")).execute();
if(!organizationBundle.hasEntry()){
logger.info("No results found with this finess number");
return;
}

// get the organization:
var organization = (Organization) organizationBundle.getEntry().get(0).getResource();

 

L’organization retournée contiendra différentes informations comme la raison sociale, l’adresse postale, le secteur d’activité, le type de la strcuture (juridique ou géographique), …

organization 010780914:
    Id technique (champs id): 001-01-147
	Identifiants:
	Numéro urn:oid:1.2.250.1.71.4.2.2 : 1010780914
	Numéro http://finess.sante.gouv.fr : 010780914

	Raison sociale:
	name : "EHPAD RESIDENCE D'URFE BAGE LE CHATEL"
  
	Secteur d'activité:
	https://mos.esante.gouv.fr/NOS/TRE_R02-SecteurActivite/FHIR/TRE-R02-SecteurActivite : SA17
	...


 

Récupérer les PractitionerRole rattachés à l’Organization précédemment trouvée

Pour aller plus loin, nous allons chercher les situations d’exercice rattachées à cette organization 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 à cette Organization :

curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" \
  "https://gateway.api.esante.gouv.fr/fhir/v1/PractitionerRole?organization=001-01-147&_pretty=true&_format=json"
var practitionerRoleBundle = (Bundle) client.search().forResource(PractitionerRole.class).where(PractitionerRole.ORGANIZATION.hasId(organization.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 organization en spécifiant l’id de l’Organization précédemment trouvée.

Cela va retourner un résultat de recherche avec tous les PractitionerRole liés à cette Organization :

Exercices/Situations d'exercice:
    PractitionerRole 005-4902894-6549113:
    Noms :[COLETTE] ROUSSEAU
    Fonction : FON-33 
    ...


 

Lier les PractitionerRole avec les Practitioner

Dans cette étape, nous allons récupérer les Practitioner rattachés aux PractitionerRole.

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 Practitioner attachés 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?organization=001-01-147&_include=PractitionerRole:practitioner&_pretty=true&_format=json"
var practitionerRoleBundle = (Bundle) client.search().forResource(PractitionerRole.class).where(PractitionerRole.ORGANIZATION.hasId(organization.getIdElement().getIdPart())).include(new Include("PractitionerRole:practitioner")).execute();
var practitionerRolesAndPractitioners = practitionerRoleBundle.getEntry().stream().map(pre -> pre.getResource()).collect(Collectors.toList());
var practitionerRoles = practitionerRolesAndPractitioners.stream().filter(pre -> pre instanceof PractitionerRole).map(PractitionerRole.class::cast).collect(Collectors.toList());
var practitioners = practitionerRolesAndPractitioners.stream().filter(pre -> pre instanceof Practitioner).map(Practitioner.class::cast).collect(Collectors.toList());

Cette requête va vous retourner un Bundle contenant à la fois les PractitionerRole et les Practitioner. Votre programme devra lui-même lier les PractitionerRole aux Practitioner grâce aux champs PractitionerRole.practitioner et Practitioner.id. Dans l’exemple ci-dessous nous voyons que le PractitionerRole est lié à la ressource Practitioner ayant l’id "practitioner": {"reference": "Practitioner/003-4745453"} et ce practitioner est une autre entrée dans le Bundle ayant pour champs ‘id’ 003-4745453.

{003-4745453
  "resourceType": "Bundle",
  "total": 11,
  "entry": [
    {
      "fullUrl": "https://gateway.api.esante.gouv.fr/fhir/v1/PractitionerRole/005-4902894-6549113",
      "resource": {
        "resourceType": "PractitionerRole",
        "id": "005-4902894-6549113",
        "practitioner": {
          "reference": "Practitioner/003-4745453"
        },
        ...
      }
    },
    {
      "fullUrl": "https://gateway.api.esante.gouv.fr/fhir/v1/Practitioner/003-4745453",
      "resource": {
        "resourceType": "Practitioner",
        "id": "003-4745453",
        ...
      }
    }
    ...
  
}

 

Aller plus loin

Récupération par lots

Vous pouvez tout à fait imaginer récupérer des Organization par lot. Cela nécessitera cependant à minima 2 requêtes.

La première requête va vous premettre de trouver les Organization, la seconde vous permettra de chercher des informations complémentaires dans des PractitionerRole ou Practitioner.

Imaginons que vous cherchiez les fiches de 2 structures avec pour leurs identifiants FINESS : 060016219 et 030782866

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/Organization?identifier=060016219,030782866&_pretty=true&_format=json"



Cette requête permet de récupérer toutes les Organizations ayant un identifier à : 060016219 OU 030782866.

La liste retournée contiendra plusieurs Organization si les identifiants FINESS 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?organization=001-01-1102727,001-01-1267408&_pretty=true&_format=json"



Trouver l’ensemble des EG d’un EJ

Cliquez ici pour accéder à l’exemple.