Descubrimiento en la sala de ventas y modelo de amenazas
Entrevistas sobre el flujo del consultor en las tiendas piloto, diseño de consultas multicriterio, mapeo del acceso basado en roles, enfoque RGPD + CCPA y evaluación de la carga sobre 1C.
Caso de éxito · Retail · Moda
Caso de éxito SuperStep: cómo lanzamos una app de consultor de retail en producción —Swift nativo en iOS, Kotlin nativo en Android, respaldadas por un servicio en Symfony y un índice de ElasticSearch sincronizado con el inventario 1C de la cadena— para que los consultores de ventas de una red internacional de boutiques multimarca puedan encontrar cualquier SKU, en cualquier talla, en cualquier tienda, en segundos.
La cadena internacional de boutiques multimarca SuperStep llegó con un punto de fricción claro en la sala de ventas: un cliente pide a un consultor unas zapatillas concretas, en una talla concreta, y el consultor tiene que sacar una carpeta de tapa dura con las listas de las tiendas asociadas, ir a la trastienda a llamar por teléfono a otra tienda o preguntar a un compañero que quizá lo recuerde. Las comprobaciones manuales de existencias ralentizaban la atención al cliente en toda la red y producían errores de asesoramiento que perjudicaban la conversión. El inventario existente funcionaba sobre 1C, un sistema de registro sólido pero sin una superficie de búsqueda en tiempo real para el consumidor. El reto del producto era dar a cada consultor una superficie de mano que devolviera cualquier SKU, en cualquier talla, en cualquier tienda, en segundos, y hacerlo sin obligar a 1C a asumir una carga de consultas para la que no fue diseñado. Construimos clientes nativos en Swift y Kotlin para la sala de ventas, respaldados por un servicio en Symfony que se encarga de la superficie de búsqueda, con ElasticSearch como índice y un adaptador de streaming frente a 1C para que el índice nunca se desajuste. El MVP se está probando con el personal en tiendas reales de las regiones piloto de EE. UU. y la UE, con un módulo de remanentes de almacén en la hoja de ruta.
Un resumen de lo que aportó el desarrollo de SuperStep en iOS, Android, el backend en Symfony y una integración de streaming con 1C durante su primer ciclo de producción.

La decisión de plataforma pesó más que cualquier otra palanca del desarrollo. Elegimos iOS y Android nativos frente a Flutter y a un complemento de TPV solo web porque las contrapartidas encajaban con un consultor de sala de ventas que está junto a un cliente con un plazo ajustado. Los clientes nativos ganan en tres dimensiones que son las que más importan: la latencia de búsqueda en los dispositivos más antiguos que realmente llevan la mayoría de las tiendas, un comportamiento offline predecible cuando se cae el wifi de la tienda a mitad de turno, y la cadencia de despliegue que el equipo de TI del minorista puede sostener en cientos de dispositivos de una cadena de boutiques multimarca. Flutter es una opción sólida para muchos productos, pero añade una capa de motor entre el resultado de búsqueda y la pantalla, que un consultor percibe como fricción en el momento que importa.
Descartamos un complemento de TPV solo web por otra razón: vincula la productividad del consultor a la fiabilidad de la red dentro de la tienda, que era exactamente el modo de fallo que nos contrataron para eliminar. Optar por lo nativo más un índice de ElasticSearch significó que toda la superficie de búsqueda —consultas compuestas por marca, talla, tienda y región— es un único viaje de ida y vuelta entre el dispositivo y el índice, y el adaptador de 1C mantiene el índice fiable casi en tiempo real sin obligar a la sala de ventas a consultar directamente el sistema de registro. El motor de consultas entre tiendas se convierte en un filtro y no en una cadena de viajes de ida y vuelta.
| Criterio | Nativo + ElasticSearch (SuperStep) | Flutter MVP | Complemento de TPV solo web |
|---|---|---|---|
| Latencia de búsqueda en los dispositivos de la tienda | Renderizado nativo directo, sin capa de motor | La capa de motor añade fotogramas en hardware antiguo | Viaje de ida y vuelta por la red más análisis en el navegador |
| Fiabilidad de la integración con 1C | Adaptador de streaming: índice siempre sincronizado | Mismo adaptador posible: agnóstico | Mismo adaptador posible: agnóstico |
| Comportamiento offline ante una caída del wifi de la tienda | Los resultados de consultas en caché sobreviven a las desconexiones | Los resultados de consultas en caché sobreviven a las desconexiones | Se queda en blanco si falla la red |
| Cadencia de despliegue en cientos de dispositivos | Actualizaciones de la app gestionadas por MDM | Actualizaciones de la app gestionadas por MDM | Problemas de invalidación de la caché del navegador |
| UX de filtros multicriterio | Selectores nativos por plataforma | Widgets multiplataforma, con menos sensación nativa | Ergonomía de formulario de navegador |
| Consulta de disponibilidad entre tiendas | Una única consulta compuesta de ElasticSearch | Mismo backend, misma consulta | Mismo backend, misma consulta |
| Dependencia de proveedor / SDK | SDK de las plataformas, con soporte a largo plazo | Motor de Flutter, con soporte del proveedor | Motor del navegador, fragmentado |
Referencias: documentación de referencia de ElasticSearch, documentación del framework Symfony, documentación de Swift de Apple.

