Évaluation des facteurs relatifs à la vie privée (ÉFVP / DPIA) — WeInspect
Version v1.0 — 2026-05-04 Conformément à la Loi 25 (RLRQ c P-39.1) art. 3.3 — évaluation obligatoire pour tout projet impliquant des renseignements personnels présentant un risque sérieux d'atteinte.
Le présent document est la version complète de l'évaluation, partageable avec : la Commission d'accès à l'information du Québec sur demande (Loi 25 art. 81.0.1), un avocat externe pour validation, des design partners qui demandent des garanties écrites pour leurs clients institutionnels.
1. Identification du projet
| Champ | Valeur | |---|---| | Nom du projet | WeInspect — plateforme SaaS d'inspection résidentielle BNQ 3009-500 | | Responsable du traitement | [ENTITÉ LÉGALE], NEQ [NEQ], [ADRESSE SIÈGE] | | Responsable de la protection | Le responsable de la protection des renseignements personnels — dpo@ouiinspect.ca | | Date de l'évaluation | 2026-05-04 | | Auteur de l'ÉFVP | Claude (Anthropic), revue par le responsable du projet, à valider par avocat externe | | Phase du projet | Pré-lancement public (cible 2026-11-04) | | Nature du traitement | Collecte, stockage, transformation IA, partage, conservation de renseignements personnels | | Date de la dernière revue | 2026-05-04 (initiale) | | Date de la prochaine revue | 2027-05-04 (annuelle) ou avant en cas de changement substantiel |
2. Contexte et justification du traitement
2.1 Pourquoi WeInspect a-t-il besoin de traiter des renseignements personnels ?
Un inspecteur en bâtiment au Québec exerce une activité encadrée par la norme BNQ 3009-500 R2022 v1, le Code civil du Québec (responsabilité, vices cachés), et les codes de déontologie d'associations professionnelles (AIBQ, AICQ, AAPI, InterNACHI). Pour produire un rapport d'inspection, l'inspecteur doit nécessairement collecter :
- L'adresse de la propriété
- Les coordonnées du client demandant l'inspection (souvent l'acheteur potentiel)
- Des photos documentant l'état des composants
- Ses observations textuelles, dictées ou rédigées
Sans ces renseignements, l'inspection ne peut pas produire un livrable exploitable. WeInspect est l'outil professionnel que l'inspecteur utilise pour structurer ce travail. Le traitement est donc nécessaire et proportionné à la finalité.
2.2 Alternatives évaluées et rejetées
| Alternative | Raison du rejet | |---|---| | Saisie 100 % manuelle sans capture | Inefficace ; les inspecteurs utilisent déjà des outils numériques (Vesta, UData, Enzo, Excel + Word) ; ne pas offrir de meilleur outil = ils utilisent moins bon, pas moins de données | | Photos/audio sans persistance (RAM seulement) | Mode hors-ligne impossible ; obligation pro de conservation 730j non respectable | | Pas d'IA, pas de traitement automatisé | Ne résout pas le besoin de capture/stockage ; supprime la valeur productivité, donc pas le bon trade-off | | Hébergement aux États-Unis | Rejet : on choisit Canada ca-central-1 Supabase pour minimiser les transferts transfrontaliers | | Auto-hébergement chez chaque inspecteur | Impossible à maintenir au volume cible ; risque sécurité accru sans expertise opérationnelle |
2.3 Bases légales du traitement
Selon la finalité :
| Finalité | Base légale Loi 25 / Code civil | |---|---| | Fournir le service WeInspect | Exécution du contrat (art. 12 al. 1) | | Génération IA constats, transcription, classification | Consentement explicite (art. 12 al. 2 et art. 14) | | Géolocalisation pendant capture | Consentement explicite | | Enregistrement audio | Consentement explicite | | Facturation | Obligation légale (Loi sur les impôts QC, ARC) | | Sécurité, prévention de fraude | Intérêt légitime (art. 12 al. 3) — proportionné, encadré par RLS et logs | | Communications produit | Consentement séparé | | Communications marketing | Consentement séparé (opt-in distinct) | | Conservation post-suppression compte | Obligation légale (factures 7 ans, audit consents 7 ans) |
3. Description détaillée du traitement
3.1 Catégories de personnes concernées
| Catégorie | Volume estimé an 1 | Volume cible an 3 | |---|---|---| | Inspecteurs utilisateurs (clients WeInspect) | 100-200 | 800-1500 | | Clients d'inspecteurs (acheteurs/propriétaires dont l'adresse + contact apparaissent dans une inspection) | ~5x utilisateurs | ~5x utilisateurs | | Visiteurs portail client public /client/[token] | ~10x utilisateurs | ~10x utilisateurs | | Visiteurs site marketing public | ~50x utilisateurs | ~100x utilisateurs |
3.2 Catégories de renseignements personnels collectés
3.2.1 Sur l'inspecteur (utilisateur compte)
| Renseignement | Sensibilité | Source | Finalité | |---|---|---|---| | Nom, prénom | Faible | Saisie inscription | Compte | | Courriel | Faible-moyen (identifiant) | Saisie inscription | Compte, communications | | Mot de passe (haché bcrypt) | Critique | Saisie inscription | Authentification | | Téléphone | Faible-moyen | Saisie optionnelle | Communications | | Numéro licence pro (RBQ, AIBQ, etc.) | Moyen | Saisie optionnelle | Vérification + page rapport | | Photo profil | Faible | Upload optionnel | Branding rapports | | Signature électronique | Moyen | Upload | Signature rapports | | Coordonnées bancaires | Critique | Stripe (PCI-DSS Level 1) | Paiement — WeInspect ne stocke jamais numéro carte | | IP, user-agent, sessions | Moyen | Logs serveur | Sécurité, débogage, audit |
3.2.2 Sur le client de l'inspecteur (acheteur, propriétaire)
| Renseignement | Sensibilité | Source | Finalité | |---|---|---|---| | Nom, prénom | Faible | Saisie inspecteur | Identification dossier inspection | | Courriel | Faible-moyen | Saisie inspecteur | Envoi rapport | | Téléphone | Faible-moyen | Saisie optionnelle | Communications inspecteur ↔ client | | Adresse propriété inspectée | Moyen | Saisie inspecteur | Objet de l'inspection | | Coordonnées GPS propriété | Moyen | Capture mobile | Précision documentaire | | Photos intérieur/extérieur propriété | Élevée (vie privée résidentielle, occupants éventuels) | Capture inspecteur | Preuve documentaire | | Audio dictée inspecteur (mention occasionnelle de noms, dates) | Élevée | Capture inspecteur | Transcription IA |
3.2.3 Sur le visiteur portail public /client/[token]
| Renseignement | Sensibilité | Source | Finalité | |---|---|---|---| | IP visiteur | Moyen | Logs accès | Audit sécurité (90j) | | Adresse propriété (déjà dans le rapport) | Moyen | Hérité | Affichage |
3.2.4 Renseignements générés par l'IA (sur le client/propriété)
| Renseignement | Sensibilité | Source | Finalité | |---|---|---|---| | Transcription audio | Élevée (peut contenir noms, observations sensibles) | OpenAI Whisper | Constat texte | | Suggestions constats | Moyen | Anthropic Claude | Productivité inspecteur | | Classifications photos | Faible-moyen | Claude vision | Organisation rapport | | Traduction des constats (FR↔EN) | Élevée (texte de constat, peut contenir noms/observations) | Azure AI Translator | Rapport bilingue |
3.3 Cycle de vie des renseignements
Capture mobile (offline)
↓
Stockage local SQLite + FileSystem (Expo) [chiffrement OS Keychain]
↓
Sync cloud (TLS 1.3)
↓
Supabase Postgres + Storage (ca-central-1 Canada) [AES-256 at rest, RLS]
↓
[Optionnel, sur action utilisateur + consentement]
→ Anthropic API (us-east-1, ZDR) → Claude Sonnet 4.6 → réponse
→ OpenAI API (us-east-1, retention 0d) → Whisper → transcription
→ OpenAI Embeddings (un seul appel à l'indexation) → pgvector
→ Azure AI Translator (région Canada best-effort, résidence non garantie / au pire US) → traduction FR↔EN des constats
↓
Affichage UI inspecteur (web ou Expo natif)
↓
[Génération PDF] → Storage Supabase → lien `/client/[token]`
↓
Acheteur lit, télécharge éventuellement (logs accès 90j)
↓
Conservation 730j post-publication (obligation pro)
↓
Archivage automatique (Cron Netlify) → suppression PDF, conservation index uniquement
↓
Suppression définitive (sauf obligations légales tax/audit 7 ans)
4. Sous-traitants identifiés
Voir subprocessors-list.md (page publique /transparence/sous-traitants) pour la liste complète à jour.
Synthèse :
| Sous-traitant | Pays | Garanties contractuelles | Risque résiduel | |---|---|---|---| | Supabase (DB, auth, storage) | Canada ca-central-1 | DPA, ISO 27001, SOC 2 | Faible — Canada, hébergement principal | | Anthropic (Claude) | États-Unis | Zero Data Retention API tier, no training, DPA | Moyen — transit cross-border, mitigé par chiffrement et ZDR | | OpenAI (Whisper, embeddings) | États-Unis | API zero-retention, no training, DPA | Moyen — idem | | Stripe (paiements) | Canada/É-U | PCI-DSS Level 1, Stripe Privacy Center | Faible — paiements isolés, scope restreint | | Resend (email transactionnel) | États-Unis | DPA, SPF/DKIM, sub-processor list | Faible — courriels seulement | | Netlify (hosting front + CDN) | États-Unis | SOC 2, DPA | Faible — pas de RP transitant en logique applicative | | Plausible (analytics) | Union européenne | Cookieless, RGPD, IP hashée + sel quotidien | Très faible | | Sentry (crash reports mobile) | États-Unis | DPA, sendDefaultPii: false, scrubbing SDK testé | Faible-moyen — risque PII mitigé par filtrage strict | | Microsoft Azure (traduction constats) | Canada best-effort / au pire É-U (résidence non garantie par l'endpoint global) | DPA à signer, ISO 27001/SOC 2, clés serveur-only | Moyen — transit possiblement cross-border, à parité avec OpenAI/Anthropic |
4.1 Transferts hors Québec
Conformément à Loi 25 art. 17, avant tout transfert hors Québec :
- Évaluation de la juridiction destinataire (États-Unis : pas d'adéquation officielle au sens RGPD, mais clauses contractuelles standards adoptées)
- Azure AI Translator (traduction des constats, S40.PR40.69) : ressource provisionnée best-effort en région Canada (
canadacentral) ; la résidence du traitement n'est pas garantie par l'endpoint global d'Azure. Au pire, le transfert a lieu aux États-Unis — couvert par les mêmes clauses contractuelles standards et le DPA Microsoft (à signer). Posture à parité avec OpenAI/Anthropic, sans dégradation vs l'existant. - Documentation des mesures techniques et contractuelles (chiffrement transit + repos, DPA, ZDR)
- Information de l'utilisateur (politique de confidentialité, ce DPIA résumé, page transparence)
- Possibilité refus utilisateur via consentement granulaire IA → bascule mode sans IA
5. Évaluation des risques pour les droits et libertés
Méthodologie : matrice probabilité × gravité sur 4 niveaux. Risque résiduel = après mitigations en place.
5.1 Risque R1 — Accès non autorisé aux données d'un inspecteur (compte compromis)
| Aspect | Évaluation | |---|---| | Probabilité brute | Élevée (mots de passe faibles industrie ~30%, phishing) | | Gravité | Élevée (accès à toutes inspections + données clients de cet inspecteur) | | Mitigations | Politique mots de passe 12+ char vérifiés HaveIBeenPwned, MFA disponible, alertes login nouveau device, rate-limiting login, RLS Postgres | | Probabilité résiduelle | Moyenne | | Gravité résiduelle | Élevée (impact non réduit en cas d'accès réussi) | | Risque résiduel | Moyen | | Action complémentaire | MFA obligatoire pour comptes Équipe (>10 inspections/mois) — à discuter S35 phase 2 |
5.2 Risque R2 — Accès croisé entre utilisateurs (faille RLS)
| Aspect | Évaluation | |---|---| | Probabilité brute | Faible-moyenne (RLS Postgres bien implémentée) | | Gravité | Catastrophique (fuite données entre inspecteurs concurrents) | | Mitigations | RLS sur toutes tables user-scoped (auth.uid()::text = user_id), tests RLS exhaustifs en CI, audit trimestriel | | Probabilité résiduelle | Faible | | Gravité résiduelle | Catastrophique | | Risque résiduel | Moyen-élevé (gravité non mitigeable, seule la probabilité l'est) | | Action complémentaire | Tests RLS automatisés étendus (S35 phase 2), pen-test externe annuel |
5.3 Risque R3 — Hallucination IA conduisant à un rapport erroné publié
| Aspect | Évaluation | |---|---| | Probabilité brute | Élevée (LLM hallucinent par nature) | | Gravité | Moyenne pour WeInspect (responsabilité reste inspecteur), Élevée pour le client final | | Mitigations | Prompt strict anti-invention, exigence validation humaine avant publication, harness eval golden dataset (S36), citations sourcées, bouton signaler erreur, plain language UX rappelant responsabilité inspecteur | | Probabilité résiduelle | Moyenne | | Gravité résiduelle | Faible côté WeInspect (Terms 7.4 limite resp.), inspecteur conserve resp. pro | | Risque résiduel | Faible-moyen | | Action complémentaire | Communication claire UX au moment de la génération + dans rapport final ("ce constat a été assisté par IA, validé par l'inspecteur") |
5.4 Risque R4 — Risque retiré : feature Clarity supprimée (S17.PR17.2)
5.5 Risque R5 — Transferts hors Québec entraînant accès gouvernemental étranger
| Aspect | Évaluation | |---|---| | Probabilité brute | Faible (CLOUD Act É-U, mais scope limité aux fournisseurs É-U et procédure légale) | | Gravité | Moyenne-élevée (atteinte confidentialité, violation Loi 25 art. 17) | | Mitigations | DB primaire au Canada (Supabase ca-central-1), seuls IA en transit É-U, ZDR Anthropic, retention 0d OpenAI, DPA standardisés, transparence dans privacy policy, possibilité utilisateur de désactiver IA complètement | | Probabilité résiduelle | Faible | | Gravité résiduelle | Moyenne | | Risque résiduel | Faible | | Action complémentaire | Veille jurisprudentielle CLOUD Act, plan B éventuel modèle hébergé Canada (Anthropic Bedrock CA-Central-1 si dispo) |
5.6 Risque R6 — Acheteur (visiteur portail) reçoit ses données sans information préalable
| Aspect | Évaluation | |---|---| | Probabilité brute | Certaine sans mitigation (non-conformité Loi 25 art. 8) | | Gravité | Moyenne-élevée (non-conformité légale, plainte CAI possible) | | Mitigations | Notice acheteur affichée à la première ouverture /client/[token] (voir client-portal-notice.fr.md/.en.md), acceptation logée 90j, lien vers politique complète | | Probabilité résiduelle | Très faible | | Gravité résiduelle | Faible | | Risque résiduel | Très faible | | Action complémentaire | Tests UX validation que la notice s'affiche bien à la première ouverture (e2e Playwright) |
5.7 Risque R7 — Suppression incomplète sur demande utilisateur
| Aspect | Évaluation | |---|---| | Probabilité brute | Moyenne (cascade de suppressions complexe : DB + photos Storage + audio + caches + backups) | | Gravité | Moyenne-élevée (non-conformité Loi 25 art. 28, plainte CAI) | | Mitigations | RPC SQL transactionnelle de suppression complète, tests automatisés vérifiant aucune trace résiduelle, période grâce 30j puis suppression hard, rétention backups documentée et purge programmée, exception explicite pour obligations légales (factures 7 ans) | | Probabilité résiduelle | Faible | | Gravité résiduelle | Faible-moyenne | | Risque résiduel | Faible | | Action complémentaire | Test d'intrusion suppression annuel (vérifier qu'un user supprimé ne réapparaît pas dans index recherche, dans backups, dans logs anciens) |
5.8 Risque R8 — Notification incident retardée ou omise
| Aspect | Évaluation | |---|---| | Probabilité brute | Moyenne sans procédure (Loi 25 art. 3.5 obligation notif "dans les meilleurs délais") | | Gravité | Moyenne-élevée | | Mitigations | Voir incident-response-playbook.md — procédure documentée, contacts CAI, templates communication, simulations annuelles | | Probabilité résiduelle | Faible | | Gravité résiduelle | Faible | | Risque résiduel | Faible | | Action complémentaire | Drill annuel (simulation incident) à mettre dans calendrier ops |
5.9 Risque R9 — Sentry capture incidemment PII
Statut au 2026-05-12 : Sentry est intégré pour les crash reports mobiles S20a. Les erreurs serveur restent consignées dans les logs Netlify (rétention 30j). Le SDK mobile est configuré avec
sendDefaultPii: falseet un filtragebeforeSend/beforeBreadcrumbpartagé avec le logger applicatif.
| Aspect | Évaluation | |---|---| | Probabilité brute | Moyenne (les SDK crash reporting capturent par défaut URL, paramètres, parfois état JS) | | Gravité | Moyenne | | Mitigations | Configuration scrubbing stricte (beforeSend filtre courriels, tokens, URL de magic link, GPS, chemins fichiers locaux, notes, titres, descriptions, transcriptions, data URLs), sendDefaultPii: false, tests automatisés | | Probabilité résiduelle | Faible | | Gravité résiduelle | Faible | | Risque résiduel | Très faible | | Action complémentaire | Audit trimestriel des données envoyées à Sentry |
5.10 Risque R10 — Programme étudiant abusé pour obtenir accès gratuit
| Aspect | Évaluation | |---|---| | Probabilité brute | Moyenne | | Gravité | Faible (fraude économique mineure, pas d'impact PII) | | Mitigations | Preuve revue par un administrateur AAL2; date de fin saisie par l'administrateur et interprétée inclusivement selon America/Toronto; expiration quotidienne atomique; une seule période d'essai inspecteur après premier login confirmé; annulation immédiate de l'essai lors de l'approbation; exclusivité sous verrou entre plan étudiant et abonnement payant; preuves purgées après 90 jours; opérations techniques terminales purgées après 90 jours | | Risque résiduel | Très faible | | Action complémentaire | Résoudre toutes les approbations historiques sans date et obtenir un compteur autoritaire à zéro avant de lever le gate de lancement étudiant↔Stripe |
6. Synthèse des risques
| ID | Risque | Niveau résiduel | Action complémentaire | |---|---|---|---| | R1 | Compte inspecteur compromis | Moyen | MFA obligatoire Équipe | | R2 | Faille RLS | Moyen-élevé | Tests RLS étendus + pen-test annuel | | R3 | Hallucination IA → rapport erroné | Faible-moyen | Communication UX rappel resp. inspecteur | | R5 | Accès gouv. étranger via fournisseurs É-U | Faible | Veille CLOUD Act, plan B | | R6 | Acheteur sans information préalable | Très faible | Tests e2e notice | | R7 | Suppression incomplète | Faible | Test intrusion annuel | | R8 | Notification incident retardée | Faible | Drill annuel | | R9 | Crash reporter tiers capture PII incidemment (hypothétique, non déployé) | Très faible | Réévaluer si un outil est ajouté | | R10 | Abus programme étudiant | Très faible | Vérifier le gate legacy à zéro avant lancement |
Risque global du traitement : Moyen avec mitigations en place. Acceptable conditionnellement à :
- Livraison effective des mitigations identifiées (notamment R2 tests RLS, R6 notice acheteur, R8 playbook incidents)
- Validation par avocat externe (item user A19)
- Audits annuels documentés
- Mise à jour de ce DPIA à chaque changement substantiel (nouveau fournisseur IA, nouvelle catégorie de données, nouveau marché, etc.)
7. Mesures organisationnelles
- DPO désigné : le responsable de la protection des renseignements personnels (dpo@ouiinspect.ca)
- Formation : tout collaborateur ayant accès aux données est formé Loi 25 + sécurité (à mettre en place ; v1 minimum 2h initial + 1h annuel)
- Politique mots de passe interne : 16+ char, gestionnaire mots de passe obligatoire, MFA partout
- Accès admin DB : limité au DPO + 1 backup ; logs admin tracés ; revue trimestrielle
- Politique appareil personnel (BYOD) : interdit pour accès données prod ; ordinateur dédié, chiffrement disque obligatoire
- Politique tiers : tout nouveau fournisseur traitant des renseignements personnels exige (a) DPA signé (b) due diligence sécurité (c) mise à jour de cette ÉFVP
8. Mesures techniques
| Mesure | État | Référence | |---|---|---| | Chiffrement TLS 1.3 transit | ✓ Live | Netlify config | | Chiffrement AES-256 repos | ✓ Live | Supabase default | | Authentification multi-facteur | ⚠ Disponible, à imposer Équipe | À renforcer S35 phase 2 | | RLS Postgres | ✓ Live toutes tables | supabase/migrations/* | | Audit logs accès sensibles | ⚠ Partiel | À étendre S35 phase 2 | | Tests RLS automatisés | ⚠ Partiel | À étendre | | Scrubbing PII Sentry mobile | ✓ Live S20a | Tests automatisés + audit trimestriel | | Backup chiffrés + retention politique | ✓ Live (Supabase) | Backup 7j + WAL ; à documenter purge ≤30j | | Pen-test annuel | ✗ Non démarré | Item user A20 — programmer fin M5 | | Politique mots de passe forts | ✓ Live | HaveIBeenPwned check |
9. Information aux personnes concernées
- Inspecteurs : politique de confidentialité publiée, consentements granulaires UI, dashboard
/parametres/confidentialite - Clients d'inspecteurs : information indirecte via inspecteur (responsable du traitement) + notice acheteur sur portail
- Acheteurs visiteurs portail : notice affichée à la première ouverture
- Visiteurs site marketing : politique cookies, bannière conforme
10. Droit de regard et exercice des droits
| Droit Loi 25 | Mécanisme dans WeInspect | |---|---| | Accès (art. 27) | /parametres/confidentialite/exporter (ZIP) ; courriel DPO en moins de 30j | | Rectification (art. 28) | Édition directe app ; ou demande DPO | | Suppression / portabilité (art. 28.1, 27) | /parametres/confidentialite/supprimer (grâce 30j) ; export ZIP | | Désindexation (art. 28.1) | Demande DPO traitée 30j | | Opposition / retrait consentement (art. 12-15) | Toggles /parametres/confidentialite ; effet immédiat | | Plainte | Lien direct CAI dans politique + DPO contact |
11. Conclusion
Le traitement réalisé par WeInspect, après mise en œuvre des mitigations identifiées, présente un niveau de risque résiduel acceptable pour les droits et libertés des personnes concernées. Les renseignements collectés sont nécessaires et proportionnés aux finalités. Le consentement explicite est requis pour les traitements sensibles. Les sous-traitants sont contractuellement encadrés. Les droits Loi 25 sont opérationnels via interfaces UI claires.
Conditions de mise en service :
- Livraison S35 phase 1 complète (politiques + consents UI + notice acheteur)
- Validation avocat externe (item A19)
- Tests RLS étendus passants
- Notice acheteur testée e2e
- Procédure incident response opérationnelle (
incident-response-playbook.md) - Drill incident simulé une fois avant lancement public
- Configuration Sentry mobile : scrubbing PII validé + audit trimestriel programmé
Conditions de revue :
- Annuelle (date cible : 2027-05-04)
- Anticipée si : ajout fournisseur IA, nouvelle catégorie données, expansion géographique hors Québec, incident de sécurité matériel, plainte CAI
Signataires de la version validée finale (à compléter post-validation) :
- Le responsable du projet : ............................. [date]
- DPO désigné : ............................. [date]
- Avocat externe (validation conformité) : ............................. [date]
Annexes :
- A. Sous-traitants détaillés (
subprocessors-list.md) - B. Procédure incident response (
incident-response-playbook.md) - C. Spec consent UI (
consent-ui-spec.md) - D. Rapports de tests RLS — à produire S35 phase 2
- E. Rapport pen-test — à produire fin M5
Dernière mise à jour : 2026-05-04 Prochaine revue : 2027-05-04