Core library for SIFEN (Paraguay) electronic invoicing integration
Project description
sifen-core
sifen-core es una librería Python pura diseñada para facilitar la integración con SIFEN (Sistema Integrado de Facturación Electrónica Nacional) de Paraguay.
Proporciona herramientas de alto nivel para manejar todo el ciclo de vida de los Documentos Electrónicos (DE): desde la generación del XML hasta la firma digital y la comunicación con los servicios web de la SET.
Características principales
- ✅ Generación de XML: Soporte para DE y Eventos siguiendo las especificaciones de la SET.
- ✅ Firma Digital: Firma XMLDSig (RSA-SHA256) utilizando certificados PKCS#12 (.p12 / .pfx).
- ✅ Comunicación SOAP: Cliente integrado para interactuar con los Web Services (recibe, lote, consulta, evento).
- ✅ Generación de QR: Generación automática de la URL de consulta y su inserción en el XML.
- ✅ Soporte Async: Compatibilidad con
aiohttppara operaciones no bloqueantes. - ✅ Tipado Fuerte: Incluye archivo
py.typedpara soporte completo de MyPy/Type Checking.
Estructura del paquete
sifen/
├── setup.py # Script de instalación legacy
├── pyproject.toml # Configuración de empaquetado moderna
├── MANIFEST.in # Asegura la inclusión de archivos extra
└── sifen/ # El paquete importable
├── __init__.py # Exports principales
├── workflow.py # Helpers de alto nivel (flujo completo)
├── xmlgen/ # Generación de XML (DE y Eventos)
├── xmlsign/ # Firma digital (RSA-SHA256)
├── qrgen/ # Generación e inserción de QR
└── setapi/ # Cliente SOAP para la SET
Instalación
Desde PyPI (Recomendado)
pip install sifen-core
Nota: El paquete se instala como sifen-core, pero se importa como import sifen.
Desde GitHub (Desarrollo)
pip install git+https://github.com/joshuboshu/sifen.git
Uso rápido
Flujo simplificado: Generar → Firmar → QR
La librería proporciona un helper en sifen.workflow que maneja todo el proceso inicial:
from sifen.workflow import generate_de_signed_qr_xml
# Leer certificado y configurar secretos
pfx_bytes = open("certificado.p12", "rb").read()
password = "tu_contraseña"
id_csc = 1
csc_secret = "tu_csc_secreto"
# Generar XML firmado con QR listo para enviar
xml_final = generate_de_signed_qr_xml(
params=params_dict, # Ver documentación de parámetros
data=data_dict, # Datos de la factura
pfx_bytes=pfx_bytes,
password=password,
id_csc=id_csc,
csc=csc_secret,
qr_test=True, # True para ambiente de test
)
Paso a paso detallado
from sifen.xmlgen import generate_de_xml
from sifen.xmlsign import sign_de_xml
from sifen.qrgen import add_qr_to_signed_de_xml
from sifen.setapi import recibe
# 1. Generar XML base
xml = generate_de_xml(params=params, data=data)
# 2. Firmar digitalmente
signed = sign_de_xml(xml, pfx_bytes=pfx, password="pass")
# 3. Insertar código QR
final = add_qr_to_signed_de_xml(signed, id_csc=1, csc="secret", test=True)
# 4. Enviar a la SET
resp = recibe(id=1, xml=final, env="test", pfx_bytes=pfx, password="pass")
Ambientes SIFEN
| Ambiente | Valor env |
URL Base |
|---|---|---|
| Pruebas | "test" |
https://sifen-test.set.gov.py |
| Producción | "prod" |
https://sifen.set.gov.py |
Requisitos
- Python 3.10 o superior
- Dependencias automáticas:
lxml,cryptography,xmltodict,requests,aiohttp,qrcode.
Contribuir
¡Las contribuciones son bienvenidas! Si encuentras un error o quieres proponer una mejora, abre un issue o envía un pull request.
Licencia
Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.
Autor
Joshua Lombardo - GitHub
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_core-1.0.1.tar.gz.
File metadata
- Download URL: sifen_core-1.0.1.tar.gz
- Upload date:
- Size: 113.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f9329381c85381b91cfab262607a96b093599b09ad45b0f0110600764ac3e1e
|
|
| MD5 |
ab2b21c94348be307cc6637ffe14a28e
|
|
| BLAKE2b-256 |
09de7bf109579e1671a407349481b9edd5e6fc0c3bdd7106cbc69b8ae706f19b
|
File details
Details for the file sifen_core-1.0.1-py3-none-any.whl.
File metadata
- Download URL: sifen_core-1.0.1-py3-none-any.whl
- Upload date:
- Size: 122.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ed84f21e59cd84ec68356f85a257fbd4520f85a460802c89637288d56d5a229
|
|
| MD5 |
d61bd55ed47d0773ce73a549805bb62d
|
|
| BLAKE2b-256 |
ced9c5694aed72d8aaac3a5e2cbd2fa1e8287333a453a1bd918d29a12a289816
|