Esta página explica como pesquisar recursos FHIR através da funcionalidade de consulta mais avançada disponível através do método projects.locations.datasets.fhirStores.fhir.search
. Este guia pressupõe que já conhece o conteúdo do artigo Pesquisar recursos FHIR.
Exemplo de pacote FHIR
Os exemplos nesta página usam um pacote FHIR JSON fornecido para mostrar os resultados
das funcionalidades de pesquisa FHIR avançadas. Guarde o ficheiro r4_bundle.json
no seu computador para o usar nos exemplos.
Execute o conjunto FHIR de amostra
Para executar o pacote FHIR de exemplo numa loja FHIR, consulte o artigo Executar um pacote. O FHIR store tem de ter as seguintes definições:
- Defina
enableUpdateCreate
comotrue
. - Defina
version
como R4.
Modificadores de pesquisa de strings
Uma pesquisa de string usa por predefinição uma correspondência de prefixo que não é sensível a maiúsculas/minúsculas nem a acentos através da conversão para a forma NFC Unicode padrão. A pontuação e os espaços adicionais são ignorados.
Estão disponíveis os seguintes modificadores:
:contains
corresponde a recursos com o valor especificado em qualquer parte da string. Por exemplo,name:contains=eve
corresponde aEvelyn
eSeverine
.:exact
corresponde à string inteira, incluindo maiúsculas/minúsculas e acentos. Por exemplo,name:exact=Eve
não corresponde aeve
nem aEvelyn
.
Expanda a secção seguinte para ver um exemplo de utilização de modificadores de strings de pesquisa:
Exemplos de modificadores de pesquisa de strings
REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- PROJECT_ID: o ID do seu Google Cloud projeto
- LOCATION: a localização do conjunto de dados principal
- DATASET_ID: o conjunto de dados principal do FHIR store
- FHIR_STORE_ID: o ID da loja FHIR
Para enviar o seu pedido, escolha uma destas opções:
curl
O exemplo seguinte usa a consulta
Patient?name:contains=eve
.
Execute o seguinte comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient?name:contains=eve"
PowerShell
O exemplo seguinte usa a consulta
Patient?name:contains=eve
.
Execute o seguinte comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient?name:contains=eve" | Select-Object -Expand Content
Deve receber uma resposta JSON semelhante à seguinte:
{ "entry": [ { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/patient2", "resource": { "active": false, "address": [ { "city": "Mountain View", "district": "KW", "line": [ "1800 Amphibious Blvd" ], "period": { "start": "2000-01-01" }, "text": "1800 Amphibious Blvd", "type": "both", "use": "home" } ], "birthDate": "1989-03-11", "communication": [ { "language": { "coding": [ { "code": "FR", "display": "jkl", "system": "123" }, { "code": "french", "display": "mno", "system": "456" } ], "text": "pqr" } } ], "deceasedBoolean": false, "gender": "female", "id": "patient2", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "tag": [ { "code": "tag2", "display": "Tag Two", "system": "tag-system" }, { "code": "tag|tag3", "display": "Tag Three", "system": "other" } ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "name": [ { "family": "Lee", "given": [ "Jane", "Evelyne" ], "use": "usual" } ], "resourceType": "Patient", "telecom": [ { "rank": 1, "system": "phone", "use": "home", "value": "0982344522" }, { "rank": 2, "system": "email", "use": "home", "value": "jane@example.com" } ] }, "search": { "mode": "match" } }, { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/patient1", "resource": { "active": false, "address": [ { "city": "Mountain View", "district": "KW", "line": [ "1800 Amphibious Blvd" ], "period": { "start": "1974-12-25" }, "text": "1800 Amphibious Blvd", "type": "both", "use": "home" } ], "birthDate": "1974-12-25", "communication": [ { "language": { "coding": [ { "code": "ENG", "display": "def", "system": "123" }, { "code": "english", "display": "ghi", "system": "456" } ], "text": "abc" } } ], "deceasedBoolean": false, "gender": "male", "id": "patient1", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "tag": [ { "code": "tag1", "display": "Tag One", "system": "tag-system" }, { "code": "tag2", "display": "Tag Two", "system": "other-system" } ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "name": [ { "family": "Lee", "given": [ "Alex", "Cleve" ], "text": "Alex Lee", "use": "usual" }, { "given": [ "Joe" ], "use": "nickname" } ], "resourceType": "Patient", "telecom": [ { "rank": 1, "system": "phone", "use": "home", "value": "0982344522" }, { "rank": 2, "system": "email", "use": "home", "value": "alex@example.com" } ] }, "search": { "mode": "match" } } ], "link": [ { "relation": "search", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?name%3Acontains=eve" }, { "relation": "first", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?name%3Acontains=eve" }, { "relation": "self", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?name%3Acontains=eve" } ], "resourceType": "Bundle", "total": 2, "type": "searchset" }
Comparadores e precisão para números, datas e quantidades
Os valores usados numa pesquisa numérica ou de data dependem da precisão do valor do parâmetro. Por exemplo, o número 7.00
tem um intervalo implícito de 6.995
inclusive a 7.005
exclusivo. A data 2015-08-12
tem um intervalo de 2015-08-12T00:00:00
inclusive a 2015-08-13T00:00:00
exclusive.
A precisão afeta os resultados devolvidos para comparações de igualdade. Por exemplo, um valor de 7.03
num recurso corresponderia a uma pesquisa de value=7.0
, mas não corresponderia a uma pesquisa de value=7.00
.
Todos os valores de vírgula flutuante clinicamente significativos no FHIR são representados por tipos como Decimal e Quantity que registam a precisão do valor armazenado. Como exceção, existem alguns campos que usam números inteiros simples, por exemplo, para representar uma posição numa sequência, e as pesquisas nesses campos são correspondências numéricas exatas.
Os seguintes prefixos aplicam-se a comparações numéricas com um valor único.
Se não forem especificados prefixos, a predefinição é eq
.
eq
: igual a, o valor exato armazenado está dentro do intervalo definido pela precisão do valor do parâmetrone
: não é igual a, o oposto deeq
gt
: o valor armazenado exato é superior ao valor do parâmetro exatolt
: o valor armazenado exato é inferior ao valor do parâmetro exatoge
: o valor exato armazenado é maior ou igual ao valor do parâmetro exatole
: o valor exato armazenado é inferior ou igual ao valor exato do parâmetro
Os valores de data têm um intervalo implícito com base no nível de especificidade do valor (um ano, um mês, um dia). Outros tipos de dados, como Intervalo
e Período
contêm limites superiores e inferiores explícitos. Os seguintes prefixos aplicam-se a comparações de intervalos. Se não forem especificados prefixos, a predefinição é eq
.
eq
: igual a, o intervalo do valor do parâmetro contém totalmente o intervalo do alvone
: não é igual a, o oposto deeq
gt
: maior que, o intervalo acima do valor do parâmetro sobrepõe-se ao intervalo do alvolt
: inferior a, o intervalo abaixo do valor do parâmetro sobrepõe-se ao intervalo do alvoge
: superior ou igual ale
: inferior ou igual asa
: o intervalo do valor do parâmetro começa após o intervalo de destinoeb
: o intervalo do valor do parâmetro termina antes do intervalo de destino
Comparadores e precisão para amostras de números, datas e quantidades
REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- PROJECT_ID: o ID do seu Google Cloud projeto
- LOCATION: a localização do conjunto de dados principal
- DATASET_ID: o conjunto de dados principal do FHIR store
- FHIR_STORE_ID: o ID da loja FHIR
Para enviar o seu pedido, escolha uma destas opções:
curl
O exemplo seguinte usa a consulta
_lastUpdated=gt2018-01-01
para pesquisar recursos de pacientes com um valor _lastUpdated
superior a (gt
)
2018-01-01
.
Execute o seguinte comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient?_lastUpdated=gt2018-01-01"
PowerShell
O exemplo seguinte usa a consulta
_lastUpdated=gt2018-01-01
para pesquisar recursos de pacientes com um valor _lastUpdated
superior a (gt
)
2018-01-01
.
Execute o seguinte comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient?_lastUpdated=gt2018-01-01" | Select-Object -Expand Content
A consulta _lastUpdated=gt2018-01-01
devolve recursos de pacientes atualizados desde
01/01/2018. Se criou todos os recursos na sua loja FHIR após essa data, o servidor devolve todos os recursos. Para ver um subconjunto de recursos, altere a data para uma hora após a última atualização de alguns recursos.
{ "entry": [ { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/patient3", "resource": { "active": false, "address": [ { "city": "Lisbon", "district": "KW", "line": [ "Avenida da Pastelaria, 1903" ], "period": { "start": "1980-01-01" }, "text": "Avenida da Pastelaria, 1903", "type": "both", "use": "home" } ], "birthDate": "1980-01-01", "deceasedBoolean": false, "id": "patient3", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "tag": [ { "code": "tag3", "display": "Tag $3", "system": "other|tag" }, { "code": "code,4", "display": "Tag 4", "system": "system" } ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "name": [ { "family": "Smith", "given": [ "Mary" ], "text": "Smith, Mary", "use": "usual" } ], "resourceType": "Patient", "telecom": [ { "rank": 1, "system": "phone", "use": "home", "value": "1110891111" }, { "rank": 2, "system": "email", "use": "home", "value": "mary@example.com" } ] }, "search": { "mode": "match" } }, { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/patient2", "resource": { "active": false, "address": [ { "city": "Mountain View", "district": "KW", "line": [ "1800 Amphibious Blvd" ], "period": { "start": "2000-01-01" }, "text": "1800 Amphibious Blvd", "type": "both", "use": "home" } ], "birthDate": "1989-03-11", "communication": [ { "language": { "coding": [ { "code": "FR", "display": "jkl", "system": "123" }, { "code": "french", "display": "mno", "system": "456" } ], "text": "pqr" } } ], "deceasedBoolean": false, "gender": "female", "id": "patient2", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "tag": [ { "code": "tag2", "display": "Tag Two", "system": "tag-system" }, { "code": "tag|tag3", "display": "Tag Three", "system": "other" } ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "name": [ { "family": "Lee", "given": [ "Jane", "Evelyne" ], "use": "usual" } ], "resourceType": "Patient", "telecom": [ { "rank": 1, "system": "phone", "use": "home", "value": "0982344522" }, { "rank": 2, "system": "email", "use": "home", "value": "jane@example.com" } ] }, "search": { "mode": "match" } }, { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/8ac08aa9-63d2-4e81-8647-3a138d7f9f5a", "resource": { "address": [ { "country": "US", "line": [ "907 Arlo Cliffs", "Suite 984" ], "postalCode": "XXXXX" } ], "birthDate": "1940-12-01", "communication": [ { "language": { "coding": [ { "code": "en-US", "display": "English (United States)", "system": "urn:ietf:bcp:47" } ] } } ], "deceasedDateTime": "2009-07-26T12:01:23-05:00", "extension": [ { "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race", "valueCodeableConcept": { "coding": [ { "code": "2106-3", "display": "White", "system": "http://hl7.org/fhir/v3/Race" } ], "text": "race" } }, { "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity", "valueCodeableConcept": { "coding": [ { "code": "2186-5", "display": "Nonhispanic", "system": "http://hl7.org/fhir/v3/Ethnicity" } ], "text": "ethnicity" } }, { "url": "http://hl7.org/fhir/StructureDefinition/birthPlace", "valueAddress": { "city": "Tama", "country": "US", "postalCode": "52339", "state": "Iowa" } }, { "url": "http://hl7.org/fhir/StructureDefinition/patient-mothersMaidenName", "valueString": "Farrah Feeney" }, { "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-birthsex", "valueCode": "M" }, { "url": "http://hl7.org/fhir/StructureDefinition/patient-interpreterRequired", "valueBoolean": false }, { "url": "http://standardhealthrecord.org/fhir/StructureDefinition/shr-actor-FictionalPerson-extension", "valueBoolean": true }, { "url": "http://standardhealthrecord.org/fhir/StructureDefinition/shr-demographics-FathersName-extension", "valueHumanName": { "text": "Christopher Diaz" } }, { "url": "http://standardhealthrecord.org/fhir/StructureDefinition/shr-demographics-SocialSecurityNumber-extension", "valueString": "999-16-9041" } ], "gender": "male", "generalPractitioner": [ { "reference": "Organization/9fb51c89-1453-406c-8357-578311b43a91" } ], "id": "8ac08aa9-63d2-4e81-8647-3a138d7f9f5a", "identifier": [ { "system": "https://github.com/synthetichealth/synthea", "value": "c1ee4b49-3194-4b39-91ed-4d1393a780c6" }, { "system": "http://hl7.org/fhir/sid/us-ssn", "type": { "coding": [ { "code": "SB", "system": "http://hl7.org/fhir/identifier-type" } ] }, "value": "999169041" }, { "system": "urn:oid:2.16.840.1.113883.4.3.25", "type": { "coding": [ { "code": "DL", "system": "http://hl7.org/fhir/v2/0203" } ] }, "value": "S99992205" }, { "system": "http://standardhealthrecord.org/fhir/StructureDefinition/passportNumber", "type": { "coding": [ { "code": "PPN", "system": "http://hl7.org/fhir/v2/0203" } ] }, "value": "X12551631X" }, { "system": "http://hospital.smarthealthit.org", "type": { "coding": [ { "code": "MR", "system": "http://hl7.org/fhir/v2/0203" } ] }, "value": "c1ee4b49-3194-4b39-91ed-4d1393a780c6" } ], "maritalStatus": { "coding": [ { "code": "S", "system": "http://hl7.org/fhir/v3/MaritalStatus" } ], "text": "S" }, "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "profile": [ "http://standardhealthrecord.org/fhir/StructureDefinition/shr-demographics-PersonOfRecord" ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "multipleBirthBoolean": false, "name": [ { "family": "Diaz", "given": [ "Christopher" ], "prefix": [ "Mr." ], "use": "official" } ], "resourceType": "Patient", "telecom": [ { "system": "phone", "use": "home", "value": "434-100-2918 x800" } ], "text": { "div": "Generated by Synthea. Version identifier: 2dd4c1c37e2743d14e5073c7b5e42899a3e51531", "status": "generated" } }, "search": { "mode": "match" } }, { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/patient1", "resource": { "active": false, "address": [ { "city": "Mountain View", "district": "KW", "line": [ "1800 Amphibious Blvd" ], "period": { "start": "1974-12-25" }, "text": "1800 Amphibious Blvd", "type": "both", "use": "home" } ], "birthDate": "1974-12-25", "communication": [ { "language": { "coding": [ { "code": "ENG", "display": "def", "system": "123" }, { "code": "english", "display": "ghi", "system": "456" } ], "text": "abc" } } ], "deceasedBoolean": false, "gender": "male", "id": "patient1", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "tag": [ { "code": "tag1", "display": "Tag One", "system": "tag-system" }, { "code": "tag2", "display": "Tag Two", "system": "other-system" } ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "name": [ { "family": "Lee", "given": [ "Alex", "Cleve" ], "text": "Alex Lee", "use": "usual" }, { "given": [ "Joe" ], "use": "nickname" } ], "resourceType": "Patient", "telecom": [ { "rank": 1, "system": "phone", "use": "home", "value": "0982344522" }, { "rank": 2, "system": "email", "use": "home", "value": "alex@example.com" } ] }, "search": { "mode": "match" } } ], "link": [ { "relation": "search", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_lastUpdated=gt2018-01-01" }, { "relation": "first", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_lastUpdated=gt2018-01-01" }, { "relation": "self", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_lastUpdated=gt2018-01-01" } ], "resourceType": "Bundle", "total": 4, "type": "searchset" }
Pesquisa de tokens
Os parâmetros de pesquisa de tokens aplicam-se a casos em que um valor não é uma string arbitrária, mas sim uma entidade num sistema de nomenclatura. A correspondência de strings num parâmetro de token é exata.
A maioria das pesquisas de tokens aplica-se a tipos de dados complexos que contêm um system
que é
um URI que indica o sistema de nomenclatura do qual o valor code
é retirado. Estas
pesquisas suportam as seguintes sintaxes de valores:
[parameter]=[code]
corresponde ao valor decode
, independentemente desystem
[parameter]=[system]|[code]
tem de corresponder aosystem
e aocode
especificados[parameter]=|[code]
corresponde acode
quando o valorsystem
está vazio[parameter]=[system]|
corresponde a qualquercode
com o valorsystem
indicado
Existem vários modificadores que acionam a funcionalidade de pesquisa de tokens alternativos:
:not
nega as condições de correspondência de uma pesquisa de tokens:text
faz uma pesquisa de string (não de correspondência exata) no campotext
oudisplay
associado ao código, em vez do valor do código em si:above
usa um parâmetro apenas do formulário[system]|[code]
e corresponde aos recursos em que o código no recurso subsume o parâmetro de consulta. Para usar este modificador, osystem
especificado tem de existir no FHIR store como um recursoCodeSystem
.:below
é semelhante a:above
, mas corresponde se o código no recurso for subsumido pelo parâmetro de consulta.:in
usa um único parâmetro com a sintaxe de parâmetro de referência, por exemplo,code:in=ValueSet/1234
. A referência tem de fazer referência a umValueSet
recurso na mesma loja FHIR. O modificador corresponde a qualquer código que esteja noValueSet
referenciado.:not-in
nega as condições de:in
As pesquisas de tokens também se aplicam a campos booleanos e URI, bem como a determinados campos de strings onde só é permitida a correspondência exata. Nestes casos, o único formato de parâmetro é [parameter]=[value]
.
Exemplos de pesquisa de tokens
REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- PROJECT_ID: o ID do seu Google Cloud projeto
- LOCATION: a localização do conjunto de dados principal
- DATASET_ID: o conjunto de dados principal do FHIR store
- FHIR_STORE_ID: o ID da loja FHIR
Para enviar o seu pedido, escolha uma destas opções:
curl
O exemplo seguinte usa a consulta
Patient?_tag=tag-system|tag2
para pesquisar recursos de pacientes com um system
e um code
especificados.
Execute o seguinte comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient?_tag=tag-system|tag2"
PowerShell
O exemplo seguinte usa a consulta
Patient?_tag=tag-system|tag2
para pesquisar recursos de pacientes com um system
e um code
especificados.
Execute o seguinte comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient?_tag=tag-system|tag2" | Select-Object -Expand Content
Deve receber uma resposta JSON semelhante à seguinte:
{ "entry": [ { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/patient2", "resource": { "active": false, "address": [ { "city": "Mountain View", "district": "KW", "line": [ "1800 Amphibious Blvd" ], "period": { "start": "2000-01-01" }, "text": "1800 Amphibious Blvd", "type": "both", "use": "home" } ], "birthDate": "1989-03-11", "communication": [ { "language": { "coding": [ { "code": "FR", "display": "jkl", "system": "123" }, { "code": "french", "display": "mno", "system": "456" } ], "text": "pqr" } } ], "deceasedBoolean": false, "gender": "female", "id": "patient2", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "tag": [ { "code": "tag2", "display": "Tag Two", "system": "tag-system" }, { "code": "tag|tag3", "display": "Tag Three", "system": "other" } ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "name": [ { "family": "Lee", "given": [ "Jane", "Evelyne" ], "use": "usual" } ], "resourceType": "Patient", "telecom": [ { "rank": 1, "system": "phone", "use": "home", "value": "0982344522" }, { "rank": 2, "system": "email", "use": "home", "value": "jane@example.com" } ] }, "search": { "mode": "match" } } ], "link": [ { "relation": "search", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_tag=tag-system%7Ctag2" }, { "relation": "first", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_tag=tag-system%7Ctag2" }, { "relation": "self", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_tag=tag-system%7Ctag2" } ], "resourceType": "Bundle", "total": 1, "type": "searchset" }
Pesquisar valores em falta
O modificador de pesquisa :missing
pode ser usado em qualquer parâmetro de pesquisa para fazer a correspondência com base na presença ou ausência de qualquer valor no campo especificado. Por exemplo, Patient?gender=unknown
corresponde a recursos que contêm explicitamente o valor de enumeração unknown
para o género, mas, como este campo não é obrigatório, podem existir outros recursos que não preenchem o campo. Estes recursos podem ser
associados pelo Patient?gender:missing=true
. Por outro lado, Patient?gender:missing=false
corresponde a qualquer recurso que preencha explicitamente este campo.
Exemplos de valores em falta
REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- PROJECT_ID: o ID do seu Google Cloud projeto
- LOCATION: a localização do conjunto de dados principal
- DATASET_ID: o conjunto de dados principal do FHIR store
- FHIR_STORE_ID: o ID da loja FHIR
Para enviar o seu pedido, escolha uma destas opções:
curl
O exemplo seguinte usa a consulta
gender:missing=false
:
Execute o seguinte comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient?gender:missing=false"
PowerShell
O exemplo seguinte usa a consulta
gender:missing=false
:
Execute o seguinte comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient?gender:missing=false" | Select-Object -Expand Content
patient3
tem um valor gender
em falta:
{ "entry": [ { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/mydataset/fhirStores/FHIR_STORE_ID/fhir/Patient/patient3", "resource": { "active": false, "address": [ { "city": "Lisbon", "district": "KW", "line": [ "Avenida da Pastelaria, 1903" ], "period": { "start": "1980-01-01" }, "text": "Avenida da Pastelaria, 1903", "type": "both", "use": "home" } ], "birthDate": "1980-01-01", "deceasedBoolean": false, "id": "patient3", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "tag": [ { "code": "tag3", "display": "Tag $3", "system": "other|tag" }, { "code": "code,4", "display": "Tag 4", "system": "system" } ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "name": [ { "family": "Smith", "given": [ "Mary" ], "text": "Smith, Mary", "use": "usual" } ], "resourceType": "Patient", "telecom": [ { "rank": 1, "system": "phone", "use": "home", "value": "1110891111" }, { "rank": 2, "system": "email", "use": "home", "value": "mary@example.com" } ] }, "search": { "mode": "match" } } ], "link": [ { "relation": "search", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/mydataset/fhirStores/FHIR_STORE_ID/fhir/Patient/?gender%3Amissing=true" }, { "relation": "first", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/mydataset/fhirStores/FHIR_STORE_ID/fhir/Patient/?gender%3Amissing=true" }, { "relation": "self", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/mydataset/fhirStores/FHIR_STORE_ID/fhir/Patient/?gender%3Amissing=true" } ], "resourceType": "Bundle", "total": 1, "type": "searchset" }
Pesquisa de texto
O parâmetro de pesquisa especial _content
executa uma correspondência de texto em campos baseados em strings (excluindo campos numéricos, de data ou de enumeração) se o campo for o destino de qualquer parâmetro de pesquisa no recurso. Por predefinição, _content
corresponde a recursos que
contêm todas as palavras na consulta, com suporte para operadores adicionais:
|
é o operador OR. Por exemplo,abc | def | ghi xyz
corresponde a um recurso que contémxyz
e um ou mais deabc
def
ghi
.-
é o operador NOT. Por exemplo,abc -def
corresponde a um recurso que contémabc
, mas não contémdef
.
A correspondência baseia-se em palavras completas e não corresponde a substrings nem a carateres não alfanuméricos. A ordem das palavras não é importante. As palavras correspondentes podem ser distribuídas por vários campos no recurso.
O parâmetro _text
executa o mesmo tipo de correspondência apenas no campo Narrative, que se destina a conter um resumo legível por humanos do conteúdo do recurso. A Cloud Healthcare API não gera automaticamente este resumo, mas suporta o parâmetro de pesquisa _text
se estes dados tiverem sido preenchidos pelo cliente quando criou ou atualizou o recurso.
Exemplos de pesquisa de texto
REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- PROJECT_ID: o ID do seu Google Cloud projeto
- LOCATION: a localização do conjunto de dados principal
- DATASET_ID: o conjunto de dados principal do FHIR store
- FHIR_STORE_ID: o ID da loja FHIR
Para enviar o seu pedido, escolha uma destas opções:
curl
O exemplo seguinte usa a consulta
_content=Smith%20|%20Mountain%20View
:
Execute o seguinte comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient?_content=Smith%20|%20Mountain%20View"
PowerShell
O exemplo seguinte usa a consulta
_content=Smith%20|%20Mountain%20View
:
Execute o seguinte comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient?_content=Smith%20|%20Mountain%20View" | Select-Object -Expand Content
Deve receber uma resposta JSON semelhante à seguinte:
{ "entry": [ { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/patient1", "resource": { "active": false, "address": [ { "city": "Mountain View", "district": "KW", "line": [ "1800 Amphibious Blvd" ], "period": { "start": "1974-12-25" }, "text": "1800 Amphibious Blvd", "type": "both", "use": "home" } ], "birthDate": "1974-12-25", "communication": [ { "language": { "coding": [ { "code": "ENG", "display": "def", "system": "123" }, { "code": "english", "display": "ghi", "system": "456" } ], "text": "abc" } } ], "deceasedBoolean": false, "gender": "male", "id": "patient1", "meta": { "lastUpdated": "2021-10-21T16:41:47.211939+00:00", "tag": [ { "code": "tag1", "display": "Tag One", "system": "tag-system" }, { "code": "tag2", "display": "Tag Two", "system": "other-system" } ], "versionId": "MTYzNDgzNDUwNzIxMTkzOTAwMA" }, "name": [ { "family": "Lee", "given": [ "Alex", "Cleve" ], "text": "Alex Lee", "use": "usual" }, { "given": [ "Joe" ], "use": "nickname" } ], "resourceType": "Patient", "telecom": [ { "rank": 1, "system": "phone", "use": "home", "value": "0982344522" }, { "rank": 2, "system": "email", "use": "home", "value": "alex@example.com" } ] }, "search": { "mode": "match" } }, { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/patient2", "resource": { "active": false, "address": [ { "city": "Mountain View", "district": "KW", "line": [ "1800 Amphibious Blvd" ], "period": { "start": "2000-01-01" }, "text": "1800 Amphibious Blvd", "type": "both", "use": "home" } ], "birthDate": "1989-03-11", "communication": [ { "language": { "coding": [ { "code": "FR", "display": "jkl", "system": "123" }, { "code": "french", "display": "mno", "system": "456" } ], "text": "pqr" } } ], "deceasedBoolean": false, "gender": "female", "id": "patient2", "meta": { "lastUpdated": "2021-10-21T16:41:47.211939+00:00", "tag": [ { "code": "tag2", "display": "Tag Two", "system": "tag-system" }, { "code": "tag|tag3", "display": "Tag Three", "system": "other" } ], "versionId": "MTYzNDgzNDUwNzIxMTkzOTAwMA" }, "name": [ { "family": "Lee", "given": [ "Jane", "Evelyne" ], "use": "usual" } ], "resourceType": "Patient", "telecom": [ { "rank": 1, "system": "phone", "use": "home", "value": "0982344522" }, { "rank": 2, "system": "email", "use": "home", "value": "jane@example.com" } ] }, "search": { "mode": "match" } } ], "link": [ { "relation": "search", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_content=Smith%7CMountain+View" }, { "relation": "first", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_content=Smith%7CMountain+View" }, { "relation": "self", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_content=Smith%7CMountain+View" } ], "resourceType": "Bundle", "total": 2, "type": "searchset" }
Parâmetros de pesquisa compostos
Quando pesquisa com vários parâmetros de consulta, existem casos em que os parâmetros de pesquisa individuais combinados com AND correspondem a resultados não pretendidos. Os parâmetros de pesquisa compostos são um tipo especial de parâmetro de pesquisa que resolve este problema.
Por exemplo, o recurso Observation
pode conter vários valores no campo component
, cada um dos quais contém um par de code
e value
. Uma pesquisa de Observation?component-code=8867-4&component-value-quantity=lt50
corresponderia a um recurso que tivesse um componente com um code
de 8867-4 e um componente diferente com um value
inferior a 50. Esta pesquisa não pode ser usada para restringir a uma correspondência destes dois valores no mesmo componente.
Os parâmetros de pesquisa compostos definem um novo parâmetro que combina outros dois parâmetros de pesquisa e define um nível de aninhamento no qual ambos têm de corresponder. Na consulta, os dois valores são unidos por $
. Por exemplo,
Observation
tem um parâmetro composto component-code-value-quantity
que pode
restringir o exemplo anterior a um único componente pesquisando
Observation?component-code-value-quantity=8867-4$lt50
. Estes parâmetros são definidos pela especificação FHIR e não existem para todas as combinações de parâmetros de pesquisa.
Os parâmetros de pesquisa compostos não permitem modificadores.
Tal como acontece com todos os parâmetros de pesquisa, pode encontrar informações sobre os parâmetros compostos suportados pela Cloud Healthcare API na declaração de capacidade ou na declaração de conformidade com a FHIR.
Exemplos de pesquisa composta
REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- PROJECT_ID: o ID do seu Google Cloud projeto
- LOCATION: a localização do conjunto de dados principal
- DATASET_ID: o conjunto de dados principal do FHIR store
- FHIR_STORE_ID: o ID da loja FHIR
Para enviar o seu pedido, escolha uma destas opções:
curl
O exemplo seguinte usa a consulta
Observation?component-code-value-quantity=8480-6$lt150
.
Execute o seguinte comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation?component-code-value-quantity=8480-6\$lt150"
PowerShell
O exemplo seguinte usa a consulta
Observation?component-code-value-quantity=8480-6$lt150
.
Execute o seguinte comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation?component-code-value-quantity=8480-6\$lt150" | Select-Object -Expand Content
component-code=8480-6
e um component-value-quantity
de 133, que cumpre os critérios para lt150
.
{ "entry": [ { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/a35bf421-1f00-4897-a94d-4d47c3bb306b", "resource": { "category": [ { "coding": [ { "code": "vital-signs", "system": "http://hl7.org/fhir/observation-category" } ] } ], "code": { "coding": [ { "code": "55284-4", "display": "Blood Pressure", "system": "http://loinc.org" } ] }, "component": [ { "code": { "coding": [ { "code": "8480-6", "display": "Systolic Blood Pressure", "system": "http://loinc.org" } ], "text": "Systolic Blood Pressure" }, "valueQuantity": { "code": "mmHg", "system": "http://unitsofmeasure.org", "unit": "mmHg", "value": 133 } }, { "code": { "coding": [ { "code": "8462-4", "display": "Diastolic Blood Pressure", "system": "http://loinc.org" } ], "text": "Diastolic Blood Pressure" }, "valueQuantity": { "code": "mmHg", "system": "http://unitsofmeasure.org", "unit": "mmHg", "value": 84 } } ], "effectiveDateTime": "2008-03-07T17:47:02-05:00", "encounter": { "reference": "Encounter/0e9d631c-4407-45e5-bfbe-689806caaf7b" }, "id": "a35bf421-1f00-4897-a94d-4d47c3bb306b", "issued": "2008-03-07T17:47:02-05:00", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "profile": [ "http://standardhealthrecord.org/fhir/StructureDefinition/shr-observation-Observation", "http://standardhealthrecord.org/fhir/StructureDefinition/shr-vital-BloodPressure" ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "resourceType": "Observation", "status": "final", "subject": { "reference": "Patient/8ac08aa9-63d2-4e81-8647-3a138d7f9f5a" } }, "search": { "mode": "match" } } ], "link": [ { "relation": "search", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?component-code-value-quantity=8480-6%24lt150" }, { "relation": "first", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?component-code-value-quantity=8480-6%24lt150" }, { "relation": "self", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?component-code-value-quantity=8480-6%24lt150" } ], "resourceType": "Bundle", "total": 1, "type": "searchset" }
Pesquisa encadeada
Uma pesquisa encadeada permite que uma pesquisa percorra referências no contexto de uma consulta. A sintaxe básica de uma pesquisa encadeada é:
[reference parameter]:[resource type].[inner search parameter]=[inner value]
Se o parâmetro de referência se referir apenas a um tipo de recurso, o :[resource
type]
pode ser omitido, o que resulta em:
[reference parameter].[inner search parameter]=[inner value]
Por exemplo, Observation
tem um parâmetro de pesquisa de referência subject
que pode apontar para um Group
, um Device
, um Patient
ou um Location
. Para encontrar Observations
que tenham um subject
, que é um Patient
com um nome que começa por "João",
pode pesquisar Observation?subject:Patient.name=Joe
.
Se a consulta tiver vários parâmetros encadeados, cada cadeia é avaliada
separadamente. Por exemplo, Patient?general-practitioner.name=Joe&general-practitioner.address-country=Canada
corresponderia a um Patient
que tivesse duas
referências general-practitioner
, uma com o nome "João" e a outra com uma
morada no Canadá. Não existe uma sintaxe para agrupar estas cláusulas de forma a corresponder apenas a Joe do Canadá.
As pesquisas encadeadas podem ser recursivas com outras cadeias ou cadeias invertidas. Por exemplo, Observation?subject:Patient.organization.name=Acme
corresponderia a um Observation
que faz referência a um subject
que faz referência a um organization
que tem um name
de Acme
.
Exemplos de pesquisas encadeadas
REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- PROJECT_ID: o ID do seu Google Cloud projeto
- LOCATION: a localização do conjunto de dados principal
- DATASET_ID: o conjunto de dados principal do FHIR store
- FHIR_STORE_ID: o ID da loja FHIR
Para enviar o seu pedido, escolha uma destas opções:
curl
O exemplo seguinte usa a consulta
Observation?subject:Patient.name=Christopher
para devolver todas as observações que têm um subject
, que é um Patient
que tem um nome que começa por Christopher
.
Execute o seguinte comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation?subject:Patient.name=Christopher"
PowerShell
O exemplo seguinte usa a consulta
Observation?subject:Patient.name=Christopher
para devolver todas as observações que têm um subject
, que é um Patient
que tem um nome que começa por Christopher
.
Execute o seguinte comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation?subject:Patient.name=Christopher" | Select-Object -Expand Content
Deve receber uma resposta JSON semelhante à seguinte:
{ "entry": [ { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/85652a63-09ba-4a5b-ac5b-b690c6972eb5", "resource": { "category": [ { "coding": [ { "code": "laboratory", "system": "http://hl7.org/fhir/observation-category" } ] } ], "code": { "coding": [ { "code": "2093-3", "display": "Total Cholesterol", "system": "http://loinc.org" } ], "text": "Total Cholesterol" }, "effectiveDateTime": "2008-03-07T17:47:02-05:00", "encounter": { "reference": "Encounter/0e9d631c-4407-45e5-bfbe-689806caaf7b" }, "id": "85652a63-09ba-4a5b-ac5b-b690c6972eb5", "issued": "2008-03-07T17:47:02-05:00", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "profile": [ "http://standardhealthrecord.org/fhir/StructureDefinition/shr-observation-Observation" ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "resourceType": "Observation", "status": "final", "subject": { "reference": "Patient/8ac08aa9-63d2-4e81-8647-3a138d7f9f5a" }, "valueQuantity": { "code": "mg/dL", "system": "http://unitsofmeasure.org", "unit": "mg/dL", "value": 191 } }, "search": { "mode": "match" } }, { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/e7aea507-61af-4290-9323-0b3daed0b7a9", "resource": { "category": [ { "coding": [ { "code": "laboratory", "system": "http://hl7.org/fhir/observation-category" } ] } ], "code": { "coding": [ { "code": "2571-8", "display": "Triglycerides", "system": "http://loinc.org" } ], "text": "Triglycerides" }, "effectiveDateTime": "2008-03-07T17:47:02-05:00", "encounter": { "reference": "Encounter/0e9d631c-4407-45e5-bfbe-689806caaf7b" }, "id": "e7aea507-61af-4290-9323-0b3daed0b7a9", "issued": "2008-03-07T17:47:02-05:00", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "profile": [ "http://standardhealthrecord.org/fhir/StructureDefinition/shr-observation-Observation" ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "resourceType": "Observation", "status": "final", "subject": { "reference": "Patient/8ac08aa9-63d2-4e81-8647-3a138d7f9f5a" }, "valueQuantity": { "code": "mg/dL", "system": "http://unitsofmeasure.org", "unit": "mg/dL", "value": 143 } }, "search": { "mode": "match" } }, { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/a35bf421-1f00-4897-a94d-4d47c3bb306b", "resource": { "category": [ { "coding": [ { "code": "vital-signs", "system": "http://hl7.org/fhir/observation-category" } ] } ], "code": { "coding": [ { "code": "55284-4", "display": "Blood Pressure", "system": "http://loinc.org" } ] }, "component": [ { "code": { "coding": [ { "code": "8480-6", "display": "Systolic Blood Pressure", "system": "http://loinc.org" } ], "text": "Systolic Blood Pressure" }, "valueQuantity": { "code": "mmHg", "system": "http://unitsofmeasure.org", "unit": "mmHg", "value": 133 } }, { "code": { "coding": [ { "code": "8462-4", "display": "Diastolic Blood Pressure", "system": "http://loinc.org" } ], "text": "Diastolic Blood Pressure" }, "valueQuantity": { "code": "mmHg", "system": "http://unitsofmeasure.org", "unit": "mmHg", "value": 84 } } ], "effectiveDateTime": "2008-03-07T17:47:02-05:00", "encounter": { "reference": "Encounter/0e9d631c-4407-45e5-bfbe-689806caaf7b" }, "id": "a35bf421-1f00-4897-a94d-4d47c3bb306b", "issued": "2008-03-07T17:47:02-05:00", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "profile": [ "http://standardhealthrecord.org/fhir/StructureDefinition/shr-observation-Observation", "http://standardhealthrecord.org/fhir/StructureDefinition/shr-vital-BloodPressure" ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "resourceType": "Observation", "status": "final", "subject": { "reference": "Patient/8ac08aa9-63d2-4e81-8647-3a138d7f9f5a" } }, "search": { "mode": "match" } }, { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/14df9701-2dd4-4538-8fac-776c40dec22d", "resource": { "category": [ { "coding": [ { "code": "vital-signs", "system": "http://hl7.org/fhir/observation-category" } ] } ], "code": { "coding": [ { "code": "8302-2", "display": "Body Height", "system": "http://loinc.org" } ], "text": "Body Height" }, "effectiveDateTime": "2008-03-07T17:47:02-05:00", "encounter": { "reference": "Encounter/0e9d631c-4407-45e5-bfbe-689806caaf7b" }, "id": "14df9701-2dd4-4538-8fac-776c40dec22d", "issued": "2008-03-07T17:47:02-05:00", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "profile": [ "http://standardhealthrecord.org/fhir/StructureDefinition/shr-observation-Observation", "http://standardhealthrecord.org/fhir/StructureDefinition/shr-vital-VitalSign", "http://standardhealthrecord.org/fhir/StructureDefinition/shr-vital-BodyHeight" ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "resourceType": "Observation", "status": "final", "subject": { "reference": "Patient/8ac08aa9-63d2-4e81-8647-3a138d7f9f5a" }, "valueQuantity": { "code": "cm", "system": "http://unitsofmeasure.org", "unit": "centimeters", "value": 177.72961711703704 } }, "search": { "mode": "match" } }, { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/1e2fdce6-4c79-4ef8-a5a9-2326cddbc8b3", "resource": { "category": [ { "coding": [ { "code": "vital-signs", "system": "http://hl7.org/fhir/observation-category" } ] } ], "code": { "coding": [ { "code": "39156-5", "display": "Body Mass Index", "system": "http://loinc.org" } ], "text": "Body Mass Index" }, "effectiveDateTime": "2008-03-07T17:47:02-05:00", "encounter": { "reference": "Encounter/0e9d631c-4407-45e5-bfbe-689806caaf7b" }, "id": "1e2fdce6-4c79-4ef8-a5a9-2326cddbc8b3", "issued": "2008-03-07T17:47:02-05:00", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "profile": [ "http://standardhealthrecord.org/fhir/StructureDefinition/shr-observation-Observation", "http://standardhealthrecord.org/fhir/StructureDefinition/shr-vital-VitalSign", "http://standardhealthrecord.org/fhir/StructureDefinition/shr-vital-BodyMassIndex" ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "resourceType": "Observation", "status": "final", "subject": { "reference": "Patient/8ac08aa9-63d2-4e81-8647-3a138d7f9f5a" }, "valueQuantity": { "code": "kg/m2", "system": "http://unitsofmeasure.org", "unit": "kg/m2", "value": 38.34566163709526 } }, "search": { "mode": "match" } }, { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/58357362-6f18-438a-8479-3289ebab1617", "resource": { "category": [ { "coding": [ { "code": "laboratory", "system": "http://hl7.org/fhir/observation-category" } ] } ], "code": { "coding": [ { "code": "18262-6", "display": "Low Density Lipoprotein Cholesterol", "system": "http://loinc.org" } ], "text": "Low Density Lipoprotein Cholesterol" }, "effectiveDateTime": "2008-03-07T17:47:02-05:00", "encounter": { "reference": "Encounter/0e9d631c-4407-45e5-bfbe-689806caaf7b" }, "id": "58357362-6f18-438a-8479-3289ebab1617", "issued": "2008-03-07T17:47:02-05:00", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "profile": [ "http://standardhealthrecord.org/fhir/StructureDefinition/shr-observation-Observation" ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "resourceType": "Observation", "status": "final", "subject": { "reference": "Patient/8ac08aa9-63d2-4e81-8647-3a138d7f9f5a" }, "valueQuantity": { "code": "mg/dL", "system": "http://unitsofmeasure.org", "unit": "mg/dL", "value": 102 } }, "search": { "mode": "match" } }, { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/c6f1b042-a0fc-4bbc-9cd5-7a8a924c00e7", "resource": { "category": [ { "coding": [ { "code": "laboratory", "system": "http://hl7.org/fhir/observation-category" } ] } ], "code": { "coding": [ { "code": "2085-9", "display": "High Density Lipoprotein Cholesterol", "system": "http://loinc.org" } ], "text": "High Density Lipoprotein Cholesterol" }, "effectiveDateTime": "2008-03-07T17:47:02-05:00", "encounter": { "reference": "Encounter/0e9d631c-4407-45e5-bfbe-689806caaf7b" }, "id": "c6f1b042-a0fc-4bbc-9cd5-7a8a924c00e7", "issued": "2008-03-07T17:47:02-05:00", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "profile": [ "http://standardhealthrecord.org/fhir/StructureDefinition/shr-observation-Observation" ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "resourceType": "Observation", "status": "final", "subject": { "reference": "Patient/8ac08aa9-63d2-4e81-8647-3a138d7f9f5a" }, "valueQuantity": { "code": "mg/dL", "system": "http://unitsofmeasure.org", "unit": "mg/dL", "value": 60 } }, "search": { "mode": "match" } }, { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/ac57b908-2804-4d67-a7ad-1e4a4c3225a1", "resource": { "category": [ { "coding": [ { "code": "vital-signs", "system": "http://hl7.org/fhir/observation-category" } ] } ], "code": { "coding": [ { "code": "29463-7", "display": "Body Weight", "system": "http://loinc.org" } ], "text": "Body Weight" }, "effectiveDateTime": "2008-03-07T17:47:02-05:00", "encounter": { "reference": "Encounter/0e9d631c-4407-45e5-bfbe-689806caaf7b" }, "id": "ac57b908-2804-4d67-a7ad-1e4a4c3225a1", "issued": "2008-03-07T17:47:02-05:00", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "profile": [ "http://standardhealthrecord.org/fhir/StructureDefinition/shr-observation-Observation", "http://standardhealthrecord.org/fhir/StructureDefinition/shr-vital-VitalSign", "http://standardhealthrecord.org/fhir/StructureDefinition/shr-vital-BodyWeight" ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "resourceType": "Observation", "status": "final", "subject": { "reference": "Patient/8ac08aa9-63d2-4e81-8647-3a138d7f9f5a" }, "valueQuantity": { "code": "kg", "system": "http://unitsofmeasure.org", "unit": "kg", "value": 121.12557348891558 } }, "search": { "mode": "match" } } ], "link": [ { "relation": "search", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?subject%3APatient.name=Christopher" }, { "relation": "first", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?subject%3APatient.name=Christopher" }, { "relation": "self", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation/?subject%3APatient.name=Christopher" } ], "resourceType": "Bundle", "total": 8, "type": "searchset" }
Pesquisa encadeada inversa
Uma pesquisa encadeada inversa faz corresponder recursos com base em critérios noutros recursos que se referem a eles. A sintaxe para uma pesquisa encadeada inversa é:
_has:[resource type]:[reference parameter]:[search parameter]=[value]
Por exemplo, o recurso Appointment
tem um parâmetro de pesquisa patient
que faz referência a um recurso Patient
. Para encontrar todos os recursos Patient
referenciados por um recurso Appointment
com a data 2020-04-01
, use Patient?_has:Appointment:patient:date=eq2020-04-01
.
As cadeias invertidas podem ser recursivas com outras cadeias ou cadeias invertidas. Por exemplo, o seguinte:
Practitioner?_has:Encounter:practitioner:_has:Claim:encounter:created=eq2020-04-01
corresponderia a um Practitioner
P se existisse um Encounter
E e um Claim
C de modo que C tivesse uma data de criação de 2020-04-01
, C fizesse referência a E através da respetiva referência encounter
e E fizesse referência a P através da respetiva referência practitioner
.
Exemplos de pesquisas encadeadas inversas
REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- PROJECT_ID: o ID do seu Google Cloud projeto
- LOCATION: a localização do conjunto de dados principal
- DATASET_ID: o conjunto de dados principal do FHIR store
- FHIR_STORE_ID: o ID da loja FHIR
Para enviar o seu pedido, escolha uma destas opções:
curl
O exemplo seguinte usa a consulta
Patient?_has:Procedure:patient:date=eq2008-03-07
.
Execute o seguinte comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient?_has:Procedure:patient:date=eq2008-03-07"
PowerShell
O exemplo seguinte usa a consulta
Patient?_has:Procedure:patient:date=eq2008-03-07
.
Execute o seguinte comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient?_has:Procedure:patient:date=eq2008-03-07" | Select-Object -Expand Content
Deve receber uma resposta JSON semelhante à seguinte:
{ "entry": [ { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/8ac08aa9-63d2-4e81-8647-3a138d7f9f5a", "resource": { "address": [ { "country": "US", "line": [ "907 Arlo Cliffs", "Suite 984" ], "postalCode": "XXXXX" } ], "birthDate": "1940-12-01", "communication": [ { "language": { "coding": [ { "code": "en-US", "display": "English (United States)", "system": "urn:ietf:bcp:47" } ] } } ], "deceasedDateTime": "2009-07-26T12:01:23-05:00", "extension": [ { "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race", "valueCodeableConcept": { "coding": [ { "code": "2106-3", "display": "White", "system": "http://hl7.org/fhir/v3/Race" } ], "text": "race" } }, { "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity", "valueCodeableConcept": { "coding": [ { "code": "2186-5", "display": "Nonhispanic", "system": "http://hl7.org/fhir/v3/Ethnicity" } ], "text": "ethnicity" } }, { "url": "http://hl7.org/fhir/StructureDefinition/birthPlace", "valueAddress": { "city": "Tama", "country": "US", "postalCode": "52339", "state": "Iowa" } }, { "url": "http://hl7.org/fhir/StructureDefinition/patient-mothersMaidenName", "valueString": "Farrah Feeney" }, { "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-birthsex", "valueCode": "M" }, { "url": "http://hl7.org/fhir/StructureDefinition/patient-interpreterRequired", "valueBoolean": false }, { "url": "http://standardhealthrecord.org/fhir/StructureDefinition/shr-actor-FictionalPerson-extension", "valueBoolean": true }, { "url": "http://standardhealthrecord.org/fhir/StructureDefinition/shr-demographics-FathersName-extension", "valueHumanName": { "text": "Christopher Diaz" } }, { "url": "http://standardhealthrecord.org/fhir/StructureDefinition/shr-demographics-SocialSecurityNumber-extension", "valueString": "999-16-9041" } ], "gender": "male", "generalPractitioner": [ { "reference": "Organization/9fb51c89-1453-406c-8357-578311b43a91" } ], "id": "8ac08aa9-63d2-4e81-8647-3a138d7f9f5a", "identifier": [ { "system": "https://github.com/synthetichealth/synthea", "value": "c1ee4b49-3194-4b39-91ed-4d1393a780c6" }, { "system": "http://hl7.org/fhir/sid/us-ssn", "type": { "coding": [ { "code": "SB", "system": "http://hl7.org/fhir/identifier-type" } ] }, "value": "999169041" }, { "system": "urn:oid:2.16.840.1.113883.4.3.25", "type": { "coding": [ { "code": "DL", "system": "http://hl7.org/fhir/v2/0203" } ] }, "value": "S99992205" }, { "system": "http://standardhealthrecord.org/fhir/StructureDefinition/passportNumber", "type": { "coding": [ { "code": "PPN", "system": "http://hl7.org/fhir/v2/0203" } ] }, "value": "X12551631X" }, { "system": "http://hospital.smarthealthit.org", "type": { "coding": [ { "code": "MR", "system": "http://hl7.org/fhir/v2/0203" } ] }, "value": "c1ee4b49-3194-4b39-91ed-4d1393a780c6" } ], "maritalStatus": { "coding": [ { "code": "S", "system": "http://hl7.org/fhir/v3/MaritalStatus" } ], "text": "S" }, "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "profile": [ "http://standardhealthrecord.org/fhir/StructureDefinition/shr-demographics-PersonOfRecord" ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "multipleBirthBoolean": false, "name": [ { "family": "Diaz", "given": [ "Christopher" ], "prefix": [ "Mr." ], "use": "official" } ], "resourceType": "Patient", "telecom": [ { "system": "phone", "use": "home", "value": "434-100-2918 x800" } ], "text": { "div": "Generated by Synthea. Version identifier: 2dd4c1c37e2743d14e5073c7b5e42899a3e51531", "status": "generated" } }, "search": { "mode": "match" } } ], "link": [ { "relation": "search", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_has%3AProcedure%3Apatient%3Adate=eq2008-03-07" }, { "relation": "first", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_has%3AProcedure%3Apatient%3Adate=eq2008-03-07" }, { "relation": "self", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_has%3AProcedure%3Apatient%3Adate=eq2008-03-07" } ], "resourceType": "Bundle", "total": 1, "type": "searchset" }
Incluir recursos adicionais nos resultados da pesquisa
Os parâmetros _include
e _revinclude
pedem que os resultados da pesquisa incluam recursos adicionais ("recursos incluídos") relacionados com os recursos que correspondem diretamente à consulta ("resultados principais"). A utilização destes parâmetros é mais eficiente do que fazer uma série de pedidos para obter estes recursos adicionais separadamente. No pacote searchset
devolvido pela pesquisa, os recursos adicionados por estes parâmetros são sinalizados com entry.search.mode = include
para os distinguir dos resultados principais, que têm entry.search.mode = match
.
A inclusão direta com _include
adiciona recursos e versões de recursos
referenciados pelos resultados principais, e a inclusão inversa com _revinclude
adiciona
recursos que referenciam os resultados principais. A referência a seguir é
especificada pelo nome de um parâmetro de pesquisa e só os campos de referência que estão
disponíveis como parâmetros de pesquisa podem ser usados desta forma.
Os formatos dos parâmetros para _include
e _revinclude
são os mesmos, tendo dois ou três valores delimitados por :
. O primeiro valor é o tipo de recurso de onde a referência está a ser feita, o segundo valor é o nome do parâmetro de pesquisa e o terceiro valor opcional limita o tipo de recurso a um único tipo nos casos em que a referência pode apontar para mais do que um tipo.
Por exemplo:
MedicationRequest?_include=MedicationRequest:subject
pesquisas emMedicationRequest
recursos e, para cada recurso devolvido, também devolve o alvo da referênciasubject
, que pode ser umGroup
ou umPatient
, conforme definido na especificação FHIR.MedicationRequest?_include=MedicationRequest:subject:Patient
é semelhante, mas só devolve referênciassubject
a recursosPatient
.MedicationRequest?_revinclude=Provenance:target
pesquisa em mais deMedicationRequest
recursos e, para cada recurso devolvido, também devolve quaisquer recursosProvenance
onde a referênciatarget
emProvenance
se refere ao recurso correspondente.
_include
exemplos de pesquisa
REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- PROJECT_ID: o ID do seu Google Cloud projeto
- LOCATION: a localização do conjunto de dados principal
- DATASET_ID: o conjunto de dados principal do FHIR store
- FHIR_STORE_ID: o ID da loja FHIR
Para enviar o seu pedido, escolha uma destas opções:
curl
O exemplo seguinte usa a
Observation?code=http://loinc.org|2571-8&_include=*
consulta.
Execute o seguinte comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation?code=http://loinc.org|2571-8&_include=*"
PowerShell
O exemplo seguinte usa a
Observation?code=http://loinc.org|2571-8&_include=*
consulta.
Execute o seguinte comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Observation?code=http://loinc.org|2571-8&_include=*" | Select-Object -Expand Content
Deve receber uma resposta JSON semelhante à seguinte:
{ "entry": [ { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/8ac08aa9-63d2-4e81-8647-3a138d7f9f5a", "resource": { "address": [ { "country": "US", "line": [ "907 Arlo Cliffs", "Suite 984" ], "postalCode": "XXXXX" } ], "birthDate": "1940-12-01", "communication": [ { "language": { "coding": [ { "code": "en-US", "display": "English (United States)", "system": "urn:ietf:bcp:47" } ] } } ], "deceasedDateTime": "2009-07-26T12:01:23-05:00", "extension": [ { "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race", "valueCodeableConcept": { "coding": [ { "code": "2106-3", "display": "White", "system": "http://hl7.org/fhir/v3/Race" } ], "text": "race" } }, { "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity", "valueCodeableConcept": { "coding": [ { "code": "2186-5", "display": "Nonhispanic", "system": "http://hl7.org/fhir/v3/Ethnicity" } ], "text": "ethnicity" } }, { "url": "http://hl7.org/fhir/StructureDefinition/birthPlace", "valueAddress": { "city": "Tama", "country": "US", "postalCode": "52339", "state": "Iowa" } }, { "url": "http://hl7.org/fhir/StructureDefinition/patient-mothersMaidenName", "valueString": "Farrah Feeney" }, { "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-birthsex", "valueCode": "M" }, { "url": "http://hl7.org/fhir/StructureDefinition/patient-interpreterRequired", "valueBoolean": false }, { "url": "http://standardhealthrecord.org/fhir/StructureDefinition/shr-actor-FictionalPerson-extension", "valueBoolean": true }, { "url": "http://standardhealthrecord.org/fhir/StructureDefinition/shr-demographics-FathersName-extension", "valueHumanName": { "text": "Christopher Diaz" } }, { "url": "http://standardhealthrecord.org/fhir/StructureDefinition/shr-demographics-SocialSecurityNumber-extension", "valueString": "999-16-9041" } ], "gender": "male", "generalPractitioner": [ { "reference": "Organization/9fb51c89-1453-406c-8357-578311b43a91" } ], "id": "8ac08aa9-63d2-4e81-8647-3a138d7f9f5a", "identifier": [ { "system": "https://github.com/synthetichealth/synthea", "value": "c1ee4b49-3194-4b39-91ed-4d1393a780c6" }, { "system": "http://hl7.org/fhir/sid/us-ssn", "type": { "coding": [ { "code": "SB", "system": "http://hl7.org/fhir/identifier-type" } ] }, "value": "999169041" }, { "system": "urn:oid:2.16.840.1.113883.4.3.25", "type": { "coding": [ { "code": "DL", "system": "http://hl7.org/fhir/v2/0203" } ] }, "value": "S99992205" }, { "system": "http://standardhealthrecord.org/fhir/StructureDefinition/passportNumber", "type": { "coding": [ { "code": "PPN", "system": "http://hl7.org/fhir/v2/0203" } ] }, "value": "X12551631X" }, { "system": "http://hospital.smarthealthit.org", "type": { "coding": [ { "code": "MR", "system": "http://hl7.org/fhir/v2/0203" } ] }, "value": "c1ee4b49-3194-4b39-91ed-4d1393a780c6" } ], "maritalStatus": { "coding": [ { "code": "S", "system": "http://hl7.org/fhir/v3/MaritalStatus" } ], "text": "S" }, "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "profile": [ "http://standardhealthrecord.org/fhir/StructureDefinition/shr-demographics-PersonOfRecord" ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "multipleBirthBoolean": false, "name": [ { "family": "Diaz", "given": [ "Christopher" ], "prefix": [ "Mr." ], "use": "official" } ], "resourceType": "Patient", "telecom": [ { "system": "phone", "use": "home", "value": "434-100-2918 x800" } ], "text": { "div": "Generated by Synthea. Version identifier: 2dd4c1c37e2743d14e5073c7b5e42899a3e51531", "status": "generated" } }, "search": { "mode": "match" } } ], "link": [ { "relation": "search", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_has%3AProcedure%3Apatient%3Adate=eq2008-03-07" }, { "relation": "first", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_has%3AProcedure%3Apatient%3Adate=eq2008-03-07" }, { "relation": "self", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_has%3AProcedure%3Apatient%3Adate=eq2008-03-07" } ], "resourceType": "Bundle", "total": 1, "type": "searchset" }
O modificador :iterate
faz com que _include
seja avaliado iterativamente.
Este modificador pode seguir uma camada adicional de referências dos resultados incluídos ou seguir estruturas recursivas, como Observation:derived-from
que faz referência a outro Observation
.
A profundidade da recursão está limitada a dois níveis: o nível superior e dois subníveis. Por exemplo, suponha que tem a seguinte sequência de referências:
- Um recurso Patient que referencia um recurso PractitionerRole através do campo
Patient.generalPractitioner
. - O recurso PractitionerRole faz referência a um recurso Practitioner através do campo
PractitionerRole.practitioner
. - O recurso Practitioner faz referência a um recurso Organization através do campo
Practitioner.qualification.issuer
.
O exemplo seguinte mostra a sequência de referências. O recurso Organization no nível 3 não está incluído nos resultados da pesquisa porque excede o limite máximo de dois níveis.
Patient (Level 0)
- Patient.generalPractitioner -> PractitionerRole (Level 1)
- PractitionerRole.practitioner -> Practitioner (Level 2)
- Practitioner.organization -> Organization (Level 3)
Os exemplos adicionais seguintes descrevem o comportamento do modificador :iterate
:
Observation?_include:iterate=Observation:derived-from:Observation
pesquisas emObservation
recursos e segue recursivamente a referência derived-from de recursosObservation
correspondentes e, em seguida, de recursos incluídos.MedicationRequest?_revinclude=Provenance:target&_include:iterate=Provenance:agent
vai pesquisar mais deMedicationRequest
recursos, incluirProvenance
recursos com umtarget
que esteja neste conjunto de resultados e, em seguida, também incluir recursos referenciados através do parâmetroagent
desses recursosProvenance
.
Um caráter universal, *
, indica que devem ser incluídas todas as referências disponíveis como parâmetros de pesquisa. Pode usar o caráter universal *
como o primeiro e único argumento
em _include
ou em vez do nome do parâmetro de pesquisa do padrão
_include
, em que o terceiro valor opcional limita o tipo de recurso a um único
tipo, como no comportamento original.
Por exemplo:
Observation?_include=*
pesquisa mais deObservation
recursos e, para cada recurso, também devolve todos os recursos referenciados.Observation?_include=Observation:*
é equivalente ao anterior.MedicationRequest?_include=MedicationRequest:*:Patient
devolve todas as referências aos recursosPatient
para cada recursoMedicationRequest
.
O servidor remove recursos duplicados para que cada página de resultados inclua apenas uma cópia do recurso, mesmo que o recurso apareça em várias referências. O mesmo recurso incluído aparece em cada página de resultados se um resultado principal estiver relacionado com ele.
Faça a gestão do número de recursos incluídos
Tenha em atenção o seguinte acerca dos recursos adicionais incluídos através dos parâmetros _include
e _revinclude
:
Os recursos incluídos não são contabilizados para o tamanho da página. Não são contados em
Bundle.total
e podem fazer com que o número de recursos devolvidos seja superior a um parâmetro_count
especificado.Uma vez que os recursos incluídos não contam para o tamanho da página, tenha cuidado com os parâmetros
_include
e_revinclude
que podem produzir muitos resultados. Os tamanhos dos resultados grandes podem originar limites de tempo ou erros. Pondere usar um valor_count
inferior para limitar o número de resultados principais se esperar muitos resultados incluídos. Evite seguir uma relação de um para muitos em que o lado de muitos da relação não está limitado.Um parâmetro
_revinclude
individual adiciona, no máximo, 100 recursos adicionais. Para exemplos de utilização em que pode haver mais de 100 recursos a fazer referência aos resultados principais, faça uma das seguintes ações:- Use um pedido de consulta de pesquisa separado com o tamanho da página e os parâmetros de paginação para obter mais resultados.
Comece a pesquisa com os recursos incluídos:
Suponhamos que um recurso Encounter com o ID
1234
tem centenas de recursos Observation. A pesquisa destes recursos de observação através de_revinclude
(começando pelo encontro) devolve uma resposta que excede o limite de 100 recursos adicionais:fhir/Encounter?_id=123&_revinclude=Observation:encounter
Em alternativa, pesquise recursos de observação e inclua o encontro relacionado usando
_include
:fhir/Observation?encounter=123&_include=Observation:encounter
Esta abordagem filtra os recursos Observation apenas para os relacionados com o Encounter e obtém o recurso Encounter apenas uma vez.
Limitar os campos devolvidos nos resultados da pesquisa
O parâmetro _elements
permite que o cliente peça que apenas seja devolvido um subconjunto de campos para cada resultado da pesquisa, de modo a reduzir o tamanho da resposta omitindo dados desnecessários. O parâmetro aceita uma lista separada por vírgulas de nomes de elementos base no recurso, por exemplo, Patient?_elements=identifier,contact,link
. Apenas estes campos e os respetivos
elementos subordinados são incluídos nos recursos devolvidos. Os recursos na resposta que foram alterados por este parâmetro vão conter um valor meta.tag
de SUBSETTED
para indicar que estão incompletos.
_elements
exemplos de pesquisa
REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- PROJECT_ID: o ID do seu Google Cloud projeto
- LOCATION: a localização do conjunto de dados principal
- DATASET_ID: o conjunto de dados principal do FHIR store
- FHIR_STORE_ID: o ID da loja FHIR
Para enviar o seu pedido, escolha uma destas opções:
curl
O exemplo seguinte usa a
Patient?_elements=identifier,contact,link
consulta.
Execute o seguinte comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient?_elements=identifier,contact,link"
PowerShell
O exemplo seguinte usa a
Patient?_elements=identifier,contact,link
consulta.
Execute o seguinte comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient?_elements=identifier,contact,link" | Select-Object -Expand Content
Deve receber uma resposta JSON semelhante à seguinte:
{ "entry": [ { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/patient3", "resource": { "id": "patient3", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "tag": [ { "code": "SUBSETTED", "system": "http://hl7.org/fhir/v3/ObservationValue" } ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "resourceType": "Patient" }, "search": { "mode": "match" } }, { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/patient2", "resource": { "id": "patient2", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "tag": [ { "code": "SUBSETTED", "system": "http://hl7.org/fhir/v3/ObservationValue" } ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "resourceType": "Patient" }, "search": { "mode": "match" } }, { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/8ac08aa9-63d2-4e81-8647-3a138d7f9f5a", "resource": { "id": "8ac08aa9-63d2-4e81-8647-3a138d7f9f5a", "identifier": [ { "system": "https://github.com/synthetichealth/synthea", "value": "c1ee4b49-3194-4b39-91ed-4d1393a780c6" }, { "system": "http://hl7.org/fhir/sid/us-ssn", "type": { "coding": [ { "code": "SB", "system": "http://hl7.org/fhir/identifier-type" } ] }, "value": "999169041" }, { "system": "urn:oid:2.16.840.1.113883.4.3.25", "type": { "coding": [ { "code": "DL", "system": "http://hl7.org/fhir/v2/0203" } ] }, "value": "S99992205" }, { "system": "http://standardhealthrecord.org/fhir/StructureDefinition/passportNumber", "type": { "coding": [ { "code": "PPN", "system": "http://hl7.org/fhir/v2/0203" } ] }, "value": "X12551631X" }, { "system": "http://hospital.smarthealthit.org", "type": { "coding": [ { "code": "MR", "system": "http://hl7.org/fhir/v2/0203" } ] }, "value": "c1ee4b49-3194-4b39-91ed-4d1393a780c6" } ], "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "tag": [ { "code": "SUBSETTED", "system": "http://hl7.org/fhir/v3/ObservationValue" } ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "resourceType": "Patient" }, "search": { "mode": "match" } }, { "fullUrl": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/patient1", "resource": { "id": "patient1", "meta": { "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "tag": [ { "code": "SUBSETTED", "system": "http://hl7.org/fhir/v3/ObservationValue" } ], "versionId": "MTYzMTgyMTExMDIyMDk5ODAwMA" }, "resourceType": "Patient" }, "search": { "mode": "match" } } ], "link": [ { "relation": "search", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_elements=identifier%2Ccontact%2Clink" }, { "relation": "first", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_elements=identifier%2Ccontact%2Clink" }, { "relation": "self", "url": "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/?_elements=identifier%2Ccontact%2Clink" } ], "resourceType": "Bundle", "total": 4, "type": "searchset" }
A API Cloud Healthcare tem suporte limitado para o parâmetro _summary
, que fornece subconjuntos predefinidos de campos de recursos semelhantes a _elements
:
_summary=text
devolve apenas os campos de nível superiortext
,id
emeta
_summary=data
remove o campotext
e devolve todos os outros campos