Exemples de recherches FHIR pour l’API Azure pour FHIR
Voici quelques exemples d’utilisation des opérations de recherche FHIR® (Fast Healthcare Interoperability Resources), notamment les paramètres de recherche et les modificateurs, la recherche de chaîne et de chaîne inversée, la recherche composite, l’affichage de l’ensemble d’entrées suivant pour les résultats de la recherche et la recherche avec une requête POST
. Pour plus d’informations sur la recherche, consultez Vue d’ensemble de la recherche FHIR.
Paramètres des résultats de la recherche
_include
_include
recherche les ressources qui incluent le paramètre spécifié de la ressource. Par exemple, vous pouvez rechercher parmi les ressources MedicationRequest
pour trouver uniquement celles qui incluent des informations sur les prescriptions d’un patient spécifique, qui est le paramètre reference
patient
. Dans l’exemple ci-dessous, cela extrait tous les MedicationRequests
et tous les patients référencés à partir de MedicationRequests
:
GET [your-fhir-server]/MedicationRequest?_include=MedicationRequest:patient
Notes
_include et _revinclude sont limités à 100 éléments.
_revinclude
_revinclude
vous permet de rechercher la direction opposée en tant que _include
. Par exemple, vous pouvez rechercher des patients, puis inverser l’ensemble des rencontres qui référencent les patients :
GET [your-fhir-server]/Patient?_revinclude=Encounter:subject
_elements
_elements
limite le résultat de la recherche à un sous-ensemble de champs pour réduire la taille de la réponse en omettant les données inutiles. Le paramètre accepte une liste d’éléments de base séparés par des virgules :
GET [your-fhir-server]/Patient?_elements=identifier,active
Dans cette requête, vous obtenez un ensemble de patients, mais chaque ressource inclut uniquement les identificateurs et l’état actif du patient. Les ressources de cette réponse retournée contiennent une valeur meta.tag
de SUBSETTED
indiquant qu’il s’agit d’un ensemble incomplet de résultats.
Modificateurs de recherche
:not
:not
vous permet de trouver des ressources où un attribut n’est pas true. Par exemple, vous pouvez rechercher des patients dont le sexe n’est pas féminin :
GET [your-fhir-server]/Patient?gender:not=female
En tant que valeur de retour, vous obtenez toutes les entrées de patients dont le sexe n’est pas féminin, y compris les valeurs vides (entrées spécifiées sans sexe). Cela diffère de la recherche de patients dont le sexe est masculin, car cela n’inclurait pas les entrées sans sexe spécifique.
:missing
:missing
retourne toutes les ressources qui n’ont pas de valeur pour l’élément spécifié lorsque la valeur est true
, et retourne toutes les ressources qui contiennent l’élément spécifié lorsque la valeur est false
. Pour les éléments de type de données simples, :missing=true
correspond à toutes les ressources où l’élément est présent avec des extensions, mais dont la valeur est vide. Par exemple, si vous souhaitez trouver toutes les ressources Patient
qui manquent d’informations à la date de naissance, vous pouvez :
GET [your-fhir-server]/Patient?birthdate:missing=true
:exact
:exact
est utilisé pour les paramètres string
et retourne des résultats qui correspondent précisément au paramètre, notamment au niveau de la casse et des caractères concaténés.
GET [your-fhir-server]/Patient?name:exact=Jon
Cette requête retourne des ressources Patient
qui ont exactement le même nom que Jon
. Si la ressource avait des patients avec des noms tels que Jonathan
ou joN
, la recherche ignore la ressource, car elle ne correspond pas exactement à la valeur spécifiée.
:contains
:contains
est utilisé pour les paramètres string
et recherche des ressources avec des correspondances partielles de la valeur spécifiée n’importe où dans la chaîne dans le champ recherché.
contains
ne respecte pas la casse et autorise la concaténation de caractères. Par exemple :
GET [your-fhir-server]/Patient?address:contains=Meadow
Cette requête retourne toutes les ressources Patient
avec des champs address
qui ont des valeurs qui contiennent la chaîne « Meadow ». Cela signifie que vous pourriez avoir des adresses qui incluent des valeurs telles que « Meadowers » ou « 59 Meadow ST » retournées en tant que résultats de recherche.
Recherche chaînée
Pour effectuer une série d’opérations de recherche qui couvrent plusieurs paramètres de référence, vous pouvez mettre en chaîne la série de paramètres de référence en les ajoutant à la demande de serveur un par un à l’aide d’un point .
. Par exemple, si vous souhaitez afficher toutes les ressources DiagnosticReport
avec une référence subject
à une ressource Patient
qui inclut un name
particulier :
GET [your-fhir-server]/DiagnosticReport?subject:Patient.name=Sarah
Cette demande retournerait toutes les ressources DiagnosticReport
avec un sujet patient nommé « Sarah ». Le point .
après que le champ Patient
effectue la recherche chaînée sur le paramètre de référence du paramètre subject
.
Une autre utilisation courante d’une recherche régulière (pas une recherche chaînée) recherche toutes les rencontres pour un patient spécifique.
Patient
auront souvent un(e) ou plusieurs Encounter
avec un sujet. Pour rechercher toutes les ressources Encounter
pour une Patient
avec les id
fournies :
GET [your-fhir-server]/Encounter?subject=Patient/78a14cbe-8968-49fd-a231-d43e6619399f
À l’aide de la recherche chaînée, vous pouvez trouver toutes les ressources Encounter
qui correspondent à un élément d’information Patient
particulier, par exemple :birthdate
GET [your-fhir-server]/Encounter?subject:Patient.birthdate=1987-02-20
Cela permettrait non seulement de rechercher des ressources Encounter
sur un seul patient, mais aussi sur tous les patients qui ont la valeur de date de naissance spécifiée.
En outre, la recherche chaînée peut être effectuée plusieurs fois dans une requête à l’aide du symbole &
, ce qui vous permet de rechercher plusieurs conditions dans une requête. Dans ce cas, la recherche chaînée « indépendamment » recherche chaque paramètre, au lieu de rechercher des conditions qui répondent uniquement à toutes les conditions à la fois :
GET [your-fhir-server]/Patient?general-practitioner:Practitioner.name=Sarah&general-practitioner:Practitioner.address-state=WA
Cela retournerait toutes les ressources Patient
qui ont « Sarah » comme generalPractitioner
et ont un(e) generalPractitioner
qui est l’adresse dont l’état est Washington. En d’autres termes, si un patient avait Sarah de l’état de New-York et Bill de l’état est Washington, tous deux référencés comme le generalPractitioner
du patient, le paramètre serait retourné.
Pour les scénarios dans lesquels la recherche doit être une opération AND
qui couvre toutes les conditions en tant que groupe, reportez-vous à l’exemple de recherche composite ci-dessous.
Recherche en chaîne inversée
La recherche en chaîne vous permet de rechercher des ressources en fonction des propriétés des ressources auxquelles elles font référence. L’utilisation de la recherche en chaîne inversée vous permet de le faire de l’autre manière. Vous pouvez rechercher des ressources en fonction des propriétés des ressources qui y font référence, à l’aide du paramètre _has
. Par exemple, la ressource Observation
a un paramètre de recherche patient
faisant référence à une ressource Patient. Pour rechercher toutes les ressources patient référencées par Observation
avec un(e) code
spécifique :
GET [base]/Patient?_has:Observation:patient:code=527
Cette demande retourne les ressources patient référencées par Observation
avec le code 527
.
En outre, la recherche chaînée inverse peut avoir une structure récursive. Par exemple, si vous souhaitez rechercher tous les patients avec Observation
dont l’observation a un événement d’audit d’un utilisateur janedoe
spécifique, vous pouvez effectuer les opérations suivantes :
GET [base]/Patient?_has:Observation:patient:_has:AuditEvent:entity:agent:Practitioner.name=janedoe
Notes
Dans l’API Azure pour FHIR et le serveur FHIR open source soutenus par Azure Cosmos DB, la recherche chaînée et la recherche en chaînée inversée sont une implémentation MVP. Pour effectuer une recherche chaînée sur Azure Cosmos DB, l’implémentation décrit l’expression de recherche et émet des sous-requêtes pour résoudre les ressources mises en correspondance. Cette opération est effectuée pour chaque niveau de l’expression. Si une requête retourne plus de 100 résultats, une erreur est levée.
Recherche composite
Pour rechercher des ressources répondant à plusieurs conditions à la fois, utilisez la recherche composite qui joint une séquence de valeurs de paramètre unique avec un symbole $
. Le résultat retourné correspond à l’intersection des ressources qui correspondent à toutes les conditions spécifiées par les paramètres de recherche joints. Ces paramètres de recherche sont appelés des paramètres de recherche composites et ils définissent un nouveau paramètre qui combine les différents paramètres dans une structure imbriquée. Par exemple, si vous souhaitez rechercher toutes les ressources DiagnosticReport
contenant Observation
avec une valeur de potassium inférieure ou égale à 9,2 :
GET [your-fhir-server]/DiagnosticReport?result.code-value-quantity=2823-3$lt9.2
Cette requête spécifie le composant contenant un code de 2823-3
, qui dans ce cas serait du potassium. Après le symbole $
, il spécifie la plage de la valeur du composant à l’aide de lt
pour « inférieur ou égal à » et 9.2
pour la plage de valeurs de potassium.
Rechercher le jeu d’entrées suivant
Le nombre maximal d’entrées pouvant être retournées par une requête de recherche unique est de 1 000. Toutefois, vous pouvez avoir plus de 1 000 entrées qui correspondent à la requête de recherche, et vous pouvez voir le jeu d’entrées suivant après les 1 000 premières entrées retournées. Dans ce cas, vous devez utiliser la valeur du jeton url
de continuation comme searchset
dans le résultat Bundle
ci-dessous :
"resourceType": "Bundle",
"id": "98731cb7-3a39-46f3-8a72-afe945741bd9",
"meta": {
"lastUpdated": "2021-04-22T09:58:16.7823171+00:00"
},
"type": "searchset",
"link": [
{
"relation": "next",
"url": "[your-fhir-server]/Patient?_sort=_lastUpdated&ct=WzUxMDAxNzc1NzgzODc5MjAwODBd"
},
{
"relation": "self",
"url": "[your-fhir-server]/Patient?_sort=_lastUpdated"
}
],
Vous devez également effectuer une requête GET pour l’URL fournie sous le champ relation: next
:
GET [your-fhir-server]/Patient?_sort=_lastUpdated&ct=WzUxMDAxNzc1NzgzODc5MjAwODBd
Cela renvoie le jeu d’entrées suivant pour votre résultat de recherche.
searchset
est l’ensemble complet d’entrées de résultats de recherche, et le jeton de continuation url
est le lien fourni par le serveur pour récupérer les entrées qui ne s’affichent pas sur le premier ensemble, à cause de la restriction sur le nombre maximal d’entrées retournées pour une requête de recherche.
Rechercher à l’aide de POST
Tous les exemples de recherche mentionnés ci-dessus ont utilisé des requêtes GET
. Vous pouvez également effectuer des opérations de recherche à l’aide de requêtes POST
à l’aide de _search
:
POST [your-fhir-server]/Patient/_search?_id=45
Cette demande retourne toutes les ressources Patient
avec la valeur id
de 45. Tout comme dans les requêtes GET, le serveur détermine laquelle parmi l’ensemble des ressources répond à la ou les conditions et retourne une ressource groupée dans la réponse HTTP.
Un autre exemple de recherche à l’aide de POST où les paramètres de requête sont envoyés en tant que corps de formulaire est :
POST [your-fhir-server]/Patient/_search
content-type: application/x-www-form-urlencoded
name=John
Étapes suivantes
Dans cet article, vous avez découvert comment effectuer des recherches à l’aide de différents paramètres de recherche, modificateurs et outils de recherche FHIR. Pour plus d'informations sur la recherche FHIR, voir
FHIR® est une marque déposée de HL7 utilisé avec l’autorisation de HL7.