Exemples de recherche de service FHIR

Les exemples de recherche du service FHIR montrent comment rechercher les données du service FHIR® (Fast Healthcare Interoperability Resources) à l’aide de paramètres de recherche, de modificateurs, de recherches chaînées et de recherches chaînées inverses, de recherches composites et de requêtes POST afin de trouver des données plus efficacement. Pour obtenir 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

Permet _include de rechercher des instances de ressources et d’inclure dans les résultats d’autres ressources référencées par les instances de ressources cibles. Par exemple, utilisez _include pour rechercher MedicationRequest des ressources et limiter la recherche aux prescriptions d’un patient spécifique. Le service FHIR retourne les ressources MedicationRequest et la ressource Patient référencée. Dans l’exemple suivant, la requête extrait toutes les MedicationRequest instances de ressources de la base de données et tous les patients auxquels les MedicationRequest instances font référence.

 GET {{FHIR_URL}}/MedicationRequest?_include=MedicationRequest:patient

_revinclude

Permet _revinclude de rechercher des instances de ressources et d’inclure dans les résultats d’autres ressources qui référencent les instances de ressources cibles. Par exemple, vous pouvez rechercher des patients, puis inclure en retour toutes les rencontres qui font référence à ces patients.

GET {{FHIR_URL}}/Patient?_revinclude=Encounter:subject

_elements

Permet _elements de limiter les informations 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

La demande précédente retourne un ensemble de patients. Chaque entrée inclut uniquement les identificateurs et l’état actif du patient. Les entrées de la réponse contiennent une meta.tag valeur indiquant SUBSETTED que tous les éléments définis pour la ressource ne sont pas inclus.

Modificateurs de recherche

Utilisez ces modificateurs de recherche pour affiner vos résultats de recherche. Pour plus d’informations sur les modificateurs de recherche, consultez modificateurs de recherche.

:not

Permet :not 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 contrepartie, vous obtenez toutes les ressources Patient dont la valeur de l’élément gender n’est pas female, y compris les patients pour lesquels aucune valeur de sexe n’est spécifiée. Ce résultat est différent de la recherche Patient de ressources avec la male valeur de genre, car cette recherche ignore les patients sans sexe spécifié.

:missing

Lorsque vous utilisez :missing=true, :missing retourne toutes les ressources qui n’ont pas de valeur pour l’élément spécifié. Lorsque vous utilisez :missing=false, :missing retourne toutes les ressources qui contiennent l’élément spécifié. Pour les éléments de type de données simples, :missing=true correspond à toutes les ressources où un élément est présent, mais a une valeur vide. Par exemple, si vous souhaitez trouver toutes les ressources Patient pour lesquelles il manque des informations sur birthdate, vous pouvez effectuer l’appel suivant.

GET {{FHIR_URL}}/Patient?birthdate:missing=true

:exact

Utilisez :exact pour rechercher des éléments ayant des types de données string. Elle renvoie une valeur positive si la valeur du paramètre correspond exactement à la casse et à l’intégralité de la séquence de caractères de la valeur de l’élément.

GET {{FHIR_URL}}/Patient?name:exact=Jon

Cette requête retourne les ressources Patient dont le nom given ou family est Jon. S’il y avait des patients avec des noms tels que Jonathan ou JON, la recherche ignore ces ressources, car leurs noms ne correspondent pas exactement à la valeur spécifiée.

:contains

Utilisez :contains pour rechercher les éléments de type string. Elle autorise les correspondances avec la valeur spécifiée n’importe où dans le champ. :contains n’est pas sensible à la casse et reconnaît les chaînes correspondantes concaténées à d’autres caractères. Par exemple :

GET {{FHIR_URL}}/Patient?address:contains=Meadow

Cette requête retourne toutes les ressources Patient avec des champs d’élément address qui contiennent la chaîne « Meadow » (sans tenir compte de la casse). Ce résultat signifie que vous pourriez avoir des adresses avec des valeurs telles que « Meadows Lane », « Pinemeadow Place » ou « Meadowlark St » qui retournent des correspondances positives.

Pour effectuer des opérations de recherche qui couvrent les éléments contenus dans une ressource référencée, chaînez une série de paramètres ensemble à l’aide .de . Par exemple, si vous souhaitez afficher toutes les DiagnosticReport ressources avec une subject référence à un patient spécifié par name, utilisez la requête suivante.

 GET {{FHIR_URL}}/DiagnosticReport?subject:Patient.name=Sarah

Cette demande retourne toutes les DiagnosticReport ressources avec un sujet patient nommé « Sarah ». . fait pointer la recherche chaînée vers l’élément name de la ressource Patient référencée.

Une autre utilisation courante de la recherche FHIR consiste à trouver toutes les rencontres pour un patient spécifique. Pour effectuer une recherche simple non chaînée de ressources Encounter qui font référence à une Patient avec un id donné, utilisez la requête suivante.

