# Clarification de la logique des virements salaires

## Date : 14 octobre 2025

## Contexte

Les champs de la table `salary_transfers` ont été clarifiés pour mieux refléter le cycle de vie d'un virement :

## Nouvelle logique des champs

### 1. **notification_sent** (boolean)
- **Signification** : La notification a été envoyée au client
- **Valeur par défaut** : `false`
- **Quand passe à true** : Lors de l'appel à l'API `/api/staff/virements-salaires/[id]/notify-client`
- **Affichage** : Badge "✓ Envoyée" / "Non envoyée"

### 2. **notification_ok** (boolean) - NOUVELLE SIGNIFICATION
- **Ancienne signification** : Statut de la notification (OK / Erreur)
- **Nouvelle signification** : **Paiement client reçu** (Oui / Non)
- **Valeur par défaut** : `false`
- **Quand passe à true** : 
  - Manuellement par le staff via le modal d'édition
  - Automatiquement quand on coche "Paiement client reçu"
  - Via le bouton "Marquer comme reçu"
- **Affichage** : Badge "✓ Reçu" / "Non reçu"

### 3. **client_wire_received_at** (timestamp, optionnel)
- **Signification** : Date de réception du virement client
- **Valeur par défaut** : `null`
- **Quand renseigné** : 
  - Automatiquement à la date du jour lors de la cochage de "Paiement client reçu"
  - Manuellement modifiable dans le formulaire d'édition
  - Peut être effacé
- **Affichage** : Date formatée ou "—" si non renseignée

### 4. **salaires_payes** (boolean) - NOUVEAU CHAMP
- **Signification** : Les salaires ont été payés aux salariés
- **Valeur par défaut** : `false`
- **Quand passe à true** : 
  - Manuellement par le staff via le modal d'édition
  - Via le bouton "Marquer comme payés"
- **Affichage** : Badge "✓ Payés" / "Non payés"

### 5. **num_appel** (text)
- **Signification** : Numéro d'appel de fonds (ex: "00001")
- **Correction** : Le champ est maintenant pris en compte lors de la **création** d'un virement
- **Affichage** : Police monospace dans le tableau et le modal

## Cycle de vie d'un virement

```
1. CRÉATION
   └─> num_appel renseigné
   └─> notification_sent = false
   └─> notification_ok = false
   └─> salaires_payes = false

2. GÉNÉRATION PDF
   └─> callsheet_url renseigné

3. NOTIFICATION CLIENT
   └─> notification_sent = true
   └─> Email envoyé au client

4. RÉCEPTION PAIEMENT CLIENT
   └─> notification_ok = true
   └─> client_wire_received_at = date (optionnel)

5. PAIEMENT DES SALAIRES
   └─> salaires_payes = true
```

## Interface utilisateur

### Affichage en lecture (Modal)

Le modal affiche maintenant 3 sections distinctes :

1. **Notification client**
   - Statut : Envoyée / Non envoyée

2. **Paiement client reçu**
   - Statut : Reçu / Non reçu
   - Date : (si renseignée)
   - Bouton rapide : "Marquer comme reçu"

3. **Salaires payés**
   - Statut : Payés / Non payés
   - Bouton rapide : "Marquer comme payés"

### Formulaire d'édition

Le formulaire permet maintenant de modifier :

1. **Paiement client**
   - ☑ Checkbox "Paiement client reçu"
   - 📅 Date de réception (optionnelle)
   - ❌ Bouton pour effacer la date

2. **Salaires**
   - ☑ Checkbox "Salaires payés aux salariés"

### Tableau principal

Les colonnes ont été réorganisées :

| Colonne | Contenu |
|---------|---------|
| Notification | Badge "✓ Envoyée" / "Non envoyée" |
| Paiement client | Badge "✓ Reçu" / "Non reçu" + date |
| Salaires payés | Badge "✓ Payés" / "Non payés" |

### Filtres

Nouveaux filtres disponibles :

- **Notification envoyée** : Oui / Non
- **Paiement client reçu** : Oui / Non
- **Date virement client** : Avec date / Sans date
- **Salaires payés** : Oui / Non (NOUVEAU)

## API

### Création - POST /api/staff/virements-salaires/create

**Champs pris en compte :**
- `num_appel` ✅ (corrigé)
- `salaires_payes` ✅ (nouveau, défaut: false)

### Mise à jour - PATCH /api/staff/virements-salaires/[id]

**Nouveaux champs acceptés :**
- `notification_ok` : boolean
- `salaires_payes` : boolean

## Migration base de données

Exécuter le fichier :
```bash
supabase/migrations/add_salaires_payes_column.sql
```

Ce script :
- ✅ Ajoute la colonne `salaires_payes`
- ✅ Vérifie l'existence de `num_appel`
- ✅ Ajoute des commentaires pour clarifier la logique
- ✅ Crée des index pour améliorer les performances
- ✅ Met à jour les données existantes (notification_ok pour les virements avec date)

## Corrections apportées

### ✅ 1. Notification liée à notification_sent
Avant : Confusion entre "notification envoyée" et "notification OK"
Après : `notification_sent` = notification envoyée (clair)

### ✅ 2. Virement reçu lié à notification_ok + client_wire_received_at
Avant : `notification_ok` = statut erreur/OK de la notification
Après : `notification_ok` = paiement client reçu (oui/non), `client_wire_received_at` = date (optionnelle)

### ✅ 3. Paiement modifiable avec ou sans date
Avant : Obligation de mettre une date pour marquer comme reçu
Après : Checkbox séparée + date optionnelle

### ✅ 4. Salaires payés lié à salaires_payes
Avant : Pas de champ dédié
Après : Nouveau champ `salaires_payes` (boolean)

### ✅ 5. Numéro d'appel pris en compte à la création
Avant : `num_appel` uniquement en modification
Après : `num_appel` pris en compte dès la création

## Tests recommandés

1. ✅ Créer un nouveau virement avec `num_appel`
2. ✅ Marquer le paiement client comme reçu (avec et sans date)
3. ✅ Marquer les salaires comme payés
4. ✅ Vérifier les filtres fonctionnent correctement
5. ✅ Tester les boutons rapides "Marquer comme reçu" et "Marquer comme payés"
6. ✅ Vérifier l'affichage dans le tableau principal
