# 📊 Tracking PostHog du Simulateur de Paie

## Vue d'ensemble

Le simulateur de paie envoie maintenant un événement PostHog à chaque fois qu'un utilisateur clique sur le bouton "Calculer". Cet événement permet de déclencher des surveys et d'analyser l'utilisation du simulateur.

## Architecture

### Communication iframe → parent
Le simulateur est intégré via une iframe (`/simulateur-embed.html`). Pour envoyer des événements PostHog :

1. **L'iframe** envoie un message via `postMessage` au clic sur "Calculer"
2. **La page parent** (`app/(app)/simulateur/page.tsx`) écoute ce message
3. **La page parent** envoie l'événement à PostHog avec le hook `usePostHog`

### Schéma
```
simulateur-embed.html (iframe)
    │
    │ postMessage({ type: 'simulateur_calculation', data: {...} })
    │
    ▼
simulateur/page.tsx (parent)
    │
    │ window.addEventListener('message', ...)
    │
    ▼
PostHog
```

## Événement envoyé

### Nom de l'événement
`simulateur_calculation`

### Propriétés complètes
| Propriété | Type | Description | Exemple |
|-----------|------|-------------|---------|
| **Paramètres du formulaire** ||||
| `ccn_id` | string | ID de la CCN sélectionnée | `"1285"` |
| `ccn_nom` | string | Nom complet de la CCN | `"1285 – Entreprises Artistiques & Culturelles (CCNEAC)"` |
| `categorie` | string | Catégorie du salarié | `"artiste"` ou `"technicien"` |
| `statut` | string | Statut professionnel | `"non-cadre"` ou `"cadre"` |
| `abattement_active` | boolean | Abattement pour frais pro activé | `true` ou `false` |
| `abattement_profession` | string | Type de profession (si abattement) | `"drama"`, `"musique"` ou `""` |
| **Cachets, heures et dates** ||||
| `cachets` | number | Nombre de cachets | `10` |
| `heures` | number | Nombre d'heures | `35` |
| `dates_travail` | array | Liste des dates de travail | `["2025-10-15", "2025-10-16"]` |
| `nombre_jours` | number | Nombre de jours travaillés | `2` |
| **Montant et type de calcul** ||||
| `montant_saisi` | number | Montant saisi par l'utilisateur | `2000` |
| `type_calcul` | string | Type de calcul effectué | `"brut"`, `"net"` ou `"cost"` |
| **Résultats calculés** ||||
| `resultat_brut` | number | Salaire brut calculé | `2000.00` |
| `resultat_net` | number | Salaire net avant PAS calculé | `1580.50` |
| `resultat_cost` | number | Coût total employeur calculé | `2456.80` |
| **Métadonnées** ||||
| `plafond_urssaf` | number | Plafond URSSAF appliqué | `3864` |
| `timestamp` | string | Date/heure de la simulation | `"2025-10-16T14:30:00.000Z"` |

### Exemple d'événement complet
```javascript
{
  event: 'simulateur_calculation',
  properties: {
    // Paramètres du formulaire
    ccn_id: '1285',
    ccn_nom: '1285 – Entreprises Artistiques & Culturelles (CCNEAC)',
    categorie: 'artiste',
    statut: 'non-cadre',
    abattement_active: true,
    abattement_profession: 'drama',
    
    // Cachets, heures et dates
    cachets: 10,
    heures: 35,
    dates_travail: ['2025-10-15', '2025-10-16', '2025-10-17'],
    nombre_jours: 3,
    
    // Montant et type de calcul
    montant_saisi: 2000,
    type_calcul: 'brut',
    
    // Résultats calculés
    resultat_brut: 2000.00,
    resultat_net: 1580.50,
    resultat_cost: 2456.80,
    
    // Métadonnées
    plafond_urssaf: 3864,
    timestamp: '2025-10-16T14:30:00.000Z'
  }
}
```

## Fichiers modifiés

### 1. `/public/simulateur-embed.html`
**Ligne 1326+** : Ajout de l'envoi du message enrichi via `postMessage` dans le gestionnaire du bouton "Calculer"

