Mode hors ligne activé - Certaines fonctionnalités sont limitées

PROQUELEC

Solutions électriques intelligentes

Outils Techniques Avancés PROQUELEC

Découvrez nos outils professionnels pour optimiser vos installations électriques, réaliser des économies d'énergie et garantir la sécurité.

Qu'est-ce que le Label PROQUELEC ?

Le label PROQUELEC distingue les entreprises et installations électriques qui respectent les plus hauts standards de qualité, sécurité et conformité au Sénégal.

Économie Sécurité Confort

Les 3 niveaux de certification

Bronze Conformité de base aux normes
Argent Excellence technique et sécurité renforcée
Or Innovation, performance et engagement durable

Avantages du Label PROQUELEC

  • Reconnaissance officielle par les autorités et partenaires
  • Accès facilité aux marchés publics et appels d’offres
  • Confiance accrue des clients et usagers
  • Valorisation de l’expertise et de la qualité

Processus de labellisation

Infographie du processus de labellisation
  1. Prise de connaissance du référentiel
  2. Dépôt du dossier de candidature
  3. Audit et visite sur site
  4. Décision du comité d’attribution
  5. Remise du label et suivi qualité

Référentiel technique du Label

Matériel

  • Matériel certifié conforme à la NS 01 001
  • Origine et traçabilité garanties
  • Marques reconnues et homologuées

Installation

  • Respect des schémas de pose
  • Contrôles de sécurité systématiques
  • Documentation technique complète

Compétences

  • Personnel qualifié et formé
  • Formation continue obligatoire
  • Assurance professionnelle valide

Grille d'auto-évaluation

Témoignages d'entreprises labellisées

"Grâce au label PROQUELEC, nous avons gagné la confiance de nouveaux clients et accédé à de grands chantiers publics."

Entreprise 1

"Le processus de labellisation nous a permis d’améliorer nos pratiques et de valoriser notre savoir-faire."

Entreprise 2

Sécurité

Respect strict des normes de sécurité électrique et protection des personnes et des biens.

Confort

Installations optimisées pour le bien-être et la commodité des utilisateurs.

Économie

Efficacité énergétique et optimisation des coûts d'exploitation.

`; // Remove UI/help/script fragments that should NOT appear in exported Devis try { let cleaned = html; // Remove theme selector (Clair / Sombre / Solaire) block cleaned = cleaned.replace(new RegExp('
[\\s\\S]*?<\\/div>\\s*', 'i'), ''); // Remove the small devis-info hint cleaned = cleaned.replace(new RegExp('
\\s*', 'i'), ''); // Remove export/share buttons block cleaned = cleaned.replace(new RegExp('
[\\s\\S]*?<\\/div>\\s*', 'i'), ''); // Remove FAQ section and any accidentally inlined JS/comments that follow it cleaned = cleaned.replace(new RegExp('[\\s\\S]*?
', 'i'), '
'); cleaned = cleaned.replace(new RegExp('
[\\s\\S]*?<\\/div>\\s*', 'i'), ''); // Remove any leftover single-line JS comments that were embedded as text cleaned = cleaned.replace(new RegExp('^[ \\t]*\\/\\/.*$', 'gmi'), ''); // Remove large inline JS/comment blocks that were accidentally included (themes, alerts, tabs, export helpers) cleaned = cleaned.replace(new RegExp('\\/\\/ --- Thèmes dynamiques ---[\\s\\S]*?document\\.getElementById\\(\'btn-share-devis\'\)\\.addEventListener\\([\\s\\S]*?\\}\\);?', 'i'), ''); // Remove any script blocks to avoid carrying JS into the exported document cleaned = cleaned.replace(new RegExp('', 'gi'), ''); cleaned=cleaned.replace(new RegExp(']*id="btn-export-pdf"[^>]*>[\\s\\S]*?<\\/button>', 'i'), ''); cleaned=cleaned.replace(new RegExp(']*id="btn-share-devis"[^>]*>[\\s\\S]*?<\\/button>', 'i'), ''); ['Clair Sombre Solaire','Exporter en PDF','Partager','FAQ – Questions fréquentes','Comment personnaliser mon devis ?','Puis-je exporter en PDF ?','Mes données sont-elles sécurisées ?','Comment contacter le support ?'].forEach(p=> { try { cleaned=cleaned.replace(new RegExp(p.replace(/[.*+?^${}()|[\\]\\]/g,'\\$&'),'gi'), ''); } catch(e){}}); try { console.debug('Devis export - cleaned HTML size:', cleaned.length); } catch(e){} html=cleaned; } catch (e){ console.warn('Cleanup for export failed', e); } let exportHtml=html; try { exportHtml=DOMPurify.sanitize(html); } catch (e){ console.warn('DOMPurify sanitize failed, using raw HTML', e); } try { window._lastExportHtml=exportHtml; } catch(e){} const blob=new Blob([exportHtml], { type: 'application/msword' }); const url=URL.createObjectURL(blob); const a=document.createElement('a'); a.href=url; a.download=`Devis_${d.quoteNumber}.doc`; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); } let appliances=[]; function addAppliance(){ const select=document.getElementById('appliance-select'); const customWatts=document.getElementById('custom-watts'); let power, name; if(select.value==='custom'){ power=parseInt(customWatts.value)||0; name='Appareil personnalisé (' + power + 'W)'; if(power===0){ alert('Veuillez entrer une puissance valide'); return; }}else if(select.value){ power=parseInt(select.value); name=select.options[select.selectedIndex].text; }else{ alert('Veuillez sélectionner un appareil'); return; } appliances.push({ name, power }); updateAppliancesList(); select.value=''; customWatts.value=''; document.getElementById('custom-power').classList.add('hidden'); } function updateAppliancesList(){ const appliancesList=document.getElementById('appliances-list'); appliancesList.innerHTML=''; appliances.forEach((appliance, index)=> { const div=document.createElement('div'); div.className='flex justify-between items-center p-2 bg-white rounded border'; div.innerHTML=` ${appliance.name}
${appliance.power}W
`; appliancesList.appendChild(div); }); } function removeAppliance(index){ appliances.splice(index, 1); updateAppliancesList(); } function calculateCharge(){ const circuitType=document.getElementById('circuit-type'); const maxPower=parseInt(circuitType.value) * 230; const safetyMargin=maxPower * 0.8; const totalPower=appliances.reduce((sum, appliance)=> sum + appliance.power, 0); const loadPercentage=Math.min((totalPower / maxPower) * 100, 100); const safetyPercentage=Math.min((totalPower / safetyMargin) * 100, 100); document.getElementById('total-power').textContent=totalPower + ' W'; document.getElementById('circuit-capacity').textContent=maxPower + ' W'; document.getElementById('safety-margin').textContent=safetyMargin + ' W (80%)'; document.getElementById('load-percentage').textContent=Math.round(loadPercentage) + '%'; const loadBar=document.getElementById('load-bar'); loadBar.style.width=loadPercentage + '%'; const statusDiv=document.getElementById('charge-status'); const recommendationsDiv=document.getElementById('charge-recommendations'); recommendationsDiv.innerHTML=''; if(totalPower===0){ statusDiv.innerHTML='Aucun appareil sélectionné'; statusDiv.className='p-3 rounded text-center font-semibold bg-gray-100'; loadBar.className='bg-gray-400 h-3 rounded-full transition-all duration-500'; }else if(totalPower <=safetyMargin){ statusDiv.innerHTML='✅ Charge acceptable'; statusDiv.className='p-3 rounded text-center font-semibold bg-green-100'; loadBar.className='bg-green-500 h-3 rounded-full transition-all duration-500'; recommendationsDiv.innerHTML='

✓ Votre installation peut supporter cette charge

'; }else if(totalPower <=maxPower){ statusDiv.innerHTML='⚠️ Charge à la limite'; statusDiv.className='p-3 rounded text-center font-semibold bg-yellow-100'; loadBar.className='bg-yellow-500 h-3 rounded-full transition-all duration-500'; recommendationsDiv.innerHTML=`

