Découverte sol de vente & modèle de menaces
Entretiens sur le flux conseiller dans les magasins pilotes, conception de requêtes multi-critères, cartographie de l'accès par rôle, posture RGPD + CCPA, évaluation de la charge 1C.
Étude de cas · Commerce de détail · Mode
Comment nous avons livré une application conseiller retail en production — Swift natif sur iOS, Kotlin natif sur Android, soutenu par un service Symfony et un index ElasticSearch synchronisé avec l'inventaire 1C de la chaîne — afin que les conseillers de vente d'un réseau de boutiques multi-marques international puissent trouver n'importe quel SKU, dans n'importe quelle taille, dans n'importe quel magasin, en quelques secondes.
La chaîne internationale de boutiques multi-marques SuperStep est arrivée avec un point de friction clair sur le sol de vente : un client demande à un conseiller une sneaker spécifique dans une taille précise, et le conseiller doit soit consulter un classeur de répertoires de magasins partenaires, soit se rendre en arrière-boutique pour appeler un autre magasin, soit interroger un collègue qui se souvient peut-être. Les vérifications manuelles des stocks ralentissaient le service client à travers tout le réseau et produisaient des erreurs de conseil qui nuisaient à la conversion. L'inventaire existant fonctionnait sur 1C, un système d'enregistrement robuste mais sans surface de recherche consommateur en temps réel. Le brief produit consistait à donner à chaque conseiller une surface portative retournant n'importe quel SKU, dans n'importe quelle taille, dans n'importe quel magasin, en quelques secondes — et à le faire sans forcer 1C à exposer une charge de requêtes pour laquelle il n'a pas été conçu. Nous avons développé des clients natifs Swift et Kotlin pour le sol de vente, adossés à un service Symfony qui possède la surface de recherche, avec ElasticSearch comme index et un adaptateur de streaming contre 1C afin que l'index ne dérive jamais. Le MVP est en cours de test avec le personnel dans de vrais magasins à travers les régions pilotes américaines et européennes, avec un module de reliquats d'entrepôt en feuille de route.
Un aperçu de ce que le développement SuperStep a permis de réaliser sur iOS, Android, le backend Symfony et une intégration 1C en streaming au cours de son premier cycle de production.

La décision de plateforme a dominé tous les autres leviers dans ce projet. Nous avons choisi iOS et Android natifs plutôt que Flutter et un companion POS web uniquement car les compromis s'alignaient avec un conseiller sur le sol de vente se tenant à côté d'un client sous une contrainte de temps stricte. Les clients natifs gagnent sur trois dimensions qui importent le plus : la latence de recherche sur les appareils plus anciens que la plupart des magasins utilisent réellement, le comportement hors ligne prévisible lorsque le Wi-Fi du magasin tombe en milieu de service, et le rythme de déploiement que l'équipe informatique du détaillant peut maintenir sur des centaines d'appareils dans une chaîne de boutiques multi-marques. Flutter est un excellent choix pour de nombreux produits mais ajoute une couche moteur entre le résultat de recherche et l'écran, que le conseiller ressent comme une friction au moment où cela importe.
Un companion POS web uniquement a été éliminé pour une raison différente — il lie la productivité du conseiller à la fiabilité du réseau à l'intérieur du magasin, ce qui était précisément le mode de défaillance pour lequel nous avons été engagés. Opter pour du natif plus un index ElasticSearch signifiait que toute la surface de recherche — requêtes composites à travers marque, taille, magasin, région — est un seul aller-retour de l'appareil à l'index, et l'adaptateur 1C maintient l'index honnête en quasi-temps réel sans forcer le sol de vente à interroger directement le système d'enregistrement. Le moteur de requêtes inter-magasins devient un filtre, pas une chaîne d'allers-retours.
| Dimension | Natif + ElasticSearch (SuperStep) | MVP Flutter | Companion POS web uniquement |
|---|---|---|---|
| Latence de recherche sur les appareils du magasin | Rendu natif direct — pas de couche moteur | La couche moteur ajoute des frames sur les vieux matériels | Aller-retour réseau plus parsing navigateur |
| Fiabilité de l'intégration 1C | Adaptateur streaming — index toujours synchronisé | Même adaptateur possible — agnostique | Même adaptateur possible — agnostique |
| Comportement hors ligne lors de coupure Wi-Fi | Les résultats de requêtes mis en cache survivent aux déconnexions | Les résultats de requêtes mis en cache survivent aux déconnexions | Écran vide en cas de défaillance réseau |
| Rythme de déploiement sur des centaines d'appareils | Mises à jour applicatives gérées par MDM | Mises à jour applicatives gérées par MDM | Difficultés d'invalidation du cache navigateur |
| UX de filtre multi-critères | Sélecteurs natifs par plateforme | Widgets multiplateformes, moins natif | Ergonomie de formulaire navigateur |
| Requête de disponibilité inter-magasins | Une seule requête ElasticSearch composite | Même backend — même requête | Même backend — même requête |
| Dépendance fournisseur / SDK | SDKs plateforme — support à long terme | Moteur Flutter — supporté par fournisseur | Moteur navigateur — fragmenté |
Références : Documentation de référence ElasticSearch, Documentation du framework Symfony, Documentation Swift d'Apple.

