Geração e envio de GNRE a partir de NF-e, com suporte a webservices e certificado PFX.
Project description
gnre-automacao
Biblioteca em Python para geração e envio de GNRE a partir de dados de NF-e, incluindo:
- construção de XML do lote
- montagem de envelopes SOAP
- comunicação com os webservices oficiais (produção e teste)
- parsing das respostas com extração de recibo, situação, linha digitável, valor, data de vencimento e PDF (base64)
- suporte a certificados em formato PFX
Instalação
pip install gnre-automacao
Requisitos
- Python >= 3.10
cryptography >= 41.0.0
Uso rápido
Exemplo de fluxo completo: gerar XML do lote, enviar, consultar resultado e salvar o PDF.
from pathlib import Path
import base64
from gnre_automacao import (
parse_nfe_xml_bytes, evaluate_gnre_need, build_lote_xml, build_soap_envelope_tlote,
post_soap, get_endpoints, parse_tr_ret_lote,
build_consulta_resultado_xml, build_soap_envelope,
parse_result_status, extract_linha_digitavel_and_pdf, GNREError
)
from datetime import datetime, timedelta
pfx_bytes = Path("certificado.pfx").read_bytes()
pfx_password = "SENHA_DO_CERTIFICADO"
nfe_bytes = Path("nfe.xml").read_bytes()
dados = parse_nfe_xml_bytes(nfe_bytes)
need = evaluate_gnre_need(dados, receita=None)
if need.get("necessario") == "N":
print("GNRE não necessária")
elif need.get("necessario") == "M":
print("GNRE manual necessária")
else:
venc = (datetime.now().date() + timedelta(days=7)).isoformat()
xml_lote = build_lote_xml(
dados,
uf_favorecida=dados.get("uf_destinatario"),
receita=None,
data_vencimento=venc,
data_pagamento=venc,
)
envelope = build_soap_envelope_tlote(xml_lote)
resp_recepcao = post_soap(get_endpoints("producao")["recepcao_lote"], envelope, pfx_bytes=pfx_bytes, pfx_password=pfx_password)
recibo = parse_tr_ret_lote(resp_recepcao)
cons_xml = build_consulta_resultado_xml("1", recibo, incluir_pdf=True, incluir_arquivo_pagamento=True)
env_consulta = build_soap_envelope("GnreResultadoLote", cons_xml)
resp_resultado = post_soap(get_endpoints("producao")["resultado_lote"], env_consulta, pfx_bytes=pfx_bytes, pfx_password=pfx_password)
status = parse_result_status(resp_resultado)
print(status["numeroRecibo"], status["codigo"], status["descricao"])
# se a guia ainda estiver sendo processada, ou houver algum problema, uma exceção é lançada
# try/except pode ser usado para consultar se a guia já foi processada a cada x tempo
try:
out = extract_linha_digitavel_and_pdf(resp_resultado)
print("Linha digitável:", out.get("linhaDigitavel"))
print("Valor:", out.get("valor"))
print("Vencimento:", out.get("dataVencimento"))
pdf_b64 = out.get("pdfBase64")
if pdf_b64:
Path("gnre_guia.pdf").write_bytes(base64.b64decode(pdf_b64))
except GNREError:
# tentar de novo em alguns segundos
# tentativas terminadas:
raise
Principais funções
parse_nfe_xml_bytes(bytes)— extrai dados relevantes da NF-eevaluate_gnre_need(dados, receita=None)— avalia necessidade de GNRE; quando a UF do emitente for diferente da UF do destinatário e a UF de destino for SP ou ES, retornanecessario = "M"(manual) somente se houver valor > 0; caso valor seja zero, retornanecessario = "N"build_lote_xml(...)— monta o XML do lote GNREbuild_soap_envelope_tlote(xml)— envelope SOAP para recepção de lotepost_soap(url, envelope_xml, ...)— envia requisição SOAP com certificadoparse_tr_ret_lote(soap_xml)— extrai número de recibo do retorno da recepçãobuild_consulta_resultado_xml(ambiente, recibo, incluir_pdf=True, incluir_arquivo_pagamento=True)— XML de consulta de resultadoparse_result_status(soap_xml)— valida situação do processamento do loteextract_linha_digitavel_and_pdf(soap_xml)— retornalinhaDigitavel,valor,dataVencimento,pdfBase64,numeroReciboget_endpoints(ambiente)— URLs dos webservices paraproducaooutesteGNREError— exceção comcodigo,descricaoereciboquando aplicável
Endpoints e ambientes
Use get_endpoints("producao") ou get_endpoints("teste") para obter as URLs corretas dos serviços.
Certificados PFX
Você pode informar pfx_bytes e pfx_password diretamente para as chamadas de webservice. O certificado e a chave são temporariamente materializados em PEM durante a sessão e limpos em seguida.
Licença
MIT. Veja o arquivo LICENSE.
Avisos
- Não comite senhas ou certificados no repositório.
- Os serviços GNRE podem ter regras específicas por UF e receita; sempre valide no ambiente de teste antes de ir para produção.
- Não funciona para as UFs SP e ES via webservice desta biblioteca.
- É obrigatório cadastrar o CNPJ no portal GNRE antes de utilizar os serviços: https://www.gnre.pe.gov.br:444/gnre/portal/GNRE_Principal.jsp
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gnre_automacao-0.4.0.tar.gz.
File metadata
- Download URL: gnre_automacao-0.4.0.tar.gz
- Upload date:
- Size: 14.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba05092f2dae58567a1d267346837c302877c64324354584e2bc254bd08d2cc5
|
|
| MD5 |
d4afd57ee0ccfbf03f4aa029a0764379
|
|
| BLAKE2b-256 |
454445b43d954ed32c7edebedc8968f7726995b6971d73e76d9512edd0acc3af
|
Provenance
The following attestation bundles were made for gnre_automacao-0.4.0.tar.gz:
Publisher:
python-publish.yml on heitorforner/gnre-automacao
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gnre_automacao-0.4.0.tar.gz -
Subject digest:
ba05092f2dae58567a1d267346837c302877c64324354584e2bc254bd08d2cc5 - Sigstore transparency entry: 849982385
- Sigstore integration time:
-
Permalink:
heitorforner/gnre-automacao@ef1c2541ab893de180d51b30c5044c008accc490 -
Branch / Tag:
refs/tags/0.4.0 - Owner: https://github.com/heitorforner
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@ef1c2541ab893de180d51b30c5044c008accc490 -
Trigger Event:
release
-
Statement type:
File details
Details for the file gnre_automacao-0.4.0-py3-none-any.whl.
File metadata
- Download URL: gnre_automacao-0.4.0-py3-none-any.whl
- Upload date:
- Size: 13.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
908c0a4ba097b26f7a9f3400f177dee6fd9df9ad4d5410f0c1dbad56d484e962
|
|
| MD5 |
0a40d53da2dca2a09323c7cdfe7b35a8
|
|
| BLAKE2b-256 |
eae49d6524d3b2e501834675e7013033be3192f51d19b86297e760327b593e56
|
Provenance
The following attestation bundles were made for gnre_automacao-0.4.0-py3-none-any.whl:
Publisher:
python-publish.yml on heitorforner/gnre-automacao
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gnre_automacao-0.4.0-py3-none-any.whl -
Subject digest:
908c0a4ba097b26f7a9f3400f177dee6fd9df9ad4d5410f0c1dbad56d484e962 - Sigstore transparency entry: 849982386
- Sigstore integration time:
-
Permalink:
heitorforner/gnre-automacao@ef1c2541ab893de180d51b30c5044c008accc490 -
Branch / Tag:
refs/tags/0.4.0 - Owner: https://github.com/heitorforner
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@ef1c2541ab893de180d51b30c5044c008accc490 -
Trigger Event:
release
-
Statement type: