InLiveTools.EmissorFiscal 1.0.55

dotnet add package InLiveTools.EmissorFiscal --version 1.0.55
                    
NuGet\Install-Package InLiveTools.EmissorFiscal -Version 1.0.55
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="InLiveTools.EmissorFiscal" Version="1.0.55" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="InLiveTools.EmissorFiscal" Version="1.0.55" />
                    
Directory.Packages.props
<PackageReference Include="InLiveTools.EmissorFiscal" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add InLiveTools.EmissorFiscal --version 1.0.55
                    
#r "nuget: InLiveTools.EmissorFiscal, 1.0.55"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package InLiveTools.EmissorFiscal@1.0.55
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=InLiveTools.EmissorFiscal&version=1.0.55
                    
Install as a Cake Addin
#tool nuget:?package=InLiveTools.EmissorFiscal&version=1.0.55
                    
Install as a Cake Tool

InLiveTools.EmissorFiscal

Biblioteca .NET para operações fiscais eletrônicas, sem acesso a banco de dados: a aplicação entrega os dados já resolvidos e recebe de volta o XML assinado/transmitido e o retorno da SEFAZ. Cobre três domínios:

  • Emissão de NFC-e (Nota Fiscal de Consumidor Eletrônica, modelo 65): calcula os impostos, monta e assina o XML, transmite à SEFAZ de forma síncrona e trata o cancelamento — a partir de um objeto de venda.
  • Distribuição de DF-e e Manifestação do Destinatário (NF-e modelo 55): consulta no Ambiente Nacional as notas emitidas contra o seu CNPJ (NFeDistribuicaoDFe) e registra os eventos de manifestação (Ciência, Confirmação, Desconhecimento e Operação não Realizada).
  • Inutilização de numeração (NF-e 55 e NFC-e 65): pedido inutNFe assinado e transmitido ao NFeInutilizacao4, com o ProcInutNFe pronto para arquivar.

Feita para PDV, e-commerce, serviços ou agendadores que precisam do núcleo fiscal isolado: a regra de negócio, a numeração, o controle de NSU, a persistência e o agendamento ficam na aplicação.

Recursos

NFC-e (modelo 65):

  • Emissão para o Simples Nacional, com cálculo dos impostos do item (ICMS/CSOSN, PIS, COFINS) e dos valores da Lei da Transparência (IBPT).
  • Assinatura digital (XML-DSig) com certificado A1, geração do QR Code e da URL de consulta.
  • Transmissão síncrona à SEFAZ e leitura do retorno (autorização, rejeição, denegação).
  • Cancelamento por evento (110111), com o XML do procEventoNFe pronto para arquivamento.

DF-e e Manifestação do Destinatário (NF-e modelo 55):

  • Distribuição de DF-e (NFeDistribuicaoDFe): descoberta das NF-e emitidas contra o CNPJ — por último NSU, por NSU ou por chave — com os documentos já descompactados (gzip) em DTOs neutros.
  • Manifestação do Destinatário: eventos de Ciência (210210), Confirmação (210200), Desconhecimento (210220) e Operação não Realizada (210240), validados localmente, assinados e transmitidos ao Ambiente Nacional.

Comuns a todas as operações:

  • Multi-target: netstandard2.0 e net10.0.
  • Sem dependência de banco de dados: a biblioteca recebe os dados já resolvidos e devolve o XML assinado/transmitido e o retorno da SEFAZ. A regra de negócio, a numeração, o controle de NSU, a persistência e o agendamento ficam na aplicação.

Instalação

dotnet add package InLiveTools.EmissorFiscal

Ou via PackageReference:

<PackageReference Include="InLiveTools.EmissorFiscal" Version="1.0.54" />

Pré-requisitos (emissão de NFC-e)

  • Certificado digital A1 (.pfx) válido do emitente.
  • CSC (Código de Segurança do Contribuinte) e o seu identificador (IdCSC), obtidos no portal da SEFAZ da UF do emitente.
  • Inscrição Estadual ativa e credenciamento do emitente para NFC-e na sua UF.

