espace-paie-odentas/VIREMENTS_SALAIRES_TEST_GUIDE.md

270 lines
8.6 KiB
Markdown

# Guide de test - Virements Salaires Staff
## Prérequis
1. **Être connecté en tant qu'utilisateur Staff**
- Votre compte doit avoir `is_staff = true` dans la table `users`
2. **Avoir des données de test**
- Au moins une organisation dans `organizations`
- Des contrats CDDU dans `cddu_contracts` avec :
- `org_id` correspondant à l'organisation
- `payment_date` définie
- `employee_first_name`, `employee_last_name`, `employee_iban`, `net_amount` remplis
3. **Variables d'environnement configurées**
```env
PDFMONKEY_URL=https://api.pdfmonkey.io/api/v1/documents
PDFMONKEY_API_KEY=<votre_clé>
AWS_REGION=eu-west-3
AWS_ACCESS_KEY_ID=<votre_clé>
AWS_SECRET_ACCESS_KEY=<votre_clé>
AWS_S3_BUCKET=nouvel-espace-paie
```
## Étapes de test
### 1. Accéder à la page
- URL : `/staff/virements-salaires`
- Vérifier que la page s'affiche correctement
- Vérifier que le bouton "Créer un virement" est visible en haut à droite
### 2. Créer un nouveau virement
#### 2.1 Ouvrir le modal
- Cliquer sur le bouton "+ Créer un virement"
- Le modal doit s'ouvrir avec le formulaire
#### 2.2 Remplir le formulaire
- **Organisation** : Sélectionner une organisation existante
- **Période (mois)** : Sélectionner un mois (ex: 2025-01)
- Vérifier que le "Libellé de la période" se remplit automatiquement
- **Date d'échéance** : Sélectionner une date (ex: 2025-01-15)
- **Mode** : Sélectionner SEPA, VIREMENT ou odentas_reverse
- **Total Net** (optionnel) : Laisser vide pour l'instant
- **Notes** (optionnel) : Ajouter une note de test
#### 2.3 Valider la création
- Cliquer sur "Créer"
- Vérifier l'alerte de succès
- Vérifier que le modal se ferme
- Vérifier que le nouveau virement apparaît dans le tableau
### 3. Générer le PDF
#### 3.1 Vérifier les contrats de test
Avant de générer, assurez-vous qu'il existe des contrats pour le mois sélectionné.
**Exemple de requête SQL pour vérifier :**
```sql
SELECT
id,
employee_first_name,
employee_last_name,
employee_iban,
payment_date,
net_amount
FROM cddu_contracts
WHERE org_id = '<votre_org_id>'
AND DATE_TRUNC('month', payment_date) = '<votre_period_month>'::date;
```
#### 3.2 Générer le PDF
- Dans la colonne "Actions", cliquer sur "Générer PDF"
- Confirmer dans la boîte de dialogue
- Le bouton doit afficher "Génération..."
- Attendre la fin de la génération (peut prendre 10-30 secondes)
- Vérifier l'alerte de succès avec le nombre de contrats
#### 3.3 Vérifier le résultat
- Le bouton doit maintenant afficher "Regénérer PDF"
- Dans la colonne "Feuille d'appel", l'URL du PDF doit être visible
- Cliquer sur l'URL pour ouvrir le PDF dans un nouvel onglet
#### 3.4 Vérifier le contenu du PDF
Le PDF doit contenir :
- Le nom de l'organisation
- La période (ex: "Janvier 2025")
- La date d'échéance formatée
- Le total net de tous les contrats
- Un tableau avec tous les contrats :
- Nom et prénom de l'employé
- IBAN
- Montant net
- Date de paiement
### 4. Tests de cas limites
#### 4.1 Période sans contrats
- Créer un virement pour un mois sans contrats
- Générer le PDF
- Vérifier que le PDF est créé avec 0 contrats
- Le total net doit être 0,00
#### 4.2 Regénération
- Pour un virement déjà généré, cliquer sur "Regénérer PDF"
- Vérifier qu'un nouveau PDF est créé
- L'URL dans `callsheet_url` doit être mise à jour
#### 4.3 Validation du formulaire
- Ouvrir le modal de création
- Essayer de soumettre sans remplir les champs obligatoires
- Le bouton "Créer" doit être désactivé
- Remplir uniquement certains champs → le bouton doit rester désactivé
### 5. Tests des filtres existants
#### 5.1 Filtrer par organisation
- Utiliser le filtre "Organisation" en haut de la page
- Vérifier que seuls les virements de l'organisation sélectionnée sont affichés
#### 5.2 Recherche textuelle
- Utiliser le champ de recherche
- Taper le nom d'une période ou une note
- Vérifier que les résultats sont filtrés
### 6. Vérifications en base de données
#### 6.1 Vérifier l'enregistrement créé
```sql
SELECT * FROM salary_transfers
WHERE id = '<id_du_virement_créé>'
ORDER BY created_at DESC;
```
Vérifier que :
- Tous les champs sont correctement remplis
- `callsheet_url` est NULL avant génération
- `callsheet_url` contient une URL S3 après génération
#### 6.2 Vérifier le fichier S3
- Se connecter à la console AWS S3
- Naviguer vers le bucket `nouvel-espace-paie`
- Dossier : `virements-salaires/<org_id>/`
- Vérifier que le fichier PDF existe
- Format du nom : `<transfer_id>-<timestamp>.pdf`
### 7. Tests d'erreurs
#### 7.1 Organisation inexistante
Essayer de créer un virement avec un `org_id` invalide via l'API (tests manuels ou Postman) :
```bash
curl -X POST http://localhost:3000/api/staff/virements-salaires/create \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"org_id": "00000000-0000-0000-0000-000000000000",
"period_month": "2025-01",
"deadline": "2025-01-15",
"mode": "SEPA"
}'
```
Doit retourner une erreur 404 "Organization not found"
#### 7.2 Virement inexistant
Essayer de générer un PDF pour un `salary_transfer_id` invalide :
```bash
curl -X POST http://localhost:3000/api/staff/virements-salaires/generate-pdf \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"salary_transfer_id": "00000000-0000-0000-0000-000000000000"
}'
```
Doit retourner une erreur 404 "Salary transfer not found"
#### 7.3 Authentification
- Se déconnecter
- Essayer d'accéder à `/staff/virements-salaires`
- Doit afficher "Accès refusé"
#### 7.4 Utilisateur non-staff
- Se connecter avec un compte non-staff (`is_staff = false`)
- Essayer d'accéder à `/staff/virements-salaires`
- Doit afficher "Accès refusé - Cette page est réservée au Staff"
## Checklist finale
- [ ] Création d'un virement réussie
- [ ] Modal se ferme après création
- [ ] Nouveau virement visible dans la liste
- [ ] Génération PDF réussie (avec contrats)
- [ ] URL du PDF correcte dans le tableau
- [ ] PDF téléchargeable et contenu correct
- [ ] Regénération PDF réussie
- [ ] Filtres fonctionnent correctement
- [ ] Cas sans contrats géré
- [ ] Validation du formulaire fonctionne
- [ ] Authentification et autorisation Staff vérifiées
- [ ] Fichiers S3 créés correctement
- [ ] Base de données mise à jour correctement
## Logs à surveiller
### Console navigateur
- Vérifier qu'il n'y a pas d'erreurs JavaScript
- Vérifier les logs de Supabase Realtime
### Logs serveur (Next.js)
```
[staff/virements-salaires] Organizations count: X
[staff/virements-salaires] supabase fetch salary_transfers result count: X
```
### Console réseau (DevTools)
- Vérifier les appels API :
- `POST /api/staff/virements-salaires/create` → 200
- `POST /api/staff/virements-salaires/generate-pdf` → 200
- Vérifier les temps de réponse (génération PDF peut prendre 10-30s)
## En cas de problème
### Le PDF ne se génère pas
1. Vérifier les logs serveur pour voir l'erreur PDFMonkey ou S3
2. Vérifier que `PDFMONKEY_API_KEY` est correcte
3. Vérifier que le template ID `F4BCB5FF-1AB1-4CEE-B57F-82A6B9893E9E` existe
4. Vérifier les credentials AWS
### Les contrats ne sont pas inclus
1. Vérifier que les contrats ont une `payment_date` non nulle
2. Vérifier que le mois de `payment_date` correspond à `period_month`
3. Exemple : si `period_month = "2025-01-01"`, les contrats avec `payment_date` entre "2025-01-01" et "2025-01-31" seront inclus
### Le modal ne s'ouvre pas
1. Vérifier la console JavaScript pour des erreurs
2. Vérifier que le composant `SalaryTransfersGrid` est bien chargé (client-side)
### Realtime ne fonctionne pas
1. Vérifier que la table `salary_transfers` est publiée pour Realtime dans Supabase
2. Vérifier les RLS policies
3. Recharger la page manuellement après création/génération
## Résolution de problèmes courants
### "Missing PDFMONKEY_API_KEY"
Ajouter la variable dans `.env.local` :
```env
PDFMONKEY_API_KEY=votre_clé_api
```
### "Failed to update salary_transfers"
Vérifier les RLS policies sur la table `salary_transfers` :
```sql
-- Policy pour permettre aux staff de mettre à jour
CREATE POLICY "Staff can update salary_transfers"
ON salary_transfers FOR UPDATE
USING (
EXISTS (
SELECT 1 FROM users
WHERE users.id = auth.uid()
AND users.is_staff = true
)
);
```
### Timeout lors de la génération
- Augmenter le nombre de tentatives de polling dans `generate-pdf/route.ts` (ligne `maxAttempts`)
- Augmenter l'intervalle de polling (paramètre `intervalMs`)
### URL S3 incorrecte
Vérifier que `AWS_REGION` correspond à la région du bucket S3.