Sistema CPQ: De 35 minutos a 10 minutos por cotización

Cómo un configurador de precios en Rails revolucionó el proceso de ventas de un instalador de aluminio, ahorrando minutos por cada cotización de puertas correderas de interiorismo.

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:

  1. Consultar catálogos físicos para encontrar los componentes
  2. Calcular medidas manualmente según el hueco del cliente
  3. Buscar precios en múltiples listas actualizadas
  4. Sumar todo en una calculadora o Excel
  5. 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

  1. Mayor capacidad de respuesta: Ahora se puede cotizar incluso por WhatsApp en tiempo real
  2. Profesionalización: PDFs branded que mejoran imagen de marca
  3. Análisis de datos: Qué productos se cotizan más y tasas de conversión
  4. 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:

  1. Extender a otros productos: Vallas, puertas cancela
  2. Integración con ERP: Pasar cotizaciones aceptadas directamente a pedidos
  3. 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.