@jitsistemas/nfce-emitter
v1.0.0
Published
Emissor NFC-e brasileiro (NF-e 4.0 modelo 65) — geracao de XML, assinatura digital A1, envio SEFAZ, contingencia offline (tpEmis=9) e DANFE PDF
Maintainers
Readme
@jitsistemas/nfce-emitter
Emissor NFC-e brasileiro (NF-e 4.0 modelo 65) em TypeScript — geração de XML, assinatura digital A1, envio SEFAZ, contingência offline (tpEmis=9) e DANFE PDF.
Uso em produção pelo JIT ERP desde 2026-07 (multiestados: SP, MG, RJ, PR, RS + demais UFs). Testado em milhares de emissões.
Recursos
- ✅ XML NFC-e 4.0 (modelo 65) — todos os grupos SEFAZ obrigatórios
- ✅ Assinatura digital A1 (
xml-crypto— canonical XML + SHA-256) - ✅ Envio SEFAZ (endpoints todos os 27 UFs — homologação + produção)
- ✅ Contingência offline (
tpEmis=9) — cliente sem conexão SEFAZ emite localmente, transmite ao reconectar - ✅ DANFE PDF (via
pdfkit) — comprovante impressão térmica 80mm - ✅ QR Code oficial SEFAZ (v2)
- ✅ Reforma Tributária (CBS/IBS/IS — NT 2025.002 v1.50)
- ✅ Simples Nacional (CRT 1/2/4) — grupos CSOSN + PIS/COFINS
- ✅ CRT 3 (Lucro Presumido/Real) — CST + IBS/CBS por item
Instalação
npm install @jitsistemas/nfce-emitter
# ou
pnpm add @jitsistemas/nfce-emitterUso básico
import {
gerarXMLNFCe,
assinarXML,
carregarCertificado,
AutorizacaoService,
emitirContingencia,
TipoEmissao,
} from '@jitsistemas/nfce-emitter';
// 1. Carregar certificado A1 (arquivo .pfx + senha)
const cert = carregarCertificado(pfxBuffer, senha);
// 2. Montar dados da nota
const dados: DadosNFCe = {
cUF: 35, // SP
dhEmi: new Date(),
serie: 1,
nNF: 12345,
tpAmb: AmbienteNFe.PRODUCAO,
emit: { CNPJ: '00000000000000', xNome: 'MINHA LOJA LTDA', /* ... */ },
itens: [ /* ... */ ],
pag: { detPag: [ /* ... */ ] },
total: { /* ... */ },
};
// 3. Gerar XML + assinar
const { xml, chaveAcesso } = gerarXMLNFCe(dados);
const xmlAssinado = assinarXML(xml, cert);
// 4. Enviar ao SEFAZ
const autorizacao = new AutorizacaoService();
const resultado = await autorizacao.enviar({
uf: 'SP',
ambiente: dados.tpAmb,
xmlAssinado,
certificado: cert,
});Contingência offline (tpEmis=9)
Quando SEFAZ está inacessível (rede caiu, servidor SEFAZ fora):
import { emitirContingencia } from '@jitsistemas/nfce-emitter';
const { xmlAssinado, chaveAcesso, danfePdf, qrCodeUrl } = await emitirContingencia(
dados,
{ certificadoPfx, certificadoSenha, csc, cscId },
'Sem conexão com SEFAZ no momento da venda',
);
// Imprime DANFE com aviso "EMITIDA EM CONTINGÊNCIA"
// Salva XML localmente pra retransmitir quando SEFAZ voltar
// Retransmissão via ContingenciaService (planejado)Base legal
- NT 2025.002 v1.50 — Reforma Tributária (CBS/IBS/IS)
- Ajuste SINIEF 19/2016 — Cláusula décima segunda (contingência offline)
- Manual de Integração NFC-e v6.00
Status do projeto
- Versão: 1.0.0
- Mantenedor: JIT Sistemas
- Uso em produção: sim (JIT ERP desde 2026-07)
- Suporte comunidade: best-effort via issues do GitHub
Contribuindo
PRs bem-vindos, mas note:
- Este package é o motor fiscal de um ERP em produção — mudanças precisam manter backward compat
- Testes obrigatórios (Jest, cobertura ≥80% em código fiscal)
- Discussões em issues antes de PRs grandes
License
Copyright 2026 JIT Sistemas
