El Problema
En este cliente, cotizar una puerta corredera de interiorismo era un proceso manual que tomaba entre 20-35 minutos por cliente. El proceso implicaba:
- Consultar catálogos físicos para encontrar los componentes
- Calcular medidas manualmente según el hueco del cliente
- Buscar precios en múltiples listas actualizadas
- Sumar todo en una calculadora o Excel
- Redactar la oferta en Word
Con un promedio de 5-8 cotizaciones diarias, el cliente estaba perdiendo más de 2 horas al día en trabajo repetitivo que no aportaba valor real.
La Solución: CPQ en Rails
Desarrollar un sistema Configure-Price-Quote (CPQ) usando Ruby on Rails que automatiza todo el proceso de cotización.
Stack Técnico
# Gemfile
gem 'rails', '~> 7.0'
gem 'postgresql'
gem 'devise' # Autenticación
gem 'prawn' # Generación de PDFs
gem 'turbo-rails' # UX instantánea
Arquitectura del Sistema
El sistema tiene 3 componentes principales:
1. Configurador Visual
- Interface web responsive donde introduces medidas del hueco
- Selector de acabados (blanco, negro TXT, plata)
- Preview en tiempo real de la configuración
2. Motor de Precios
- Algoritmos de cálculo basados en tablas técnicas del sistema
- Actualización de precios mediante interfaz admin
- Cálculo automático de componentes necesarios (guías, perfiles, accesorios)
3. Generador de PDFs
- Propuesta comercial profesional con logo
- Desglose técnico de componentes
- Términos y condiciones automáticos
- Generación en menos de 2 segundos
Implementación Destacada
Cálculo Dinámico de Componentes
class DOMOCalculator
def initialize(width, height, doors_count)
@width = width
@height = height
@doors = doors_count
end
def components
{
upper_guide: calculate_guide_length,
lower_guide: calculate_guide_length,
vertical_profiles: @doors * 2,
glass_area: calculate_glass_area,
rollers: @doors * 2,
stoppers: 2
}
end
private
def calculate_guide_length
# Guías necesitan 10cm extra por lado
(@width + 20).ceil
end
def calculate_glass_area
# Área de cristal con descuento de perfil (5cm por lado)
door_width = (@width / @doors) - 10
door_height = @height - 10
(door_width * door_height * @doors) / 10000.0 # m²
end
end
Sistema de Precios Versionado
Una de las claves fue versionar los precios para poder hacer seguimiento histórico:
class Price < ApplicationRecord
belongs_to :component
scope :current, -> { where(valid_until: nil).or(where('valid_until > ?', Date.today)) }
def self.for_component(component_id, date = Date.today)
where(component_id: component_id)
.where('valid_from <= ?', date)
.where('valid_until IS NULL OR valid_until > ?', date)
.first
end
end
Resultados
Métricas de Impacto
- ⏱️ Tiempo de cotización: De 15-20 min → < 5 min
- 📈 Productividad: +200% en capacidad de respuesta
- 💰 ROI: Sistema pagado en < 2 semanas
- ✅ Errores: Reducción del 100% en errores de cálculo
- 📊 Datos: Base de datos de todas las cotizaciones para análisis
Impacto en el Negocio
- Mayor capacidad de respuesta: Ahora se puede cotizar incluso por WhatsApp en tiempo real
- Profesionalización: PDFs branded que mejoran imagen de marca
- Análisis de datos: Qué productos se cotizan más y tasas de conversión
- Escalabilidad: Cualquier persona del equipo puede hacer cotizaciones
Lecciones Aprendidas
✅ Lo que funcionó bien
- Turbo para UX instantánea: El preview en tiempo real sin recargar página fue clave
- Prawn para PDFs: Mucho más potente que soluciones HTML-to-PDF
- Versionar precios: Poder revisar cotizaciones antiguas con precios de esa fecha es crítico
🔄 Lo que mejoraría
- Testing: Inciado sin tests unitarios, después se añadieron
- Validaciones: Algunas medidas imposibles se escapaban inicialmente
- Mobile-first: Diseñado para desktop, después adaptado a móvil (debió ser al revés)
Próximos Pasos
El éxito de este proyecto abrió las puertas a:
- Extender a otros productos: Vallas, puertas cancela
- Integración con ERP: Pasar cotizaciones aceptadas directamente a pedidos
- Portal de clientes: Que los clientes puedan auto-configurar y ver presupuestos
Conclusión
Este proyecto demuestra que no necesitas AI ni soluciones complejas para generar impacto real. Una aplicación web bien construida, con Rails y PostgreSQL, puede transformar un proceso de negocio crítico.
El mejor software es el que resuelve problemas reales de forma simple y elegante.
Tech Stack: Ruby on Rails 7.0, PostgreSQL, Turbo, Prawn, Devise
Tiempo de desarrollo: 3 semanas (part-time)
Líneas de código: ~2,000 LOC
Estado: En producción desde Diciembre 2025
¿Tienes un proceso manual en tu negocio que podría automatizarse? Hablemos.