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.

Configuração do emissor ​

criarEmissor cria uma instância com uma identidade fiscal. Use uma instância para cada configuração de emitente, UF, modelo e ambiente.

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

const emissor = criarEmissor({
  cnpj: '11222333000181',
  uf: 'CE',
  modelo: 55,
  ambiente: 2
});

Esta configuração sintética permite gerar XML offline. Operações com A1 precisam do campo certificado.

Identidade e credenciais ​

CampoTipoComo preencher
cnpjstring14 dígitos, sem pontuação
ufstringSigla maiúscula, como CE ou SP
modelo55 | 65NF-e ou NFC-e
ambiente1 | 2Produção ou homologação
certificadoA1 opcional{ pfx: Uint8Array, senha: string } ou { arquivo: string, senha: string }
cscObjeto opcional{ id: string, valor: string } para NFC-e

Informe todos os quatro campos de identidade. O CNPJ, UF, modelo e ambiente do documento devem corresponder à configuração. No A1, o motor verifica a raiz do CNPJ, formada pelos primeiros oito dígitos.

Escolha apenas uma origem para o A1: pfx ou arquivo. O PFX aceita no máximo 2 MiB. O ID do CSC aceita de 1 a 6 dígitos; o valor deve ser uma string não vazia de até 256 caracteres. A assinatura de NFC-e exige o CSC.

Limites de execução ​

Campo opcionalPadrãoFaixa aceita
timeoutMs120000Inteiro de 1 a 120000 ms
limiteFila32Inteiro de 0 a 1000 operações aguardando
limiteBytes8388608Inteiro de 256 a 8388608 bytes
runtimeDirectoryRuntime instalado pelo npmCaminho para um runtime próprio completo

Uma instância executa uma operação por vez. As demais aguardam na fila; limiteFila: 0 permite recusar novas operações enquanto ela está ocupada. XML de entrada tem um limite próprio de 2 MiB, mesmo com limiteBytes maior.

Não aumente timeouts ou repita transmissões automaticamente para esconder uma falha. Se houve possível envio, confira a situação fiscal antes de decidir uma nova tentativa.

Cancelamento de uma operação ​

Cada operação aceita { signal } como último argumento:

ts
const controller = new AbortController();
const resultado = await emissor.gerarXml(nota, { signal: controller.signal });

Chamar controller.abort() cancela a espera ou encerra o processo em execução. Cancelar a execução local não desfaz um envio já recebido por um serviço fiscal.

Encerramento ​

Use await emissor.fechar() em finally. Ele cancela a fila, encerra e aguarda o processo atual. A instância fechada não pode executar novas operações.

ts
try {
  const resultado = await emissor.gerarXml(nota);
  // Confira resultado.sucesso antes de usar o XML.
} finally {
  await emissor.fechar();
}

O pacote principal já seleciona contrato e validador dos modelos gerados. Para usar outro contrato, siga o fluxo de revisão própria.

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