---
description: Phase 2 - Discovery and requirements elicitation (ULTRATHINK)
agent: ba-discover
model: opus
---

# Phase 2: Discovery - Élicitation des Besoins

> **Modèle:** OPUS (élicitation exhaustive, ULTRATHINK requis)
> **Coût estimé:** ~$0.30 (one-shot) / ~$1.50-4.50 (avec ralph-loop)
> **Standard:** BABOK v3 - Techniques d'élicitation

---

## RALPH-LOOP INTEGRATION (RECOMMANDÉ)

```
╔══════════════════════════════════════════════════════════════════════════════╗
║  UTILISATION AVEC RALPH-LOOP POUR SPECS EN BÉTON                             ║
╠══════════════════════════════════════════════════════════════════════════════╣
║                                                                              ║
║  /ralph-loop "/business-analyse:2-discover FEAT-XXX"                         ║
║              --completion-promise "COMPLETE" --max-iterations 15             ║
║                                                                              ║
║  FICHIERS RALPH (créés automatiquement):                                     ║
║  ├── prd.json        → Catégories à documenter avec statut                   ║
║  └── progress.txt    → Mémoire des questions/réponses                        ║
║                                                                              ║
║  PROCESSUS PAR ITERATION:                                                    ║
║  1. Lire prd.json → Trouver prochaine catégorie "passes": false              ║
║  2. Lire progress.txt → Voir questions déjà posées                           ║
║  3. Poser questions sur UNE catégorie                                        ║
║  4. Mettre à jour 1-discovery.md                                             ║
║  5. Mettre à jour prd.json → "passes": true                                  ║
║  6. Ajouter Q&R à progress.txt                                               ║
║  7. Si TOUTES catégories "passes": true → <promise>COMPLETE</promise>        ║
║                                                                              ║
║  SIGNAL DE FIN: <promise>COMPLETE</promise>                                  ║
║                                                                              ║
╚══════════════════════════════════════════════════════════════════════════════╝
```

### Structure prd.json pour Discovery

```json
{
  "feature_id": "FEAT-XXX",
  "phase": "discovery",
  "userStories": [
    { "id": "1", "title": "Section Contexte Business", "passes": false },
    { "id": "2", "title": "Section Stakeholders (≥3)", "passes": false },
    { "id": "3", "title": "Section Périmètre (≥5 must-have)", "passes": false },
    { "id": "4", "title": "Section Données et Entités", "passes": false },
    { "id": "5", "title": "Section Sécurité (matrice CRUD)", "passes": false },
    { "id": "6", "title": "Section Contraintes", "passes": false },
    { "id": "7", "title": "Section Intégrations SmartStack", "passes": false },
    { "id": "8", "title": "Section Questions ouvertes", "passes": false },
    { "id": "9", "title": "Validation: aucun TBD/? restant", "passes": false }
  ]
}
```

---

## ULTRATHINK MODE (OBLIGATOIRE)

```
╔══════════════════════════════════════════════════════════════════════════════╗
║  ULTRATHINK: Réflexion approfondie pour élicitation exhaustive               ║
╠══════════════════════════════════════════════════════════════════════════════╣
║                                                                              ║
║  CE MODE EXIGE:                                                              ║
║  • Considérer TOUS les edge cases avant chaque question                      ║
║  • Challenger CHAQUE hypothèse du stakeholder                                ║
║  • Anticiper les besoins NON exprimés                                        ║
║  • Ne JAMAIS accepter de réponses vagues                                     ║
║  • Valider la complétude avant de passer à la catégorie suivante             ║
║                                                                              ║
║  QUESTIONS DE SUIVI OBLIGATOIRES:                                            ║
║  • "Pouvez-vous donner un exemple concret?"                                  ║
║  • "Comment mesurez-vous cela aujourd'hui?"                                  ║
║  • "Que se passe-t-il si cette règle n'est pas respectée?"                   ║
║  • "Qui est impacté par cette décision?"                                     ║
║                                                                              ║
╚══════════════════════════════════════════════════════════════════════════════╝
```

---

## STEP 1: Charger le contexte

```bash
# Charger la configuration
CONFIG=$(cat .business-analyse/config.json)
FEATURE_ID=$1  # Paramètre: FEAT-XXX

# Trouver le dossier feature
FEATURE_DIR=$(find .business-analyse -type d -name "${FEATURE_ID}*" | head -1)

if [ -z "$FEATURE_DIR" ]; then
  echo "❌ ERREUR: Feature $FEATURE_ID non trouvée"
  echo "   Lancez d'abord: /business-analyse:1-init"
  exit 1
fi

# Extraire application et module du path
APPLICATION=$(echo $FEATURE_DIR | grep -oP 'business/\K[^/]+')
MODULE=$(echo $FEATURE_DIR | grep -oP 'modules/\K[^/]+')
```

