
- Infrastructure complète de traitement de documents notariaux - API FastAPI d'ingestion et d'orchestration - Pipelines Celery pour le traitement asynchrone - Support des formats PDF, JPEG, PNG, TIFF, HEIC - OCR avec Tesseract et correction lexicale - Classification automatique des documents avec Ollama - Extraction de données structurées - Indexation dans AnythingLLM et OpenSearch - Système de vérifications et contrôles métier - Base de données PostgreSQL pour le métier - Stockage objet avec MinIO - Base de données graphe Neo4j - Recherche plein-texte avec OpenSearch - Supervision avec Prometheus et Grafana - Scripts d'installation pour Debian - Documentation complète - Tests unitaires et de performance - Service systemd pour le déploiement - Scripts de déploiement automatisés
300 lines
6.2 KiB
Markdown
300 lines
6.2 KiB
Markdown
# 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
|
|
|
|
1. **Préprocessing** : Validation et préparation des documents
|
|
2. **OCR** : Extraction de texte avec correction lexicale
|
|
3. **Classification** : Identification du type de document
|
|
4. **Extraction** : Extraction de données structurées
|
|
5. **Indexation** : Indexation dans AnythingLLM et OpenSearch
|
|
6. **Vérifications** : Contrôles métier et validation
|
|
7. **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
|
|
|
|
```bash
|
|
# Installation des dépendances
|
|
sudo bash ops/install-debian.sh
|
|
|
|
# Reconnectez-vous ou exécutez
|
|
newgrp docker
|
|
```
|
|
|
|
|
|
### Configuration
|
|
|
|
1. Cloner le dépôt
|
|
2. Copier le fichier d'environnement :
|
|
```bash
|
|
cp infra/.env.example infra/.env
|
|
```
|
|
3. Modifier les variables dans `infra/.env`
|
|
4. Initialiser l'infrastructure :
|
|
```bash
|
|
make bootstrap
|
|
```
|
|
|
|
## Utilisation
|
|
|
|
### Démarrage des services
|
|
|
|
```bash
|
|
# Démarrer tous les services
|
|
make up
|
|
|
|
# Vérifier le statut
|
|
make ps
|
|
|
|
# Voir les logs
|
|
make logs
|
|
```
|
|
|
|
### Import d'un document
|
|
|
|
```bash
|
|
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` :
|
|
|
|
```bash
|
|
# 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 document
|
|
- `GET /api/documents/{id}` : Récupération d'un document
|
|
- `GET /api/documents` : Liste des documents
|
|
- `GET /api/health` : Santé de l'API
|
|
- `GET /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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# Mise à jour des images
|
|
make build
|
|
|
|
# Redémarrage des services
|
|
make restart
|
|
```
|
|
|
|
## Dépannage
|
|
|
|
### Logs
|
|
|
|
```bash
|
|
# Logs de tous les services
|
|
make logs
|
|
|
|
# Logs d'un service spécifique
|
|
docker compose logs -f host-api
|
|
```
|
|
|
|
### Vérification de santé
|
|
|
|
```bash
|
|
# Statut des services
|
|
make status
|
|
|
|
# Test de connectivité
|
|
curl http://localhost:8000/api/health
|
|
```
|
|
|
|
### Problèmes courants
|
|
|
|
1. **Modèles Ollama non téléchargés** : Vérifier la connectivité et relancer le bootstrap
|
|
2. **Erreurs MinIO** : Vérifier les credentials et la connectivité
|
|
3. **Problèmes de mémoire** : Augmenter les limites Docker
|
|
4. **Erreurs OCR** : Vérifier l'installation de Tesseract
|
|
|
|
## Contribution
|
|
|
|
1. Fork le projet
|
|
2. Créer une branche feature
|
|
3. Commiter les changements
|
|
4. Pousser vers la branche
|
|
5. 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
|