# 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
