Vue d'ensemble
- Projet
- Pharma Hub, comparateur de prix pour pharmacies en ligne
- Rôle
- Architecture et développement, du service au plugin
- Plateforme
- Service cloud et plugin pour WordPress et WooCommerce
- Livrables
- Rapport de prix dans l'administration de la boutique, liaison entre offres et produits, export CSV et collecte à la demande
- État
- Version 1 construite, en test avec les données réelles d'une boutique
Le problème du client
La boutique vend des centaines de produits sur un comparateur de prix en ligne, où le client final choisit presque toujours le prix le plus bas. Le propriétaire de la boutique n'avait aucun moyen de répondre à des questions simples :
- Sur quels produits suis-je plus cher que la concurrence, et de combien ?
- Quelle boutique me devance sur chaque produit ?
- Où est-ce que je perds la vente pour quelques centimes, que je baisserais sans hésiter ?
La seule façon de le savoir était d'ouvrir le comparateur produit par produit et de comparer à la main. Avec des centaines d'offres et des prix qui changent tous les jours, ce n'était pas fait, et la boutique perdait des ventes pour quelques centimes sans le savoir.
La demande était directe : voir, sur un seul écran, le prix de la boutique à côté du prix le plus bas, la boutique qui le pratique, la différence en euros et en pourcentage, et une mise en avant des « ajustements faciles », les produits où la boutique est plus chère d'environ 10 centimes au plus.
La solution
Deux éléments qui travaillent ensemble.
Le hub
Un service central qui copie les offres de la boutique, lit les prix des concurrents, calcule la comparaison et conserve l'historique.
Le plugin de la boutique
Il affiche le rapport dans l'administration de WooCommerce, relie chaque offre au produit de la boutique (par SKU, EAN ou adresse) et exporte en CSV. Le plugin ne fait qu'afficher et relier ; tout le calcul reste dans le hub.
Ce que le rapport apporte
- Le prix de la boutique à côté du prix le plus bas, avec le nom de la boutique la moins chère
- La différence en euros et en pourcentage, et la position de la boutique parmi toutes celles qui vendent le produit
- « Ajustement facile » : mise en avant des offres plus chères de quelques centimes seulement, avec un seuil configurable
- Alerte en cas de différence suspecte, filtres, tri par priorité et export CSV
- Un bouton pour demander une nouvelle collecte et suivre son avancement
Sous le capot
Pour celles et ceux qui veulent les détails techniques.
- Plusieurs boutiques dès le départ
- Chaque boutique ne voit que ses propres données. L'isolation est faite dans la base de données (row-level security de PostgreSQL) et la boutique est identifiée par son jeton.
- Sécurité
- Jetons à périmètre limité, clé du comparateur stockée chiffrée et appels de serveur à serveur en HTTPS. Le jeton n'arrive jamais dans le navigateur.
- Collecte résiliente
- File d'attente dans PostgreSQL avec un worker, reprise après une panne, limite de tentatives et arrêt propre pendant un déploiement.
- Collecte responsable
- Elle respecte le robots.txt, fait une pause entre les requêtes et s'arrête d'elle-même si le site signale un blocage.
- Valeurs exactes
- Montants en centimes entiers et heures en UTC, pour éviter les erreurs d'arrondi et de fuseau horaire.
- Décisions documentées
- 30 comptes rendus de décisions d'architecture et des centaines de tests automatisés, dans le hub et dans le plugin.
État
La version 1 est construite et en test avec les données réelles d'une boutique.
Prochaines étapes
- Intégration avec un deuxième fournisseur de données de pharmacie
- Interface d'administration