Para Distribuição de DF-e / Manifestação do Destinatário o pré-requisito é só o certificado A1 do destinatário (sem CSC) — ver a seção própria mais abaixo.

Emitindo uma NFC-e

using System.IO;
using InLiveTools.EmissorFiscal.Nfce;
using InLiveTools.EmissorFiscal.Nfce.Modelos;

var emissor = new EmissorNFCe();

var configuracao = new ConfiguracaoEmissaoNFCe
{
    Ambiente = AmbienteFiscal.Homologacao,          // AmbienteFiscal.Producao quando for valer
    CertificadoArquivoBytes = File.ReadAllBytes("certificado.pfx"),
    CertificadoSenha = "senha-do-certificado",
    IdentificadorCsc = "000001",                    // IdCSC informado no portal da SEFAZ
    Csc = "SEU-CODIGO-DE-SEGURANCA-DO-CONTRIBUINTE",
    ResponsavelTecnico = new ResponsavelTecnicoNFCe
    {
        Cnpj = "00000000000000",
        Contato = "Suporte Tecnico",
        Email = "suporte@suaempresa.com.br",
        Telefone = "1130000000"
    }
};

var documento = new DocumentoVendaNFCe
{
    Serie = 1,
    NumeroNF = 123,                                 // numeração reservada pela sua aplicação
    Emitente = new EmitenteNFCe
    {
        Cnpj = "00000000000000",
        RazaoSocial = "Loja Exemplo LTDA",
        NomeFantasia = "Loja Exemplo",
        InscricaoEstadual = "000000000000",
        Regime = RegimeTributario.SimplesNacional,
        Logradouro = "Rua Exemplo",
        Numero = "100",
        Bairro = "Centro",
        CodigoMunicipio = 3550308,                  // código IBGE do município
        NomeMunicipio = "Sao Paulo",
        Uf = "SP",
        CodigoUf = 35,                              // código IBGE da UF
        Cep = "01001000"
    },
    Itens =
    {
        new ItemVendaNFCe
        {
            Codigo = "7891234",
            Descricao = "Produto de exemplo",
            UnidadeComercial = "UN",
            Quantidade = 1,
            ValorUnitario = 10.00m,
            ValorBruto = 10.00m,
            Ncm = "22021000",
            Cfop = "5102",
            OrigemMercadoria = 0,
            SituacaoTributariaIcms = "102"          // CSOSN (Simples Nacional)
        }
    },
    Pagamentos =
    {
        new PagamentoNFCe { Forma = FormaPagamentoNFCe.Dinheiro, Valor = 10.00m }
    }
};

var resultado = emissor.Emitir(documento, configuracao);

if (resultado.Autorizada)
{
    // resultado.ChaveAcesso     -> chave de acesso (44 dígitos)
    // resultado.NumeroProtocolo -> protocolo de autorização
    // resultado.XmlAutorizado   -> nfeProc (NFe + protocolo), guarde por 5 anos
    // resultado.QrCodeUrl / resultado.UrlConsulta -> impressão do DANFE NFC-e
}
else
{
    // resultado.Desfecho -> Rejeitada, Denegada ou FalhaComunicacao
    // resultado.CStat / resultado.Motivo -> retorno da SEFAZ
    // resultado.XmlAssinado permanece disponível para arquivamento / retransmissão
}

Desfechos da emissão

O retorno (ResultadoEmissaoNFCe.Desfecho) distingue os quatro estados que exigem tratamento diferente:

Desfecho Significado
Autorizada Autorizada pela SEFAZ. Pode imprimir e entregar o comprovante fiscal.
Rejeitada Recebida e rejeitada por validação. O número foi consumido.
Denegada Denegada por irregularidade fiscal do emitente/destinatário.
FalhaComunicacao Sem resposta da SEFAZ (timeout/rede). Operação retentável.

