Saltar al contenido

Sistema ERP, CRM y punto de venta para una cadena de tiendas de descanso

Panel central de gestión multi-tienda para una cadena con siete tiendas físicas, aplicación de caja para Windows con sincronización online y offline, y generación automática de facturas y presupuestos.

El reto

Una cadena de tiendas de descanso operando en España necesitaba dejar de gestionar su día a día con herramientas sueltas. Hoja de cálculo para inventario, plantilla Word para presupuestos, impresora compartida para facturas, registro manual de cobros, comunicación informal con el equipo de cada tienda. Funciona en una tienda. Empieza a fallar en tres. En diez es directamente inviable.

El reto era construir una operación digital completa: un sistema central donde el equipo de administración gestionara todo en tiempo real, una aplicación de caja en cada tienda funcionando con o sin conexión a internet, y la sincronización entre ambos resuelta sin que nadie tuviera que pensar en ella. Y todo manteniendo un nivel de detalle suficiente para que el sector colchones —con sus variantes de tamaño, firmeza y combinaciones específicas— se gestionara correctamente, no como un producto plano cualquiera.

La estrategia

Construimos un sistema en tres componentes integrados:

Panel central web

Una aplicación web administrativa con stack moderno: frontend en React + TypeScript + Vite + shadcn/ui + Tailwind CSS, backend en Node.js + Express + Prisma, base de datos MySQL, autenticación JWT con refresh tokens y bcryptjs. Veintidós páginas funcionales y veinticinco módulos backend cubriendo:

  • CRM: clientes, contactos, histórico.
  • ERP: presupuestos con cálculo de impuestos, facturas con estados (borrador, emitida, pagada, anulada), cobros con métodos múltiples (efectivo, tarjeta, transferencia, mixto), historial completo.
  • Catálogo especializado: productos con variantes embebidas (tamaños, firmezas, combinaciones específicas del sector descanso), opciones, colores, categorías.
  • Gestión multi-tienda: configuración por tienda, empleados con autenticación por PIN, dispositivos POS emparejados.
  • Generación documental: PDFs de facturas y presupuestos generados vía Puppeteer + PDFKit, plantillas configurables por tienda.
  • Comunicación: SMTP por tienda, plantillas de email para factura, presupuesto y cobro, audit trail completo de envíos.
  • Reparto: gestión de repartidores y entregas a domicilio.
  • Importaciones: CSV y XLSX para alta masiva de productos y clientes.
  • Estadísticas: reportes y gráficos por tienda y periodo.

Aplicación de caja Windows

Una aplicación de escritorio nativa para los puestos de caja de cada tienda, escrita en C# sobre .NET WPF, compilable a ejecutable Windows. Repositorio de 1.466 archivos .cs con arquitectura limpia (Models, ViewModels, Services, Converters, DTOs, Views), tests unitarios, CHANGELOG y publicación en build de Release.

Funcionalidades clave:

  • Cobros rápidos: venta directa sin necesidad de presupuesto previo, validación, sincronización con el backend.
  • Presupuestos y facturas generados directamente desde la caja, con impresión local.
  • Login por PIN del empleado, sin necesidad de credenciales complejas en cada turno.
  • Configuración por tienda desplegada automáticamente al emparejar el dispositivo POS.
  • Modo offline funcional: la caja sigue operando sin conexión a internet · las ventas se encolan localmente · cuando hay red, se sincronizan en batch contra el backend sin intervención manual.
  • Impresión integrada de tickets y documentos.

Sincronización online y offline bidireccional

El componente crítico que conecta los dos anteriores. Sistema de sincronización pull/push entre el panel central y cada POS, con cola offline, idempotencia por token y resolución determinista de conflictos. Esto significa, en lenguaje práctico: si en una tienda se va internet a media tarde, la caja sigue cobrando · cuando la conexión vuelve, todo lo registrado entra al sistema central como si nunca se hubiera caído.

Los resultados

