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 referencepatient. 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.

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.

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.

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.