Skip to content

Apoiar o projeto

Seu apoio ajuda a manter este projeto. As contribuições ajudam a custear a infraestrutura, manter a documentação e dedicar tempo a correções, testes e melhorias. Qualquer valor é bem-vindo.

QR Code Pix para apoiar o projeto, com valor livre. O mesmo código está disponível no campo Pix Copia e Cola abaixo.

Pix com valor livre

RecebedorMILTON COSME DA SILVA JUN

Confira o recebedor e escolha o valor no aplicativo do seu banco.

Erros e recuperação ​

Há três situações diferentes: uma entrada inválida no modelo, uma falha de configuração/execução e um resultado fiscal sem sucesso. O tratamento depende de qual delas ocorreu.

1. Entrada inválida ​

Os modelos podem lançar TypeError por campo desconhecido, tipo incorreto ou valor que não corresponde ao contrato. A mensagem aponta o caminho do campo, por exemplo um decimal dentro de TNFe.Det[0].Prod.

Corrija os dados e os nomes antes de executar de novo. Veja Modelos TypeScript.

2. Resultado sem sucesso ​

O motor pode responder normalmente com sucesso: false. Rejeições fiscais e recibos pendentes são resultados; não há retry automático.

ts
const resultado = await emissor.validar(xml);
if (!resultado.sucesso) {
  console.error('Validação:', resultado.codigo ?? resultado.estado);
  // Corrija a causa antes de seguir para a próxima operação.
}

Leia codigo, cStat e xMotivo quando estiverem disponíveis. Registre apenas os campos necessários, sem PFX, senha ou CSC.

3. ErroAcbrNode ​

Falhas do supervisor lançam ErroAcbrNode. Ele tem codigo, resultadoDesconhecido e, em falha de transmissão, pode preservar xmlBase64 para recuperação.

ts
import { ErroAcbrNode } from 'cosmemilton-acbr-node';

try {
  const resultado = await emissor.gerarXml(nota);
  // Confira resultado.sucesso.
} catch (erro) {
  if (erro instanceof ErroAcbrNode) {
    console.error('Código:', erro.codigo);
    if (erro.resultadoDesconhecido) {
      // Marque a operação para recuperação da situação fiscal.
    }
  } else {
    throw erro;
  }
} finally {
  await emissor.fechar();
}

Códigos comuns do supervisor ​

CódigoPróximo passo
CONFIGURACAO_INVALIDAConfira CNPJ, UF, modelo, ambiente e limites
CERTIFICADO_AUSENTEConfigure A1 ou confira o caminho e a leitura do arquivo
CERTIFICADO_INVALIDOInforme apenas pfx ou arquivo, com senha em string
CSC_INVALIDOConfira ID e valor do CSC
RUNTIME_AUSENTEInstale o runtime correto e preserve dependências opcionais
RUNTIME_SEM_CAPACIDADEO manifesto do runtime não anuncia recuperarXml; use um runtime compatível e íntegro. A falha ocorre antes de iniciar o processo
PLATAFORMA_NAO_SUPORTADAUse Linux/Windows x64
CONTRATO_DIVERGENTEUse cliente e motor da mesma geração/versão
RUNTIME_ALTERADO, RUNTIME_INCOMPLETO, RUNTIME_INVALIDOReinstale o pacote; em runtime próprio, confira manifesto e arquivos
XML_INVALIDOInforme XML não vazio, até 2 MiB
FILA_CHEIAControle a concorrência e acompanhe as operações aguardando
TIMEOUT_MOTOR, FALHA_MOTOR, FALHA_PIPEConfira possível envio antes de decidir uma repetição
OPERACAO_CANCELADAConfira se cancelou antes da execução ou após um possível envio
EMISSOR_FECHADOCrie outra instância para novas operações

Quando o resultado é desconhecido ​

Um timeout, crash ou cancelamento pode acontecer depois de um serviço ter recebido a solicitação. Encerrar o processo não desfaz esse envio.

Marque a operação como pendente de recuperação, preserve chave e XML assinado e consulte a situação fiscal por um fluxo operacional apropriado antes de decidir uma nova transmissão. resultadoDesconhecido ajuda a sinalizar essa necessidade; ele não informa que houve autorização.

Não conecte uma tentativa automática de transmissão ao catch. O supervisor não faz retries fiscais.

Se o XML assinado original foi preservado, recuperarXml(xmlAssinado, opcoes?) pode consultar e devolver o processo autorizado após as conferências do motor. consultar({ chave }) continua sendo a consulta de situação; seu XML de resposta não é o nfeProc. Siga o fluxo de recuperação de XML, sem retransmissão automática.

Quando a recuperação do XML não é comprovada ​

recuperarXml pode terminar normalmente com sucesso: false; isso é diferente de uma exceção do supervisor, como RUNTIME_SEM_CAPACIDADE.

Código/condição da recuperaçãoTratamento
RECUPERACAO_NAO_COMPROVADAPreserve o original e confira o diagnóstico. Status diferentes de 100, inclusive 150/217, não devolvem processo nem protocolo
IDENTIDADE_DIVERGENTEConfira chave, emitente, UF, modelo, ambiente e digest. Não componha um protocolo manualmente nem troque o documento para contornar a divergência
XML_SCHEMA_INVALIDOConfira o XML de entrada, o retorno da consulta e o processo composto pelo motor; a recuperação não disponibiliza um processo inválido como sucesso
Resposta 100 com retCancNFe ou procEventoNFeExige análise separada; a recuperação é recusada com RECUPERACAO_NAO_COMPROVADA, sem processo ou protocolo de recuperação
protNFe com assinatura XMLDSig adicionalO motor deste conjunto recusa a recuperação com RECUPERACAO_NAO_COMPROVADA, mesmo com cStat: 100; não oferece verificação independente dessa assinatura do protocolo

O sucesso comprovado usa XML_RECUPERADO; os bytes só devem ser tratados como processo recuperado quando também houver sucesso: true, cStat: 100 e xmlBase64. envioIniciado: false nessa operação informa que não se transmitiu nota ou evento, embora uma consulta de rede possa ter ocorrido. Cancelar com AbortSignal não cancela a autorização fiscal.

Para mostrar o erro sem copiar XML, certificado, caminhos ou respostas brutas para logs, use resultado.diagnostico ou os helpers públicos diagnosticarResultado(resultado, 'recuperarXml') e diagnosticarErro(erro). Eles não consultam nem retransmitem por conta própria.

Problemas de ambiente ​

Quando presente, TLS_SERVIDOR_INVALIDO sinaliza uma conexão recusada pelo wrapper TLS; o código sozinho não identifica a causa. Preserve o retorno original do ACBr quando estiver disponível e siga TLS no Linux para investigar cadeia, CA, hostname, relógio e proxy. O motor também pode devolver RESULTADO_INDETERMINADO sem expor a causa TLS original; se houver possibilidade de envio, mantenha o fluxo de recuperação descrito acima.

Se a falha acontece antes de gerar XML, comece pela solução de problemas. Em runtime próprio, confira o log .acbr/build.log e os comandos de revisão própria.

Projeto independente · gratuito · LGPL-2.1-or-later