⚠️ Vous approchez de la limite maximale

• Évitez de brancher d'autres appareils sur ce circuit

• Envisagez de répartir sur plusieurs circuits

`; }else{ statusDiv.innerHTML='🔴 Surcharge !'; statusDiv.className='p-3 rounded text-center font-semibold bg-red-100'; loadBar.className='bg-red-500 h-3 rounded-full transition-all duration-500'; recommendationsDiv.innerHTML=`

🔴 Risque de déclenchement du disjoncteur

• Débranchez immédiatement certains appareils

• Répartissez la charge sur plusieurs circuits

• Consultez un électricien pour renforcer l'installation

`; } document.getElementById('charge-results').classList.remove('hidden'); } document.addEventListener('DOMContentLoaded', function(){ const activeTab=localStorage.getItem('activeTab')||'label'; showTab(activeTab); renderElementsList(); renderDevicesTable(); updateHistoryDisplay(); const themeToggle=document.getElementById('themeToggle'); const storedTheme=localStorage.getItem('theme')||'light'; document.documentElement.setAttribute('data-theme', storedTheme); if(themeToggle){ themeToggle.addEventListener('click', ()=> { const current=localStorage.getItem('theme')||'light'; const newTheme=current==='light' ? 'dark':'light'; document.documentElement.setAttribute('data-theme', newTheme); localStorage.setItem('theme', newTheme); }); } const languageSelector=document.getElementById('languageSelector'); const currentLanguage=localStorage.getItem('language')||'fr'; if(languageSelector){ languageSelector.value=currentLanguage; applyTranslations(currentLanguage); languageSelector.addEventListener('change', (e)=> { const lang=e.target.value; localStorage.setItem('language', lang); applyTranslations(lang); }); } const voiceAssistant=document.getElementById('voiceAssistant'); const voiceStatus=document.getElementById('voiceStatus'); if(voiceAssistant&&voiceStatus){ voiceAssistant.addEventListener('click', function(){ const SpeechRecognition=window.SpeechRecognition||window.webkitSpeechRecognition||window.mozSpeechRecognition||window.msSpeechRecognition; if(!SpeechRecognition){ alert("La reconnaissance vocale n'est pas supportée par votre navigateur. Essayez Chrome ou Edge sur mobile/desktop."); return; } try { const recognition=new SpeechRecognition(); recognition.continuous=false; recognition.interimResults=false; recognition.lang='fr-FR'; voiceStatus.classList.remove('hidden'); voiceAssistant.classList.add('voice-recording'); recognition.start(); recognition.onresult=function(event){ const transcript=event.results[0][0].transcript; voiceStatus.textContent=`Reconnu: "${transcript}"`; processVoiceCommand (transcript); }; recognition.onerror=function(err){ console.warn('Speech recognition error', err); alert('Erreur de reconnaissance vocale:' + (err.error||'unknown')); }; recognition.onend=function(){ voiceStatus.classList.add('hidden'); voiceAssistant.classList.remove('voice-recording'); };} catch (e){ console.error('Voice assistant init failed', e); alert('Impossible de démarrer l’assistant vocal sur ce navigateur.'); }}); } function processVoiceCommand (command){ command=command.toLowerCase(); if(command.includes('calculer')||command.includes('consommation')){ calculateEnergy(); }else if(command.includes('guide')||command.includes('aide')){ showTab('guides'); }else if(command.includes('sécurité')||command.includes('danger')){ showTab('safety'); }} }); document.addEventListener('DOMContentLoaded', function(){ if(!window.__DEV_TEST_TABS) return; const tabsToTest=['label','energy','guides','quotes','safety','diagnostic','regulations']; let i=0; function testNext(){ if(i >=tabsToTest.length){ console.log('Tab smoke test finished'); return; } const name=tabsToTest[i++]; try { showTab(name); const el=document.getElementById(name + '-tab'); console.log('Opened tab', name, 'exists?', !!el); } catch (e){ console.error('Error opening tab', name, e); } setTimeout(testNext, 300); } testNext(); }); document.addEventListener('DOMContentLoaded', function(){ const tabButtons=Array.from(document.querySelectorAll('.tab-btn')); const tabPanels=Array.from(document.querySelectorAll('[role="tabpanel"]')); function setActiveTabByName(tabName, focusButton=false){ tabPanels.forEach(p=> { p.classList.add('hidden'); p.classList.remove('fade-in'); p.setAttribute('aria-hidden', 'true'); p.setAttribute('tabindex', '-1'); }); tabButtons.forEach(b=> { b.classList.remove('active'); b.setAttribute('aria-selected', 'false'); b.setAttribute('tabindex', '-1'); }); const panel=document.getElementById(tabName + '-tab'); if(panel){ panel.classList.remove('hidden'); setTimeout(()=> panel.classList.add('fade-in'), 10); panel.setAttribute('aria-hidden', 'false'); panel.setAttribute('tabindex', '0'); } const btn=document.querySelector(`.tab-btn[aria-controls="${tabName}-tab"]`); if(btn){ btn.classList.add('active'); btn.setAttribute('aria-selected', 'true'); btn.setAttribute('tabindex', '0'); if(focusButton) btn.focus(); } localStorage.setItem('activeTab', tabName); } function showTab(tabName){ try { setActiveTabByName(tabName, false); } catch (e){ console.error('showTab error', e); }} window.showTab=showTab; tabButtons.forEach((btn, idx)=> { btn.addEventListener('keydown', (e)=> { const key=e.key; let newIdx=null; if(key==='ArrowRight') newIdx=(idx + 1) % tabButtons.length; else if(key==='ArrowLeft') newIdx=(idx - 1 + tabButtons.length) % tabButtons.length; else if(key==='Home') newIdx=0; else if(key==='End') newIdx=tabButtons.length - 1; else if(key==='Enter'||key===' '){ e.preventDefault(); const target=btn.getAttribute('aria-controls'); if(target) window.showTab(target.replace('-tab','')); return; } if(newIdx!==null){ e.preventDefault(); tabButtons[newIdx].focus(); }}); btn.addEventListener('click', ()=> { const target=btn.getAttribute('aria-controls'); if(target) window.showTab(target.replace('-tab','')); }); }); const activeTab=localStorage.getItem('activeTab')||'label'; setActiveTabByName(activeTab, false); }); let diagnosticData={ 'differential-trip': { label: "Disjoncteur différentiel qui saute", severity: 'élevé', urgent: true, causes: [ "Fuite de courant vers la terre sur un appareil ou le câblage.", "Appareil défectueux relié à la terre.", "Humidité ou infiltration d’eau dans l’installation.", "Défaut d’isolement sur un circuit ou appareil." ], solutions: [ "Débranchez tous les appareils et rebranchez-les un à un pour identifier le fautif.", "Faites mesurer les courants de fuite par un professionnel PROQUELEC.", "Vérifiez l’état des câbles et des prises reliées à la terre.", "Remplacez ou réparez l’appareil ou le circuit défectueux." ], resources: ['guide-differentiel','contact-pro'] }, 'no-earth': { label: "Prise de terre absente ou défectueuse", severity: 'moyen', urgent: false, causes: [ "Absence de conducteur de terre dans la prise ou le tableau.", "Raccordement mal réalisé ou section de terre insuffisante.", "Oxydation ou rupture du conducteur de terre.", "Installation ancienne sans protection différentielle." ], solutions: [ "Testez la continuité de la terre avec un testeur adapté.", "Faites vérifier le raccordement au tableau par un professionnel.", "Remplacez ou réparez le conducteur de terre si nécessaire.", "Installez un dispositif différentiel 30mA si absent." ], resources: ['feuillet-mise-a-la-terre','contact-pro'] }, 'device-trip': { label: "Appareil qui fait disjoncter le circuit", severity: 'high', urgent: true, causes: [ "Appareil présentant un défaut d’isolement ou un court-circuit interne.", "Protection inadaptée ou usée.", "Câblage défectueux ou connexion desserrée sur la prise concernée." ], solutions: [ "Testez l’appareil sur une autre prise pour confirmer le défaut.", "Faites mesurer l’isolement par un professionnel PROQUELEC.", "Remplacez la protection ou la prise si nécessaire." ], resources: ['guide-appareils','contact-pro'] }, 'panel-overload': { label: "Tableau électrique surchargé", severity: 'high', urgent: true, causes: [ "Trop d’appareils ou de circuits raccordés sur le même tableau.", "Répartition inadaptée des charges.", "Chaleur excessive ou traces de brûlure sur le tableau." ], solutions: [ "Faites réaliser un audit du tableau par un professionnel PROQUELEC.", "Répartissez les circuits sur plusieurs tableaux si possible.", "Vérifiez la température et l’état des connexions." ], resources: ['guide-tableau','contact-pro'] }, 'fuse-blow': { label: "Fusibles qui grillent fréquemment", severity: 'medium', urgent: false, causes: [ "Surintensité ou surcharge sur le circuit.", "Défaut d’isolement ou court-circuit intermittent.", "Calibre du fusible inadapté à la charge réelle." ], solutions: [ "Vérifiez le calibre du fusible et remplacez-le par un modèle adapté.", "Faites rechercher les défauts d’isolement par un professionnel.", "Réduisez la charge sur le circuit concerné." ], resources: ['guide-fusibles','contact-pro'] }, 'voltage-fluctuation': { label: "Variation de tension importante", severity: 'medium', urgent: false, causes: [ "Fluctuations du réseau public ou instabilité de l’alimentation.", "Surcharge sur le réseau ou installation sous-dimensionnée.", "Longueur excessive des câbles sans section adaptée.", "Connexions oxydées ou défectueuses.", "Appareils puissants branchés simultanément." ], solutions: [ "Faites mesurer la tension par un professionnel pour identifier la source.", "Réduisez la charge sur le circuit concerné et évitez de brancher trop d’appareils à la fois.", "Remplacez les câbles par une section supérieure si nécessaire.", "Faites vérifier et resserrer les connexions électriques.", "Contactez votre fournisseur d’électricité si le problème vient du réseau public." ], resources: ['guide-cablage','contact-pro'] }, 'wifi-domotic': { label: "Problème de connexion Wi-Fi ou domotique", severity: 'faible', urgent: false, causes: [ "La box internet ou le routeur est hors service ou mal configuré.", "Interférences électromagnétiques dues à des appareils électriques proches.", "Modules domotiques mal installés ou non alimentés.", "Câblage réseau ou prises RJ45 défectueuses.", "Problème de portée ou de signal Wi-Fi trop faible." ], solutions: [ "Redémarrez la box ou le routeur et vérifiez la configuration réseau.", "Éloignez les appareils électriques susceptibles de créer des interférences.", "Vérifiez l’alimentation et l’installation des modules domotiques.", "Testez les câbles réseau et remplacez les prises défectueuses.", "Installez un répéteur Wi-Fi ou rapprochez les équipements connectés." ], resources: ['guide-domotique','contact-pro'] }, 'no-power': { label: "Aucune lumière allumée / Coupure générale", severity: 'high', urgent: true, causes: [ "Le disjoncteur principal est coupé ou déclenché.", "Panne générale du réseau public ou coupure fournisseur.", "Défaut sur le câble d'alimentation principal.", "Surcharge ou court-circuit sur le circuit concerné.", "Connexions desserrées ou câblage défectueux.", "Un appareil branché présente un défaut d'isolement ou un court-circuit interne." ], solutions: [ "Réarmez le disjoncteur principal après avoir identifié la cause.", "Contactez votre fournisseur d'électricité si la panne est générale.", "Faites vérifier le câblage et les connexions par un professionnel PROQUELEC.", "Débranchez les appareils suspects et testez-les sur une autre prise." ], resources: ['contact-pro'] }, 'flicker-lights': { label: "Scintillement fréquent ou lors d'un appareil spécifique", severity: 'medium', urgent: false, causes: [ "Absence de piquet de terre ou conducteur de terre non raccordé.", "Installation ancienne sans protection différentielle.", "Oxydation ou rupture du conducteur de terre." ], solutions: [ "Faites réaliser une mise à la terre conforme par un professionnel.", "Vérifiez la continuité du conducteur de terre.", "Installez un dispositif différentiel 30mA si absent." ], resources: ['feuillet-mise-a-la-terre','contact-pro'] }, 'unknown-panel': { label: 'Tableau électrique non identifié / incomplet', severity: 'medium', urgent: false, causes: [ 'Absence de schéma unifilaire ou repérage des circuits.', 'Tableau incomplet ou modifié sans contrôle.', 'Aucun schéma unifilaire fourni complique la compréhension de l’installation.' ], solutions: [ 'Faites réaliser un relevé unifilaire par un professionnel PROQUELEC.', 'Demandez la mise à jour du tableau et des protections selon la norme.', 'Vérifiez la conformité des circuits et des protections.' ], resources: ['guide-securite','contact-pro'] }, 'power-strips': { label: 'Multiprises et rallonges permanentes', severity: 'medium', urgent: false, causes: [ 'L’usage inapproprié de multiprises peut causer une surcharge et un risque d’incendie.', 'Rallonges non adaptées ou en mauvais état.', 'Absence de prises fixes suffisantes dans l’installation.' ], solutions: [ 'Limitez l’usage des multiprises et rallonges à des usages temporaires.', 'Faites installer des prises fixes supplémentaires conformes à la norme NF C15-100.', 'Remplacez les rallonges ou multiprises défectueuses.' ], resources: ['guide-prises','contact-pro'] }, 'old-installation': { label: 'Vieille installation (fils coton, fusibles anciens)', severity: 'high', urgent: true, causes: [ 'Présence de fils en coton ou isolant dégradé, risque d’échauffement et d’incendie.', 'Fusibles ou protections obsolètes ne garantissent plus la sécurité des personnes et des biens.', 'Absence de mise à la terre ou de différentiel adapté.', 'Normes électriques non respectées, danger pour les occupants.' ], solutions: [ 'Faites réaliser une rénovation complète de l’installation par un professionnel PROQUELEC.', 'Remplacez tous les fils et protections par des modèles conformes.', 'Installez une mise à la terre et un différentiel 30mA pour la sécurité.', 'Demandez un diagnostic complet avant toute intervention.' ], resources: ['contact-pro','guide-securite'] }, 'no-electricity': { label: 'Pas d’électricité du tout', severity: 'high', urgent: false, causes: [ 'Le disjoncteur général peut être déclenché suite à une surcharge ou un court-circuit majeur.', 'Une panne du réseau public d’électricité peut impacter tout le quartier ou la zone.', 'Un câble d’alimentation principal endommagé ou mal connecté peut interrompre toute la distribution.' ], solutions: [ 'Vérifiez visuellement et testez la position du disjoncteur principal. Réarmez-le si besoin.', 'Contactez votre fournisseur d’électricité pour vérifier l’état du réseau.', 'Si le problème persiste, faites intervenir un professionnel PROQUELEC pour un diagnostic approfondi.' ], resources: ['contact-pro'] }, 'partial-electricity': { label: 'Électricité partielle (certaines pièces seulement)', severity: 'medium', urgent: false, causes: [ 'Un disjoncteur divisionnaire peut se déclencher suite à une surcharge ou un défaut localisé.', 'Un court-circuit ou une surcharge sur un circuit secondaire peut couper l’alimentation de certaines pièces.', 'Des connexions desserrées ou des câbles endommagés peuvent provoquer des coupures intermittentes.' ], solutions: [ 'Vérifiez chaque disjoncteur divisionnaire et identifiez le circuit concerné.', 'Débranchez les appareils non essentiels pour réduire la charge et testez le réarmement.', 'Faites inspecter le câblage et les connexions par un professionnel PROQUELEC.' ], resources: ['memento-sections'] }, 'breaker-frequently': { label: 'Disjoncteur qui saute fréquemment', severity: 'medium', urgent: false, causes: [ 'Une surcharge répétée du circuit peut être causée par trop d’appareils branchés simultanément.', 'Un court-circuit intermittent peut provenir d’un appareil ou d’un câble endommagé.', 'Une fuite de courant détectée par le différentiel indique un défaut d’isolement ou d’appareil.' ], solutions: [ 'Répartissez les appareils sur plusieurs circuits pour éviter la surcharge.', 'Testez chaque appareil et câble pour identifier un éventuel défaut.', 'Faites contrôler l’isolement et remplacez les protections si nécessaire.' ], resources: ['feuillet-disjoncteur'] }, 'flicker': { label: 'Lumières qui scintillent', severity: 'low', urgent: false, causes: [ 'Un faux-contact dans une douille ou un luminaire peut provoquer des scintillements.', 'Des câbles ou bornes desserrées entraînent des variations d’intensité.', 'Une variation de tension ou une ampoule défectueuse peut être en cause.' ], solutions: [ 'Vérifiez et resserrez toutes les connexions électriques des luminaires.', 'Remplacez les ampoules par des modèles adaptés et testés.', 'Si le problème persiste, faites appel à un professionnel pour une inspection complète.' ], resources: ['guide-eclairage'] }, 'socket-hot': { label: 'Prise qui chauffe ou odeur de brûlé', severity: 'high', urgent: true, causes: [ 'Une borne desserrée dans la prise peut générer un échauffement dangereux.', 'Une surcharge locale ou un appareil défectueux peut provoquer une surchauffe.', 'Un câble sous-dimensionné pour la charge entraîne un risque d’incendie.' ], solutions: [ 'Coupez immédiatement le circuit et débranchez tous les appareils.', 'Ne réutilisez pas la prise avant réparation et contrôle.', 'Faites remplacer la prise et vérifiez la section des conducteurs selon la norme NF C15-100.' ], resources: ['guide-prises'] }, 'sparks-smoke': { label: 'Étincelles ou fumée', severity: 'critique', urgent: true, causes: [ 'Des fils nus ou un isolant endommagé peuvent provoquer des étincelles ou de la fumée.', 'Un appareillage défectueux peut entraîner un court-circuit grave.', 'Une connexion desserrée peut générer un échauffement et un risque d’incendie.' ], solutions: [ 'Coupez immédiatement l’alimentation générale pour éviter tout danger.', 'N’intervenez pas vous-même, contactez les services d’urgence si nécessaire.', 'Ne réarmez pas le circuit avant l’intervention d’un professionnel PROQUELEC.' ], resources: ['urgence','contact-pro'] }, 'electric-shock': { label: 'Choc électrique en touchant un appareil', severity: 'critical', urgent: true, causes: [ 'Un défaut d’isolement sur l’appareil peut provoquer un choc électrique direct.', 'L’absence ou la défaillance de la prise de terre augmente le risque d’électrisation.', 'Un dispositif différentiel (DDR 30mA) absent ou non fonctionnel ne protège pas contre les défauts.' ], solutions: [ 'Ne touchez plus l’appareil et débranchez-le si possible sans danger.', 'Faites vérifier la mise à la terre et le différentiel par un professionnel.', 'Remplacez l’appareil ou faites réaliser la mise en conformité par PROQUELEC.' ], resources: ['contact-pro'] }, 'strange-noise': { label: 'Bruits anormaux (bourdonnements, crépitements)', severity: 'medium', urgent: false, causes: [ 'Un mauvais contact ou des bornes desserrées peuvent générer des bruits électriques.', 'Un disjoncteur ou matériel électrique usé peut produire des crépitements.', 'Un ballast ou transformateur défectueux est souvent source de bourdonnement.' ], solutions: [ 'Localisez précisément la source du bruit et coupez le circuit concerné.', 'Inspectez et resserrez toutes les connexions électriques.', 'Remplacez l’élément défectueux après vérification par un professionnel.' ], resources: ['memento-symboles'] }, 'appliances-fail': { label: "Appareils qui s'éteignent ou grillent souvent", severity: 'high', urgent: false, causes: [ 'Une surtension locale ou l’absence de parafoudre peut endommager les appareils sensibles.', 'Un problème d’alimentation intermittent peut provoquer des arrêts ou des pannes.', 'Un appareil sensible sans protection adéquate est exposé aux variations du réseau.' ], solutions: [ 'Installez un parafoudre ou un dispositif de protection contre les surtensions sur le tableau.', 'Utilisez un onduleur pour les équipements sensibles et informatiques.', 'Faites analyser la qualité de l’alimentation par un professionnel PROQUELEC.' ], resources: ['feuillet-parafoudre'] }, 'big-appliance-off': { label: 'Chauffe-eau, plaque ou gros appareil qui ne fonctionne pas', severity: 'medium', urgent: false, causes: [ 'Un disjoncteur ou une protection spécialisée peut se déclencher en cas de défaut ou de surcharge.', 'Un câble de section insuffisante pour l’appareil peut entraîner une coupure ou un échauffement.', 'Un problème sur la commande ou l’appareil lui-même peut empêcher son fonctionnement.' ], solutions: [ 'Vérifiez la protection dédiée du circuit et réarmez si besoin.', 'Contrôlez la calibration et la section du circuit dédié à l’appareil.', 'Contactez un technicien qualifié PROQUELEC pour une intervention sécurisée.' ], resources: ['contact-pro'] }, 'smell-no-smoke': { label: "Odeur persistante de brûlé sans fumée visible", severity: 'high', urgent: true, causes: [ 'Un point chaud caché dans un boîtier ou un câble peut dégager une odeur de brûlé sans fumée.', 'Une connexion desserrée ou oxydée peut provoquer un échauffement local dangereux.' ], solutions: [ 'Coupez le circuit concerné et ne le réarmez pas avant inspection.', 'Faites réaliser une inspection complète par un professionnel PROQUELEC.' ], resources: ['contact-pro'] }, 'unknown-panel': { label: 'Tableau électrique non identifié / incomplet', severity: 'medium', urgent: false, causes: [ 'L’absence d’étiquetage des circuits rend difficile toute intervention ou dépannage.', 'Aucun schéma unifilaire fourni complique la compréhension de l’installation.' ], solutions: [ 'Étiquetez clairement chaque circuit et fournissez un schéma à jour.', 'Faites réaliser un relevé unifilaire par un professionnel PROQUELEC.' ], resources: ['guide-securite'] }, 'power-strips': { label: 'Multiprises et rallonges permanentes', severity: 'medium', urgent: false, causes: [ 'Le manque de prises murales conduit à l’utilisation excessive de multiprises.', 'L’usage inapproprié de multiprises peut causer une surcharge et un risque d’incendie.' ], solutions: [ 'Évitez l’utilisation permanente de multiprises et rallonges pour des appareils puissants.', 'Faites installer des prises fixes supplémentaires conformes à la norme NF C15-100.' ], resources: ['guide-prises'] }, 'old-installation': { label: 'Vieille installation (fils coton, fusibles anciens)', severity: 'high', urgent: false, causes: [ 'Un câblage ancien non conforme (fils coton) présente des risques d’incendie et d’électrisation.', 'L’absence de mise à la terre ou de DDR expose l’installation à des défauts dangereux.', 'Des fusibles ou protections obsolètes ne garantissent plus la sécurité des personnes et des biens.' ], solutions: [ 'Planifiez une rénovation complète de l’installation avec un professionnel PROQUELEC.', 'Mettez l’installation en conformité avec la norme NF C15-100 / NS 01-001.', 'Remplacez les protections et réalisez la mise à la terre si nécessaire.' ], resources: ['contact-pro'] }}; function ensureHelpButtons(){ const container=document.querySelector('#diagnostic-tab .rounded-xl .grid'); if(!container) return false; if(container.querySelector('.help-block')) return true; const helpDiv=document.createElement('div'); helpDiv.className='help-block mt-4 p-4 rounded-lg shadow-sm bg-white border'; helpDiv.innerHTML=`

