- 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é
133 lines
4.3 KiB
Python
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'
|
|
}
|