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
};
};