Skip to navigation

Avaliação clínica

A avaliação clínica é o que o profissional escreveu durante o atendimento: o relato do paciente, o que o exame físico mostrou e os pontos de atenção que a equipe precisa ver de novo no próximo contato. É o texto do prontuário, não um dado codificado.

No FHIR isso é a ClinicalImpression. Cada atendimento tem no máximo uma, e ela nasce junto com ele: os dois saem do mesmo registro, e é por isso que a avaliação carrega o identificador do atendimento de origem.

Este recurso é somente leitura. Não existe POST /fhir/resources/ClinicalImpression — a avaliação clínica só é escrita pela equipe dentro do NiloCare. Veja O que a integração não cobre para o que acontece se você tentar enviá-la mesmo assim.

Campos

A coluna No NiloCare traz o rótulo com que o dado aparece para a equipe; são rótulos, não caminhos de navegação: a tela pode ser reorganizada, o rótulo é o que permite conferir se o dado é o que você esperava.

Todos os campos são de resposta — nenhum deles é enviado por você.

CampoSempre presenteO que significaNo NiloCare
subjectsimO paciente do atendimento, por um identificador delePaciente
encountersimO atendimento a que a avaliação pertenceAtendimento
identifiersimIdentificador Nilo, sempre o do atendimento de origem—
statussimConstante completed—
effectiveDateTimequase sempreQuando o registro do atendimento foi criadoCriado em
descriptionnãoA entrevista clínica escrita pelo profissional. Pode ser enviada pelo atendimento — veja Entrevista clínicaEntrevista clínica · Anamnese
investigation[0]nãoO exame físico, em item[0].displayExame físico
note[]nãoOs pontos de atenção do atendimento, um por itemPontos de atenção
assessornãoO profissional responsável pelo atendimentoResponsável
idsimO identificador Nilo FHIR do recurso, usado na leitura por ID—
metasimMetadados da gravação: versão e data da última alteração—

Um atendimento sem nenhum texto escrito mesmo assim produz uma avaliação clínica: vêm identifier, status, subject, encounter, effectiveDateTime, id e meta — e assessor, se o atendimento tiver responsável — e nada mais. A ausência de description não significa que o atendimento não existe: significa que ninguém escreveu nada nele.

Apagar o texto no NiloCare não limpa o campo aqui. Quando o profissional esvazia a entrevista clínica, ou o atendimento perde o responsável, a avaliação continua devolvendo description e assessor com o valor anterior — a atualização preserva o que já estava gravado em vez de apagá-lo. Não conclua de um description presente que o texto ainda está lá no prontuário.

investigation e note[] não têm esse problema: quando o exame físico ou os pontos de atenção são removidos, eles somem da leitura.

status é constante e não serve para saber se o atendimento está aberto ou encerrado. Quem diz isso é o status do atendimento.

effectiveDateTime também não é o horário do atendimento: é a data de criação do registro. O período em que o atendimento aconteceu está em Encounter.period.

Como o texto clínico se distribui entre os campos

Historicamente a equipe escrevia em dois campos separados, e a API os expõe assim: a entrevista em description, o exame físico em investigation[0].item[0].display.

No registro de atendimento novo, os dois campos viraram um único texto na tela, e é description que recebe tudo o que o profissional escreve — entrevista e exame físico juntos. investigation deixa de ser alimentado e passa a guardar apenas o que já estava lá.

Duas consequências para quem lê:

  • Não trate investigation como “o exame físico” e description como “a entrevista”. Onde o registro novo está em uso, description é a nota clínica inteira e investigation pode vir vazio mesmo havendo exame físico registrado.
  • Num atendimento escrito antes da mudança e editado depois, o texto do exame físico aparece nos dois campos: ele é levado para dentro da nota, e o campo antigo é preservado como estava. Concatenar description com investigation duplica esse trecho.

As duas telas convivem hoje, e qual delas a equipe usa varia por implantação — o mesmo cliente pode ler recursos das duas formas na mesma busca. Se você processa o texto, leia description como a nota clínica e use investigation só como complemento, deduplicando.

Pontos de atenção

Cada ponto de atenção do atendimento vira um item de note[], com o texto em text.

note[].authorReference é sempre o profissional responsável pelo atendimento, o mesmo que está em assessor — não o autor daquele ponto de atenção. Um ponto anotado por outro profissional volta atribuído ao responsável. Não use esse campo para auditar quem escreveu o quê. note[].time nunca vem preenchido.

