CRM de lutte antiparasitaire
Captures d'écran
Points clés
-
Chaque station de contrôle porte une étiquette avec un QR code. Le technicien la scanne et enregistre sur place le constat (par exemple, la consommation d'appât), l'état du dispositif, les nuisibles trouvés et une photo. Le rapport ne peut pas être signé tant qu'il manque une station de l'intervention.
-
Une fois que le client et le technicien ont signé, le système génère le PDF au format de l'entreprise et l'archive sans modification : c'est la preuve présentée lors d'un audit. Si le client est une personne morale et que des produits ont été appliqués, il émet aussi le certificat de lutte antiparasitaire avec la signature du propriétaire.
-
J'ai intégré la WhatsApp Cloud API de Meta pour envoyer au client un message modèle lorsque son rapport est signé, et Google Maps pour situer les adresses des clients sur la carte et ouvrir l'itinéraire depuis le téléphone du technicien.
-
L'application de terrain, réalisée avec Expo et React Native, permet de terminer tout le rapport sans réseau : elle enregistre chaque étape sur le téléphone et l'envoie d'elle-même au retour de la connexion, sans dupliquer ni rapports ni paiements.
-
Côté bureau : un planning par mois, semaine, jour et technicien, les clients avec leurs adresses et leurs stations, des devis en PDF, les interventions récurrentes, les recettes et les créances, et des statistiques sur les nuisibles et l'évolution des stations.
Problème
Lors d'un audit sanitaire, une entreprise de lutte antiparasitaire doit prouver ce qui s'est passé à chaque visite : quelles stations ont été contrôlées, ce qui a été trouvé, quel produit a été appliqué et qui a signé. Le rapport d'intervention était le formulaire papier de l'entreprise, et le certificat de lutte antiparasitaire était rédigé à la main. De plus, les techniciens travaillent dans des entrepôts et des sous-sols où le signal se perd.
Solution
Une seule API FastAPI dessert une application web à trois vues et une application mobile. Au bureau, l'équipe planifie les visites, gère les clients avec leurs adresses et leurs stations, établit les devis et suit les paiements. Sur le terrain, le technicien ouvre sa journée, scanne le QR code de chaque station et complète le rapport en quatre étapes : stations, produits appliqués, justificatifs et signatures du client et du technicien. À la signature, le système archive le PDF, émet le certificat lorsque c'est nécessaire et prévient le client sur WhatsApp. Dans le portail, chaque client consulte ses interventions, ses prochaines visites, ses stations et ses certificats.
Choix techniques
- FastAPI est le seul accès aux données : ni le navigateur ni l'application ne communiquent avec Supabase, et les photos, signatures et PDF sont servis par l'API.
- Les permissions sont accordées par capacité et non par rôle. Chaque endpoint déclare celle qu'il exige, et un enregistrement hors du périmètre de l'utilisateur renvoie 404 pour ne pas révéler quels clients existent.
- Un rapport signé n'est jamais modifié : le PDF est archivé au moment de la signature et n'est pas régénéré à partir de catalogues qui auraient pu changer depuis.
- Le développement se fait sur un Supabase local dans Docker avec des données anonymisées. Le backend, l'application web et l'application mobile refusent de démarrer en développement s'ils pointent vers la production.
Gestion des erreurs
- L'avis WhatsApp s'exécute en arrière-plan après l'envoi de la réponse : s'il échoue, le rapport reste signé. Seules les erreurs temporaires sont relancées, jusqu'à trois fois.
- Dans l'application de terrain, chaque action entre dans une file SQLite. La clôture du rapport et la déclaration de paiement portent une clé générée sur le téléphone ; les renvoyer après une réponse perdue ne crée donc ni second rapport ni seconde recette.
- Si le serveur rejette un envoi, rien n'est supprimé : il reste dans « Nécessite une action » avec le motif, et le technicien décide de le relancer, de le corriger ou de l'abandonner.
Mon rôle
Je développe le projet seul, de bout en bout. J'ai conçu la base de données dans Supabase (PostgreSQL) et je la fais évoluer avec des migrations versionnées ; j'ai construit l'API FastAPI, organisée par modules métier ; j'ai réalisé l'application web en React, TypeScript et Material UI à partir d'un prototype Figma, ainsi que l'application de terrain avec Expo et React Native. J'ai intégré la WhatsApp Cloud API et Google Maps, configuré le déploiement sur Render et écrit plus de mille tests automatisés pour le backend.
Résultats
- Le client a également souscrit la maintenance.
Prochaines étapes
Compiler et tester l'application sur iOS, faire en sorte que l'appareil photo du téléphone ouvre l'application en scannant une étiquette (aujourd'hui il ouvre la version web) et développer le module des dépenses.
Code privé par confidentialité envers les clients ; captures d'écran, architecture et démonstration disponibles sur demande.