Esempi di ricerca FHIR
Di seguito sono riportati alcuni esempi di chiamate API di ricerca FHIR® (Fast Healthcare Interoperabil Resources) con vari parametri di ricerca, modificatori, ricerche concatenati e concatenati, ricerche composte, POST
richieste di ricerca e altro ancora. Per un'introduzione generale ai concetti di ricerca FHIR, vedere Panoramica della ricerca FHIR.
Parametri dei risultati della ricerca
_include
_include
consente di cercare istanze delle risorse e includere nei risultati altre risorse a cui fa riferimento le istanze delle risorse di destinazione. Ad esempio, è possibile usare _include
per eseguire query per MedicationRequest
le risorse e limitare la ricerca alle prescrizioni per un paziente specifico. Il servizio FHIR restituirà quindi le MedicationRequest
risorse e la risorsa a Patient
cui si fa riferimento. Nell'esempio seguente, la richiesta eseguirà il pull di tutte le istanze di risorse nel database e tutti i MedicationRequest
pazienti a cui fa riferimento le MedicationRequest
istanze:
GET {{FHIR_URL}}/MedicationRequest?_include=MedicationRequest:patient
Nota
Il servizio FHIR in Azure Health Data Services limita le ricerche con _include
e _revinclude
per restituire un massimo di 100 elementi.
_revinclude
_revinclude
consente di cercare istanze delle risorse e includere nei risultati altre risorse che fanno riferimento alle istanze delle risorse di destinazione. Ad esempio, è possibile cercare i pazienti e quindi invertire includono tutti gli incontri che fanno riferimento ai pazienti:
GET {{FHIR_URL}}/Patient?_revinclude=Encounter:subject
_elements
_elements
restringe le informazioni nei risultati della ricerca a un subset degli elementi definiti per un tipo di risorsa. Il _elements
parametro accetta un elenco delimitato da virgole di elementi di base:
GET {{FHIR_URL}}/Patient?_elements=identifier,active
Nella richiesta precedente si riceverà un bundle di pazienti, ma ogni voce includerà solo gli identificatori e lo stato attivo del paziente. Le voci nella risposta conterranno un meta.tag
valore di SUBSETTED
per indicare che non tutti gli elementi definiti per la risorsa sono inclusi.
Modificatori di ricerca
:not
:not
consente di trovare risorse con un elemento che non ha un valore specificato. Ad esempio, è possibile cercare pazienti che non sono femminili:
GET {{FHIR_URL}}/Patient?gender:not=female
In cambio, si otterrebbero tutte le Patient
risorse il cui gender
valore di elemento non female
è , inclusi i pazienti senza alcun valore di genere specificato. Ciò è diverso dalla ricerca Patient
di risorse con il male
valore di genere, poiché ciò ignora i pazienti senza sesso specificato.
:missing
:missing
restituisce tutte le risorse che non hanno un valore per l'elemento specificato quando :missing=true
. Restituisce inoltre :missing
tutte le risorse che contengono l'elemento specificato quando :missing=false
. Per elementi di tipo di dati semplici, :missing=true
corrisponderà a tutte le risorse in cui è presente un elemento ma ha un valore vuoto. Ad esempio, se si desidera trovare tutte le Patient
risorse mancanti in birthdate
, è possibile chiamare:
GET {{FHIR_URL}}/Patient?birthdate:missing=true
:exact
:exact
viene usato per cercare elementi con string
tipi di dati e restituisce positivo se il valore del parametro corrisponde esattamente alla sequenza di caratteri maiuscole e minuscole del valore dell'elemento.
GET {{FHIR_URL}}/Patient?name:exact=Jon
Questa richiesta restituisce Patient
le risorse con il given
nome Jon
o family
. Se i pazienti con nomi come Jonathan
o JON
, la ricerca ignora tali risorse perché i nomi non corrispondono esattamente al valore specificato.
:contains
:contains
viene utilizzata per eseguire query per string
gli elementi di tipo e consente la corrispondenza con il valore specificato ovunque all'interno del campo. contains
è insensibile e riconosce le stringhe corrispondenti concatenate con altri caratteri. Ad esempio:
GET {{FHIR_URL}}/Patient?address:contains=Meadow
Questa richiesta restituisce tutte le Patient
risorse con address
campi di elemento che contengono la stringa "Meadow" (senza distinzione tra maiuscole e minuscole). Ciò significa che potresti avere indirizzi con valori come "Meadows Lane", "Pinemeadow Place" o "Meadowlark St" che restituiscono corrispondenze positive.
Ricerca concatenata
Per eseguire operazioni di ricerca che coprono gli elementi contenuti all'interno di una risorsa a cui si fa riferimento, è possibile "concatenare" una serie di parametri insieme a .
. Ad esempio, se si desidera visualizzare tutte le DiagnosticReport
risorse con un riferimento a un subject
paziente specificato da name
:
GET {{FHIR_URL}}/DiagnosticReport?subject:Patient.name=Sarah
Questa richiesta restituirà tutte le DiagnosticReport
risorse con un soggetto paziente denominato "Sarah". Punta .
la ricerca concatenata all'elemento name
all'interno della risorsa a Patient
cui si fa riferimento.
Un altro uso comune della ricerca FHIR è trovare tutti gli incontri per un paziente specifico. Per eseguire una ricerca regolare (non concatenata) per Encounter
le risorse che fanno riferimento a un Patient
oggetto con un determinato id
:
GET {{FHIR_URL}}/Encounter?subject=Patient/78a14cbe-8968-49fd-a231-d43e6619399f
Usando la ricerca concatenata, è possibile trovare tutte le Encounter
risorse che fanno riferimento ai pazienti i cui dettagli corrispondono a un parametro di ricerca. L'esempio seguente illustra come cercare incontri che fanno riferimento ai pazienti limitati da birthdate
:
GET {{FHIR_URL}}/Encounter?subject:Patient.birthdate=1987-02-20
Ciò restituirà tutte le Encounter
istanze che fanno riferimento ai pazienti con il valore specificato birthdate
.
È inoltre possibile avviare più ricerche concatenati usando l'operatore &
, che consente la ricerca su più riferimenti in una richiesta. In questi casi con &
la ricerca concatenata "indipendentemente" analizza ogni valore dell'elemento:
GET {{FHIR_URL}}/Patient?general-practitioner:Practitioner.name=Sarah&general-practitioner:Practitioner.address-state=WA
Ciò restituirebbe tutte le Patient
risorse che hanno un riferimento a "Sarah" come generalPractitioner
un riferimento a un generalPractitioner
oggetto che ha un indirizzo nello stato di Washington. In altre parole, se un paziente aveva un generalPractitioner
nome Sarah dallo stato di New York e un altro generalPractitioner
denominato Bill dallo stato di Washington, questo avrebbe soddisfatto le condizioni per una corrispondenza positiva quando si esegue questa ricerca.
Per gli scenari in cui la ricerca richiede una condizione AND logica che controlla rigorosamente i valori degli elementi associati, fare riferimento agli esempi di ricerca compositi riportati di seguito.
Ricerca concatenata inversa
L'uso della ricerca concatenata inversa in FHIR consente di cercare istanze di risorse di destinazione a cui fa riferimento altre risorse. In altre parole, è possibile cercare le risorse in base alle proprietà delle risorse a cui fanno riferimento. Questa operazione viene eseguita con il _has
parametro . Ad esempio, la Observation
risorsa ha un parametro patient
di ricerca che verifica la presenza di un riferimento a una Patient
risorsa. Per trovare tutte le Patient
risorse a cui fa riferimento un oggetto Observation
con una specifica code
:
GET {{FHIR_URL}}/Patient?_has:Observation:patient:code=527
Questa richiesta restituisce Patient
le risorse a cui fa riferimento le Observation
risorse con il codice 527
.
Inoltre, la ricerca concatenata inversa può avere una struttura ricorsiva. Ad esempio, se si vuole cercare tutti i pazienti a Observation
cui fa riferimento l'osservazione da un AuditEvent
medico specifico denominato janedoe
:
GET {{FHIR_URL}}/Patient?_has:Observation:patient:_has:AuditEvent:entity:agent:Practitioner.name=janedoe
Ricerca composita
Per cercare risorse che contengono elementi raggruppati come coppie connesse logicamente, FHIR definisce la ricerca composita, che aggiunge i valori di singolo parametro insieme all'operatore $
, formando una coppia connessa di parametri. In una ricerca composita si verifica una corrispondenza positiva quando l'intersezione dei valori degli elementi soddisfa tutte le condizioni impostate nei parametri di ricerca associati. Ad esempio, se si desidera trovare tutte le DiagnosticReport
risorse che contengono un valore di potassio minore di 9.2
:
GET {{FHIR_URL}}/DiagnosticReport?result.code-value-quantity=2823-3$lt9.2
Gli elementi associati in questo caso sono l'elemento code
(da una Observation
risorsa a cui viene fatto riferimento come result
) e l'elemento value
connesso con .code
Seguendo il codice con l'operatore $
imposta la value
condizione come lt
(per "minore di") 9.2
(per il valore mmol/L di potassio).
I parametri di ricerca compositi possono essere usati anche per filtrare più quantità di valore del codice componente con un OR logico. Ad esempio, per eseguire una query per le osservazioni con pressione sanguigna diastolica maggiore di 90 O pressione sanguigna systolic maggiore di 140:
GET {{FHIR_URL}}/Observation?component-code-value-quantity=http://loinc.org|8462-4$gt90,http://loinc.org|8480-6$gt140
Si noti come ,
funziona come operatore OR logico tra le due condizioni.
Visualizzare il set di voci successivo
Il numero massimo di risorse che possono essere restituite contemporaneamente da una query di ricerca è 1000. Tuttavia, potrebbero essere presenti più di 1000 istanze di risorsa che corrispondono alla query di ricerca e si vuole recuperare il set successivo di risultati dopo le prime 1000 voci. In tal caso, si userebbe il valore del token url
di continuazione (ad esempio "next"
) nel searchset
bundle restituito dalla ricerca:
"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"
}
],
Si effettua una GET
richiesta per l'URL fornito:
GET {{FHIR_URL}}/Patient?_sort=_lastUpdated&ct=WzUxMDAxNzc1NzgzODc5MjAwODBd
Verrà restituito il set successivo di voci per i risultati della ricerca. Il searchset
bundle è il set completo di voci dei risultati di ricerca e il token url
di continuazione è il collegamento fornito dal servizio FHIR per recuperare le voci che non rientrano nel primo subset (a causa della restrizione sul numero massimo di voci restituite per una pagina).
Ricerca con POST
Tutti gli esempi di ricerca indicati in precedenza usano GET
le richieste. Tuttavia, è anche possibile effettuare chiamate API di ricerca FHIR usando POST
il _search
parametro:
POST {{FHIR_URL}}/Patient/_search?_id=45
Questa richiesta restituirà l'istanza della Patient
risorsa con il valore specificato id
. Come per GET
le richieste, il server determina le istanze delle risorse che soddisfano le condizioni e restituisce un bundle nella risposta HTTP.
Un'altra funzionalità di ricerca con POST
è che consente di inviare i parametri di query come corpo del modulo:
POST {{FHIR_URL}}/Patient/_search
content-type: application/x-www-form-urlencoded
name=John
Passaggi successivi
In questo articolo è stata illustrata la ricerca in FHIR usando parametri di ricerca, modificatori e altri metodi. Per altre informazioni sulla ricerca FHIR, vedere
FHIR® è un marchio registrato di HL7 e viene usato con l'autorizzazione HL7.