PILOT : coupler l'API documents Grist avec React et un backend Python pour outiller les métiers publics (retour d'expérience SIE)

Bonjour à tous,

Je partage ici un retour d’expérience sans prétention, dans l’idée que ça puisse inspirer d’autres personnes qui cherchent à pousser Grist au-delà de l’usage tableur classique.

Le contexte : dans un service des impôts des entreprises (SIE), une grande partie du travail repose sur le croisement et la consolidation de données métier. Grist fait déjà très bien le job côté stockage structuré et logique de calcul. Mais dès qu’on veut des interfaces sur mesure, des parcours guidés ou de l’automatisation poussée, on atteint vite les limites de ce que les widgets natifs permettent.

L’idée de PILOT est partie d’un constat simple : l’API documents de Grist est suffisamment riche pour servir de socle de données, et il n’y a aucune raison de s’arrêter au tableur.

Concrètement, l’architecture repose sur trois couches :

  • Grist comme base de données et source de vérité. On exploite l’API documents (lecture/écriture des tables via les endpoints REST) plutôt que de tout faire vivre dans des formules. Ça donne énormément de flexibilité : on peut requêter, filtrer, écrire depuis l’extérieur sans toucher à la structure du document.

  • Une couche React par-dessus, habillée avec le DSFR. Plutôt que de bricoler dans les widgets custom, on construit une vraie interface métier en s’appuyant sur le Système de Design de l’État. Ça nous donne d’emblée une interface conforme à la charte graphique de l’État, accessible (le DSFR est pensé RGAA), et immédiatement familière pour les agents comme pour les usagers. On reste dans un cadre officiel sans réinventer des composants maison. React communique avec Grist via l’API.

  • Un serveur Python embarqué. C’est lui qui orchestre la logique métier lourde, les appels vers des API externes (dans notre cas, la récupération automatisée de données pour appuyer le travail des agents), et qui sert d’intermédiaire propre entre React et Grist. Ça évite de surcharger le front et ça centralise les règles métier.

Le résultat, c’est qu’on garde tout l’intérêt de Grist (la souplesse de la donnée, l’autonomie de configuration) tout en offrant aux agents une expérience adaptée à leur métier réel, conforme à l’identité visuelle de l’État, et pas à un tableur générique.

On commence par les SIE parce que c’est là que le besoin est le plus tangible, mais l’approche est transposable à beaucoup de métiers de la fonction publique : dès qu’il y a de la donnée structurée + un besoin d’interface guidée + de l’interconnexion avec des systèmes tiers, le triptyque Grist / React (DSFR) / Python tient la route.

Rien de révolutionnaire dans chaque brique prise isolément, mais l’assemblage me semble pertinent à partager. Je suis curieux de savoir si d’autres ici ont exploré des architectures similaires, et quelles ont été vos limites côté API documents (volumétrie, droits, perf) ou côté intégration du DSFR dans un widget Grist.

Bonne journée à tous.

4 « J'aime »

Salut ! Merci du partage.

J’ai travaillé sur un cas d’usage très similaire, mais au lieu de l’API, j’ai utilisé un widget personnalisé. Tout le code des pages est géré et stocké dans le Grist, et on peut modifier l’entête, le pied de page, la barre de menu du DSFR directement depuis Grist en changeant des données dans des tables.

Voici un exemple concret et en production : https://eclauses.beta.gouv.fr

Et voici le dépôt GitHub, qui est encore en cours de développement : GitHub - Thibaud-DT/grist-dsfr-react-app · GitHub

2 « J'aime »

Bonjour @Titof ! Merci beaucoup pour ton partage.
Je travaille sur un produit “beta” pour l’incubateur du ministère de l’agrictulure.
Le produit est encore en phase d’investigation et on a fait un MVP sur grist.
On utilise Grist comme database et interface utilisatrice.

On constate les mêmes limites sur l’UI/UX dans Grist et on réfléchit à sortir de Grist pour l’interface utilisateur, mais j’ai l’impression que c’est un coût d’effort dév non négligeable.

J’ai quelques questions :

  • Comment PILOT gère-t-il les permissions et l’authentification des usagers ? Est-ce qu’il se fonde sur les permissions avancées de Grist ou vous ne les utilisez pas ?
  • Est-il possible d’avoir accès au code source pour me faire une idée ?
  • Est-ce que PILOT a des problèmes de limites d’appel à l’api de Grist ? (les appels à l’api sont limités il me semble).
  • Est-ce que tu as des problèmes de synchronisation entre les données dans Grist et sur l’interface ? Par exemple, une donnée est modifiée en même temps sur l’interface React et sur l’interface.
  • Pourquoi utiliser l’API de Grist et ne pas faire un plugin personnalisé avec “style=singlePage?”