@brasil-fiscal/nfe

中文文档
2.0.7发布于 2026/07/30MITTypeScriptCommonJS近 30 天下载 6095

Lib open-source para emissao de NFe (Nota Fiscal Eletronica) em TypeScript. Arquitetura limpa, zero dependencias, plugavel.

原始使用文档
文档目录25 节
  1. Instalacao
  2. Features
  3. NFe (modelo 55) — Completo
  4. NFC-e (modelo 65) — Em desenvolvimento
  5. Quick Start
  6. Transmitir NFe
  7. Consultar protocolo
  8. Cancelar NFe
  9. Carta de Correcao (CC-e)
  10. Inutilizar numeracao
  11. Consultar NFes recebidas (Distribuicao DFe)
  12. Manifestacao do Destinatario
  13. Gerar DANFE (PDF)
  14. Tratamento de erros
  15. Uso avancado
  16. Providers plugaveis
  17. Arquitetura
  18. Ecossistema @brasil-fiscal
  19. Documentacao
  20. Exemplos
  21. Requisitos
  22. Desenvolvimento
  23. Contribuindo
  24. Inspiracao
  25. Licenca

@brasil-fiscal/nfe

Lib open-source em TypeScript para emissao de NFe (Nota Fiscal Eletronica) e NFC-e (Nota Fiscal de Consumidor Eletronica) no Brasil. Arquitetura limpa, totalmente plugavel. Parte do ecossistema @brasil-fiscal.

Instalacao

npm install @brasil-fiscal/nfe

Para gerar DANFE (PDF), instale tambem:

npm install pdfkit

O @brasil-fiscal/core eh instalado automaticamente como dependencia — contem certificado digital, assinatura XML, transporte mTLS e helpers compartilhados com CTe e MDFe.

Features

NFe (modelo 55) — Completo

  • Geracao de XML da NFe (layout SEFAZ 4.00)
  • Assinatura digital com certificado A1 (.pfx/.p12)
  • Validacao contra schemas XSD oficiais
  • Transmissao para SEFAZ via HTTPS com mTLS (modo sincrono)
  • Consulta de protocolo de autorizacao
  • Distribuicao DFe (consulta de NFes recebidas)
  • Cancelamento de NFe
  • Carta de Correcao (CC-e)
  • Inutilizacao de numeracao
  • Manifestacao do Destinatario (confirmacao, ciencia, desconhecimento, nao realizada)
  • Geracao de DANFE em PDF (A4 retrato)
  • URLs de todos os 27 estados (14 autorizadores)
  • Providers plugaveis para certificado, transporte, XML e assinatura

NFC-e (modelo 65) — Em desenvolvimento

  • Modelo configuravel ('55' | '65')
  • QR Code da NFC-e (URL com hash SHA1)
  • Campos qrCode e urlChave no bloco infNFeSupl
  • Destinatario opcional (consumidor nao identificado)
  • Cupom termico 80mm com QR Code

Quick Start

import { NFeCore } from '@brasil-fiscal/nfe';
import { readFileSync } from 'node:fs';

const nfe = NFeCore.create({
  pfx: readFileSync('./certificado.pfx'),
  senha: 'senha-do-certificado',
  ambiente: 'homologacao',  // ou 'producao'
  uf: 'MT'
});

Transmitir NFe

const result = await nfe.transmitir({
  identificacao: {
    naturezaOperacao: 'Venda de mercadoria',
    tipoOperacao: 1,
    destinoOperacao: 1,
    finalidade: 1,
    consumidorFinal: 1,
    presencaComprador: 1,
    uf: 'MT',
    municipio: '5103403',
    serie: 1,
    numero: 1
  },
  emitente: {
    cnpj: '12345678000195',
    razaoSocial: 'Empresa Teste Ltda',
    inscricaoEstadual: '131234567',
    regimeTributario: 1,
    endereco: {
      logradouro: 'Rua das Flores',
      numero: '100',
      bairro: 'Centro',
      codigoMunicipio: '5103403',
      municipio: 'Cuiaba',
      uf: 'MT',
      cep: '78005000'
    }
  },
  destinatario: {
    cpf: '52998224725',
    nome: 'Joao da Silva',
    indicadorIE: 9,
    endereco: {
      logradouro: 'Av Brasil',
      numero: '500',
      bairro: 'Centro',
      codigoMunicipio: '5103403',
      municipio: 'Cuiaba',
      uf: 'MT',
      cep: '78010100'
    }
  },
  produtos: [
    {
      numero: 1,
      codigo: '001',
      descricao: 'Produto Teste',
      ncm: '84714900',
      cfop: '5102',
      unidade: 'UN',
      quantidade: 2,
      valorUnitario: 49.90,
      valorTotal: 99.80,
      icms: { origem: 0, csosn: '102' },
      pis: { cst: '49' },
      cofins: { cst: '49' }
    }
  ],
  transporte: { modalidadeFrete: 9 },
  pagamento: {
    pagamentos: [{ formaPagamento: '01', valor: 99.80 }]
  }
});

