Opérations terrain
Logiciel terrain offline-first: le protocole de décision pour des opérations fiables
Un cadre d’architecture et de recette pour capturer, synchroniser et contrôler les opérations terrain sans perdre ni dupliquer les données.

Décision soutenue
Un logiciel terrain n’est réellement offline-first que si l’utilisateur peut consulter les données utiles, enregistrer une opération critique et connaître son état sans réseau. La base locale porte l’état de travail, chaque écriture reçoit un identifiant stable, la synchronisation est relançable sans doublon et les conflits suivent une règle métier explicite. Un simple cache ou un bouton de resynchronisation ne suffit pas.
Synthèse exécutive
- Faire de la source locale le point de lecture de l’application terrain, puis la réconcilier avec le serveur.
- Séparer données consultatives, preuves terrain et transactions qui engagent le stock, le prix ou le paiement.
- Rendre chaque écriture relançable avec un identifiant d’opération, une version de départ et un statut visible.
- Refuser la mise en production tant que les coupures, doublons, conflits et reprises après arrêt forcé ne sont pas testés.
Définir offline-first comme une capacité opérationnelle
Le mode hors ligne ne se résume pas à afficher un écran déjà ouvert. Une équipe terrain doit savoir quelles tâches restent possibles, quelles informations sont suffisamment récentes et quelles actions attendent encore une confirmation du serveur. Cette distinction protège l’utilisateur contre une fausse impression de succès.
L’architecture recommandée par Android pour les applications offline-first place une source locale devant les couches supérieures. Le réseau alimente et réconcilie cette source, mais l’interface ne dépend pas d’un appel distant à chaque lecture. Pour Atlas, ce principe devient une règle de conception: le travail local doit être explicite, durable sur l’appareil et observable jusqu’à son acceptation côté serveur.
Principe d’architecture vérifié
La documentation Android recommande une source locale comme source canonique de lecture pour une application offline-first et distingue plusieurs stratégies d’écriture selon la criticité de l’opération.
Choisir une stratégie par type d’écriture
Toutes les données ne peuvent pas suivre la même règle. Une note ou une photo peut être conservée localement puis envoyée plus tard. Une consommation de stock, une validation de prix ou un encaissement modifie un état partagé et demande davantage de contrôle. Le bon modèle classe les actions avant de choisir la technologie.
| Action | Comportement hors ligne | Autorité finale | Condition de fiabilité |
|---|---|---|---|
| Note, photo ou relevé | Enregistrer localement et mettre en file | Serveur après contrôle du format et des droits | Conserver le fichier, l’heure, l’auteur et l’identifiant local |
| Clôture d’intervention | Autoriser un état en attente | Serveur après validation des prérequis | Afficher clairement en attente, accepté ou rejeté |
| Commande ou mouvement de stock | Créer une intention, sans promettre le stock final | Serveur et règles de réservation | Réponse déterministe en cas de stock ou prix modifié |
| Encaissement | Capturer la preuve et limiter les actions selon le risque | Système financier ou de rapprochement | Identifiant unique, piste d’audit et traitement des écarts |
Décision Atlas
Nous ne recommandons pas un mode hors ligne uniforme. La liberté accordée sur l’appareil doit diminuer à mesure que l’action engage un stock partagé, un prix contractuel ou un flux financier.
Écrire un contrat de synchronisation avant les écrans
Chaque opération locale doit pouvoir être rejouée après une coupure sans produire un second effet. L’application génère un identifiant d’opération stable avant l’envoi. Le serveur conserve cet identifiant avec le résultat déjà produit et renvoie le même résultat si la demande revient. Cette logique complète les propriétés HTTP: le protocole rappelle qu’une opération automatiquement relancée ne doit pas créer plusieurs effets lorsque sa sémantique est idempotente.
Le contrat doit aussi transporter l’identifiant de l’entité, la version lue par l’appareil, l’auteur, l’heure capturée, l’heure reçue et le type d’action. Le statut local suit au minimum quatre états: à envoyer, en cours, accepté et à corriger. Une erreur métier n’est pas traitée comme une panne réseau.
- Identifiant d’opération créé sur l’appareil et conservé après redémarrage.
- Version de départ pour détecter une modification concurrente.
- Réponse serveur stockée avec le numéro de version obtenu.
- Relance avec temporisation progressive pour les erreurs techniques.
- File d’exception distincte pour les rejets métier qui exigent une décision humaine.
Pratique de fiabilité
L’idempotence traite les répétitions. Le versionnement traite les conflits. Les deux sont nécessaires: un identifiant unique n’indique pas quelle version métier devait être modifiée.
Résoudre les conflits selon le sens métier
La règle du dernier enregistrement reçu est facile à coder, mais dangereuse lorsqu’elle efface une preuve, modifie une affectation ou masque un mouvement de stock. La résolution doit dépendre du type de donnée et produire une trace exploitable.
| Type de donnée | Règle recommandée | À éviter |
|---|---|---|
| Photo, signature, mesure | Ajouter une nouvelle preuve sans remplacer l’ancienne | Écraser le fichier précédent |
| Commentaire descriptif | Conserver les deux versions ou demander une fusion | Dernière écriture silencieuse |
| Affectation d’une tâche | Comparer la version et demander une décision si elle a changé | Réaffectation invisible |
| Quantité ou stock | Enregistrer un mouvement puis recalculer côté serveur | Remplacer directement un total partagé |
Conflits explicitement documentés
La documentation Android précise que la résolution des conflits exige du versionnement et des métadonnées. Elle cite le dernier enregistrement comme stratégie courante, sans en faire une règle universelle.
Faire une recette de coupure, pas une démo de bureau
Le test décisif se déroule sur les appareils, les volumes et les parcours réels. Il doit interrompre le réseau au mauvais moment, arrêter l’application pendant une écriture et créer une modification concurrente depuis un second appareil. L’objectif est de prouver ce que voit l’utilisateur et ce que reçoit le système, pas seulement que la file finit par se vider.
- Créer plusieurs opérations en mode avion, fermer l’application, redémarrer puis synchroniser.
- Appuyer plusieurs fois sur la même action et vérifier qu’un seul effet métier est produit.
- Modifier le même dossier sur deux appareils et vérifier la règle de conflit annoncée.
- Retirer un droit utilisateur pendant la coupure et vérifier le rejet contrôlé au retour du réseau.
- Tester un appareil avec une heure incorrecte et ne jamais utiliser son horloge comme ordre absolu.
- Mesurer âge de la file, taux de rejet, nombre de conflits, temps de reprise et opérations bloquées.
Établir une décision Go, Go conditionnel ou No-Go
| Décision | Conditions minimales |
|---|---|
| Go | Aucune perte observée sur les scénarios critiques, doublons neutralisés, conflits expliqués, file supervisée et procédure de support testée |
| Go conditionnel | Mode hors ligne limité à des preuves ou brouillons, avec restrictions visibles sur les opérations partagées |
| No-Go | Succès affiché avant acceptation serveur, écriture locale non durable, doublons possibles ou aucune règle de conflit documentée |
Position de décision
Une couverture réseau faible n’est pas le seul risque. Une application qui cache les états en attente peut être plus dangereuse qu’une application qui limite clairement ce qui est possible hors ligne.
Décisions à prendre maintenant
Actions recommandées
- 01Lister les actions terrain et leur impact sur le stock, le prix, la conformité ou le paiement.
- 02Définir pour chaque action l’autorité finale et le comportement attendu sans réseau.
- 03Formaliser le contrat d’écriture avec identifiant, version, statuts et erreurs métier.
- 04Construire un jeu de conflits représentatif avec les équipes opérationnelles.
- 05Exécuter la recette sur le terrain et fixer les seuils de Go avant le déploiement.
Points de vigilance
- Un indicateur vert qui signifie seulement enregistré sur l’appareil, pas accepté par le serveur.
- Une file locale effacée lors d’une mise à jour, d’une déconnexion ou d’un manque de stockage.
- Des mouvements de stock représentés par le remplacement d’un total.
- Une résolution automatique des conflits sans trace ni possibilité de correction.
Questions fréquentes
Une PWA peut-elle être réellement offline-first?
Oui, si le stockage local, le cycle de mise à jour, les files d’écriture, la reprise et les limites du navigateur sont conçus et testés. Le choix PWA ou natif ne remplace pas le contrat de synchronisation.
Faut-il autoriser les commandes sans réseau?
On peut capturer une intention de commande, mais le stock, le prix et les conditions commerciales doivent être confirmés par l’autorité serveur. L’interface doit distinguer brouillon local, commande reçue et commande confirmée.
Comment empêcher une opération dupliquée?
Générez un identifiant stable avant le premier envoi, rendez le traitement serveur idempotent et conservez le résultat associé. Ajoutez le versionnement pour détecter les conflits qui ne sont pas de simples répétitions.
Sources et vérification
Dernière vérification éditoriale : 29 août 2026. Les liens pointent vers les textes, autorités et guides de référence consultés.
- 01Build an offline-first app
Android Developers, Google. Consulté le 29 août 2026.
- 02Data layer
Android Developers, Google. Consulté le 29 août 2026.
- 03RFC 9110: HTTP Semantics, section 9.2.2 Idempotent Methods
RFC Editor. Consulté le 29 août 2026.
Décisions connexes
Poursuivez avec des dossiers qui partagent le même contexte opérationnel, technique ou de gouvernance.
Commerce B2B
Commandes B2B sur WhatsApp: passer du message à un flux contrôlé
Lire le dossierCommerce B2B
Tarification B2B en distribution: construire des règles explicables et auditables
Lire le dossierCybersécurité
Ce que la stratégie algérienne de cybersécurité 2025-2029 change pour les entreprises
Lire le dossierRevue terrain
Tester la synchronisation sur vos parcours critiques.
Nous cadrons les états locaux, les écritures, les conflits et la recette de coupure avant le déploiement.