---

## STEP 2: Introduction et collecte du besoin initial

```javascript
AskUserQuestion({
  questions: [{
    question: "Décrivez le besoin business en quelques phrases. Quel problème voulez-vous résoudre?",
    header: "Besoin",
    options: [
      { label: "Nouveau processus", description: "Créer un processus qui n'existe pas" },
      { label: "Amélioration", description: "Améliorer un processus existant" },
      { label: "Automatisation", description: "Automatiser des tâches manuelles" },
      { label: "Intégration", description: "Connecter des systèmes existants" }
    ],
    multiSelect: false
  }]
})
```

---

## STEP 3: Élicitation structurée (40+ questions)

> **Référence:** Utiliser le questionnaire complet dans `questionnaire.md`

### 3.1 Contexte Business (Q1.1 - Q1.8)

Questions clés à poser:
- Quel problème business ce module doit-il résoudre?
- Quelle est la situation actuelle (AS-IS)?
- Quelle est la situation cible (TO-BE)?
- Quels sont les KPIs de succès mesurables?

**ULTRATHINK:** Pour chaque réponse, challenger avec "Pourquoi?" au moins 3 fois.

### 3.2 Stakeholders (Q2.1 - Q2.8)

Questions clés:
- Qui sont les utilisateurs finaux directs?
- Qui est le sponsor/décideur final?
- Pour chaque rôle: Quelles tâches doit-il accomplir?

**ULTRATHINK:** Créer une matrice rôle/responsabilité/fréquence.

### 3.3 Périmètre fonctionnel (Q3.1 - Q3.8)

Questions clés:
- Fonctionnalités ESSENTIELLES (Must-Have)?
- Fonctionnalités SOUHAITÉES (Should-Have)?
- Qu'est-ce qui est EXPLICITEMENT exclu?

**ULTRATHINK:** Pour chaque Must-Have, demander "Que se passe-t-il sans cette fonctionnalité?"

### 3.4 Données (Q4.1 - Q4.8)

Questions clés:
- Quelles sont les entités principales manipulées?
- Pour chaque entité: attributs importants?
- Données sensibles à protéger?

**ULTRATHINK:** Esquisser un modèle conceptuel simplifié.

### 3.5 Sécurité & Permissions (Q6.1 - Q6.8)

Questions clés:
- Qui peut VOIR/CRÉER/MODIFIER/SUPPRIMER?
- Audit trail requis?
- Conformité réglementaire?

**ULTRATHINK:** Construire matrice CRUD par rôle.

### 3.6 Intégrations SmartStack (Q7.1 - Q7.10) ⭐ NOUVEAU

> **CRITIQUE:** Ces questions déterminent les skills à utiliser pendant l'implémentation.

#### Notifications (Q7.1 - Q7.3)

```javascript
AskUserQuestion({
  questions: [{
    question: "Des notifications in-app sont-elles nécessaires pour cette feature?",
    header: "Notifs",
    options: [
      { label: "Oui", description: "Notifier les utilisateurs lors d'événements" },
      { label: "Non", description: "Pas de notification nécessaire" },
      { label: "À déterminer", description: "À analyser selon les cas d'usage" }
    ],
    multiSelect: false
  }]
})
```

Si OUI, demander:
- Q7.2: Quels événements déclenchent une notification? (création, modification, assignation, etc.)
- Q7.3: Qui doit être notifié? (créateur, assigné, admin, rôle spécifique)

#### Workflows & Emails (Q7.4 - Q7.6)

```javascript
AskUserQuestion({
  questions: [{
    question: "Des workflows automatisés sont-ils nécessaires? (emails, rappels, escalades)",
    header: "Workflow",
    options: [
      { label: "Oui - Email", description: "Envoi d'emails automatiques" },
      { label: "Oui - Rappels", description: "Rappels programmés (ex: SLA)" },
      { label: "Oui - Multi-étapes", description: "Workflow complexe multi-étapes" },
      { label: "Non", description: "Pas de workflow automatisé" }
    ],
    multiSelect: true
  }]
})
```

