Pipeline Notarial - Infrastructure as Code
Vue d'ensemble
Ce projet implémente un pipeline complet de traitement de documents notariaux en infrastructure as code. Il permet l'ingestion, le préprocessing, l'OCR, la classification, l'extraction de données, l'indexation et la recherche de documents notariaux.
Architecture
Composants principaux
- host-api : API FastAPI d'ingestion et d'orchestration
- worker : Tâches asynchrones Celery pour le traitement
- PostgreSQL : Base de données métier
- MinIO : Stockage objet S3-compatible
- Redis : Queue de messages et cache
- Ollama : Modèles LLM locaux
- AnythingLLM : Workspaces et embeddings
- Neo4j : Base de données graphe pour les contextes
- OpenSearch : Recherche plein-texte
- Prometheus + Grafana : Supervision et métriques
Pipeline de traitement
- Préprocessing : Validation et préparation des documents
- OCR : Extraction de texte avec correction lexicale
- Classification : Identification du type de document
- Extraction : Extraction de données structurées
- Indexation : Indexation dans AnythingLLM et OpenSearch
- Vérifications : Contrôles métier et validation
- Finalisation : Mise à jour de la base de données
Installation
Prérequis
- Docker et Docker Compose
- 8 Go de RAM minimum
- 20 Go d'espace disque
Installation automatique
Debian/Ubuntu
# Installation des dépendances
sudo bash ops/install-debian.sh
# Reconnectez-vous ou exécutez
newgrp docker
Configuration
- Cloner le dépôt
- Copier le fichier d'environnement :
cp infra/.env.example infra/.env
- Modifier les variables dans
infra/.env
- Initialiser l'infrastructure :
make bootstrap
Utilisation
Démarrage des services
# Démarrer tous les services
make up
# Vérifier le statut
make ps
# Voir les logs
make logs
Import d'un document
curl -F "file=@mon_document.pdf" \
-F "id_dossier=D-2025-001" \
-F "source=upload" \
-F "etude_id=E-001" \
-F "utilisateur_id=U-123" \
http://localhost:8000/api/import
Accès aux interfaces
- API : http://localhost:8000/api
- AnythingLLM : http://localhost:3001
- Grafana : http://localhost:3000
- MinIO Console : http://localhost:9001
- Neo4j Browser : http://localhost:7474
- OpenSearch : http://localhost:9200
Configuration
Variables d'environnement
Les principales variables à configurer dans infra/.env
:
# Base de données
POSTGRES_USER=notariat
POSTGRES_PASSWORD=notariat_pwd
POSTGRES_DB=notariat
# MinIO
MINIO_ROOT_USER=minio
MINIO_ROOT_PASSWORD=minio_pwd
MINIO_BUCKET=ingest
# AnythingLLM
ANYLLM_API_KEY=change_me
ANYLLM_BASE_URL=http://anythingllm:3001
# Ollama
OLLAMA_BASE_URL=http://ollama:11434
OLLAMA_MODELS=llama3:8b,mistral:7b
# Neo4j
NEO4J_AUTH=neo4j/neo4j_pwd
# OpenSearch
OPENSEARCH_PASSWORD=opensearch_pwd
Modèles Ollama
Les modèles sont téléchargés automatiquement au bootstrap :
- llama3:8b (recommandé)
- mistral:7b (alternative)
API
Endpoints principaux
POST /api/import
: Import d'un documentGET /api/documents/{id}
: Récupération d'un documentGET /api/documents
: Liste des documentsGET /api/health
: Santé de l'APIGET /api/admin/stats
: Statistiques
Formats supportés
- PDF (avec ou sans texte)
- Images : JPEG, PNG, TIFF, HEIC
Types de documents supportés
- Actes de vente immobilière
- Actes d'achat immobilière
- Donations
- Testaments
- Successions
- Contrats de mariage
- Procurations
- Attestations
- Factures notariales
Supervision
Métriques Prometheus
- Taux d'erreur par étape
- Latence de traitement
- Qualité OCR (CER/WER)
- Précision de classification
- Performance d'extraction
Dashboards Grafana
- Vue d'ensemble du pipeline
- Métriques de performance
- Qualité des traitements
- Utilisation des ressources
Développement
Structure du projet
notariat-pipeline/
├── docker/ # Dockerfiles
├── infra/ # Docker Compose et configuration
├── ops/ # Scripts d'installation et seeds
├── services/ # Code applicatif
│ ├── host_api/ # API FastAPI
│ ├── worker/ # Pipelines Celery
│ └── charts/ # Dashboards Grafana
└── tests/ # Tests automatisés
Tests
# Tests unitaires
pytest tests/
# Tests d'intégration
pytest tests/integration/
# Tests de performance
locust -f tests/performance/locustfile.py
Sécurité
Chiffrement
- Chiffrement des volumes Docker
- Chiffrement applicatif des données sensibles
Cloisonnement
- Séparation par étude via workspaces
- Index nommés par étude
- Labels Neo4j par contexte
Audit
- Journaux structurés JSON
- Traçabilité complète des traitements
- Horodatage et versions
Maintenance
Sauvegarde
# Sauvegarde de la base de données
docker exec postgres pg_dump -U notariat notariat > backup.sql
# Sauvegarde des volumes
docker run --rm -v notariat_pgdata:/data -v $(pwd):/backup alpine tar czf /backup/pgdata.tar.gz -C /data .
Mise à jour
# Mise à jour des images
make build
# Redémarrage des services
make restart
Dépannage
Logs
# Logs de tous les services
make logs
# Logs d'un service spécifique
docker compose logs -f host-api
Vérification de santé
# Statut des services
make status
# Test de connectivité
curl http://localhost:8000/api/health
Problèmes courants
- Modèles Ollama non téléchargés : Vérifier la connectivité et relancer le bootstrap
- Erreurs MinIO : Vérifier les credentials et la connectivité
- Problèmes de mémoire : Augmenter les limites Docker
- Erreurs OCR : Vérifier l'installation de Tesseract
Contribution
- Fork le projet
- Créer une branche feature
- Commiter les changements
- Pousser vers la branche
- Ouvrir une Pull Request
Licence
MIT License - voir le fichier LICENSE pour plus de détails.
Support
Pour toute question ou problème :
- Ouvrir une issue sur GitHub
- Consulter la documentation
- Contacter l'équipe de développement
Description
Languages
Python
89.5%
Shell
8.2%
Makefile
1.8%
Dockerfile
0.5%