OpenAC.Net.GNRe 1.8.0

Prefix Reserved
dotnet add package OpenAC.Net.GNRe --version 1.8.0
                    
NuGet\Install-Package OpenAC.Net.GNRe -Version 1.8.0
                    
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="OpenAC.Net.GNRe" Version="1.8.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="OpenAC.Net.GNRe" Version="1.8.0" />
                    
Directory.Packages.props
<PackageReference Include="OpenAC.Net.GNRe" />
                    
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 OpenAC.Net.GNRe --version 1.8.0
                    
#r "nuget: OpenAC.Net.GNRe, 1.8.0"
                    
#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 OpenAC.Net.GNRe@1.8.0
                    
#: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=OpenAC.Net.GNRe&version=1.8.0
                    
Install as a Cake Addin
#tool nuget:?package=OpenAC.Net.GNRe&version=1.8.0
                    
Install as a Cake Tool

<div align="center">

OpenAC.Net.GNRe

NuGet NuGet Downloads Target Frameworks License: MIT Discord

Biblioteca .NET open-source de alto desempenho para emissão, consulta e processamento da GNRe (Guia Nacional de Recolhimento de Tributos Estaduais) nas versões 1.00 e 2.00.

</div>


📋 Sobre o Projeto

O OpenAC.Net.GNRe faz parte do ecossistema OpenAC .Net e foi desenvolvido para simplificar e padronizar a comunicação com os WebServices da GNRe Nacional (Portal GNRe PE).

A biblioteca oferece serialização e desserialização rápida de XML orientada a Source Generators, validação rigorosa de schemas XSD através do OpenAC.Net.DFe.Core, suporte completo a certificados digitais (A1/A3), além de compatibilidade multiplataforma (Windows, Linux e macOS).


🚀 Principais Funcionalidades

  • Suporte Completo a Versões:
    • GNRe versão 1.00
    • GNRe versão 2.00 (Múltiplas receitas, múltiplos documentos de origem, FECP, etc.)
  • Serviços Suportados:
    • Envio de Lotes de GNRe (RecepcaoLote síncrono e assíncrono)
    • Consulta de Resultado de Processamento do Lote (ConsultaLote)
    • Consulta de Configuração da UF (ConsultaConfigUF)
    • Download e extração do PDF da Guia gerada pela SEFAZ
  • Validação de Schemas XSD:
    • Validação integrada com os schemas oficiais da GNRe via OpenAC.Net.DFe.Core.XmlSchemaValidation.
  • Multiplataforma & Multi-target:
    • Suporte a .NET Framework 4.6.2+, .NET Standard 2.0, .NET 6.0, .NET 7.0, .NET 8.0, .NET 9.0 e .NET 10.0.
  • Aplicativo de Demonstração Multiplataforma:
    • Demo moderno em Avalonia UI (.NET 10) que roda em Linux, Windows e macOS.

📦 Instalação

Instale via NuGet Package Manager:

dotnet add package OpenAC.Net.GNRe

Ou através do Console do Gerenciador de Pacotes:

Install-Package OpenAC.Net.GNRe

💡 Exemplos de Uso

1. Inicialização e Configuração

using System.Security.Cryptography.X509Certificates;
using OpenAC.Net.DFe.Core.Common;
using OpenAC.Net.GNRe;

var gnre = new OpenGNRe();

// Configurações Gerais
gnre.Config.Geral.FormaEmissao = DFeTipoEmissao.Normal;
gnre.Config.Geral.VersaoDFe = VersaoGNre.v200;

// Configurações de WebService
gnre.Config.WebServices.Ambiente = DFeTipoAmbiente.Homologacao;
gnre.Config.WebServices.Uf = "PE";
gnre.Config.WebServices.TimeOut = 30000;

// Configuração de Certificado Digital
gnre.Config.Certificados.Certificado = "caminho_ou_serial_do_certificado";
gnre.Config.Certificados.Senha = "senha_do_certificado";

// Diretório de Schemas XSD e Gravação de XMLs
gnre.Config.Arquivos.PathSchemas = @"C:\GNRe\Schemas";
gnre.Config.Arquivos.PathSalvar = @"C:\GNRe\Salvos";
gnre.Config.Arquivos.Salvar = true;

2. Consulta de Configurações da UF

Permite consultar as regras, receitas e campos exigidos por cada Estado:

// Consulta geral da UF
var configUf = await gnre.ConsultaConfigUFAsync("PR");

if (configUf.Situacao.Codigo == "100")
{
    foreach (var receita in configUf.Dados.Receitas)
    {
        Console.WriteLine($"Receita: {receita.Codigo} - {receita.Descricao}");
        Console.WriteLine($"Exige Documento Origem: {receita.ExigeDocumentoOrigem?.Value}");
    }
}

3. Emissão e Envio de Lote GNRe (v2.00)