Si OUI, demander:
- Q7.5: Quels triggers déclenchent le workflow? (entity.created, entity.updated, etc.)
- Q7.6: Quelles variables sont disponibles? (entityId, entityName, userEmail, etc.)

#### Assistance IA (Q7.7 - Q7.10)

```javascript
AskUserQuestion({
  questions: [{
    question: "Une assistance IA est-elle pertinente pour cette feature?",
    header: "IA",
    options: [
      { label: "Génération texte", description: "Générer du contenu (descriptions, résumés)" },
      { label: "Classification", description: "Catégoriser automatiquement (priorité, tags)" },
      { label: "Suggestions", description: "Proposer des actions ou réponses" },
      { label: "Non applicable", description: "Pas d'IA nécessaire" }
    ],
    multiSelect: true
  }]
})
```

Si OUI, demander:
- Q7.8: Quel type de sortie attendue? (texte libre, JSON structuré, enum)
- Q7.9: Quelles données d'entrée? (contexte, historique, documents)
- Q7.10: Quelle validation requise? (schema JSON, longueur max, format)

**ULTRATHINK:** Pour chaque intégration identifiée, noter le skill associé:
- Notifications → `/notification`
- Workflows → `/workflow`
- IA → `/ai-prompt`

---

## STEP 4: Validation des réponses

Pour chaque catégorie complétée:

```javascript
AskUserQuestion({
  questions: [{
    question: "Voici le résumé de vos réponses pour [Catégorie]. Est-ce complet et correct?",
    header: "Validation",
    options: [
      { label: "Correct", description: "Passer à la catégorie suivante" },
      { label: "À corriger", description: "Modifier certaines réponses" },
      { label: "À compléter", description: "Ajouter des informations manquantes" }
    ],
    multiSelect: false
  }]
})
```

---

## STEP 5: Génération du document 1-discovery.md

```bash
DISCOVERY_FILE="$FEATURE_DIR/1-discovery.md"
```

### Template 1-discovery.md

```markdown
# Discovery - {FEATURE_ID} {Feature Name}

> **Module:** business/{application}/{module}
> **Version:** 1.0
> **Date:** {YYYY-MM-DD}
> **Auteur:** Business Analyst (Claude OPUS)

---

## 1. Contexte Business

### 1.1 Description du besoin
{Besoin exprimé par le stakeholder}

### 1.2 Problème actuel (AS-IS)
{Description de la situation actuelle et ses limitations}

### 1.3 Situation cible (TO-BE)
{Description de l'état souhaité après implémentation}

### 1.4 Valeur attendue

| KPI | Valeur actuelle | Valeur cible | Gain |
|-----|-----------------|--------------|------|
| {kpi} | {actuel} | {cible} | {gain} |

---

## 2. Stakeholders

| Rôle | Nom/Fonction | Implication | Niveau décision |
|------|--------------|-------------|-----------------|
| {rôle} | {nom} | {description} | {niveau} |

### 2.1 Besoins par rôle

| Rôle | Tâches principales | Fréquence | Pain points actuels |
|------|-------------------|-----------|---------------------|
| {rôle} | {tâches} | {fréquence} | {frustrations} |

---

## 3. Périmètre

### 3.1 In Scope (Must-Have)

| # | Fonctionnalité | Justification |
|---|----------------|---------------|
| 1 | {fonctionnalité} | {pourquoi essentiel} |

### 3.2 In Scope (Should-Have)

| # | Fonctionnalité | Priorité |
|---|----------------|----------|
| 1 | {fonctionnalité} | {priorité} |

### 3.3 Out of Scope

| # | Exclusion | Raison |
|---|-----------|--------|
| 1 | {exclusion} | {justification} |

---

## 4. Données identifiées

### 4.1 Entités principales

| Entité | Description | Attributs clés |
|--------|-------------|----------------|
| {entité} | {description} | {attributs} |

### 4.2 Relations

```
{Entité A} ──[1:N]──► {Entité B}
{Entité A} ──[N:M]──► {Entité C}
```

### 4.3 Données sensibles

| Donnée | Niveau sensibilité | Protection requise |
|--------|-------------------|-------------------|
| {donnée} | {niveau} | {mesures} |

---

## 5. Sécurité préliminaire

### 5.1 Matrice CRUD par rôle

| Permission | Admin | Manager | User | ReadOnly |
|------------|-------|---------|------|----------|
| Read | ✅ | ✅ | ✅ | ✅ |
| Create | ✅ | ✅ | ? | ❌ |
| Update | ✅ | ✅ | ? | ❌ |
| Delete | ✅ | ? | ❌ | ❌ |

### 5.2 Audit requis

| Action | Audit | Détails à logger |
|--------|-------|------------------|
| {action} | Oui/Non | {détails} |

---

## 6. Contraintes identifiées

| Type | Contrainte | Impact | Mitigation |
|------|------------|--------|------------|
| Technique | {contrainte} | {impact} | {solution} |
| Budget | {contrainte} | {impact} | {solution} |
| Délai | {contrainte} | {impact} | {solution} |

---

## 7. Intégrations SmartStack ⭐

> **Skills associés à utiliser pendant l'implémentation**

### 7.1 Notifications

| Besoin | Oui/Non | Événements | Destinataires |
|--------|---------|------------|---------------|
| Notifications in-app | {oui/non} | {événements déclencheurs} | {qui notifier} |

**Skill:** `/notification` si Oui

### 7.2 Workflows & Emails

| Besoin | Oui/Non | Type | Trigger |
|--------|---------|------|---------|
| Emails automatiques | {oui/non} | {transactionnel/marketing} | {entity.event} |
| Rappels/SLA | {oui/non} | {type rappel} | {conditions} |
| Workflow multi-étapes | {oui/non} | {description} | {trigger} |

**Skill:** `/workflow` si Oui

### 7.3 Assistance IA

| Besoin | Oui/Non | Type | Données entrée | Sortie attendue |
|--------|---------|------|----------------|-----------------|
| Génération texte | {oui/non} | {description/résumé} | {contexte} | {format} |
| Classification | {oui/non} | {priorité/catégorie} | {données} | {enum/tags} |
| Suggestions | {oui/non} | {actions/réponses} | {historique} | {liste} |

**Skill:** `/ai-prompt` si Oui

---

## 8. Questions ouvertes

| # | Question | Responsable | Deadline | Status |
|---|----------|-------------|----------|--------|
| Q1 | {question} | {qui} | {date} | ⏳ |

---

## 9. Prochaines étapes

- [ ] Valider ce document avec le sponsor
- [ ] Résoudre les questions ouvertes
- [ ] Lancer `/business-analyse:3-analyse {FEATURE_ID}`

---

## Historique des versions

| Version | Date | Auteur | Modifications |
|---------|------|--------|---------------|
| 1.0 | {date} | BA (OPUS) | Création initiale |
```

