Como diagnosticar

Esta seção reúne os problemas que mais aparecem em integrações reais: o sintoma como ele chega, a causa e o que fazer. Ela não substitui a página de cada recurso — quando o problema é um campo específico, o lugar certo é a tabela de campos do recurso. Serve para o caso oposto: você tem uma mensagem de erro, ou um recurso que foi aceito e não apareceu, e precisa saber por onde começar.

Cinco checagens antes de tudo

A maioria dos casos que chegam ao suporte cai em um destes cinco padrões. Vale passar por eles antes de procurar o caso específico.

1. Leia o OperationOutcome. Toda escrita recusada volta com um diagnóstico que nomeia o campo. Numa carga em lote, a entrada que falhou volta identificada pelo fullUrl — e quando o que falhou foi uma dependência, a mensagem diz o fullUrl do recurso que precisa ser corrigido, não o do recurso que você estava tentando gravar.

2. Confirme o ambiente. Os system de identificador de paciente e de profissional são configurados por ambiente, e os ids internos da plataforma — planos de saúde, grupos de pacientes, status, campanhas, unidades de cuidado — não são os mesmos em homologação e em produção. Um payload que funciona em um ambiente pode falhar no outro sem que nada esteja errado nele. Confirme também que o paciente que você está referenciando existe no ambiente em que você está enviando.

3. Confirme que o que você referencia já existe. Referência por identificador não cria nada. Se o paciente, o profissional, o atendimento, o plano de saúde ou o grupo apontado não estiver cadastrado naquele ambiente, a escrita é recusada — e o erro fala do recurso referenciado, não do que você enviou.

4. Verifique se houve envio duplicado. Duas requisições iguais para o mesmo recurso em sequência rápida é uma das causas mais frequentes de erro: a primeira grava, e a segunda falha porque o registro já está no estado final. Antes de tratar como bug, confira se a primeira das duas foi aceita — em geral foi, e não há nada a corrigir além do reenvio.

5. Considere o tempo de propagação. Um 200 diz que a escrita foi aceita, não que ela já está visível. Parte do que você envia passa por processamento assíncrono, algumas atribuições rodam em lote uma vez por dia, e algumas telas leem de um cache de poucos minutos. Antes de reenviar, confirme por um GET se o recurso está lá.

Reenviar não é perigoso — a escrita é um upsert por identificador, então o mesmo payload enviado duas vezes atualiza o mesmo registro em vez de criar dois. O que causa problema é reenviar em paralelo: dois envios simultâneos do mesmo recurso disputam o mesmo registro e um dos dois falha.

Índice de mensagens de erro

MensagemOnde está o caso
Unable to use any of the provided identifiers to match an existing resourceIdentificadores e duplicidade
No identifier systems configuredConfiguração e ambientes
MultipleResourcesReturned: Too many matchesIdentificadores e duplicidade
returned more than one resourceIdentificadores e duplicidade
Reference … not foundIdentificadores e duplicidade
Invalid CPF: must contain exactly 11 digitsIdentificadores e duplicidade
Wrong ResourceType: … expects … but got BundleOrdem de envio e processamento
Resource dependencies not processed successfullyOrdem de envio e processamento
Dependency … not processed successfullyOrdem de envio e processamento
value is not a valid listOrdem de envio e processamento
429 Too Many RequestsOrdem de envio e processamento
CarePlan with status revoked can't be updatedPlano de cuidado e diretriz
CarePlan can't be updated to status draftPlano de cuidado e diretriz
Only Practitioner/Patient type is supportedPlano de cuidado e diretriz
does not point to an active care linePlano de cuidado e diretriz
Too many matches for PractitionerEquipe de cuidado e profissionais
Encounter does not existAtendimentos e agendamento
Unable to locate Nilo model for the resourceAtendimentos e agendamento
Period is required to create inactive flagsAtendimentos e agendamento
does not allow changing tag_id or patient_id after creationAtendimentos e agendamento
… not found em Coverage.class.valueCobertura, grupos e status
Group cannot be defined both in extension and containedCobertura, grupos e status
Select a valid choice numa referência de campanhaConfiguração e ambientes
string contains invalid charactersConfiguração e ambientes
401 UnauthorizedConfiguração e ambientes

Quando abrir um chamado

Alguns problemas não se resolvem do lado do integrador, e vale saber quais desde o começo:

  • Configuração de system de identificador de paciente e de profissional — só esses dois recursos casam por uma lista configurada, e ela é definida pela Nilo, por ambiente. Para os demais recursos você escolhe o system e usa, sem configuração nenhuma.
  • Registros duplicados na base da Nilo — quando dois registros do mesmo paciente ou do mesmo profissional já existem, nenhum payload seu resolve; a unificação é feita pela Nilo.
  • Ids internos que você precisa referenciar — o id de um plano de saúde, de um grupo, de um status ou de uma campanha vem da plataforma. Alguns são consultáveis pela API, outros não.
  • Cadastros que faltam no ambiente de teste — se o plano, a diretriz ou a campanha que você quer testar não existe em homologação, ela precisa ser cadastrada antes do teste.

Ao abrir o chamado, mande o payload enviado, a resposta recebida com o OperationOutcome inteiro, o ambiente e o horário aproximado do envio. Sem o payload, quase toda investigação começa perguntando por ele.