```javascript
// 📊 Envoyer un événement PostHog enrichi via postMessage au parent
try {
  // Récupération de toutes les données du formulaire
  const ccnElement = document.getElementById('conventionSelect');
  const ccnValue = ccnElement?.value || '';
  const ccnText = ccnElement?.options[ccnElement.selectedIndex]?.text || '';
  
  const categorieValue = isTechnicien() ? 'technicien' : 'artiste';
  const statutValue = document.getElementById('statutSelect')?.value || 'non-cadre';
  
  // Abattement
  const abattementChecked = document.querySelector('input[name="abattement"]:checked')?.value || 'non';
  const professionValue = document.getElementById('professionSelect')?.value || '';
  
  // Dates
  const datesInput = document.getElementById('datesInput')?.value || '';
  const datesArray = datesInput ? datesInput.split(',').map(d => d.trim()).filter(Boolean) : [];
  
  window.parent.postMessage({
    type: 'simulateur_calculation',
    data: {
      // Paramètres du formulaire
      ccn_id: ccnValue,
      ccn_nom: ccnText,
      categorie: categorieValue,
      statut: statutValue,
      abattement_active: abattementChecked === 'oui',
      abattement_profession: professionValue,
      
      // Cachets, heures, dates
      cachets: cachets,
      heures: heures,
      dates_travail: datesArray,
      nombre_jours: datesArray.length,
      
      // Montant saisi et type
      montant_saisi: montant,
      type_calcul: type,
      
      // Résultats calculés
      resultat_brut: parseFloat(brut.toFixed(2)),
      resultat_net: parseFloat(net.toFixed(2)),
      resultat_cost: parseFloat(costEmployer.toFixed(2)),
      
      // Métadonnées
      plafond_urssaf: plafondUrssaf,
      timestamp: new Date().toISOString()
    }
  }, '*');
} catch (e) {
  console.error('Erreur lors de l\'envoi de l\'événement PostHog:', e);
}
```

### 2. `/app/(app)/simulateur/page.tsx`
**Lignes 12-50** : Mise à jour du hook PostHog pour capturer toutes les propriétés enrichies

```typescript
useEffect(() => {
  const handleMessage = (event: MessageEvent) => {
    if (event.data?.type === 'simulateur_calculation') {
      const data = event.data.data;
      
      posthog?.capture('simulateur_calculation', {
        // Paramètres du formulaire
        ccn_id: data.ccn_id,
        ccn_nom: data.ccn_nom,
        categorie: data.categorie,
        statut: data.statut,
        abattement_active: data.abattement_active,
        abattement_profession: data.abattement_profession,
        
        // Cachets, heures, dates
        cachets: data.cachets,
        heures: data.heures,
        dates_travail: data.dates_travail,
        nombre_jours: data.nombre_jours,
        
        // Montant saisi et type
        montant_saisi: data.montant_saisi,
        type_calcul: data.type_calcul,
        
        // Résultats calculés
        resultat_brut: data.resultat_brut,
        resultat_net: data.resultat_net,
        resultat_cost: data.resultat_cost,
        
        // Métadonnées
        plafond_urssaf: data.plafond_urssaf,
        timestamp: data.timestamp
      });
    }
  };

  window.addEventListener('message', handleMessage);
  return () => window.removeEventListener('message', handleMessage);
}, [posthog]);
```

    window.addEventListener('message', handleMessage);
    return () => window.removeEventListener('message', handleMessage);
  }, [posthog]);
  
  // ... reste du composant
}
```

## Utilisation pour les surveys

### Créer un survey dans PostHog

1. **Se connecter à PostHog** : https://eu.posthog.com/
2. **Aller dans Surveys** → **New Survey**
3. **Configurer le targeting** :
   - Type : Popover
   - Trigger : `simulateur_calculation` (l'événement que nous envoyons)
   - Display conditions : Par exemple après 1 calcul, ou après 3 calculs, etc.

### Exemple de configuration
```
Targeting:
- Show when: simulateur_calculation event occurs
- Frequency: Once per user / Every time
- Wait period: 0 seconds (ou délai souhaité)
```

### Questions suggérées
- "Le simulateur vous a-t-il été utile ?"
- "Quelle fonctionnalité aimeriez-vous voir ajoutée ?"
- "Avez-vous trouvé les résultats clairs ?"

## Vérification

### Dans la console du navigateur
Lors d'un clic sur "Calculer", vous devriez voir :
```
📊 PostHog: Événement simulateur_calculation enrichi envoyé {
  categorie: 'artiste',
  ccn: '1285 – Entreprises Artistiques & Culturelles (CCNEAC)',
  type_calcul: 'brut',
  montant_saisi: 2000,
  resultats: {
    brut: 2000,
    net: 1580.5,
    cost: 2456.8
  }
}
```

### Dans PostHog
1. Aller dans **Activity** → **Live Events**
2. Filtrer par événement : `simulateur_calculation`
3. Vérifier que les propriétés sont correctes

## Dépannage

### L'événement n'apparaît pas dans PostHog
1. Vérifier que PostHog est bien initialisé dans l'app
2. Vérifier les variables d'environnement :
   ```bash
   NEXT_PUBLIC_POSTHOG_KEY=phc_...
   NEXT_PUBLIC_POSTHOG_HOST=https://eu.i.posthog.com
   ```
3. Activer le mode debug de PostHog dans la console :
   ```javascript
   window.posthog.debug(true)
   ```

### Le message postMessage n'arrive pas
1. Vérifier que l'iframe est bien chargée
2. Vérifier dans la console qu'il n'y a pas d'erreur CORS
3. Tester en console :
   ```javascript
   window.addEventListener('message', (e) => console.log('Message reçu:', e.data));
   ```

## Évolutions futures

### Analyses possibles avec les données enrichies
Avec toutes ces propriétés, vous pouvez maintenant analyser :

- **Par CCN** : Quelle convention collective est la plus utilisée ?
- **Par catégorie** : Artiste vs Technicien - ratio d'utilisation
- **Par type de calcul** : Les utilisateurs partent-ils plutôt du brut, net ou coût ?
- **Abattement** : Combien d'utilisateurs utilisent l'abattement pour frais professionnels ?
- **Montants moyens** : Salaire brut moyen, net moyen, coût moyen par CCN
- **Heures et cachets** : Patterns d'utilisation (nombre moyen de cachets, heures par simulation)
- **Périodes** : Analyse temporelle des simulations (jours, semaines, mois)

### Exemples de requêtes PostHog

**Salaire brut moyen par CCN** :
```sql
SELECT 
  ccn_nom,
  AVG(resultat_brut) as brut_moyen,
  COUNT(*) as nb_simulations
