EvoStock
WMS distribué connecté directement à Sage 100, avec clients mobile et desktop, utilisé en production par des opérateurs d'entrepôt.

EvoStock
Système de gestion d'entrepôt (WMS) distribué connecté directement à l'ERP Sage 100, développé chez EvoFlux. Actuellement utilisé en production chez le client LEM (Liberty Electric Motion) avec 4 opérateurs simultanés.
#D'où vient l'idée ?
EvoFlux est un intégrateur de différents ERP dont Sage. Certains de nos clients avaient besoin d'un WMS, mais aucun sur le marché n'était propre et bien connecté à Sage. Les solutions existantes utilisent des services intermédiaires qui créent souvent des incohérences de données.
On a donc eu l'idée de créer un WMS directement connecté à Sage, sans système foireux entre les deux — une connexion directe via COM Interop et requêtes SQL sur la base Sage.
#Timeline
| Période | Étape |
|---|---|
| 4 août 2025 | Arrivée en alternance chez EvoFlux. Reprise du code d'un stagiaire de première année. 2 semaines pour comprendre la problématique métier et refactoriser entièrement le code existant. |
| Septembre 2025 | Développement du process de Réception — le plus complexe. D'abord la réception classique, puis ajout des N° de Lot/Série, gestion des emplacements, séparation en deux process (zone tampon + rangement), et enfin le WebSocket pour le travail multi-utilisateurs. |
| Mi-octobre 2025 | Process d'Interrogation de Stock — consultation des quantités, états et informations des articles par dépôt. Terminé en une semaine. |
| Novembre 2025 | Process de Mouvement de Stock — transfert d'articles entre emplacements et entre dépôts. Réalisé en 2 semaines. |
| Décembre 2025 | Process d'Inventaire avec système de snapshots chiffrées permettant de faire durer un inventaire sur plusieurs semaines même si le serveur s'éteint temporairement. Premiers tests terrain chez le client LEM. |
| Janvier 2026 | Refonte complète du style graphique. Refactorisation du process de réception pour plus de rapidité. Process d'Expédition terminé en une semaine. |
| Février 2026 | Mise en place d'un backlog Excel avec scoring ROI par client. Gestion des colis, impression d'étiquettes, mails automatiques par flux. Bug réseau critique trouvé et corrigé après une démo ratée chez le client. |
| Mars 2026 | Retour chez LEM — le client est ravi et utilise l'app au quotidien en bêta test. Que des retours positifs. Pré-démonstration au président français de Keyence. |
| Aujourd'hui | L'app continue d'évoluer. 70+ tâches dans le backlog. Prochains clients : SOVEREP, SOVEROC (Maroc) et DAYTON Progress. |
#Architecture distribuée
Le système est composé de plusieurs briques :
- Backend : ASP.NET Core (.NET 8), déployé en Windows Service
- Client mobile : .NET 10 MAUI Blazor (Android, iOS, Windows, macOS) — adapté aux scanettes Keyence
- Client desktop : Interface d'administration (MAUI Blazor, Windows)
- Microservice PDF : Python FastAPI pour la génération d'étiquettes et documents
- Bibliothèque partagée : DLL .NET 8 avec les modèles métier (17 catégories de DTOs)
#Double canal de communication
L'architecture utilise deux protocoles complémentaires :
TCP (port 1801) — Requêtes synchrones
Un protocole maison basé sur TCP avec framing JSON (préfixe de longueur sur 4 octets). J'ai fait le choix de ne pas utiliser HTTP pour minimiser l'overhead — le trafic ne sort pas du réseau local du client.
- 61 endpoints enregistrés (réception, expédition, stock, inventaire, mouvement, retour, paramétrage...)
- Messages de max 10 Mo, timeout de 30 secondes
- Retry automatique (3 tentatives, 500ms de délai)
SignalR WebSocket (port 1802) — Temps réel
Pour les opérations collaboratives (plusieurs personnes sur une même réception ou un inventaire) :
- 3 Hubs : DocHub, ExpeditionHub, ReceptionHub
- Groupes dynamiques par document
- Synchronisation d'état entre tous les participants en temps réel
#Intégration Sage 100
La connexion directe à Sage 100 v11 et versions supérieures se fait via :
- COM Interop (Objets100cLib) pour les écritures : réceptions, expéditions, transferts de stock
- SQL Server (base Sage) pour toute la lecture de données : articles, stock, emplacements, lots/séries, dépôts
Pas de couche intermédiaire, pas de synchronisation batch — les données sont lues et écrites directement dans Sage.
#Process métier implémentés
- Réception : Simple, avec lots/séries, multi-emplacement, zone tampon + rangement, multi-utilisateurs (WebSocket)
- Expédition : Préparation, colisage, validation mono ou multi-emplacement
- Inventaire : Multi-sessions, snapshots chiffrées persistantes, travail collaboratif
- Mouvement de stock : Transfert inter-emplacement et inter-dépôt
- Interrogation de stock : Consultation par article, dépôt et emplacement
- Retour client : À partir d'une facture, avec photos
- Impression : Étiquettes personnalisables via templates PDF
- Mails automatiques : Notifications par flux avec templates Scriban
#Gestion de projet
J'ai mis en place un backlog Excel avec un système de scoring ROI pondéré par client (LEM, SOVEREP, DAYTON) et par complexité technique. Chaque tâche est scorée sur sa valeur business et le temps estimé, ce qui me permet de prioriser efficacement.
#L'équipe
Je travaille principalement seul sur EvoStock. Un collègue m'assiste sur une partie spécifique : le développement des fonctions utilisant les objets métier de Sage (COM Interop).
#Ce que j'ai appris
- Recevoir les critiques et s'adapter : Les retours terrain des opérateurs chez LEM ont complètement changé ma manière de concevoir les interfaces
- Bas niveau C# : TCP sockets, COM Interop, sérialisation JSON custom, gestion mémoire
- Le métier WMS : Comprendre le quotidien des personnes qui utilisent un WMS pour concevoir un outil qui correspond à leurs méthodes réelles
- ASP.NET Core & SignalR : Architecture serveur, hubs temps réel, gestion de sessions
- Blazor & MAUI : Développement cross-platform, adaptation aux scanettes Android Keyence
- Force de proposition : Renforcer mon avis critique et ma capacité à défendre des choix techniques