El cliente de iOS está construido en Swift con un núcleo de UIKit y SwiftUI para las superficies de búsqueda más recientes. La pantalla de inicio se reduce a un gran campo de búsqueda y una tira de consultas recientes, porque un consultor suele volver a las mismas pocas consultas de marca y talla a lo largo de un turno. Los selectores de filtro son nativos: la marca usa un selector de rueda, la talla un teclado numérico con chips de selección rápida, y la tienda y la región son listas con búsqueda limitadas al rol del consultor. La consulta se lanza en cuanto el consultor pulsa «buscar», y la lista de resultados se pagina por tienda, con la disponibilidad entre tiendas mostrada como un chip en cada tarjeta de SKU.
La caché local mantiene ágiles las consultas recientes ante un corte breve del wifi: un consultor que busca el mismo SKU dos veces en una ventana de cinco minutos obtiene el segundo resultado al instante mientras la red se reconecta, y un chip de dato obsoleto aparece en cuanto el índice tiene datos más recientes para que el consultor sepa que debe actualizar antes de dar un precio al cliente. El inicio de sesión de empleados con número de teléfono elimina la carga de rotar contraseñas de estaciones de trabajo compartidas con la que antes lidiaba la cadena, y el acceso basado en roles controla qué tiendas puede consultar un consultor. Toda la superficie de iOS se entrega como parte de nuestra práctica de desarrollo de apps móviles.
El cliente de Android está escrito en Kotlin con Jetpack Compose para las superficies de búsqueda más recientes y una columna vertebral estable de RecyclerView para la lista de resultados, donde importa el rendimiento vertical. La UX de filtros replica la de iOS punto por punto —rueda de marcas, teclado de tallas, listas de tiendas y regiones— adaptada a los modismos de Material 3, de modo que un consultor que pasa de un dispositivo iOS a uno Android en el mismo turno nunca tiene que reaprender el flujo. WorkManager se encarga de la actualización periódica de la instantánea del catálogo de la tienda de origen del consultor, de la lista de tiendas por rol y del módulo de remanentes de almacén, que muestra las existencias que están en los almacenes centrales y no en ninguna tienda.
El módulo de remanentes de almacén está en la hoja de ruta activa y se ha estructurado para que una consulta ya devuelva «ninguna tienda tiene esto, el almacén central tiene 12» en lugar de terminar en un callejón sin salida de «agotado». El mismo índice de ElasticSearch cubre las existencias del almacén como una tienda virtual con una anotación explícita del plazo de entrega, de modo que el consultor pueda dar al cliente una respuesta honesta —«puedo tenerlo en su talla en esta tienda para el martes»— en lugar de descubrir el almacén solo cuando el cliente ya se ha ido. El mismo equipo de ingeniería lleva iOS y Android en paralelo como parte de nuestra práctica de ingeniería para iOS y Android.