FROM events
WHERE event = 'simulateur_calculation'
GROUP BY ccn_nom
ORDER BY nb_simulations DESC
```

**Répartition Artiste vs Technicien** :
```sql
SELECT 
  categorie,
  COUNT(*) as total,
  AVG(resultat_brut) as brut_moyen
FROM events
WHERE event = 'simulateur_calculation'
GROUP BY categorie
```

**Taux d'utilisation de l'abattement** :
```sql
SELECT 
  abattement_active,
  COUNT(*) as total,
  (COUNT(*) * 100.0 / SUM(COUNT(*)) OVER ()) as pourcentage
FROM events
WHERE event = 'simulateur_calculation'
  AND categorie = 'artiste'
GROUP BY abattement_active
```

### Idées d'améliorations futures
- Tracker les exports PDF (si fonctionnalité ajoutée)
- Ajouter le temps passé sur le simulateur
- Tracker les erreurs de validation
- Capturer le device type (mobile/desktop)
- Ajouter des événements pour les modifications de paramètres sans calcul

## Notes techniques

- ✅ Le simulateur est maintenant actif dans la sidebar
- ✅ Les événements PostHog sont trackés avec **toutes les données de simulation**
- ✅ Compatible avec les surveys PostHog
- ✅ Aucune dépendance externe supplémentaire requise
- ✅ Fonctionne en mode production et développement
- ✅ **Données enrichies** : CCN, catégorie, statut, abattement, cachets, heures, dates, montants et résultats complets

## Données capturées (résumé)
| Catégorie | Données |
|-----------|---------|
| **CCN** | ID et nom complet de la convention |
| **Profil** | Catégorie (artiste/technicien), statut (cadre/non-cadre) |
| **Abattement** | Activation et type de profession |
| **Volumes** | Cachets, heures, dates de travail, nombre de jours |
| **Calcul** | Montant saisi, type de calcul (brut/net/cost) |
| **Résultats** | Brut, Net avant PAS, Coût Total Employeur |
| **Contexte** | Plafond URSSAF, timestamp |

## Date de mise en place
- **Première version** : 15 octobre 2025 (tracking basique)
- **Version enrichie** : 16 octobre 2025 (toutes les données)
