Saltar al contenido
Proyectos

ERP para una importadora

Inventario, ventas, clientes y usuarios para una importadora de repuestos. Backend en Spring Boot, vistas en Thymeleaf y comprobantes electrónicos vía Nubefact.

  • Spring Boot
  • Java
  • Thymeleaf
  • MySQL
  • Nubefact
Diagrama de arquitectura: la aplicación web en Thymeleaf y Tailwind habla con un backend en Spring Boot (Spring Security, controladores y APIs REST, servicios de inventario, ventas, clientes y usuarios, y Spring Data JPA), que guarda en MySQL y pide los comprobantes a Nubefact.

El problema

Una importadora necesitaba un sistema propio para su inventario, sus ventas y sus clientes. Además facturaba a mano: cada comprobante era alguien copiando datos en el portal de SUNAT, sin ninguna relación entre la factura emitida y la venta que la originó.

Lo que construí

El sistema completo: backend en Spring Boot con Spring Security, JPA y APIs REST, y las vistas de la aplicación en Thymeleaf con Tailwind CSS. Los módulos de inventario, ventas, clientes y usuarios trabajan sobre una base de datos relacional en MySQL que diseñé para el proyecto.

Las ventas emiten su comprobante electrónico ante SUNAT a través de Nubefact.

Por qué el diagrama y no una captura

Es un sistema interno de una empresa. Sus datos son facturación real de un tercero y no se publican: ni capturas de la aplicación en uso, ni nombres de clientes, ni importes. Lo que sí se puede enseñar es cómo está resuelto.

Lo que el diagrama cuenta

Tres capas: las vistas se renderizan en el servidor con Thymeleaf; el backend en Spring Boot protege las rutas con Spring Security, valida lo que entra en los controladores y reparte la lógica en un servicio por área; y Spring Data JPA lleva los datos a MySQL.

La emisión de comprobantes es una integración más, pero con un cuidado propio: un comprobante a medio emitir puede dejar una venta sin factura o una factura duplicada. Por eso la venta se persiste antes de llamar a Nubefact, y el estado del comprobante vive aparte del estado de la venta. Las tres respuestas posibles se manejan sin perder nada:

  • Aceptado: se guardan el número y el estado junto a la venta.
  • Rechazado por validación: se registra el motivo que devuelve SUNAT, y la venta sigue registrada.
  • El proveedor no responde: el comprobante queda pendiente y la operación puede reintentarse sin volver a cobrar.

Además

Integré agentes de IA (OpenAI Codex, Claude Code) en el flujo de trabajo para planificación, revisión de código, documentación y QA, y participé en el análisis de requerimientos y las pruebas funcionales.