plugins/audit-loi25/skills/loi-25-compliance/SKILL.md
Base de connaissances sur la Loi 25 du Québec (protection des renseignements personnels) appliquée au développement logiciel. Ce skill doit être utilisé quand l'utilisateur demande "audit loi 25", "vérifier la conformité", "protection des données personnelles", "PII", "renseignements personnels", "vie privée", "chiffrement des données sensibles", "droit à l'effacement", "portabilité des données", "EFVP", "évaluation des facteurs relatifs à la vie privée", ou toute question sur la conformité d'un projet aux lois québécoises de protection de la vie privée.
npx skillsauth add SomtechSolutionMAxime/somtech-pack loi-25-complianceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Ce skill fournit les connaissances nécessaires pour auditer un projet Supabase/React/TypeScript selon les exigences de la Loi 25 du Québec. Toutes les références d'articles renvoient à la Loi sur la protection des renseignements personnels dans le secteur privé (RLRQ, c. P-39.1), mise à jour au 11 décembre 2025.
Le rapport d'audit est structuré en deux volets avec des scores séparés :
Couvre tout ce qui touche au code et à l'infrastructure :
Couvre les processus organisationnels et la conformité administrative :
Chaque volet démarre à 100 et décrémente selon les constats :
Score global = (Score Technique × 0.60) + (Score Gouvernance × 0.40)
La Loi 25 (anciennement projet de loi 64) modernise la protection des renseignements personnels au Québec. Toutes ses dispositions sont en vigueur depuis le 22 septembre 2024.
Sanctions (art. 90.1 à 93.1) :
Toute personne exploitant une entreprise doit désigner un responsable de la protection des renseignements personnels. Par défaut, c'est la personne ayant la plus haute autorité dans l'entreprise. Les coordonnées du responsable doivent être publiées sur le site Web de l'entreprise.
L'entreprise doit établir et mettre en œuvre des politiques et des pratiques encadrant sa gouvernance des renseignements personnels. Ces politiques doivent :
Une EFVP doit être réalisée pour tout projet d'acquisition, de développement ou de refonte d'un système d'information impliquant des renseignements personnels. Elle doit aussi être réalisée avant de communiquer des renseignements à l'extérieur du Québec (art. 17 al. 2).
Un incident de confidentialité est : tout accès non autorisé, toute utilisation non autorisée, toute communication non autorisée, ou toute perte de renseignements personnels (art. 3.6).
Obligations en cas d'incident :
Le consentement à la collecte, communication ou utilisation de renseignements personnels doit être :
Les paramètres d'un produit ou service technologique offert au public doivent assurer, par défaut, le plus haut niveau de confidentialité, sans aucune intervention de la personne concernée. Exception : les témoins de connexion (cookies).
Implication technique : Les paramètres de partage, de visibilité et de collecte doivent être désactivés par défaut. L'utilisateur doit activer manuellement tout partage de ses données.
Lorsqu'un renseignement personnel est utilisé pour rendre une décision fondée exclusivement sur un traitement automatisé :
Implication pour les chatbots : Si un chatbot RH prend ou recommande des décisions (approbation de congés, évaluations, etc.), le système doit informer l'employé que la décision est automatisée et offrir un recours humain.
Un renseignement personnel est sensible s'il est de nature médicale, biométrique ou autrement intime, ou s'il suscite, par sa nature ou en raison du contexte de son utilisation ou de sa communication, un degré élevé d'attente raisonnable en matière de vie privée.
Réf : art. 10, 12 al. 2-3. Chiffrement au repos obligatoire + contrôle d'accès strict + consentement exprès.
Réf : art. 2, 10, 20. Contrôle d'accès basé sur le rôle + masquage à l'affichage.
Réf : art. 2. Contrôle d'accès par rôle suffisant.
Chiffrement au repos — Catégorie 1 obligatoire (art. 10) :
Art. 10 : « Une personne qui exploite une entreprise doit prendre les mesures de sécurité propres à assurer la protection des renseignements personnels [...] contre l'accès, l'utilisation, la communication, la modification ou la destruction non autorisés. »
-- Activer pgcrypto
CREATE EXTENSION IF NOT EXISTS pgcrypto;
-- Chiffrer un champ sensible
UPDATE employees SET allergies_encrypted = pgp_sym_encrypt(allergies, current_setting('app.encryption_key'));
-- Déchiffrer à la lecture (dans une fonction RLS-protégée)
SELECT pgp_sym_decrypt(allergies_encrypted, current_setting('app.encryption_key')) as allergies;
Politiques RLS obligatoires (art. 20) :
Art. 20 : « L'accès [...] aux renseignements personnels détenus par une personne qui exploite une entreprise est réservé à ses employés ou mandataires qui ont qualité pour les connaître dans l'exercice de leurs fonctions. »
Audit trail obligatoire (art. 3.5, 3.8) :
La capacité de retracer les accès aux données est essentielle pour :
Exactitude et conservation (art. 11) :
Art. 11 : Les renseignements personnels utilisés pour prendre une décision relative à la personne concernée doivent être à jour et exacts. Ils doivent être conservés aussi longtemps que nécessaire pour la prise de décision et au minimum pendant la durée prévue par règlement pour permettre à la personne d'exercer son droit d'accès.
Exposition minimale (art. 4, 20) :
Art. 4 : La collecte doit se limiter à ce qui est nécessaire à l'objet du dossier. Art. 20 : Seuls ceux qui ont « qualité pour connaître » y ont accès.
Logging sécuritaire (art. 10) :
Les mesures de sécurité incluent la protection contre la divulgation accidentelle dans les logs.
Transfert hors Québec (art. 17) :
Art. 17 al. 1 : Avant de communiquer un renseignement personnel à l'extérieur du Québec, l'entreprise doit s'assurer que le renseignement bénéficiera d'une protection équivalente. Al. 2 : Une EFVP doit être réalisée avant la communication, tenant compte de la sensibilité du renseignement, de la finalité, et du régime juridique applicable dans l'État concerné.
Obligations des mandataires/sous-traitants (art. 18.3) :
Art. 18.3 : Le mandataire ou la personne à qui des renseignements sont communiqués doit n'utiliser les renseignements que pour les fins prévues au contrat et ne pas les conserver après l'expiration du contrat. Un contrat écrit est requis.
Masquage à l'affichage (art. 10, 20) :
514-***-1234 (premiers 3 + derniers 4)j***@gmail.comConfidentialité par défaut (art. 9.1) :
Contrôle d'accès UI (art. 20) :
Destruction/Anonymisation (art. 23) :
Art. 23 al. 1 : Lorsque les fins auxquelles un renseignement personnel a été recueilli sont accomplies, l'entreprise doit le détruire ou l'anonymiser. Al. 3 : L'anonymisation doit se faire selon les meilleures pratiques généralement reconnues et selon les critères et modalités déterminés par règlement. L'anonymisation doit être irréversible — il ne doit plus être raisonnablement possible d'identifier directement ou indirectement la personne.
Portabilité (art. 27 al. 3) :
Art. 27 al. 3 : La personne peut demander que les renseignements recueillis auprès d'elle lui soient communiqués dans un format technologique structuré et couramment utilisé, ou qu'ils soient communiqués à une personne ou un organisme autorisé par la loi à recueillir ce renseignement.
# Catégorie 1 (sensibles — art. 12 al. 2)
allergies, medical_*, health_*, salary*, wage*, pay_*, rrsp*, benefit*,
sin, nas, social_insurance, biometric*, orientation*, ethnicity*, religion*
# Catégorie 2 (personnelles)
birth_date, birth_year, date_of_birth, gender, sex,
phone, telephone, mobile, cell, personal_email,
address, street, city, postal_code, zip_code,
emergency_contact*, next_of_kin*,
first_name, last_name, full_name (quand combinés avec d'autres PII)
# Catégorie 3 (professionnelles)
email (professionnel), position, department, hire_date, employee_number
// RISQUE (art. 4, 20): Select * expose tous les champs PII
.select('*')
// RISQUE (art. 20): Pas de filtrage RLS visible
.from('employees').select('phone, address, birth_date')
// RISQUE (art. 10): PII dans les logs
console.log('User data:', userData)
logger.info({ email, phone }, 'Profile updated')
// RISQUE (art. 10): PII dans les URL params
navigate(`/profile?email=${email}&phone=${phone}`)
// RISQUE (art. 10): PII stockée dans localStorage
localStorage.setItem('userProfile', JSON.stringify(profile))
// RISQUE (art. 12.1): Décision automatisée sans transparence
if (chatbot.recommend('deny_leave', employeeData)) { ... }
// RISQUE (art. 9.1): Partage activé par défaut
const defaultSettings = { shareProfile: true, publicDirectory: true }
Pour les règles d'audit détaillées par composant, consulter :
references/regles-audit-db.md — Règles spécifiques base de donnéesreferences/regles-audit-frontend.md — Règles spécifiques frontendreferences/regles-audit-api.md — Règles spécifiques API et logsreferences/modele-rapport.md — Template du rapport d'audittools
Documentation de référence SomCraft — DMS Markdown-native avec AI, MCP server, et Studio. À consulter pour toute question sur l'architecture, les APIs, les concepts, ou l'exploitation d'une instance SomCraft. TRIGGERS : somcraft, dms, document management, workspace somcraft, studio somcraft, mcp somcraft, api somcraft
tools
Déployer une instance SomCraft pour un client existant (migrations Supabase + Fly.io + skills). Orchestre 7 phases : pré-flight, plan, migrations, seed, déploiement, smoke tests, installation des skills. TRIGGERS : deploy-somcraft, déployer somcraft, installer somcraft, somcraft client, setup somcraft, upgrade somcraft, status somcraft
tools
Génère l'intégralité de la configuration d'un silo SomTech : docker-compose, services Fly.io, constitutions d'agents, et templates d'environnement. Valide les métadonnées d'application avant génération. À utiliser après validation initiale du client et avant déploiement.
development
Exécute le déploiement complet d'une silo après sa génération : conteneurs Docker, environnement de développement Fly.io, branche Git, et configuration Netlify. Transforme les configs générées en infrastructure active avec URLs stables et builds automatisés.