4NK_IA_back/services/worker/tasks/verification_tasks.py
Nicolas Cantu 5ad559a263 feat: Intégration Celery et amélioration infrastructure
- Ajout de l'intégration Celery pour les tâches asynchrones
- Création des tâches spécialisées (OCR, classification, extraction, indexation, vérification)
- Configuration des queues Celery avec Redis
- Création du fichier d'environnement complet (.env.example et .env)
- Script bootstrap automatisé pour l'initialisation
- Amélioration du worker avec orchestration des pipelines
- Ajout des dépendances Celery et Kombu

Fonctionnalités ajoutées:
- Pipeline de traitement asynchrone avec Celery
- Tâches de traitement en lot
- Monitoring et health checks
- Configuration d'environnement centralisée
- Script d'initialisation automatisé
2025-09-10 18:26:53 +02:00

133 lines
4.3 KiB
Python

"""
Tâches de vérification et contrôle qualité
"""
import logging
from typing import Dict, Any
from services.worker.celery_app import app
logger = logging.getLogger(__name__)
@app.task(bind=True, name='verification.verify_document')
def verify_document(self, doc_id: str, entities: Dict[str, Any], doc_type: str, context: Dict[str, Any]) -> Dict[str, Any]:
"""
Vérification et contrôle qualité d'un document
Args:
doc_id: Identifiant du document
entities: Entités extraites
doc_type: Type de document
context: Contexte de traitement
Returns:
Résultat des vérifications
"""
try:
logger.info(f"Début des vérifications pour le document {doc_id}")
# Mise à jour du statut
self.update_state(
state='PROGRESS',
meta={'current_step': 'verification', 'progress': 0}
)
# TODO: Implémenter les vérifications réelles
# - Vérifications externes (Cadastre, Géorisques, BODACC, etc.)
# - Contrôles de cohérence
# - Calcul du score de vraisemblance
import time
time.sleep(2) # Simulation du traitement
# Vérifications simulées
verifications = {
'cadastre': {
'status': 'verified',
'confidence': 0.95,
'details': 'Adresse vérifiée dans le cadastre'
},
'georisques': {
'status': 'verified',
'confidence': 0.90,
'details': 'Aucun risque majeur identifié'
},
'bodacc': {
'status': 'verified',
'confidence': 0.85,
'details': 'Personnes vérifiées dans le BODACC'
}
}
# Calcul du score de vraisemblance
credibility_score = 0.90
result = {
'doc_id': doc_id,
'status': 'completed',
'verifications': verifications,
'credibility_score': credibility_score,
'manual_review_required': credibility_score < 0.75,
'processing_time': 2.0
}
logger.info(f"Vérifications terminées pour le document {doc_id} (score: {credibility_score})")
return result
except Exception as e:
logger.error(f"Erreur lors des vérifications du document {doc_id}: {e}")
raise
@app.task(name='verification.batch_verify')
def batch_verify_documents(doc_ids: list, entities_list: list, doc_types: list) -> Dict[str, Any]:
"""
Vérification en lot de documents
Args:
doc_ids: Liste des identifiants de documents
entities_list: Liste des entités correspondantes
doc_types: Liste des types de documents correspondants
Returns:
Résultats des vérifications en lot
"""
if len(doc_ids) != len(entities_list) or len(doc_ids) != len(doc_types):
raise ValueError("Le nombre de documents, entités et types doit être identique")
logger.info(f"Vérification en lot de {len(doc_ids)} documents")
results = []
for doc_id, entities, doc_type in zip(doc_ids, entities_list, doc_types):
try:
result = verify_document.delay(doc_id, entities, doc_type, {}).get()
results.append(result)
except Exception as e:
logger.error(f"Erreur lors de la vérification en lot pour {doc_id}: {e}")
results.append({
'doc_id': doc_id,
'status': 'failed',
'error': str(e)
})
return {
'batch_status': 'completed',
'total_documents': len(doc_ids),
'results': results
}
@app.task(name='verification.update_external_data')
def update_external_data():
"""
Mise à jour des données externes (APIs gouvernementales)
"""
logger.info("Mise à jour des données externes")
# TODO: Implémenter la mise à jour des données externes
# - Synchronisation avec les APIs gouvernementales
# - Mise à jour des caches
# - Actualisation des référentiels
return {
'status': 'completed',
'updated_sources': ['cadastre', 'georisques', 'bodacc'],
'timestamp': '2025-01-09T10:00:00Z'
}