Em qualquer desfecho em que o XML chegou a ser montado, XmlAssinado é preenchido — útil para arquivamento e futura retransmissão sem regenerar o documento.

Cancelando uma NFC-e

var cancelamento = new CancelamentoNFCe
{
    ChaveAcesso = resultado.ChaveAcesso,
    ProtocoloAutorizacao = resultado.NumeroProtocolo,
    CnpjEmitente = "00000000000000",
    CodigoUf = 35,
    Justificativa = "Cancelamento a pedido do consumidor apos a venda"   // 15 a 255 caracteres
};

var retorno = emissor.Cancelar(cancelamento, configuracao);

if (retorno.Aceito)
{
    // retorno.XmlEvento -> procEventoNFe (evento + retorno), guarde por 5 anos
}

Prazo: o cancelamento só é aceito pela SEFAZ dentro do prazo legal, contado a partir da autorização. Validar o prazo antes de chamar Cancelar é responsabilidade da sua aplicação.

Distribuição de DF-e e Manifestação do Destinatário (NF-e modelo 55)

Além da emissão, a biblioteca cobre o lado do destinatário da NF-e 55: descobrir as notas emitidas contra o seu CNPJ e manifestar-se sobre elas. São duas operações no Ambiente Nacional, ambas fiscais puras — a biblioteca transmite e devolve DTOs neutros (sem vazar os tipos do Zeus); o controle de NSU, a janela anti-“consumo indevido” (656), a persistência e o agendamento ficam com a aplicação.

Configuração (ConfiguracaoDfe)

Criada por chamada (nunca estática), o que permite vários CNPJs concorrentes sem colisão:

using System.IO;
using InLiveTools.EmissorFiscal.Dfe;
using InLiveTools.EmissorFiscal.Dfe.Modelos;
using InLiveTools.EmissorFiscal.Nfce.Modelos;   // AmbienteFiscal

var config = new ConfiguracaoDfe
{
    Ambiente = AmbienteFiscal.Homologacao,                      // AmbienteFiscal.Producao quando for valer
    CnpjInteressado = "00000000000000",                         // titular do certificado / autor dos eventos
    CodigoUf = 35,                                              // IBGE da UF real (ex.: 35 = SP); vira o cUFAutor
    CertificadoArquivoBytes = File.ReadAllBytes("certificado.pfx"),
    CertificadoSenha = "senha-do-certificado"
};

A manifestação não usa CSC/IdCSC — apenas o certificado A1 do destinatário. O roteamento ao Ambiente Nacional é automático (independe da UF).

1. Distribuição de DF-e (IDistribuidorDFe / DistribuidorDFe)

Consulta o NFeDistribuicaoDFe e devolve os documentos já descompactados (gzip) em DocumentoDistribuido.

Método Uso
ConsultarPorUltimoNsu(config, ultimoNsu) Sincronização incremental (distNSU). Continue sempre do UltNSU devolvido.
ConsultarPorNsu(config, nsu) Consulta pontual de um NSU específico (consNSU).
ConsultarPorChave(config, chaveNFe) Consulta uma NF-e pela chave de acesso (consChNFe).
var distribuidor = new DistribuidorDFe();

var resultado = distribuidor.ConsultarPorUltimoNsu(config, ultimoNsuPersistido);

if (resultado.FalhaComunicacao)
{
    // sem rede/timeout -> NÃO avance o NSU; tente de novo depois
}
else if (resultado.TemDocumentos)   // cStat 138 e há itens
{
    foreach (var doc in resultado.Documentos)
    {
        // doc.Tipo (ResumoNFe / NFeCompleta / ResumoEvento / EventoCompleto)
        // doc.Nsu, doc.ChaveNFe, doc.Xml (pronto para persistir/arquivar)
        // enriquecimento (quando o XML traz): doc.CnpjEmitente, doc.NomeEmitente,
        //   doc.ValorNF, doc.DataEmissao, doc.DataAutorizacao, doc.SituacaoNFe
    }
}

