# Foxmayn Track : suivi des bons de livraison pour distributeurs

> Suivi des bons de livraison pour les distributeurs et grossistes algériens : scans de codes-barres contrôlés par rôle, preuve de livraison avec photo, travail hors ligne et connecteur à votre ERP. Construit sur mesure pour Cosmekarn, en service depuis août 2026.

Updated: 2026-10-27

- **Détails:** Foxmayn Track
- **Client:** Cosmekarn
- **Année:** 2026
- **Statut:** Pilote en service
- **Technologies:** TypeScript, Expo, React Native, Hono, PostgreSQL, React

## Le problème

Les distributeurs, grossistes et fabricants en Algérie font circuler leurs marchandises avec des bons de livraison papier. Un bon passe par la préparation, l'expédition, un transfert entre dépôts, la livraison et parfois un retour. À chaque étape, quelqu'un écrit, signe ou téléphone.

Personne ne peut voir où se trouve un bon sans passer des appels. Les litiges sur ce qui a été chargé, livré ou retourné sont difficiles à trancher. L'ERP connaît la commande, mais pas le parcours des marchandises.

Cosmekarn, une entreprise algérienne de cosmétiques, avait ce problème dans plusieurs régions. Foxmayn Track est né du système sur mesure que nous avons construit avec elle.

## Du sur-mesure pour Cosmekarn

Nous ne sommes pas partis d'un modèle. Nous avons travaillé avec la direction, le bureau et l'entrepôt de Cosmekarn, sur place et au fil de nombreux échanges, jusqu'à ce que le système colle à leur façon de travailler.

- **Leurs rôles et leurs étapes.** Les statuts, les rôles et qui peut faire passer un bon à quel état viennent de leur propre circuit. Quand il leur a fallu un responsable chargement entre la préparation et l'expédition, nous avons ajouté le rôle. Une même personne peut avoir plusieurs rôles et passer de l'un à l'autre dans l'application.
- **Leurs régions.** Les colis quittent l'entrepôt principal vers des dépôts régionaux et sont livrés depuis ces dépôts. Chaque étape régionale est un scan du rôle qui s'en charge.
- **Le terrain de leurs chauffeurs.** Un chauffeur enregistre une livraison, un retour avec son motif, ou un passage reprogrammé. La photo à la porte, le mode hors ligne et les mises à jour dans l'application viennent de ce que les chauffeurs vivaient sur la route.
- **Leurs codes-barres.** Le scanner accepte leurs étiquettes telles qu'elles sont imprimées, avec ou sans le préfixe de la référence.
- **Leurs rapports.** Le rapport des délais de livraison suit le modèle Excel qu'ils utilisaient déjà.

Après la mise en service, nous avons continué par versions courtes. Chacune était essayée avec leurs équipes avant d'arriver sur tous les téléphones.

## Ce que nous avons construit

Foxmayn Track suit chaque bon de livraison tout au long de sa vie. Il comporte trois parties.

- **Une API** qui porte le workflow et les règles.
- **Une console d'administration** web pour le bureau.
- **Une application Android** pour les personnes à l'entrepôt et sur la route.

Les intervenants ont des rôles : ADV (administration des ventes), préparateur, responsable expédition, chauffeur, responsable chargement et administrateur. Chaque rôle ne peut effectuer que ses propres étapes.

- **Les scans de codes-barres** font passer un bon d'un état au suivant. Le serveur vérifie le rôle et la transition à chaque scan.
- **La preuve de livraison** est une photo envoyée avec la livraison, avec la position du téléphone à la porte.
- **Travail hors ligne.** Les chauffeurs continuent de scanner sans réseau. L'application met les scans en file d'attente et les envoie au retour du réseau.
- **Affectation et suivi.** Le bureau affecte les chargements aux chauffeurs et suit chaque bon dans la console. Un rapport des délais de livraison s'exporte vers Excel.
- **Mises à jour dans l'application.** Les téléphones installent les nouvelles versions depuis l'application, sans magasin d'applications.
- **Un connecteur ERP.** Track lit vos commandes et bons de livraison depuis votre ERP via un adaptateur.

