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.

Modelos TypeScript ​

Os modelos vêm dos fontes públicos do ACBr, extraídos com FCL-passrc. O SDK 0.2.2 acompanha a revisão SVN 48590, com 204 tipos gerados. Nomes e grupos espelham o componente Pascal.

Para consultar campos, enums e coleções sem abrir uma nota, use a ajuda de campos e tipos. Ela acompanha o contrato da sua instalação; o guia distingue consultas de campo e nomes de tipos.

Na 0.2.2 publicada, describe Ide.tpNF consulta o campo e describe TTipoNFe consulta diretamente o tipo. Ambos mostram tnEntrada e tnSaida; somente o campo informa o padrão declarado tnSaida. Na 0.2.1, obtenha esses valores com help TAG Ide.tpNF.

Use a conclusão de código do seu editor para explorar TNFeInput e os tipos de cada grupo. A biblioteca preserva os nomes do ACBr, portanto maiúsculas e minúsculas importam.

Objeto de entrada e classe ​

TNFeInput descreve os dados que sua aplicação fornece. TNFe é a classe gerada que recebe esses dados:

ts
import { TNFe, type TNFeInput } from 'cosmemilton-acbr-node';

// Trecho de estrutura; não representa uma nota fiscal completa.
const entrada = {
  infNFe: { Versao: '4.00' },
  Ide: { modelo: 55, tpAmb: 'taHomologacao' }
} satisfies TNFeInput;

const nota = new TNFe(entrada);

Para executar a geração, use o documento completo sintético. Um objeto aceito pelo TypeScript pode continuar incompleto para schema ou autorização fiscal.

Grupos comuns ​

GrupoConteúdo
infNFeVersão e identificação da informação da nota
IdeModelo, ambiente, série, número, data e identificação da operação
EmitEmitente e endereço
DestDestinatário e endereço
DetItens, produtos e impostos
TotalTotais fornecidos pela aplicação
TranspInformações de transporte
pagDetalhes de pagamento

Decimais são strings ​

Use ponto como separador e não converta o valor para number. Estes são exemplos de campos de Prod:

ts
const valores = {
  qCom: '1.0000',
  vUnCom: '10.00',
  vProd: '10.00'
};

Strings evitam perda de precisão binária pelo JavaScript. A biblioteca não calcula vProd, impostos ou totais para você. A aplicação precisa produzir valores consistentes e respeitar as regras de cada campo.

Datas são strings civis ​

ts
const dataEmissao = { dEmi: '2026-10-08T12:00:00' };

Informe uma data ISO civil, sem offset no exemplo acima. O ACBr aplica o fuso da UF na escrita do XML. Não substitua automaticamente por new Date().toISOString(), que representa UTC e inclui Z.

Enums usam nomes ACBr ​

ts
const identificacao = { tpNF: 'tnSaida', tpAmb: 'taHomologacao' };
const regimeEmitente = { CRT: 'crtSimplesNacional' };

Use os valores simbólicos gerados, em vez dos números escritos no XML. O editor mostra os valores aceitos de cada enum.

Coleções ​

Você pode passar arrays no objeto de entrada. As classes geradas também oferecem coleções tipadas com New():

ts
const nota = new TNFe();
const item = nota.Det.New();
item.Prod.cProd = 'TESTE';
item.Prod.qCom = '1.0000';

Esse fragmento mostra como acrescentar um item; os demais dados ainda precisam ser preenchidos.

Campos desconhecidos e campos produzidos pelo motor ​

O validador recusa nomes desconhecidos e tipos inválidos com TypeError. Isso ajuda a detectar erros como emit no lugar de Emit ou um decimal numérico no lugar de string.

Campos omitidos preservam os padrões do ACBr. Isso não garante uma nota completa. Assinatura, protocolo e informações suplementares produzidas pelo motor não são entradas editáveis.

As atualizações do ACBr são explícitas. O guia de revisão própria explica o contrato e o relatório de mudanças.

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