APDP — Conformité Droit à l'Oubli
Conformité avec la loi APDP du Bénin (protection des données personnelles).
Principe
Un abonné peut demander la suppression de ses données personnelles. RGZ dispose de 90 jours pour s'y conformer. L'anonymisation est automatique via la tâche Celery rgz.apdp.purge_expired.
Flow APDP
Abonné → POST /api/v1/apdp/deletion-request
↓
deletion_requested_at = NOW() (dans subscribers table)
↓
[90 jours de délai légal]
↓
Task Celery: rgz.apdp.purge_expired (daily 05:00 UTC)
↓
UPDATE subscribers SET msisdn="ANONYMIZED_uuid", full_name="Anonyme"
DELETE FROM subscriber_devices WHERE subscriber_id = id
↓
INSERT INTO immutable_logs (event_type="APDP_ANONYMIZATION", ...)Champs Anonymisés vs Conservés
| Champ | Action | Raison |
|---|---|---|
msisdn | ✅ Anonymisé | Donnée personnelle |
full_name | ✅ Anonymisé | Donnée personnelle |
id_document_hash | ✅ Anonymisé | Donnée personnelle |
subscriber_devices | ✅ Supprimé | MACs = données personnelles |
subscriber_ref | ⚠️ Conservé | Référence comptable (ARCEP) |
total_sessions | ⚠️ Conservé | Stats agrégées ARCEP |
total_data_mb | ⚠️ Conservé | Stats agrégées ARCEP |
created_at | ⚠️ Conservé | Obligation légale |
Endpoints APDP
bash
# Demande de suppression
curl -X POST -H "Authorization: Bearer $JWT" \
https://api-rgz.duckdns.org/api/v1/apdp/deletion-request \
-d '{"subscriber_id": "uuid"}'
# Vérifier le statut
curl -H "Authorization: Bearer $JWT" \
https://api-rgz.duckdns.org/api/v1/apdp/status/{subscriber_id}
# Alerte: demandes > 85 jours non traitées (buffer avant 90j)
docker exec rgz-db psql -U rgz_admin -c \
"SELECT COUNT(*) FROM subscribers
WHERE forget_requested_at < NOW() - INTERVAL '85 days'
AND anonymized_at IS NULL;"Consentement
python
# Consentement enregistré à l'inscription (Outil #11)
subscribers.consent_given_at = datetime.utcnow()
# API consentement
POST /api/v1/apdp/consent {"subscriber_id": "uuid", "consent": true}Dernière mise à jour: 2026-02-21