GET {{FHIR_URL}}/Encounter?subject=Patient/78a14cbe-8968-49fd-a231-d43e6619399f

En utilisant la recherche chaînée, vous pouvez trouver toutes les ressources qui référencent les Encounter patients dont les détails correspondent à un paramètre de recherche. L’exemple suivant montre comment rechercher des consultations associées à des patients filtrés par birthdate.

GET {{FHIR_URL}}/Encounter?subject:Patient.birthdate=1987-02-20

Cette requête renvoie toutes les instances Encounter qui font référence à des patients avec la valeur birthdate spécifiée.

En outre, vous pouvez lancer plusieurs recherches chaînées à l’aide de l’opérateur & , ce qui permet de rechercher plusieurs références dans une requête. Dans les cas avec &, la recherche chaînée effectue une recherche distincte pour la valeur de chaque élément.

GET {{FHIR_URL}}/Patient?general-practitioner:Practitioner.name=Sarah&general-practitioner:Practitioner.address-state=WA

Cette requête renvoie toutes les ressources Patient qui ont une référence à « Sarah » en tant que generalPractitioner, ainsi qu’une référence à un(e) generalPractitioner ayant une adresse dans l’État de Washington. En d’autres termes, si un patient avait un generalPractitioner nom Sarah de l’État de New York et un autre generalPractitioner nommé Bill de l’État de Washington, les deux remplissent 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ément jumelées, reportez-vous aux exemples de recherche composites suivants.

Lorsque vous utilisez la recherche en chaînée inversée dans FHIR, vous pouvez 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 les font référence. Vous utilisez le _has paramètre pour accomplir cette tâche. Par exemple, la Observation ressource a un paramètre patient de recherche qui recherche une référence à une Patient ressource. Pour trouver toutes les ressources Patient auxquelles une Observation fait référence avec un code spécifique, utilisez le code suivant.

GET {{FHIR_URL}}/Patient?_has:Observation:patient:code=527

Cette requête renvoie les ressources Patient qui Observation les ressources portant la référence de code 527.

La recherche en chaînée inverse peut également être récursive. Par exemple, pour rechercher tous les patients référencés par un Observation lui-même référencé par un AuditEvent provenant d’un praticien nommé janedoe, utilisez :

GET {{FHIR_URL}}/Patient?_has:Observation:patient:_has:AuditEvent:entity:agent:Practitioner.name=janedoe

Pour rechercher des ressources qui contiennent des éléments regroupés en tant que paires connectées logiquement, FHIR définit la recherche composite. La recherche composite combine entre elles des valeurs de paramètres individuelles en utilisant le operator, forming a connected pair of parameters. In a composite search, a positive match occurs when the intersection of element values satisfies all conditions set in the paired search parameters. The following example queries for allDiagnosticReportresources that contain a potassium value less than9.2`:

GET {{FHIR_URL}}/DiagnosticReport?result.code-value-quantity=2823-3$lt9.2

Les éléments appairés dans ce cas sont l’élément code (provenant d’une ressource Observation référencée comme la result) et l’élément value connecté au code. Suivant le code avec la operator sets thevaleurcondition aslt(for "less than")9.2' (pour la valeur de potassium mmol/L).

Vous pouvez également utiliser des paramètres de recherche composite pour filtrer plusieurs quantités de valeurs de code de composant avec une OR logique. Par exemple, pour rechercher des observations avec une pression artérielle diastolique supérieure à 90 OR 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 l’opérateur OR logique entre les deux conditions.

Afficher le lot d’entrées suivant

Une requête de recherche peut retourner jusqu’à 1 000 ressources à la fois. 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, utilisez la valeur du jeton de continuation (c’est-à-dire, "next")url dans le lot searchset renvoyé par la recherche, comme suit.

    "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"
        }
    ],

Effectuez une GET demande pour l’URL fournie :

GET {{FHIR_URL}}/Patient?_sort=_lastUpdated&ct=WzUxMDAxNzc1NzgzODc5MjAwODBd

Cette requête retourne le jeu d’entrées suivant pour vos résultats de recherche. Le searchset bundle 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 ici utilisent des requêtes GET. Toutefois, vous pouvez également effectuer des appels à l’API de recherche FHIR à l’aide de POST avec le paramètre _search, comme suit.

POST {{FHIR_URL}}/Patient/_search?_id=45

Cette requête retourne l’instance Patient de 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 retournent un bundle dans la réponse HTTP.

Une autre fonctionnalité de la recherche à l’aide de l’outil POST consiste à envoyer les paramètres de requête en tant que 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 :

Remarque

FHIR® est une marque déposée de HL7 utilisé avec l’autorisation de HL7.