Documentation — Base contractuelle
Contrats fournisseurs et CGV : upload PDF/DOCX/TXT, analyse IA (métadonnées, engagements, risques), consultation et filtres par workspace (Service 1 / Service 2).
Les modules Blueprint Modular font partie de l'application Next.js. Il n'y a pas de package séparé par module (pas de pip install blueprint-modular-contracts ni npm install blueprint-modular-contracts) : on installe l'application une fois, puis on configure les variables d'environnement et les services (base PostgreSQL, Ollama pour l'analyse IA). Cette documentation décrit comment installer le module Base contractuelle et toutes ses dépendances (Node, Prisma, extraction PDF/DOCX/TXT, serveur Ollama), comment il fonctionne, comment le paramétrer (workspace, type de contrat, taille max, variables d'environnement) et comment l'utiliser (interface ou API).
Comment fonctionne le module Base contractuelle
Le module permet d'uploader des contrats (PDF, DOCX, TXT), de les analyser automatiquement via l'IA (Ollama / Qwen par défaut) pour extraire métadonnées, engagements, risques et niveau de risque, puis de les consulter et filtrer par workspace (Service 1, Service 2) et par type (fournisseur, CGV, autre). Chaque contrat est stocké en base (PostgreSQL) et le fichier sur disque ; l'analyse est lancée à l'upload et le résultat est sauvegardé dans extracted_data. Un doublon (même hash de fichier) est refusé. Optionnellement, un embedding est généré en arrière-plan pour la recherche sémantique.
- Workspace : à l'upload, vous choisissez
service1ouservice2. Les filtres de la liste permettent d'afficher un seul workspace ou tous. - Type de contrat :
supplier(fournisseur),cgv(CGV),other. Utilisé pour adapter le prompt d'analyse IA. - Statut : pending → analyzing → done (ou error). La liste se rafraîchit tant qu'un contrat est en cours d'analyse.
Installation et dépendances
Le module fait partie de l'application Next.js. Dépendances Node incluses : mammoth (DOCX), pdf-parse (PDF), extraction de texte et client Ollama (lib/ai/vllm-client, lib/ai/contract-analyzer). Pour l'analyse IA (métadonnées, engagements, risques), un serveur Ollama est requis.
Résumé des commandes (installer le module et toutes les dépendances)
# 1. Dépendances Node et base PostgreSQL
npm install
npx prisma generate --schema=prisma/schema.prisma
npx prisma migrate deploy
# 2. Serveur IA pour l'analyse des contrats (Ollama)
ollama serve
ollama pull qwen3:8b
# 3. Lancer l'app
npm run dev
# 4. Ouvrir le module Base contractuelle
# http://localhost:3000/modules/contractsDéfinir dans .env : DATABASE_URL, AI_SERVER_URL (ex. http://localhost:11434), AI_MODEL (ex. qwen3:8b). Sans Ollama : AI_MOCK=true (l'upload fonctionne mais l'analyse restera en erreur ou analyzing).
Serveur IA pour l'analyse des contrats
L'analyse (métadonnées, risques, engagements) est effectuée par le client Ollama (lib/ai/vllm-client). Sans serveur, l'upload fonctionne mais le statut restera en erreur ou analyzing. Pour activer l'analyse :
# Lancer Ollama et télécharger le modèle (ex. Qwen3)
ollama serve
ollama pull qwen3:8bDans .env : AI_SERVER_URL=http://localhost:11434, AI_MODEL=qwen3:8b. En dev sans serveur : AI_MOCK=true (les analyses échoueront ou seront mockées selon le code).
Où sont sauvegardés les contrats
Base de données : table Contract (id, title, contractType, workspace, filePath, fileHash, originalFilename, status, analysisProgress, extractedData, analyzedAt, embeddingVector, uploadedById, etc.). Fichiers : stockés sur le disque dans uploads/contracts/[userId]/[contractId].[ext]. Le répertoire doit être accessible en écriture par le serveur Next.js. Ne pas exposer uploads/ directement en production ; les fichiers sont servis ou téléchargés via l'API si besoin.
Comment charger et utiliser le module
Charger : le module est intégré à l'app ; après npm install et prisma migrate deploy, il est disponible. Utiliser : depuis l'interface, ouvrez /modules/contracts pour uploader des contrats (PDF, DOCX, TXT), choisir workspace (Service 1 / Service 2) et type (fournisseur, CGV, autre), et consulter la liste avec filtres ; depuis du code, POST /api/contracts (FormData : file, workspace, contractType), GET /api/contracts (query : workspace, contractType, status).
Variables d'environnement et paramétrage
DATABASE_URL— Connexion PostgreSQL (obligatoire).AI_SERVER_URL,AI_MODEL— Serveur Ollama pour l'analyse (ex.http://localhost:11434,qwen3:8b).AI_MOCK—truepour désactiver les appels réels (dév ; l'analyse échouera ou sera mockée).- Workspace : à l'upload, champ
workspace(service1 | service2). Défaut :service1. - Type de contrat :
contractType(supplier | cgv | other). Défaut :other. - Taille max fichier : 50 Mo par défaut (constante dans
app/api/contracts/route.ts). En cas d'erreur 413, augmenter la limite côté proxy (ex. nginxclient_max_body_size). - Formats acceptés : PDF, DOCX, TXT (MIME vérifié côté API).
Base de données et prérequis production : table Contract, variables d'environnement et déploiement détaillés dans docs/DATABASE.md du dépôt.
API (résumé)
GET /api/contracts— Liste des contrats de l'utilisateur. Query :workspace,contractType,status.POST /api/contracts— Upload d'un contrat. FormData :file,workspace,contractType. Réponse : contrat créé (analyse lancée en synchrone).GET /api/contracts/[id]— Détail d'un contrat (métadonnées, extracted_data).POST /api/contracts/[id]/reanalyze— Relancer l'analyse IA.GET /api/contracts/search— Recherche (ex. par embedding) si implémentée.