Só entram os pontos de atenção vinculados a este atendimento. O cartão de pontos de atenção que a equipe vê é do paciente, não do atendimento: ele mostra também os pontos de outros atendimentos e os que não pertencem a atendimento nenhum. Nenhum desses aparece aqui, nem em outro recurso desta API — a lista de note[] é sempre menor do que a da tela.

A lista é uma fotografia do momento em que o atendimento foi gravado. Acrescentar, editar ou remover um ponto de atenção sem tocar no atendimento não atualiza a avaliação clínica: a mudança só aparece na próxima vez que o atendimento em si for salvo.

Campos que a Nilo não usa

A ClinicalImpression canônica tem campos que esta integração não produz: code, date, effectivePeriod, finding, previous, problem, prognosisCodeableConcept, prognosisReference, protocol, summary, supportingInfo e statusReason. Como esta referência descreve só o que é suportado, eles não aparecem no schema do recurso — e, como não há escrita, também não há como preenchê-los.

Repare em date: o FHIR tem dois campos de data neste recurso, e a plataforma preenche effectiveDateTime, nunca date. Isso tem consequência na busca — veja Parâmetros de busca.

Cadastrar ou atualizar

Não existe. Este recurso não tem caminho de escrita nesta API — nem para criar, nem para atualizar, nem para apagar. A avaliação clínica é escrita pela equipe no NiloCare e chega aqui já pronta.

Ela também desaparece por lá: apagado o atendimento no NiloCare, a avaliação clínica dele é removida, e um id que você já leu com sucesso passa a responder 404 sem aviso nenhum. Se você guarda o conteúdo, guarde o conteúdo — não o id.

Um POST /fhir/resources/ClinicalImpression não é uma operação suportada e não devolve um erro de validação tratável: a chamada falha com erro inesperado do servidor (500). Não escreva tratamento em cima desse comportamento — ele não é contrato, e nada é gravado no NiloCare de qualquer forma.

Dentro de uma carga em lote o erro é limpo, e igualmente definitivo: a entrada é recusada com Resource ClinicalImpression not supported.

Para registrar o conteúdo clínico de um atendimento por integração, o que existe é: Condição para diagnósticos e condutas, e Atendimentos para o atendimento em si.

Buscar

GET
/fhir/resources/ClinicalImpression
curl -G https://landing-zone-api.nilo.services/fhir/resources/ClinicalImpression \
-H "x-api-key: <apiKey>" \
-d _count=50 \
-d _lastUpdated=eq2013-01-14 \
--data-urlencode assessor:identifier=https://www.acmesaude.com.br/integracao/profissional/|5032932 \
--data-urlencode encounter:identifier=https://www.acmesaude.com.br/integracao/atendimento/|55162 \
--data-urlencode identifier=https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/care-api--appointment-v3|318472 \
--data-urlencode patient:identifier=https://www.acmesaude.com.br/integracao/paciente/|507823709 \
-d status=completed \
--data-urlencode subject:identifier=https://www.acmesaude.com.br/integracao/paciente/|507823709

A resposta é sempre um Bundle do tipo searchset.

Response
{
"resourceType": "Bundle",
"type": "searchset",
"entry": [
{
"fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/ClinicalImpression/9f4c2a17-6b83-4de5-b0a2-7c15e9d3f048",
"resource": {
"encounter": {
"identifier": {
"system": "https://www.acmesaude.com.br/integracao/atendimento/",
"value": "55162",
"use": "usual"
},
"type": "Encounter"
},
"identifier": [
{
"system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/care-api--appointment-v3",
"value": "318472",
"use": "usual"
}
],
"resourceType": "ClinicalImpression",
"status": "completed",
"subject": {
"identifier": {
"system": "https://www.acmesaude.com.br/integracao/paciente/",
"value": "507823709",
"use": "usual"
},
"type": "Patient"
},
"assessor": {
"identifier": {
"system": "https://www.acmesaude.com.br/integracao/profissional/",
"value": "5032932",
"use": "usual"
},
"type": "Practitioner"
},
"description": "Paciente relata tosse seca e dor de garganta há três dias, sem febre aferida. Nega dispneia.",
"effectiveDateTime": "2026-04-16T19:32:08+00:00",
"id": "9f4c2a17-6b83-4de5-b0a2-7c15e9d3f048",
"investigation": [
{
"code": {
"text": "physicalExam"
},
"item": [
{
"display": "Bom estado geral, eupneica, orofaringe hiperemiada sem placas."
}
]
}
],
"meta": {
"lastUpdated": "2026-04-16T20:05:03.118000Z",
"versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
},
"note": [
{
"authorReference": {
"identifier": {
"system": "https://www.acmesaude.com.br/integracao/profissional/",
"value": "5032932",
"use": "usual"
},
"type": "Practitioner"
},
"text": "Paciente mora sozinha e tem dificuldade de locomoção."
}
]
},
"search": {
"mode": "match"
}
},
{
"fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/ClinicalImpression/3ad81c60-4e2f-4b95-8c07-1d6fa9b2e534",
"resource": {
"encounter": {
"identifier": {
"system": "https://www.acmesaude.com.br/integracao/atendimento/",
"value": "55840",
"use": "usual"
},
"type": "Encounter"
},
"identifier": [
{
"system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/care-api--appointment-v3",
"value": "318555",
"use": "usual"
}
],
"resourceType": "ClinicalImpression",
"status": "completed",
"subject": {
"identifier": {
"system": "https://www.acmesaude.com.br/integracao/paciente/",
"value": "507823709",
"use": "usual"
},
"type": "Patient"
},
"effectiveDateTime": "2026-04-23T15:04:11+00:00",
"id": "3ad81c60-4e2f-4b95-8c07-1d6fa9b2e534",
"meta": {
"lastUpdated": "2026-04-23T15:06:44.201000Z",
"versionId": "MTc4NjAyMTQ1MjkwNTAwMDQxMg"
}
},
"search": {
"mode": "match"
}
}
],
"link": []
}

