Ressources
Paramètres de recherche communs
Lien vers la spécification FHIR : https://hl7.org/FHIR/search.html
1) Paramètres de recherche communs disponibles
Pour connaitre les différents paramètres de recherche pris en charge par le serveur FHIR, il est possible d’interroger le Capability Statement (metadata).
Requête :
GET [base]/metadata
2) Paramètres de type texte (string)
Les recherchers de type texte peuvent s’effectuer sur les différentes ressources disponibles.
Requête :
`GET [base]/Organization?name=Renard`
# Rechercher sur la raison sociale d'une structure
Exemples de code :
curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v2/Organization?name=Renard"// create the client:
var client = FhirTestUtils.createClient();
// create the name search parameter :
var matchSearchClause = Organization.NAME.matches().value("Renard");
var bundle = client.search()
.forResource(Organization.class)
.where(matchSearchClause)
.returnBundle(Bundle.class).execute();
for (var organizationEntry : bundle.getEntry()) {
// cast entry :
var organization = (Organization) organizationEntry.getResource();
// print data :
logger.info("Organization found: name={}", organization.getName());
}// create the client:
var client = FhirTestUtils.CreateClient();
// create the name search parameter :
var q = new SearchParams()
.Where("name=Renard")
.LimitTo(50);
var bundle = client.Search<Organization>(q);
foreach (var be in bundle.Entry)
{
// print ids:
var organization = be.Resource as Organization;
Console.WriteLine($"Organization found: name={organization.Name}");
}
Il est également possible sur des attributs de type texte (String) d’utiliser les modifiers contains et exact pour affiner la recherche :
Requêtes :
GET [base]/Organization?name%3Acontains=MIGNOT
# Le modificateur :contains retourne les résultats qui incluent la valeur MIGNOT n'importe où dans le champ recherché.
GET [base]/Organization?name%3Aexact=MIGNOT
# Le modificateur :exact retourne les résultats qui correspondent exactement à l'ensemble du paramètre fourni, y compris la casse et les accents.
Exemples de code :
curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v2/Organization?name%3Acontains=MIGNOT"// create the client:
var client = FhirTestUtils.createClient();
// create the name search parameter :
var containsSearchClause = Organization.NAME.contains().value("MIGNOT");
var bundle = client.search()
.forResource(Organization.class)
.where(containsSearchClause)
.returnBundle(Bundle.class).execute();
for (var organizationEntry : bundle.getEntry()) {
// cast entry :
var organization = (Organization) organizationEntry.getResource();
// print data :
logger.info("Organization found: name={}", organization.getName());
}// create the client:
var client = FhirTestUtils.CreateClient();
// create the name search parameter :
var q = new SearchParams()
.Where("name:contains=MIGNOT")
.LimitTo(50);
var bundle = client.Search<Organization>(q);
foreach (var be in bundle.Entry)
{
// print ids:
var organization = be.Resource as Organization;
Console.WriteLine($"Organization found: name={organization.Name}");
}3) Paramètres de type token
Les paramètres de recherche de type TOKEN permettent de rechercher en fonction :
- du Code Système
- de l’identifiant (ou code)
- ou des deux
Recherche par code
Requête :
GET [base]/Organization?identifier=https%3A%2F%2Ffiness.esante.gouv.fr%7C
# Rechercher par rapport au code système de FINESS. Cela permettra de remonter l'ensemble des structures provenant du SI (Système d'Information) de FINESS.
GET [base]/Organization?identifier=org-org-148
# Rechercher par rapport à l'identifiant de la structure org-org-148.
GET [base]/PractitionerRole?role=https%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R85-RolePriseCharge%2FFHIR%2FTRE-R85-RolePriseCharge%7C318
# Rechercher par rapport au code système TRE R85 Role Prise Charge et en filtrant sur le code 318 correspondant aux Auxiliaires de vie
Exemples de code :
curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v2/Organization?identifier=org-org-148"// create the client:
var client = FhirTestUtils.createClient();
// create the name search parameter :
var tokenSearchClause = Organization.IDENTIFIER.exactly().code("org-org-148");
var bundle = client.search()
.forResource(Organization.class)
.where(tokenSearchClause)
.returnBundle(Bundle.class).execute();
for (var organizationEntry : bundle.getEntry()) {
// cast entry :
var organization = (Organization) organizationEntry.getResource();
// print data :
logger.info("Organization found: id={} name={}", organization.getIdElement().getIdPart(), organization.getName());
}// create the client:
var client = FhirTestUtils.CreateClient();
// create the name search parameter :
var q = new SearchParams()
.Where("identifier=org-org-148")
.LimitTo(50);
var bundle = client.Search<Organization>(q);
foreach (var be in bundle.Entry)
{
// print ids:
var organization = be.Resource as Organization;
Console.WriteLine($"Organization found: id={organization.IdElement.Value} name={organization.Name}");
}4) Paramètres de type date
La recherche par date supporte les préfixes suivants:
| Préfix | Nom | Description |
|---|---|---|
| eq | equal | La valeur du paramètre dans la ressource est égale à la valeur saisie |
| ne | not equal | La valeur du paramètre dans la ressource n’est pas égale à la valeur saisie |
| gt | greater | La valeur du paramètre dans la ressource est supérieure à la valeur saisie |
| lt | less | La valeur du paramètre dans la ressource est inférieure à la valeur saisie |
| ge | greater or equal | La valeur du paramètre dans la ressource est supérieure ou égale à la valeur saisie |
| le | less or equal | La valeur du paramètre dans la ressource est inférieure ou égale à la valeur saisie |
| sa | starts after | La valeur du paramètre dans la ressource démarre après la valeur saisie |
| eb | ends before | La valeur du paramètre dans la ressource termine avant la valeur saisie |
| ap | approximately | La valeur du paramètre dans la ressource est approximativement la même que la valeur fournie. Il est à noter que la valeur recommandée pour l’approximation est de 10% de la valeur indiquée |
Plus d’informations sur les [dates] (https://build.fhir.org/search.html#date)
Plusiseurs “précisions” sont supportées : yyyy par année, yyyy-MM-dd par jour, et par date complète.
Quelques exemples :
- _lastUpdated=gt2020 : après 2020
- _lastUpdated=ge2020 : 2020 et après (2020 inclus)
- _lastUpdated=lt2022-12-15 : avant le 15 décembre 2022 exclus
- _lastUpdated=lt2022-12-15T15:00:00 : avant le 15 décembre 2022 15h (GMT)
- _lastUpdated=eq2021 : durant l’année 2021
Requête :
GET [base]/Organization?_lastUpdated=ge2022-08-05T14%3A51%3A04
Exemples de code :
curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v2/Organization?_lastUpdated=ge2022-08-05T14%3A51%3A04" // create the client:
var client = FhirTestUtils.createClient();
// create the date search parameter :
var dateParam = new DateClientParam("_lastUpdated");
var bundle = client.search()
.forResource(Organization.class)
.where(dateParam.afterOrEquals().second("2022-08-05T14:51:04"))
.returnBundle(Bundle.class).execute();
for(var organizationEntry : bundle.getEntry()){
// cast entry :
var organization = (Organization) organizationEntry.getResource();
// print update date & id :
logger.info("Organization found: id={} lastUpdate={}", organization.getIdElement().getIdPart(), organization.getMeta().getLastUpdated());
}// create the client:
var client = FhirTestUtils.CreateClient();
// create the name search parameter :
var q = new SearchParams()
.Where("_lastUpdated=ge2022-08-05T14:51:04")
.LimitTo(50);
var bundle = client.Search<Organization>(q);
foreach (var be in bundle.Entry)
{
// print ids:
var organization = be.Resource as Organization;
Console.WriteLine($"Organization found: id={organization.IdElement.Value} lastUpdate={organization.Meta.LastUpdated.Value}");
}7) Paramètres combinés
Les paramètres combinés permettent d’effectuer des recherches en les cumulant. Ce cumul se fait de manière inclusive ou alternative.
7.1) Paramètres ET (AND)
Requête :
GET [base]/Organization?name:contains=ANDRE&name:contains=MIGNOT
Exemples de code:
curl -H# "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v2/Organization?name%3Acontains=ANDRE&name%3Acontains=MIGNOT"// create the client:
var client = FhirTestUtils.createClient();
// create the two name search parameters :
var firstSearchClause = Organization.NAME.contains().value("ANDRE");
var secondSearchClause = Organization.NAME.contains().value("MIGNOT");
var bundle = client.search()
.forResource(Organization.class)
.where(firstSearchClause)
.and(secondSearchClause)
.returnBundle(Bundle.class).execute();
for (var organizationEntry : bundle.getEntry()) {
// cast entry :
var organization = (Organization) organizationEntry.getResource();
// print data :
logger.info("Organization found: id={} | name={}", organization.getIdElement().getIdPart(), organization.getName());
}// create the client:
var client = FhirTestUtils.CreateClient();
// create the name search parameter :
var q = new SearchParams()
.Where("name:contains=ANDRE").Add("name:contains", "MIGNOT")
.LimitTo(50);
var bundle = client.Search<Organization>(q);
foreach (var be in bundle.Entry)
{
// print ids:
var organization = be.Resource as Organization;
Console.WriteLine($"Organization found: id={organization.IdElement.Value} | name={organization.Name}");
}7.2) Paramètres OU (OR)
Requête :
GET [base]/Organization?name%3Acontains=ANDRE%2CMIGNOT
Exemples de code:
curl -H "ESANTE-API-KEY: XXXX-XXXX-XXXX-XXXXX" "https://gateway.api.esante.gouv.fr/fhir/v2/Organization?name%3Acontains=ANDRE%2CMIGNOT"// create the client:
var client = FhirTestUtils.createClient();
// create the two name search parameters :
var orSearchClause = Organization.NAME.contains().values("ANDRE", "MIGNOT");
var bundle = client.search()
.forResource(Organization.class)
.where(orSearchClause)
.returnBundle(Bundle.class).execute();
for (var organizationEntry : bundle.getEntry()) {
// cast entry :
var organization = (Organization) organizationEntry.getResource();
// print data :
logger.info("Organization found: id={} | name={}", organization.getIdElement().getIdPart(), organization.getName());
}// create the client:
var client = FhirTestUtils.CreateClient();
// create the name search parameter :
var q = new SearchParams()
.Where("name:contains=ANDRE,MIGNOT")
.LimitTo(50);
var bundle = client.Search<Organization>(q);
foreach (var be in bundle.Entry)
{
// print ids:
var organization = be.Resource as Organization;
Console.WriteLine($"Organization found: id={organization.IdElement.Value} | name={organization.Name}");
}