Documentation
Fonctionnement de LegalAgent IA — Architecture v3
Présentation générale
LegalAgent IA analyse automatiquement les contrats fournisseurs (PDF ou DOCX) et les compare à un référentiel d'exigences juridiques internes appelé Golden Rules.
L'outil ne remplace pas le juriste. Il produit un pré-diagnostic structuré : qualification des risques clause par clause, citations textuelles du contrat, identification des éléments manquants, suggestions de rédaction issues du clausier interne, et le cas échéant un mail d'escalade prêt à envoyer au service juridique.
Cas d'usage : analyser un nouveau contrat avant signature · identifier rapidement les clauses bloquantes sur un volume · préparer une revue juridique · enrichir le clausier via les retours juristes.
Concepts fondamentaux
Les Golden Rules
Une Golden Rule est une exigence contractuelle formalisée par le service juridique. Elle définit l'exigence précise (ce qui doit être dans le contrat), les niveaux de risque si absente ou partielle, les mots-clés associés, des exemples de rédaction conforme et non conforme, et les conditions d'applicabilité (segment, zone, incoterms, matières).
Certaines règles définissent des cross-rules : surcharges conditionnelles du niveau de risque selon le contexte. Exemple : la règle MACF (GR-003) est bloquante uniquement pour les matières azotées importées en Europe sous CFR/CIF/DAP/DDP.
L'approche rule-first
L'analyse est centrée sur les règles, pas sur les clauses. Pour chaque Golden Rule, l'outil cherche dans le contrat les clauses qui la couvrent — et non l'inverse.
Cette approche évite le principal défaut d'une analyse clause par clause : une clause peut couvrir plusieurs règles à la fois, et une clause manquante (un sujet jamais évoqué dans le contrat) est précisément le cas à détecter.
Pour chaque règle : → Quelles clauses du contrat traitent de ce sujet ? → Est-ce que ces clauses couvrent pleinement l'exigence ? → Sinon, qu'est-ce qui manque ?
Statuts d'une règle
| Statut | Signification |
|---|---|
compliant | L'exigence est pleinement couverte |
partial | Le sujet est abordé mais la couverture est insuffisante |
non_compliant | Une clause traite du sujet mais va à l'encontre de la règle |
missing | Aucune clause ne couvre ce sujet dans le contrat |
non_applicable | La règle ne s'applique pas à ce contrat (ex : règle assurance sur FOB, contrat en DAP) |
analysis_error | Incident technique lors de l'évaluation — ne génère jamais de gap juridique |
Les statuts partial, non_compliant et missing constituent des gaps et apparaissent dans le rapport.
Niveaux de risque
| Niveau | Signification | Verdict global |
|---|---|---|
bloquant | Exposition juridique ou financière majeure, signature déconseillée | escalation_required |
modéré | Lacune à corriger avant signature | modifications_required |
acceptable | Point de vigilance, négociable | modifications_required |
Le verdict est conforme uniquement si aucun gap n'est identifié.
La base de connaissance RAG
L'outil dispose d'une base vectorielle segmentée en plusieurs collections :
| Collection | Contenu |
|---|---|
clausier | Bibliothèque de clauses types générales |
clausier_n | Clauses types pour les engrais azotés (urée, ammoniac, UAN…) |
clausier_p | Clauses types pour les phosphates (DAP, MAP, TSP…) |
clausier_k | Clauses types pour la potasse (MOP, SOP, KCl…) |
contratheque | Précédents contractuels anonymisés |
validated_outputs | Analyses validées ou corrigées par des juristes |
La famille produit du contrat (N, P, K, MIXED, UNKNOWN) est détectée automatiquement à partir des matières et du segment. Elle détermine quelles collections sont interrogées en priorité.
La boucle de feedback
Après chaque analyse, un juriste peut valider, corriger ou rejeter le diagnostic sur chaque clause. Ces retours sont indexés et réutilisés comme exemples dans les analyses ultérieures (few-shot learning). L'outil améliore ainsi sa précision sans réentraînement.
Ce que produit l'outil
Rapport interactif
- Métadonnées extraites (fournisseur, segment, zone, incoterms, matières, valeur, type)
- Synthèse exécutive en langage naturel
- Verdict global avec compteurs de gaps par niveau
- Fiche détaillée pour chaque gap : type d'écart, citations verbatim, éléments manquants, alternative du clausier, précédent contractuel, analyse approfondie
- Liste des clauses conformes avec règle associée
- Traces LLM (modèles, tokens, temps) pour l'audit
Rapport PDF
Statistiques colorées, fiches de gaps par niveau de risque, tableau des conformités.
Mail d'escalade
Généré automatiquement si le verdict est escalation_required. Adressé au service juridique, synthétisant les points bloquants et les alternatives proposées.
Architecture technique
Vue d'ensemble
Interface web (Next.js)
↓ upload PDF/DOCX — réponse SSE temps réel
Backend (FastAPI / Python asyncio)
│
├── ContractParser extraction texte + segmentation clauses
├── MetadataExtractor fournisseur, segment, zone, famille produit
├── RulesEngine chargement des règles applicables
│
└── AnalysisOrchestrator fan-out sur les règles (10 en parallèle)
│
└── RuleEvaluator × N règles
├── RuleRetriever pré-filtrage des clauses
├── RULE_CHECKS regex déterministe
├── LLM (Claude) évaluation sémantique
└── ClauseSuggestionEngine alternatives clausier N/P/K
↓
RAGService (Qdrant)
Stockage
├── PostgreSQL analyses, golden rules, clausier, feedback
└── Qdrant clausier N/P/K, contrathèque, validated_outputsStack
| Composant | Technologie |
|---|---|
Frontend | Next.js 14, TypeScript, Tailwind CSS |
Backend | FastAPI, Python 3.12, asyncio, SQLAlchemy async |
LLM | OpenAI GPT-4o (évaluation) · GPT-4o mini (extraction légère) |
Embeddings | OpenAI text-embedding-3-large (3072 dimensions) |
Recherche vectorielle | Qdrant |
Base de données | PostgreSQL 16 |
Parsing PDF/DOCX | PyMuPDF, python-docx |
Export PDF | WeasyPrint + Jinja2 |
Pipeline d'analyse — étape par étape
Parsing
Extraction du texte brut, puis segmentation en clauses par détection de patterns structurels (Article N, Clause N, numérotation 1. / 1- / 1.1…). Le parseur évalue une qualité : structured (≥3 marqueurs), loose (1-2), flat(0 — découpe par paragraphes). Les scans PDF (pas de couche texte) sont rejetés.
Extraction des métadonnées
Un appel LLM léger extrait du texte brut : fournisseur, segment, zone, incoterms, matières, date, valeur du contrat, type (spot / frame / long_term). Les valeurs saisies dans le formulaire de l'interface ont priorité sur l'extraction automatique.
La famille produit (N, P, K, MIXED, UNKNOWN) est détectée sans LLM par correspondance sur des ensembles de signaux : N → urée/ammoniac/UAN/nitrate… ; P → DAP/MAP/TSP/phosphate… ; K → KCl/MOP/SOP/potasse…
Chargement des règles applicables
Les Golden Rules sont filtrées selon les conditions d'applicabilité (segment, zone, incoterms, matières). Seules les règles actives dont les conditions correspondent au contrat sont retenues.
Fan-out rule-first (évaluation parallèle)
Pour chaque règle applicable, une évaluation est lancée en parallèle (jusqu'à 10 simultanées). Chaque évaluation suit 6 sous-étapes :
mark_non_applicable. Si les conditions sont réunies, la règle est classée immédiatement sans appel LLM.analysis_error — jamais un faux missing.Fan-in et sanity check
Agrégation des résultats par catégorie : gaps (partial / non_compliant / missing), conforme, non_applicable, analysis_error. Les analysis_error sont logués en erreur et exclus des gaps.
Le sanity checker valide la cohérence : pas de gap sans raison, pas de risk_level sur un analysis_error, pas de citations vides.
Contrôle global
Un appel LLM détecte les incohérences inter-clauses : contradictions entre deux clauses du contrat sur un même sujet.
Synthèse et escalade
Verdict calculé de façon déterministe (0 gap → conforme, ≥1 bloquant → escalation_required, sinon → modifications_required). Synthèse exécutive générée par LLM. Si escalade requise, mail automatique pour le service juridique.
Module de feedback
Après chaque analyse, un juriste peut valider, corriger ou rejeter le diagnostic sur chaque clause depuis l'interface de revue. Pour une correction, il saisit une catégorie et une note libre.
| Catégorie | Description |
|---|---|
risque_sous_estime | Le risque identifié est moins grave que détecté |
risque_sur_estime | Le risque est surestimé |
justification_incomplete | L'analyse de l'écart manque de précision |
alternative_inadaptee | La clause proposée ne convient pas au contexte |
contexte_mal_compris | Le contexte métier du contrat a été mal interprété |
golden_rule_mal_appliquee | La règle a été appliquée de façon incorrecte |
precedent_non_pertinent | Le précédent cité n'est pas applicable |
Les corrections sont indexées dans la base vectorielle et réutilisées comme exemples dans les analyses futures portant sur les mêmes règles.
Administration
- Golden Rules : CRUD complet — texte d'exigence, niveaux de risque, conditions d'applicabilité, keywords, exemples, cross-rules.
- Clausier : Import de clauses types, activation/désactivation.
- Prompts LLM : Les prompts (system, rule_evaluation, clause_analysis, executive_summary, escalation_email) sont éditables sans redéploiement.
- Analytics feedback : Taux de validation, catégories d'erreurs les plus fréquentes, règles les plus corrigées.