Busca sem resultados não é erro: volta 200 com um Bundle cujo entry é uma lista vazia. Trate a ausência de resultados pela lista vazia, não esperando um 404.

Response
{
"resourceType": "Bundle",
"type": "searchset",
"entry": [],
"link": []
}

Parâmetros de busca suportados

NomeTipoDescriçãoExpressão
identifiertokenIdentificador da avaliação, em system|valueClinicalImpression.identifier
patient:identifierreferencePaciente, pelo identificador deleClinicalImpression.subject.identifier
subject:identifierreferenceO mesmo campo que patient:identifierClinicalImpression.subject.identifier
encounter:identifierreferenceAtendimento da avaliação, pelo identificador deleClinicalImpression.encounter.identifier
assessor:identifierreferenceProfissional responsável, pelo identificador deleClinicalImpression.assessor.identifier
statustokenAceito, mas inútil: o valor é sempre completedClinicalImpression.status
_lastUpdateddateData da última gravação no store, com os prefixos eq, ge, le—

encounter:identifier é a busca mais direta desta página: um atendimento tem no máximo uma avaliação clínica, e é o mesmo identificador que você já usa para ler o atendimento.

Só a forma :identifier funciona neste recurso. As referências da avaliação clínica são gravadas sem o campo reference — só com identifier e type —, e a busca por referência sem o modificador procura justamente em reference. Por isso patient=Patient/{id}, subject=…, encounter=Encounter/{id} e assessor=Practitioner/{id} devolvem Bundle vazio, não erro. São exceção este recurso e a Conduta, que nasce do mesmo atendimento: em Atendimentos e Condição as duas formas funcionam.

Qual identificador o subject carrega é decidido referência a referência, não de uma vez por implantação. Na configuração que usa identificadores externos, cada referência sai com o identificador do seu sistema se o recurso apontado tiver um; se não tiver, cai silenciosamente no identificador Nilo. Na mesma resposta, o subject pode vir com o seu system e o assessor com o da Nilo (…/NamingSystem/almanac-api--professional). Confira o que veio na resposta antes de montar a busca em volume — vale para subject, encounter e assessor.

O identifier do próprio recurso é a exceção: ele nunca depende da implantação e nunca é o seu. É sempre o identificador Nilo do atendimento de origem, no system …/NamingSystem/care-api--appointment-v3 — o mesmo valor que aparece nos identificadores do Encounter correspondente. Para chegar à avaliação a partir da sua própria chave, o caminho é encounter:identifier, não identifier.

Avaliações de atendimentos antigos podem trazer também um identificador no system …/NamingSystem/care-api--appointment, sem o -v3. É o mesmo atendimento: o system antigo é preservado para não partir o histórico dos registros anteriores.

Vários parâmetros canônicos da ClinicalImpression existem e não encontram nada aqui, porque a plataforma não preenche o campo correspondente: finding-code, finding-ref, previous, problem, supporting-info e investigation.

investigation merece o aviso explícito: o campo existe e vem preenchido, mas o parâmetro canônico procura por referência dentro de investigation.item, e o item da Nilo carrega só texto em display. Não há como buscar pelo conteúdo do exame físico.

