/** * Générateur de PDF pour les entités enrichies * Génère des PDF formatés pour les personnes, adresses et entreprises */ const fs = require('fs').promises; const path = require('path'); /** * Génère un PDF pour une personne (Bodacc - gel des avoirs) * @param {Object} personData - Données de la personne * @param {Object} bodaccResult - Résultat de la recherche Bodacc * @param {string} outputPath - Chemin de sortie du PDF * @returns {Promise} Chemin du PDF généré */ async function generatePersonPdf(personData, bodaccResult, outputPath) { try { const pdfContent = generatePersonPdfContent(personData, bodaccResult); await fs.writeFile(outputPath, pdfContent, 'utf8'); console.log(`[PDF] Personne généré: ${outputPath}`); return outputPath; } catch (error) { console.error(`[PDF] Erreur génération personne:`, error.message); throw error; } } /** * Génère un PDF pour une entreprise (Inforgreffe/Societe.com) * @param {Object} companyData - Données de l'entreprise * @param {Object} inforgreffeResult - Résultat de la recherche Inforgreffe * @param {string} outputPath - Chemin de sortie du PDF * @returns {Promise} Chemin du PDF généré */ async function generateCompanyPdf(companyData, inforgreffeResult, outputPath) { try { const pdfContent = generateCompanyPdfContent(companyData, inforgreffeResult); await fs.writeFile(outputPath, pdfContent, 'utf8'); console.log(`[PDF] Entreprise généré: ${outputPath}`); return outputPath; } catch (error) { console.error(`[PDF] Erreur génération entreprise:`, error.message); throw error; } } /** * Génère un PDF pour une adresse (Cadastre/GéoRisque) * @param {Object} addressData - Données de l'adresse * @param {Object} geoResult - Résultat de la recherche géographique * @param {string} outputPath - Chemin de sortie du PDF * @returns {Promise} Chemin du PDF généré */ async function generateAddressPdf(addressData, geoResult, outputPath) { try { const pdfContent = generateAddressPdfContent(addressData, geoResult); await fs.writeFile(outputPath, pdfContent, 'utf8'); console.log(`[PDF] Adresse généré: ${outputPath}`); return outputPath; } catch (error) { console.error(`[PDF] Erreur génération adresse:`, error.message); throw error; } } /** * Génère le contenu HTML pour le PDF d'une personne * @param {Object} personData - Données de la personne * @param {Object} bodaccResult - Résultat Bodacc * @returns {string} Contenu HTML */ function generatePersonPdfContent(personData, bodaccResult) { const summary = bodaccResult.summary || {}; const results = bodaccResult.results || []; return ` Rapport Bodacc - ${personData.firstName} ${personData.lastName}

Rapport Bodacc - Gel des avoirs

Généré le ${new Date().toLocaleDateString('fr-FR')} à ${new Date().toLocaleTimeString('fr-FR')}

Identité recherchée

Nom complet
${personData.firstName} ${personData.lastName}
Date de naissance
${personData.birthDate || 'Non renseignée'}

Résumé de la recherche

Statut
${summary.riskLevel || 'Faible'}
Résultats trouvés
${summary.totalResults || 0}
Haute confiance
${summary.highConfidenceResults || 0}
Récents (1 an)
${summary.recentResults || 0}

Synthèse: ${summary.summary || 'Aucune donnée disponible'}

Détail des résultats

${results.length === 0 ? '
✅ Aucune mention de gel des avoirs trouvée
' : results.map(result => `

${result.name}

Score: ${(result.matchScore * 100).toFixed(0)}%
Date: ${result.date}

Description: ${result.description}

Source: ${result.sourceUrl}

`).join('') }
`; } /** * Génère le contenu HTML pour le PDF d'une entreprise * @param {Object} companyData - Données de l'entreprise * @param {Object} inforgreffeResult - Résultat Inforgreffe * @returns {string} Contenu HTML */ function generateCompanyPdfContent(companyData, inforgreffeResult) { const company = inforgreffeResult.company || {}; const sources = inforgreffeResult.sources || {}; return ` Rapport Entreprise - ${company.name || companyData.name}

Rapport Entreprise

Généré le ${new Date().toLocaleDateString('fr-FR')} à ${new Date().toLocaleTimeString('fr-FR')}

Informations générales

Raison sociale
${company.name || companyData.name || 'Non renseignée'}
SIREN
${company.siren || 'Non trouvé'}
SIRET
${company.siret || 'Non trouvé'}
Forme juridique
${company.forme || 'Non renseignée'}
Capital social
${company.capital || 'Non renseigné'}
Date de création
${company.dateCreation || 'Non renseignée'}

Adresse

Adresse complète
${company.adresse || 'Non renseignée'}

Activité

Secteur d'activité
${company.activite || 'Non renseignée'}

Dirigeants (${company.dirigeants?.length || 0})

${company.dirigeants && company.dirigeants.length > 0 ? company.dirigeants.map(dirigeant => `
${dirigeant.nom} - ${dirigeant.fonction || 'Dirigeant'}
Source: ${dirigeant.source || 'Non spécifiée'}
`).join('') : '

Aucun dirigeant trouvé

' }

Sources consultées

Societe.com
${sources.societeCom?.success ? '✅ Consulté' : '❌ Non accessible'}
Inforgreffe
${sources.inforgreffe?.success ? '✅ Consulté' : '❌ Non accessible'}
`; } /** * Génère le contenu HTML pour le PDF d'une adresse * @param {Object} addressData - Données de l'adresse * @param {Object} geoResult - Résultat géographique * @returns {string} Contenu HTML */ function generateAddressPdfContent(addressData, geoResult) { const geocode = geoResult.geocode || {} const risks = geoResult.risks || [] const cadastre = geoResult.cadastre || [] return ` Rapport Adresse - ${addressData.street || 'Adresse'}

Rapport Adresse

Généré le ${new Date().toLocaleDateString('fr-FR')} à ${new Date().toLocaleTimeString('fr-FR')}

Adresse analysée

Adresse complète
${addressData.street || ''} ${addressData.postalCode || ''} ${addressData.city || ''} ${addressData.country || ''}

Géocodage

Statut
${geocode.success ? '✅ Géocodé' : '❌ Échec'}
Score de confiance
${geocode.score ? (geocode.score * 100).toFixed(0) + '%' : 'N/A'}
Coordonnées
${geocode.lat && geocode.lon ? `${geocode.lat}, ${geocode.lon}` : 'Non disponibles'}
Adresse normalisée
${geocode.label || 'Non disponible'}

Risques majeurs (${risks.length})

${risks.length === 0 ? '
✅ Aucun risque majeur identifié dans un rayon de 1km
' : risks.map(risk => `

${risk.type}

Niveau: ${risk.level}

Description: ${risk.description}

${risk.distance ? `

Distance: ${risk.distance}m

` : ''}

Source: GéoRisque

`).join('') }

Informations cadastrales (${cadastre.length})

${cadastre.length === 0 ? '
Aucune parcelle cadastrale trouvée
' : cadastre.map(parcelle => `

Parcelle ${parcelle.section}${parcelle.numero}

Commune: ${parcelle.commune}

${parcelle.surface ? `

Surface: ${parcelle.surface}m²

` : ''}

Source: Cadastre

`).join('') }

Sources consultées

Base Adresse Nationale
${geocode.success ? '✅ Consultée' : '❌ Non accessible'}
GéoRisque
= 0 ? 'ok' : 'error'}">✅ Consulté
Cadastre
= 0 ? 'ok' : 'error'}">✅ Consulté
`; } module.exports = { generatePersonPdf, generateCompanyPdf, generateAddressPdf };