Ressources

Device


1) Description métier de la ressource

Il s’agit d’une ressource qui regroupe les données complémentaires FINESS portant sur les « équipements matériels lourds :

  • numéro d’autorisation ARGHOS, période de validité, marque, numéro de série, code EML


2) Caractéristiques techniques de la ressource

Endpoint

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

Header

ESANTE-API-KEY

Méthodes HTTP associées

GET, POST

Paramètres de requête

_count, _include


3) Paramètres de recherche

Nom Type Description
_id token Recherche sur l’ID de la ressource HealthCare Service
_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
_since date  
_total string  
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
device-name string Le nom de l’équipement
identifier token Recherche sur l’identifiant de l’équipement matériel lourd
manufacturer string Recherche sur la marque des équipements matériels lourds
model string Recherche sur le modèle des équipements matériels lourds
number-authorization-arhgos string Recherche sur le numéro d’autorisation ARHGOS
organization reference Recherche les équipements matériels lourds rattachés à la structure sélectionnée
status token active, inactive, entered-in-error, unknown
type token Recherche sur le type de l’équipement matériel lourd

4) Recherche d’équipement matériel lourd (EML) sur critères

Voici des exemples de requêtes sur les équipements matériels lourds.

4.1) Rechercher tout (sans critère)

Récit utilisateur : En tant que client de l’API, je souhaite récupérer l’ensemble des EML.

Exemples de requêtes :

GET [base]/Device
#récupère l'ensemble des Devices (incluant les actifs et les inactifs)
GET [base]/Device?_include=Device:organization #inclure les Organization qui sont référencées par les Devices (Device + Organization)
GET [base]/Device?_include=* #inclure toutes les ressources qui sont référencées par les Devices 



Réponse (simplifiée) : 

HTTP 200 OK
  resourceType: Bundle
  type: searchset
  Device found: id=002-3405564 AuthorizationARHGOS=76-91-1096
  Device found: id=002-3405565 AuthorizationARHGOS=44-21-35510
  Device found: id=002-3405566 AuthorizationARHGOS=44-21-50847



Exemples de code :

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

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

for (var deviceEntry : bundle.getEntry()) {
    // print Device data:
    var device = (Device) deviceEntry.getResource();
logger.info("Device found: id={} AuthorizationARHGOS={}", device.getIdElement().getIdPart(), device.getExtensionByUrl("https://apifhir.annuaire.sante.fr/ws-sync/exposed/structuredefinition/Device-numberAuthorizationARHGOS").getValue());
}
$response = $client->request('GET', '/fhir/v1/Device');
/** @var  $devices  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRBundle*/
$devices = $parser->parse((string) $response->getBody());
foreach($devices->getEntry() as $entry){
    /** @var  $device  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRDomainResource\FHIRDevice */
    $device = $entry->getResource();

    $extArhgos = getExtensionByUrl("https://apifhir.annuaire.sante.fr/ws-sync/exposed/structuredefinition/Device-numberAuthorizationARHGOS", $device->getExtension());
    echo("Device found: id=".$device->getId()." AuthorizationARHGOS=".$extArhgos->getValueString()."\n");
}
var client = FhirTestUtils.CreateClient();

