diff --git a/.gitignore b/.gitignore index c05a2ea..89797da 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ .DS_Store -# Contient le mot de passe de la base SQL Server — à créer sur le serveur -# à partir de web.config.example (ne jamais versionner) +# Contient le mot de passe de la base SQL Server — à créer/éditer uniquement sur +# le serveur bsite.net à partir de web.config.example (ne jamais versionner) exercices/memory-pictogrammes/api/web.config diff --git a/data/ghs05-corrosif.jpg b/data/ghs05-corrosif.jpg new file mode 100644 index 0000000..a62caab Binary files /dev/null and b/data/ghs05-corrosif.jpg differ diff --git a/data/ghs07-nocif.jpg b/data/ghs07-nocif.jpg new file mode 100644 index 0000000..099549e Binary files /dev/null and b/data/ghs07-nocif.jpg differ diff --git a/data/ghs09-environnement.jpg b/data/ghs09-environnement.jpg new file mode 100644 index 0000000..5f310da Binary files /dev/null and b/data/ghs09-environnement.jpg differ diff --git a/exercices/Exo_BioCID.html b/exercices/Exo_BioCID.html index 508697d..5ab8def 100644 --- a/exercices/Exo_BioCID.html +++ b/exercices/Exo_BioCID.html @@ -1,519 +1,1006 @@ - - - Exercices Pratiques BioCID - Gauthier Chombart & Nathan Chauwin - - - +@media (max-width: 640px) { + .overview-grid { grid-template-columns: 1fr; } +} + - -
- - -
- -
-
+ +
+ + +
+ + +
+ + + + + + + + + + + +
+
+
+
+
Certibiocide — Travaux pratiques
+
Plateforme
BioCID
+

Maîtrisez la plateforme officielle de l'ANSES pour consulter les produits biocides autorisés et déclarés en France.

+ +
+
+ + +
+
+ +
Contexte & accès
+

BioCID est la plateforme officielle de l'ANSES pour consulter tous les produits biocides autorisés et déclarés en France. Cet exercice développe votre autonomie dans la consultation des produits.

+
+ 🎯 +
4 exercices vous attendent : recherche par nom, par type, par substance active, puis un cas de synthèse. Durée totale ≈ 30 min.
+
+
+
🌐
+
+
Plateforme BioCID — ANSES
+
Cliquez sur « Rechercher un produit » pour accéder à la base consultable
- -
- - -
- -
-

Contexte

-
- BioCID est la plateforme officielle de l'ANSES pour consulter tous les produits biocides autorisés et déclarés en France. Cet exercice vous permettra de vous familiariser avec ses différents modes de recherche et de développer une autonomie dans la consultation des produits. -
-
- - -
-

Accès à la Plateforme

-
- -
-
- - -
-

Exercice 1 : Recherche par Nom de Produit

-
-
-
1
- Trouver un produit spécifique -
-
Durée : 5 minutes
-
    -
  • Recherchez un produit connu (ex. « Goliath », « Phobi », « Soricide »)
  • -
  • Notez le type de produit, la substance active, et le fabricant
  • -
  • Vérifiez la date d'autorisation du produit
  • -
  • Observez les conditions d'utilisation mentionnées
  • -
- - -
-
- - -
-

Exercice 2 : Recherche par Type de Produit

-
-
-
2
- Explorer les catégories disponibles -
-
Durée : 5 minutes
-
    -
  • Utilisez le filtre « Type de produit »
  • -
  • Sélectionnez « Rodenticides (TP14) » ou « Insecticides (TP18) »
  • -
  • Comptez combien de produits sont disponibles dans cette catégorie
  • -
  • Comparez avec une autre catégorie (ex. Désinfectants TP2/TP3/TP4)
  • -
- - -
-
- - -
-

Exercice 3 : Recherche par Substance Active

-
-
-
3
- Trouver tous les produits d'une même substance -
-
Durée : 5 minutes
-
    -
  • Recherchez une substance active (ex. « Brodifacoum », « Perméthrine »)
  • -
  • Listez au minimum 3 produits différents contenant cette substance
  • -
  • Observez si différents fabricants proposent des formulations variées
  • -
  • Comparez les concentrations de la substance active d'un produit à l'autre
  • -
