LegalAgent IA

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

StatutSignification
compliantL'exigence est pleinement couverte
partialLe sujet est abordé mais la couverture est insuffisante
non_compliantUne clause traite du sujet mais va à l'encontre de la règle
missingAucune clause ne couvre ce sujet dans le contrat
non_applicableLa règle ne s'applique pas à ce contrat (ex : règle assurance sur FOB, contrat en DAP)
analysis_errorIncident 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

NiveauSignificationVerdict global
bloquantExposition juridique ou financière majeure, signature déconseilléeescalation_required
modéréLacune à corriger avant signaturemodifications_required
acceptablePoint de vigilance, négociablemodifications_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 :

CollectionContenu
clausierBibliothèque de clauses types générales
clausier_nClauses types pour les engrais azotés (urée, ammoniac, UAN…)
clausier_pClauses types pour les phosphates (DAP, MAP, TSP…)
clausier_kClauses types pour la potasse (MOP, SOP, KCl…)
contrathequePrécédents contractuels anonymisés
validated_outputsAnalyses 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_outputs

Stack

ComposantTechnologie
FrontendNext.js 14, TypeScript, Tailwind CSS
BackendFastAPI, Python 3.12, asyncio, SQLAlchemy async
LLMOpenAI GPT-4o (évaluation) · GPT-4o mini (extraction légère)
EmbeddingsOpenAI text-embedding-3-large (3072 dimensions)
Recherche vectorielleQdrant
Base de donnéesPostgreSQL 16
Parsing PDF/DOCXPyMuPDF, python-docx
Export PDFWeasyPrint + Jinja2

Pipeline d'analyse — étape par étape

1

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.

2

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…

3

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.

4

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 :

a.
Non-applicable checkVérifie les conditions des cross-rules marquées mark_non_applicable. Si les conditions sont réunies, la règle est classée immédiatement sans appel LLM.
b.
Retrieval ciblé (RuleRetriever)Au lieu d'envoyer tout le contrat au LLM, on sélectionne 8 clauses candidates par règle : score d'overlap keyword (fr + en + mots du titre), top-8 + voisines immédiates + clauses spéciales (annexes, définitions). Évite la troncature et les faux missing.
c.
Checks déterministes (RULE_CHECKS)Pour chaque règle (GR-001 à GR-010), un registre de vérifications par regex est appliqué sur les clauses candidates : signaux présents/absents, valeurs extraites (pourcentages, délais, noms de normes). Le résultat est transmis au LLM comme hint pour orienter son interprétation.
d.
Appel LLM d'évaluationLe LLM reçoit le contexte du contrat, la règle, le hint déterministe et les 8 clauses candidates. Il identifie les clauses pertinentes, évalue le statut, extrait les citations verbatim, liste les éléments manquants et rédige une raison factuelle. En cas d'échec de parsing JSON, le résultat est analysis_error — jamais un faux missing.
e.
Suggestion clausier N/P/K (ClauseSuggestionEngine)Interroge les collections Qdrant adaptées à la famille produit et propose jusqu'à 3 alternatives de rédaction, classées par score composite : famille exacte (+0.40), validé juridique (+0.25), source officielle (+0.20), zone (+0.15), incoterm (+0.10).
f.
Justification LLMUn second appel génère une analyse approfondie de l'écart, enrichie par le précédent contractuel disponible et les exemples validés par le juridique (few-shot).
5

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.

6

Contrôle global

Un appel LLM détecte les incohérences inter-clauses : contradictions entre deux clauses du contrat sur un même sujet.

7

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égorieDescription
risque_sous_estimeLe risque identifié est moins grave que détecté
risque_sur_estimeLe risque est surestimé
justification_incompleteL'analyse de l'écart manque de précision
alternative_inadapteeLa clause proposée ne convient pas au contexte
contexte_mal_comprisLe contexte métier du contrat a été mal interprété
golden_rule_mal_appliqueeLa règle a été appliquée de façon incorrecte
precedent_non_pertinentLe 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.