console.log(result.autorizada);   // true
console.log(result.protocolo);    // '151240000012345'
console.log(result.chaveAcesso);  // 44 digitos

Consultar protocolo

const result = await nfe.consultarProtocolo('51240412345678000195550010000000011234567890');
console.log(result.codigoStatus); // '100'

Cancelar NFe

await nfe.cancelar({
  chaveAcesso: '51240412345678000195550010000000011234567890',
  cnpj: '12345678000195',
  protocolo: '151240000012345',
  justificativa: 'Erro na emissao da nota fiscal eletronica'
});

Carta de Correcao (CC-e)

await nfe.cartaCorrecao({
  chaveAcesso: '51240412345678000195550010000000011234567890',
  cnpj: '12345678000195',
  correcao: 'Correcao do endereco do destinatario para Rua ABC 123',
  sequencia: 1  // opcional, default 1
});

Inutilizar numeracao

await nfe.inutilizar({
  cnpj: '12345678000195',
  ano: 2024,
  serie: 1,
  numeroInicial: 10,
  numeroFinal: 20,
  justificativa: 'Numeracao pulada por erro no sistema emissor'
});

Consultar NFes recebidas (Distribuicao DFe)

// Por ultimo NSU (paginacao manual)
const result = await nfe.distribuicaoPorNSU('12345678000195');
console.log(result.documentos);  // Array de { nsu, schema, xml }
console.log(result.ultNSU);      // Usar como input da proxima chamada

// Por chave de acesso
const result2 = await nfe.distribuicaoPorChave(
  '12345678000195',
  '51240412345678000195550010000000011234567890'
);

Manifestacao do Destinatario

const input = {
  chaveAcesso: '51240412345678000195550010000000011234567890',
  cnpj: '12345678000195'
};

await nfe.manifestar.confirmar(input);
await nfe.manifestar.ciencia(input);
await nfe.manifestar.desconhecer({ ...input, justificativa: 'Nao reconheco esta operacao' });
await nfe.manifestar.naoRealizada({ ...input, justificativa: 'Mercadoria devolvida' });

Gerar DANFE (PDF)

import { writeFileSync } from 'node:fs';

const pdf = await nfe.danfe(xmlAutorizado);
writeFileSync('danfe.pdf', pdf);

Requer pdfkit instalado: npm install pdfkit

Tratamento de erros

import { SefazRejectError, CertificateError, NFeError } from '@brasil-fiscal/nfe';

try {
  await nfe.transmitir(nfeData);
} catch (error) {
  if (error instanceof CertificateError) {
    console.error('Certificado:', error.message);
  } else if (error instanceof SefazRejectError) {
    console.error(`[${error.cStat}] ${error.xMotivo}`);
  } else if (error instanceof NFeError) {
    console.error('Erro:', error.message);
  }
}

Uso avancado

Para quem precisa de controle total, os providers e use cases individuais tambem estao disponiveis. Veja docs/EXAMPLES.md para exemplos com a API de baixo nivel.

Providers plugaveis

A lib usa o padrao Provider. Cada integracao externa eh uma interface que voce pode substituir:

ProviderDescricaoDefaultOrigem
CertificateProviderCarrega certificados digitaisA1CertificateProvider (.pfx/.p12)@brasil-fiscal/core
SefazTransportComunicacao HTTP com a SEFAZNodeHttpSefazTransport (mTLS)@brasil-fiscal/core
XmlBuilderGera XML a partir das entidadesDefaultXmlBuilder@brasil-fiscal/nfe
XmlSignerAssina XML com certificado digitalDefaultXmlSigner@brasil-fiscal/core

