espace-paie-odentas/DEBUG_PAYSLIPS_GENERATION.md

281 lines
8.1 KiB
Markdown

# 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