var bundle = client.Search<Device>();
foreach (var be in bundle.Entry)
{
    // print ids:
    var device = be.Resource as Device;
    Console.WriteLine($"Device found: id={device.IdElement.Value} AuthorizationARHGOS={device.Extension.FindLast(e => e.Url.Equals("https://apifhir.annuaire.sante.fr/ws-sync/exposed/structuredefinition/Device-numberAuthorizationARHGOS")).Value}");
}


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

Récit utilisateur : En tant que client de l’API, je souhaite rechercher toutes les EML mise à jour depuis une certaine date.

Exemples de requêtes :

GET [base]/Device?_lastUpdated=ge2022-08-07 #Les Device ayant été mis à jour depuis le 07/08/2022 inclus



Réponse (simplifiée) : 

HTTP 200 OK
  resourceType: Bundle
  type: searchset
  Device found: id=002-3401015 AuthorizationARHGOS=32-31-1156
  Device found: id=002-3122325 AuthorizationARHGOS=93-93-4364
  Device found: id=002-3122046 AuthorizationARHGOS=93-93-67204



Exemples de code :

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

// create the date search parameter :
var dateParam = new DateClientParam("_lastUpdated");

var bundle = client.search()
.forResource(Device.class)
.where(dateParam.afterOrEquals().second("2022-08-07T14:51:04"))
.returnBundle(Bundle.class).execute();

for (var deviceEntry : bundle.getEntry()) {
    // print Device data:
    var device = (Device) deviceEntry.getResource();
    logger.info("Device found: id={} AuthorizationARHGOS={}", device.getIdElement().getIdPart(), device.getExtensionByUrl("https://apifhir.annuaire.sante.fr/ws-sync/exposed/structuredefinition/Device-numberAuthorizationARHGOS").getValue());
}
$response = $client->request('GET', '/fhir/v1/Device?_lastUpdated=ge2022-08-07T14%3A51%3A04');
/** @var  $devices  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRBundle*/
$devices = $parser->parse((string) $response->getBody());
foreach($devices->getEntry() as $entry){
    /** @var  $device  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRDomainResource\FHIRDevice */
    $device = $entry->getResource();

    $extArhgos = getExtensionByUrl("https://apifhir.annuaire.sante.fr/ws-sync/exposed/structuredefinition/Device-numberAuthorizationARHGOS", $device->getExtension());
    echo("Device found: id=".$device->getId()." AuthorizationARHGOS=".$extArhgos->getValueString()."\n");
}
// create the client:
var client = FhirTestUtils.CreateClient();

var q = new SearchParams()
   .Where("_lastUpdated=ge2022-08-07T14:51:04")
  .LimitTo(50);
var bundle = client.Search<Device>(q);
foreach (var be in bundle.Entry)
{
    // print ids:
    var device = be.Resource as Device;
    Console.WriteLine($"Device found: id={device.IdElement.Value} AuthorizationARHGOS={device.Extension.FindLast(e => e.Url.Equals("https://apifhir.annuaire.sante.fr/ws-sync/exposed/structuredefinition/Device-numberAuthorizationARHGOS")).Value}");
}


4.3) Rechercher un matériel par son numéro ARHGOS (number-authorization-arhgos)

Récit utilisateur : En tant que client de l’API, je souhaite rechercher un EML à partir de son numéro ARHGOS.

Exemples de requêtes :

GET [base]/Device?number-authorization-arhgos=93-93-67204 #Les device ayant le numéro ARHGOS = 93-93-67204



Réponse (simplifiée) : 

HTTP 200 OK
  resourceType: Bundle
  type: searchset
  total: 1
    Device found: id=002-3122046 type=05602



Exemples de code :

curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v1/Device?number-authorization-arhgos=93-93-67204"
// create the client:
var client = FhirTestUtils.createClient();

// create the type search parameter :
var arhgosParam = new StringClientParam("number-authorization-arhgos");

var bundle = client.search()
        .forResource(Device.class)
        .where(arhgosParam.contains().value("93-93-67204"))
        .returnBundle(Bundle.class).execute();

for (var deviceEntry : bundle.getEntry()) {
    // print Organization ids:
    var device = (Device) deviceEntry.getResource();
    logger.info("Device found: id={} type={}", device.getIdElement().getIdPart(), device.getType().getCodingFirstRep().getCode());
}
$response = $client->request('GET', '/fhir/v1/Device?number-authorization-arhgos=93-93-67204');
/** @var  $devices  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRBundle*/
$devices = $parser->parse((string) $response->getBody());
foreach($devices->getEntry() as $entry){
    /** @var  $device  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRDomainResource\FHIRDevice */
    $device = $entry->getResource();

    echo("Device found: id=".$device->getId()." type=".$device->getType()->getCoding()[0]->getCode()."\n");
}
// create the client:
var client = FhirTestUtils.CreateClient();

var q = new SearchParams()
   .Where("number-authorization-arhgos=93-93-67204")
  .LimitTo(50);
var bundle = client.Search<Device>(q);
foreach (var be in bundle.Entry)
{
    // print ids:
    var device = be.Resource as Device;
    Console.WriteLine($"Device found: id={device.IdElement.Value} AuthorizationARHGOS={device.Extension.FindLast(e => e.Url.Equals("https://apifhir.annuaire.sante.fr/ws-sync/exposed/structuredefinition/Device-numberAuthorizationARHGOS")).Value}");
}


4.4) Rechercher par type EML (type)

Récit utilisateur : En tant que client de l’API, je souhaite rechercher tous les EML de type “Scanographe à utilisation médicale”.

Remarque :

Les valeurs possibles du type EML sont disponibles dans le référentiel TRE_R272-EquipementMaterielLourd des NOS.

Exemples de requêtes :

GET [base]/Device?type=https%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R272-EquipementMaterielLourd%2FFHIR%2FTRE-R272-EquipementMaterielLourd%7C05602 #Critère de recherche sur le type EML



Réponse (simplifiée) : 

HTTP 200 OK
  resourceType: Bundle
  type: searchset
  Device found: id=002-3405555 | type=05602
  Device found: id=002-3405559 | type=05602
  Device found: id=002-3405562 | type=05602

  


Exemples de code :

curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v1/Device?type=https%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R272-EquipementMaterielLourd%2FFHIR%2FTRE-R272-EquipementMaterielLourd%7C05602"
// create the client:
var client = FhirTestUtils.createClient();

// create the type search parameter :
var typeSearchClause = Organization.TYPE.exactly().systemAndValues(
"https://mos.esante.gouv.fr/NOS/TRE_R272-EquipementMaterielLourd/FHIR/TRE-R272-EquipementMaterielLourd", "05602");

var bundle = client.search()
    .forResource(Device.class)
    .where(typeSearchClause)
    .returnBundle(Bundle.class).execute();

for (var deviceEntry : bundle.getEntry()) {
    // print Device data:
    var device = (Device) deviceEntry.getResource();
    logger.info("Device found: id={} | type={}", device.getIdElement().getIdPart(), device.getType().getCodingFirstRep().getCode());
}
$response = $client->request('GET', '/fhir/v1/Device?type=https%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R272-EquipementMaterielLourd%2FFHIR%2FTRE-R272-EquipementMaterielLourd%7C05602');
/** @var  $devices  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRBundle*/
$devices = $parser->parse((string) $response->getBody());
foreach($devices->getEntry() as $entry){
    /** @var  $device  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRDomainResource\FHIRDevice */
    $device = $entry->getResource();

    echo("Device found: id=".$device->getId()." type=".$device->getType()->getCoding()[0]->getCode()."\n");
}
// create the client:
var client = FhirTestUtils.CreateClient();

var q = new SearchParams()
   .Where("type=https://mos.esante.gouv.fr/NOS/TRE_R272-EquipementMaterielLourd/FHIR/TRE-R272-EquipementMaterielLourd|05602")
  .LimitTo(50);
var bundle = client.Search<Device>(q);
foreach (var be in bundle.Entry)
{
    // print Device data
    var device = be.Resource as Device;
    Console.WriteLine($"Device found: id={device.IdElement.Value}  | type={device.Type.Coding[0].Code}");
}


4.5) Rechercher par son identifiant (identifier)

