Dossier ERP — MOSIA
MOSIA
Sécurité incendie & Accessibilité — Dossier ERP
Une question ? 06 83 08 82 85
agence.mosia@gmail.com
Ce formulaire reprend l'ensemble des éléments nécessaires à la constitution de votre dossier ERP (sécurité incendie et accessibilité). Comptez environ 15 à 20 minutes. Vous pouvez passer les sections qui ne concernent pas votre établissement, et joindre vos photos/plans à la fin. Vos réponses ne sont pas perdues si vous changez d'étape.
Étape 1 / 11 Demandeur
document.addEventListener('DOMContentLoaded', function() { /* ========================================================= MOSIA — Dossier ERP — Formulaire multi-étapes Génère les étapes en JS pour garder le balisage maintenable. Tous les champs sont nommés mosia_xxx afin d'être facilement remappés vers des shortcodes Contact Form 7 (voir README livré). ========================================================= */ /* Lien "File Request" pCloud — dépôt sécurisé de photos/plans sans exposer aucun jeton d'accès au compte pCloud de MOSIA. */ const PCLOUD_UPLOAD_LINK = "https://u.pcloud.com/#page=puplink&code=INTXZxXzdv0TdAk73LV3mLDyqU06oxcG7"; const STEPS = [ { key:"demandeur", eyebrow:"Section 1", title:"Le demandeur", desc:"Coordonnées de la personne ou structure bénéficiaire de l'autorisation.", html:`
` }, { key:"etablissement", eyebrow:"Section 2", title:"L'établissement", desc:"Informations concernant l'établissement recevant du public (ERP).", html:`
` }, { key:"facade", eyebrow:"Section 3", title:"Façade du local", desc:"Matériaux, huisserie et dimensions de la façade.", html:`
Huisserie dimensions en mètres
m
m
m
m
Façade dimensions en mètres
m
m
m
Porche si présent à l'avant
m
m
` }, { key:"interieur", eyebrow:"Section 4", title:"Intérieur du local", desc:"Aménagement, structure et matériaux intérieurs.", html:`
Indiquez le nombre de pièces présentes ainsi que leur fonction.
Merci d'indiquer leurs matériaux et dimensions si connus.
Dimensions hauteur sous plafond, épaisseurs
m
cm
cm
Pensez aussi aux dimensions de chaque pièce (longueur x largeur) et de chaque porte/huisserie intérieure : vous pourrez les détailler dans les photos et plans joints à la fin du formulaire.
` }, { key:"acces_ext", eyebrow:"Section 5 — Accessibilité", title:"Stationnement et cheminements extérieurs", desc:"Conformité PMR des places de parking et des accès piétons.", html:`
Textes de référence : Arrêté du 20 avril 2017, Arrêté du 8 décembre 2014, Arrêté du 1ᵉʳ août 2006 modifié, Code de la construction et de l'habitation (art. R.111-19-7 à R.111-19-11).
1. Stationnement
${checkItem("mosia_chk_stationnement_dim","Présence d'un stationnement PMR de 3,30 m par 5 m")} ${checkItem("mosia_chk_stationnement_signal","Présence d'une signalisation horizontale sur les limites ou le long de l'emplacement")} ${checkItem("mosia_chk_stationnement_panneau","Présence d'un panneau de stationnement conforme à l'arrêté du 26 juillet 2011")} ${checkItem("mosia_chk_stationnement_devers","Présence d'un espace horizontal au dévers près, inférieur ou égal à 2 %")}
${toggleYesNo("mosia_stationnement_2pct")}
2. Cheminements extérieurs
${checkItem("mosia_chk_cheminement_contraste","Présence d'un contraste visuel et tactile sur le revêtement accessible, détectable à la canne ou au pied")}
` }, { key:"acces_etab", eyebrow:"Section 5 — Accessibilité", title:"Accès à l'établissement", desc:"Seuil, marches, rampes et porte d'entrée.", html:`
${checkItem("mosia_chk_acces_repere","Présence de repère continu, tactile (bande de guidage contrastée)")} ${checkItem("mosia_chk_acces_horizontal","Présence d'un cheminement accessible horizontal et sans ressaut")}
${toggleYesNo("mosia_acces_denivellation")}
${checkItem("mosia_chk_pente_6","Plan incliné de pente ≤ 6 %")} ${checkItem("mosia_chk_pente_10","Plan incliné de pente jusqu'à 10 % sur une longueur ≤ 2 m")} ${checkItem("mosia_chk_pente_12","Plan incliné de pente jusqu'à 12 % sur une longueur ≤ 0,50 m")} ${checkItem("mosia_chk_palier_repos","Présence d'un palier de repos en haut et en bas de chaque plan incliné")}
3-1 Seuil du bâtiment
L'accès doit être horizontal, sans écart de niveau supérieur à 2 cm (ou ressaut chanfreiné ≤ 4 cm).
${checkItem("mosia_chk_seuil_aucune","L'accès ne comporte aucune marche, ou une marche ≤ 2 cm arrondie/chanfreinée")} ${checkItem("mosia_chk_seuil_2a4","L'accès se fait par une marche entre 2 et 4 cm, chanfreinée (pente < 33 %)")}
cm
m
3-2 Accessibilité des marches
Moins de 3 marches
${checkItem("mosia_chk_marches_bande_eveil","Présence en haut des marches, à 50 cm, d'une bande d'éveil à la vigilance")} ${checkItem("mosia_chk_marches_nez","Présence de nez de marches de couleur contrastée, antidérapants, largeur ≥ 3 cm")} ${checkItem("mosia_chk_marches_eclairage","Présence d'un éclairement de 150 lux (sauf marches extérieures)")}
À partir de 3 marches
${checkItem("mosia_chk_marches_mc","Présence de main(s) courante(s) contrastées, continues, à hauteur 0,80-1,00 m")} ${checkItem("mosia_chk_marches_contraste_cm","Présence d'un contraste visuel de la première et dernière contremarche (≥10 cm)")}
3-3 Rampe
${toggleYesNo("mosia_rampe_permanente_possible")}
%
m
m
m
m
3-4 Porte d'entrée
${checkItem("mosia_chk_porte_largeur","Présence d'un passage utile de largeur minimale 0,77 m")} ${checkItem("mosia_chk_porte_contraste","Présence d'un contraste visuel entre la porte et son environnement")} ${checkItem("mosia_chk_porte_effort","Présence d'un effort d'ouverture inférieur à 5 kg")} ${checkItem("mosia_chk_porte_poignee","Présence d'une poignée facilement saisissable (debout ou assis)")} ${checkItem("mosia_chk_porte_vitree","Parties vitrées repérables ouvertes/fermées par éléments visuels contrastés")}
` }, { key:"interieur_access", eyebrow:"Section 5 — Accessibilité", title:"Circulations, portes et mobilier intérieurs", desc:"Mobilier accessible, allées, portes intérieures et marches intérieures.", html:`
4. Mobilier accessible au public
${toggleYesNo("mosia_mobilier_present")}
${checkItem("mosia_chk_mobilier_position","Utilisable debout ou assis")} ${checkItem("mosia_chk_mobilier_hauteur","À une hauteur maximale de 0,80 m")} ${checkItem("mosia_chk_mobilier_vide","Vide en partie inférieure ≥ 0,30 m (profondeur) x 0,60 m (largeur) x 0,70 m (hauteur)")}
5. Circulations intérieures
${checkItem("mosia_chk_circ_allees","Allées d'une largeur minimale de 1,40 m (rétrécissement ponctuel toléré entre 0,90 et 1,20 m)")} ${checkItem("mosia_chk_circ_restaurant","Allées secondaires (restaurants) d'une largeur minimale de 1,05 m")} ${checkItem("mosia_chk_circ_retournement","Espace de retournement de diamètre 1,50 m à chaque croisement d'allées")} ${checkItem("mosia_chk_circ_equipement","Espace pour fauteuil roulant (0,80 x 1,30 m) devant chaque équipement")} ${checkItem("mosia_chk_circ_revetement","Sol/revêtement non meuble, non glissant, non réfléchissant, sans obstacle à la roue")} ${checkItem("mosia_chk_circ_hauteur","Hauteur de passage libre de 2,20 m minimum")} ${checkItem("mosia_chk_circ_eclairage","Valeur d'éclairement de 100 lux")}
6. Marches intérieures
${toggleYesNo("mosia_marches_int_present")}
${checkItem("mosia_chk_mi_mc","Deux mains courantes contrastées, continues, hauteur 0,80-1,00 m")} ${checkItem("mosia_chk_mi_bande","En haut des marches, à 50 cm, une bande d'éveil à la vigilance")} ${checkItem("mosia_chk_mi_contremarche","Contraste visuel de la première et dernière contremarche ≥ 10 cm")} ${checkItem("mosia_chk_mi_nez","Nez de marches contrastés, antidérapants, largeur ≥ 3 cm")} ${checkItem("mosia_chk_mi_eclairage","Éclairement de 150 lux")}
— Sélectionner — Par un ascenseur Par un élévateur Par une rampe Par un accès non usuel (sous dérogation)
8. Portes intérieures
${toggleYesNo("mosia_portes_int_present")}
${checkItem("mosia_chk_pi_largeur","Passage utile de 0,77 m minimum")} ${checkItem("mosia_chk_pi_contraste","Contraste visuel entre la porte et son environnement")} ${checkItem("mosia_chk_pi_effort","Effort d'ouverture inférieur à 5 kg")} ${checkItem("mosia_chk_pi_poignee","Poignée facilement saisissable (debout ou assis)")} ${checkItem("mosia_chk_pi_manoeuvre","Espace de manœuvre conforme devant chaque porte (1,20x1,70 m à pousser / 1,20x2,20 m à tirer)")}
` }, { key:"sanitaires_autres", eyebrow:"Section 5 — Accessibilité", title:"Sanitaires, sorties et espaces spécifiques", desc:"Sanitaires PMR, sorties, public assis, cabines et hébergement.", html:`
9. Sanitaires
${toggleYesNo("mosia_sanitaire_present")}
WC
${checkItem("mosia_chk_wc_assise","Hauteur d'assise entre 0,45 et 0,50 m")} ${checkItem("mosia_chk_wc_espace","Espace minimal pour fauteuil à côté de la cuvette : 0,80 x 1,30 m")} ${checkItem("mosia_chk_wc_demitour","Espace pour demi-tour (diamètre 1,50 m) à l'intérieur ou à défaut à l'extérieur")} ${checkItem("mosia_chk_wc_barre","Barre d'appui à hauteur 0,70-0,80 m")} ${checkItem("mosia_chk_wc_porte","Dispositif permettant de refermer la porte derrière soi")}
Lave-mains
${checkItem("mosia_chk_lm_hauteur","Hauteur maximale de 0,85 m")} ${checkItem("mosia_chk_lm_vide","Vide en partie inférieure ≥ 0,70 x 0,60 x 0,30 m")} ${checkItem("mosia_chk_lm_espace","Espace minimal pour fauteuil à l'aplomb du lavabo : 0,80 x 1,30 m")} ${checkItem("mosia_chk_lm_robinet","Commandes de robinetterie situées à plus de 0,40 m d'un angle rentrant")}
10. Sorties
${checkItem("mosia_chk_sorties_reperable","Les sorties sont repérables de tout point, sans risque de confusion avec les issues de secours")}
11. Établissement recevant du public assis
${toggleYesNo("mosia_public_assis")}
12. Établissement comportant des cabines
${toggleYesNo("mosia_cabines_present")}
${checkItem("mosia_chk_cabine_demitour","Espace de manœuvre avec demi-tour (diamètre 1,50 m) hors débattement de porte")} ${checkItem("mosia_chk_cabine_barre","Barre d'appui à 70 cm du sol")} ${checkItem("mosia_chk_cabine_assise","Équipement permettant de s'asseoir")} ${checkItem("mosia_chk_cabine_debout","Équipement permettant de rester en position debout")}
13. Établissement disposant de locaux d'hébergement
` }, { key:"signaletique", eyebrow:"Section 5 — Accessibilité", title:"Signalétique et éclairage", desc:"Information, signalisation et éclairage des zones publiques.", html:`
14. Éléments d'information et de signalisation
Visibilité
${checkItem("mosia_chk_signal_contraste","Contrastés par rapport à leur environnement immédiat")} ${checkItem("mosia_chk_signal_position","Lecture possible debout comme assis")} ${checkItem("mosia_chk_signal_eblouissement","Sans effet d'éblouissement, de reflet ou de contre-jour")}
Lisibilité
${checkItem("mosia_chk_signal_lisibilite","Informations contrastées par rapport au fond du support, taille de caractères adaptée")}
Compréhension
${checkItem("mosia_chk_signal_pictogramme","Recours autant que possible à des icônes/pictogrammes doublés d'une information écrite")}
15. Éclairage
${checkItem("mosia_chk_eclairage_uniforme","Cheminements, circulations et espaces d'accueil suffisamment et uniformément éclairés")} ${checkItem("mosia_chk_eclairage_sans_reflet","Éclairage sans éblouissement, ni zones d'ombre marquées")} ${checkItem("mosia_chk_eclairage_commandes","Commandes d'éclairage accessibles repérables et facilement utilisables")}
` }, { key:"securite_batiment", eyebrow:"Section 6 — Sécurité incendie", title:"Classement et construction du bâtiment", desc:"Effectif, catégorie, desserte et résistance au feu des structures.", html:`
Textes de référence : Décret n°73-1007 du 31/10/1973 (art. R.123-1 à R.123-55 CCH), Décret n°2021-872 du 30/06/2021 (art. R.143-1 à R.143-47 et R.157-1 à R.157-6 CCH), Arrêté du 25 juin 1980 modifié.
1. Description du local
2. Classement
3-1 Conception et desserte
Voie engins
${checkItem("mosia_chk_voie_largeur","Largeur minimale de 3,00 m")} ${checkItem("mosia_chk_voie_hauteur","Hauteur minimale de 3,50 m")} ${checkItem("mosia_chk_voie_pente","Pente ≤ 15 %")} ${checkItem("mosia_chk_voie_giration","Rayon de giration compatible avec les engins de secours")}
Voie échelle
${checkItem("mosia_chk_echelle_largeur","Largeur minimale de 4,00 m")} ${checkItem("mosia_chk_echelle_distance","Distance entre la voie et la façade de 1 à 8 m")} ${checkItem("mosia_chk_echelle_obstacle","Absence d'obstacles aériens (balcons, auvents, arbres)")}
Façade accessible aux secours
${checkItem("mosia_chk_facade_secours","Au moins une façade accessible par voie engins ou espace libre")}
3-2 Isolement par rapport aux tiers
3-3 Résistance au feu des structures
— Sélectionner si connu — R 30R 60R 90R 120
— Sélectionner si connu — R 30R 60R 90R 120
` }, { key:"securite_degagements", eyebrow:"Section 6 — Sécurité incendie", title:"Dégagements, désenfumage et aménagements", desc:"Sorties de secours, locaux à risques et nature des revêtements.", html:`
7. Dégagements
8. Locaux recevant du public en sous-sol
${toggleYesNo("mosia_public_soussol")}
9. Tribunes et gradins non démontables
${toggleYesNo("mosia_tribunes")}
11. Désenfumage
${checkItem("mosia_chk_desenfumage_naturel","Désenfumage naturel")} ${checkItem("mosia_chk_desenfumage_mecanique","Désenfumage mécanique")}
12. Chauffage / ventilation / climatisation
13. Installation gaz et hydrocarbures
${toggleYesNo("mosia_gaz_present")}
${checkItem("mosia_chk_gaz_naturel","Gaz naturel")} ${checkItem("mosia_chk_gaz_fioul","Fioul")} ${checkItem("mosia_chk_gaz_propane","Propane / Butane")}
15. Éclairage de sécurité
${toggleYesNo("mosia_eclairage_securite")}
${checkItem("mosia_chk_es_ambiance","Éclairage d'ambiance autonome")} ${checkItem("mosia_chk_es_evacuation","Éclairage d'évacuation")} ${checkItem("mosia_chk_es_baes","BAES")} ${checkItem("mosia_chk_es_baeh","Source centrale / BAEH")}
16. Ascenseurs et équipements mobiles
${toggleYesNo("mosia_ascenseur_present")}
${checkItem("mosia_chk_asc_ascenseur","Ascenseur")} ${checkItem("mosia_chk_asc_escalier_meca","Escalier mécanique")} ${checkItem("mosia_chk_asc_montecharge","Monte-charge")} ${checkItem("mosia_chk_asc_trottoir","Trottoir roulant")}
16-bis. Appareils de cuisson — restauration
${toggleYesNo("mosia_cuisson_present")}
${checkItem("mosia_chk_cuisine_fermee","Cuisine fermée")} ${checkItem("mosia_chk_cuisine_ouverte","Cuisine ouverte")} ${checkItem("mosia_chk_cuisine_ilots","Cuisine en îlots")}
17. Moyens de secours
${checkItem("mosia_chk_ms_poteaux","Poteaux et bouches incendie")} ${checkItem("mosia_chk_ms_ria","RIA (robinets d'incendie armés)")} ${checkItem("mosia_chk_ms_colonnes","Colonnes sèches / en charge")} ${checkItem("mosia_chk_ms_sprinklers","Sprinklers / brouillard")} ${checkItem("mosia_chk_ms_extincteur_distance","Distance maximum à un extincteur : 15 m")} ${checkItem("mosia_chk_ms_attestation","Attestation de vérification des extincteurs de l'année en cours")}
— Sélectionner si connu — Type 1Type 2aType 2bType 3Type 4
` }, { key:"code_travail", eyebrow:"Section 7 — Code du travail", title:"Conditions de travail et locaux du personnel", desc:"Applicable si votre établissement emploie du personnel salarié.", html:`
Cette section concerne les obligations liées au Code du travail (DUERP, issues de secours pour le personnel, produits dangereux...). Vous pouvez la passer si elle ne s'applique pas à votre situation.
1. Documents obligatoires
${checkItem("mosia_chk_duerp_jour","DUERP à jour (moins d'1 an ou après modification des locaux/activités)")} ${checkItem("mosia_chk_duerp_adapte","DUERP adapté à l'activité réelle de l'ERP")} ${checkItem("mosia_chk_consignes_affichees","Consignes de sécurité affichées (incendie, évacuation, premiers secours)")} ${checkItem("mosia_chk_registre","Registre de sécurité présent, accessible et renseigné")}
2. Circulations intérieures / extérieures
${checkItem("mosia_chk_ct_sol","Sols stables, non glissants")} ${checkItem("mosia_chk_ct_largeur","Largeur minimale des circulations respectée (>1,20 m en rénovation, >1,40 m en neuf)")} ${checkItem("mosia_chk_ct_hauteur","Hauteur libre de passage > 2,00 m")} ${checkItem("mosia_chk_ct_eclairage","Éclairage suffisant (>100 lux intérieur, >20 lux extérieur)")}
3. Issues de secours & évacuation
${toggleYesNo("mosia_ct_issues_suffisantes")}
${toggleYesNo("mosia_ct_largeur_issues")}
4. Incendie
${toggleYesNo("mosia_ct_extincteurs")}
7. Produits dangereux
${toggleYesNo("mosia_ct_produits_dangereux")}
${checkItem("mosia_chk_pd_etiquetes","Produits étiquetés et identifiés")} ${checkItem("mosia_chk_pd_fds","Fiches de données de sécurité (FDS) disponibles")}
Accessibilité des lieux de travail
${toggleYesNo("mosia_ct_pmr_accessible")}
` }, { key:"documents", eyebrow:"Section 8", title:"Reportage photo et documents", desc:"Déposez vos photos et plans via notre espace de dépôt sécurisé.", html:`
D'après le dossier MOSIA, les photos attendues couvrent : la façade et l'huisserie, l'aménagement intérieur et les éléments structurels, l'aménagement extérieur et les stationnements, les accès à l'établissement, le mobilier accessible, les circulations intérieures, la disposition des portes, les sanitaires, les sorties, la signalétique, ainsi que tout plan disponible (DWG, PDF, photo de plan papier).
Cliquez sur le bouton ci-dessous : il ouvre un nouvel onglet où vous pourrez glisser-déposer vos photos et plans directement. Vous n'avez besoin d'aucun compte pour cela.
Ouvrir l'espace de dépôt de fichiers
Le lien s'ouvre dans un nouvel onglet — pensez à revenir ici une fois vos fichiers déposés pour terminer votre dossier.
` }, { key:"recap", eyebrow:"Dernière étape", title:"Récapitulatif et envoi", desc:"Vérifiez les informations principales avant l'envoi de votre dossier.", html:`
J'accepte que MOSIA utilise les informations transmises dans le cadre du traitement de mon dossier ERP. *
` } ]; /* ---------- helpers to build markup ---------- */ function checkItem(name, label){ return ``; } function toggleYesNo(name, noVariant){ const noClass = noVariant ? "no-variant" : ""; return `
`; } /* ---------- render steps ---------- */ const card = document.getElementById('mosiaCard'); const trail = document.getElementById('mosia-trail'); let current = 0; /* Stockage persistant de TOUTES les réponses, car chaque changement d'étape détruit le DOM de l'étape précédente (card.innerHTML = ...). Sans ce store, les valeurs des étapes passées seraient perdues. */ const answers = {}; // { fieldName: value } -> text/select/textarea/radio const checkedAnswers = {}; // { fieldName: true } -> checkboxes cochées STEPS.forEach((s,i)=>{ trail.insertAdjacentHTML('beforeend', ``); }); document.getElementById('mosia-step-total').textContent = STEPS.length; /* Sauvegarde les valeurs actuellement dans le DOM (étape affichée) dans le store global, avant que le DOM ne soit détruit. */ function saveCurrentStepValues(){ const fields = card.querySelectorAll('input[name], select[name], textarea[name]'); fields.forEach(el=>{ if(el.type === 'checkbox'){ checkedAnswers[el.name] = el.checked; } else if(el.type === 'radio'){ if(el.checked) answers[el.name] = el.value; } else { answers[el.name] = el.value; } }); } /* Réapplique les valeurs sauvegardées sur le DOM nouvellement injecté pour l'étape qu'on affiche. */ function restoreStepValues(){ const fields = card.querySelectorAll('input[name], select[name], textarea[name]'); fields.forEach(el=>{ if(el.type === 'file') return; if(el.type === 'checkbox'){ if(checkedAnswers[el.name]) el.checked = true; } else if(el.type === 'radio'){ if(answers[el.name] === el.value) el.checked = true; } else if(answers[el.name] !== undefined){ el.value = answers[el.name]; } }); } function renderStep(i){ saveCurrentStepValues(); card.innerHTML = `
${s_eyebrow(i)}

${STEPS[i].title}

${STEPS[i].desc}

${STEPS[i].html}
${i === STEPS.length-1 ? `` : `` }
`; document.getElementById('mosia-step-current').textContent = i+1; document.getElementById('mosia-step-name').textContent = STEPS[i].title; [...trail.children].forEach((el,idx)=>{ el.className = idxgoTo(i-1)); const nextBtn = document.getElementById('btnNext'); if(nextBtn) nextBtn.addEventListener('click', ()=>{ if(validateStep(i)) goTo(i+1); }); restoreStepValues(); wireConditionals(); reopenReveals(); // ouvre les .mosia-reveal dont la radio "oui" était déjà sélectionnée if(STEPS[i].key === 'recap') buildSummary(); card.scrollIntoView({behavior:'smooth', block:'start'}); } function s_eyebrow(i){return STEPS[i].eyebrow;} function validateStep(i){ const required = card.querySelectorAll('[required]'); for(const el of required){ if(!el.value || (el.type==='checkbox' && !el.checked)){ el.focus(); el.style.borderColor = 'var(--error)'; return false; } } return true; } function goTo(i){ if(i=STEPS.length) return; current = i; renderStep(i); } /* Ouvre automatiquement les blocs conditionnels (.mosia-reveal) si la réponse "oui" correspondante a déjà été cochée précédemment. */ function reopenReveals(){ const map = { mosia_acces_denivellation: 'reveal_denivellation', mosia_mobilier_present: 'reveal_mobilier', mosia_marches_int_present: 'reveal_marches_int', mosia_portes_int_present: 'reveal_portes_int', mosia_sanitaire_present: 'reveal_sanitaire', mosia_cabines_present: 'reveal_cabines', mosia_gaz_present: 'reveal_gaz', mosia_eclairage_securite: 'reveal_eclairage_securite', mosia_ascenseur_present: 'reveal_ascenseur', mosia_cuisson_present: 'reveal_cuisson', mosia_ct_produits_dangereux: 'reveal_produits_dangereux' }; Object.entries(map).forEach(([name, revealId])=>{ const reveal = document.getElementById(revealId); if(reveal && answers[name] === 'oui') reveal.classList.add('show'); }); } /* conditional reveal wiring: shows .mosia-reveal blocks tied to a "oui" radio. L'état initial (déjà répondu) est géré par reopenReveals(), appelée après. */ function wireConditionals(){ const map = { mosia_acces_denivellation: 'reveal_denivellation', mosia_mobilier_present: 'reveal_mobilier', mosia_marches_int_present: 'reveal_marches_int', mosia_portes_int_present: 'reveal_portes_int', mosia_sanitaire_present: 'reveal_sanitaire', mosia_cabines_present: 'reveal_cabines', mosia_gaz_present: 'reveal_gaz', mosia_eclairage_securite: 'reveal_eclairage_securite', mosia_ascenseur_present: 'reveal_ascenseur', mosia_cuisson_present: 'reveal_cuisson', mosia_ct_produits_dangereux: 'reveal_produits_dangereux' }; Object.entries(map).forEach(([name, revealId])=>{ const radios = card.querySelectorAll(`input[name="${name}"]`); const reveal = document.getElementById(revealId); if(!radios.length || !reveal) return; radios.forEach(r=>r.addEventListener('change', ()=>{ reveal.classList.toggle('show', r.value==='oui' && r.checked); })); }); } /* summary builder */ function buildSummary(){ const get = k => (answers[k] && answers[k].trim()) ? answers[k] : '—'; const blocks = [ {title:"Demandeur", rows:[ ["Nom", get('mosia_demandeur_nom')], ["Téléphone", get('mosia_demandeur_tel_mobile')], ["E-mail", get('mosia_demandeur_email')], ]}, {title:"Établissement", rows:[ ["Nom", get('mosia_etab_nom')], ["Type d'activité", get('mosia_etab_type_activite')], ["Commune", get('mosia_etab_commune')], ]}, {title:"Classement ERP", rows:[ ["Type", get('mosia_type_etab')], ["Catégorie", get('mosia_categorie_etab')], ["Effectif total", get('mosia_effectif_total')], ]}, ]; document.getElementById('mosiaSummary').innerHTML = blocks.map(b=>`
${b.title}
${b.rows.map(r=>`
${r[0]}${r[1]}
`).join('')}
`).join('') + `
Toutes les autres réponses (façade, accessibilité, sécurité incendie...) seront transmises avec votre dossier.
`; } /* ========================================================= ENVOI — Web3Forms 1) Crée un compte gratuit sur https://web3forms.com 2) Récupère ta clé d'accès ("Access Key") 3) Colle-la ci-dessous à la place de "VOTRE_CLE_WEB3FORMS_ICI" ========================================================= */ const WEB3FORMS_ACCESS_KEY = "VOTRE_CLE_WEB3FORMS_ICI"; /* Libellés lisibles pour transformer les noms techniques de champs en texte clair dans l'email reçu. Complète si besoin. */ const FIELD_LABELS = { mosia_demandeur_nom:"Nom et prénom du demandeur", mosia_demandeur_representant:"Représentant légal", mosia_demandeur_adresse:"Adresse du demandeur", mosia_demandeur_commune:"Commune du demandeur", mosia_demandeur_cp:"Code postal du demandeur", mosia_demandeur_tel_fixe:"Téléphone fixe", mosia_demandeur_tel_mobile:"Téléphone portable", mosia_demandeur_email:"E-mail du demandeur", mosia_etab_nom:"Nom de l'établissement", mosia_etab_type_activite:"Type d'activité", mosia_etab_activite_avant:"Activité avant travaux", mosia_etab_adresse:"Adresse de l'établissement", mosia_etab_commune:"Commune de l'établissement", mosia_etab_cp:"Code postal de l'établissement", mosia_type_etab:"Type ERP", mosia_categorie_etab:"Catégorie ERP", mosia_effectif_public:"Effectif public", mosia_effectif_personnel:"Effectif personnel", mosia_effectif_total:"Effectif total", mosia_surface_totale:"Surface totale (m²)", mosia_surface_public:"Surface réservée au public (m²)", mosia_message_libre:"Message complémentaire", mosia_fichiers_deposes:"Fichiers déposés sur l'espace pCloud" }; /* Regroupe les champs par section pour un mail lisible */ const SECTION_GROUPS = [ {title:"Demandeur", keys:["mosia_demandeur_nom","mosia_demandeur_representant","mosia_demandeur_adresse","mosia_demandeur_commune","mosia_demandeur_cp","mosia_demandeur_tel_fixe","mosia_demandeur_tel_mobile","mosia_demandeur_email"]}, {title:"Établissement", keys:["mosia_etab_nom","mosia_etab_type_activite","mosia_etab_activite_avant","mosia_etab_adresse","mosia_etab_commune","mosia_etab_cp"]}, {title:"Classement ERP", keys:["mosia_type_etab","mosia_categorie_etab","mosia_effectif_public","mosia_effectif_personnel","mosia_effectif_total","mosia_surface_totale","mosia_surface_public"]} ]; function labelFor(key){ if(FIELD_LABELS[key]) return FIELD_LABELS[key]; return key.replace(/^mosia_/,'').replace(/^chk_/,'').replace(/_/g,' '); } /* Construit un résumé texte lisible de TOUTES les réponses, groupé par étape, à partir du store persistant (answers / checkedAnswers) — et non du DOM, qui ne contient que l'étape actuellement affichée. */ function buildPlainTextReport(){ saveCurrentStepValues(); // s'assure que l'étape affichée (recap) est bien à jour aussi const usedKeys = new Set(); let out = ""; SECTION_GROUPS.forEach(group=>{ out += `\n=== ${group.title.toUpperCase()} ===\n`; group.keys.forEach(k=>{ const val = answers[k]; if(val && String(val).trim()){ out += `${labelFor(k)} : ${val}\n`; usedKeys.add(k); } }); }); // Tout le reste (cases à cocher, sections techniques) regroupé par étape, // dans l'ordre du formulaire STEPS.forEach(step=>{ if(['demandeur','etablissement'].includes(step.key)) return; // déjà traités au-dessus const tmp = document.createElement('div'); tmp.innerHTML = step.html; const namesInStep = [...new Set([...tmp.querySelectorAll('[name]')].map(el=>el.getAttribute('name')))]; const lines = []; namesInStep.forEach(name=>{ if(usedKeys.has(name) || name === 'mosia_fichiers[]') return; usedKeys.add(name); const sampleEl = tmp.querySelector(`[name="${CSS.escape(name)}"]`); if(!sampleEl) return; const type = sampleEl.getAttribute('type'); if(type === 'checkbox'){ if(checkedAnswers[name]) lines.push(`✔ ${labelFor(name)}`); } else if(type === 'radio'){ const v = answers[name]; if(v) lines.push(`${labelFor(name)} : ${v === 'oui' ? 'Oui' : 'Non'}`); } else { const v = answers[name]; if(v && String(v).trim()) lines.push(`${labelFor(name)} : ${v}`); } }); if(lines.length){ out += `\n=== ${step.title.toUpperCase()} ===\n` + lines.join('\n') + '\n'; } }); return out; } /* form submit — envoi réel via Web3Forms, à partir du store persistant */ const mosiaFormEl = document.getElementById('mosiaForm'); mosiaFormEl.addEventListener('submit', async function(e){ e.preventDefault(); if(!validateStep(current)) return; saveCurrentStepValues(); const submitBtn = document.getElementById('btnSubmit'); if(submitBtn){ submitBtn.disabled = true; submitBtn.textContent = "Envoi en cours..."; } try{ const fd = new FormData(); fd.append('access_key', WEB3FORMS_ACCESS_KEY); fd.append('subject', `Nouveau dossier ERP — ${answers['mosia_etab_nom'] || 'sans nom'}`); fd.append('from_name', 'Formulaire Dossier ERP — site MOSIA'); fd.append('email', answers['mosia_demandeur_email'] || ''); fd.append('message', buildPlainTextReport()); // Les photos/plans ne passent plus par Web3Forms (réservé au plan payant) // mais par l'espace de dépôt pCloud — voir PCLOUD_UPLOAD_LINK plus haut. const response = await fetch('https://api.web3forms.com/submit', { method: 'POST', body: fd }); const result = await response.json(); if(result.success){ card.innerHTML = `

Dossier transmis avec succès

Merci, votre dossier ERP a bien été envoyé à MOSIA. Vous recevrez une confirmation par e-mail et serez recontacté(e) dans les meilleurs délais.

`; } else { throw new Error(result.message || "Erreur lors de l'envoi"); } } catch(err){ if(submitBtn){ submitBtn.disabled = false; submitBtn.textContent = "Envoyer le dossier"; } alert("Une erreur est survenue lors de l'envoi de votre dossier. Merci de réessayer, ou de nous contacter directement au 06 83 08 82 85.\n\nDétail technique : " + err.message); } }); /* init */ renderStep(0); });
Scroll to top