Back to 0fee
0fee

Sistema de facturas y generación de PDF con WeasyPrint

Cómo 0fee.dev genera facturas profesionales con WeasyPrint, marca del comerciante, búsqueda/filtro y envío por correo. Por Juste A. Gnimavo y Claude.

Juste A. Gnimavo (Thales) & Claude | March 27, 2026 3 min 0fee
EN/ FR/ ES
invoicespdf-generationweasyprint

Toda plataforma de pagos necesita facturas. Son el rastro documental del que dependen comerciantes, contadores y autoridades fiscales. En 0fee.dev, el sistema de facturas va más allá de simples recibos -- produce documentos PDF profesionales y con marca que los comerciantes pueden enviar directamente a sus clientes.

Modelo de datos de facturas

Una factura en 0fee.dev está vinculada a una transacción pero vive como su propia entidad con su propio ciclo de vida. El formato de referencia está diseñado para auditoría multi-aplicación: {REF}-{AAMMDD}-{APP_SLUG}-{XXXX}.

Plantilla HTML profesional de facturas

El PDF se genera a partir de una plantilla HTML estilizada con CSS. Elegimos HTML-a-PDF sobre bibliotecas PDF directas porque HTML es más fácil de diseñar, mantener y personalizar. La plantilla incluye encabezado con logo del comerciante, información de partes (emisor y destinatario), tabla de artículos con cantidades y precios, totales con impuestos y pie de página.

Generación de PDF con WeasyPrint

Elegimos WeasyPrint para la conversión HTML-a-PDF. Es una biblioteca Python que renderiza HTML/CSS a PDF con excelente soporte CSS, incluyendo flexbox, fuentes personalizadas y estilos a nivel de página.

BibliotecaProsContrasVeredicto
WeasyPrintPython puro, soporte CSS3, sin dependencia de navegadorMás lento que wkhtmltopdf, deps del sistemaElegido -- mejor soporte CSS
wkhtmltopdfRápido, maduroWebKit headless, binario grandeRechazado
Puppeteer/PlaywrightRenderizado Chrome completoDependencia Node.js, pesadoRechazado
ReportLabPDF nativo, rápidoPosicionamiento manual, sin HTML/CSSRechazado

Búsqueda y filtro

El endpoint de listado de facturas soporta búsqueda de texto completo y filtrado multi-parámetro: texto en referencia/nombre/email del cliente, estado, rango de fechas, rango de montos y paginación.

Endpoint de duplicación

Los comerciantes frecuentemente necesitan crear facturas similares. El endpoint de duplicación copia una factura existente con una nueva referencia y fecha.

Envío por correo vía SMSING API

Las facturas se envían por correo a los clientes usando la SMSING API (un servicio africano de envío de email/SMS), con el PDF adjunto codificado en base64.

Marca del comerciante desde configuración de la app

Cada app puede personalizar la apariencia de sus facturas a través de la configuración: nombre de empresa, dirección, logo, ID fiscal, color de marca. La marca se captura al momento de creación de la factura para que cambios posteriores no alteren facturas existentes.

Lo que aprendimos

  1. Las facturas son una señal de confianza. Los comerciantes que pueden enviar facturas profesionales con marca son percibidos como más legítimos por sus clientes.
  1. El formato de referencia importa para la auditoría. Incluir el slug de la app y la fecha en la referencia hace posible la auditoría multi-aplicación sin abrir cada factura.
  1. WeasyPrint es la compensación correcta. Es más lento que alternativas binarias pero la flexibilidad CSS lo vale. Un renderizado de PDF de 200ms es perfectamente aceptable.
  1. Captura la marca al momento de creación. Si renderizas dinámicamente la marca al generar el PDF, cambiar un logo retroactivamente cambia todas las facturas pasadas.
  1. La búsqueda no es negociable. Una vez que un comerciante tiene más de 100 facturas, poder buscar por referencia, nombre o rango de fechas pasa de ser algo deseable a esencial.

Este artículo es parte de la serie "Cómo construimos 0fee.dev". 0fee.dev es un orquestador de pagos que cubre más de 53 proveedores en más de 200 países, construido por Juste A. GNIMAVO y Claude desde Abiyán sin ingenieros humanos. Sigue la serie para conocer la historia completa de la construcción.

Share this article:

Responses

Write a response
0/2000
Loading responses...

Related Articles

Thales & Claude deblo

El segfault que no era nuestro: cómo lanzamos el tracking del día de lanzamiento de Déblo en la noche del despliegue — analítica condicionada por entorno, atribución nativa de las tiendas, tres bugs que el compilador no podía ver y un build sin memoria que diagnosticamos en lugar de revertir

El 1 de julio de 2026 — el día del lanzamiento — el riesgo nunca fue el texto. Era que las campañas de pago salieran a ciegas. Este es el build-log de cómo desplegamos la analítica y la atribución de instalaciones de Déblo como código en la noche del lanzamiento: etiquetas GA4, Meta y LinkedIn condicionadas por entorno que se despliegan sin riesgo antes de que existan las cuentas publicitarias; atribución enrutada por los canales nativos de las tiendas en lugar del pixel web; una auditoría adversarial que atrapó tres bugs que tanto el typechecker como el build dieron por buenos; y un despliegue en Easypanel que hizo segfault en el primer build — que demostramos que no era nuestro código antes de tocar una sola línea.

18 min Jul 1, 2026
deblolaunch-dayclaude-opus-4.8claude-code +26
Thales & Claude thales

Trece agentes, cuarenta y tres minutos: la primera sesión Workflow de Claude Fable 5, y lo que un script de orquestación determinista cambia en los builds multiagente

Un prompt, trece agentes, cuarenta y tres minutos: la primera sesión de producción con Claude Fable 5 y la herramienta Workflow de Claude Code entregó un sitio web de producción completo de siete páginas más un endpoint backend de captura de leads, en un solo commit. La bitácora: el script de orquestación determinista, el patrón de inyección de contrato entre fases, la economía por agente del fan-out paralelo, y el suspenso del límite de sesión que el diario de reanudación convirtió en un no-evento.

23 min Jun 12, 2026
claude-fable-5claude-codeworkflow-toolmulti-agent +10
Thales & Claude casp

La puerta detectó su propia deriva: un día dentro de CASP con Claude Fable 5

Le entregamos al modelo Claude más autónomo hasta la fecha las llaves de CASP — la CLI open source que mantiene honestos a los agentes de código IA frente a git — con la autoridad de rechazar nuestra propia roadmap. Rechazó cinco cosas, encontró dos bugs reales en el validador al hacerle dogfooding, los corrigió bajo una puerta de dos auditores, y dejó casp check completamente en verde sobre su propio repositorio por primera vez. CASP 0.3.0 es el resultado.

15 min Jun 10, 2026
caspzerosuiteworkflowai-cto +9