8.1 KiB
Guide de Débogage - Récupération des Paies (Payslips)
🐛 Problème Observé
Lors de la génération de PDF, le payload envoyé à PDFMonkey contient un tableau lineItems vide :
{
"nbre_paies": 0,
"lineItems": []
}
Aucun log de récupération des paies n'apparaît dans la console.
🔍 Logs Ajoutés
Des logs très visibles ont été ajoutés à plusieurs étapes critiques :
1. Récupération des Paies
[generate-pdf] Fetching payslips for period...
[generate-pdf] Period month: 2025-09-01
[generate-pdf] Organization ID: xxx-xxx-xxx
[generate-pdf] Payslips query result: { error: null, count: X, sample: {...} }
2. Construction des Line Items
═══════════════════════════════════════════════════════════
[generate-pdf] 🔍 BUILDING PDFMONKEY PAYLOAD
[generate-pdf] 📊 Payslips count: X
═══════════════════════════════════════════════════════════
[generate-pdf] 👤 Processing payslip: { payslip_id, has_contract, has_salarie, ... }
[generate-pdf] ✅ Line items built: X items
[generate-pdf] 📝 First line item: { employee_name, matricule, ... }
3. Résumé du Payload
═══════════════════════════════════════════════════════════
[generate-pdf] 📋 PAYLOAD SUMMARY:
[generate-pdf] Transfer reference: LOR-00001
[generate-pdf] Total net: 1234.56
[generate-pdf] Number of payslips: X
[generate-pdf] Number of line items: X
═══════════════════════════════════════════════════════════
4. Payload Final
═══════════════════════════════════════════════════════════
[generate-pdf] 🚀 FINAL PAYLOAD TO PDFMONKEY:
[generate-pdf] Payload prepared with X payslips
[generate-pdf] lineItems in payload: X
═══════════════════════════════════════════════════════════
[generate-pdf] ✅ Sample line item in payload: { employee_name, matricule, ... }
🧪 Procédure de Test
1. Relancer le serveur Next.js
npm run dev
2. Déclencher une génération de PDF
- Aller sur Staff → Virements de Salaires
- Cliquer sur un virement
- Cliquer sur "Générer PDF"
3. Observer les logs dans le terminal
Vous devriez maintenant voir beaucoup plus de logs avec des séparateurs visibles (═══...).
📊 Diagnostic selon les Logs
Cas 1 : Aucun log avant PDFMonkey
Symptôme : Vous voyez directement [generate-pdf] PDFMonkey response: sans les logs précédents.
Cause possible :
- Le code en cache n'est pas à jour
- Hot reload n'a pas fonctionné
- Mauvais fichier exécuté
Solution :
- Arrêter complètement Next.js (Ctrl+C)
- Supprimer le cache :
rm -rf .next - Relancer :
npm run dev
Cas 2 : Logs visibles mais Payslips count: 0
Symptôme :
[generate-pdf] 📊 Payslips count: 0
[generate-pdf] ⚠️ WARNING: Payload has no payslips!
Diagnostic :
[generate-pdf] Payslips query result: { error: null, count: 0, sample: null }
[generate-pdf] No payslips found for this period!
[generate-pdf] Query params: { organization_id: "xxx", period_month: "2025-09-01" }
Causes possibles :
- Aucune paie dans la base pour cette période/organisation
- Format de date incorrect dans
period_month - organization_id ne correspond pas
Vérifications :
-- 1. Vérifier les paies existantes pour cette organisation
SELECT id, period_month, organization_id, net_amount, contract_id
FROM payslips
WHERE organization_id = 'XXX-XXX-XXX'
ORDER BY period_month DESC
LIMIT 10;
-- 2. Vérifier le format de period_month
SELECT DISTINCT period_month
FROM payslips
WHERE organization_id = 'XXX-XXX-XXX';
-- Doit être au format: 2025-09-01 (YYYY-MM-01)
-- 3. Vérifier l'organization_id du virement
SELECT org_id, period_month, num_appel
FROM salary_transfers
WHERE id = 'ID_DU_VIREMENT';
Cas 3 : Payslips trouvées mais lineItems vide
Symptôme :
[generate-pdf] 📊 Payslips count: 5
[generate-pdf] ✅ Line items built: 0 items
Diagnostic :
[generate-pdf] 👤 Processing payslip: {
payslip_id: "xxx",
has_contract: false, ← Problème ici
has_salarie: false,
employee_name: "",
net_amount: 1234.56
}
Cause : Les paies n'ont pas de contrats liés (relation cddu_contracts)
Vérifications :
-- Vérifier les relations des paies
SELECT
p.id as payslip_id,
p.contract_id,
p.net_amount,
c.id as contract_exists,
c.employee_id,
s.nom,
s.prenom
FROM payslips p
LEFT JOIN cddu_contracts c ON p.contract_id = c.id
LEFT JOIN salaries s ON c.employee_id = s.id
WHERE p.organization_id = 'XXX-XXX-XXX'
AND p.period_month = '2025-09-01'
LIMIT 10;
Solution : Corriger les relations dans la base de données.
Cas 4 : Line items construites mais vides dans le payload
Symptôme :
[generate-pdf] ✅ Line items built: 5 items
[generate-pdf] 📝 First line item: { employee_name: "", matricule: "", montant: 0, ... }
[generate-pdf] lineItems in payload: 5
Cause : Données manquantes dans les contrats/salariés
Vérifications :
-- Vérifier les données des contrats
SELECT
c.id,
c.employee_matricule,
c.contract_number,
c.analytique,
c.profession,
s.nom,
s.prenom
FROM cddu_contracts c
LEFT JOIN salaries s ON c.employee_id = s.id
WHERE c.id IN (
SELECT contract_id
FROM payslips
WHERE organization_id = 'XXX-XXX-XXX'
AND period_month = '2025-09-01'
)
LIMIT 10;
🔧 Corrections Rapides
Créer des paies de test
-- 1. Trouver un contrat existant
SELECT id, employee_id, employee_matricule
FROM cddu_contracts
WHERE org_id = 'XXX-XXX-XXX'
LIMIT 1;
-- 2. Créer une paie de test
INSERT INTO payslips (
organization_id,
contract_id,
period_month,
net_amount,
gross_amount,
pay_date,
status
) VALUES (
'XXX-XXX-XXX', -- organization_id du virement
'ID_DU_CONTRAT', -- contract_id trouvé ci-dessus
'2025-09-01', -- period_month (même que le virement)
1500.00, -- net_amount
2000.00, -- gross_amount
'2025-09-30', -- pay_date
'paid' -- status
);
Vérifier le format de period_month
-- Corriger le format si nécessaire
UPDATE salary_transfers
SET period_month = DATE_TRUNC('month', period_month::date)
WHERE id = 'ID_DU_VIREMENT';
📝 Checklist de Diagnostic
- Les nouveaux logs apparaissent dans la console
- La requête de payslips est exécutée
- Des payslips sont trouvées (
count > 0) - Les payslips ont des contrats liés (
has_contract: true) - Les contrats ont des salariés liés (
has_salarie: true) - Les line items sont construites (
Line items built: X items) - Les line items contiennent des données (
employee_namenon vide) - Le payload PDFMonkey contient les line items
- Le PDF généré contient les lignes de paie
🆘 Si les logs n'apparaissent toujours pas
-
Vérifier que vous modifiez le bon fichier :
ls -la app/api/staff/virements-salaires/generate-pdf/route.ts -
Vérifier qu'il n'y a pas de fichier en double :
find . -name "route.ts" -path "*/generate-pdf/*" -
Forcer le rechargement :
- Arrêter Next.js
- Supprimer
.next/ - Relancer
npm run dev - Hard refresh du navigateur (Cmd+Shift+R)
-
Vérifier la version en production : Si déployé sur Vercel, les logs apparaissent dans le dashboard Vercel sous "Functions Logs"
📅 Date de Mise à Jour
13 octobre 2025