Système de Graphe de Connaissances pour Prévention SST et Ergonomie
Module Spécialisé: Ergonomie & Troubles Musculo-Squelettiques (TMS)
Propulsé par Neo4j, Cypher et D3.js
Les TMS représentent la première cause de maladie professionnelle au Québec. Safety Graph permet l'identification proactive des facteurs de risque ergonomiques via des requêtes Cypher sophistiquées analysant les relations entre tâches, postures, équipements et travailleurs.
Identifie les tâches de manutention manuelle où le produit poids × fréquence dépasse les seuils de sécurité, indiquant un risque élevé de TMS lombaires.
MATCH (t:Task {type: 'ManualHandling'})-[:PART_OF]->(p {id: $projectId})
WHERE t.weightKg * t.freqPerHour > $riskIndex
RETURN t.id AS task_id,
t.description AS task_desc,
t.weightKg AS weight,
t.freqPerHour AS frequency,
t.weightKg * t.freqPerHour AS risk_score,
t.assignedWorker AS worker_anon
ORDER BY risk_score DESC
LIMIT 20
| Paramètre | Valeur Seuil | Norme de Référence |
|---|---|---|
$riskIndex |
150 (kg·freq/h) | ISO 11228-1 (Action Limit) |
| Poids unitaire max | 25 kg (homme) / 15 kg (femme) | CNESST - Guide manutention |
| Fréquence critique | > 10 levées/heure | NIOSH Lifting Equation |
• Mise en place d'aides mécaniques (transpalette, gerbeur)
• Réorganisation des tâches pour réduire la fréquence
• Formation PDSB (Principes de Déplacement Sécuritaire des Bénéficiaires)
• Rotation des travailleurs sur tâches critiques
• Évaluation ergonomique approfondie (méthode NIOSH)
Calcule l'exposition cumulative aux vibrations main-bras pour chaque travailleur, basée sur la durée d'utilisation et le niveau d'accélération équivalent (A(eq)) des outils vibrants. Seuil critique: 2.5 m/s² pour 8h ou équivalent.
MATCH (w:Worker)-[:USES]->(tool:Asset {class: 'VibratingTool'})-[:PART_OF]->(p {id: $projectId})
MATCH (ev:Event {type: 'ToolUse'})-[:BY]->(w)-[:ON]->(tool)
WITH w,
sum(ev.durationMin * tool.havAeq) AS exposure_points,
collect(DISTINCT tool.name) AS tools_used,
count(DISTINCT ev) AS usage_sessions
WHERE exposure_points > $havLimit
RETURN w.id AS worker_id,
w.name_anon AS worker,
exposure_points,
tools_used,
usage_sessions,
CASE
WHEN exposure_points > $havLimit * 1.5 THEN 'CRITIQUE'
WHEN exposure_points > $havLimit THEN 'ÉLEVÉ'
ELSE 'MODÉRÉ'
END AS risk_level
ORDER BY exposure_points DESC
| Niveau | A(8) [m/s²] | Points Exposition | Action Requise |
|---|---|---|---|
| Valeur d'action | 2.5 | < 1200 | Surveillance, formation |
| Valeur limite | 5.0 | 1200-2400 | Mesures correctives obligatoires |
| CRITIQUE | > 5.0 | > 2400 | Arrêt travail, réévaluation complète |
Hiérarchie des contrôles:
1️⃣ Élimination: Remplacer outils vibrants par alternatives (électriques vs pneumatiques)
2️⃣ Substitution: Outils anti-vibration, suspensions actives
3️⃣ Ingénierie: Limitation durée exposition, rotations de tâches
4️⃣ Administratif: Pauses obligatoires, échauffement mains
5️⃣ EPI: Gants anti-vibration (efficacité limitée, ne pas se fier uniquement)
Détecte les travailleurs qui passent plus de $minMin minutes cumulées à genoux sans porter de genouillères (PPE type 'KneePad'). Risque de bursite du genou (hygroma) et dégénérescence précoce du cartilage.
MATCH (post:Posture {type: 'Kneeling'})-[:BY]->(w:Worker)-[:PART_OF]->(p {id: $projectId})
WITH w,
sum(post.durationMin) AS total_kneeling_mins,
collect(post.taskDescription) AS tasks,
count(post) AS kneeling_sessions
WHERE total_kneeling_mins > $minMin
AND NOT (w)-[:WEARS]->(:PPE {type: 'KneePad'})
RETURN w.id AS worker_id,
w.name_anon AS worker,
total_kneeling_mins,
tasks,
kneeling_sessions,
ROUND(total_kneeling_mins / 60.0, 1) AS hours,
CASE
WHEN total_kneeling_mins > 180 THEN 'URGENT'
WHEN total_kneeling_mins > 120 THEN 'ÉLEVÉ'
ELSE 'MODÉRÉ'
END AS priority
ORDER BY total_kneeling_mins DESC
| Durée Cumulative | Niveau de Risque | Action Immédiate |
|---|---|---|
| < 60 min/jour | Faible | Recommander genouillères |
| 60-120 min/jour | Modéré | Fournir genouillères obligatoires |
| 120-180 min/jour | Élevé | Genouillères + rotation tâches |
| > 180 min/jour | URGENT | Intervention ergonomique + suivi médical |
Au-delà des genouillères, privilégier:
• Sièges à genoux mobiles pour postes fixes
• Rehausser la surface de travail pour permettre position accroupie ou debout
• Outils à manches longs pour éviter flexion excessive
• Systèmes de levage pour pièces basses
• Rotation fréquente avec tâches sans appui genoux (max 30 min continu)
Identifie les équipes (crews) où le nombre de micropauses enregistrées est inférieur au minimum recommandé ($minPerShift). Les micropauses (30-60 secondes, 2-3x/heure) sont essentielles pour prévenir la fatigue musculaire et maintenir la vigilance.
MATCH (w:Worker)-[:PART_OF_CREW]->(c:Crew)-[:PART_OF]->(p {id: $projectId})
MATCH (ev:Event {type: 'MicroPause'})-[:BY]->(w)
WHERE ev.timestamp >= $since
WITH c,
count(ev) AS total_micropauses,
count(DISTINCT w) AS crew_size,
ROUND(count(ev) * 1.0 / count(DISTINCT w), 1) AS avg_per_worker,
collect(DISTINCT w.name_anon) AS workers
WHERE total_micropauses < $minPerShift * crew_size
RETURN c.id AS crew_id,
c.name AS crew_name,
crew_size,
total_micropauses,
avg_per_worker,
$minPerShift AS recommended_per_worker,
workers,
ROUND(100.0 * total_micropauses / ($minPerShift * crew_size), 1) AS compliance_pct
ORDER BY compliance_pct ASC
| Type de Travail | Fréquence Recommandée | Durée | Activité Suggérée |
|---|---|---|---|
| Travail répétitif | Chaque 30 minutes | 30-60 secondes | Étirements mains/bras |
| Posture statique | Chaque 20 minutes | 45-90 secondes | Marche, mobilisation |
| Travail intense | Chaque 45 minutes | 2-3 minutes | Repos actif, hydratation |
| Écran (bureau) | Chaque 60 minutes | 5 minutes | 20-20-20 (yeux) + mobilité |
Comment favoriser les micropauses:
• Rappels automatiques via wearables ou affichage chantier
• Culture de prévention: normaliser les pauses (pas de stigma)
• Zones dédiées avec équipements d'étirement
• Gamification: objectifs équipe, suivi positif
• Formation: expliquer la science (récupération ATP musculaire)
• Intégration au workflow: pauses naturelles entre tâches
Compare la hauteur des postes de travail avec l'anthropométrie individuelle des travailleurs assignés (hauteur de coude). Un écart > $deltaCm indique un risque de postures contraignantes (flexion/extension poignet, élévation épaules, flexion dos).
MATCH (ws:Workstation)-[:PART_OF]->(p {id: $projectId})
MATCH (w:Worker)-[:ASSIGNED_TO]->(ws)
WITH ws, w,
coalesce(w.elbowHeightCm, 105) AS worker_elbow_height,
ws.heightCm AS station_height,
abs(ws.heightCm - coalesce(w.elbowHeightCm, 105)) AS height_delta
WHERE height_delta > $deltaCm
RETURN ws.id AS workstation_id,
ws.name AS workstation,
ws.heightCm AS current_height,
w.id AS worker_id,
w.name_anon AS worker,
worker_elbow_height,
height_delta AS mismatch_cm,
CASE
WHEN height_delta > 15 THEN 'CRITIQUE'
WHEN height_delta > 10 THEN 'ÉLEVÉ'
ELSE 'MODÉRÉ'
END AS severity,
CASE
WHEN ws.heightCm > worker_elbow_height THEN 'Trop haut - Risque épaules'
ELSE 'Trop bas - Risque dos/poignets'
END AS risk_type
ORDER BY height_delta DESC
| Type de Travail | Hauteur Optimale | Tolérance | Référence |
|---|---|---|---|
| Précision fine | Coude + 5-10 cm | ± 5 cm | Support avant-bras |
| Travail léger | Hauteur coude | ± 8 cm | Bras naturellement pendants |
| Travail de force | Coude - 10-20 cm | ± 10 cm | Utilisation poids du corps |
| Écart critique | N/A | > 15 cm | Ajustement obligatoire |
Hiérarchie des solutions:
1️⃣ Postes ajustables: Tables hydrauliques, plans de travail réglables
2️⃣ Plateformes/marches: Pour travailleurs plus petits (hauteur +)
3️⃣ Rehausseurs: Pour objets/outils (hauteur -)
4️⃣ Réassignation: Matcher travailleurs à postes existants
5️⃣ Supports: Appui-bras, repose-pieds pour compensation partielle
Note: Hauteur de coude standard = 100-110 cm (debout), mais
mesure individuelle fortement recommandée (5e-95e percentile: 92-118 cm).
📈 Amélioration significative: Réduction de 32% des risques critiques depuis
implémentation du monitoring Safety Graph en temps réel
🎯 Meilleure performance: Micropauses (+45% conformité) et Distribution PPE (+67%)
⚠️ Attention requise: HAV en hausse (+12%) due à nouveau projet avec outils pneumatiques
✅ Objectif 2025: Zéro incident TMS sévère, 95% conformité ergonomique
┌─────────────────────────────────────────────────────────────────┐
│ COLLECTE DONNÉES (Sources Multiples) │
├─────────────────────────────────────────────────────────────────┤
│ 📱 Wearables IoT │ 📹 Caméras IA │ 📋 Rapports Manuels│
│ (Vibrations, MVT) │ (Postures, MoC) │ (Auto-évaluation) │
└──────────────┬────────────────┬────────────────┬────────────────┘
│ │ │
└────────────────┴────────────────┘
│
┌───────────▼───────────┐
│ ETL + Anonymisation │
│ (Python Pipeline) │
└───────────┬───────────┘
│
┌───────────▼───────────┐
│ NEO4J SAFETYGRAPH │
│ (Graphe + Propriétés)│
└───────────┬───────────┘
│
┌───────────────────┼───────────────────┐
│ │ │
┌───────▼────────┐ ┌──────▼──────┐ ┌────────▼────────┐
│ CYPHER QUERIES│ │ ALERTES │ │ ML PREDICTIF │
│ (5 Ergonomie) │ │ Temps Réel │ │ (Prévision TMS)│
└───────┬────────┘ └──────┬──────┘ └────────┬────────┘
│ │ │
└───────────────────┴───────────────────┘
│
┌───────────▼───────────┐
│ DASHBOARDS D3.js │
│ (Visualisations + │
│ Actions suggérées) │
└───────────┬───────────┘
│
┌───────────────────┼───────────────────┐
│ │ │
┌───────▼────────┐ ┌──────▼──────┐ ┌────────▼────────┐
│ COORD. SST │ │ TRAVAILLEURS│ │ GESTIONNAIRES │
│ (Interventions│ │ (Alertes) │ │ (KPIs) │
│ Préventives) │ │ │ │ │
└────────────────┘ └─────────────┘ └─────────────────┘
FRÉQUENCE DE MISE À JOUR:
• Données wearables: Temps réel (streaming)
• Requêtes Cypher: Toutes les 15 minutes (ou on-demand)
• ML predictions: Recalcul quotidien (overnight)
• Dashboards: Rafraîchissement automatique
Les 5 requêtes Cypher ergonomiques s'exécutent automatiquement selon un calendrier configurable, déclenchant des alertes immédiates lorsque les seuils sont dépassés. Pas d'intervention manuelle requise.
Notifications push (mobile), emails, affichages chantier, et intégration avec systèmes existants (MS Teams, Slack). Escalade automatique selon la criticité et délais de réponse.
Génération quotidienne/hebdomadaire/mensuelle de rapports conformité ergonomique avec visualisations, tendances, et recommandations. Export PDF/XLSX pour audits CNESST.
Modèles entraînés sur historique pour prédire quels travailleurs/équipes risquent de développer des TMS dans les 30-90 jours suivants. Intervention préventive ciblée.