# Category 11: Data Lifecycle

> **Usage:** Lifecycle, retention, archival and compliance for business data
> **When to load:** If feature is data-centric or full module

---

## 11.1 Data Retention

| # | Question | Answer Type |
|---|----------|-------------|
| Q11.1 | How long must data be kept active? | Duration |
| Q11.2 | Is there a legal retention period? (GDPR, fiscal, regulatory) | Duration + regulation |
| Q11.3 | What happens after the retention period? | Archive/Purge/Anonymize |
| Q11.4 | Who decides when data is archived or purged? | Role |

## 11.2 Data States

| # | Question | Answer Type |
|---|----------|-------------|
| Q11.5 | What states can a record go through? (draft, active, archived, deleted) | List of states |
| Q11.6 | Can a deleted record be restored? | Yes/No + conditions |
| Q11.7 | Should historical versions be kept? (versioning) | Yes/No + depth |
| Q11.8 | Is there a "freeze" or "lock" state? (immutable after validation) | Yes/No + trigger |

---

## Lifecycle Patterns

| Need | Platform Pattern | Impact |
|------|-------------------|--------|
| Soft delete | `SoftDeletableEntity` | IsDeleted, DeletedBy, DeletedDate auto-managed |
| Audit trail | `AuditableEntity` | CreatedBy/Date, ModifiedBy/Date auto-managed |
| Versioning | Custom `EntityVersion` table | Manual implementation per entity |
| Archival | Status enum + background job | Scheduled job moves old records |
| GDPR purge | Anonymization service | Replace personal data with `[REDACTED]` |
| Immutable after state | Validation in Update command | `if (entity.Status == Locked) throw` |

## Elicitation Guide

### Follow-ups by Question

| Question | If answer is vague/insufficient | Probe |
|----------|-------------------------------|-------|
| Q11.1 (retention) | "Toujours" | "Pas de limite légale ? Avec 1M de lignes dans 5 ans, les performances resteront-elles acceptables ?" |
| Q11.2 (legal) | "Je ne sais pas" | "Données personnelles = RGPD (effacement après demande). Données fiscales = 10 ans. Données RH = 5 ans après départ." |
| Q11.3 (after retention) | "On supprime" | "Suppression physique ou logique ? Anonymisation des données personnelles ? Export avant suppression ?" |
| Q11.5 (states) | "Actif ou supprimé" | "Pas de brouillon ? Pas de 'en attente de validation' ? Pas d'archivé consultable mais non modifiable ?" |
| Q11.6 (restore) | "Non" | "Si un utilisateur supprime par erreur, aucun recours ? Même pas l'admin ?" |
| Q11.8 (freeze) | "Non" | "Une fois une facture validée, peut-on encore la modifier ? Une commande livrée, peut-on changer son contenu ?" |

### Anti-patterns to Detect

| Signal | Anti-pattern | Action |
|--------|-------------|--------|
| "On garde tout pour toujours" | **Pas de stratégie de rétention** | Volume illimité = performance dégradée. Définir une politique d'archivage. |
| Suppression physique de données personnelles | **Non-conformité RGPD** | RGPD exige la possibilité d'effacer/anonymiser. `SoftDeletableEntity` + anonymisation. |
| Aucun état intermédiaire | **Lifecycle trop simple** | La plupart des entités métier passent par brouillon → actif → archivé minimum. |
| Données modifiables sans limite | **Pas d'immutabilité** | Certains documents (factures, contrats) doivent être figés après validation. |