Le client iOS est développé en Swift avec un noyau UIKit et SwiftUI pour les nouvelles surfaces de recherche. L'écran d'accueil se réduit à un grand champ de recherche unique et une bande de requêtes récentes, car un conseiller revient généralement aux mêmes quelques requêtes de marque et taille tout au long d'un service. Les sélecteurs de filtres sont natifs : la marque utilise un sélecteur rotatif, la taille est un pavé numérique avec des puces de sélection rapide, et le magasin et la région sont des listes consultables limitées au rôle du conseiller. Une requête s'exécute dès que le conseiller appuie sur « rechercher », et la liste de résultats pagine par magasin avec la disponibilité inter-magasins affichée sous forme de puce sur chaque carte SKU.
La mise en cache locale maintient les requêtes récentes réactives lors d'une coupure Wi-Fi — un conseiller cherchant le même SKU deux fois en cinq minutes obtient le second résultat instantanément pendant que le réseau se reconnecte, et une puce d'indicateur de données périmées apparaît dès que l'index dispose de données plus fraîches, informant le conseiller de rafraîchir avant de donner un prix au client. La connexion employé par numéro de téléphone supprime la contrainte de rotation des mots de passe de poste partagé avec laquelle la chaîne se battait auparavant, et l'accès par rôle contrôle quels magasins un conseiller peut consulter. La surface iOS complète est livrée dans le cadre de notre pratique de développement d'applications mobiles.
Le client Android est écrit en Kotlin avec Jetpack Compose pour les nouvelles surfaces de recherche et un RecyclerView stable pour la liste de résultats où les performances verticales importent. L'UX des filtres est identique à iOS — roue de marque, pavé de taille, listes de magasins et de régions — adapté aux idiomes Material 3 afin qu'un conseiller passant d'un appareil iOS à un appareil Android au cours du même service n'ait jamais à réapprendre le flux. WorkManager gère l'actualisation périodique de l'instantané du catalogue du magasin d'origine du conseiller, la liste de magasins par rôle et le module de reliquats d'entrepôt qui expose les stocks dans les entrepôts centraux plutôt que dans un quelconque magasin.
Le module de reliquats d'entrepôt est sur la feuille de route active et est structuré afin qu'une requête retourne déjà « aucun magasin n'a cet article, l'entrepôt central en a 12 » plutôt que de se terminer par une réponse « rupture de stock ». Le même index ElasticSearch couvre le stock d'entrepôt comme un magasin virtuel avec une annotation de délai d'approvisionnement explicite, de sorte que le conseiller peut informer honnêtement le client — « Je peux avoir votre taille dans ce magasin d'ici mardi » — plutôt que de découvrir le stock d'entrepôt uniquement lorsque le client est déjà parti. La même équipe d'ingénierie gère iOS et Android en synchronisation dans le cadre de notre pratique d'ingénierie iOS et Android.

