SIM B2B Platform
CRM de activación de SIM para una red de distribuidores, donde cada ICC tiene un dueño y cada rol ve solo su rama.
Vender SIM al por mayor no es vender: es sostener una cadena. El mayorista reparte el stock entre sus distribuidores, y cada distribuidor tiene su propia cartera de clientes. Todos operan sobre el mismo catálogo y ninguno debe ver el negocio del de al lado.
La activación de la línea ocurre fuera, contra el sistema del operador. Así que lo que había que construir no era un activador de SIM: era el sistema que decide de quién es cada tarjeta y quién tiene derecho a verla.
Veinte dígitos que existen en el mundo físico antes de existir en la base de datos
El reto
El ICC llega del mundo físico, no del formulario. Una SIM es una tarjeta que ya está impresa, que ya se ha repartido y que puede haber pasado por otras manos antes de llegar al formulario de activación. El sistema recibe un número que no ha generado él y tiene que decidir si es legítimo: formato correcto —prefijo
34y 17 dígitos—, no consumido antes, y no perteneciente a otro mayorista. Esa última comprobación es la que separa una plataforma de una hoja de cálculo con formulario.Un ICC mal validado no da un error de validación: da una activación fallida. El coste no se paga en la pantalla, se paga contra el operador y en una tarjeta que ya nadie sabe de quién era.
La visibilidad es jerárquica, no un permiso. Un distribuidor ve las líneas de sus clientes y solo esas; un cliente ve las suyas; administración lo ve todo. Dos distribuidores sobre la misma base de datos son competidores directos, y una fuga aquí es una fuga de cartera.
El sistema externo falla, y el silencio es peor que el error. Cuando una activación no sale, el revendedor tiene al cliente delante. Ocultar el fallo para no "ensuciar" la interfaz convierte cada incidencia en una llamada.
El dato no es de ahora y no hay que fingir que lo es. La ficha de línea muestra información sincronizada, no en vivo. Decir "updated every 1 hour" cuando no se puede sostener es peor que dar la fecha real del último refresco.
Encontrar una línea entre miles. Sin ordenación, filtro ni exportación, el CRM deja de usarse y el operativo vuelve al Excel del que venía.
La solución
— Tres roles que son tres alcances de datos
Administrador general, distribuidor y cliente. El rol no cambia los botones que se ven: cambia el conjunto de líneas que existe para esa sesión. El distribuidor accede a las líneas de sus propios clientes —nunca a las de otro distribuidor ni a las de los clientes de otro—, y el cliente solo a las suyas.
El aislamiento se resuelve en la capa de acceso a datos, no pantalla por pantalla. Es la única forma de que una vista nueva no abra un agujero.
— El ICC como frontera del sistema
Validación de formato en la entrada y verificación contra base de datos para descartar que el ICC pertenezca a otro mayorista, antes de intentar nada contra el operador.
Cuando el ICC ya está consumido, el sistema lo dice con esas palabras: "This ICC is already been used". No es una sutileza de copy: taken sugiere que alguien lo ha reservado y que quizá se libere; used cierra la conversación y evita el ticket de soporte que viene detrás.
— Importación masiva de líneas
Carga de lotes completos desde fichero, con la misma batería de validaciones que el alta individual. Las tarjetas llegan en cajas de cientos: el sistema tenía que aceptarlas igual.
— El error de activación, a la vista
Cualquier fallo devuelto por el sistema de activación se muestra en la ficha de la línea, junto a la línea que lo ha provocado. El revendedor ve qué ha pasado en el mismo sitio donde lo va a tener que explicar.
Y el Last update muestra la fecha real de la última sincronización, sin promesas de frescura que el sistema no puede cumplir.
— Extensión solo sobre líneas vivas
La ampliación de una SIM exige que el ICC esté en estado activo. Extender una línea que no lo está es una operación que el operador va a rechazar de todas formas: mejor detenerla en el sistema que descubrirlo después.
— El listado como herramienta de trabajo
Búsqueda por ICC y por número de teléfono —los dos identificadores que el revendedor tiene a mano cuando le llama su cliente—, filtro por rango de fechas de activación, por cliente y por estado, ordenación por cualquier columna y exportación a Excel del resultado filtrado.
Ese último punto es el que decide si un CRM se usa: mientras no puedas sacar tus propios datos, el Excel paralelo sigue vivo.
— Soporte dentro del producto
Formulario de contacto con el centro de ayuda desde la propia plataforma, para que la incidencia se abra donde se detecta y no en un hilo de correo.
Stack
Backend: Ruby on Rails
Autenticación: Devise
Roles: administrador general / distribuidor / cliente, con implementación propia
Integraciones: sistema de activación del operador y exportación a Excel
Base de datos: PostgreSQL
Jobs / colas: Sidekiq / Redis
Idiomas del producto: inglés y chino simplificado
Galería
¿Un proyecto parecido en mente?
Hablemos