date é o outro caso: o parâmetro canônico procura em ClinicalImpression.date, e a plataforma preenche effectiveDateTime. Para recortar por período, use _lastUpdated — ou busque os atendimentos do período em Atendimentos e leia a avaliação de cada um por encounter:identifier.

A paginação é por _count e _page_token; havendo página seguinte, o Bundle traz a URL pronta em link.

Ler por ID

GET
/fhir/resources/ClinicalImpression/:id
curl https://landing-zone-api.nilo.services/fhir/resources/ClinicalImpression/id \
-H "x-api-key: <apiKey>"

A leitura por ID responde 404 quando o id não existe.

Diferente da busca, esta leitura não devolve um Bundle — mas também não devolve o recurso nu. A resposta é um envelope com fullUrl, search e resource, e a avaliação está em resource. Ler description ou identifier na raiz da resposta não encontra nada.

Response
{
"fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/ClinicalImpression/9f4c2a17-6b83-4de5-b0a2-7c15e9d3f048",
"resource": {
"encounter": {
"identifier": {
"system": "https://www.acmesaude.com.br/integracao/atendimento/",
"value": "55162",
"use": "usual"
},
"type": "Encounter"
},
"identifier": [
{
"system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/care-api--appointment-v3",
"value": "318472",
"use": "usual"
}
],
"resourceType": "ClinicalImpression",
"status": "completed",
"subject": {
"identifier": {
"system": "https://www.acmesaude.com.br/integracao/paciente/",
"value": "507823709",
"use": "usual"
},
"type": "Patient"
},
"assessor": {
"identifier": {
"system": "https://www.acmesaude.com.br/integracao/profissional/",
"value": "5032932",
"use": "usual"
},
"type": "Practitioner"
},
"description": "Paciente relata tosse seca e dor de garganta há três dias, sem febre aferida. Nega dispneia.",
"effectiveDateTime": "2026-04-16T19:32:08+00:00",
"id": "9f4c2a17-6b83-4de5-b0a2-7c15e9d3f048",
"investigation": [
{
"code": {
"text": "physicalExam"
},
"item": [
{
"display": "Bom estado geral, eupneica, orofaringe hiperemiada sem placas."
}
]
}
],
"meta": {
"lastUpdated": "2026-04-16T20:05:03.118000Z",
"versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
},
"note": [
{
"authorReference": {
"identifier": {
"system": "https://www.acmesaude.com.br/integracao/profissional/",
"value": "5032932",
"use": "usual"
},
"type": "Practitioner"
},
"text": "Paciente mora sozinha e tem dificuldade de locomoção."
}
]
},
"search": {
"mode": "match"
}
}

Referências entre recursos

As referências deste recurso vêm por identificador, sem o campo reference: você recebe identifier e type, e resolve o recurso apontado por uma busca com o modificador :identifier. Isso vale para subject, encounter, assessor e note[].authorReference.

investigation[0].item[0] tem a forma de uma referência FHIR, mas não é uma: traz apenas display, com o texto do exame físico. Não tente resolvê-la.

Quando a avaliação fica disponível

A avaliação clínica é sincronizada logo depois do atendimento, mas não no mesmo instante: gravar ou atualizar um atendimento e ler a avaliação dele em seguida pode não encontrar nada ainda. Se o seu fluxo é escrever um atendimento e ler a avaliação dele, reconsulte em vez de tratar a primeira resposta vazia como definitiva.

A ordem é essa mesma: o atendimento é gravado primeiro e a avaliação depois. Se a gravação do atendimento falhar, a avaliação não chega a existir — não há avaliação clínica órfã de um atendimento que não foi gravado.

O encounter nem sempre aponta para um atendimento do prontuário. Um atendimento classificado como pronto atendimento gera avaliação clínica do mesmo jeito, e a referência dela leva a um recurso que a busca de Atendimentos não devolve — ele está em Pronto atendimento.

O que a integração não cobre

Não há escrita: nem criar, nem atualizar, nem apagar uma avaliação clínica. Também não há como registrar um ponto de atenção, corrigir a entrevista de um atendimento ou apagar um exame físico por esta API.

E dois dados que a plataforma guarda não têm campo aqui: o autor real de cada ponto de atenção — note[].authorReference traz o responsável pelo atendimento — e a distinção entre o que foi escrito como entrevista e o que foi escrito como exame físico, nos atendimentos do registro novo.

Os diagnósticos e as condutas do mesmo atendimento não estão neste recurso: estão em Condição, e a leitura consolidada das condutas está em Conduta. O atendimento em si está em Atendimentos.