Volver a proyectos
Backend

Sistema de Inventario y Ventas

API REST en Spring Boot para la gestión de negocios de venta y reparación — inventario, ventas, órdenes de reparación, movimientos financieros y reportes analíticos.

JavaSpring BootMySQLJPA/HibernateSpring SecurityJWTMinIO/S3Mailgun

Proyecto privado
El proyecto original contiene información privada y no puede compartirse públicamente. Esta página presenta el proyecto a alto nivel y se enfoca en las habilidades y responsabilidades involucradas.

Spring Boot API Infraestructura Capa de presentación Controladores Endpoints REST • validación DTO • @PreAuthorize Capa de servicio Servicio de usuarios Auth • Roles • Permisos Inventario Svc Ítems • Categorías • Proveedores Ventas Svc Ventas • Pagos • Artículos Obras Svc Reparaciones • Obras • Ítems Movimientos Svc Finanzas • Saldos Reportes Svc SQL nativo • CTEs recursivas Capa de repositorio JpaRepository JPA + consultas nativas personalizadas Repos personalizados ReportRepositoryImpl • SQL nativo Capa de dominio Entidades JPA • Auditable • Enums Objetos de valor DTOs • Proyecciones • Enums MySQL 8+ JPA/Hibernate • Flyway MinIO / S3 URLs prefirmadas • Imágenes Mailgun Correo transaccional Actuator Salud • Métricas • Basic Auth Scheduler Limpieza de imágenes (2 AM)

Descripción general

Una API REST integral en Spring Boot para la gestión de negocios de venta y reparación — manejo de inventario, ventas, órdenes de reparación, movimientos financieros y reportes analíticos.

El sistema proporciona control centralizado sobre inventario, transacciones de ventas, órdenes de reparación, movimientos financieros y reportes analíticos. Soporta entornos multiusuario con control de acceso basado en roles y notificaciones automatizadas.

Arquitectura

Arquitectura en capas

CapaResponsabilidad
PresentaciónControllers (endpoints REST, validación de DTOs, permisos)
ServicioLógica de negocio (@Transactional, orquestación, mapeo)
RepositorioJpaRepository + consultas nativas personalizadas (reportes)
DominioEntidades (JPA, Auditable), Enums, objetos de valor

Estructura de módulos

MóduloResponsabilidadEntidades clave
userAutenticación, autorización, gestión de usuarios/roles/permisosUser, Role, Permission, RefreshToken
inventoryProductos, categorías, proveedores, comprasItem, Category, Provider, Purchase, PurchaseDetail
salesTransacciones de venta, medios de pagoSale, SoldItem, GenericItem, PaymentMethod
worksÓrdenes de reparación, tipos de trabajoWork, WorkItem, GenericWorkItem, WorkType, WorkStatusLog
movementsRegistro de movimientos financierosMovement
reportReportes analíticos (SQL nativo)Projections, Period Responses
auditAuditoría automáticaAuditable (base)
configSeguridad, JWT, CORS, Swagger, Email, StorageJWTService, SecurityConfig, S3StorageService
exceptionManejo global de errores, excepciones personalizadasErrorHandler, ExceptionList
utilsUtilidades compartidasValidationUtils, TimeHelpers
dataSourceAbstracción de almacenamientoStorageService, FileContent
schedulerTareas en segundo planoImageCleanupScheduler

Funcionalidades clave

Gestión de inventario

  • Productos y categorías: CRUD completo con niveles de stock, precios, códigos de barras y gestión de imágenes
  • Proveedores: Gestión de proveedores con historial de compras
  • Compras: Reposición de stock con actualización automática de inventario y seguimiento de pagos
  • Alertas de stock: Clasificación automática de estado (En stock / Alarma / Crítico / Sin stock)

Ventas y punto de venta

  • Ventas multi-artículo: Artículos de inventario + artículos genéricos puntuales en una sola transacción
  • Descuentos flexibles: Por línea y por venta (porcentaje o monto fijo)
  • Pagos divididos: Múltiples medios de pago por venta con seguimiento automático de saldos
  • Integración con reparaciones: Vinculación de órdenes de trabajo con ventas para transacciones unificadas

Órdenes de reparación

  • Ciclo de vida del trabajo: Pendiente → En reparación → Listo → Entregado con trazabilidad
  • Repuestos y mano de obra: Consumo de artículos de inventario y/o servicios personalizados por orden
  • Notificaciones al cliente: Email automático cuando el trabajo está listo para retirar
  • Tipos de trabajo: Categorización de reparaciones con precios personalizados

