"Quelles sont les zones de travail en hauteur présentant le plus grand risque de chute au cours des 30 derniers jours, en tenant compte des incidents passés, des permis actifs et de l'absence de formation appropriée des travailleurs ?"
📊 Catégorie : Travail en Hauteur | Prévention des Chutes | Analyse Prédictive
"Quelles sont les zones de travail en hauteur présentant le plus grand risque de chute au cours des 30 derniers jours, en tenant compte des incidents passés, des permis actifs et de l'absence de formation appropriée des travailleurs ?"
Type de site : Sites industriels avec opérations en hauteur (construction, maintenance, entrepôts logistiques, installations pétrolières et gazières)
Données sources :
Acteurs impliqués :
Visualisation des entités et relations utilisées dans cette analyse :
MATCH (proj:Project)-[:HAS_ZONE]->(zone:Zone)
Filtrage: workAtHeight = trueCollecte des incidents (chutes, near-miss) sur 30 jours
Score: incidents × 3.0Validation des permis work_at_height valides
Bonus: permis × -0.5Vérification certifications fall_protection, scaffold
Pénalité: non-certifiés × 2.0Contrôle harnais, lignes de vie, garde-corps
Pénalité: non-inspectés × 1.5Agrégation pondérée de tous les facteurs
Tri des zones par score décroissant
// ═══════════════════════════════════════════════════════════════════════════
// USE CASE #01 : Détection des Risques de Chute en Hauteur
// Objectif : Identifier les zones critiques nécessitant une intervention
// Période : 30 derniers jours | Seuil : hauteur ≥ 2m (OSHA/CNESST)
// ═══════════════════════════════════════════════════════════════════════════
// 🎯 ÉTAPE 1 : SÉLECTION DU CONTEXTE (Project → Zone)
MATCH (proj:Project {id: $projectId})
-[:HAS_ZONE]->(zone:Zone)
WHERE zone.workAtHeight = true
AND zone.height >= $minHeight // Hauteur minimale de risque
// ─────────────────────────────────────────────────────────────────────────
// 📊 ÉTAPE 2 : ANALYSE HISTORIQUE DES INCIDENTS
// Collecte : 30 derniers jours • Types : fall, near_miss_fall, height_related
// Impact score : incidents × 3.0 (facteur pondération élevé)
// ─────────────────────────────────────────────────────────────────────────
OPTIONAL MATCH (zone)<-[:OCCURRED_IN]-(incident:Incident)
WHERE incident.timestamp >= datetime() - duration({days: $lookbackDays})
AND incident.category IN ['fall', 'near_miss_fall', 'height_related']
WITH zone,
count(incident) AS incidentCount,
collect(incident.severity) AS severities
// ─────────────────────────────────────────────────────────────────────────
// 📋 ÉTAPE 3 : VÉRIFICATION CONFORMITÉ DES PERMIS
// Statuts valides : active, pending • Expiration vérifiée
// Impact score : -0.5 par permis actif (facteur de protection)
// ─────────────────────────────────────────────────────────────────────────
OPTIONAL MATCH (zone)<-[:APPLIES_TO]-(permit:Permit)
WHERE permit.status IN ['active', 'pending']
AND permit.type IN ['work_at_height', 'hot_work_elevated']
AND permit.expiryDate > datetime()
WITH zone, incidentCount, severities,
count(permit) AS activePermits,
collect(permit) AS permits
// ─────────────────────────────────────────────────────────────────────────
// 👷 ÉTAPE 4 : ANALYSE DES COMPÉTENCES TRAVAILLEURS
// Certifications requises : fall_protection, scaffold, aerial_lift
// Impact score : +2.0 par travailleur NON certifié (pénalité)
// ─────────────────────────────────────────────────────────────────────────
OPTIONAL MATCH (zone)<-[:ASSIGNED_TO]-(worker:Worker)
WHERE worker.status = 'active'
OPTIONAL MATCH (worker)-[:HAS_CERTIFICATION]->(cert:Certification)
WHERE cert.type IN ['fall_protection', 'scaffold', 'aerial_lift']
AND cert.expiryDate > datetime()
WITH zone, incidentCount, severities, activePermits, permits,
count(DISTINCT worker) AS totalWorkers,
count(DISTINCT cert) AS certifiedWorkers
// ─────────────────────────────────────────────────────────────────────────
// 🛡️ ÉTAPE 5 : INSPECTION DES ÉQUIPEMENTS DE PROTECTION
// Types EPI : fall_protection, harness, lifeline, guardrail
// Impact score : +1.5 par équipement NON inspecté récemment
// ─────────────────────────────────────────────────────────────────────────
OPTIONAL MATCH (zone)-[:USES_EQUIPMENT]->(equip:Asset)
WHERE equip.category IN ['fall_protection', 'harness', 'lifeline', 'guardrail']
OPTIONAL MATCH (equip)<-[:INSPECTED]-(inspection:Inspection)
WHERE inspection.timestamp >= datetime() - duration({days: 30})
WITH zone, incidentCount, severities, activePermits, permits,
totalWorkers, certifiedWorkers,
count(DISTINCT equip) AS totalEquipment,
count(DISTINCT inspection) AS inspectedEquipment
// ─────────────────────────────────────────────────────────────────────────
// 🎲 ÉTAPE 6 : CALCUL DU SCORE DE RISQUE COMPOSITE
// Formule algorithmique pondérée :
// • Incidents passés : × 3.0 (forte corrélation risque)
// • Travailleurs non certifiés: × 2.0 (compétence insuffisante)
// • Équipements non inspectés : × 1.5 (défaillance matérielle)
// • Permis actifs conformes : × -0.5 (facteur de contrôle)
// ─────────────────────────────────────────────────────────────────────────
WITH zone, incidentCount, severities, activePermits,
totalWorkers, certifiedWorkers, totalEquipment, inspectedEquipment,
// 🧮 Application de la formule
(incidentCount * 3.0) +
((totalWorkers - certifiedWorkers) * 2.0) +
((totalEquipment - inspectedEquipment) * 1.5) -
(activePermits * 0.5) AS riskScore
WHERE riskScore >= $riskThreshold // ⚠️ Filtre seuil d'alerte
// ─────────────────────────────────────────────────────────────────────────
// 🎯 ÉTAPE 7 : STRUCTURATION ET TRI DES RÉSULTATS
// Classification : CRITIQUE (≥15) | ÉLEVÉ (≥10) | MODÉRÉ (≥5) | FAIBLE (<5)
// Tri : Score décroissant pour priorisation des interventions
// ─────────────────────────────────────────────────────────────────────────
RETURN
// 📍 Identification de la zone
zone.id AS zoneId,
zone.name AS zoneName,
zone.height AS heightMeters,
zone.location AS coordinates,
// 📊 Métriques de risque agrégées
round(riskScore, 2) AS riskScore,
incidentCount,
size([s IN severities WHERE s = 'critical']) AS criticalIncidents,
// 👷 Taux de conformité formation
totalWorkers,
certifiedWorkers,
round((toFloat(certifiedWorkers) / totalWorkers * 100.0), 1) AS certificationRate,
// 🛡️ État des équipements protection
totalEquipment,
inspectedEquipment,
(totalEquipment - inspectedEquipment) AS overdueInspections,
// 📋 Couverture permis
activePermits,
// ⚠️ Classification intelligente du risque
CASE
WHEN riskScore >= 15 THEN 'CRITIQUE' // 🔴 Intervention immédiate
WHEN riskScore >= 10 THEN 'ÉLEVÉ' // 🟠 Priorisation haute
WHEN riskScore >= 5 THEN 'MODÉRÉ' // 🟡 Surveillance renforcée
ELSE 'FAIBLE' // 🟢 Contrôle standard
END AS riskLevel,
// ⏰ Horodatage de l'analyse
datetime() AS analysisTimestamp
// 🎯 Tri et limitation pour dashboards
ORDER BY riskScore DESC
LIMIT $maxResults
// ═══════════════════════════════════════════════════════════════════════════
// 📌 RÉSULTAT : Top zones à risque triées par score décroissant
// 🔄 FRÉQUENCE : Exécution recommandée toutes les 5-15 minutes
// 🤖 AGENTS CIBLES : RiskAI, PermitAI, InspectAI
// ═══════════════════════════════════════════════════════════════════════════
{
"zoneId": "ZONE-MTL-A3-ROOF",
"zoneName": "Toiture Bâtiment A3 - Section Nord",
"heightMeters": 18.5,
"coordinates": {
"lat": 45.5017,
"lon": -73.5673
},
// 🎲 Métriques de risque calculées
"riskScore": 22.5,
"riskLevel": "CRITIQUE", // 🔴 Intervention immédiate requise
// 📊 Historique incidents
"incidentCount": 4, // 4 incidents × 3.0 = 12 points
"criticalIncidents": 2, // Dont 2 graves
// 👷 Conformité formation
"totalWorkers": 12,
"certifiedWorkers": 7,
"certificationRate": 58.3, // ⚠️ Sous le seuil recommandé (80%)
// 5 non-certifiés × 2.0 = 10 points
// 🛡️ État équipements
"totalEquipment": 8,
"inspectedEquipment": 8,
"overdueInspections": 0, // ✅ Tous inspectés
// 📋 Permis conformité
"activePermits": 1, // 1 permis × -0.5 = -0.5 points
"analysisTimestamp": "2025-11-04T14:32:15Z"
}
// 🧮 Calcul détaillé du score :
// riskScore = (4 × 3.0) + (5 × 2.0) + (0 × 1.5) - (1 × 0.5)
// = 12.0 + 10.0 + 0.0 - 0.5
// = 22.5 → CRITIQUE ⚠️
🎯 Utilisation opérationnelle :
Références clés :
Rôle principal : RiskAI exploite cette requête Cypher en temps réel pour surveiller en continu les zones de travail en hauteur. Il déclenche des alertes proactives lorsque le score de risque franchit les seuils critiques (>15) ou élevés (>10).
Capacités clés :
Utilise les résultats pour valider la conformité des permis de travail en hauteur avant approbation. Bloque automatiquement l'émission de nouveaux permis si zone classée CRITIQUE sans plan de mitigation documenté.
Priorise les inspections d'équipements de protection (harnais, lignes de vie) dans les zones à haut riskScore. Génère automatiquement des ordres d'inspection avec fréquence adaptative selon le niveau de risque.
SafetyGraph™ • Neo4j Knowledge Graph for Industrial Safety Intelligence
Powered by AgenticX5 Framework | ISO 45001:2018 Compliant