Aller au contenu
Espace client multiplateforme

ElectroCoeur

Un tableur d’un côté, des clients sans réponse de l’autre. L’application a relié les deux.

ElectroCoeur vend et entretient des défibrillateurs pour des collectivités et des entreprises. Toutes les données du parc existaient déjà — dans un Google Sheets exporté de leur outil de maintenance. Mais un client qui voulait savoir « est-ce que mes appareils sont en règle aujourd’hui ? » n’avait aucun moyen simple de le vérifier.

Catégorie
Espace client multiplateforme
Plateformes
Web · iOS · Android
Contexte

Le point de départ

L’entreprise disposait d’un espace client sous WordPress qui ne répondait plus au besoin. L’information existait, mais elle était enfermée dans un fichier interne : pour obtenir une réponse, un client devait appeler, et quelqu’un devait aller chercher la ligne correspondante dans le tableur.

Le vrai sujet n’était pas de créer des données, mais de rendre lisibles celles qui existaient déjà — sans demander à l’entreprise de changer son fonctionnement. Le tableur devait rester la référence, parce que c’est lui qui est alimenté par l’outil de maintenance utilisé sur le terrain. Il fallait aussi que chaque client ne voie que ses propres appareils, et que les rapports d’intervention au format PDF soient rattachés au bon défibrillateur.

La solution

Ce qui a été construit

L’application lit le tableur chaque nuit et met à jour la vue du parc. Le client ouvre son espace — sur son téléphone ou depuis un navigateur — et voit immédiatement l’état de ses appareils : vert quand tout va bien, orange quand un consommable arrive à expiration, rouge quand il est périmé. Une carte situe chaque appareil, les rapports d’intervention sont consultables directement dans l’application, et trois formulaires permettent de demander une intervention, l’ajout d’un appareil ou un devis.

Fonctionnalités

Ce que le produit fait

  • État du parc en un coup d’œil

    Trois couleurs, une règle simple : un appareil prend l’état du plus urgent de ses consommables. Le client sait où il en est sans lire un tableau.

  • Alertes avant la péremption

    Un consommable qui expire dans moins de 90 jours passe en orange, avant d’être hors service. La conformité se anticipe au lieu de se constater.

  • Carte des appareils

    Chaque défibrillateur est situé sur une carte, avec regroupement automatique quand ils sont nombreux. Utile pour les collectivités qui en gèrent des dizaines.

  • Rapports d’intervention rattachés

    Les PDF produits après chaque intervention sont classés automatiquement sous le bon appareil et consultables dans l’application.

  • Demandes en trois formulaires

    Intervention, ajout d’un appareil ou devis : chaque demande part vers la bonne boîte mail, sans passer par le standard.

  • Chaque client ne voit que son parc

    Les droits sont appliqués côté serveur, appareil par appareil : un client ne peut pas accéder aux données d’un autre, même en cherchant.

  • Notification des nouveaux rapports

    Une notification quotidienne signale les rapports nouvellement disponibles, envoyée uniquement aux personnes concernées par ces appareils.

  • Vue technicien et vue administrateur

    Les techniciens voient l’ensemble du parc, l’administration suit l’état de la synchronisation et les comptes clients.

Ingénierie

Les décisions qui comptent

  1. Ne jamais écraser les données du client

    La synchronisation compare chaque ligne du tableur à ce qui est déjà enregistré : les lignes inchangées sont ignorées, les lignes modifiées mises à jour, et celles qui disparaissent sont marquées comme supprimées plutôt que réellement effacées. C’est ce qui permet de relancer la synchronisation sans crainte : une erreur dans le fichier source ne détruit rien de façon irréversible.

  2. Rattacher un PDF au bon appareil, sans intervention humaine

    Les rapports d’intervention arrivent sous forme de PDF dans un dossier partagé, sans nommage exploitable. Le traitement lit le texte de chaque page pour y retrouver le numéro unique de l’appareil, puis classe le document au bon endroit. Le traitement est conçu pour pouvoir être relancé autant de fois que nécessaire sans créer de doublon.

  3. La sécurité écrite comme un filtre, pas comme une vérification

    Plutôt que de faire confiance à l’application pour ne demander que les bonnes données, le serveur refuse toute requête qui n’est pas déjà limitée à ce que le demandeur a le droit de voir. La différence est importante : une application modifiée ou un accès direct à la base ne permettent pas de contourner la règle.

  4. Une mise à jour web qui n’arrivait jamais chez l’utilisateur

    Sur la version web, les utilisateurs continuaient de voir une ancienne version malgré les mises en ligne. Le correctif détecte le cas précis « nouvelle version installée alors qu’une version tourne déjà » — qui signifie une mise à jour, pas une première visite — et recharge la page une seule fois, avec une protection contre les rechargements en boucle.

  5. Une invitation par mail ne doit pas pouvoir partir 262 fois

    La synchronisation n’envoie jamais de mail elle-même. Une fonction distincte s’en charge, sous quota horaire et journalier. Ainsi, une synchronisation qui se comporterait mal ne peut pas déclencher un envoi massif vers tous les clients — un incident dont on ne se remet pas commercialement.

  6. Un chiffre inattendu qui n’était pas un bug

    L’entreprise attendait environ 3 000 comptes clients ; la synchronisation en a produit 262. La cause n’était pas dans le traitement : plus de 3 000 lignes du tableur n’avaient pas d’adresse email renseignée. Le distinguer d’un défaut technique a évité de « corriger » un traitement qui fonctionnait correctement, et a révélé un vrai sujet de complétude des données côté client.

Architecture

Comment c’est assemblé

  1. Google Sheets

    Le fichier de l’entreprise reste la référence : rien à changer dans ses habitudes

  2. Synchronisation nocturne

    Chaque nuit, seules les lignes modifiées sont reprises — jamais de doublon, jamais de perte

  3. Cloud Firestore

    Les données du parc, filtrées pour que chaque client ne voie que ses appareils

  4. Application Flutter

    Une seule base de code pour le web, iOS et Android

Stack technique

Les technologies utilisées

Frontend

  • Flutter
  • Dart
  • Cubit
  • go_router
  • flutter_map

Backend

  • Cloud Functions
  • TypeScript
  • Node 24

Infrastructure

  • Firebase
  • Cloud Firestore
  • Cloud Storage

Services

  • Google Sheets API
  • Google Drive API
  • Firebase Cloud Messaging
Résultat

Ce qui a été livré

Application livrée seul et publiée sur l’App Store et Google Play, depuis une seule base de code pour le web, iOS et Android. Neuf fonctions serveur assurent la synchronisation nocturne du tableur, le classement des rapports d’intervention et les notifications. Environ 13 700 lignes de Dart et 5 800 lignes de TypeScript. Les chiffres d’usage réel ne sont pas publiés : aucune mesure d’audience n’a été mise en place sur le projet.

  • Web
  • iOS
  • Android

Besoin d’un produit similaire ?

Parlons de ce que vous voulez construire. Je vous réponds personnellement, généralement sous 24 heures.