Centraliza la base de clientes, la geolocaliza y arma las rutas de reparto con tráfico real — reemplazando planillas dispersas por un sistema único, privado y con memoria. Lo construí para RAOVET, la distribuidora donde trabajo, y se usa todos los días.
RAOVET es una distribuidora mayorista que le vende insumos a veterinarias y clínicas. Su información de clientes vivía repartida en tres fuentes que no se cruzaban entre sí: una agenda de contactos, una base comprada y el propio sistema de facturación. No había forma simple de responder preguntas básicas del día a día — ¿quién es un cliente activo?, ¿dónde está?, ¿a quién le toca reparto hoy y en qué orden conviene ir?
Antes de tocar código armé un pipeline de datos aparte para unificar más de 17.000 contactos de esas tres fuentes en una base curada de más de 400 clientes activos: deduplicación, normalización de teléfonos, segmentación por zona y por recencia de contacto. Ese trabajo fue el insumo; el CRM es lo que construí encima.
Un sistema privado (login propio, sin acceso público, no indexado) que centraliza esa base y la vuelve operable:
Esta es la parte que más se parece a un trabajo de analista, no solo de desarrollador:
Un mismo CUIT puede corresponder a varios clientes distintos — distintas veterinarias de un mismo hospital, o varias sucursales, cada una con su propio contacto. Asumir "un CUIT = un cliente" (el atajo obvio) hubiera fusionado registros que en la operación real son personas distintas. La deduplicación se diseñó respetando eso.
La planilla original traía dos columnas de WhatsApp por cliente y un campo de estado (ok / cambiar / no) que decía cuál de las dos confiar. La regla de negocio no se adivinó: se confirmó antes de escribir una sola línea de normalización, porque equivocarse ahí significa mandarle un mensaje al número viejo de un cliente real.
El alta pública la puede llenar cualquiera, y no todos tienen el CUIT a mano. En vez de forzar un solo formato, el campo deja elegir cuál se está cargando (con los guiones del CUIT puestos automáticamente al tipear) y por dentro normaliza los dos a una forma común, distinguible sin ambigüedad — sin duplicar la lógica de validación en dos caminos distintos.
Cuando alguien nuevo entra por el formulario público, si comparte CUIT, WhatsApp o nombre exacto con un cliente que ya existe, se avisa en su ficha antes de confirmarlo — nunca se fusiona solo, porque un duplicado real y dos clientes legítimos con el mismo CUIT pueden verse exactamente igual desde el dato.
El CRM gestiona hoy la identidad y la logística de cada cliente. El próximo hito es sumar el sistema de facturación de la empresa — cruzando por el CUIT ya normalizado, con la misma regla de nunca pisar una edición manual — para ver también cuánto compra cada cliente, cada cuánto, y si tiene saldo pendiente.
El repositorio es privado: el sistema gestiona datos reales de clientes, así que ni el código ni la base son públicos. Si te interesa ver más — capturas sin datos sensibles, el detalle de alguna decisión o el README completo — escribime y te lo muestro.
Puedo mostrarte el detalle de cualquier decisión de este caso, con capturas y sin datos sensibles.
Escribime por WhatsApp