Architecture Agentique Neo4j pour la Prévention SST
Système multi-agents de nouvelle génération combinant graphes de connaissances Neo4j et intelligence artificielle pour l'analyse prédictive des lésions professionnelles au Québec (CNESST, IRSST)
Pipeline complet d'ingestion, structuration et analyse prédictive avec Neo4j, Kafka, et agents IA
┌─────────────────────────────────────────────────────────────────┐ │ COUCHE ACQUISITION DONNÉES │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ CNESST │ │ IRSST │ │ Capteurs │ │ Système │ │ │ │Open Data │ │Publications│ │ IoT │ │ RH │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ └───────┼─────────────┼──────────────┼──────────────┼──────────────┘ │ │ │ │ ▼ ▼ ▼ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ COUCHE INGESTION & TRANSFORMATION │ │ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ Apache Kafka (Event Streaming Bus) │ │ │ │ Topics: cnesst_raw, irsst_docs, iot_events, rh_updates │ │ │ └────────────────────┬─────────────────────────────────────┘ │ │ │ │ │ ┌────────────────────▼─────────────────────────────────────┐ │ │ │ Pipeline ETL/ELT (Apache Spark + Python) │ │ │ │ • Validation • Normalisation • Enrichissement │ │ │ │ • Anonymisation • Géocodage • Taxonomie │ │ │ └────────────────────┬─────────────────────────────────────┘ │ └────────────────────────┼──────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ COUCHE GRAPHE DE CONNAISSANCES │ │ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ Neo4j Aura Enterprise (v5.x) │ │ │ │ │ │ │ │ ╔════════════════════════════════════════════════════╗ │ │ │ │ ║ MODÈLE GRAPHE SAFETYGRAPH (12 entités-clés) ║ │ │ │ │ ╠════════════════════════════════════════════════════╣ │ │ │ │ ║ • Travailleur • Zone_Travail • Équipement ║ │ │ │ │ ║ • Incident_CNESST • Near_Miss • Agent_IA ║ │ │ │ │ ║ • Capteur_IoT • Formation • Procédure ║ │ │ │ │ ║ • Document_IRSST • Norme_ISO • Événement ║ │ │ │ │ ╠════════════════════════════════════════════════════╣ │ │ │ │ ║ 793,000+ incidents • 25+ types relations ║ │ │ │ │ ║ Vector Search activé • Graph Analytics ║ │ │ │ │ ╚════════════════════════════════════════════════════╝ │ │ │ └────────────────────┬─────────────────────────────────────┘ │ └────────────────────────┼──────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ COUCHE AGENTS INTELLIGENTS │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Agent A1 │ │ Agent A2 │ │ Agent A3 │ │ Agent A4 │ │ │ │ Vision │ │ IoT │ │ Contexte │ │ ML │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ │ │ │ │ │ └─────────────┴──────────────┴──────────────┘ │ │ │ │ │ ┌────────▼────────┐ │ │ │ Agent Maestro │ │ │ │ (Orchestrateur)│ │ │ └────────┬────────┘ │ │ │ │ │ ┌────────▼────────┐ │ │ │ Agent A5 │ │ │ │ Notification │ │ │ └─────────────────┘ │ └─────────────────────────────────────────────────────────────────┘
Incident Terrain → Capteur IoT / Caméra → Kafka → Agents A1/A2 → Agent A3 Contexte (requêtes Neo4j) → Agent A4 Prédiction (ML) → Maestro Decision → Agent A5 Notification → Superviseur/Travailleur
12 entités-clés interconnectées avec 25+ types de relations pour analyse contextuelle avancée
// Exemple Requête Cypher : Enrichissement Contexte MATCH (e:Evenement {id: 'EVT_2025_10_26_142318'}) MATCH (e)-[:IMPLIQUE]->(t:Travailleur) MATCH (e)-[:SURVIENT_DANS]->(z:Zone_Travail) // Historique incidents travailleur (90 jours) OPTIONAL MATCH (t)<-[:IMPLIQUE]-(i_t:Incident_CNESST) WHERE i_t.date_incident > datetime() - duration({days: 90}) // Historique near-miss (30 jours) OPTIONAL MATCH (t)<-[:CONCERNE]-(nm:Near_Miss) WHERE nm.date_detection > datetime() - duration({days: 30}) // Formations valides OPTIONAL MATCH (t)-[:PARTICIPE_A]->(f:Formation) WHERE f.date_expiration > date() RETURN { travailleur: { nb_incidents_historique: count(DISTINCT i_t), nb_near_miss_30j: count(DISTINCT nm), formations_valides: collect(DISTINCT f.titre) }, zone: { score_risque_dynamique: z.score_risque_dynamique, risques_identifies: z.risques_identifies } } AS contexte_enrichi
5 agents autonomes orchestrés par Maestro pour détection, analyse et prédiction temps réel
Analyse vidéo temps réel avec YOLOv8 Pose Estimation pour détecter postures dangereuses (flexion dos, bras élevés) selon ISO/TR 12295 et calcul OCRA Index.
Analyse continue via bracelets connectés : fréquence cardiaque, variabilité HRV, température cutanée pour détection fatigue et stress.
Enrichit événements temps réel avec historique graphe : incidents passés, near-miss, formations, équipements. Recherche similarité vectorielle.
Prédit probabilité incident à 7 jours avec XGBoost, LightGBM, GNN. Estimation gravité et recommandations actions SHAP-expliquées.
Coordonne tous les agents, gère états workflows (Kafka event bus), résout conflits, applique logique métier, monitoring santé système, retry/circuit breaker.
Routage alertes selon priorité (P1/P2/P3) vers superviseurs, travailleurs, CoSS. Canaux : SMS (Twilio), Push (Firebase), Email (SendGrid), Dashboard temps réel.
Pipeline orchestré par Maestro : détection → enrichissement → prédiction → alerte
Modèles ML entraînés sur 793K+ incidents CNESST pour prédiction probabiliste et estimation gravité
Modèle de classification binaire : incident probable / non-probable dans les 7 jours suivants. Features : historique 90j, near-miss 30j, fatigue, postures, équipements, formations.
Modèle de régression : score gravité 1-10 (aligné échelle CNESST). Prend en compte type lésion probable, partie corps, contexte, historique similaire.
Respect strict LSST, ISO/TR 12295, Loi 25/RGPD, C-25 Standards avec audit trail complet
// Auto-génération déclaration CNESST (Python) def generate_cnesst_declaration(incident_id): with neo4j_driver.session() as session: # Requête incident complet incident_data = session.run(""" MATCH (i:Incident_CNESST {id: $incident_id}) MATCH (i)-[:IMPLIQUE]->(t:Travailleur) MATCH (i)-[:SURVIENT_DANS]->(z:Zone_Travail) RETURN i, t, z """, incident_id=incident_id).single() # Formulaire CNESST cnesst_form = { 'no_dossier': incident_data['i']['no_dossier_cnesst'], 'date_incident': incident_data['i']['date_incident'].isoformat(), 'lesion': { 'nature': incident_data['i']['nature_lesion'], 'gravite': incident_data['i']['gravite'] } } # Envoi API CNESST response = requests.post( 'https://api.cnesst.gouv.qc.ca/declarations', json=cnesst_form ) return response.status_code == 200
Impacts quantifiables sur réduction incidents, coûts SST, et conformité réglementaire
Rejoignez les entreprises innovantes qui ont choisi SafetyGraph pour réduire drastiquement leurs accidents de travail et créer un environnement plus sûr pour leurs employés.
📧 tech@genaisafety.com | 📞 1-800-SST-SAFE | 🌐 safetygraph.genaisafety.com