Ressources
Device
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 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: