/** * 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) { 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 || ''}

🚧 En cours de développement

Les fonctionnalités de géocodage et d'analyse cadastrale seront bientôt disponibles.

Ce rapport inclura :

  • Géocodage de l'adresse
  • Informations cadastrales
  • Risques majeurs (GéoRisque)
  • Données GéoFoncier
`; } module.exports = { generatePersonPdf, generateCompanyPdf, generateAddressPdf };