espace-paie-odentas/VIREMENTS_SALAIRES_TEST_GUIDE.md

8.6 KiB

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

    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 :

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éé

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) :

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 :

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 :

PDFMONKEY_API_KEY=votre_clé_api

"Failed to update salary_transfers"

Vérifier les RLS policies sur la table salary_transfers :

-- 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.