Ressources

Practitioner

L'API FHIR V1 est dépréciée et sera prochainement décommissionnée. Nous vous encourageons à passer sur la version 2 de l'API FHIR.


1) Description métier de la ressource

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

  • Données d’identification : numéro RPPS (identifiant unique et pérenne de la personne dans le répertoire), numéro ADELI, civilité ou tout autre identifiant permettant, le cas échéant, d’assurer la transition des systèmes vers une identification par le numéro RPPS
  • Données de contact : adresse de messagerie électronique (MSS).
  • Données relatives aux titres liés à l’exercice professionnel : intitulé de diplôme, attestation, certificat ou autre titre et autorisation d’exercice.


Note : Le nom et le prénom d'exercice du professionnel sont restitués au niveau de la ressource « PractitionerRole ».


2) Caractéristiques techniques de la ressource

Endpoint

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

Header

ESANTE-API-KEY

Méthodes HTTP associées

GET, POST

Paramètres de requête

_count, _include, _revinclude


3) Paramètres de recherche

Nom Type Description
_id token ID de la ressource
_lastUpdated date renvoie uniquement les ressources qui ont été mises à jour pour la dernère fois comme spécifié par la période donnée (eq, ne, gt, lt, ge, le, ap). Plus d’informations sur les [dates] (https://build.fhir.org/search.html#date)
_since date  
_total string  
active token Recherche les ressources Practitioner actives
as-sp-data-information-system token Recherche sur le système d’information
as-sp-data-registration-authority token Recherche sur l’autorité d’enregistrement
identifier token Recherche sur tous les identifiants des professionnels intervenant dans le système de santé
identifier-type token Recherche sur les types d’identifiants (RPPS, IDNPS - IDentifiant National du Professionnel intervenant dans le système de Santé
mailbox-mss string La Messagerie Sécurisées de Santé du Professionnel
name string Une recherche définie par le serveur qui peut correspondre à n’importe quel champ de HumanName, ici sur le préfix correspondant à la civilité des professionnels de santé

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)

Contexte: 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 practitioners (incluant les actifs et les inactifs)

GET [base]/Practitioner?_revinclude=PractitionerRole:practitioner 
#inclure les practitionerRole qui référencent les practitioners (Practitioner + PractitionerRole)


Exemples de code :

curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v1/Practitioner"
// create the client:
var client = FhirTestUtils.createClient();

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

for (var practitionerEntry : bundle.getEntry()) {
    // print Organization ids:
    var practitioner = (Practitioner) practitionerEntry.getResource();
    logger.info("Practitioner found: id={} name={}", practitioner.getIdElement().getIdPart(), practitioner.getNameFirstRep().getNameAsSingleString());
}
$response = $client->request('GET', '/fhir/v1/Practitioner?identifier=0012807590%2C810000005479');
/** @var  $devices  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRBundle*/
$practitioners = $parser->parse((string) $response->getBody());
foreach($practitioners->getEntry() as $entry){
    /** @var  $practitioner  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRDomainResource\FHIRPractitioner */
    $practitioner = $entry->getResource();

    echo("Practitioner found: id=".$practitioner->getId()." name=".$practitioner->getName()[0]->getPrefix()[0]->getValue()."\n");
}
// create the client:
var client = FhirTestUtils.CreateClient();

var bundle = client.Search<Practitioner>();
foreach (var be in bundle.Entry)
{
    // print 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)

Récit utilisateur : 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=0012807590

Exemples de code :

curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v1/Practitioner?identifier=0012807590%2C810000005479"
// create the 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 Organization ids:
var practitioner = (Practitioner) practitionerEntry.getResource();
logger.info("Practitioner found: id={} name={}", practitioner.getIdentifierFirstRep().getValue(), practitioner.getNameFirstRep().getNameAsSingleString());
}
$response = $client->request('GET', '/fhir/v1/Practitioner?identifier=0012807590%2C810000005479');
/** @var  $devices  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRBundle*/
$practitioners = $parser->parse((string) $response->getBody());
foreach($practitioners->getEntry() as $entry){
    /** @var  $practitioner  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRDomainResource\FHIRPractitioner */
    $practitioner = $entry->getResource();

    echo("Practitioner found: id=".$practitioner->getId()." name=".$practitioner->getName()[0]->getPrefix()[0]->getValue()."\n");
}
// create the 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 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 statut (active)

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

Requête :

GET [base]/Practitioner?active=true

Exemples de code :

curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v1/Practitioner?active=true"
// create the 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()) {
// print Organization ids:
var practitioner = (Practitioner) practitionerEntry.getResource();
logger.info("Practitioner found: name={} | active={}", practitioner.getNameFirstRep().getNameAsSingleString(), practitioner.getActive());
}
$response = $client->request('GET', '/fhir/v1/Practitioner?active=true');
/** @var  $devices  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRBundle*/
$practitioners = $parser->parse((string) $response->getBody());
foreach($practitioners->getEntry() as $entry){
    /** @var  $practitioner  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRDomainResource\FHIRPractitioner */
    $practitioner = $entry->getResource();

    echo("Practitioner found: name=".$practitioner->getName()[0]->getPrefix()[0]->getValue()." | active=". $practitioner->getActive(). "\n");
}
// create the 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)
{
    // print ids:
    var practitioner = be.Resource as Practitioner;
    Console.WriteLine($"Practitioner found: id={practitioner.IdElement.Value} | active={practitioner.Active.Value}");
}


4.4) Rechercher par date de mise à jour (_lastUpdated)

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

Requête :

GET [base]/Practitioner?_lastUpdated=ge2025-08-08

Exemples de code :

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

// create the date search parameter :
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()) {
    // cast entry :
    var practitioner = (Practitioner) practitionerEntry.getResource();
    // print update date & id :
    logger.info("Practitioner found: id={} | lastUpdate={}", practitioner.getIdElement().getIdPart(), practitioner.getMeta().getLastUpdated());
}
$response = $client->request('GET', '/fhir/v1/Practitioner?_lastUpdated=ge2022-08-08T06%3A47%3A02');
/** @var  $devices  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRBundle*/
$practitioners = $parser->parse((string) $response->getBody());
foreach($practitioners->getEntry() as $entry){
    /** @var  $practitioner  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRDomainResource\FHIRPractitioner */
    $practitioner = $entry->getResource();

    echo("Practitioner found: id=".$practitioner->getId()." | lastUpdate=".$practitioner->getMeta()->getLastUpdated()."\n");
}
// create the 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 ids:
    var practitioner = be.Resource as Practitioner;
    Console.WriteLine($"Practitioner found: id={practitioner.IdElement.Value} | lastUpdate={practitioner.Meta.LastUpdated}");
}


Code source des exemples

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