# 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