Exemples de recherche FHIR
Vous trouverez ci-dessous quelques exemples d’appels d’API de recherche FHIR® (Fast Healthcare Interoperability Resources) avec différents paramètres de recherche, modificateurs, recherches chaînées et chaînées inversées, recherches composites, POST
demandes de recherche, etc. Pour une présentation générale des concepts de recherche FHIR, consultez Vue d’ensemble de la recherche FHIR.
Paramètres des résultats de la recherche
_include
_include
vous permet de rechercher des instances de ressources et d’inclure dans les résultats d’autres ressources référencées par les instances de ressource cible. Par exemple, vous pouvez utiliser _include
pour MedicationRequest
rechercher des ressources et limiter la recherche aux ordonnances d’un patient spécifique. Le service FHIR retourne ensuite les MedicationRequest
ressources ainsi que la ressource référencée Patient
. Dans l’exemple ci-dessous, la demande extrait toutes les MedicationRequest
instances de ressources de la base de données et tous les patients référencés par les MedicationRequest
instances :
GET {{FHIR_URL}}/MedicationRequest?_include=MedicationRequest:patient
Notes
Le service FHIR dans Azure Health Data Services limite les recherches avec _include
et _revinclude
à retourner un maximum de 100 éléments.
_revinclude
_revinclude
vous permet de rechercher des instances de ressources et d’inclure dans les résultats d’autres ressources qui référencent les instances de ressource cible. Par exemple, vous pouvez rechercher des patients, puis inverser l’ensemble des rencontres qui référencent les patients :
GET {{FHIR_URL}}/Patient?_revinclude=Encounter:subject
_elements
_elements
restreint les informations contenues dans les résultats de la recherche à un sous-ensemble des éléments définis pour un type de ressource. Le _elements
paramètre accepte une liste séparée par des virgules d’éléments de base :
GET {{FHIR_URL}}/Patient?_elements=identifier,active
Dans la demande ci-dessus, vous recevrez un lot de patients, mais chaque entrée n’inclura que les identificateurs et l’état actif du patient. Les entrées de la réponse contiennent une meta.tag
valeur de SUBSETTED
pour indiquer que tous les éléments définis pour la ressource ne sont pas inclus.
Modificateurs de recherche
:not
:not
vous permet de rechercher des ressources avec un élément qui n’a pas de valeur donnée. Par exemple, vous pouvez rechercher des patients qui ne sont pas des femmes :
GET {{FHIR_URL}}/Patient?gender:not=female
En retour, vous obtenez toutes les ressources dont gender
la Patient
valeur d’élément n’est pas female
, y compris les patients sans valeur de sexe spécifiée. Cela est différent de la recherche Patient
de ressources avec la male
valeur de genre, car cela ignorerait les patients sans sexe spécifié.
:missing
:missing
retourne toutes les ressources qui n’ont pas de valeur pour l’élément spécifié lorsque :missing=true
. En outre, :missing
retourne toutes les ressources qui contiennent l’élément spécifié lorsque :missing=false
. Pour les éléments de type de données simples, :missing=true
correspond à toutes les ressources où un élément est présent, mais dont la valeur est vide. Par exemple, si vous souhaitez rechercher toutes les Patient
ressources qui manquent d’informations sur birthdate
, vous pouvez appeler :
GET {{FHIR_URL}}/Patient?birthdate:missing=true
:exact
:exact
est utilisé pour rechercher des éléments avec string
des types de données et retourne positif si la valeur du paramètre correspond exactement à la casse et à la séquence de caractères complète de la valeur de l’élément.
GET {{FHIR_URL}}/Patient?name:exact=Jon
Cette requête retourne des Patient
ressources qui ont le given
nom ou family
de Jon
. S’il y avait des patients avec des noms tels que Jonathan
ou JON
, la recherche ignorerait ces ressources, car leurs noms ne correspondent pas exactement à la valeur spécifiée.
:contains
:contains
est utilisé pour interroger les string
éléments de type et autorise les correspondances avec la valeur spécifiée n’importe où dans le champ.
contains
ne respecte pas la casse et reconnaît les chaînes correspondantes concaténées avec d’autres caractères. Par exemple :
GET {{FHIR_URL}}/Patient?address:contains=Meadow
Cette requête retourne toutes les Patient
ressources avec des champs d’élément address
qui contiennent la chaîne « Meadow » (sans respect de la casse). Cela signifie que vous pouvez avoir des adresses avec des valeurs telles que « Meadows Lane », « Pinemeadow Place » ou « Meadowlark St » qui retournent des correspondances positives.
Recherche chaînée
Pour effectuer des opérations de recherche qui couvrent des éléments contenus dans une ressource référencée, vous pouvez « chaîner » une série de paramètres avec .
. Par exemple, si vous souhaitez afficher toutes les DiagnosticReport
ressources avec une subject
référence à un patient spécifié par name
:
GET {{FHIR_URL}}/DiagnosticReport?subject:Patient.name=Sarah
Cette demande retournerait toutes les DiagnosticReport
ressources avec un sujet patient nommé « Sarah ». Pointe .
la recherche chaînée vers l’élément name
au sein de la ressource référencée Patient
.
Une autre utilisation courante de la recherche FHIR est la recherche de toutes les rencontres pour un patient spécifique. Pour effectuer une recherche régulière (non chaînée) de Encounter
ressources qui référencent un Patient
avec un donné id
:
GET {{FHIR_URL}}/Encounter?subject=Patient/78a14cbe-8968-49fd-a231-d43e6619399f
À l’aide de la recherche chaînée, vous pouvez trouver toutes les Encounter
ressources qui référencent des patients dont les détails correspondent à un paramètre de recherche. L’exemple ci-dessous montre comment rechercher des rencontres référençant des patients restreints par birthdate
:
GET {{FHIR_URL}}/Encounter?subject:Patient.birthdate=1987-02-20
Cela retourne toutes les instances qui référencent des Encounter
patients avec la valeur spécifiée birthdate
.
En outre, vous pouvez lancer plusieurs recherches chaînées à l’aide de l’opérateur &
, qui permet de rechercher plusieurs références dans une seule requête. Dans ce cas, avec &
, la recherche chaînée analyse « indépendamment » pour chaque valeur d’élément :
GET {{FHIR_URL}}/Patient?general-practitioner:Practitioner.name=Sarah&general-practitioner:Practitioner.address-state=WA
Cela retournerait toutes les Patient
ressources qui ont une référence à « Sarah » en plus generalPractitioner
une référence à un generalPractitioner
qui a une adresse dans l’État de Washington. En d’autres termes, si un patient avait une generalPractitioner
Sarah nommée de l’État de New York et un autre generalPractitioner
nommé Bill de l’État de Washington, cela remplirait les conditions d’une correspondance positive lors de cette recherche.
Pour les scénarios dans lesquels la recherche nécessite une condition AND logique qui vérifie strictement les valeurs d’éléments jumelés, reportez-vous aux exemples de recherche composite ci-dessous.
Recherche chaînée inversée
L’utilisation de la recherche chaînée inversée dans FHIR vous permet de rechercher des instances de ressources cibles référencées par d’autres ressources. En d’autres termes, vous pouvez rechercher des ressources en fonction des propriétés des ressources qui y font référence. Cette opération est effectuée avec le _has
paramètre . Par exemple, la Observation
ressource a un paramètre patient
de recherche qui recherche une référence à une Patient
ressource. Pour rechercher toutes les Patient
ressources référencées par un Observation
avec un spécifique code
:
GET {{FHIR_URL}}/Patient?_has:Observation:patient:code=527
Cette requête retourne les Patient
ressources référencées par Observation
les ressources avec le code 527
.
En outre, la recherche chaînée inversée peut avoir une structure récursive. Par exemple, si vous souhaitez rechercher tous les patients référencés par un Observation
, où l’observation est référencée par un d’un AuditEvent
praticien spécifique nommé janedoe
:
GET {{FHIR_URL}}/Patient?_has:Observation:patient:_has:AuditEvent:entity:agent:Practitioner.name=janedoe
Recherche composite
Pour rechercher des ressources qui contiennent des éléments regroupés sous forme de paires logiquement connectées, FHIR définit la recherche composite, qui joint des valeurs de paramètre uniques à l’opérateur $
, formant une paire de paramètres connectée. Dans une recherche composite, une correspondance positive se produit lorsque l’intersection de valeurs d’élément satisfait à toutes les conditions définies dans les paramètres de recherche associés. Par exemple, si vous souhaitez rechercher toutes les DiagnosticReport
ressources qui contiennent une valeur de potassium inférieure 9.2
à :
GET {{FHIR_URL}}/DiagnosticReport?result.code-value-quantity=2823-3$lt9.2
Les éléments associés dans ce cas sont l’élément code
(à partir d’une Observation
ressource référencée comme le result
) et l’élément value
connecté à .code
En suivant le code avec l’opérateur $
, la value
condition est définie sur lt
(pour « inférieur à ») 9.2
(pour la valeur mmol/L de potassium).
Les paramètres de recherche composite peuvent également être utilisés pour filtrer plusieurs quantités de valeurs de code de composant avec une OR logique. Par exemple, pour interroger les observations avec une pression artérielle diastolique supérieure à 90 OU une pression artérielle systolique supérieure à 140 :
GET {{FHIR_URL}}/Observation?component-code-value-quantity=http://loinc.org|8462-4$gt90,http://loinc.org|8480-6$gt140
Notez comment ,
fonctionne en tant qu’opérateur OR logique entre les deux conditions.
Afficher le jeu d’entrées suivant
Le nombre maximal de ressources pouvant être retournées à la fois à partir d’une requête de recherche est de 1000. Toutefois, vous pouvez avoir plus de 1 000 instances de ressources qui correspondent à la requête de recherche et vous souhaitez récupérer le jeu de résultats suivant après les 1 000 premières entrées. Dans ce cas, vous utilisez la valeur du jeton url
de continuation (c’est-à-dire "next"
) dans le searchset
bundle retourné par la recherche :
"resourceType": "Bundle",
"id": "98731cb7-3a39-46f3-8a72-afe945741bd9",
"meta": {
"lastUpdated": "2021-04-22T09:58:16.7823171+00:00"
},
"type": "searchset",
"link": [
{
"relation": "next",
"url": "{{FHIR_URL}}/Patient?_sort=_lastUpdated&ct=WzUxMDAxNzc1NzgzODc5MjAwODBd"
},
{
"relation": "self",
"url": "{{FHIR_URL}}/Patient?_sort=_lastUpdated"
}
],
Vous devez demander GET
l’URL fournie :
GET {{FHIR_URL}}/Patient?_sort=_lastUpdated&ct=WzUxMDAxNzc1NzgzODc5MjAwODBd
Cela retournerait l’ensemble d’entrées suivant pour vos résultats de recherche. L’offre searchset
groupée est l’ensemble complet d’entrées de résultats de recherche, et le jeton url
de continuation est le lien fourni par le service FHIR pour récupérer les entrées qui ne correspondent pas au premier sous-ensemble (en raison de la restriction sur le nombre maximal d’entrées retournées pour une page).
Rechercher à l’aide de POST
Tous les exemples de recherche mentionnés ci-dessus utilisent GET
des demandes. Toutefois, vous pouvez également effectuer des appels d’API de recherche FHIR à l’aide POST
du _search
paramètre :
POST {{FHIR_URL}}/Patient/_search?_id=45
Cette requête retourne l’instance de Patient
ressource avec la valeur donnée id
. Comme pour GET
les requêtes, le serveur détermine quelles instances de ressources répondent aux conditions et retourne un bundle dans la réponse HTTP.
Une autre fonctionnalité de la recherche avec POST
est qu’elle vous permet d’envoyer les paramètres de requête sous forme de corps de formulaire :
POST {{FHIR_URL}}/Patient/_search
content-type: application/x-www-form-urlencoded
name=John
Étapes suivantes
Dans cet article, vous avez découvert la recherche dans FHIR à l’aide de paramètres de recherche, de modificateurs et d’autres méthodes. Pour plus d’informations sur la recherche FHIR, consultez
FHIR® est une marque déposée de HL7 utilisé avec l’autorisation de HL7.