Avaliação clínica
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ê.
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
investigationcomo “o exame físico” edescriptioncomo “a entrevista”. Onde o registro novo está em uso,descriptioné a nota clínica inteira einvestigationpode 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
descriptioncominvestigationduplica 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
A resposta é sempre um Bundle do tipo searchset.
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.
Parâmetros de busca suportados
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
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.
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.

