Trabajo
PropioProducto propio · SaaS de facturación
Efectiback, facturación electrónica

Efectiback

SaaS de facturación electrónica para Perú: emite factura, boleta y notas directo a SUNAT, con API REST, portal para clientes y panel de operador.

Captura de Efectiback (1/3)
Captura de Efectiback (2/3)
Captura de Efectiback (3/3)
SYSTEM.md

El problema

Las MYPEs necesitan emitir comprobantes válidos ante SUNAT sin depender de una contadora ni de un portal lento, y los sistemas que ya usan (POS, ERP, tienda online) deben poder integrarse por API.

Qué construí

Construí la plataforma de punta a punta: una librería Java con UBL 2.1, firma XAdES y cliente SOAP; una API en Spring Boot con arquitectura hexagonal; un portal y un backoffice en Angular; y la landing en Astro.

Resultado

En uso por clientes reales. Más de 350 pruebas automatizadas en el backend y emisión verificada contra el ambiente beta de SUNAT, con CDR aceptado.

Decisiones que importaron

  1. 01

    La cola vive en Postgres

    El envío a SUNAT usa una tabla de cola con FOR UPDATE SKIP LOCKED y reintentos con espera creciente: sin RabbitMQ ni infraestructura extra.

  2. 02

    Un validador por tipo de comprobante

    Factura, boleta y notas validan con sus propias reglas, extraídas del Excel oficial de SUNAT. Un error se rechaza con HTTP 422 antes de encolar.

  3. 03

    Monolito modular, no microservicios

    Un solo despliegue con contextos acotados (emisión, identidad, suscripciones). El motor es una librería sin Spring, que se prueba por separado.

  4. 04

    Secretos cifrados

    Los certificados digitales y la Clave SOL de cada empresa se guardan cifrados con una clave maestra, y la sesión usa una cookie HttpOnly.

  5. 05

    Costo operativo mínimo

    Backend en Cloud Run, base en Supabase, archivos en Cloudflare R2 y frontends en Cloudflare Pages.

Tecnologías

  • Java 21
  • Spring Boot
  • PostgreSQL
  • Angular
  • Cloud Run
  • Cloudflare R2
  • Astro

Modelo C4. La línea con pulso es el recorrido principal de una solicitud.

Nivel 1 · quién usa el sistema y con qué se conecta

Web portal1BackofficeREST · API keySOAP · signed XML2HTTPSHTTPSDueño de MYPEEmite y consultacomprobantesOperadorGestiona clientes y planesPOS, ERP o tiendaonline[REST]Emite comprobantes por APIEfectibackFacturación electrónicapara PerúSUNAT[SOAP · XML]Recibe y acepta loscomprobantesResend[Resend]Envía comprobantes porcorreojson.pe[json.pe]Consulta RUC y DNI

Nivel 2 · las aplicaciones y almacenes que lo componen

HTTPS1HTTPSREST · API keyREST · JWT2REST ·cookieHTTP · secretJDBC · FlywayS3 APISOAP3HTTPSDueño de MYPEEmite y consultacomprobantesOperadorGestiona clientes y planesPOS, ERP o tiendaonline[REST]Emite comprobantes por APIPortal de clientes[Angular 22 · Cloudflare Pages]Emisión, consulta ydescargaBackoffice[Angular 22 · Cloudflare Access]Altas, planes, cobros ycuposCloud Scheduler[Cloud Scheduler]Dispara las tareasprogramadasAPI de facturación[Spring Boot 3.5 · Java 21 · CloudRun]Monolito modular, DDDhexagonalResend[Resend]Envía comprobantes porcorreoBase de datos[PostgreSQL · Supabase]Empresas, documentos y colade envíosAlmacén decomprobantes[Cloudflare R2]XML firmado, CDR y PDF por5 añosSUNAT[SOAP · XML]Recibe y acepta loscomprobantes

Nivel 3 · los componentes dentro de la API

ACL · facadeplan quotacommandper-type rulescola_envios1sign +send2SOAP3XML · CDR · PDFIdentidad[Bounded context]Usuarios, JWT y API keysSuscripciones[Bounded context]Planes, cupos y cobrosPOS y catálogo[Bounded context]Ventas e inventarioValidador local[motor-core]Rechaza antes de encolarEmisión[Bounded context]Factura, boleta, notas ybajaWorker de envíos[@Scheduled · SKIP LOCKED]Firma, envía y archivaAlmacén[Puerto AlmacenComprobantes]R2 o disco, el mismocontratoMotor defacturación[motor-core · UBL 2.1 · XAdES]UBL, firma XAdES y clienteSOAPSUNAT[SOAP · XML]Recibe y acepta loscomprobantes
  • Persona
  • Sistema
  • Contenedor
  • Base de datos
  • Externo
  • Recorrido principal
  1. 01Portal o ERP
  2. 02API REST
  3. 03Cola en Postgres
  4. 04Firma XAdES
  5. 05SUNAT
  6. 06CDR en R2

CV

Descarga mi CV

Déjame tu correo y te envío el CV ahí. Primero verifico que el correo es tuyo con un código.