Politique de Gouvernance et de Souveraineté Énergétique
KOURANM — Système intelligent de gestion énergétique
Version 1.0 — Effective au 2026-05-16 Domaine d'application : ensemble des sites équipés du contrôleur KOURANM Document de référence pour les contrats clients, audits réglementaires et engagements opérationnels.
1. Préambule
KOURANM conçoit et exploite une plateforme logicielle et matérielle de gestion énergétique destinée aux PME et résidences en Haïti. Notre activité touche directement à l'infrastructure critique de nos clients : alimentation des bâtiments, équipements médicaux, climatisation, éclairage de sécurité.
Toute manipulation à distance d'une charge électrique (relais, disjoncteur, inverter) a un impact dans le monde physique réel. Cette politique formalise les engagements de KOURANM pour que cette responsabilité soit exercée avec la rigueur attendue d'un opérateur d'infrastructure énergétique.
Elle s'aligne sur les standards internationaux suivants :
| Standard | Domaine | Articles applicables |
|---|---|---|
| ISO 27001 | Système de management de la sécurité de l'information | Annex A.9 (contrôle d'accès), A.12.4 (journalisation), A.15 (relations fournisseurs) |
| NIST 800-53 Rev. 5 | Contrôles de sécurité fédéraux | AC-2, AC-6, AC-17(9), AU-2 |
| SOC 2 Type II | Contrôles de service (orientation cloud) | Common Criteria CC6.x, CC7.x |
| GDPR / RGPD | Protection des données personnelles | Art. 5 (minimisation), 25 (privacy by design), 32 (sécurité du traitement) |
| IEC 62443 | Cybersécurité industrielle | Zones et conduits, principe d'override local |
2. Les Trois Piliers de la Souveraineté Client
🛡️ Pilier 1 — Souveraineté du Client
Le contrôle final des charges électriques d'un site appartient exclusivement à son propriétaire ou à ses délégataires explicites.
KOURANM développe des algorithmes d'optimisation et d'intelligence artificielle (prédiction de consommation, détection d'anomalies, délestage automatique sur SOC critique). Ces algorithmes opèrent uniquement dans le cadre que le client a configuré et activé lui-même via son tableau de bord.
Un employé de KOURANM, quel que soit son niveau de privilège (superadmin global compris), ne peut pas modifier unilatéralement la configuration de distribution électrique d'un client à distance.
🚫 Pilier 2 — Zéro Interférence Arbitraire
Aucun accès opérationnel d'un employé KOURANM à un site client n'est implicite ou permanent.
Toute action sur l'infrastructure d'un client s'inscrit dans une de ces quatre catégories, traitées différemment :
| Catégorie | Légitimité | Consentement client requis | Auditabilité |
|---|---|---|---|
| A. Diagnostic en lecture (graphes, logs IoT) | Toujours OK pour support | Implicite (contrat de support) | Journal standard |
| B. Configuration matérielle (paramètres batterie, solaire, MQTT QoS) | Lors d'installation ou SAV | Implicite (contrat d'installation/maintenance) | Journal + identifiant intervenant + raison |
| C. Contrôle temps réel des charges/relais | EXCEPTIONNEL | Explicite, temporaire, daté | Journal enrichi + notification client immédiate |
| D. Suspension de service commercial (paiement) | Légitime contractuellement | Pré-notifié dans le contrat + préavis | Workflow séparé documenté |
🔒 Pilier 3 — Traçabilité Immuable
Chaque action sur l'infrastructure d'un client est enregistrée dans un journal d'audit append-only, attribuable à un être humain identifié, et conservé.
KOURANM s'engage à :
- Non-répudiation : chaque action de mutation est attribuée à l'
user_idde la personne physique qui a cliqué, jamais auuser_idd'un client si c'est un employé KOURANM qui agit (pas d'impersonation opaque). - Append-only : la table
audit_logsest protégée par Row-Level Security PostgreSQL pour interdireUPDATEetDELETE— toute correction passe par une nouvelle ligne avecaction: "correction_of:{previous_id}". - Métadonnées contextuelles : pour chaque action sur un site, le journal contient l'horodatage UTC, l'adresse IP, le user-agent, l'identifiant de site, l'action, la ressource cible et, le cas échéant, la raison textuelle fournie.
- Conservation : les journaux d'audit sont conservés au minimum 7 ans après cessation de la relation contractuelle, conformément aux pratiques de l'audit comptable et de la responsabilité civile.
3. Procédures opérationnelles par catégorie d'action
Catégorie A — Diagnostic en lecture
Périmètre : visualisation des graphiques de consommation, de l'état des appareils, des alertes générées par l'IA, des journaux historiques.
Procédure : un opérateur support KOURANM (rôle admin ou technicien global) accède au tableau de bord en mode Support Lecture. Aucune mutation possible. L'accès est tracé sans déclencher d'alerte client (consultation routinière).
Justification : pour résoudre un ticket d'assistance, le support doit pouvoir reproduire la situation du client. La lecture seule n'altère pas l'installation.
Catégorie B — Configuration matérielle
Périmètre : champs marqués "Admin / Technicien" dans /dashboard/settings (profil batterie, profil solaire, paramètres MQTT QoS et rétention, identifiant système).
Procédure : un technicien certifié KOURANM modifie la configuration pendant ou après une installation/maintenance physique. La modification :
- Exige un rôle
superadmin,adminoutechniciensur le site (rôle attribué au moment de la souscription/intervention) - Est journalisée avec l'identifiant du technicien et la raison de la modification
- Déclenche un email récapitulatif au propriétaire du site dans les 24 heures suivant la modification
Garantie technique actuelle : RBAC fin appliqué côté serveur (apps/backend/schemas/site_settings.py, fonction check_settings_permission). Les champs hors périmètre sont rejetés avec HTTP 403 sans modification de la base.
Catégorie C — Contrôle temps réel des charges
Périmètre : POST /loads/{id}/toggle, POST /loads/shed, modification du seuil de délestage automatique.
Procédure (engagement cible, voir section 8 pour le calendrier d'implémentation) :
- Demande d'accès : l'opérateur KOURANM envoie une demande motivée via
/support/request-access(référence ticket, durée souhaitée ≤ 2 heures, périmètre lecture vs écriture). - Consentement client : le propriétaire du site reçoit une notification (WhatsApp + email) et doit valider explicitement via un code à usage unique (OTP) ou un bouton dans son tableau de bord.
- Session limitée : une fois la demande approuvée, une
support_sessionest créée avec date d'expiration (≤ 2h). Au-delà, l'accès est révoqué automatiquement. - Notification permanente : chaque action de mutation pendant la session déclenche une notification WhatsApp/email au propriétaire en temps réel (« KOURANM Support vient de couper le climatiseur — raison : test thermique de la batterie »).
- Rapport post-session : à la fin de la session, un rapport PDF cryptographiquement signé est envoyé au propriétaire, listant toutes les actions effectuées.
Garantie technique actuelle : la non-répudiation est déjà en place — l'audit_logs.user_id reflète l'identifiant de l'employé KOURANM, jamais celui du client. La couche consentement/session/notification temps réel sera livrée d'ici la fin du Sprint Support Mode.
Catégorie D — Suspension de service commercial
Périmètre : suspension du dashboard et des automatisations IA pour cause d'impayé ou de violation des conditions contractuelles. N'inclut jamais la coupure physique de l'électricité (qui reste sous le contrôle du client et de son installation).
Procédure :
- Préavis écrit (email + WhatsApp + notification dashboard) au minimum 7 jours avant l'effet
- Possibilité de régler la situation pendant le préavis sans dégradation de service
- À l'effet : passage du compte en mode lecture seule, conservation intégrale des données pour réactivation
- Action exécutée par un superadmin global, journalisée avec référence de facture ou clause contractuelle invoquée
Garantie technique actuelle : workflow opéré manuellement aujourd'hui. Automatisation prévue dans le module billing Celery (tasks/billing.py:check_expired_subscriptions).
4. Architecture de souveraineté technique
KOURANM applique la philosophie "Defense in Depth + Local Override Always Wins", conforme à IEC 62443 et à la pratique des opérateurs SCADA matures.
4.1 — Zones de confiance
┌─ Zone 4 : Internet public ─────────────────────────────────────────┐
│ Tableau de bord client (kouranm.com) — utilisateurs finaux │
│ Dashboard support (kouranm.com/dashboard) — employés KOURANM │
└────────────────────────────┬───────────────────────────────────────┘
│ HTTPS TLS 1.3 + JWT ES256
▼
┌─ Zone 3 : API de contrôle (api.kouranm.com) ───────────────────────┐
│ FastAPI + RBAC + Rate limiting + RLS PostgreSQL │
│ Validateurs Pydantic stricts (XSS, Flux injection bloqués) │
└────────────────────────────┬───────────────────────────────────────┘
│ MQTT TLS 8883
▼
┌─ Zone 2 : Broker MQTT (HiveMQ Cloud) ──────────────────────────────┐
│ Topics nominatifs : kouranm/box/{hardware_id}/... │
│ Authentification username/password + certificats X.509 │
└────────────────────────────┬───────────────────────────────────────┘
│
▼
┌─ Zone 1 : Contrôleur ESP32-S3 (firmware KOURANM) ──────────────────┐
│ Validation locale des commandes contre safety rules │
│ Override physique inconditionnel via commutateur de façade │
│ Refus de toute commande qui violerait l'intégrité du système │
└────────────────────────────┬───────────────────────────────────────┘
│
▼
Charges physiques
Chaque zone applique son propre contrôle. La compromission d'une zone supérieure ne permet pas de bypasser la zone inférieure.
4.2 — Principe d'override local
Engagement KOURANM : le commutateur physique de bypass présent sur chaque contrôleur ESP32-S3 court-circuite tout signal cloud. Lorsque l'opérateur sur place active le bypass :
- Le firmware publie
kouranm/box/{id}/override_active(retenu) sur le broker MQTT - Le firmware ignore toutes les commandes entrantes sur
kouranm/box/{id}/commandjusqu'au reset - Le tableau de bord client et le tableau de bord support affichent un bandeau rouge
"MODE LOCAL ACTIF — Cloud désactivé par l'opérateur sur place"
Cette garantie protège le client contre :
- Un compromis de compte support KOURANM
- Une attaque par compromission de la chaîne d'approvisionnement
- Une défaillance des algorithmes IA
- Une erreur humaine côté KOURANM
Calendrier d'implémentation : intégré dans la roadmap du firmware (iot/firmware/).
4.3 — Validation locale par safety rules
Le firmware refuse d'exécuter une commande cloud si elle viole l'une des règles de sécurité suivantes :
- Activation d'une charge alors que SOC batterie < 5 %
- Activation d'une charge qui dépasserait la capacité de l'onduleur (somme des puissances > 110 % de la capacité nominale)
- Activation simultanée de charges incompatibles déclarées par le client (ex : pompe + climatiseur sur même phase)
Toute commande refusée est journalisée et notifiée au cloud via kouranm/box/{id}/command_rejected.
5. Gouvernance interne et accès aux comptes administrateur
5.1 — Attribution du rôle administrateur global
Le rôle superadmin global (accès théorique à tous les sites de la plateforme) est attribué :
- Aux fondateurs / dirigeants de KOURANM
- Aux ingénieurs de niveau senior chargés de la maintenance plateforme
- Sur demande nominative écrite et validation interne
Chaque attribution est journalisée dans audit_logs avec l'identité de l'attributaire et du bénéficiaire.
5.2 — Révocation
Le rôle est révoqué automatiquement :
- À la fin du contrat de travail / de prestation
- Après 90 jours sans connexion
- Sur demande de tout dirigeant KOURANM ou en cas d'incident de sécurité
5.3 — Authentification renforcée (engagement à venir)
Les comptes administrateur de KOURANM passeront au 2FA obligatoire (authentification à deux facteurs) avant la mise en production grand public. Calendrier dans la roadmap Phase 7 Sécurité.
5.4 — Séparation des privilèges
KOURANM applique la séparation des privilèges suivants :
| Rôle | Périmètre | Exemples d'actions autorisées |
|---|---|---|
| superadmin global | Plateforme entière | Gestion utilisateurs, gestion plans tarifaires, ajout de partenaires |
| admin global | Plateforme (sans superadmin) | Lecture KPIs, gestion contacts, support niveau 2 |
| superadmin du site | Un site donné (souvent le propriétaire) | Tout sur ce site uniquement |
| admin du site | Un site donné | Configuration matérielle, gestion des charges, gestion des utilisateurs invités du site |
| technicien du site | Un site donné | Configuration matérielle, gestion des charges. Ne peut pas ajouter d'utilisateur. |
| client du site | Un site donné | Lecture + alertes/préférences. Ne peut pas modifier la configuration matérielle. |
| observer du site | Un site donné | Lecture seule. |
Ces rôles sont implémentés côté serveur par la fonction core.rbac.verify_site_permission et la fonction core.rbac.get_user_role_on_site. Toute mutation est rejetée si l'appelant n'a pas le rôle attendu.
6. Engagement de transparence vis-à-vis du client
6.1 — Notifications proactives
KOURANM s'engage à notifier le propriétaire d'un site dans les cas suivants, sans qu'il ait besoin de demander :
| Événement | Canal | Délai |
|---|---|---|
| Modification de configuration matérielle par un technicien KOURANM | Email + dashboard | ≤ 24 h |
| Début d'une session support avec accès en écriture | WhatsApp + email + dashboard | Immédiat |
| Chaque action critique pendant une session support | WhatsApp temps réel | Immédiat |
| Anomalie de sécurité détectée (tentative de login échouée, hardware inconnu) | Email + dashboard | Immédiat |
| Coupure / suspension imminente | Email + WhatsApp | ≥ 7 jours avant |
| Mise à jour majeure de cette politique | Email + dashboard | ≥ 30 jours avant entrée en vigueur |
6.2 — Accès aux journaux d'audit
Tout propriétaire de site peut consulter les actions effectuées par KOURANM sur son site via la page /dashboard/security/audit-logs (en cours de finalisation). Export CSV / PDF possible pour archivage personnel.
6.3 — Délégation de l'accès support par le client
Le propriétaire d'un site peut, à tout moment, interdire l'accès support KOURANM à son site (à l'exception des actions critiques de sécurité). Le paramètre support_access_enabled (à venir) permet ce contrôle granulaire.
7. Conformité et réglementation
7.1 — Localisation des données
| Type de données | Localisation actuelle | Engagement |
|---|---|---|
| Comptes utilisateur, sites, configurations | Neon PostgreSQL (région AWS US-East par défaut) | Migration possible vers une région plus proche d'Haïti si exigence client |
| Télémétrie IoT temps série | InfluxDB Cloud (US-East) | Idem |
| Messages MQTT en transit | HiveMQ Cloud (EU) | Chiffrement TLS 1.3 obligatoire |
7.2 — Données personnelles
KOURANM collecte le minimum nécessaire à la prestation : email, nom, téléphone (optionnel), adresse de site, données de consommation énergétique. Aucune donnée biométrique, aucun profil comportemental hors énergie, aucune revente à des tiers.
Les droits du client conformes au RGPD européen (consultation, rectification, portabilité, oubli) sont exerçables par email à privacy@kouranm.com avec un délai de réponse maximal de 30 jours.
7.3 — Sécurité technique
Les contrôles de sécurité techniques en place sont documentés dans apps/frontend/web/README.md (section "Sécurité — headers HTTP") et dans le bilan d'audit interne :
- TLS 1.3 obligatoire sur toutes les communications externes
- HSTS sur kouranm.com (2 ans + includeSubDomains + preload)
- Content Security Policy stricte (frame-ancestors 'none')
- Validation d'entrée Pydantic v2 sur toutes les API
- Row-Level Security PostgreSQL sur les tables sensibles
- Rate limiting (100 req/min/IP)
- CI/CD avec lint et tests à chaque PR/push (filet anti-régression)
- Audit logs append-only
7.4 — Conformité contractuelle
Le contenu de cette politique est repris dans les Conditions Générales d'Utilisation (/terms) et la Politique de Confidentialité (/privacy) publiques. Une violation grave et démontrée de cette politique par KOURANM ouvre droit à dédommagement selon les clauses contractuelles.
8. Calendrier d'implémentation des engagements
Cette politique reflète à la fois ce qui est déjà en place et ce qui constitue un engagement à livrer. Tableau de transparence :
| Engagement | État | Échéance prévue |
|---|---|---|
| Non-répudiation backend (user_id de l'acteur réel dans audit_logs) | ✅ | Livré |
| RBAC fin par tier sur configuration matérielle | ✅ | Livré |
| Headers de sécurité (CSP, HSTS, etc.) | ✅ | Livré |
| Validateurs stricts (XSS, injection) | ✅ | Livré |
| CI/CD avec garde-fou de tests | ✅ | Livré |
| Bandeau UI rouge "MODE SUPPORT — actions tracées" | 🟡 | Sprint immédiat |
| Page audit logs accessible au client | 🟡 | Q3 2026 |
| Workflow consentement client (OTP/notification) | 🟡 | Q3 2026 |
| Sessions support à durée limitée (TTL ≤ 2h) | 🟡 | Q3 2026 |
| 2FA obligatoire pour comptes admin KOURANM | 🟡 | Q4 2026 |
| Cookies HttpOnly pour JWT (suppression localStorage) | 🟡 | Q3 2026 |
| Firmware : refus de commande cloud violant safety rules | 🟡 | Q4 2026 |
| Firmware : override physique inconditionnel | 🟡 | Q4 2026 |
| Attestation cryptographique des télémétries | 🟡 | 2027 |
🟢 État Livré : engagement vérifiable dans le code et activé en production aujourd'hui.
🟡 État Engagement : conception validée, calendrier engageant, vérifiable par le client à l'échéance.
KOURANM s'engage à publier mensuellement un état d'avancement de ces engagements sur cette page.
9. Procédure de signalement d'incident
Tout client, partenaire, employé ou tiers ayant connaissance d'une violation de cette politique peut signaler l'incident à :
- Email confidentiel :
security@kouranm.com - Téléphone : +509 3742 8962 (heures ouvrables Port-au-Prince)
- Courrier : Delmas 33, Rue Clermont, Port-au-Prince, Haïti
KOURANM s'engage à un accusé de réception sous 48 heures et à une réponse circonstanciée sous 30 jours. Les signalements de bonne foi sont protégés contre toute représaille.
10. Évolution de cette politique
Cette politique est révisée au minimum tous les 12 mois, et chaque fois qu'un changement significatif d'architecture, de régulation applicable, ou d'incident le justifie. Toute évolution donne lieu à :
- Publication du nouveau texte sur cette page avec numéro de version incrémenté
- Notification email aux propriétaires de sites au moins 30 jours avant l'entrée en vigueur
- Archivage de la version précédente dans l'historique Git du dépôt KOURANM (auditable)
| Version | Date | Auteur | Résumé du changement |
|---|---|---|---|
| 1.0 | 2026-05-16 | KOURANM (équipe technique) | Version initiale formalisée |
Document validé par : Direction Technique KOURANM
Prochaine révision prévue : 2027-05-16
Référent interne : ingénieur sécurité KOURANM (security@kouranm.com)
Référent client : support KOURANM (support@kouranm.com)