Seguimiento financiero

  • Movimientos: Registro de ingresos/gastos con categorización
  • Medios de pago: Saldos acumulados por tipo de tender (efectivo, tarjeta, transferencia)
  • Rentabilidad: Análisis de costo vs. ingresos por venta y orden de trabajo

Reportes y analítica

  • Reportes de series de tiempo: Ventas, artículos, trabajos y medios de pago agrupados por Día/Semana/Mes
  • Relleno de períodos en cero: Serie de fechas continua incluso para períodos sin datos
  • Agregación multi-fuente: Combina ventas, reparaciones y compras en consultas únicas
  • Saldos acumulados: Saldos históricos y proyectados por medio de pago

Gestión de usuarios y seguridad

  • Acceso basado en roles: Permisos de granularidad (ver/crear/editar/eliminar por entidad)
  • Autenticación JWT: Doble token (access + refresh) en cookies HttpOnly seguras
  • Recuperación de contraseñas: Restablecimiento seguro basado en token por email
  • Trazabilidad: Marcas de tiempo automáticas de creación/actualización y seguimiento de usuario en todas las entidades

Aspectos técnicos destacados

Motor de reportes

Genera reportes de series de tiempo con relleno de períodos en cero, agregación multi-fuente y saldos acumulados usando CTEs recursivas y SQL nativo.

Carga de imágenes a S3

Flujo presigned en dos fases: subidas directas del navegador al almacenamiento sin consumir ancho de banda del servidor, con confirmación atómica de reemplazo y limpieza.

Arquitectura JWT de doble token

Token de acceso (~1 hora) + refresh token (~30 días, derivado del hash de contraseña) con rotación de JTI para revocación inmediata.

Consumo de inventario multi-fuente

Seguimiento de stock unificado en ventas, trabajos y compras con clasificación automática de estado (En stock, Alarma, Crítico, Sin stock).

Stack técnico

ÁreaImplementación
FrameworkSpring Boot 3.x, Java 21, Maven
Base de datosMySQL 8+, JPA/Hibernate
SeguridadSpring Security 6, JWT (HMAC256), BCrypt, @PreAuthorize a nivel de método
AlmacenamientoCompatible con S3 (MinIO/AWS) con URLs presigned
EmailAPI de Mailgun + plantillas Thymeleaf, registro de entregas
ReportesSQL nativo con CTEs recursivas, agrupación temporal dinámica (DAY/WEEK/MONTH)
Tareas programadasSpring @Scheduled (limpieza diaria de imágenes)
Documentación APISpringDoc OpenAPI 3 (Swagger UI)
Manejo de errores@RestControllerAdvice global con captura del cuerpo de la petición
ValidaciónBean Validation (Jakarta) + utilidades reutilizables de validación por lotes
AuditoríaSpring Data JPA Auditing vía AuditorAware

Seguridad y permisos

Modelo de permisos

  • Formato: {entidad}{Acción} → seeItems, createSales, editWorks, deleteCategories
  • Aplicación: @PreAuthorize("hasAuthority('permissionName')") en métodos del controller
  • Asignación: Los roles agregan permisos; los usuarios se les asignan uno o más roles

Funcionalidades de seguridad

ÁreaImplementación
AutenticaciónJWT en cookies HttpOnly Secure (access + refresh)
Autorización@PreAuthorize a nivel de método con autoridades de permiso
Almacenamiento de contraseñasBCrypt (vía el bean PasswordEncoder)
Rotación de tokensEl refresh genera un nuevo par; el JTI anterior se invalida en la DB
Recuperación de contraseñaJWT con secreto propio, expiración de 30 min, link por email
CORSConfigurable vía CorsConfig
Protección de ActuatorCadena de filtros separada con Basic Auth
Validación de peticionesBean Validation (Jakarta) en todos los DTOs
Inyección SQLVinculación de parámetros de JPA; las consultas nativas usan parámetros con nombre

Resultado

El sistema automatiza por completo las operaciones del negocio de venta y reparación. Elimina el seguimiento manual en planillas, brinda visibilidad de inventario en tiempo real, permite flujos de reparación profesionales con comunicación al cliente y entrega analítica accionable a través de reportes multidimensionales. La arquitectura está lista para producción con seguridad, observabilidad y automatización de despliegue integral.