# Category 5: Integrations

> **Usage:** Connections with internal and external systems
> **When to load:** If feature involves integrations

---

## 5.1 Existing Systems

| # | Question | Answer Type |
|---|----------|-------------|
| Q5.1 | What internal systems should we integrate with? | List |
| Q5.2 | What external systems? | List |
| Q5.3 | Existing APIs to use? | Documentation |
| Q5.4 | Data to import from another system? | List + format |

## 5.2 Data Flows

| # | Question | Answer Type |
|---|----------|-------------|
| Q5.5 | Flow direction? (inbound/outbound/bidirectional) | Per system |
| Q5.6 | Synchronization frequency? | Real-time/Batch |
| Q5.7 | Data conflict management? | Strategy |
| Q5.8 | Fallback if external system unavailable? | Behavior |

---

## Integration Patterns

| Integration Type | Pattern | When to use |
|-----------------|---------|-------------|
| REST API | HttpClient + Polly | Appel synchrone à un service externe avec retry/circuit-breaker |
| Message Queue | MassTransit | Communication asynchrone entre modules/services |
| Webhook | Controller endpoint | Réception d'événements depuis un système externe |
| Real-time | SignalR | Notifications temps réel vers le navigateur |
| Batch import | Background job (Hangfire) | Import/traitement de gros volumes en arrière-plan |
| File storage | Azure Blob / local | Upload/download de documents et pièces jointes |

## Elicitation Guide

### Follow-ups by Question

| Question | If answer is vague/insufficient | Probe |
|----------|-------------------------------|-------|
| Q5.1 (internal) | "Aucun" | "Ce module doit-il notifier d'autres modules ? Lire des données d'un autre contexte ?" |
| Q5.2 (external) | "Aucun" | "Pas d'envoi d'emails ? Pas de connexion ERP, CRM, comptabilité ? Pas de SSO externe ?" |
| Q5.3 (APIs) | "Oui il y a une API" | "Avez-vous la documentation (Swagger/OpenAPI) ? Quel format (REST/SOAP/GraphQL) ? Auth (API key, OAuth) ?" |
| Q5.6 (frequency) | "Temps réel" | "Temps réel = chaque seconde (SignalR) ou à chaque modification (event-driven) ? Quelle latence acceptable ?" |
| Q5.7 (conflicts) | "Pas de conflits" | "Si le système externe envoie une donnée qui existe déjà, on écrase, on ignore ou on signale ?" |
| Q5.8 (fallback) | "Ça ne devrait pas arriver" | "Si le service est down 1h, que fait l'utilisateur ? File d'attente, mode dégradé, retry ?" |

### Anti-patterns to Detect

| Signal | Anti-pattern | Action |
|--------|-------------|--------|
| Intégration synchrone pour tout | **Couplage fort** | Si l'autre système peut être lent/down, proposer pattern asynchrone (MassTransit) |
| "On verra plus tard pour l'intégration" | **Intégration non planifiée** | Documenter minimum : système cible, direction du flux, format attendu |
| Pas de stratégie d'erreur | **Pas de résilience** | Toute intégration externe DOIT avoir un fallback (Polly retry + circuit breaker) |
