Skip to main content

sifen

Bindings Python para leer y generar XML del SIFEN (Sistema Integrado de Facturación Electrónica Nacional) de Paraguay.

Generados automáticamente a partir de los XSD oficiales de la SET usando xsdata, siguiendo el mismo enfoque de nfelib.

Instalación

pip install sifen

Con firma digital (RSA-SHA256):

pip install sifen[sign]

Con transmisión SOAP (envío al SIFEN):

pip install sifen[transmissao]

Para desarrollo:

pip install -e ".[sign,test]"

Uso

Leer un Documento Electrónico (DE)

Nota sobre v150: el paquete pysifen.de.bindings.v150 se genera desde toda la carpeta de esquemas, que mezcla XSD v141 y v150; por colisión de tipos, su root queda con estructura v141. Para trabajar con el root v150 limpio (dSisFact, gValorRestaItem, dBasExe) usá el paquete aislado pysifen.de.bindings.de_v150:

from pysifen.de.bindings.de_v150.de_v150 import RDe
from pysifen.de.bindings.v150.fe_v141 import RDe

# Leer desde archivo
rde = RDe.from_path("factura.xml")

# Leer desde string
rde = RDe.from_xml(xml_string)

# Navegar los datos
print(rde.DE.gDatGralOpe.gEmis.dRucEm)       # RUC del emisor
print(rde.DE.gDatGralOpe.gEmis.dNomEmi)       # Nombre del emisor
print(rde.DE.gDtipDE.gCamFE.iIndPres)         # Indicador de presencia
print(len(rde.DE.gDtipDE.gCamItem))            # Cantidad de ítems

Serializar a XML

xml = rde.to_xml()
print(xml)

Round-trip (leer y escribir)

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)

Firmar XML (RSA-SHA256)

pip install sifen[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 directamente con RSA-SHA256 y C14N, conforme lo exigido por el SIFEN. La función centralizada también está disponible en:

from pysifen.assinatura import sign_xml

signed = sign_xml(xml, cert_data, "password", doc_id)

Transmisión SOAP al SIFEN

pip install sifen[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 autorización

Enviar lote de DEs (así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ón social
print(resultado.xContRUC.dRUCFactElec)  # "S" = habilitado para FE

Enviar eventos (cancelación, inutilización, 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 Descripción
Factura Electrónica 1 Factura electrónica estándar
FE Exportación 2 Factura de exportación
FE Importación 3 Factura de importación
Autofactura 4 Autofactura
Nota de Crédito 5 Nota de crédito electrónica
Nota de Débito 6 Nota de débito electrónica
Nota de Remisión 7 Nota de remisión electrónica
Comprobante de Retención 8 Comprobante de retención

Módulos

Bindings (generados automáticamente)

Módulo Descripción
fe_v141 Documento Electrónico principal (RDe, TDe, TgEmis, ...)
de_v150 Tipos adicionales del DE v150
de_v150.de_v150 (paquete aislado) Root DE v150 limpio (RDe, TDe con dSisFact, gValorRestaItem, dBasExe)
de_types_v150 Tipos base (enums, restricciones)
evento_v150 Eventos (cancelación, inutilización, conformidad, ...)
evento_types_v150 Tipos de eventos
ws_si_recep_de_v150 WS Recepción DE
ws_si_recep_evento_v150 WS Recepción Evento
ws_si_cons_de_v141 WS Consulta DE
ws_si_cons_ruc_v141 WS Consulta RUC
prot_proces_de_v150 Protocolo de procesamiento
xmldsig_core_schema Firma digital XML

Firma (pysifen.assinatura)

Función Descripción
sign_xml() Firma XML con PKCS12/RSA-SHA256 usando signxml

Transmisión (pysifen.transmissao)

Clase Descripción
TransmissaoDE Envío de DEs (síncrono y lote) con mTLS
ConsultaSIFEN Consultas (DE por CDC, lote, RUC, DTE)
TransmissaoEvento Envío de eventos (cancelación, inutilización, etc.)
TransmissaoBase Clase base con SOAP client, mTLS y serialización

Ambientes

Constante Valor Descripción
PRODUCCION 1 Ambiente de producción (sifen.set.gov.py)
TEST 2 Ambiente de pruebas (sifen-test.set.gov.py)

Dependencias Opcionales

Extra Paquetes Uso
sign signxml, cryptography, lxml Firma digital RSA-SHA256
transmissao xsdata[soap], signxml, cryptography, requests, lxml Transmisión SOAP con mTLS
soap xsdata[soap] Solo cliente SOAP
test pytest, pytest-cov, xmldiff, lxml Tests

Regenerar Bindings

Si los XSD se actualizan:

pip install xsdata[cli,lxml]
./script.sh

Desarrollo

git clone https://github.com/kmee/sifen.git
cd sifen
python -m venv .venv
source .venv/bin/activate
pip install -e ".[sign,test]" "xsdata[cli,lxml]"
pytest tests/ -v
ruff check pysifen/ tests/

Referencias

Licencia

MIT License - Copyright (c) KMEE

Metadata

Release files for sifen 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sifen 0.2.0
File Size Uploaded
sifen-0.2.0.tar.gz 151.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sifen 0.2.0
File Interpreter ABI Platform
sifen-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 332.1 kB

Release files / sifen-0.2.0.tar.gz

Download URL sifen-0.2.0.tar.gz
Size 151.8 kB
Tags Source
SHA-256 checksum
How to use checksums
d9d4d5de9487d8d2a9de2556945b4e4a3fae53c9301b4d942a9c2b170d1a7224
BLAKE2b-256 checksum
How to use checksums
c1a80255279c7ababcab8c99cd6bce15e88d07cd6c98a46bf255a69891903835
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 7, 2026.

Transparency log

Release files / sifen-0.2.0-py3-none-any.whl

Download URL sifen-0.2.0-py3-none-any.whl
Size 180.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a227617dd9ef262bdd6c682f80139bebf30ed8974782e3dfee53b447962ee959
BLAKE2b-256 checksum
How to use checksums
3eae6c4b82f14e89e8f33e56acb78da0530242df0655020b5ce56dbc0c9ce6b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 7, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page