- - -
-
- - -
-

Exercice 4 : Cas de Synthèse

-
-
Mise en situation réelle
-
- Un restaurant vous appelle pour vous demander un produit. En utilisant BioCID, vous devez présenter une recommandation argumentée. -
-
    -
  • Filtrez par type : « Désinfectants (TP2/TP3/TP4) » ou « Produits de lutte contre les nuisibles (TP14/TP18/TP20) »
  • -
  • Identifiez au minimum 3 produits applicables
  • -
  • Pour chacun, relevez : nom, fabricant, substance active, usage spécifique
  • -
  • Proposez un court argumentaire pour chaque produit
  • -
  • Bonus : Recherchez les fiches de sécurité (FDS) associées
  • -
-
-
- - -
-
-

💡 Astuces d'Utilisation & Bonnes Pratiques

-
    -
  • Combinez plusieurs filtres pour affiner votre recherche (type + substance + fabricant)
  • -
  • Consultez toujours les fiches de sécurité (FDS) des produits avant recommandation
  • -
  • Vérifiez les conditions d'utilisation : usage professionnel vs. domestique
  • -
  • BioCID est mis à jour régulièrement avec les nouvelles autorisations et retraits
  • -
  • En cas de doute, contactez l'ANSES ou consultez un expert en biocides
  • -
  • Notez toujours les références exactes pour traçabilité (numéro d'AMM)
  • -
-
-
-
- -
-

Durée totale estimée : 30 minutes

-

Pour toute question sur BioCID : support.biocid@anses.fr

-

© 2026 Gauthier Chombart & Nathan Chauwin
Tous droits réservés — Formations Certibiocide & Techniques — Formateurs indépendants

-

Tous droits réservés — Gauthier Chombart & Nathan Chauwin — Formateurs indépendants

-
+ Ouvrir ↗ +
+
+
👥 Identification du groupe
+
+ + + +
Formateur de la session
+
+ + +
+ +
+
- + +
+
+ +
Recherche par type de produit
+

Explorez les catégories disponibles à l'aide des filtres par TP.

+
    +
  • +
    1Utilisez le filtre « Type de produit » et sélectionnez « Rodenticides (TP14) » ou « Insecticides (TP18) ». Combien de produits sont disponibles ?
    + +
  • +
  • +
    2Comparez avec une autre catégorie (ex. Désinfectants TP2 / TP3 / TP4). Que remarquez-vous ?
    + +
  • +
+
+
+ + +
+
+ +
Recherche par substance active
+

Trouvez tous les produits partageant une même substance active.

+
    +
  • +
    1Recherchez une substance active (ex. « Brodifacoum », « Perméthrine ») et listez au minimum 3 produits différents qui la contiennent.
    + +
  • +
  • +
    2Différents fabricants proposent-ils des formulations variées ? Comparez les concentrations d'un produit à l'autre.
    + +
  • +
+
+
+ + +
+
+ +
Mise en situation
+
+ 📞 +
Un restaurant vous appelle au sujet de votre prestation et souhaite choisir le produit entre plusieurs références. En utilisant la plateforme BioCID, présentez une recommandation argumentée.
+
+
    +
  • +
    1Filtrez par type : « Désinfectants (TP2/TP3/TP4) » ou « Lutte contre les nuisibles (TP14/TP18/TP20) ». Identifiez au minimum 3 produits applicables.
    + +
  • +
  • +
    2Pour chacun, relevez : nom, fabricant, substance active, usage spécifique.
    + +
  • +
  • +
    3Proposez un court argumentaire pour chaque produit. Bonus : recherchez les FDS associées.
    + +
  • +
+
+
+ + +
+
+
+
+
🎉
+ +
Astuces & bonnes pratiques
+
+
    +
  • Combinez plusieurs filtres pour affiner (type + substance + fabricant).
  • +
  • Consultez toujours les fiches de sécurité (FDS) avant toute recommandation.
  • +
  • Vérifiez les conditions d'utilisation : usage professionnel vs. domestique.
  • +
  • BioCID est mis à jour régulièrement (nouvelles autorisations et retraits).
  • +
  • En cas de doute, contactez l'ANSES ou consultez un expert en biocides.
  • +
  • Notez toujours les références exactes pour la traçabilité (numéro d'AMM).
  • +
+
+ + ✔ Corriger un rendu + +
+
+
+ + diff --git a/exercices/Exo_FDS.html b/exercices/Exo_FDS.html index f4c732c..db12305 100644 --- a/exercices/Exo_FDS.html +++ b/exercices/Exo_FDS.html @@ -1,906 +1,1724 @@ - - - TD FDS, FT et Étiquettes - - - + -
- - -
-
-
+ +
+ + +
+ + +
+ + + + + + + + +
+
+
+
+
Certibiocide — Travaux dirigés
+
FDS, FT
& Étiquettes
+

Maîtrisez les trois documents essentiels des produits biocides : fiche de sécurité, fiche technique et étiquetage réglementaire.

+ +
+
+ + +
+
+ +
Trois documents, trois usages
+

Vous allez apprendre à localiser une information dans chacun des documents de référence d'un produit biocide.

+
+ ⏱️ +
Durée ≈ 30 min. Pour chaque question, sélectionnez la zone du document où trouver l'information, puis vérifiez votre score.
+
+
+
+
📄
+
Partie 1 — FDS
+
Fiche de Données de Sécurité — 16 rubriques
+
+
📋
+
Partie 2 — FT
+
Fiche Technique — mode d'emploi produit
+
+
+
🏷️
+
Partie 3 — Étiquette
+
Interface directe avec l'utilisateur
+
+
+
+
👥 Identification du groupe
+
+ + + +
Formateur de la session
+
+ + +
+
+ +
+
-
- -
@@ -833,10 +834,6 @@ -
- - -
@@ -871,10 +868,6 @@ -
- - -
@@ -905,10 +898,6 @@
TP 1 terminé ! Préparez-vous à identifier le produit adapté à votre cas sur biocid-anses.fr.
-
- - -
@@ -930,7 +919,6 @@ Ouvrir le site ↗ - @@ -971,10 +959,6 @@ -
- - -
@@ -1019,10 +1003,6 @@
TP 2 terminé ! Passez maintenant à l'analyse de risques complète.
-
- - -
@@ -1039,9 +1019,6 @@
Communication
EPI (dernier recours)
-
- -
@@ -1110,10 +1087,6 @@
TP 3 terminé ! Présentez vos réponses au formateur pour la correction.
-
- - -
@@ -1143,15 +1116,10 @@
Analyse de risques
-
-
- - Corriger -
-
-
- biocid-anses.fr ↗ - +
+ + ✔ Corriger un rendu +
@@ -1164,6 +1132,22 @@ const totalSlides = 13; const selectedCase = { key: '', icon: '', title: '', desc: '' }; const stagiaire = { nom: '', date: '', formateur: '' }; +// Configuration des boutons du footer par slide (modèle BioCID) +const slideConfig = { + 1: { next: 2, nextLabel: 'Continuer →' }, + 2: { next: 3, nextLabel: 'Confirmer le choix →' }, + 3: { next: 4, nextLabel: 'Commencer le TP 1 →' }, + 4: { next: 5, nextLabel: 'Commencer →' }, + 5: { next: 6, nextLabel: 'Étape suivante →', hint: 'prevention' }, + 6: { next: 7, nextLabel: 'Étape suivante →', hint: 'intervention' }, + 7: { next: 8, nextLabel: 'Passer au TP 2 →', hint: 'evaluation' }, + 8: { next: 9, nextLabel: 'Commencer →' }, + 9: { next: 10, nextLabel: 'Partie suivante →', hint: 'fds' }, + 10: { next: 11, nextLabel: 'Passer au TP 3 →', hint: 'epi' }, + 11: { next: 12, nextLabel: 'Remplir le tableau →' }, + 12: { next: 13, nextLabel: 'Terminer la mission →', hint: 'analyse' } +}; + const hints = { prevention: { icon: '💡', @@ -1250,11 +1234,28 @@ function goTo(n) { currentSlide = n; next.style.display = 'flex'; setTimeout(() => { next.classList.add('active', 'fade-in'); }, 10); + const sa = next.querySelector('.scroll-area'); + if (sa) sa.scrollTop = 0; if (n === 13) setTimeout(launchConfetti, 200); updateUI(); updateCaseBanners(); } +function goNext() { + const cfg = slideConfig[currentSlide]; + if (!cfg || cfg.next == null) return; + // Slide 1 : validation du nom du groupe avant de continuer + if (currentSlide === 1) { confirmIdentite(); return; } + // Slide 2 : un cas doit être sélectionné + if (currentSlide === 2 && !selectedCase.key) return; + goTo(cfg.next); +} + +function showHintCurrent() { + const cfg = slideConfig[currentSlide]; + if (cfg && cfg.hint) showHint(cfg.hint); +} + function goBack() { if (history.length === 0) return; const prev = history.pop(); @@ -1279,37 +1280,31 @@ function updateUI() { if (bottomBar) bottomBar.style.display = currentSlide === 0 ? 'none' : 'flex'; const backBtn = document.getElementById('backBtn'); - backBtn.style.display = history.length > 0 ? 'block' : 'none'; + backBtn.style.display = history.length > 0 ? 'inline-flex' : 'none'; - const badge = document.getElementById('phaseBadge'); - if (currentSlide === 0 || currentSlide === 1 || currentSlide === 2 || currentSlide === 3 || currentSlide === 13) { - badge.style.display = 'none'; - } else if (currentSlide >= 4 && currentSlide <= 7) { - badge.style.display = 'block'; - badge.style.background = 'var(--amber-light)'; - badge.style.color = 'var(--amber-dark)'; - badge.textContent = 'TP 1 — Protocole'; - } else if (currentSlide >= 8 && currentSlide <= 10) { - badge.style.display = 'block'; - badge.style.background = 'var(--coral-light)'; - badge.style.color = 'var(--coral)'; - badge.textContent = 'TP 2 — Produit'; - } else if (currentSlide >= 11 && currentSlide <= 12) { - badge.style.display = 'block'; - badge.style.background = 'var(--amber-light)'; - badge.style.color = 'var(--amber-dark)'; - badge.textContent = 'TP 3 — Risques'; + const cfg = slideConfig[currentSlide] || {}; + const hintBtn = document.getElementById('footerHintBtn'); + const nextBtn = document.getElementById('footerNextBtn'); + hintBtn.style.display = cfg.hint ? 'inline-flex' : 'none'; + if (cfg.next != null) { + // Slide 2 : le bouton n'apparaît qu'une fois le cas choisi + const gated = currentSlide === 2 && !selectedCase.key; + nextBtn.style.display = gated ? 'none' : 'inline-flex'; + nextBtn.textContent = cfg.nextLabel; + } else { + nextBtn.style.display = 'none'; } } function selectCase(key, icon, title, desc) { + marquerModifie(); selectedCase.key = key; selectedCase.icon = icon; selectedCase.title = title; selectedCase.desc = desc; document.querySelectorAll('.case-card').forEach(c => c.classList.remove('selected')); event.currentTarget.classList.add('selected'); - document.getElementById('btnConfirmCase').style.display = 'inline-flex'; + updateUI(); } function updateCaseBanners() { @@ -1379,7 +1374,7 @@ function confirmIdentite() { document.getElementById('idError').style.display = 'none'; stagiaire.nom = nom; stagiaire.date = date || new Date().toISOString().slice(0, 10); - goTo(1); + goTo(2); } /* ======================== TABLEAU TP3 — LIGNES DYNAMIQUES ======================== */ @@ -1606,6 +1601,156 @@ function escapeHtml(str) { return str.replace(/&/g, '&').replace(//g, '>'); } +/* ======================== SAUVEGARDE AUTOMATIQUE ======================== */ +/* Les réponses sont enregistrées dans le navigateur au fil de la saisie, puis + proposées à la restauration au rechargement. En file://, localStorage peut être + indisponible (Safari) : dans ce cas la page fonctionne normalement, sans filet. */ +const CLE_SAUVEGARDE = 'certibiocide:tp-nuisibles:v1'; + +let reponsesModifiees = false; +function marquerModifie() { reponsesModifiees = true; sauvegarder(); } + +document.addEventListener('input', marquerModifie, true); +document.addEventListener('change', marquerModifie, true); + +// Avertit avant tout rechargement ou départ. Le texte de la boîte est imposé +// par le navigateur, il n'est pas personnalisable. +window.addEventListener('beforeunload', e => { + if (!reponsesModifiees) return; + e.preventDefault(); + e.returnValue = ''; +}); + +function etatCourant() { + const champs = {}; + document.querySelectorAll('input[id], textarea[id]').forEach(el => { + if (el.value) champs[el.id] = el.value; + }); + // Les cellules du tableau TP3 n'ont pas d'id : on les repère par leur position. + const risques = Array.from(document.querySelectorAll('#riskTableBody .risk-row')) + .map(row => Array.from(row.querySelectorAll('.risk-cell')).map(c => c.value)); + + return { + savedAt: new Date().toISOString(), + slide: currentSlide, + champs, + risques, + cas: selectedCase.key || '', + formateur: stagiaire.formateur || '', + nom: stagiaire.nom || '', + date: stagiaire.date || '', + }; +} + +let minuteurSauvegarde = null; +function sauvegarder() { + clearTimeout(minuteurSauvegarde); + minuteurSauvegarde = setTimeout(() => { + try { + localStorage.setItem(CLE_SAUVEGARDE, JSON.stringify(etatCourant())); + } catch (e) { /* navigation privée ou quota : on continue sans sauvegarde */ } + }, 400); +} + +function lireSauvegarde() { + try { return JSON.parse(localStorage.getItem(CLE_SAUVEGARDE)); } + catch (e) { return null; } +} +function effacerSauvegarde() { + try { localStorage.removeItem(CLE_SAUVEGARDE); } catch (e) {} +} + +function appliquerSauvegarde(data) { + Object.entries(data.champs || {}).forEach(([id, v]) => { + const el = document.getElementById(id); + if (el) el.value = v; + }); + + // Recrée autant de lignes de risques que nécessaire avant de les remplir + const risques = data.risques || []; + const tbody = document.getElementById('riskTableBody'); + while (tbody.querySelectorAll('.risk-row').length < risques.length) addRiskRow(); + tbody.querySelectorAll('.risk-row').forEach((row, i) => { + const valeurs = risques[i] || []; + row.querySelectorAll('.risk-cell').forEach((cell, j) => { cell.value = valeurs[j] || ''; }); + }); + + // Le cas pratique et le formateur passent par leurs boutons, qui remettent + // aussi l'interface (carte sélectionnée, bouton de confirmation) dans le bon état. + if (data.cas) { + const carte = Array.from(document.querySelectorAll('.case-card')) + .find(c => (c.getAttribute('onclick') || '').includes("'" + data.cas + "'")); + if (carte) carte.click(); + } + if (data.formateur) { + const btn = document.getElementById('btn' + data.formateur); + if (btn) btn.click(); + } + stagiaire.nom = data.nom || stagiaire.nom; + stagiaire.date = data.date || stagiaire.date; + + reponsesModifiees = true; + if (typeof data.slide === 'number' && data.slide > 0) goTo(data.slide); + updateUI(); +} + +/* Bandeau de restauration : on ne restaure jamais sans demander, pour qu'un + nouveau groupe n'hérite pas des réponses du précédent sur un poste partagé. */ +function injecterStylesBandeau() { + const style = document.createElement('style'); + style.textContent = ` + .restore-bar { + position: fixed; top: 84px; left: 50%; transform: translateX(-50%); + z-index: 900; max-width: min(680px, calc(100vw - 32px)); + display: flex; align-items: center; gap: 16px; flex-wrap: wrap; + background: var(--white); border: 1.5px solid var(--amber); + border-radius: 14px; padding: 14px 18px; + box-shadow: 0 8px 28px rgba(0,0,0,0.12); font-size: 13.5px; + } + .restore-bar .restore-text { flex: 1; min-width: 220px; line-height: 1.5; } + .restore-bar .restore-actions { display: flex; gap: 8px; flex-shrink: 0; } + .restore-bar button { + font-family: 'Syne', sans-serif; font-weight: 700; font-size: 12.5px; + padding: 8px 16px; border-radius: 20px; cursor: pointer; + border: 1px solid var(--border); background: transparent; color: var(--text-muted); + } + .restore-bar button:hover { border-color: var(--amber); color: var(--amber); } + .restore-bar button.primary { + background: var(--amber); border-color: var(--amber); color: #fff; + } + .restore-bar button.primary:hover { background: var(--amber-dark); border-color: var(--amber-dark); color: #fff; } + `; + document.head.appendChild(style); +} + +function proposerRestauration() { + const data = lireSauvegarde(); + if (!data) return; + const aDesReponses = (data.champs && Object.keys(data.champs).length > 0) + || (data.risques || []).some(r => r.some(v => v)); + if (!aDesReponses) return; + + const quand = new Date(data.savedAt); + const libelle = isNaN(quand.getTime()) ? '' : + ` du ${quand.toLocaleDateString('fr-FR')} à ${quand.toLocaleTimeString('fr-FR', { hour: '2-digit', minute: '2-digit' })}`; + + injecterStylesBandeau(); + const bar = document.createElement('div'); + bar.className = 'restore-bar'; + bar.innerHTML = ` + 💾 Des réponses enregistrées${libelle} ont été retrouvées sur ce poste. + + + + `; + document.body.appendChild(bar); + + document.getElementById('btnRestaurer').onclick = () => { appliquerSauvegarde(data); bar.remove(); }; + document.getElementById('btnRepartir').onclick = () => { effacerSauvegarde(); bar.remove(); }; +} + +proposerRestauration(); + updateUI(); diff --git a/exercices/correction-tp-nuisibles.html b/exercices/correction-tp-nuisibles.html deleted file mode 100644 index 8355993..0000000 --- a/exercices/correction-tp-nuisibles.html +++ /dev/null @@ -1,650 +0,0 @@ - - - - - -Correction TP Nuisibles — Certibiocide - - - - - -
- - -
- -
- -
Certibiocide — Correction de TP
-

TP Nuisibles — Lecture du rendu

- -
-
📄
-

Déposez le PDF du stagiaire ici

-

ou cliquez pour sélectionner le fichier exporté depuis le TP

- -
-
- -
-
- - -
- -
- -
-
- questions répondues -
- - - -

Analyse de risques

-
- -

-
-
- - - - - - - diff --git a/exercices/corriger-exercice.html b/exercices/corriger-exercice.html new file mode 100644 index 0000000..8877969 --- /dev/null +++ b/exercices/corriger-exercice.html @@ -0,0 +1,1204 @@ + + + + + +Corriger un exercice — Certibiocide + + + + + +
+ + +
+ +
+
+
Certibiocide — Correction des rendus
+

Corriger un exercice

+

Sélectionnez l'exercice concerné, puis déposez le fichier PDF exporté par le groupe. Les réponses s'affichent directement ici, exercice par exercice.

+ +

1 Choisissez l'exercice à corriger

+
+
+ + +
+
+ + +
+
+ + +
+
+ +

2 Déposez le rendu PDF

+
+
📄
+

Déposez le PDF du groupe ici

+

ou cliquez pour sélectionner le fichier exporté depuis l'exercice

+ +
Sélectionnez d'abord un exercice ci-dessus.
+
+
+ +
+ +
Certibiocide — Correction d'exercice
+

+ +
+ + +
+ +
+
+ +
+ + + +
+
+
+ + + + + + + diff --git a/index.html b/index.html index 03b8511..c9aa315 100644 --- a/index.html +++ b/index.html @@ -103,7 +103,7 @@
📋
-

FDS & Étiquettes

+

FDS, FT & Étiquettes

Aller plus loin

@@ -137,6 +137,19 @@ Jouer
+ + +
+
+
+

Corriger un exercice

+

Correction des rendus

+
+
+

Déposez le PDF exporté par un groupe et obtenez la lecture de son rendu. Page unique de correction pour l'ensemble des exercices.

+ Corriger +
+