Bindings Python para ler e gerar XML do SIFEN (Paraguay)
Project description
pysifen
Bindings Python para ler e gerar XML do SIFEN (Sistema Integrado de Facturación Electrónica Nacional) do Paraguai.
Gerados automaticamente a partir dos XSD oficiais da SET usando xsdata, seguindo a mesma abordagem da nfelib.
Instalação
pip install pysifen
Com assinatura digital (RSA-SHA256):
pip install pysifen[sign]
Com transmissão SOAP (envio ao SIFEN):
pip install pysifen[transmissao]
Para desenvolvimento:
pip install -e ".[sign,test]"
Uso
Ler um Documento Electrónico (DE)
from pysifen.de.bindings.v150.fe_v141 import RDe
# Ler de arquivo
rde = RDe.from_path("factura.xml")
# Ler de string
rde = RDe.from_xml(xml_string)
# Navegar nos dados
print(rde.DE.gDatGralOpe.gEmis.dRucEm) # RUC do emissor
print(rde.DE.gDatGralOpe.gEmis.dNomEmi) # Nome do emissor
print(rde.DE.gDtipDE.gCamFE.iIndPres) # Indicador de presença
print(len(rde.DE.gDtipDE.gCamItem)) # Quantidade de itens
Serializar para XML
xml = rde.to_xml()
print(xml)
Round-trip (ler e escrever)
rde = RDe.from_path("factura.xml")
xml = rde.to_xml()
rde2 = RDe.from_xml(xml)
assert rde.DE.Id == rde2.DE.Id
Validar contra XSD
errors = rde.validate_xml()
if not errors:
print("XML válido!")
else:
for error in errors:
print(error)
Assinar XML (RSA-SHA256)
pip install pysifen[sign]
with open("certificado.pfx", "rb") as f:
cert_data = f.read()
signed = rde.sign_xml(xml, cert_data, "password", rde.DE.Id)
Usa signxml diretamente com RSA-SHA256 e C14N, conforme exigido pelo SIFEN.
A função centralizada também está disponível em:
from pysifen.assinatura import sign_xml
signed = sign_xml(xml, cert_data, "password", doc_id)
Transmissão SOAP ao SIFEN
pip install pysifen[transmissao]
Enviar DE (síncrono)
from pysifen.transmissao import TransmissaoDE, TEST
transmissao = TransmissaoDE(
ambiente=TEST,
pkcs12_data=cert_data,
pkcs12_password="password",
)
resultado = transmissao.enviar_de(rde)
print(resultado.rProtDe.dEstRes) # "Aprobado"
print(resultado.rProtDe.dProtAut) # Protocolo de autorização
Enviar lote de DEs (assíncrono)
resultado = transmissao.enviar_lote([rde1, rde2, rde3])
print(resultado.dProtConsLote) # Protocolo para consulta posterior
Consultar DE por CDC
from pysifen.transmissao import ConsultaSIFEN, TEST
consulta = ConsultaSIFEN(
ambiente=TEST,
pkcs12_data=cert_data,
pkcs12_password="password",
)
resultado = consulta.consultar_de("01800695631001001000000612024112917595714694")
Consultar RUC
resultado = consulta.consultar_ruc("80069563")
print(resultado.xContRUC.dRazCons) # Razão social
print(resultado.xContRUC.dRUCFactElec) # "S" = habilitado para FE
Enviar eventos (cancelamento, inutilização, etc.)
from pysifen.transmissao import TransmissaoEvento, TEST
evento_transmissao = TransmissaoEvento(
ambiente=TEST,
pkcs12_data=cert_data,
pkcs12_password="password",
)
resultado = evento_transmissao.enviar_evento(evento)
Tipos de Documento Electrónico
| Tipo | Código | Descrição |
|---|---|---|
| Factura Electrónica | 1 | Fatura eletrônica |
| FE Exportación | 2 | Fatura de exportação |
| FE Importación | 3 | Fatura de importação |
| Autofactura | 4 | Autofatura |
| Nota de Crédito | 5 | Nota de crédito |
| Nota de Débito | 6 | Nota de débito |
| Nota de Remisión | 7 | Nota de remissão |
| Comprobante de Retención | 8 | Comprovante de retenção |
Módulos
Bindings (gerados automaticamente)
| Módulo | Descrição |
|---|---|
fe_v141 |
Documento Electrónico principal (RDe, TDe, TgEmis, ...) |
de_v150 |
Tipos adicionais do DE v150 |
de_types_v150 |
Tipos base (enums, restrições) |
evento_v150 |
Eventos (cancelação, inutilização, conformidade, ...) |
evento_types_v150 |
Tipos de eventos |
ws_si_recep_de_v150 |
WS Recepção DE |
ws_si_recep_evento_v150 |
WS Recepção Evento |
ws_si_cons_de_v141 |
WS Consulta DE |
ws_si_cons_ruc_v141 |
WS Consulta RUC |
prot_proces_de_v150 |
Protocolo de processamento |
xmldsig_core_schema |
Assinatura digital XML |
Assinatura (pysifen.assinatura)
| Função | Descrição |
|---|---|
sign_xml() |
Assina XML com PKCS12/RSA-SHA256 usando signxml |
Transmissão (pysifen.transmissao)
| Classe | Descrição |
|---|---|
TransmissaoDE |
Envio de DEs (síncrono e lote) com mTLS |
ConsultaSIFEN |
Consultas (DE por CDC, lote, RUC, DTE) |
TransmissaoEvento |
Envio de eventos (cancelamento, inutilização, etc.) |
TransmissaoBase |
Classe base com SOAP client, mTLS e serialização |
Ambientes
| Constante | Valor | Descrição |
|---|---|---|
PRODUCCION |
1 | Ambiente de produção (sifen.set.gov.py) |
TEST |
2 | Ambiente de testes (sifen-test.set.gov.py) |
Dependências Opcionais
| Extra | Pacotes | Uso |
|---|---|---|
sign |
signxml, cryptography, lxml |
Assinatura digital RSA-SHA256 |
transmissao |
xsdata[soap], signxml, cryptography, requests, lxml |
Transmissão SOAP com mTLS |
soap |
xsdata[soap] |
Apenas cliente SOAP |
test |
pytest, pytest-cov, xmldiff, lxml |
Testes |
Regenerar Bindings
Se os XSD forem atualizados:
pip install xsdata[cli,lxml]
./script.sh
Desenvolvimento
git clone https://github.com/KMEE/pysifen.git
cd pysifen
python -m venv .venv
source .venv/bin/activate
pip install -e ".[sign,test]" "xsdata[cli,lxml]"
pytest tests/ -v
ruff check pysifen/ tests/
Referências
Licença
MIT License - Copyright (c) KMEE
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 sifen-0.1.0.tar.gz.
File metadata
- Download URL: sifen-0.1.0.tar.gz
- Upload date:
- Size: 124.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0aae2e25a82fe34a6a56ed1497ffe1ec9417b95f9b6156e8adf7ceea51918d5d
|
|
| MD5 |
c08631a874727c11318cb3259214d3b2
|
|
| BLAKE2b-256 |
e458a8973bccdce897822db3d8660e79d2948d25e1c7a1463dce3c84823ff5d0
|
File details
Details for the file sifen-0.1.0-py3-none-any.whl.
File metadata
- Download URL: sifen-0.1.0-py3-none-any.whl
- Upload date:
- Size: 151.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
acd92a64246f6d5eb7e05c4d3f734ce5a29b489f8117b7560456f390a74717bb
|
|
| MD5 |
0a97cce053412802e4d2add5ce25c17f
|
|
| BLAKE2b-256 |
26f0c3f3b72332835a4bda3554acf29db4f175ba17eb45f37eb90da4557bdb1c
|