// avance e PERSISTA o cursor para a próxima sincronização
var proximoNsu = resultado.UltNSU;

Regra 656 (consumo indevido): sincronize sempre a partir do UltNSU devolvido. Quando CStat == 137 (nada novo) ou UltNSU == MaxNSU, aguarde 1 hora antes de nova consulta por distNSU — reconsultar antes zera o relógio. As consultas por NSU/chave têm teto próprio de 20/hora. Esse controle é responsabilidade da aplicação.

Campos de ResultadoDistribuicaoDFe: CStat/Motivo, UltNSU/MaxNSU (cursor a persistir), Documentos, TemDocumentos (138 + itens) e FalhaComunicacao (sem comunicação → não avance o NSU).

2. Manifestação do Destinatário (IManifestadorDestinatario / ManifestadorDestinatario)

Valida localmente (chave, justificativa, certificado), monta, assina e transmite o evento ao RecepcaoEvento do Ambiente Nacional.

var manifestador = new ManifestadorDestinatario();

var manifestacao = new ManifestacaoDestinatario
{
    ChaveAcesso = "35aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",   // 44 dígitos, sem o prefixo "NFe"
    TipoEvento = TipoEventoManifestacao.Ciencia,                     // ou Confirmacao / Desconhecimento / OperacaoNaoRealizada
    SequenciaEvento = 1,                                             // 2 na retificação
    // Justificativa = "..."   // só na Operação não Realizada (15–255); opcional no Desconhecimento
};

var retorno = manifestador.Manifestar(manifestacao, config);

if (retorno.Aceito)
{
    // retorno.CStat (135 = vinculado / 136 = aceito), retorno.NumeroProtocolo, retorno.DataHoraRegistro
    // retorno.XmlEvento -> procEventoNFe (evento + protocolo), guarde por 5 anos
}
else if (retorno.FalhaComunicacao)
{
    // sem resposta da SEFAZ (timeout/rede) -> retentável
}
else if (retorno.FalhaValidacaoLocal)
{
    // reprovou ANTES de ir à SEFAZ; ramifique por retorno.Falha.Categoria
    //   (CertificadoAusente/Expirado/SemChavePrivada, RequisitoFiscal) + .Codigo / .Mensagem
}
else
{
    // rejeitada pela SEFAZ -> retorno.CStat / retorno.Motivo (ex.: 594, 655, 573)
}

Eventos disponíveis (TipoEventoManifestacao; os valores do enum são os tpEvento oficiais):

Evento tpEvento Conclusivo Libera o XML completo Justificativa
Ciencia 210210 Não Sim —
Confirmacao 210200 Sim Sim —
Desconhecimento 210220 Sim Não opcional (15–255)
OperacaoNaoRealizada 210240 Sim Sim obrigatória (15–255)

Desfechos de ResultadoManifestacao:

Desfecho Significado
Aceito Evento registrado (cStat 135 vinculado ou 136 aceito). XmlEvento traz o procEventoNFe.
FalhaComunicacao Sem resposta da SEFAZ (timeout/rede). Operação retentável.
FalhaValidacaoLocal Reprovou na validação local (não foi à SEFAZ). Causa tipada em Falha (Categoria/Codigo/Mensagem).
(nenhum dos acima) Rejeitado pela SEFAZ. Veja CStat/Motivo (ex.: 594 sequência > 2, 655 Ciência após conclusiva, 573 duplicidade).

Prazos e sequência são da aplicação. A SEFAZ conta os prazos a partir da autorização da NF-e (Ciência 10 dias; manifestações conclusivas 90 dias; retificação 30 dias da 1ª manifestação) e aceita cada evento conclusivo no máximo 2 vezes (SequenciaEvento 1 e 2; a 3ª é rejeitada com 594). “Vale a última”. Validar prazo/sequência antes de chamar Manifestar é responsabilidade de quem chama.

