essai

export interface Professional { id: string; name: string; category: 'health' | 'artisan' | 'commerce'; icon: string; total: number; density: number; averageAge: number; expectedDepartures: number; departureRate: number; } export const professionals: Professional[] = [ // Professionnels de santé { id: 'medecins', name: 'Médecins', category: 'health', icon: '?', total: 226000, density: 337.5, averageAge: 51.2, expectedDepartures: 74580, departureRate: 33.0 }, { id: 'infirmiers', name: 'Infirmiers', category: 'health', icon: '?‍⚕️', total: 764000, density: 1140.0, averageAge: 42.8, expectedDepartures: 184896, departureRate: 24.2 }, { id: 'pharmaciens', name: 'Pharmaciens', category: 'health', icon: '?', total: 75000, density: 112.0, averageAge: 48.5, expectedDepartures: 22500, departureRate: 30.0 }, { id: 'dentistes', name: 'Dentistes', category: 'health', icon: '?', total: 42000, density: 62.7, averageAge: 49.3, expectedDepartures: 12600, departureRate: 30.0 }, { id: 'kinesitherapeutes', name: 'Kinésithérapeutes', category: 'health', icon: '?', total: 95000, density: 141.8, averageAge: 44.2, expectedDepartures: 23750, departureRate: 25.0 }, { id: 'psychologues', name: 'Psychologues', category: 'health', icon: '?', total: 68000, density: 101.5, averageAge: 46.1, expectedDepartures: 17000, departureRate: 25.0 }, { id: 'orthophonistes', name: 'Orthophonistes', category: 'health', icon: '?️', total: 25000, density: 37.3, averageAge: 43.8, expectedDepartures: 6250, departureRate: 25.0 }, { id: 'sages_femmes', name: 'Sages-femmes', category: 'health', icon: '?', total: 23000, density: 34.3, averageAge: 45.2, expectedDepartures: 5750, departureRate: 25.0 }, { id: 'veterinaires', name: 'Vétérinaires', category: 'health', icon: '?', total: 18500, density: 27.6, averageAge: 47.8, expectedDepartures: 5550, departureRate: 30.0 }, { id: 'opticiens', name: 'Opticiens', category: 'health', icon: '?', total: 32000, density: 47.8, averageAge: 41.5, expectedDepartures: 8000, departureRate: 25.0 }, { id: 'podologues', name: 'Podologues', category: 'health', icon: '?', total: 14500, density: 21.6, averageAge: 44.7, expectedDepartures: 3625, departureRate: 25.0 }, { id: 'osteopathes', name: 'Ostéopathes', category: 'health', icon: '?', total: 28000, density: 41.8, averageAge: 38.9, expectedDepartures: 5600, departureRate: 20.0 }, { id: 'dieteticiens', name: 'Diététiciens', category: 'health', icon: '?', total: 12000, density: 17.9, averageAge: 42.3, expectedDepartures: 3000, departureRate: 25.0 }, { id: 'ergotherapeutes', name: 'Ergothérapeutes', category: 'health', icon: '♿', total: 15500, density: 23.1, averageAge: 41.8, expectedDepartures: 3875, departureRate: 25.0 }, { id: 'orthoptistes', name: 'Orthoptistes', category: 'health', icon: '?️', total: 4200, density: 6.3, averageAge: 43.5, expectedDepartures: 1050, departureRate: 25.0 }, // Artisans { id: 'electriciens', name: 'Électriciens', category: 'artisan', icon: '⚡', total: 145000, density: 216.4, averageAge: 43.2, expectedDepartures: 36250, departureRate: 25.0 }, { id: 'plombiers', name: 'Plombiers', category: 'artisan', icon: '?', total: 125000, density: 186.6, averageAge: 44.8, expectedDepartures: 31250, departureRate: 25.0 }, { id: 'menuisiers', name: 'Menuisiers', category: 'artisan', icon: '?', total: 98000, density: 146.3, averageAge: 45.5, expectedDepartures: 24500, departureRate: 25.0 }, { id: 'macon', name: 'Maçons', category: 'artisan', icon: '?', total: 165000, density: 246.3, averageAge: 42.1, expectedDepartures: 41250, departureRate: 25.0 }, { id: 'couvreurs', name: 'Couvreurs', category: 'artisan', icon: '?', total: 45000, density: 67.2, averageAge: 41.8, expectedDepartures: 11250, departureRate: 25.0 }, { id: 'peintres', name: 'Peintres en bâtiment', category: 'artisan', icon: '?', total: 85000, density: 126.9, averageAge: 43.7, expectedDepartures: 21250, departureRate: 25.0 }, { id: 'carreleurs', name: 'Carreleurs', category: 'artisan', icon: '?', total: 32000, density: 47.8, averageAge: 44.2, expectedDepartures: 8000, departureRate: 25.0 }, { id: 'chauffagistes', name: 'Chauffagistes', category: 'artisan', icon: '?', total: 68000, density: 101.5, averageAge: 45.1, expectedDepartures: 17000, departureRate: 25.0 }, { id: 'serruriers', name: 'Serruriers', category: 'artisan', icon: '?', total: 28000, density: 41.8, averageAge: 46.3, expectedDepartures: 7000, departureRate: 25.0 }, { id: 'coiffeurs', name: 'Coiffeurs', category: 'artisan', icon: '✂️', total: 185000, density: 276.1, averageAge: 39.8, expectedDepartures: 37000, departureRate: 20.0 }, { id: 'estheticiennes', name: 'Esthéticiennes', category: 'artisan', icon: '?', total: 95000, density: 141.8, averageAge: 36.5, expectedDepartures: 19000, departureRate: 20.0 }, { id: 'boulangers', name: 'Boulangers', category: 'artisan', icon: '?', total: 65000, density: 97.0, averageAge: 44.2, expectedDepartures: 16250, departureRate: 25.0 }, { id: 'patissiers', name: 'Pâtissiers', category: 'artisan', icon: '?', total: 35000, density: 52.2, averageAge: 42.8, expectedDepartures: 8750, departureRate: 25.0 }, { id: 'charcutiers', name: 'Charcutiers', category: 'artisan', icon: '?', total: 18000, density: 26.9, averageAge: 46.5, expectedDepartures: 4500, departureRate: 25.0 }, { id: 'fleuristes', name: 'Fleuristes', category: 'artisan', icon: '?', total: 22000, density: 32.8, averageAge: 43.1, expectedDepartures: 5500, departureRate: 25.0 }, { id: 'horlogers', name: 'Horlogers', category: 'artisan', icon: '⌚', total: 3500, density: 5.2, averageAge: 48.7, expectedDepartures: 1050, departureRate: 30.0 }, { id: 'bijoutiers', name: 'Bijoutiers', category: 'artisan', icon: '?', total: 8500, density: 12.7, averageAge: 47.2, expectedDepartures: 2550, departureRate: 30.0 }, { id: 'cordonniers', name: 'Cordonniers', category: 'artisan', icon: '?', total: 4200, density: 6.3, averageAge: 52.1, expectedDepartures: 1470, departureRate: 35.0 }, { id: 'tapissiers', name: 'Tapissiers', category: 'artisan', icon: '?️', total: 12000, density: 17.9, averageAge: 46.8, expectedDepartures: 3600, departureRate: 30.0 }, { id: 'vitriers', name: 'Vitriers', category: 'artisan', icon: '?', total: 15000, density: 22.4, averageAge: 44.9, expectedDepartures: 3750, departureRate: 25.0 }, // Commerçants { id: 'epiciers', name: 'Épiciers', category: 'commerce', icon: '?', total: 85000, density: 126.9, averageAge: 47.3, expectedDepartures: 25500, departureRate: 30.0 }, { id: 'pharmaciens_commerce', name: 'Pharmaciens (Commerce)', category: 'commerce', icon: '⚕️', total: 22500, density: 33.6, averageAge: 49.1, expectedDepartures: 6750, departureRate: 30.0 }, { id: 'libraires', name: 'Libraires', category: 'commerce', icon: '?', total: 12000, density: 17.9, averageAge: 45.8, expectedDepartures: 3600, departureRate: 30.0 }, { id: 'buralistes', name: 'Buralistes', category: 'commerce', icon: '?', total: 24000, density: 35.8, averageAge: 51.2, expectedDepartures: 7920, departureRate: 33.0 }, { id: 'restaurateurs', name: 'Restaurateurs', category: 'commerce', icon: '?️', total: 175000, density: 261.2, averageAge: 44.5, expectedDepartures: 43750, departureRate: 25.0 }, { id: 'cafetiers', name: 'Cafetiers', category: 'commerce', icon: '☕', total: 45000, density: 67.2, averageAge: 46.7, expectedDepartures: 13500, departureRate: 30.0 }, { id: 'hoteliers', name: 'Hôteliers', category: 'commerce', icon: '?', total: 35000, density: 52.2, averageAge: 48.2, expectedDepartures: 10500, departureRate: 30.0 }, { id: 'agents_immobiliers', name: 'Agents immobiliers', category: 'commerce', icon: '?', total: 65000, density: 97.0, averageAge: 43.8, expectedDepartures: 16250, departureRate: 25.0 }, { id: 'garagistes', name: 'Garagistes', category: 'commerce', icon: '?', total: 95000, density: 141.8, averageAge: 45.6, expectedDepartures: 23750, departureRate: 25.0 }, { id: 'vendeurs_auto', name: 'Vendeurs automobiles', category: 'commerce', icon: '?', total: 42000, density: 62.7, averageAge: 42.1, expectedDepartures: 10500, departureRate: 25.0 }, { id: 'marchands_vetements', name: 'Marchands de vêtements', category: 'commerce', icon: '?', total: 78000, density: 116.4, averageAge: 44.3, expectedDepartures: 19500, departureRate: 25.0 }, { id: 'vendeurs_electromenager', name: 'Vendeurs électroménager', category: 'commerce', icon: '?', total: 32000, density: 47.8, averageAge: 41.2, expectedDepartures: 8000, departureRate: 25.0 }, { id: 'marchands_meubles', name: 'Marchands de meubles', category: 'commerce', icon: '?️', total: 28000, density: 41.8, averageAge: 46.1, expectedDepartures: 7000, departureRate: 25.0 }, { id: 'vendeurs_sport', name: 'Vendeurs articles de sport', category: 'commerce', icon: '⚽', total: 18000, density: 26.9, averageAge: 38.5, expectedDepartures: 3600, departureRate: 20.0 }, { id: 'vendeurs_jouets', name: 'Vendeurs de jouets', category: 'commerce', icon: '?', total: 15000, density: 22.4, averageAge: 40.2, expectedDepartures: 3000, departureRate: 20.0 } ]; export const regionData = [ { region: 'Île-de-France', density: 425.3, professionals: 512000 }, { region: 'Auvergne-Rhône-Alpes', density: 298.7, professionals: 238000 }, { region: 'Nouvelle-Aquitaine', density: 285.2, professionals: 171000 }, { region: 'Occitanie', density: 275.8, professionals: 159000 }, { region: 'Hauts-de-France', density: 245.1, professionals: 147000 }, { region: 'Grand Est', density: 268.9, professionals: 149000 }, { region: 'Provence-Alpes-Côte d\'Azur', density: 312.4, professionals: 157000 }, { region: 'Pays de la Loire', density: 267.3, professionals: 101000 }, { region: 'Bretagne', density: 289.6, professionals: 97000 }, { region: 'Normandie', density: 251.7, professionals: 84000 }, { region: 'Bourgogne-Franche-Comté', density: 243.8, professionals: 68000 }, { region: 'Centre-Val de Loire', density: 258.4, professionals: 66000 } ]; export const getTotalStats = () => { const total = professionals.reduce((sum, prof) => sum + prof.total, 0); const totalDepartures = professionals.reduce((sum, prof) => sum + prof.expectedDepartures, 0); const avgAge = professionals.reduce((sum, prof) => sum + (prof.averageAge * prof.total), 0) / total; const avgDensity = professionals.reduce((sum, prof) => sum + prof.density, 0) / professionals.length; return { totalProfessionals: total, totalProfessions: professionals.length, avgDensity: Math.round(avgDensity * 10) / 10, avgAge: Math.round(avgAge * 10) / 10, totalDepartures, avgDepartureRate: Math.round((totalDepartures / total) * 1000) / 10 }; };