# Catégorie 3 : Données et interface

> **Usage :** Définir les entités, les règles de données et l'expérience utilisateur
> **Quand charger :** Par module, lors de la spécification (step-03)
> **Objectif :** Comprendre les données manipulées et comment elles sont présentées

---

## 3.1 Entites et attributs

| # | Question | Type de reponse |
|---|----------|-----------------|
| Q3.1 | Quelles sont les entités principales gérées par ce module ? | Liste d'entités |
| Q3.2 | Pour chaque entité : quels sont les attributs importants ? | Par entité |
| Q3.3 | Quelles relations existent entre les entités ? (appartient à, contient, référence) | Schéma relationnel |
| Q3.5 | Pour chaque entité : le Code doit-il être auto-généré ou saisi par l'utilisateur ? | Par entité |
| Q3.6 | Si auto-généré : quelle stratégie ? (séquentiel, timestamp, année, UUID court) | Par entité |

## 3.2 Règles de données

| # | Question | Type de réponse |
|---|----------|-----------------|
| Q3.7 | Quelles validations sur les données ? (champs obligatoires, formats, plages de valeurs) | Liste de règles |
| Q3.8 | Y a-t-il des règles inter-champs ? (date fin > date début, montant selon statut) | Liste de contraintes |
| Q3.9 | Données sensibles à protéger ? (données personnelles, financières, médicales) | Liste + niveau |

---

## 3.3 Interface et écrans

| # | Question | Type de réponse |
|---|----------|-----------------|
| Q3.10 | Périphériques cibles ? (desktop, mobile, tablette) | Liste |
| Q3.11 | Écrans principaux nécessaires pour ce module ? | Liste d'écrans |
| Q3.12 | Informations clés par écran ? Quelles colonnes dans la liste, quels champs dans le formulaire ? | Par écran |
| Q3.13 | Actions possibles par écran ? (créer, éditer, supprimer, valider, exporter, changer statut) | Par écran |

## 3.5 Volumétrie et performance

| # | Question | Type de réponse |
|---|----------|-----------------|
| Q3.17 | Combien de [entité] prévoyez-vous ? (par mois et total à 2 ans) | Estimation chiffrée |
| Q3.18 | Y a-t-il des pics d'utilisation ? (fin de mois, clôture annuelle) | Description des pics |

- Relance si vague : "Moins de 100 ? Entre 100-10 000 ? Plus de 10 000 ?"
- Mapping → `entities.json` : champ `estimatedVolume` (`monthly`, `total2y`)

## 3.6 Recherche et filtres

| # | Question | Type de réponse |
|---|----------|-----------------|
| Q3.19 | Par quels critères cherchez-vous un [entité] ? (nom, date, statut, code...) | Liste de critères |
| Q3.20 | Quels filtres rapides sont indispensables dans la liste ? | Liste de filtres |

- Relance : "Triez-vous souvent par date ? Filtrez-vous par statut ?"
- Mapping → `entities.json` : champs `searchableFields[]` et `defaultFilters[]`

## 3.7 Notifications et alertes

| # | Question | Type de réponse |
|---|----------|-----------------|
| Q3.21 | Quels événements doivent déclencher une notification ? (création, approbation, deadline...) | Liste d'événements |
| Q3.22 | Qui doit être notifié ? Par quel canal ? (in-app, email) | Cible + canal |

- Mapping → `rules.json` : règles de catégorie `notification`

## 3.4 Tableaux de bord

| # | Question | Type de réponse |
|---|----------|-----------------|
| Q3.14 | Des tableaux de bord ou indicateurs sont-ils requis pour ce module ? | Oui/Non + description |
| Q3.15 | KPIs à afficher ? (nom, métrique, format, seuils d'alerte) | Par dashboard |
| Q3.16 | Types de graphiques souhaités ? (barres, lignes, camembert, cartes KPI) | Par KPI |

---

## Guide d'élicitation approfondi

### Techniques de relance

| Question | Si la réponse est vague | Relance recommandée |
|----------|------------------------|---------------------|
| Q3.1 (entités) | Une seule entité | "Cette entité a-t-elle des sous-éléments ? (lignes de détail, pièces jointes, historique)" |
| Q3.1 (entités) | Mention de "User" | "L'utilisateur est géré par la plateforme. Décrivez l'entité MÉTIER (Client, Employee, Contact...)" |
| Q3.2 (attributs) | Champs techniques (ID, CreatedDate) | "Les champs techniques sont auto-gérés. Quels sont les attributs MÉTIER ?" |
| Q3.3 (relations) | "1:N" sans détail | "Un {Parent} peut avoir combien de {Children} max ? Un {Child} peut-il exister sans {Parent} ?" |
| Q3.11 (écrans) | "Un écran de liste" | "Avec pages dédiées pour création et édition ? Détail en page avec onglets ?" |
| Q3.13 (actions) | "CRUD classique" | "Actions métier spécifiques ? (valider, dupliquer, archiver, changer statut, assigner)" |
| Q3.14 (dashboards) | "Juste des chiffres" | "Les tendances ne seraient-elles pas plus lisibles en graphique ?" |
| Q3.17 (volume) | "Je ne sais pas" | "Commençons petit : combien d'employés dans l'entreprise ? Combien de factures par mois environ ?" |

### Anti-patterns à détecter

| Signal | Anti-pattern | Action |
|--------|-------------|--------|
| Entité "User" avec attributs métier | Confusion User/Identity | La plateforme gère les Users via Identity |
| Attributs Id, TenantId, CreatedBy | Champs techniques comme métier | Ces champs sont auto-générés par AuditableEntity |
| "Un seul gros formulaire avec tout" | Formulaire monolithique | Proposer des onglets ou wizard par section logique |
| Actions sans confirmation | Actions destructives non protégées | "La suppression nécessite-t-elle une confirmation ?" |

---

## RBAC Exclusion

> Les concepts suivants sont gérés par le système RBAC de la plateforme et NE DOIVENT PAS être modélisés comme attributs d'entité :

| Concept | Wrong (attribut) | Correct (RBAC) |
|---------|-----------------|----------------|
| Role utilisateur | `User.Role` | Permission set `{app}.{module}.*` |
| Niveau d'acces | `User.AccessLevel` | Permission matrix per role |
| Est admin | `User.IsAdmin` | `{app}.{module}.admin` permission |

---

## Mapping vers le feature

| Réponse | Alimente |
|---------|----------|
| Q3.1-Q3.3, Q3.5-Q3.6 | `entities.json` (entités, attributs, relations, codePattern) |
| Q3.7-Q3.9 | `rules.json` (règles métier de validation et sécurité) |
| Q3.10-Q3.13 | `screens.json` (sections, resources, colonnes, actions) |
| Q3.14-Q3.16 | `screens.json` (sections dashboard, KPI resources) |
| Q3.17-Q3.18 | `entities.json` (estimatedVolume) |
| Q3.19-Q3.20 | `entities.json` (searchableFields, defaultFilters) |
| Q3.21-Q3.22 | `rules.json` (règles category: notification) |