Inutilização de numeração (NF-e 55 e NFC-e 65)

IInutilizadorNumeracao / InutilizadorNumeracao valida localmente, monta, assina e transmite o pedido inutNFe 4.00 ao NFeInutilizacao4 da UF autorizadora. O mesmo serviço atende os dois modelos: o Modelo do pedido escolhe o Web Service.

using InLiveTools.EmissorFiscal.Inutilizacao;
using InLiveTools.EmissorFiscal.Inutilizacao.Modelos;

var resultado = new InutilizadorNumeracao().Inutilizar(
    new PedidoInutilizacao
    {
        CnpjEmitente = "00000000000191",
        Modelo = ModeloDocumentoFiscal.NFCe,   // ou NFe (55)
        Ano = 2026,                            // 2 ou 4 dígitos; o leiaute leva AA
        Serie = 1,
        NumeroInicial = 15,
        NumeroFinal = 15,
        Justificativa = "Numero nao utilizado por falha na emissao"   // 15 a 255
    },
    new ConfiguracaoInutilizacao
    {
        Ambiente = AmbienteFiscal.Homologacao,
        CodigoUf = 35,                          // UF autorizadora (IBGE)
        CertificadoArquivoBytes = File.ReadAllBytes("certificado.pfx"),
        CertificadoSenha = "senha-do-certificado"
    });
Desfecho (ResultadoInutilizacao.Desfecho) Significado
Homologada cStat 102. XmlProcInutilizacao traz o ProcInutNFe (pedido assinado + retorno) para arquivar.
JaInutilizada cStat 563: a faixa já foi inutilizada antes. NumeroProtocolo traz o protocolo original, que a SEFAZ manda só dentro do xMotivo ([nProt:...]) e apenas quando a faixa é idêntica; num número dentro de uma faixa maior já inutilizada o 563 vem sem protocolo (SEFAZ-SP).
Rejeitada Qualquer outro cStat. A numeração não foi inutilizada.
FalhaComunicacao Sem resposta conclusiva (timeout/rede). O pedido pode ter sido processado: reenvie o mesmo pedido para reconciliar (102 ou 563).
FalhaValidacaoLocal Reprovou antes de ir à SEFAZ. Causa tipada em Falha.

InutilizadorNumeracao.MontarIdInutilizacao(...) devolve o Id oficial do pedido ("ID" + 41 posições), diferente da chave de acesso de uma nota. Decidir quais números inutilizar, evitar pedidos concorrentes e persistir o resultado são responsabilidade de quem chama.

Mantida pela InLive Consultoria

Esta biblioteca é desenvolvida e mantida pela InLive Consultoria.

🌐 www.inlive.com.br

Sobre a InLive Consultoria

A InLive Consultoria atua no desenvolvimento de sistemas integrados que geram inteligência estratégica e corporativa, com foco em redes de franquias.

Somos uma empresa criativa, com expertise no desenvolvimento de softwares para as plataformas web, mobile e desktop.

Licença

Distribuída sob a licença MIT.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.55 0 10/21/2026
1.0.54 73 10/19/2026
1.0.53 82 10/19/2026
1.0.52 91 10/9/2026
1.0.51 94 10/9/2026
1.0.50 98 10/2/2026
1.0.48 99 10/2/2026
1.0.47 87 10/1/2026
1.0.45 106 9/28/2026
1.0.44 124 9/11/2026
1.0.43 138 8/25/2026
1.0.42 123 8/21/2026
1.0.41 131 8/11/2026
1.0.40 135 7/30/2026
1.0.39 130 7/30/2026
1.0.38 142 7/25/2026
1.0.37 133 7/25/2026
1.0.36 139 7/24/2026
1.0.35 125 7/24/2026
1.0.34 125 7/23/2026
Loading failed