# 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 : ```json { "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 ```bash 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** : 1. **Arrêter complètement** Next.js (Ctrl+C) 2. Supprimer le cache : ```bash rm -rf .next ``` 3. Relancer : ```bash 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** : 1. **Aucune paie dans la base pour cette période/organisation** 2. **Format de date incorrect** dans `period_month` 3. **organization_id ne correspond pas** **Vérifications** : ```sql -- 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** : ```sql -- 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** : ```sql -- 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 ```sql -- 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 ```sql -- 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_name` non 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 1. **Vérifier que vous modifiez le bon fichier** : ```bash ls -la app/api/staff/virements-salaires/generate-pdf/route.ts ``` 2. **Vérifier qu'il n'y a pas de fichier en double** : ```bash find . -name "route.ts" -path "*/generate-pdf/*" ``` 3. **Forcer le rechargement** : - Arrêter Next.js - Supprimer `.next/` - Relancer `npm run dev` - Hard refresh du navigateur (Cmd+Shift+R) 4. **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