La integración con 1C es el corazón arquitectónico del desarrollo. 1C es un sistema de registro sólido para el inventario de la cadena, pero nunca se diseñó para atender una carga de búsqueda en tiempo real de consumidor con la concurrencia de una sala de ventas. El backend en Symfony se sitúa entre 1C y la sala de ventas: un adaptador de streaming consume los eventos de cambio de existencias de 1C y los proyecta en un índice desnormalizado de ElasticSearch en el que SKU, tienda, talla, color, marca y temporada viven en un documento por unidad de existencias. El índice es lo único que consultan las apps de los consultores; 1C nunca ve directamente una petición de la sala de ventas. El acceso basado en roles controla qué tiendas puede consultar un consultor, y un chip de dato obsoleto en el dispositivo indica con honestidad al consultor cuándo el índice lleva más de unos segundos de retraso respecto a 1C.
La privacidad de los empleados está integrada en la plataforma desde el primer día. El inicio de sesión con número de teléfono muestra una pantalla granular de consentimiento del RGPD para los consultores de la Unión Europea y un aviso de la CCPA / CPRA para los consultores de California en el mismo flujo. El historial de búsquedas tiene una retención acotada, más corta que la de los registros de asignación de roles; el acceso basado en roles controla qué consultor puede consultar qué tienda; y una solicitud de supresión —por ejemplo, de un empleado que deja la red— es un único trabajo de backend que se propaga por el registro de usuario y las asignaciones de rol. El resultado es una app de consultor que resiste el escrutinio en EE. UU. y la UE sin tener que reformar el cumplimiento más adelante.
Enfoque de cumplimiento: alineado con el RGPD · preparado para ISO 27001 · SOC 2 Type II en curso · apto para HIPAA · CCPA contemplada.
Un desarrollo en cinco fases que llevó a SuperStep desde un punto de fricción en la sala de ventas hasta una app nativa de consultor en producción en iOS y Android.
Entrevistas sobre el flujo del consultor en las tiendas piloto, diseño de consultas multicriterio, mapeo del acceso basado en roles, enfoque RGPD + CCPA y evaluación de la carga sobre 1C.
Esqueleto del backend en Symfony, diseño del índice de ElasticSearch, adaptador de streaming con 1C, esquema de documento de SKU desnormalizado, acceso basado en roles y motor de consultas entre tiendas.
Cliente nativo de iOS en Swift con UIKit + SwiftUI; cliente nativo de Android en Kotlin con Compose + RecyclerView; inicio de sesión de empleados con número de teléfono, filtros multicriterio y lista de resultados entre tiendas.
Aplicación del acceso basado en roles, políticas de retención del historial de búsquedas, indicadores de datos obsoletos, fiabilidad de los webhooks de 1C y base para la evaluación de preparación por un tercero.
Despliegue en tiendas piloto de las regiones de EE. UU. y la UE, despliegue de dispositivos gestionado por MDM, incorporación de los consultores, primer ciclo de correcciones y hoja de ruta del módulo de remanentes de almacén.
La capa de analítica de búsquedas de SuperStep se creó para que el equipo de merchandising de la cadena vea qué SKU se buscan y no se encuentran en la red. El flujo de consultas se consolida en un panel del backend que muestra informes de «demandado pero ausente» por tienda, por región y por marca: señales accionables para el siguiente ciclo de asignación. La base de conocimiento dentro de la app del consultor contiene notas de cuidado de producto, materiales de formación de marca y posicionamiento de temporada que la cadena antes distribuía mediante cadenas de correos y PDF; el mismo backend en Symfony da servicio al índice de búsqueda y a la base de conocimiento, así que un consultor puede pasar de una consulta de existencias a una respuesta de cuidado sin salir de la pantalla. Las recomendaciones entre marcas están en la hoja de ruta: el mismo índice de ElasticSearch ya conoce las correlaciones de marca, temporada y talla, de modo que sugerir «la zapatilla de running de esta marca en su talla en la siguiente tienda» cuando el SKU solicitado no está disponible es una reescritura de consulta y no un sistema nuevo. Todo el subsistema está diseñado para que una futura capa de niveles de fidelización, un nivel de precios por contrato B2B para Estados Unidos y la Unión Europea o un canal de socios mayoristas sea un cambio de configuración del índice y del servicio de derechos de acceso, y no una publicación de código.
SuperStep se lanzó en Apple App Store y Google Play con tiendas activas en Estados Unidos y la Unión Europea: versiones de distribución interna para los consultores en los dispositivos de la cadena gestionados por MDM, además de versiones de publicación abierta para el despliegue en tiendas asociadas allí donde lo permite la política de la cadena. La versión en inglés da servicio a consultores de California, Nueva York, Texas, Florida y Washington en EE. UU., y de Países Bajos, Alemania, Francia, Irlanda y Suecia en la UE, sin una base de código distinta por región. Los flujos de consentimiento tienen en cuenta la región en la capa del cliente: los consultores de la UE y del EEE reciben una pantalla de consentimiento granular al estilo del RGPD, con interruptores independientes para la analítica de producto; los consultores de California reciben, en el mismo flujo, un aviso al estilo de la CCPA: «No vender ni compartir mi información personal». Las prácticas de tratamiento de datos están alineadas con el RGPD para los empleados europeos y con el mosaico de leyes estatales de privacidad de EE. UU.: CCPA / CPRA (California), VCDPA (Virginia), CPA (Colorado), CTDPA (Connecticut), UCPA (Utah), TDPSA (Texas) y Oregon CPA. Como la plataforma almacena pocos datos personales y el historial de búsquedas tiene una retención acotada, el cumplimiento regional se reduce a una divulgación honesta y no a una segregación de datos por jurisdicción.
Las apps de los consultores se desplegaron en paralelo en tiendas piloto de EE. UU. y la UE —Países Bajos, Alemania, Francia, Suecia e Irlanda para la cobertura de la UE; las regiones piloto del este y el oeste de EE. UU. para Norteamérica—, con las tiendas de cada región aprovisionadas de forma idéntica contra el mismo backend en Symfony. El clúster de ElasticSearch ejecuta workers de consulta sin estado que pueden fijarse de forma independiente a la UE o a EE. UU. para futuros compromisos de residencia de datos. El equipo de ingeniería responsable del desarrollo trabaja en CET y mantiene una jornada CET con solapamiento con la costa este de EE. UU. (9:00–13:00 ET) para las reuniones diarias del lado del minorista, la coordinación con los equipos de tienda y la respuesta a incidencias: la franja horaria que permite a un equipo de merchandising estadounidense y a un equipo de ingeniería europeo compartir cuatro horas de solapamiento en directo cada día.
La hoja de ruta activa de desarrollo de software a medida de SuperStep incluye el módulo de remanentes de almacén, que muestra las existencias del almacén central como una tienda virtual con plazo de entrega explícito; una capa de recomendaciones entre marcas que reutiliza el mismo índice de ElasticSearch; un canal de socios mayoristas con límites de rol propios; y una superficie de reservas de cara al cliente que permite a un consultor reservar un SKU en una tienda concreta para un cliente que vuelve. Está prevista un panel de rendimiento de consultores con telemetría de conversión, y el subsistema de derechos de acceso ya está estructurado para la asignación multipuesto. Los planes de infraestructura incluyen un ajuste adicional del índice de ElasticSearch, un arnés interno de regresión del adaptador de 1C y una futura evaluación de preparación independiente integrada en la hoja de ruta de cloud y DevOps.
Si está planificando una app de consultor de retail, un complemento de TPV o cualquier producto de inventario entre tiendas en el que un vendedor de sala deba encontrar cualquier SKU en cualquier tienda en segundos para públicos de EE. UU. y la UE, hemos entregado este stack de principio a fin y podemos acortar de forma notable el calendario del desarrollo. El equipo de ingeniería responsable trabaja dentro de YuSMP Group, y la superficie del producto en producción sigue siendo privada a petición del minorista. Trabajamos a precio cerrado para MVP bien delimitados y con equipos de desarrollo dedicados para la entrega continua, con jornada CET y una ventana garantizada de solapamiento con la costa este de EE. UU. (9:00–13:00 ET) para reuniones diarias, demos y respuesta a incidencias.
Un MVP de consultor de retail con apps nativas de iOS y Android, un backend en Symfony, búsqueda de productos con ElasticSearch, inicio de sesión de empleados con número de teléfono y un catálogo de una sola tienda suele costar entre $140k y $280k. Añadir la consulta de existencias en varias tiendas de toda una red de boutiques, filtros por marca, talla y región, un módulo de remanentes de almacén, una integración profunda con el inventario de 1C y una exportación a BI lleva un producto completo a $300k–$620k. Los principales factores de coste son el diseño del índice de ElasticSearch, el adaptador de integración con 1C y el motor de consultas entre tiendas.
iOS y Android nativos ganan en tres dimensiones que importan en una app de sala de ventas: la latencia de búsqueda en los dispositivos más antiguos de las tiendas, un comportamiento offline predecible cuando se cae el wifi de la tienda y la cadencia de despliegue que el equipo de TI del minorista puede sostener de verdad en cientos de dispositivos. Flutter es una opción sólida para muchos productos, pero añade una capa de motor entre los resultados de búsqueda y la pantalla, que un consultor junto a un cliente percibe como fricción. Un complemento de TPV solo web vincula la productividad a la fiabilidad de la red dentro de la tienda, que es exactamente el modo de fallo que la app se construyó para eliminar.
El backend en Symfony indexa en ElasticSearch cada SKU, tienda, talla, color, marca y temporada con recuentos de existencias desnormalizados por tienda. Una consulta de un consultor —marca A, talla 42, con existencias en esta tienda o en las dos siguientes— es una única consulta compuesta de ElasticSearch que devuelve los SKU coincidentes y las tiendas que los tienen con sus existencias actuales. El adaptador de 1C mantiene el índice fiable enviando los cambios de existencias casi en tiempo real. La disponibilidad entre tiendas es un filtro y no una llamada de API aparte, de modo que el resultado cabe en una pantalla y no en una cadena de viajes de ida y vuelta.
Una app de consultor de retail guarda números de teléfono de empleados, asignaciones de roles e historial de búsquedas: datos menos sensibles que los de clientes, pero que aun así entran en el ámbito de aplicación. El inicio de sesión de empleados muestra una pantalla granular de consentimiento del RGPD para los usuarios de la Unión Europea y un aviso de la CCPA / CPRA para los usuarios de California en el mismo flujo. El acceso basado en roles controla qué consultor puede consultar qué tienda, el historial de búsquedas tiene una retención acotada y una solicitud de supresión —por ejemplo, de un empleado que deja la red— es un único trabajo de backend sobre el registro de usuario y las asignaciones de rol.
Un MVP centrado en apps nativas en Swift y Kotlin, un backend en Symfony, búsqueda de productos con ElasticSearch, inicio de sesión de empleados con número de teléfono y un catálogo de una sola tienda suele tardar entre 14 y 20 semanas. Añadir la consulta de existencias en varias tiendas de toda una red de boutiques, filtros por marca, talla y región, un módulo de remanentes de almacén y una integración profunda con el inventario de 1C suma entre 6 y 10 semanas. La fase de refuerzo para auditoría —acceso basado en roles, políticas de retención, fiabilidad de los webhooks de 1C y coherencia del índice de existencias— suele subestimarse y conviene presupuestarla en 3–5 semanas.
Casos relacionados

Marketplace de autopiezas con CRM para vendedores: búsqueda por VIN, inventario multiubicación y entrega integrada.
Ver el caso →
App móvil de marketplace local para una cadena física de artículos infantiles: catálogo flexible y sincronización de stock online.
Ver el caso →
App de cliente, app de recogida de pedidos y panel de administración para una cadena regional de alimentación.
Ver el caso →Cuéntenos algunos detalles y un consultor sénior le responderá en un día hábil.