openUBL - Peruvian SUNAT Electronic Documents Library
Project description
openUBL
Genera, firma y valida documentos electrónicos UBL 2.1 para SUNAT (Perú) — sin complicaciones.
openUBL es una biblioteca Python con API REST incluida. Genera XML válido para facturas, notas de crédito, notas de débito, comunicaciones de baja, resúmenes diarios, percepciones y retenciones. Firma digitalmente con certificados XAdES-EPES y valida contra las reglas SUNAT antes de enviar.
¿Por qué openUBL?
- Sin dependencias externas — todo en Python. No necesitas servicios de terceros para generar XML.
- API REST lista para usar — levantas FastAPI y generas documentos vía HTTP.
- SDK TypeScript — tipos generados desde OpenAPI, con autocompletado completo.
- Firma digital integrada — firma con certificado PEM sin herramientas externas.
- Validación SUNAT — detecta errores antes del envío, no después.
- Documentación completa — guías paso a paso en https://darvin2c.github.io/openUBL
Instalación rápida
Python
pip install openubl
from openubl.models import Invoice, Proveedor, Cliente, DocumentoVentaDetalle
invoice = Invoice(
serie="F001",
numero=1,
proveedor=Proveedor(ruc="20100066603", razonSocial="Softgreen S.A.C."),
cliente=Cliente(nombre="Carlos", numeroDocumentoIdentidad="12121212121", tipoDocumentoIdentidad="6"),
detalles=[DocumentoVentaDetalle(descripcion="Item", cantidad=10, precio=100)],
)
xml = invoice.to_xml()
print(xml) # XML UBL 2.1 listo para firmar
TypeScript / JavaScript
npm install @openubl/sdk
import { client, type Invoice } from "@openubl/sdk";
const invoice: Invoice = {
serie: "F001",
numero: 1,
proveedor: { ruc: "20100066603", razonSocial: "Softgreen S.A.C." },
cliente: { nombre: "Carlos", numeroDocumentoIdentidad: "12121212121", tipoDocumentoIdentidad: "6" },
detalles: [{ descripcion: "Item", cantidad: 10, precio: 100 }],
};
const { data } = await client.POST("/api/v1/invoice/create", { body: invoice });
console.log(data?.xml); // XML UBL 2.1 generado
Levantar la API REST
uv run uvicorn openubl.main:app --reload
Abre http://localhost:8000/docs para Swagger UI interactivo.
Documentos soportados
| Tipo | Código SUNAT | Endpoint |
|---|---|---|
| Factura | 01 | POST /api/v1/invoice/create |
| Boleta | 03 | POST /api/v1/invoice/create |
| Nota de Crédito | 07 | POST /api/v1/credit-note/create |
| Nota de Débito | 08 | POST /api/v1/debit-note/create |
| Comunicación de Baja | RA | POST /api/v1/voided-documents/create |
| Resumen Diario | RC | POST /api/v1/summary-documents/create |
| Percepción | 40 | POST /api/v1/perception/create |
| Retención | 20 | POST /api/v1/retention/create |
Validación de versión
Verifica que tu SDK y la API compartan la misma versión:
from openubl.version import check_api_version
result = check_api_version("http://localhost:8000")
assert result["ok"], f"Desfase: SDK {result['sdk_version']} vs API {result['api_version']}"
import { checkApiVersion } from "@openubl/sdk";
const result = await checkApiVersion("http://localhost:8000");
if (!result.ok) throw new Error(`Desfase: SDK ${result.sdkVersion} vs API ${result.apiVersion}`);
Documentación
Contribuir
Consulta AGENTS.md para el contexto técnico completo del proyecto.
Licencia
MIT © openUBL
Test release flow v2
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 openubl-0.1.4.tar.gz.
File metadata
- Download URL: openubl-0.1.4.tar.gz
- Upload date:
- Size: 723.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
710e4546f4450b4168fa4e27ea5c6723be13403145bee568b19ca982ab5f620e
|
|
| MD5 |
9f6ef89bcdebca51551ee323f81b27d5
|
|
| BLAKE2b-256 |
10ef3b56214dfaf13962e15886100e0673564dd34105a6d371a12593d9c5dee5
|
File details
Details for the file openubl-0.1.4-py3-none-any.whl.
File metadata
- Download URL: openubl-0.1.4-py3-none-any.whl
- Upload date:
- Size: 35.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af25a9067a07810dbaea9c67e9cba60139a9cea63abd8b49196df9f270cbd419
|
|
| MD5 |
afb7d226e0f6d8bf9ec04ce0713cd30a
|
|
| BLAKE2b-256 |
e7e773ad33d2cdf39c1f6c640f0cdefa0d62aa569122e523b1b1979c0c726147
|