Ressources

Practitioner


1. Présentation de la ressource Practitioner

Il s’agit d’une ressource qui regroupe les données décrivant l’« exercice professionnel ». Les informations disponibles sont :

  • Données d’identification : identifiant RPPS - identifiant unique et pérenne de la personne dans le répertoire RPPS -, civilité d’exercice, civilité, etc.
  • Données de contact : Messageries Sécurisées de Santé (MSS), type de messagerie, etc.
  • Données relatives aux titres liés à l’exercice professionnel : diplôme, type de diplôme, attestation, certificat ou autre titres et autorisation d’exercice.

 

2. Caractéristiques techniques de la ressource

Endpoint

https://gateway.api.esante.gouv.fr/fhir/v2/Practitioner

Header

ESANTE-API-KEY

Méthodes HTTP associées

GET, POST

Paramètres de requête

_count, _revinclude

3. Paramètres de recherche (Search Parameter)

Nom Type Description
_id token Recherche sur l’ID technique de la ressource
_lastUpdated date renvoie uniquement les ressources selon la date de mises à jour et le “modifier” utilisé (eq, ne, gt, lt, ge, le, ap). Plus d’informations sur les [dates] (https://www.hl7.org/fhir/R4/search.html#date)
active token Recherche sur le statut de l’exercice professionnel (ouvert ou fermé)
data-information-system token Recherche sur le système d’informations
family string Recherche sur le nom d’exercice du professionnel
given string Recherche sur le prénom d’exercice du professionnel
identifier token Recherche sur l’identifiant métier du professionnel (RPPS, IDNPS - IDentifiant National du Professionnel de Santé)
identifier-type type Recherche sur le type d’identifiant du professionnel (soit RPPS, soit IDNPS)
mailbox-mss string Recherche sur la Messagerie Sécurisée de Santé (MSS) du Professionnel
name string Recherche sur le nom complet. Il peut contenir le préfixe correspondant à civilité du professionnel (ex: MME) ou le suffixe qui correspond à la civilité d’exercice (ex: DR)
number-smartcard string Recherche sur le numéro de carte des professionnels
qualification-code token Recherche sur le code des éléments suivants: diplôme, exercice professionnel, savoir-faire et type de savoir-faire

4. Recherche d’un professionnel sur des critères spécifiques

Voici des exemples de requêtes sur la recherche de professionnels intervenant dans le système de santé.

4.1 Rechercher tout (sans critère)

En tant que client de l’API, je souhaite récupérer l’ensemble des professionnels intervenant dans le système de santé.

Exemples de requêtes :

GET [base]/Practitioner
# récupère l'ensemble des exercices professionnels (incluant les actifs et les inactifs)

GET [base]/Practitioner?_revinclude=PractitionerRole:practitioner 
# récupère l'ensemble des exercices professionnels ainsi que les activités liées (Practitioner + PractitionerRole actifs et inactifs)


Exemples de code :

 curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v2/Practitioner" 
 

// Configuration du client
var client = FhirTestUtils.createClient();
var bundle = client.search().forResource(Practitioner.class).returnBundle(Bundle.class).execute();

for (var practitionerEntry : bundle.getEntry()) {

//  print les IDs Organizations:
var practitioner = (Practitioner) practitionerEntry.getResource();
logger.info("Practitioner found: id={} name={}", practitioner.getIdElement().getIdPart(), practitioner.getNameFirstRep().getNameAsSingleString());
}
 import requests from fhir.resources.fhirtypes import Bundle, Practitioner

# Configuration du client
api_url = "https://gateway.api.esante.gouv.fr/fhir/v2/Practitioner"
api_key = "XXXX-XXXX-XXXX-XXXXX"

headers = {
"ESANTE-API-KEY": api_key,
"Content-Type": "application/json"
}

# Fonction pour effectuer une requête FHIR
def fetch_practitioners():
response = requests.get(api_url, headers=headers)
if response.status_code == 200:
bundle = Bundle(**response.json())
for entry in bundle.entry:
practitioner = entry.resource
if isinstance(practitioner, Practitioner):
name = practitioner.name[0].text if practitioner.name else "Unknown"
print(f"Practitioner found: id={practitioner.id} name={name}")
else:
response.raise_for_status()

# Utilisation du client
fetch_practitioners()
 

// Configuration du client
var client = FhirTestUtils.CreateClient();
var bundle = client.Search<Practitioner>();
foreach (var be in bundle.Entry)
{

// Print les IDs:
var practitioner = be.Resource as Practitioner;
var name = "";
foreach (var n in practitioner.Name[0].Prefix) {
name = name + " " + n;
}
Console.WriteLine($"Practitioner found: id={practitioner.IdElement.Value} name={name}");
}


4.2 Rechercher par identifiant (identifier ou _id)

En tant que client de l’API, je souhaite vérifier l’identité d’un professionnel à partir de son identifiant.

Requête :

GET [base]/Practitioner?identifier=10001234567
# récupère le Practitioner par rapport à l'identifiant RPPS du professionnel

GET [base]/Practitioner?_id=003-32783-88722
# récupère le Practitioner par rapport à son identifiant technique

Exemples de code :

 curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v2/Practitioner?identifier=0012807590%2C810000005479" 
 

// Configuration du client
var client = FhirTestUtils.createClient();
var identifierParams = Practitioner.IDENTIFIER.exactly().codes("0012807590", "810000005479");

var bundle = client.search()
.forResource(Practitioner.class)
.where(identifierParams)
.returnBundle(Bundle.class).execute();

for (var practitionerEntry : bundle.getEntry()) {

// Print les IDs Organization:
var practitioner = (Practitioner) practitionerEntry.getResource();
logger.info("Practitioner found: id={} name={}", practitioner.getIdentifierFirstRep().getValue(), practitioner.getNameFirstRep().getNameAsSingleString());
}
 import requests from fhir.resources.fhirtypes import Bundle, Practitioner

# Configuration du client

api_url = "https://gateway.api.esante.gouv.fr/fhir/v2/Practitioner"
api_key = "XXXX-XXXX-XXXX-XXXXX"
identifiers = "0012807590,810000005479"

headers = {
"ESANTE-API-KEY": api_key,
"Content-Type": "application/json"
}

# Fonction pour effectuer une requête FHIR avec des identifiants spécifiques

def fetch_practitioners_by_identifier():
response = requests.get(f"{api_url}?identifier={identifiers}", headers=headers)
if response.status_code == 200:
bundle = Bundle(**response.json())
for entry in bundle.entry:
practitioner = entry.resource
if isinstance(practitioner, Practitioner):
name = practitioner.name[0].text if practitioner.name else "Unknown"
print(f"Practitioner found: id={practitioner.id} name={name}")
else:
response.raise_for_status()

# Utilisation du client

fetch_practitioners_by_identifier()
 

// Configuration du client
var client = FhirTestUtils.CreateClient();
var q = new SearchParams()
.Where("identifier=0012807590,810000005479")
.LimitTo(50);
var bundle = client.Search<Practitioner>(q);
foreach (var be in bundle.Entry)
{
// Print les IDs:
var practitioner = be.Resource as Practitioner;
var name = "";
foreach (var n in practitioner.Name[0].Prefix)
{
name = name + " " + n;
}
Console.WriteLine($"Practitioner found: id={practitioner.IdElement.Value} name={name}");
}


4.3. Rechercher par prénom et nom d’exercice

En tant que client de l’API, je souhaite rechercher tous les professionnels par rapport au prénom et nom d’exercice .

Requête :

GET [base]/Practitioner?name:family=MASI&name:given=BRUNO
# Récupère l'ensemble des Practitioners dont le nom d'exercice est MASI et le prénom d'exercice est Bruno

Exemples de code :

 curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v2/Practitioner?name:family=MASI&name:given=BRUNO" 
 

// Configuration du client

var client = FhirTestUtils.createClient();

// Configurer le paramètre de recherche:
var familyNameParam = Practitioner.NAME.exactly().family("MASI");
var givenNameParam = Practitioner.NAME.exactly().given("BRUNO");

var bundle = client.search()
        .forResource(Practitioner.class)
        .where(familyNameParam)
        .and(givenNameParam)
        .returnBundle(Bundle.class).execute();

for (var practitionerEntry : bundle.getEntry()) {

// Convertir l'entrée
    var practitioner = (Practitioner) practitionerEntry.getResource();

// Enregistrer le message d'information
    logger.info("Practitioner found: id={} name={}", practitioner.getIdElement().getIdPart(), practitioner.getNameFirstRep().getNameAsSingleString());
}
 import requests from fhir.resources.fhirtypes import Bundle, Practitioner

# Configuration du client
api_url = "https://gateway.api.esante.gouv.fr/fhir/v2/Practitioner"
api_key = "XXXX-XXXX-XXXX-XXXXX"
family_name = "MASI"
given_name = "BRUNO"

headers = {
"ESANTE-API-KEY": api_key,
"Content-Type": "application/json"
}

# Fonction pour effectuer une requête FHIR avec un prénom et un nom d'exercice
def fetch_practitioners_by_name():
response = requests.get(f"{api_url}?name:family={family_name}&name:given={given_name}", headers=headers)
if response.status_code == 200:
bundle = Bundle(**response.json())
for entry in bundle.entry:
practitioner = entry.resource
if isinstance(practitioner, Practitioner):
name = practitioner.name[0].text if practitioner.name else "Unknown"
print(f"Practitioner found: id={practitioner.id} name={name}")
else:
response.raise_for_status()

# Utilisation du client
fetch_practitioners_by_name()
 

// Configuration du client 
var client = FhirTestUtils.CreateClient();
var q = new SearchParams()
.Where("name:family=MASI")
.And("name:given=BRUNO")
.LimitTo(50);
var bundle = client.Search<Practitioner>(q);
foreach (var be in bundle.Entry)
{

// Enregistrer les IDs
var practitioner = be.Resource as Practitioner;
var name = practitioner.Name[0].Given.FirstOrDefault() + " " + practitioner.Name[0].Family;
Console.WriteLine($"Practitioner found: id={practitioner.IdElement.Value} name={name}");
}



4.4 Rechercher par statut (active)

En tant que client de l’API, je souhaite rechercher tous les professionnels de santé actifs.

Requête :

GET [base]/Practitioner?active=true
# récupère l'ensemble des Practitioners qui ont un exercice professionnel actif

Exemples de code :

 curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v1/Practitioner?active=true" 
 

// Configuration du client
var client = FhirTestUtils.createClient();
var activeSearchClause = Practitioner.ACTIVE.exactly().code("true");

var bundle = client.search()
.forResource(Practitioner.class)
.where(activeSearchClause)
.returnBundle(Bundle.class).execute();

for (var practitionerEntry : bundle.getEntry()) {

// Enregistrer les IDs Organization
var practitioner = (Practitioner) practitionerEntry.getResource();
logger.info("Practitioner found: name={} | active={}", practitioner.getNameFirstRep().getNameAsSingleString(), practitioner.getActive());
}
 import requests from fhir.resources.fhirtypes import Bundle, Practitioner

# Configuration du client
api_url = "https://gateway.api.esante.gouv.fr/fhir/v1/Practitioner"
api_key = "XXXX-XXXX-XXXX-XXXXX"

headers = {
"ESANTE-API-KEY": api_key,
"Content-Type": "application/json"
}

# Fonction pour effectuer une requête FHIR pour les professionnels actifs
def fetch_active_practitioners():
response = requests.get(f"{api_url}?active=true", headers=headers)
if response.status_code == 200:
bundle = Bundle(**response.json())
for entry in bundle.entry:
practitioner = entry.resource
if isinstance(practitioner, Practitioner):
name = practitioner.name[0].text if practitioner.name else "Unknown"
active_status = practitioner.active
print(f"Practitioner found: name={name} | active={active_status}")
else:
response.raise_for_status()

# Utilisation du client
fetch_active_practitioners()
 

// Configuration du client
var client = FhirTestUtils.CreateClient();
var q = new SearchParams()
.Where("active=true")
.LimitTo(50);
var bundle = client.Search<Practitioner>(q);
foreach (var be in bundle.Entry)
{

// Enregistrer les IDs
var practitioner = be.Resource as Practitioner;
Console.WriteLine($"Practitioner found: id={practitioner.IdElement.Value} | active={practitioner.Active.Value}");
}


4.5 Rechercher par date de mise à jour (_lastUpdated)

En tant que client de l’API, je souhaite rechercher tous les exercices professionnels mis à jour depuis une certaine date.

Requête :

GET [base]/Practitioner?_lastUpdated=ge2024-08-30
# Récupère tous les Practitioners mis à jour à partir du 30 août 2024 (inclus) jusqu'à aujourd'hui


Exemples de code :

curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v2/Practitioner?_lastUpdated=ge2022-08-08T06%3A47%3A02"
// Configuration du client
var client = FhirTestUtils.createClient();

// Enregistrement des paramètres de recherche Date
var dateParam = new DateClientParam("_lastUpdated");

var bundle = client.search()
        .forResource(Practitioner.class)
        .where(dateParam.afterOrEquals().second("2022-08-08T06:47:02"))
        .returnBundle(Bundle.class).execute();

for (var practitionerEntry : bundle.getEntry()) {
// Convertir les entrées
    var practitioner = (Practitioner) practitionerEntry.getResource();

//  Print les dates de mises à jour et ID
    logger.info("Practitioner found: id={} | lastUpdate={}", practitioner.getIdElement().getIdPart(), practitioner.getMeta().getLastUpdated());
}
import requests
from fhir.resources.fhirtypes import Bundle, Practitioner

# Configuration du client
api_url = "https://gateway.api.esante.gouv.fr/fhir/v2/Practitioner"
api_key = "XXXX-XXXX-XXXX-XXXXX"
last_updated = "ge2022-08-08T06:47:02"

headers = {
    "ESANTE-API-KEY": api_key,
    "Content-Type": "application/json"
}

# Fonction pour effectuer une requête FHIR avec une date de mise à jour
def fetch_practitioners_by_last_updated():
    response = requests.get(f"{api_url}?_lastUpdated={last_updated}", headers=headers)
    if response.status_code == 200:
        bundle = Bundle(**response.json())
        for entry in bundle.entry:
            practitioner = entry.resource
            if isinstance(practitioner, Practitioner):
                last_update = practitioner.meta.lastUpdated if practitioner.meta else "Unknown"
                print(f"Practitioner found: id={practitioner.id} | lastUpdate={last_update}")
    else:
        response.raise_for_status()

# Utilisation du client
fetch_practitioners_by_last_updated()
// Configuration du client
var client = FhirTestUtils.CreateClient();

var q = new SearchParams()
  .Where("_lastUpdated=ge2022-08-08T06:47:02")
  .LimitTo(50);
var bundle = client.Search<Practitioner>(q);
foreach (var be in bundle.Entry)
{

// Print les IDs
    var practitioner = be.Resource as Practitioner;
    Console.WriteLine($"Practitioner found: id={practitioner.IdElement.Value} | lastUpdate={practitioner.Meta.LastUpdated}");
}


4.6 Rechercher par profession

En tant que client de l’API, je souhaite rechercher tous les professionnels dont la profession est Pharmacien

Requête :

GET [base]/Practitioner?qualification-code=21
# Récupère tous les professionnels dont la profession est pharmacien (code 21)

GET [base]/Practitioner?qualification-code=https://mos.esante.gouv.fr/NOS/TRE_G15-ProfessionSante/FHIR/TRE-G15-ProfessionSante%7C21
# Récupère tous les professionnels dont la profession est pharmacien en indiquant la TRE (Table de REférence)


4.7 Rechercher par spécialité

En tant que client de l’API, je souhaite rechercher tous les professionnels dont la spécialité est Pneumologie (SM41)

Requête :

GET [base]/Practitioner?qualification-code=SM41
# Récupère tous les professionnels dont la spécialité est Pneumologie (SM41)

GET [base]/Practitioner?qualification-code=https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale%7CSM41
# Récupère tous les professionnels dont la spécialité est Pneumologie (SM41) en indiquant la TRE


4.8 Rechercher par catégorie professionnelle

En tant que client de l’API, je souhaite rechercher tous les professionnels selon la catégorie professionnelle. Pour plus d’informations, consulter le lien suivant.

Requête :

GET [base]/Practitioner?qualification-code=C
# Récupère tous les professionnels dont la catégorie professionnelle est Civil (code: C)

GET [base]/Practitioner?qualification-code=https://mos.esante.gouv.fr/NOS/TRE_R09-CategorieProfessionnelle/FHIR/TRE-R09-CategorieProfessionnelle%7CC
# Récupère tous les professionnels dont la catégorie professionnelle est Civil (code: C) en indiquant la TRE


Code source des exemples

Vous retrouverez le code source de ces exemples sur notre repository git: