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 profissionalEntrevista 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
1curl -G https://landing-zone-api.nilo.services/fhir/resources/ClinicalImpression \
2 -H "x-api-key: <apiKey>" \
3 -d _count=50 \
4 -d _lastUpdated=eq2013-01-14 \
5 --data-urlencode _page_token=Cjj3YopYuf%2F%2F%2F%2F%2BABd%2BbgE0m...dSANQAFoLCUSM7w9VYUqaEANglLWUugQ%3D \
6 --data-urlencode assessor:identifier=https://www.acmesaude.com.br/integracao/profissional/|5032932 \
7 --data-urlencode encounter:identifier=https://www.acmesaude.com.br/integracao/atendimento/|55162 \
8 --data-urlencode identifier=https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/care-api--appointment-v3|318472 \
9 --data-urlencode patient:identifier=https://www.acmesaude.com.br/integracao/paciente/|507823709 \
10 -d status=completed \
11 --data-urlencode subject:identifier=https://www.acmesaude.com.br/integracao/paciente/|507823709

A resposta é sempre um Bundle do tipo searchset.

Response
1{
2 "resourceType": "Bundle",
3 "type": "searchset",
4 "entry": [
5 {
6 "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/ClinicalImpression/9f4c2a17-6b83-4de5-b0a2-7c15e9d3f048",
7 "resource": {
8 "encounter": {
9 "identifier": {
10 "system": "https://www.acmesaude.com.br/integracao/atendimento/",
11 "value": "55162",
12 "use": "usual"
13 },
14 "type": "Encounter"
15 },
16 "identifier": [
17 {
18 "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/care-api--appointment-v3",
19 "value": "318472",
20 "use": "usual"
21 }
22 ],
23 "resourceType": "ClinicalImpression",
24 "status": "completed",
25 "subject": {
26 "identifier": {
27 "system": "https://www.acmesaude.com.br/integracao/paciente/",
28 "value": "507823709",
29 "use": "usual"
30 },
31 "type": "Patient"
32 },
33 "assessor": {
34 "identifier": {
35 "system": "https://www.acmesaude.com.br/integracao/profissional/",
36 "value": "5032932",
37 "use": "usual"
38 },
39 "type": "Practitioner"
40 },
41 "description": "Paciente relata tosse seca e dor de garganta há três dias, sem febre aferida. Nega dispneia.",
42 "effectiveDateTime": "2026-04-16T19:32:08+00:00",
43 "id": "9f4c2a17-6b83-4de5-b0a2-7c15e9d3f048",
44 "investigation": [
45 {
46 "code": {
47 "text": "physicalExam"
48 },
49 "item": [
50 {
51 "display": "Bom estado geral, eupneica, orofaringe hiperemiada sem placas."
52 }
53 ]
54 }
55 ],
56 "meta": {
57 "lastUpdated": "2026-04-16T20:05:03.118000Z",
58 "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
59 },
60 "note": [
61 {
62 "authorReference": {
63 "identifier": {
64 "system": "https://www.acmesaude.com.br/integracao/profissional/",
65 "value": "5032932",
66 "use": "usual"
67 },
68 "type": "Practitioner"
69 },
70 "text": "Paciente mora sozinha e tem dificuldade de locomoção."
71 }
72 ]
73 },
74 "search": {
75 "mode": "match"
76 }
77 },
78 {
79 "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/ClinicalImpression/3ad81c60-4e2f-4b95-8c07-1d6fa9b2e534",
80 "resource": {
81 "encounter": {
82 "identifier": {
83 "system": "https://www.acmesaude.com.br/integracao/atendimento/",
84 "value": "55840",
85 "use": "usual"
86 },
87 "type": "Encounter"
88 },
89 "identifier": [
90 {
91 "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/care-api--appointment-v3",
92 "value": "318555",
93 "use": "usual"
94 }
95 ],
96 "resourceType": "ClinicalImpression",
97 "status": "completed",
98 "subject": {
99 "identifier": {
100 "system": "https://www.acmesaude.com.br/integracao/paciente/",
101 "value": "507823709",
102 "use": "usual"
103 },
104 "type": "Patient"
105 },
106 "effectiveDateTime": "2026-04-23T15:04:11+00:00",
107 "id": "3ad81c60-4e2f-4b95-8c07-1d6fa9b2e534",
108 "meta": {
109 "lastUpdated": "2026-04-23T15:06:44.201000Z",
110 "versionId": "MTc4NjAyMTQ1MjkwNTAwMDQxMg"
111 }
112 },
113 "search": {
114 "mode": "match"
115 }
116 }
117 ],
118 "link": []
119}

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
1{
2 "resourceType": "Bundle",
3 "type": "searchset",
4 "entry": [],
5 "link": []
6}

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
1curl https://landing-zone-api.nilo.services/fhir/resources/ClinicalImpression/id \
2 -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
1{
2 "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/ClinicalImpression/9f4c2a17-6b83-4de5-b0a2-7c15e9d3f048",
3 "resource": {
4 "encounter": {
5 "identifier": {
6 "system": "https://www.acmesaude.com.br/integracao/atendimento/",
7 "value": "55162",
8 "use": "usual"
9 },
10 "type": "Encounter"
11 },
12 "identifier": [
13 {
14 "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/care-api--appointment-v3",
15 "value": "318472",
16 "use": "usual"
17 }
18 ],
19 "resourceType": "ClinicalImpression",
20 "status": "completed",
21 "subject": {
22 "identifier": {
23 "system": "https://www.acmesaude.com.br/integracao/paciente/",
24 "value": "507823709",
25 "use": "usual"
26 },
27 "type": "Patient"
28 },
29 "assessor": {
30 "identifier": {
31 "system": "https://www.acmesaude.com.br/integracao/profissional/",
32 "value": "5032932",
33 "use": "usual"
34 },
35 "type": "Practitioner"
36 },
37 "description": "Paciente relata tosse seca e dor de garganta há três dias, sem febre aferida. Nega dispneia.",
38 "effectiveDateTime": "2026-04-16T19:32:08+00:00",
39 "id": "9f4c2a17-6b83-4de5-b0a2-7c15e9d3f048",
40 "investigation": [
41 {
42 "code": {
43 "text": "physicalExam"
44 },
45 "item": [
46 {
47 "display": "Bom estado geral, eupneica, orofaringe hiperemiada sem placas."
48 }
49 ]
50 }
51 ],
52 "meta": {
53 "lastUpdated": "2026-04-16T20:05:03.118000Z",
54 "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
55 },
56 "note": [
57 {
58 "authorReference": {
59 "identifier": {
60 "system": "https://www.acmesaude.com.br/integracao/profissional/",
61 "value": "5032932",
62 "use": "usual"
63 },
64 "type": "Practitioner"
65 },
66 "text": "Paciente mora sozinha e tem dificuldade de locomoção."
67 }
68 ]
69 },
70 "search": {
71 "mode": "match"
72 }
73}

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.