InLiveTools.EmissorFiscal
1.0.55
dotnet add package InLiveTools.EmissorFiscal --version 1.0.55
NuGet\Install-Package InLiveTools.EmissorFiscal -Version 1.0.55
<PackageReference Include="InLiveTools.EmissorFiscal" Version="1.0.55" />
<PackageVersion Include="InLiveTools.EmissorFiscal" Version="1.0.55" />
<PackageReference Include="InLiveTools.EmissorFiscal" />
paket add InLiveTools.EmissorFiscal --version 1.0.55
#r "nuget: InLiveTools.EmissorFiscal, 1.0.55"
#:package InLiveTools.EmissorFiscal@1.0.55
#addin nuget:?package=InLiveTools.EmissorFiscal&version=1.0.55
#tool nuget:?package=InLiveTools.EmissorFiscal&version=1.0.55
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
inutNFeassinado e transmitido aoNFeInutilizacao4, com oProcInutNFepronto 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
procEventoNFepronto 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.0enet10.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
UltNSUdevolvido. QuandoCStat == 137(nada novo) ouUltNSU == MaxNSU, aguarde 1 hora antes de nova consulta pordistNSU— 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 (
SequenciaEvento1 e 2; a 3ª é rejeitada com 594). “Vale a última”. Validar prazo/sequência antes de chamarManifestaré 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.
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 | Versions 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. |
-
.NETStandard 2.0
- System.Security.Cryptography.Xml (>= 10.0.13)
- System.Text.Json (>= 10.0.13)
- Zeus.Net.NFe.NFCe (>= 2026.9.24.1416)
-
net10.0
- System.Security.Cryptography.Xml (>= 10.0.13)
- Zeus.Net.NFe.NFCe (>= 2026.9.24.1416)
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 |