Récit utilisateur : En tant que client de l’API, je souhaite rechercher un EML à partir de son identifiant.

Exemples de requêtes :

GET [base]/Device?v1/identifier=32-31-1156%2C93-93-4364 #Critère de recherche sur l'identifiant



Réponse (simplifiée) : 

HTTP 200 OK
  resourceType: Bundle
  type: searchset
  total: 1
    Device found: id=32-31-1156

  


Exemples de code :

curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v1/Device?v1/identifier=32-31-1156%2C93-93-4364"
// create the client:
var client = FhirTestUtils.createClient();

// create the identifier search parameters :
var identifierParams = Device.IDENTIFIER.exactly().codes("32-31-1156", "93-93-4364");

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

for (var deviceEntry : bundle.getEntry()) {
    // print Device data
    var device = (Device) deviceEntry.getResource();
    logger.info("Device found: id={}", device.getIdentifierFirstRep().getValue());
}
$response = $client->request('GET', '/fhir/v1/Device?identifier=32-31-1156%2C93-93-4364');
/** @var  $devices  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRBundle*/
$devices = $parser->parse((string) $response->getBody());
foreach($devices->getEntry() as $entry){
    /** @var  $device  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRDomainResource\FHIRDevice */
    $device = $entry->getResource();

    echo("Device found: id=".$device->getId()."\n");
}
// create the client:
var client = FhirTestUtils.CreateClient();

var q = new SearchParams()
   .Where("identifier=32-31-1156,93-93-4364")
  .LimitTo(50);
var bundle = client.Search<Device>(q);
foreach (var be in bundle.Entry)
{
    // print ids:
    var device = be.Resource as Device;
    Console.WriteLine($"Device found: id={device.IdElement.Value}");
}


4.6) Rechercher par statut (status)

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

Exemples de requêtes :

GET [base]/Device?status=active #actif
GET [base]/Device?status=inactive #inactif



Réponse (simplifiée) : 

HTTP 200 OK
  resourceType: Bundle
  type: searchset
    Device found: id=device-147 | status=Active
    Device found: id=device-389 | status=Active
    Device found: id=device-146 | status=Active



Exemples de code :

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

// create the active search parameters :
var activeParams = Device.STATUS.exactly().code(Device.FHIRDeviceStatus.ACTIVE.toCode());

var bundle = client.search()
        .forResource(Device.class)
        .where(activeParams)
        .returnBundle(Bundle.class).execute();

for (var deviceEntry : bundle.getEntry()) {
    // print Device data
    var device = (Device) deviceEntry.getResource();
    logger.info("Device found: id={} | status={}", device.getIdElement().getIdPart(), device.getStatus().getDisplay());
}
$response = $client->request('GET', '/fhir/v1/Device?status=active');
/** @var  $devices  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRBundle*/
$devices = $parser->parse((string) $response->getBody());
foreach($devices->getEntry() as $entry){
    /** @var  $device  \DCarbone\PHPFHIRGenerated\R4\FHIRResource\FHIRDomainResource\FHIRDevice */
    $device = $entry->getResource();

    echo("Device found: id=".$device->getId()." | status=".$device->getStatus()->getValue()."\n");
}
// create the client:
var client = FhirTestUtils.CreateClient();

var q = new SearchParams()
   .Where("status=active")
  .LimitTo(50);
var bundle = client.Search<Device>(q);
foreach (var be in bundle.Entry)
{
    // print Device data
    var device = be.Resource as Device;
    Console.WriteLine($"Device found: id={device.IdElement.Value}  | status={device.Status.Value}");
}


 

Code source des exemples

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