179 lines
5.6 KiB
Markdown
179 lines
5.6 KiB
Markdown
# 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
|