using System;
using System.Collections.Generic;
using OpenAC.Net.GNRe.Commom;

var guia = new GuiaGNRe
{
    Versao = VersaoGNre.v200,
    UfFavorecida = "RJ",
    TipoGnre = TipoGnre.GnreSimples,
    ContribuinteEmitente = new ContribuinteEmitente
    {
        IdContribuinteEmitente = new IdContribuinte
        {
            Cnpj = "12345678000195"
        },
        RazaoSocial = "Empresa Exemplo LTDA",
        Endereco = "Av. Paulista, 1000",
        Municipio = 35503, // Código IBGE (5 dígitos)
        Uf = "SP",
        Cep = "01310100"
    },
    Item = new List<ItemGnre>
    {
        new()
        {
            Receita = "100102",
            DocumentoOrigem = new StringTipo
            {
                Tipo = "24", // Nota Fiscal Eletrônica
                Value = "35260112345678000195550010000000011000000011"
            },
            DataVencimento = DateTime.Today.AddDays(5),
            Valor = new List<DecimalCampo>
            {
                new()
                {
                    Tipo = "11", // Valor Principal
                    Value = 150.50M
                }
            }
        }
    },
    ValorGnre = 150.50M,
    DataPagamento = DateTime.Today
};

// Adiciona a guia ao componente
gnre.Guias.Add(guia);

// Envia o lote
var retornoEnvio = await gnre.EnviarLoteAsync();
Console.WriteLine($"Recibo: {retornoEnvio.Dados.Recibo.Numero}");

4. Consulta do Resultado do Lote e Download do PDF

var numeroRecibo = retornoEnvio.Dados.Recibo.Numero;
var resultadoLote = await gnre.ConsultaLoteAsync(numeroRecibo, incluirPdf: true);

if (resultadoLote.Dados.SituacaoProcess.Codigo == "100") // Processado com Sucesso
{
    foreach (var g in resultadoLote.Dados.Resultado.Guia)
    {
        Console.WriteLine($"Linha Digitável: {g.LinhaDigitavel}");
        Console.WriteLine($"Código de Barras: {g.CodigoBarras}");
    }

    // Salvar PDF da Guia retornada pela SEFAZ
    resultadoLote.Dados.Resultado.SalvarGuia(@"C:\GNRe\PDFs\guia_gnre.pdf");
}

5. Validação de Schemas XSD

É possível validar o XML gerado utilizando a classe nativa do OpenAC.Net.DFe.Core:

using OpenAC.Net.DFe.Core;

var xmlString = guia.GetXml();
var caminhoSchema = @"Schemas/lote_gnre_v2.00.xsd";

var valido = XmlSchemaValidation.ValidarXml(xmlString, caminhoSchema, out var erros, out var avisos);

if (!valido)
{
    foreach (var erro in erros)
        Console.WriteLine($"Erro de validação: {erro}");
}

🖥️ Aplicativo Demo (Avalonia UI)

O projeto inclui um aplicativo de demonstração multiplataforma construído com Avalonia UI (.NET 10):

dotnet run --project src/OpenAC.Net.GNRe.Demo/OpenAC.Net.GNRe.Demo.csproj

Ele permite:

  • Testar a configuração do componente e certificados
  • Gerar e emitir guias GNRe versão 1.00 e 2.00
  • Consultar recibos e configurações por UF
  • Visualizar os XMLs enviados e recebidos em tempo real

🧪 Testes Unitários

O projeto possui uma suíte completa de testes unitários utilizando TUnit com validação de serialização, desserialização e conformidade com os schemas XSD oficiais:

dotnet run --project src/OpenAC.Net.GNRe.Tests/OpenAC.Net.GNRe.Tests.csproj

🤝 Contribuindo

Contribuições são sempre bem-vindas! Para contribuir:

  1. Faça um Fork do projeto
  2. Crie uma branch para sua funcionalidade (git checkout -b feature/minha-feature)
  3. Faça commit das alterações (git commit -m 'Adiciona funcionalidade X')
  4. Faça push para a branch (git push origin feature/minha-feature)
  5. Abra um Pull Request

Dúvidas e discussões podem ser feitas através da nossa comunidade no Discord.


📄 Licença

Este projeto é distribuído sob a licença MIT. Consulte o arquivo LICENSE para mais detalhes.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  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 is compatible.  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 is compatible.  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 is compatible.  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 is compatible.  net463 was computed.  net47 is compatible.  net471 was computed.  net472 was computed.  net48 is compatible.  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.8.0 102 8/21/2026
1.6.0 886 10/30/2025
1.5.0.2 7,557 12/22/2022
1.5.0.1 598 8/27/2022
1.5.0 665 4/26/2022
1.5.0-preview.2 302 3/29/2022
1.5.0-preview.1 289 3/29/2022
1.0.0 518 12/16/2021
1.0.0-rc2 426 11/12/2021
1.0.0-rc1 434 11/8/2021