# Breach Incidents 📖 Registre violations de donnĂ©es (Article 33 RGPD) ## Diagramme ```kroki-dbml Table breach_incidents { id uuid [primary key] severity breach_severity_enum [not null] description text [not null, note: 'Description dĂ©taillĂ©e de l incident'] data_categories_affected jsonb [not null, note: 'Array: ["gps", "email", "listening_history"]'] estimated_users_count int [not null, note: 'Estimation nombre users impactĂ©s'] detected_at timestamp [not null, default: `now()`, note: 'H+0: DĂ©tection initiale'] contained_at timestamp [note: 'Timestamp confinement de la faille'] cnil_notified_at timestamp [note: 'H+48: Notification CNIL si requis'] users_notified_at timestamp [note: 'H+72: Notification users si risque Ă©levĂ©'] mitigation_actions text [note: 'Actions correctives mises en place'] cnil_notification_required boolean [not null, default: false] user_notification_required boolean [not null, default: false] indexes { (severity, detected_at) [note: 'Incidents par gravitĂ© et chronologie'] (cnil_notification_required, cnil_notified_at) [note: 'Track CNIL notification compliance'] } } Table users { id uuid [primary key] } Table breach_affected_users { id uuid [primary key] breach_id uuid [not null, ref: > breach_incidents.id] user_id uuid [not null, ref: > users.id] notified_at timestamp [note: 'Timestamp notification user (NULL si pas encore notifiĂ©)'] notification_channel notification_channel_enum [note: 'Canal utilisĂ© pour notifier'] indexes { (breach_id, user_id) [unique, note: 'Un user ne peut ĂȘtre listĂ© qu une fois par incident'] (breach_id, notified_at) [note: 'Track notification progress'] (user_id) [note: 'Historique incidents pour un user'] } } Enum breach_severity_enum { low [note: 'Pas de notification requise (mesures techniques suffisantes)'] medium [note: 'Notification CNIL uniquement'] high [note: 'Notification CNIL + utilisateurs'] critical [note: 'Notification immĂ©diate tous canaux + SMS fondateur'] } Enum notification_channel_enum { email [note: 'Email notification'] push [note: 'Push notification mobile'] sms [note: 'SMS (critical only)'] } ``` ## LĂ©gende **SĂ©vĂ©ritĂ©** : - `low`: Pas de notification requise (mesures techniques suffisantes) - `medium`: Notification CNIL uniquement - `high`: Notification CNIL + utilisateurs - `critical`: Notification immĂ©diate tous canaux + SMS fondateur **Timeline 72h** : - H+0 : DĂ©tection, confinement - H+24 : Évaluation gravitĂ© - H+48 : Notification CNIL si requis - H+72 : Notification utilisateurs si risque Ă©levĂ© **CatĂ©gories de donnĂ©es** : - `data_categories_affected`: JSON `["gps", "email", "listening_history"]`