Besoin d'aide ?

Si vous avez besoin d'une intervention professionnelle :

`; container.appendChild(helpDiv); return true; } if(!ensureHelpButtons()) document.addEventListener('DOMContentLoaded', ensureHelpButtons); function updateDiagnostic(){ const checkboxes=document.querySelectorAll('.safety-checkbox'); let totalChecked=0; diagnosticData.categories.protection.checked=0; diagnosticData.categories.equipement.checked=0; diagnosticData.categories.conformite.checked=0; checkboxes.forEach(checkbox=> { if(checkbox.checked){ totalChecked++; const category=checkbox.closest('.checklist-item').dataset.category; diagnosticData.categories[category].checked++; }}); const progressPercentage=(totalChecked / diagnosticData.totalItems) * 100; updateDiagnosticMessage(totalChecked); } function updateDiagnosticMessage(totalChecked){ const resultMessage=document.getElementById('result-message'); const recommendationsList=document.getElementById('recommendations-list'); const progressPercentage=(totalChecked / diagnosticData.totalItems) * 100; if(totalChecked===diagnosticData.totalItems){ resultMessage.innerHTML=` ✅ Votre installation est conforme aux normes de sécurité. `; recommendationsList.innerHTML=`

Continuez à vérifier régulièrement votre installation.