---

## STEP 6: Vérification de complétude (RALPH-LOOP)

Avant de terminer, vérifier que TOUS les critères sont remplis:

```
CHECKLIST COMPLÉTUDE:
□ Section 1 (Contexte Business) - AS-IS et TO-BE documentés
□ Section 2 (Stakeholders) - ≥3 rôles identifiés avec responsabilités
□ Section 3 (Périmètre) - ≥5 must-have, ≥2 exclusions
□ Section 4 (Données) - Entités et relations documentées
□ Section 5 (Sécurité) - Matrice CRUD complète
□ Section 6 (Contraintes) - Au moins 1 contrainte identifiée
□ Section 7 (Intégrations) - Notifications/Workflows/IA évalués (Oui/Non)
□ Section 8 (Questions) - Toutes les questions ont un responsable
□ Aucun marqueur "TBD", "?", "{...}" restant dans le document
```

**SI TOUS LES CRITÈRES SONT REMPLIS:**

```
================================================================================
                    DISCOVERY COMPLÈTE - {FEATURE_ID}
================================================================================

DOCUMENT GÉNÉRÉ:   {FEATURE_DIR}/1-discovery.md
MODÈLE UTILISÉ:    OPUS avec ULTRATHINK
QUESTIONS POSÉES:  {N} questions
CATÉGORIES:        10 catégories couvertes

RÉSUMÉ:
  Stakeholders:    {N} identifiés
  Must-Have:       {N} fonctionnalités
  Should-Have:     {N} fonctionnalités
  Entités:         {N} identifiées
  Questions:       {N} ouvertes

================================================================================
PROCHAINE ÉTAPE
================================================================================

1. Valider 1-discovery.md avec le stakeholder
2. Résoudre les questions ouvertes
3. Lancer l'analyse:

   /business-analyse:3-analyse {FEATURE_ID}

================================================================================

<promise>COMPLETE</promise>

Contact support: support@atlshub.ch
```

**SI DES CRITÈRES MANQUENT:**

Ne pas afficher le signal de complétion. Continuer l'élicitation en posant des questions ciblées sur les sections incomplètes.