L'intégration 1C est le cœur architectural du projet. 1C est un système d'enregistrement robuste pour l'inventaire de la chaîne mais n'a jamais été conçu pour servir une charge de recherche consommateur en temps réel à la concurrence du sol de vente. Le backend Symfony se place entre 1C et le sol de vente : un adaptateur de streaming consomme les événements de changement de stock de 1C et les projette dans un index ElasticSearch dénormalisé où SKU, magasin, taille, couleur, marque et saison vivent dans un seul document par unité de stock. L'index est la seule chose que les applications conseillers interrogent ; 1C ne reçoit jamais de requête directe du sol de vente. L'accès par rôle contrôle quels magasins un conseiller peut lire, et une puce d'indicateur de données périmées sur l'appareil informe honnêtement le conseiller lorsque l'index a plus de quelques secondes de retard sur 1C.
La confidentialité des employés est intégrée dans la plateforme dès le premier jour. La connexion par numéro de téléphone expose un écran de consentement granulaire RGPD pour les conseillers dans l'Union européenne et une divulgation CCPA / CPRA pour les conseillers en Californie dans le même flux. L'historique de recherche est limité dans le temps avec une rétention plus courte que les enregistrements d'attribution de rôle, l'accès par rôle contrôle quel conseiller peut lire quel magasin, et une demande de suppression — pour un employé qui quitte le réseau — est un seul job backend qui se propage à travers l'enregistrement utilisateur et les attributions de rôle. Le résultat est une application conseiller qui résiste à un examen aux États-Unis et dans l'UE sans avoir à adapter la conformité ultérieurement.
Posture de conformité : RGPD aligné · ISO 27001 prêt · SOC 2 Type II en cours · compatible HIPAA · CCPA pris en compte.
Un développement en cinq phases ayant conduit SuperStep d'un point de friction sur le sol de vente à une application conseiller native livrée sur iOS et Android.
Entretiens sur le flux conseiller dans les magasins pilotes, conception de requêtes multi-critères, cartographie de l'accès par rôle, posture RGPD + CCPA, évaluation de la charge 1C.
Squelette backend Symfony, conception de l'index ElasticSearch, adaptateur streaming 1C, schéma de document SKU dénormalisé, accès par rôle, moteur de requêtes inter-magasins.
Client iOS natif Swift sur UIKit + SwiftUI ; client Android natif Kotlin sur Compose + RecyclerView ; connexion employé par numéro de téléphone, filtres multi-critères, liste de résultats inter-magasins.
Application de l'accès par rôle, politiques de rétention pour l'historique de recherche, indicateurs de données périmées, fiabilité des webhooks 1C, mise en place du cadre d'évaluation de conformité.
Déploiement dans les magasins pilotes américains et européens, déploiement d'appareils géré par MDM, onboarding des conseillers, boucle de correction du premier cycle, feuille de route du module reliquats d'entrepôt.
La couche d'analyse de recherche de SuperStep a été conçue pour que l'équipe merchandising de la chaîne puisse voir quels SKU sont recherchés sans être trouvés sur l'ensemble du réseau. Le flux de requêtes se consolide dans un tableau de bord backend qui fait remonter des rapports « demandé mais absent » par magasin, par région, par marque — des signaux exploitables pour le prochain cycle d'allocation. L'espace base de connaissances de l'application conseiller regroupe les notes d'entretien produit, les supports de formation des marques et le positionnement saisonnier que la chaîne diffusait auparavant par chaînes d'e-mails et PDF ; le même backend Symfony sert à la fois l'index de recherche et la base de connaissances, de sorte qu'un conseiller peut passer d'une recherche de stock à une réponse d'entretien sans quitter l'écran. Les recommandations inter-marques sont au programme : le même index ElasticSearch connaît déjà les corrélations de marque, de saison et de taille, si bien que suggérer « le modèle running de cette marque dans votre taille au magasin voisin » lorsque le SKU demandé est indisponible relève d'une réécriture de requête plutôt que d'un nouveau système. L'ensemble du sous-système est conçu pour qu'une future couche de niveaux de fidélité, un palier tarifaire contractuel B2B pour les États-Unis et l'Union européenne, ou un canal de partenaires grossistes relève d'un changement de configuration de l'index et du service de droits, et non d'une livraison de code.
SuperStep a été lancé sur l'App Store d'Apple et Google Play avec des vitrines actives aux États-Unis et dans l'Union européenne — des builds en distribution interne pour les conseillers sur les appareils MDM de la chaîne, plus des builds à listing public pour le déploiement dans les magasins partenaires là où la politique de la chaîne le permet. La version en langue anglaise sert des conseillers en Californie, New York, Texas, Floride et Washington aux États-Unis, et des conseillers aux Pays-Bas, en Allemagne, en France, en Irlande et en Suède dans l'UE, sans base de code séparée par région. Les flux de consentement sont sensibles à la région au niveau client : les conseillers dans l'UE et l'EEE reçoivent un écran de consentement granulaire de type RGPD avec des boutons séparés pour les produits analytiques ; les conseillers en Californie reçoivent une divulgation de type CCPA « Ne pas vendre ou partager mes informations personnelles » dans le même flux. Les pratiques de traitement des données sont alignées sur le RGPD pour les employés européens et sur le patchwork de confidentialité des États américains — CCPA / CPRA (Californie), VCDPA (Virginie), CPA (Colorado), CTDPA (Connecticut), UCPA (Utah), TDPSA (Texas) et CPA de l'Oregon. Comme la plateforme stocke un minimum de données personnelles et que l'historique de recherche est limité dans le temps, la conformité régionale se réduit à une divulgation honnête plutôt qu'à une ségrégation des données par juridiction.
Les applications conseillers ont été déployées dans les magasins pilotes américains et européens en parallèle — Pays-Bas, Allemagne, France, Suède et Irlande pour la couverture UE ; régions pilotes US Est et US Ouest pour l'Amérique du Nord — avec les magasins de chaque région provisionnés de manière identique contre le même backend Symfony. Le cluster ElasticSearch fait tourner des workers de requêtes sans état qui peuvent être épinglés indépendamment aux régions UE ou US pour de futurs engagements de résidence des données. L'équipe d'ingénierie derrière le projet est répartie sur le fuseau CET et travaille en horaire CET avec un chevauchement sur la côte Est des États-Unis (9h–13h ET) pour les standups côté détaillant, la coordination des équipes des magasins et la réponse aux incidents — le fuseau horaire qui permet à une équipe merchandising américaine et à une équipe d'ingénierie européenne de partager quatre heures de chevauchement en direct chaque jour.
La feuille de route active de développement logiciel sur mesure pour SuperStep inclut le module de reliquats d'entrepôt exposant le stock de l'entrepôt central comme un magasin virtuel avec délai d'approvisionnement explicite, une couche de recommandations inter-marques réutilisant le même index ElasticSearch, un canal partenaire grossiste avec des limites de rôle séparées, et une surface de réservation pour le client permettant à un conseiller de bloquer un SKU dans un magasin spécifique pour un client récurrent. Un tableau de bord de performance des conseillers avec télémétrie de conversion est prévu, et le sous-système d'habilitation est déjà structuré pour l'attribution multi-postes. Les plans d'infrastructure incluent un ajustement supplémentaire de l'index ElasticSearch, un harnais de régression interne de l'adaptateur 1C, et une future évaluation de conformité indépendante intégrée dans la feuille de route cloud & DevOps.
Si vous planifiez une application de conseiller retail, un companion POS, ou tout produit d'inventaire inter-magasins où un vendeur sur le sol doit trouver n'importe quel SKU dans n'importe quel magasin en quelques secondes pour des audiences aux États-Unis et dans l'UE, nous avons livré cette stack de bout en bout et pouvons réduire significativement le délai de développement. L'équipe d'ingénierie derrière ce projet fait partie d'YuSMP Group, et la surface produit en production reste privée à la demande du détaillant. Nous travaillons à prix fixe pour les MVP bien définis et en équipes dédiées pour la livraison continue, avec un horaire CET et un créneau de chevauchement garanti sur la côte Est des États-Unis (9h–13h ET) pour les stand-ups, démos et réponses aux incidents.
Un MVP de conseiller retail ciblé avec des applications iOS et Android natives, un backend Symfony, la recherche de produits ElasticSearch, une connexion employé par numéro de téléphone et un catalogue mono-magasin coûte généralement entre 140 k€ et 280 k€. L'ajout d'une consultation de stocks multi-magasins à travers l'ensemble du réseau de boutiques, des filtres de marque, taille et région, un module de reliquats d'entrepôt, une intégration inventaire 1C approfondie et un export BI porte un produit complet à 300 k€–620 k€. Les principaux facteurs de coût sont la conception de l'index ElasticSearch, l'adaptateur d'intégration 1C et le moteur de requêtes inter-magasins.
iOS et Android natifs gagnent sur trois dimensions qui importent pour une application sur sol de vente : la latence de recherche sur les appareils plus anciens des magasins, le comportement hors ligne prévisible lors d'une coupure Wi-Fi du magasin, et le rythme de déploiement que l'équipe informatique du détaillant peut réellement maintenir sur des centaines d'appareils. Flutter est un excellent choix pour de nombreux produits mais ajoute une couche moteur entre les résultats de recherche et l'écran, que le conseiller debout à côté d'un client ressent comme une friction. Un companion POS web uniquement lie la productivité à la fiabilité du réseau à l'intérieur du magasin, ce qui est précisément le mode de défaillance pour lequel l'application a été développée.
Le backend Symfony indexe chaque SKU, magasin, taille, couleur, marque et saison dans ElasticSearch avec des comptages de stock dénormalisés par magasin. Une requête conseiller — marque A, taille 42, en stock dans ce magasin ou les deux suivants — est une seule requête composite ElasticSearch qui retourne les SKU correspondants et les magasins les portant avec le stock actuel. L'adaptateur 1C maintient l'index honnête en streamant les deltas de stock en quasi-temps réel. La disponibilité inter-magasins est un filtre, pas un appel API séparé, de sorte que le résultat est un seul écran plutôt qu'une chaîne d'allers-retours.
Une application de conseiller retail détient des numéros de téléphone d'employés, des attributions de rôle et un historique de recherche — moins sensibles que les données client mais toujours dans le périmètre. La connexion employé expose un écran de consentement granulaire RGPD pour les utilisateurs dans l'Union européenne et une divulgation CCPA / CPRA pour les utilisateurs en Californie dans le même flux. L'accès par rôle contrôle quel conseiller peut lire quel magasin, l'historique de recherche est limité dans le temps, et une demande de suppression — pour un employé qui quitte le réseau — est un seul job backend à travers l'enregistrement utilisateur et les attributions de rôle.
Un MVP ciblé avec des applications natives Swift et Kotlin, un backend Symfony, la recherche de produits ElasticSearch, une connexion employé par numéro de téléphone et un catalogue mono-magasin prend généralement 14 à 20 semaines. L'ajout d'une consultation de stocks multi-magasins à travers un réseau de boutiques, des filtres de marque, taille et région, un module de reliquats d'entrepôt et une intégration inventaire 1C approfondie nécessite 6 à 10 semaines supplémentaires. La phase de durcissement prête pour l'audit — accès par rôle, politiques de rétention, fiabilité des webhooks 1C et cohérence de l'index de stock — est fréquemment sous-estimée et doit être budgétée à 3 à 5 semaines.
Cas connexes

Marketplace de pièces auto plus CRM vendeur — recherche VIN, inventaire multi-emplacements, livraison intégrée.
Voir le cas →
Application marketplace mobile locale pour une chaîne physique de biens pour enfants — catalogue flexible, synchronisation des stocks en ligne.
Voir le cas →
Application client, application préparateur, panneau admin pour une chaîne d'épiceries régionale.
Voir le cas →Partagez quelques détails et un consultant senior vous répondra dans un délai d'un jour ouvrable.