Planifiez un contrôle professionnel tous les 5 ans.

`; } else if(progressPercentage >=70){ resultMessage.innerHTML=` ⚠️ Votre installation est globalement sûre, mais quelques améliorations sont possibles. `; recommendationsList.innerHTML=`

Vérifiez les points manquants pour une sécurité optimale.

Priorisez les éléments liés à la protection fondamentale.

`; } else if(progressPercentage >=40){ resultMessage.innerHTML=` ⚠️ Votre installation présente des risques modérés. `; recommendationsList.innerHTML=`

Plusieurs éléments critiques nécessitent votre attention.

Commencez par les problèmes de protection fondamentale et de conformité.

Envisagez un audit professionnel complet.

`; }else{ resultMessage.innerHTML=` ❌ Votre installation présente des risques importants. `; recommendationsList.innerHTML=`

Attention : Votre installation n'est pas sûre.

Ne tardez pas à faire vérifier votre installation par un professionnel.

Évitez d'utiliser les circuits défectueux en attendant.

`; }} function generateDiagnosticReport(){ const d=window._lastDiagnostic; console.log('generateDiagnosticReport called', d); if(!d){ console.warn('generateDiagnosticReport: no diagnostic available'); alert('Veuillez d’abord exécuter un diagnostic.'); return; } const safeLabel=escapeHtml(d.label||'Diagnostic'); const safeSeverity=escapeHtml(d.severity||'N/A'); const safeTimestamp=escapeHtml(new Date(d.timestamp).toLocaleString('fr-FR')); const causesHtml=(d.causes||[]).map(c=> `
  • ${escapeHtml(c)}
  • `).join('')||'
  • Aucune information
  • '; const solutionsHtml=(d.solutions||[]).map(s=> `
  • ${escapeHtml(s)}
  • `).join('')||'
  • Aucune information
  • '; const html=` Rapport - ${safeLabel}

    Rapport de Diagnostic PROQUELEC

    ${safeTimestamp}  |  ${safeSeverity.toUpperCase()}

    ${safeLabel}

    Causes possibles

      ${causesHtml}

    Solutions recommandées

      ${solutionsHtml}
    Rapport généré par l'outil PROQUELEC. Ce document est informatif et ne remplace pas l'intervention d'un professionnel.
    `; let safe=html; try { if(window.DOMPurify) safe=DOMPurify.sanitize(html); } catch (e){ console.warn('DOMPurify sanitize failed', e); } try { const blob=new Blob([safe], { type: 'application/msword' }); const url=URL.createObjectURL(blob); const a=document.createElement('a'); a.href=url; a.download=`Rapport_Diagnostic_${d.type||'resultat'}.doc`; document.body.appendChild(a); a.click(); a.remove(); URL.revokeObjectURL(url); console.log('generateDiagnosticReport: download attempted'); } catch (err){ console.error('generateDiagnosticReport: failed to create/download report', err); alert('Impossible de générer le fichier de rapport dans ce navigateur. Consultez la console pour plus de détails.'); }} function resetChecklist(){ document.querySelectorAll('.safety-checkbox').forEach(checkbox=> { checkbox.checked=false; }); document.getElementById('progress-bar').style.width='0%'; document.getElementById('result-message').textContent=''; document.getElementById('recommendations-list').innerHTML=''; document.getElementById('checklist-results').classList.add('hidden'); } function generateSafetyReport(){ const totalChecked=document.querySelectorAll('.safety-checkbox:checked').length; const progressPercentage=(totalChecked / diagnosticData.totalItems) * 100; const reportData={ date: new Date().toLocaleDateString(), totalItems: diagnosticData.totalItems, checkedItems: totalChecked, score: progressPercentage, categories: diagnosticData.categories, status: progressPercentage >=80 ? "Conforme" : progressPercentage >=50 ? "À améliorer":"Non conforme" }; alert(`Rapport de sécurité généré (simulation) :\n - Date: ${reportData.date}\n - Score: ${reportData.score.toFixed(1)}% (${reportData.checkedItems}/${reportData.totalItems})\n - Statut: ${reportData.status}\n\n Détails par catégorie:\n - Protection: ${reportData.categories.protection.checked}/${reportData.categories.protection.total}\n - Équipements: ${reportData.categories.equipement.checked}/${reportData.categories.equipement.total}\n - Conformité: ${reportData.categories.conformite.checked}/${reportData.categories.conformite.total}\n `); console.log("Données du rapport:", reportData); } document.addEventListener('DOMContentLoaded', function(){ const checkboxes=document.querySelectorAll('.safety-checkbox'); }); function applyTranslations(lang){ const translations={ fr: { pro_space: "Espace Pro", advanced_tools: "Outils Techniques Avancés PROQUELEC", tools_description: "Découvrez nos outils professionnels pour optimiser vos installations électriques, réaliser des économies d'énergie et garantir la sécurité.", quality_label: "Label Qualité", simulators: "Simulateurs", guides: "Guides", quotes: "Devis", safety: "Sécurité", diagnostic: "Diagnostic", regulations: "Réglementation", quality_recognition: "Label PROQUELEC - Reconnaissance de la Qualité", quality_guarantee: "Une garantie de sécurité, confort et économie", label_description: "Le label PROQUELEC récompense les entreprises et installateurs respectant les critères stricts de sécurité, d'expertise et de conformité.", label_mission: "Mission du Label :", label_mission_text: "Décerner des labels aux installations électriques assurant sécurité, confort et économie.", security: "Sécurité", security_description: "Respect strict des normes de sécurité électrique.", comfort: "Confort", comfort_description: "Installations optimisées pour le bien-être.", economy: "Économie", economy_description: "Efficacité énergétique et optimisation des coûts.", technical_simulators: "Simulateurs et Calculateurs Techniques", consumption: "Consommation", Câble_calc: "Calcul de câbles", voltage_drop: "Chute de tension", solar_sizing: "Dimensionnement solaire", housing_info: "Informations du Logement", surface: "Surface (m²)", occupants: "Nombre d'occupants", housing_type: "Type de logement", apartment: "Appartement", house: "Maison individuelle", villa: "Villa", calculate_consumption: "Calculer la Consommation", voice_assistant: "Assistant vocal pour diagnostic:", start_listening: "Démarrer l'écoute", listening: "En écoute...", electrical_equipment: "Équipements Électriques", led_lighting: "Éclairage LED", refrigerator: "Réfrigérateur", ac: "Climatisation", analysis_results: "Résultats de l'Analyse", monthly_consumption: "Consommation mensuelle estimée:", monthly_cost: "Coût mensuel estimé:", ai_advice: "Conseil IA:", default_advice: "Pensez à utiliser des équipements énergétiquement efficaces pour réduire votre consommation.", calculation_history: "Historique de vos calculs", clear_history: "Effacer l'historique", no_history: "Aucun calcul sauvegardé", interactive_diagnostic: "Guide de Diagnostic Interactif", describe_problem: "Décrivez le Problème", what_happening: "Que se passe-t-il ?", no_power: "Pas d'électricité du tout", partial_power: "Électricité seulement dans certaines pièces", problem_detected: "Problème Détecté", possible_causes: "Causes Possibles :", recommended_solutions: "Solutions Recommandées :", footer_description: "Experts en solutions électriques innovantes et durables.", copyright: "© 2025 PROQUELEC. Tous droits réservés.", burning_smell: "Y a-t-il une odeur de brûlé ?", visible_sparks: "Voyez-vous des étincelles ?", electric_shocks: "Ressentez-vous des chocs électriques ?", smoke_present: "Y a-t-il de la fumée ?", safety_warning: "Attention Sécurité", call_professional: "Contactez immédiatement un électricien qualifié. Ne tentez pas de réparer vous-même." }, en: { pro_space: "Pro Space", advanced_tools: "PROQUELEC Advanced Technical Tools", tools_description: "Discover our professional tools to optimize your electrical installations, save energy and ensure safety.", quality_label: "Quality Label", simulators: "Simulators", guides: "Guides", quotes: "Quotes", safety: "Safety", diagnostic: "Diagnostic", regulations: "Regulations", quality_recognition: "PROQUELEC Quality Label - Recognition", quality_guarantee: "A guarantee of safety, comfort and economy", label_description: "The PROQUELEC label rewards companies and installers who meet strict safety, expertise and compliance criteria.", label_mission: "Label Mission:", label_mission_text: "Award labels to electrical installations ensuring safety, comfort and economy.", security: "Security", security_description: "Strict compliance with electrical safety standards.", comfort: "Comfort", comfort_description: "Installations optimized for well-being.", economy: "Economy", economy_description: "Energy efficiency and cost optimization.", technical_simulators: "Technical Simulators and Calculators", consumption: "Consumption", Câble_calc: "Câble Calculation", voltage_drop: "Voltage Drop", solar_sizing: "Solar Sizing", housing_info: "Housing Information", surface: "Area (m²)", occupants: "Number of occupants", housing_type: "Type of housing", apartment: "Apartment", house: "House", villa: "Villa", calculate_consumption: "Calculate Consumption", voice_assistant: "Voice assistant for diagnosis:", start_listening: "Start listening", listening: "Listening...", electrical_equipment: "Electrical Equipment", led_lighting: "LED Lighting", refrigerator: "Refrigerator", ac: "Air Conditioning", analysis_results: "Analysis Results", monthly_consumption: "Estimated monthly consumption:", monthly_cost: "Estimated monthly cost:", ai_advice: "AI Advice:", default_advice: "Consider using energy-efficient equipment to reduce your consumption.", calculation_history: "Your calculation history", clear_history: "Clear history", no_history: "No saved calculations", interactive_diagnostic: "Interactive Diagnostic Guide", describe_problem: "Describe the Problem", what_happening: "What's happening?", no_power: "No electricity at all", partial_power: "Electricity only in some rooms", problem_detected: "Problem Detected", possible_causes: "Possible Causes:", recommended_solutions: "Recommended Solutions:", footer_description: "Experts in innovative and sustainable electrical solutions.", copyright: "© 2025 PROQUELEC. All rights reserved.", burning_smell: "Is there a burning smell?", visible_sparks: "Do you see sparks?", electric_shocks: "Do you feel electric shocks?", smoke_present: "Is there smoke?", safety_warning: "Safety Warning", call_professional: "Contact a qualified electrician immediately. Do not attempt to repair yourself." }}; document.querySelectorAll('[data-translate]').forEach(element=> { const key=element.getAttribute('data-translate'); if(translations[lang]&&translations[lang][key]){ element.textContent=translations[lang][key]; }}); }