Ir al contenido

Cómo elegir

openUBL se puede usar de tres maneras. Esta página te ayuda a elegir la más adecuada en menos de dos minutos.

Tu contextoModo recomendadoRazón
Tu proyecto es Python y no necesitas compartir la lógicaPython nativoNo necesitas levantar un servicio ni mantener HTTP.
Tu proyecto es TypeScript/Node.jsSDK TypeScriptTipado completo, autocompletado y validación Zod.
Varios sistemas necesitan generar documentosAPI RESTCentralizas validación, firma y enriquecimiento en un solo lugar.
Necesitas firmar XML localmentePython nativo o API RESTLa firma requiere acceso al certificado y la clave privada.
Quieres probar desde curl/PostmanAPI RESTLos endpoints aceptan JSON y devuelven XML.
Equipo pequeño, pocos documentos al díaPython nativo o SDK TypeScriptMenos infraestructura.
Equipo grande, alta concurrenciaAPI RESTEscalas el servicio independientemente de los clientes.
flowchart TD
    A[¿Quieres usar openUBL?] --> B{¿Tu proyecto es TypeScript?}
    B -->|Sí| C[SDK TypeScript]
    B -->|No| D{¿Tu proyecto es Python?}
    D -->|Sí| E{¿Varios sistemas lo usarán?}
    E -->|Sí| F[API REST]
    E -->|No| G[Python nativo]
    D -->|No| F
from openubl.models import Invoice, Proveedor, Cliente, DocumentoVentaDetalle
from openubl.enricher import ContentEnricher
from openubl.renderer import render_invoice
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)],
)
ContentEnricher().enrich(invoice)
xml = render_invoice(invoice)
print(xml)
Ventana de terminal
curl -X POST http://localhost:8000/api/v1/invoice/create \
-H "Content-Type: application/json" \
-d '{
"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 }]
}'
import { createInvoice } from "@openubl/sdk";
import { zInvoice } from "@openubl/sdk/zod.gen";
const invoice = zInvoice.parse({
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, error } = await createInvoice({ body: invoice });
if (error) throw new Error(JSON.stringify(error));
console.log(data.xml);