Client
Éditeur SaaS B2B · confidentiel
Domaine
SaaS · Artisanat & BTP
Service
UI/UX Design
Prototypage

Le contexte
La réforme de la facturation électronique impose à toute entreprise française d'être capable, au 1er septembre 2026, de recevoir ses factures fournisseurs via une plateforme agréée, dans un format structuré et avec un cycle de vie normé. Ce n'est pas une fonctionnalité qu'on décale d'un trimestre pour cause de roadmap chargée : sans ce module, les utilisateurs sont hors la loi à date fixe. Il s'agissait en plus d'ouvrir un domaine entièrement neuf dans le logiciel, celui des dépenses : un périmètre sans antériorité, donc sans conventions établies sur lesquelles s'appuyer. Et il ne s'adresse pas à l'artisan lui-même, mais à la personne qui tient son administratif : une gestionnaire en poste toute la journée sur le logiciel, méticuleuse, dont la peur dominante n'est pas de se tromper mais d'oublier, la pièce qui glisse dans la masse sans que personne s'en aperçoive. J'ai mené la conception en autonomie, en m'appuyant sur la documentation de la PDP comme source de vérité réglementaire, et en parallèle de la refonte du design system que je pilotais également.
Le challenge
Une norme n'est pas un cahier des charges. La documentation de la plateforme agréée décrit des statuts, des codes de transmission, des règles de filtrage. Elle ne dit rien de ce qu'un utilisateur doit voir, ni de ce qui doit lui être épargné. Tout le travail consiste à traduire un modèle de données réglementaire en gestes, et cette traduction n'est jamais neutre : chaque statut normé peut devenir un bouton, une entrée de menu, un état affiché sans action, ou rien du tout. Choisir mal, c'est soit exposer une complexité qui ne concerne pas l'utilisateur, soit lui cacher une conséquence qui le concerne beaucoup. Deux mots qui se ressemblent et ne veulent pas dire la même chose. « Rejetée » est un refus technique, posé automatiquement par la plateforme quand le format est invalide. « Refusée » est un refus commercial, posé par l'acheteur, et il est terminal : la facture est fiscalement close, le fournisseur doit émettre un avoir et réémettre. Les sources du marché inversent régulièrement les deux. Se tromper ici n'est pas une faute de vocabulaire, c'est laisser croire à un utilisateur qu'il peut revenir sur une décision qui ne se reprend pas. Une action irréversible au milieu d'une tâche répétitive. On traite ces factures à la chaîne, et c'est ce rythme qui rend le refus dangereux : le geste ressemble à tous les autres, sa conséquence non. Le problème n'était donc pas de sécuriser le refus, ce qui est facile, mais de le sécuriser sans alourdir les vingt gestes anodins qui l'entourent. Une interface qui demande confirmation partout ne protège plus rien : elle apprend à cliquer sans lire. Le statut légal ne répond pas à la question de l'utilisateur. La norme répond à « où en est cette facture dans son circuit officiel ». L'utilisatrice, elle, demande « qu'est-ce que je n'ai pas encore traité ». Deux questions différentes, et le réflexe naturel, ajouter un statut maison au milieu des statuts normés, casse la conformité d'un côté et perd l'utilisateur de l'autre.
La Solution
Lire la norme avant de dessiner une seule vue. J'ai commencé par cartographier le cycle de vie complet de la facture d'après la documentation de la plateforme agréée, en séparant la phase de transmission, qui se joue entre plateformes, de la phase de traitement, qui commence côté acheteur. Cette carte a produit la première décision structurante, et c'est une décision de retrait : tout ce qui relève de la transmission sort de l'interface d'action. L'utilisatrice n'entre dans l'histoire qu'à la prise en charge. Elle ne pose jamais un rejet technique, donc elle n'a aucune raison de le voir comme une option. Classer les statuts par ce qu'ils coûtent, pas par leur ordre. Trois familles, et cette grille commande ensuite toute l'interface. Les silencieux (prise en charge, approbation totale ou partielle) ne portent aucune donnée complémentaire : changement direct, sans modale. Les communicants réversibles (litige, suspension) portent un motif, notifient le fournisseur, et se reprennent. Le terminal (refus) notifie aussi, mais ne se reprend pas. Demander un motif pour une approbation serait une friction injustifiée ; laisser passer un refus sans motif serait une faute de conformité. Sortir le refus du menu déroulant. Le bouton « Refuser » est devenu « Bloquer la facture » : il ouvre une modale d'aiguillage regroupant les trois statuts bloquants, filtrés selon l'état courant, avant d'enchaîner sur le bon gabarit de motif. Deux gabarits, jamais un seul. Le premier pour les réversibles, avec motif filtré, message libre et confirmation neutre. Le second réservé au refus, avec avertissement d'irréversibilité, motif obligatoire, confirmation renforcée et un bouton qui nomme l'action au lieu d'un « Valider » générique. On ne refuse plus par glissement de souris dans une liste : on refuse après avoir traversé un écran qui demandait de choisir. C'est là, et seulement là, que le budget de friction est dépensé. Séparer le statut légal de l'état de travail. J'ai supprimé le statut maison qui cohabitait avec les statuts normés. Le besoin réel passe ailleurs : un filtre de travail dans la liste et un marqueur de ligne qui ne tombe qu'à l'action posée, jamais à la simple ouverture, et qui se réarme si une nouvelle décision devient nécessaire. C'est la réponse directe à la peur de l'oubli : ce qui n'a pas été traité remonte, et remonte encore. Même logique côté paiement, où « Paiement transmis » est le reflet d'un règlement enregistré et non une commande qu'on sélectionne : un flux abandonné ne change rien. La machine propose, l'utilisateur valide. À l'import, un OCR pré-remplit la facture, et les données descendues de la plateforme sont comparées à la base fournisseurs existante. Quand le fournisseur est inconnu, il est détecté et ses informations pré-remplies, à valider. Rien n'est confirmé à sa place, et les champs pré-remplis restent identifiables comme tels. Le point n'est pas que la machine devine, c'est qu'on voie ce qu'elle a deviné. Confronter au réel, et savoir ce qu'on ne tranche pas. Une utilisatrice interne, cible exacte du module et n'ayant été impliquée dans aucune décision de conception, a participé aux revues de validation en réagissant aux scénarios anticipés en amont. Focus group de guérilla plutôt que protocole de recherche, mais une source honnête, et infiniment préférable à la validation de ses propres hypothèses en circuit fermé. À l'inverse, plusieurs sujets touchaient la conformité et non le design : mapping exact des libellés, filtrage des motifs par réseau d'origine, règles de renotification du fournisseur. Je les ai documentés comme arbitrages à remonter plutôt que de les résoudre en maquette. Un designer qui tranche seul une question réglementaire ne crée pas une décision, il crée une dette que quelqu'un d'autre découvrira en production.
Le résultat
Le POC a été validé, la V1 intégrée à l'application et livrée pour l'échéance légale du 1er septembre 2026. Les décisions structurantes ont tenu jusqu'au code : le découpage des statuts en trois familles, l'aiguillage des bloquants, la séparation entre statut légal et état de travail, le règlement comme source du statut plutôt que l'inverse. Le module a par ailleurs servi de première application complète du design system reconstruit, un domaine neuf étant le meilleur banc d'essai pour vérifier qu'un socle tient sous charge réelle. La fabrique a d'ailleurs fonctionné dans les deux sens : les gabarits de modale de motif conçus ici sont remontés dans le système comme modèle de référence pour toute décision qui demande une justification, et une variante de bouton a été ajoutée au socle, parce qu'aucune n'y signalait assez nettement une issue positive. Ce que je retiens de cette mission tient à une question d'échelle. Le sujet n'était jamais une facture, c'était la centième de la journée. À ce rythme, on ne lit plus une interface, on reconnaît des formes. Concevoir pour quelqu'un qui travaille au volume, c'est faire en sorte que les gestes qui engagent ne ressemblent jamais aux autres.


