Vue d'ensemble du projet Serpe¶
Document de synthèse : le contexte complet du projet, ce qui a été réalisé, l'architecture, et l'état d'avancement. Pour le détail de chaque sujet, suivre les liens vers la documentation d'analyse.
1. Contexte métier¶
Serpe est une entreprise de paysage / BTP (élagage, entretien d'espaces
verts, débroussaillage, génie écologique, sylviculture), organisée en 12
agences (Shared Drives AFFAIRES-16, -44, -79, -MULTI…). Elle répond à
des appels d'offres publics.
Chaque réponse comporte un mémoire technique : un document long (11 000 mots en médiane), noté par l'acheteur sur la « valeur technique », et largement répétitif d'une consultation à l'autre. Aujourd'hui il est rédigé à la main, en repartant du mémoire le plus similaire — un travail chronophage.
Le Google Drive est la source de vérité documentaire (Zoho ne fait que pointer dessus). Il contient ~275 000 fichiers sur 718 Go.
2. Objectif de la web application¶
Produire automatiquement une première version du mémoire, que le chargé d'études ajuste plutôt que de repartir d'une page blanche. La plateforme se structure en deux modules + un socle :
- Module A — Analyse (lecture seule) : entrer dans un appel d'offres passé et voir sa qualification, des synthèses IA, des statistiques. Démontre la valeur rapidement.
- Module B — Rédaction (workflow) : un éditeur piloté par le cadre client
(les rubriques imposées + le barème en points) qui assemble le mémoire section
par section, à partir d'une bibliothèque de blocs et de Gemini, puis
exporte en
.docx. - Module C — Bibliothèque & référentiels : la source de vérité (blocs réutilisables, références, parc matériel, moyens humains).
- Module D — Observabilité du fonds : restitution read-only de l'audit + suggestions d'amélioration (nomenclature…).
🔒 Règle d'or, non négociable : tout est en lecture seule sur le Drive. Aucune écriture, aucun « rangement » automatique. On signale, Serpe agit.
Détail : refonte de la web app.
3. Le principe de génération (l'architecture clé)¶
L'analyse a montré que la trame Serpe est morte depuis 2022 : ce sont désormais les cadres clients qui imposent le plan, et le barème (points par rubrique) doit piloter l'effort (une rubrique à 45 pts mérite 3 pages, une à 5 pts un paragraphe). Ce qui reste stable, ce sont les thèmes de fond.
DCE reçu
├─► cadre de mémoire ──► rubriques + barème (points) ──► thème
└─► RC / CCTP ─────────► contexte (client, lieu, contraintes)
│
bibliothèque de blocs ─► sélection par thème ─► budget de mots ∝ points
(corpus + canonique) │
▼
fusion LLM (Gemini) → prose adaptée
▼
export .docx
Détail : intégration de l'audit.
4. Architecture technique¶
| Couche | Choix | Notes |
|---|---|---|
| Front / SSR | Nuxt 4 + @nuxt/ui v4 (template dashboard) |
pages sous app/pages/ |
| Auth | Supabase Auth — SSO Google restreint au domaine | trigger SQL enforce_email_domain (la vraie barrière, pas le hd client) |
| Base de données | Supabase (Postgres + pgvector) | 5 migrations 0001-0005, RLS cloisonnée par agence |
| Bibliothèque de blocs | table blocs (corpus RAG + canonique) |
1 776 blocs corpus + 6 canoniques ingérés |
| Génération IA | Vertex AI (Gemini) via google-auth-library |
provider swappable (server/utils/generation/) ; endpoint /api/generation/rubrique |
| Export | lib docx |
.docx aux standards Serpe (intégration des visuels visée) |
| Déploiement | Cloudflare Pages / Workers (preset Nitro cloudflare-pages) |
pas de filesystem → credentials Google en JSON inline sur Workers |
| Outillage | scripts tsx dans scripts/ |
audit Drive, ingestion, assemblage — lecture seule sur le Drive |
Détail : schéma de données, plan d'implémentation.
5. État d'avancement¶
Le socle est mergé dans main ; les chantiers suivants sont en Pull Request.
| Chantier | État | Où |
|---|---|---|
| Socle (Nuxt, auth SSO, schéma Supabase, provider Gemini, CI, Cloudflare) | ✅ mergé main |
PR #1 |
| Analyse métier & refonte (10 docs) | 🔵 en PR | PR #2 |
Vertical slice (1 section : cadre → blocs → Gemini → .docx) |
🔵 en PR | PR #3 |
Machinerie de génération (table blocs, ingestion 1 776, endpoint, bibliothèque canonique, assembleur de mémoire complet) |
🔵 en PR | PR #5 |
| Mockup de la refonte (éditeur cadre-piloté, observabilité, analyse, bibliothèque) | 🔵 en PR | PR #4 |
Câblage live (éditeur → endpoint → vraie génération → .docx) |
⏳ Jalon 3 | après Vertex |
| Données réelles déployées (Supabase prod, blocs) | 🟠 partiel | migrations + ingestion faites |
Base de données (réel, appliqué) : extensions vector/pg_trgm, tables
métier + RLS testée (cloisonnement par agence, rejet de domaine, provisioning),
1 776 blocs corpus + 6 canoniques ingérés.
Roadmap détaillée : plan d'implémentation.
Jalons¶
- Débloquer Vertex (facturation + API Vertex AI sur le projet GCP).
- Conforme : généraliser aux 12 thèmes → mémoire complet pour un vrai AO.
- Brancher Modules A & D sur les vraies données + bibliothèque canonique.
- Rebrancher l'éditeur (mockup) sur le pipeline réel + export
.docx. - Compétitif : références/visuels + apprentissage des mémoires gagnants.
6. L'audit du fonds documentaire¶
Un audit read-only des 12 Drives a cartographié le fonds. Chiffres clés :
275 134 fichiers · 718 Go · 2 952 mémoires techniques · 634 cadres ·
46 % de fichiers hors-sujet (normal). Sept faits contraignent la conception —
notamment : nomenclature à dérive orthographique, code affaire [Lettre][AA][NNNN]
comme seule clé fiable, et on ne sait pas quels mémoires ont gagné (1 382
perdus identifiés contre 8 gagnés — les agences classent les pertes, pas les
gains). Détail : intégration de l'audit.
7. Angles morts & questions en suspens¶
Tracés en issues GitHub :
1. Facturation Vertex AI (bloquant) — à activer sur le projet GCP.
2. Donnée win/loss — quelles affaires gagnées/perdues (export commercial ou
proxy « hors dossier Perdu = gagné » à confirmer).
3. Vrais RC/cadres récents — valider les pondérations et le mapping
rubrique → thème.
4. Formats legacy sur Workers (.doc/.odt) — extraction alternative.
5. 43 % des rubriques de cadre non rattachées à un thème — étendre la grille.
6. Variables d'environnement PROD Cloudflare à poser.
7. Convergence des branches dans main.
8. Où trouver quoi¶
- Code app :
app/(pages, composables, layouts) etserver/(API, génération). - Migrations :
supabase/migrations/. - Outillage :
scripts/(audit, ingestion, assemblage). - Documentation :
docs/(ce dossier). Sommaire : docs/README.md.