Verificado en archivos del proyecto:

  • Sistema desplegado y operativo en producción sobre VPS Ubuntu 24 + Plesk, con script de despliegue deploy.sh y migraciones determinísticas vía Prisma.
  • Siete tiendas físicas en operación sobre la plataforma, con más de quince empleados accediendo al sistema desde sus puestos de caja y desde el panel central.
  • Integración con sistema de fichajes externo: los mismos quince empleados de las tiendas físicas fichan diariamente a través de i30, otro de nuestros productos SaaS. El ecosistema técnico del cliente queda cubierto por dos sistemas conectados de la misma agencia.
  • Desarrollo activo continuado con worktrees de Git para trabajar varias features en paralelo · actividad reciente documentada en enero 2026.
  • Arquitectura formalizada: documentos ARCHITECTURE.md (flujo HTTP completo + capas + middlewares), DATA-MODEL.md (diagrama entidad-relación con cuarenta entidades documentadas y sus relaciones cascade/set-null/restrict), BUSINESS-LOGIC.md, API-CONTRACT.md, PRD.md.
  • Modelo de roles enterprise: cinco roles funcionales (SuperAdmin, AdminGlobal, Franquiciado, Encargado de tienda, Caja) con permisos granulares y filtro automático por tienda al nivel del middleware.
  • Soporte explícito a franquicias: el modelo separa “tienda propia” de “tienda franquiciada”, con scope de acceso correspondiente para cada rol · listo para escalar conforme la cadena suma nuevas tiendas.
  • Testing automatizado: tests unitarios sobre cálculos críticos (matemática de presupuestos, cobros rápidos, sincronización offline, configuración, reparto).

El volumen concreto de transacciones gestionadas y los datos financieros internos quedan reservados como información del cliente.

Por qué funcionó

El error más común al modernizar la operación de una cadena retail es comprar un SaaS genérico de gestión y forzar el negocio a encajar en sus categorías estándar. Funciona para vender camisetas o productos electrónicos commodity. No funciona para colchones, donde la combinación de tamaño + firmeza + lateralidad + acabado define un SKU único, y donde el cliente final compra con asesoramiento presencial, no por catálogo plano.

Construir el sistema a medida permitió tres cosas que un SaaS genérico no resuelve:

Modelado real del catálogo. Los productos del sector descanso tienen variantes embebidas (firmeza por lado, tamaños específicos), opciones, colores y precios calculados por combinación. El modelo de datos lo soporta nativamente, no como hack sobre un sistema diseñado para producto plano.

Funcionamiento offline. Una tienda física no se puede permitir que un fallo de internet pare las ventas. Resolverlo desde el principio con cola local y sync bidireccional es complejo · es exactamente lo que diferencia un sistema profesional de un atajo.

Estructura preparada para franquicias. El sistema se construyó con multi-tenancy desde el día uno. Cuando llegue una nueva tienda —propia o franquiciada—, se incorpora sin reescribir nada · se configura.

Para un retail mid-market que entiende que su operación es un activo estratégico, no un gasto a minimizar, este es el modelo que tiene sentido. La inversión inicial es mayor que comprar un SaaS, pero el sistema queda en propiedad del negocio y evoluciona al ritmo de éste, no al ritmo del licenciante.

Servicios involucrados

  • Web orientada a venta · panel central administrativo completo construido con stack moderno (React + TypeScript + Express + Prisma + MySQL) y aplicación de caja Windows en C# / .NET WPF.
  • Automatizaciones de marketing · workflows automáticos de generación de PDFs (facturas, presupuestos), envío de email transaccional por SMTP configurable por tienda, sincronización offline bidireccional entre cajas y panel central.

Sobre el cliente

Templo del Colchón opera actualmente siete tiendas físicas en España y está abierta a recibir solicitudes de nuevas franquicias en otras ciudades. Si estás interesado en abrir una franquicia con ellos, contacta directamente a través de su web: templodelcolchon.com.