Para criar seu proprio provider, veja docs/PROVIDERS.md.

Arquitetura

Este pacote usa @brasil-fiscal/core para infraestrutura compartilhada (certificado, assinatura, transporte mTLS, helpers). O core eh reutilizado entre NFe, CTe e MDFe.

@brasil-fiscal/core          Certificado A1, XMLDSig, mTLS, CNPJ/CPF, UF codes
      |
@brasil-fiscal/nfe           NFe + NFC-e (este pacote)
      |
      src/
        core/                 Fachada (NFeCore) e tipos
        domain/               Entidades puras e schemas Zod
        contracts/            Interface XmlBuilder (NFe-especifica)
        application/          Use cases (transmit, consult, cancel, etc.)
        infra/                DefaultXmlBuilder, SOAP, DANFE
        shared/               Constantes (CFOP, CST, URLs SEFAZ)

Para detalhes completos, veja docs/ARCHITECTURE.md.

Ecossistema @brasil-fiscal

PacoteStatusDescricao
@brasil-fiscal/coreEstavelInfraestrutura compartilhada
@brasil-fiscal/nfeEstavelNFe e NFC-e (este pacote)
@brasil-fiscal/cteEm desenvolvimentoCTe
@brasil-fiscal/mdfeEm desenvolvimentoMDFe
@brasil-fiscal/sped-fiscalEm desenvolvimentoEFD ICMS/IPI (SPED Fiscal)
@brasil-fiscal/sped-contribuicoesEm desenvolvimentoEFD Contribuicoes (PIS/COFINS)
@brasil-fiscal/sintegraEm desenvolvimentoSINTEGRA

Documentacao

DocumentoDescricao
ROADMAP.mdFases e progresso do desenvolvimento
docs/ARCHITECTURE.mdArquitetura detalhada
docs/GLOSSARY.mdGlossario de termos fiscais
docs/PROVIDERS.mdGuia para criar providers
docs/EXAMPLES.mdExemplos completos

Exemplos

Veja a pasta examples/ para arquivos de exemplo:

  • nfe-exemplo.xml — XML de NFe gerado
  • danfe-exemplo.pdf — DANFE em PDF

Para regenerar: npx tsx scripts/generate-examples.ts

Requisitos

  • Node.js >= 18
  • Certificado digital A1 (.pfx ou .p12)
  • OpenSSL instalado (para carregar certificados e validar XSD)
  • pdfkit (opcional, apenas para gerar DANFE)

Desenvolvimento

git clone https://github.com/brasil-fiscal/nfe.git
cd nfe
npm install
npm test
npm run lint
npm run build

Contribuindo

Contribuicoes sao bem-vindas! Veja CONTRIBUTING.md.

Inspiracao

Licenca

MIT

版本与发布记录

@brasil-fiscal/nfe 共发布 20 个版本,首次发布于 2026/04/29;过去 12 个月发布了 20 个版本。

版本发布日期距今
2.0.7latest2026/07/303 个月前
2.0.62026/07/213 个月前
2.0.52026/07/163 个月前
2.0.42026/07/163 个月前
2.0.32026/07/163 个月前
2.0.22026/07/153 个月前

关于 @brasil-fiscal/nfe 的常见问题

@brasil-fiscal/nfe 是什么?

Lib open-source para emissao de NFe (Nota Fiscal Eletronica) em TypeScript. Arquitetura limpa, zero dependencias, plugavel.

如何安装 @brasil-fiscal/nfe?

在项目目录运行 npm install @brasil-fiscal/nfe,或使用 pnpm add / yarn add / bun add。

@brasil-fiscal/nfe 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@brasil-fiscal/nfe 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@brasil-fiscal/nfe 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@brasil-fiscal/nfe 可以商用吗?

@brasil-fiscal/nfe 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@brasil-fiscal/nfe 的下载量有多少?

根据 npm 官方下载统计,@brasil-fiscal/nfe 在 2026/10/09 – 2026/11/07 这 30 天内被下载 6,095 次,日均约 203 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@brasil-fiscal/nfe 还在维护吗?

最新版本 2.0.7 发布于 2026/07/30(3 个月前);至今共发布 20 个版本,其中过去 12 个月发布了 20 个;首次发布于 2026/04/29。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。