# Guide de Dépannage - Génération PDF

## 🚨 Erreurs Courantes et Solutions

### 1. Erreur de Sérialisation SOAP
```
Invalid enum value 'XXXXX' cannot be deserialized into type 'IDNumberTypeResolvable'
```

**🔍 Cause :** Mauvaise correspondance entre l'ID et son type
**✅ Solution :**
- Vérifier que le type d'ID correspond à la valeur
- Utiliser `CreditinfoId` pour les IDs numériques Creditinfo
- Utiliser `NationalID` pour les cartes d'identité nationales

### 2. Erreur de Sécurité SOAP
```
Security exception was thrown. Logged with Id: XXXXX
```

**🔍 Cause :** Problème d'authentification ou de permissions
**✅ Solution :**
- Vérifier les identifiants API dans la base de données
- Contrôler que le service SOAP est accessible
- Valider les permissions du compte utilisé

### 3. Erreur de Validation
```
Les données fournies ne sont pas valides
```

**🔍 Cause :** Paramètres manquants ou incorrects
**✅ Solution :**
- Vérifier tous les champs requis
- Contrôler les formats de date (YYYY-MM-DD)
- Valider les codes pays (2 lettres)

## 🔧 Diagnostic Rapide

### Étape 1: Vérifier les Logs
```bash
tail -f storage/logs/laravel.log | grep -E "(PDF|SOAP|Error)"
```

### Étape 2: Tester la Connexion SOAP
```php
// Dans Tinker
$service = new App\Services\SoapService(config('ws.wsdl_url_data'));
$response = $service->callMethod('GetSupportedReports', []);
dd($response);
```

### Étape 3: Valider les Paramètres
```javascript
// Dans la console du navigateur
console.log('Données PDF:', pdfData);
```

## 📋 Checklist de Validation

### Avant l'Envoi SOAP
- [ ] `IDNumber` n'est pas vide
- [ ] `IDNumberType` est dans la liste valide
- [ ] `InquiryReason` est valide
- [ ] `FullName` est présent
- [ ] `DateOfBirth` au format correct

### Types d'ID Valides
- `CreditinfoId` - ID unique Creditinfo
- `NationalID` - Carte d'identité nationale
- `PassportNumber` - Numéro de passeport
- `DrivingLicenseNumber` - Permis de conduire
- `ResidencePermitNumber` - Permis de résidence
- `ConsularCard` - Carte consulaire
- `TaxNumber` - Numéro fiscal

### Motifs de Recherche Valides
- `ApplicationForCreditOrAmendmentOfCreditTerms`
- `EvaluationOfCurrentCustomerSupplierPartnerOrOwnEmployee`
- `PaymentAgreement`
- `AnotherReason`

## 🛠️ Outils de Debug

### 1. Mode Debug JavaScript
```javascript
// Activer le debug détaillé
localStorage.setItem('pdf_debug', 'true');

// Dans generatePDF, ajouter:
if (localStorage.getItem('pdf_debug')) {
    console.log('Debug PDF Data:', pdfData);
    console.log('Debug Result:', result);
}
```

### 2. Logs PHP Détaillés
```php
// Dans SoapService.php
Log::debug('SOAP Request Details', [
    'method' => 'GetPdfReport',
    'parameters' => $requestGetPdfReport,
    'timestamp' => now()
]);
```

### 3. Test Manuel SOAP
```bash
# Exécuter le script de test
php tests/test_pdf_generation.php
```

## 🔄 Procédure de Récupération

### Si l'erreur persiste :

1. **Redémarrer les services**
   ```bash
   php artisan cache:clear
   php artisan config:clear
   ```

2. **Vérifier la connectivité**
   ```bash
   curl -I https://ws.bic-uemoa.com/WsReport/v5.86/Service.svc?singleWsdl
   ```

3. **Tester avec des données connues**
   - Utiliser un CreditinfoId qui a déjà fonctionné
   - Tester avec des paramètres minimaux

4. **Contacter l'administrateur**
   - Si les identifiants API ont expiré
   - Si le service externe est indisponible

## 📞 Support

### Informations à Fournir
- **Timestamp** de l'erreur
- **Données utilisées** (sans informations sensibles)
- **Messages d'erreur** complets des logs
- **Étapes** pour reproduire le problème

### Logs Importants
```bash
# Logs Laravel
tail -100 storage/logs/laravel.log

# Logs serveur web (si applicable)
tail -100 /var/log/nginx/error.log
tail -100 /var/log/apache2/error.log
```

## 🎯 Prévention

### Bonnes Pratiques
1. **Toujours valider** les données avant envoi
2. **Utiliser les fallbacks** pour les valeurs par défaut
3. **Logger les paramètres** pour le debug
4. **Tester régulièrement** la connectivité SOAP
5. **Monitorer les logs** pour détecter les problèmes tôt

### Monitoring Automatique
```php
// Ajouter dans un job schedulé
if (!$soapService->isClientInitialized()) {
    // Alerter l'équipe technique
    Mail::to('admin@example.com')->send(new SoapServiceDownAlert());
}
```

---

*Guide mis à jour le : {{ date('Y-m-d H:i:s') }}* 
