# /application - Skill Application SmartStack

> **Synergie Skill/Commande:**
> - **Skill** (`.claude/skills/application/`) → Invocation automatique par Claude
> - **Commande** (`/application:create`) → Invocation manuelle par l'utilisateur
> - Templates partagés dans `.claude/skills/application/templates-*.md`

---

## ARGUMENTS

```
/application:create <level> <parent> <code> [options]
```

| Variable | Description | Valeurs |
|----------|-------------|---------|
| `level` | Niveau de navigation | `context`, `application`, `module`, `section` |
| `parent` | Code du parent | Ex: `platform`, `platform.administration` |
| `code` | Code de l'entité | Ex: `products`, `crm`, `erp` |

---

## PHASE 0: VALIDATION CONTEXTES RÉSERVÉS (CRITIQUE)

> **SÉCURITÉ:** Cette phase est OBLIGATOIRE avant toute génération.
> Elle protège les contextes core de SmartStack contre les modifications non autorisées.

### Règles de Protection

```
┌─────────────────────────────────────────────────────────────────────────────┐
│                    CONTEXTES RÉSERVÉS (CORE SMARTSTACK)                     │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  🔒 platform     → Administration système, NE PAS MODIFIER                  │
│  🔒 personal     → Espace personnel utilisateur, NE PAS MODIFIER            │
│  ✅ business     → Applications métier client, ZONE LIBRE                   │
│                                                                             │
│  APPLICATIONS RÉSERVÉES:                                                    │
│  🔒 platform.administration  → Admin core SmartStack                        │
│  🔒 personal.myspace         → Espace perso core SmartStack                 │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘
```

### Validation Automatique

```
AVANT toute génération, VÉRIFIER:

1. SI $LEVEL = "context":
   RESERVED_CONTEXTS = ["platform", "personal", "business", "system"]
   SI $CODE IN RESERVED_CONTEXTS:
       ❌ ERREUR: "Les contextes sont prédéfinis et ne peuvent pas être créés."
       ABORT

2. SI $LEVEL = "application":
   SI $PARENT IN ["platform", "personal"]:
       ❌ ERREUR: "Le context '$PARENT' est réservé au core SmartStack."
       ❌ ERREUR: "Utilisez le context 'business' pour vos applications métier."
       SUGGÉRER: "/application:create application business $CODE"
       ABORT

3. SI $LEVEL = "module":
   SI $PARENT commence par "platform." OU "personal.":
       ❌ ERREUR: "Les modules core ne peuvent pas être modifiés."
       ❌ ERREUR: "Créez vos modules dans 'business.*'"
       ABORT

4. SI tout est OK:
   ✅ Continuer vers PHASE 1
```

### Messages d'Erreur Standards

| Situation | Message |
|-----------|---------|
| Création context réservé | "Les contextes sont prédéfinis (platform, personal, business). Créez vos applications dans 'business'." |
| Application dans platform | "Le context 'platform' est réservé à l'administration SmartStack. Utilisez 'business' pour vos applications métier." |
| Application dans personal | "Le context 'personal' est réservé aux fonctionnalités utilisateur core. Utilisez 'business'." |
| Module dans platform.* | "Les modules platform.* sont gérés par SmartStack. Créez vos modules dans business.*" |

---

## PHASE 1: PARSING & VALIDATION

```
1. EXTRAIRE level, parent, code des arguments
2. EXÉCUTER PHASE 0 (validation contextes)
3. SI validation OK → VALIDER que le parent existe (sauf pour context)
4. DÉTECTER le context racine
5. GÉNÉRER les chemins de route et permission
```

---

## PHASE 2: COLLECTE DES TRADUCTIONS

```typescript
AskUserQuestion({
  questions: [
    {
      header: "Labels FR",
      question: "Libellés en français ?",
      options: [
        { label: "$CODE_PASCAL", description: "Label par défaut" }
      ]
    },
    {
      header: "Icône",
      question: "Quelle icône Lucide ?",
      options: [
        { label: "Package", description: "Icône produit" },
        { label: "Folder", description: "Icône générique" },
        { label: "Settings", description: "Icône configuration" }
      ]
    }
  ]
})
```

---

## PHASE 3: GÉNÉRATION DB SEED

| Fichier | Action |
|---------|--------|
| `Navigation{Level}Configuration.cs` | Ajouter entité |
| `NavigationTranslationConfiguration.cs` | Ajouter 4 traductions |
| `PermissionConfiguration.cs` | Ajouter permissions CRUD |
| `RolePermissionConfiguration.cs` | Assigner aux rôles |

**Templates:** → `.claude/skills/application/templates-seed.md`

---

## PHASE 4: GÉNÉRATION BACKEND

