Atendimentos e agendamento

Atendimento, evento e agendamento compartilham um traço que causa confusão: o mesmo recurso FHIR alimenta telas diferentes da plataforma, e o que decide qual é um campo do payload. Errar esse campo não produz um erro de validação — produz um recurso que foi aceito e foi para o lugar errado, ou um erro sobre um recurso referenciado que “não existe” quando ele existe.

Os fundamentos estão em Atendimentos, Hospitalização, Pronto atendimento e Agendamento.

Encounter does not exist e Unable to locate Nilo model for the resource

Causa. A Condition foi roteada para o fluxo errado. O campo category é o que decide:

Condition.categoryPara onde vaiQue atendimento ela procura
com eventDiagnóstico de eventoO Encounter de hospitalização ou pronto atendimento
sem eventDiagnóstico de atendimentoO atendimento comum do prontuário

Sem category, uma condição ligada a uma hospitalização é tratada como diagnóstico de atendimento e vai procurar um atendimento comum — que não existe. Daí o Encounter does not exist sobre um Encounter que você acabou de criar com sucesso.

O que fazer. Sempre que a condição estiver associada a um evento de hospitalização ou pronto atendimento, envie category com system e code de event. Veja Condição.

Se você já enviou a condição sem category e o identificador ficou gravado no fluxo errado, corrigir o payload e reenviar com o mesmo identificador tende a produzir um erro diferente, não o sucesso — o identificador já está associado ao outro fluxo. Nesse caso, abra um chamado com o identificador afetado.

period.end menor ou igual a period.start

Causa. O período do atendimento é validado: o fim não pode ser anterior nem igual ao início.

O que fazer. Confira o fuso e o formato das duas datas. Períodos de duração zero — início e fim idênticos — também são recusados: se o atendimento não tem duração conhecida, envie só o start.

O mesmo identificador de agendamento chegou em datas diferentes

Causa. Não é duplicidade. Um agendamento tem ciclo de vida: ele pode ser cancelado, reagendado e concluído, e cada mudança de status gera uma notificação — todas com o mesmo identificador, porque é o mesmo agendamento.

O que fazer. Trate a notificação como “o estado atual deste agendamento é este”, não como “um novo agendamento chegou”. Antes de tratar como duplicidade, olhe o status de cada evento na sequência: cancelled seguido de booked seguido de fulfilled é um reagendamento normal.

Cancelar um agendamento

Causa de confusão. Um agendamento cancelado não tem horário: ao cancelar, o início e o fim deixam de existir.

O que fazer. Envie status: cancelled sem start e sem end. Isso é válido, e o cancelamento é aplicado.

Conflito de horário no agendamento

Causa. A plataforma bloqueia agendamentos sobrepostos por padrão.

O que fazer. Permitir sobreposição é uma configuração do care provider, não um campo do payload — não há campo nem extensão a enviar. Se a sua operação precisa de sobreposição, peça a configuração ao time de suporte.

O diagnóstico enviado não aparece no atendimento

Causa. Um diagnóstico só aparece na tela do paciente quando está associado ao atendimento ou evento a que pertence. Um diagnóstico enviado solto é gravado, mas não tem onde ser exibido.

O que fazer. Envie a condição referenciando o Encounter correspondente, com a category certa para o tipo daquele atendimento — as duas coisas juntas, porque a category é o que define qual atendimento a referência procura.

Etiquetas

Duas mensagens aparecem com frequência ao registrar etiquetas — veja Etiqueta para os campos.

does not allow changing tag_id or patient_id after creation

Causa. O identifier.value enviado pertence a uma etiqueta já vinculada a outro paciente, ou a outra etiqueta do mesmo paciente. O vínculo entre etiqueta e paciente é fixo depois de criado.

O que fazer. Use um identificador único por combinação de etiqueta e paciente. Não reaproveite o identificador de uma etiqueta ao aplicá-la a outro paciente.

Period is required to create inactive flags

Causa. Uma etiqueta criada já inativa precisa dizer em que período ela valeu — sem isso, ela seria um registro inativo sem vigência.

O que fazer. Envie o period junto. Se a etiqueta é ativa, o período é opcional.