L'interface est en français.

## Comment ça marche

Le code est un monorepo TypeScript. Un paquet de domaine partagé contient les statuts, les rôles et la table des transitions. L'API, construite sur Hono, Drizzle et PostgreSQL, s'appuie sur ce paquet pour décider si un scan est autorisé. À l'arrivée d'un scan, l'API regarde le rôle qui agit et applique les transitions que ce rôle peut effectuer. Le téléphone ne peut pas sauter une étape en envoyant une autre requête.

Hors ligne, le téléphone propose les choix du rôle sans interroger le serveur. Quand la file d'attente se vide, le serveur vérifie à nouveau chaque scan, dans l'ordre. Un scan qui n'est plus valide est refusé et affiché à la personne qui l'a fait.

Le côté ERP est un contrat plus des adaptateurs. Le cœur du workflow ne connaît que le contrat. Un seul adaptateur existe aujourd'hui, pour l'ERP de notre premier client. Les adaptateurs pour ERPNext et Odoo sont prévus, pas construits.

La console d'administration est en React 19 avec Vite. L'application Android est construite avec Expo et React Native et utilise la caméra du téléphone pour scanner. La version de production est signée et versionnée.

## Où en est le projet

Le système est en service chez Cosmekarn depuis août 2026. Leurs préparateurs, chauffeurs et équipes de bureau l'utilisent chaque jour, en ligne et hors ligne, et il est installé sur leur propre serveur, à côté de leur ERP.

Foxmayn Track est le produit que nous en avons tiré. Nous avons regroupé le code dans un seul monorepo, placé l'ERP derrière un contrat d'adaptateur et retiré tout ce qui était propre à une seule entreprise. Cosmekarn utilise toujours la version de première génération. Foxmayn Track tourne en démo hébergée face à un substitut d'ERP, prêt pour un deuxième client.

Limites, en toute franchise :

- Il n'existe qu'un seul adaptateur ERP, pour l'ERP de notre premier client.
- L'interface n'existe qu'en français. Il n'y a pas encore d'arabe ni de mise en page de droite à gauche.
- Le produit retravaillé n'est encore installé chez aucun client. L'expérience de production vient de la version de première génération.

## Ce que nous avons appris

**Mettre les règles sur le serveur.** Un scan est une requête, et c'est le serveur qui décide si elle est valide. Les permissions restent ainsi les mêmes sur tous les clients, en ligne comme hors ligne.

**Une position est un indice, pas une preuve.** Le téléphone envoie sa position avec une livraison, et le bureau la voit. Un téléphone peut la falsifier et un relevé peut se tromper de plusieurs centaines de mètres : nous ne la traitons jamais comme une preuve.

**Automatiser les contrôles.** Notre CI exécute les vérifications de types, le lint, les builds, les tests unitaires, un contrôle de dérive des migrations de base de données, le lint des scripts shell, une recherche de secrets et un test de fumée Docker contre les deux bases de données et un simulateur d'ERP.

## La suite

Un deuxième client, avec le même travail d'ajustement à ses dépôts, ses rôles et son ERP. Si vous gérez de la distribution en Algérie et voulez l'essayer, [découvrez nos autres produits](https://foxmayn.com/fr/dz) ou consultez l'[étude de cas Foxmayn Shopify Pay](https://foxmayn.com/fr/dz/work/shopify-pay), en service chez Cosmekarn elle aussi.

---
Contact: foxmayn@protonmail.com · https://foxmayn.com/fr/dz#contact
HTML: https://foxmayn.com/fr/dz/work/track · [en](https://foxmayn.com/en/dz/work/track.md) · [ar](https://foxmayn.com/ar/dz/work/track.md)