| Fichier | Action |
|---------|--------|
| `Permissions.cs` | Ajouter classe permissions |
| `I{Entity}Service.cs` | Créer interface |
| `{Entity}Service.cs` | Créer implémentation |
| `{Entity}Dto.cs` | Créer DTOs |
| `{Entity}.cs` | Créer entité Domain |
| `{Entity}Configuration.cs` | Créer config EF |
| `IApplicationDbContext.cs` | Ajouter DbSet |
| `DependencyInjection.cs` | Enregistrer service |

**Templates:** → `.claude/skills/application/templates-backend.md`

**Chaîner:** → `/controller:create $AREA $MODULE $ENTITY`

---

## PHASE 5: GÉNÉRATION FRONTEND

| Fichier | Action |
|---------|--------|
| `{Module}Page.tsx` | Créer page principale |
| `{Module}ListView.tsx` | Créer composant liste |
| `use{Module}Preferences.ts` | Créer hook préférences |
| `{module}Api.ts` | Créer service API |
| `App.tsx` | Ajouter routes |

**Templates:** → `.claude/skills/application/templates-frontend.md`

---

## PHASE 6: GÉNÉRATION I18N

| Fichier | Action |
|---------|--------|
| `fr/{module}.json` | Créer traductions FR |
| `en/{module}.json` | Créer traductions EN |
| `it/{module}.json` | Créer traductions IT |
| `de/{module}.json` | Créer traductions DE |
| `navigation.json` (×4) | Mettre à jour |
| `i18n/index.ts` | Enregistrer namespace |

**Templates:** → `.claude/skills/application/templates-i18n.md`

---

## PHASE 7: MIGRATION

```bash
# Chaîner automatiquement
/efcore:migration Add{Level}{Code}
```

---

## PHASE 8: VALIDATION

```bash
# Backend
dotnet build
dotnet test

# Frontend
cd web/smartstack-web
npm run build
npm run lint
npm run test
```

---

## PHASE 9: RÉSUMÉ

```markdown
## ✅ Création terminée

### Fichiers créés
- Backend: X fichiers
- Frontend: X fichiers
- i18n: 4 langues

### Navigation
- Route: /$ROUTE
- Permission: $PERMISSION_PATH.*

### Prochaines étapes
1. Vérifier les seeds générés
2. Tester avec Swagger
3. Valider l'UI

### Commandes utiles
- `dotnet ef database update` - Appliquer migration
- `npm run dev` - Lancer frontend
```

---

## RÈGLES ABSOLUES

1. **TOUJOURS** exécuter PHASE 0 (validation contextes) en premier
2. **TOUJOURS** 4 langues (FR, EN, IT, DE)
3. **TOUJOURS** respecter l'architecture en couches
4. **TOUJOURS** implémenter les préférences utilisateur (template complet)
5. **TOUJOURS** chaîner avec `/controller:create` et `/efcore:migration`
6. **TOUJOURS** utiliser des GUIDs aléatoires (voir templates-seed.md)
7. **JAMAIS** de violation d'architecture (WEB → Infrastructure)
8. **JAMAIS** de traduction manquante
9. **JAMAIS** de création dans les contextes réservés (platform, personal)

---

## EXEMPLES VALIDES ET INVALIDES

### ✅ VALIDE - Applications métier client

```bash
# Créer une application dans business
/application:create application business crm

# Créer un module dans business.crm
/application:create module business.crm leads

# Créer une section dans business.crm.leads
/application:create section business.crm.leads import
```

### ❌ INVALIDE - Tentatives sur contextes réservés

```bash
# ERREUR: Création de context
/application:create context _ erp
→ "Les contextes sont prédéfinis. Utilisez 'business'."

# ERREUR: Application dans platform
/application:create application platform sales
→ "Le context 'platform' est réservé. Utilisez 'business'."

# ERREUR: Module dans platform.administration
/application:create module platform.administration custom
→ "Les modules core ne peuvent pas être modifiés."
```

---

## MAPPING NIVEAU → GÉNÉRATION

| Niveau | DB Seed | Backend | Frontend | i18n |
|--------|---------|---------|----------|------|
| Context | ❌ (prédéfini) | ❌ | ❌ | ❌ |
| Application | ✅ | ❌ | ✅ (layout) | ✅ (nav) |
| Module | ✅ | ✅ (complet) | ✅ (complet) | ✅ (complet) |
| Section | ✅ | ✅ (optionnel) | ✅ (tabs) | ✅ (nav) |

---

## SOURCES DE DONNÉES

| Donnée | Source |
|--------|--------|
| Navigation entities | `src/SmartStack.Infrastructure/Persistence/Configurations/Navigation/` |
| Translations | `NavigationTranslationConfiguration.cs` |
| Permissions | `src/SmartStack.Application/Common/Authorization/Permissions.cs` |
| i18n locales | `web/smartstack-web/src/i18n/locales/` |
| Routes | `web/smartstack-web/src/App.tsx` |
