import React, { useState, useEffect } from 'react'; import { Calculator, Users, TrendingUp, FileText, Euro, PieChart, Download } from 'lucide-react'; const CostCalculator = () => { const [ral, setRal] = useState('30000'); const [contractType, setContractType] = useState('tempo_indeterminato'); const [tipoAgevolazione, setTipoAgevolazione] = useState('nessuna'); const [rischioInail, setRischioInail] = useState('basso'); const [altroObbligoContributivo, setAltroObbligoContributivo] = useState(false); const [giorniAnnui, setGiorniAnnui] = useState(220); const [oreAnnue, setOreAnnue] = useState(1760); const [results, setResults] = useState({}); // Aliquote contributive 2025 const contributionRates = { inps_dipendente: 0.0919, // 9.19% inps_azienda: 0.30, // 30% (stimato) inail: { basso: 0.01, // 1% - basso rischio medio: 0.03, // 3% - medio rischio alto: 0.075 // 7.5% - alto rischio }, tfr: 0.0691, // 6.91% costi_vari: 0.02, // 2% - costi vari aggiuntivi agevolazione_giovani: 0.06 // 6% riduzione per under 30 }; // Aliquote IRPEF 2025 const irpefRates = [ { min: 0, max: 28000, rate: 0.23 }, { min: 28000, max: 50000, rate: 0.35 }, { min: 50000, max: Infinity, rate: 0.43 } ]; // Calcolo IRPEF const calculateIrpef = (reddito) => { let irpef = 0; for (const bracket of irpefRates) { if (reddito > bracket.min) { const taxableInBracket = Math.min(reddito, bracket.max) - bracket.min; irpef += taxableInBracket * bracket.rate; } } return irpef; }; // Calcolo Trattamento Integrativo const calculateTrattamentoIntegrativo = (irpefLorda, detrazioniTotali, imponibileFiscale) => { if (irpefLorda > detrazioniTotali) { if (imponibileFiscale < 15000) { return 1200; // 1200 euro l'anno } else { return 0; // NO } } else { return 0; // NO } }; // Calcolo Indennità 2025 const calculateIndennita2025 = (reddito) => { if (reddito < 8500) { return reddito * 0.071; // 7.1% } else if (reddito < 15000) { return reddito * 0.053; // 5.3% } else if (reddito < 20000) { return reddito * 0.048; // 4.8% } else if (reddito < 32000) { return 1000; } else if (reddito < 40000) { return 1000 * ((40000 - reddito) / 8000); } else { return 0; } }; // Calcolo detrazioni lavoro dipendente 2025 (formule corrette) const calculateDetrazioni = (reddito) => { // Formula 1: Detrazioni base let detrazioneBase = 0; if (reddito < 15000) { detrazioneBase = 1955; } else if (reddito < 28000) { detrazioneBase = 1910 + (1190 * (28000 - reddito) / (28000 - 15000)); } else if (reddito < 50000) { detrazioneBase = 1910 * ((50000 - reddito) / (50000 - 28000)); } else { detrazioneBase = 0; } // Formula 2: Detrazioni aggiuntive let detrazioneAggiuntiva = 0; if (reddito > 25000 && reddito < 35000) { detrazioneAggiuntiva = 65; } return { detrazioneBase: Math.max(0, detrazioneBase), detrazioneAggiuntiva: detrazioneAggiuntiva, totale: Math.max(0, detrazioneBase) + detrazioneAggiuntiva }; }; // Calcolo dettagliato del costo const calculateCost = () => { const ralNum = parseFloat(ral) || 0; // === COSTI AZIENDA === // Contributi INPS azienda (variabili per tipo contratto) let inpsAzienda; if (contractType === 'apprendistato') { inpsAzienda = ralNum * 0.0311; // 3.11% per apprendistato primo anno } else if (contractType === 'tempo_determinato') { inpsAzienda = ralNum * (contributionRates.inps_azienda + 0.014); // 30% + 1.4% per tempo determinato } else if (contractType === 'cococo') { // Co.Co.Co.: 35.03% totali (2/3 azienda) o 24% se altra contribuzione obbligatoria // Limite massimo imponibilità contributiva 2025: 120.607€ const limiteImponibilita = 120607; const ralImponibile = Math.min(ralNum, limiteImponibilita); const percentualeTotale = altroObbligoContributivo ? 0.24 : 0.3503; inpsAzienda = ralImponibile * (percentualeTotale * 2/3); // 2/3 a carico azienda } else { inpsAzienda = ralNum * contributionRates.inps_azienda; // 30% per altri contratti } // Agevolazioni per Under 30 (100% sgravio INPS fino a 3.000€/anno per 36 mesi - solo per tempo indeterminato) if (tipoAgevolazione === 'under_30' && contractType === 'tempo_indeterminato') { // Calcolo dello sgravio Under 30 (100% fino a 3000€) const sgravioMassimo = 3000; const sgravioCalcolato = inpsAzienda; const sgravioEffettivo = Math.min(sgravioCalcolato, sgravioMassimo); inpsAzienda = inpsAzienda - sgravioEffettivo; } // Agevolazioni per Donne Disoccupate (100% sgravio contributi azienda fino a 8.000€/anno - escluso Co.Co.Co.) if (tipoAgevolazione === 'donne_disoccupate' && contractType !== 'cococo') { // Calcolo dello sgravio Donne Disoccupate (100% fino a 8000€) const sgravioMassimo = 8000; const sgravioCalcolato = inpsAzienda; const sgravioEffettivo = Math.min(sgravioCalcolato, sgravioMassimo); inpsAzienda = inpsAzienda - sgravioEffettivo; } // Agevolazioni per Over 50 (50% sgravio contributi azienda - escluso Co.Co.Co.) if (tipoAgevolazione === 'over_50' && contractType !== 'cococo') { // Calcolo dello sgravio Over 50 (50% dei contributi azienda) const sgravioPercentuale = 0.50; // 50% const sgravioCalcolato = inpsAzienda * sgravioPercentuale; inpsAzienda = inpsAzienda - sgravioCalcolato; } // Contributi INAIL (azzerati per apprendistato, variabile per Co.Co.Co.) let inail; let inailCollaboratore = 0; if (contractType === 'apprendistato') { inail = 0; // INAIL azzerato per apprendistato } else if (contractType === 'cococo') { // Co.Co.Co.: INAIL calcolato e diviso 2/3 azienda, 1/3 collaboratore // Limite massimo imponibilità contributiva 2025: 120.607€ const limiteImponibilita = 120607; const ralImponibile = Math.min(ralNum, limiteImponibilita); const inailTotale = ralImponibile * contributionRates.inail[rischioInail]; inail = inailTotale * 2/3; // 2/3 a carico azienda inailCollaboratore = inailTotale * 1/3; // 1/3 a carico collaboratore } else { inail = ralNum * contributionRates.inail[rischioInail]; } // TFR (non spetta per Co.Co.Co.) let tfr = 0; if (contractType !== 'cococo') { tfr = ralNum * contributionRates.tfr; } // Costi vari aggiuntivi (non spettano per Co.Co.Co.) let costiVari = 0; if (contractType !== 'cococo') { costiVari = ralNum * contributionRates.costi_vari; } // Totale costi azienda const totalContributi = inpsAzienda + inail + tfr + costiVari; // Costo totale annuale const costoTotale = ralNum + totalContributi; // Costo mensile const costoMensile = costoTotale / 12; // Percentuale di maggiorazione const percentualeMaggiorazione = (totalContributi / ralNum) * 100; // === NETTO DIPENDENTE/COLLABORATORE === // Contributi INPS dipendente/collaboratore (variabili per tipo contratto) let inpsDipendente; if (contractType === 'apprendistato') { inpsDipendente = ralNum * 0.0584; // 5.84% per apprendistato } else if (contractType === 'cococo') { // Co.Co.Co.: 1/3 del totale a carico collaboratore // Limite massimo imponibilità contributiva 2025: 120.607€ const limiteImponibilita = 120607; const ralImponibile = Math.min(ralNum, limiteImponibilita); const percentualeTotale = altroObbligoContributivo ? 0.24 : 0.3503; inpsDipendente = ralImponibile * (percentualeTotale * 1/3); // 1/3 a carico collaboratore } else { inpsDipendente = ralNum * contributionRates.inps_dipendente; // 9.19% per altri contratti (tempo determinato = indeterminato) } // Reddito imponibile IRPEF (per Co.Co.Co. si sottrae anche INAIL collaboratore) let redditoImponibile; if (contractType === 'cococo') { redditoImponibile = ralNum - inpsDipendente - inailCollaboratore; } else { redditoImponibile = ralNum - inpsDipendente; } // IRPEF lorda const irpefLorda = calculateIrpef(redditoImponibile); // Detrazioni const detrazioni = calculateDetrazioni(redditoImponibile); // IRPEF netta const irpefNetta = Math.max(0, irpefLorda - detrazioni.totale); // Indennità 2025 (non spetta per Co.Co.Co.) let indennita2025 = 0; if (contractType !== 'cococo') { indennita2025 = calculateIndennita2025(redditoImponibile); } // Trattamento Integrativo (spetta a tutti se soddisfano le condizioni) const trattamentoIntegrativo = calculateTrattamentoIntegrativo(irpefLorda, detrazioni.totale, redditoImponibile); // Netto annuale (include Indennità 2025, Trattamento Integrativo e sottrae INAIL collaboratore per Co.Co.Co.) let nettoAnnuale; if (contractType === 'cococo') { nettoAnnuale = ralNum - inpsDipendente - inailCollaboratore - irpefNetta + indennita2025 + trattamentoIntegrativo; } else { nettoAnnuale = ralNum - inpsDipendente - irpefNetta + indennita2025 + trattamentoIntegrativo; } // Netto mensile su 12 mensilità const nettoMensile12 = nettoAnnuale / 12; // Netto mensile su 13 e 14 mensilità (solo per dipendenti, non Co.Co.Co.) let nettoMensile13 = 0; let nettoMensile14 = 0; if (contractType !== 'cococo') { nettoMensile13 = nettoAnnuale / 13; nettoMensile14 = nettoAnnuale / 14; } setResults({ // Costi azienda ral: ralNum, inpsAzienda: inpsAzienda, sgravioUnder30: tipoAgevolazione === 'under_30' && contractType === 'tempo_indeterminato' ? Math.min(ralNum * 0.30, 3000) : 0, sgravioDonneDisoccupate: tipoAgevolazione === 'donne_disoccupate' && contractType !== 'cococo' ? Math.min((ralNum * (contractType === 'tempo_determinato' ? 0.314 : contractType === 'apprendistato' ? 0.0311 : 0.30)), 8000) : 0, sgravioOver50: tipoAgevolazione === 'over_50' && contractType !== 'cococo' ? (ralNum * (contractType === 'tempo_determinato' ? 0.314 : contractType === 'apprendistato' ? 0.0311 : 0.30)) * 0.50 : 0, inail: inail, tfr: tfr, costiVari: costiVari, totalContributi: totalContributi, costoTotale: costoTotale, costoMensile: costoMensile, percentualeMaggiorazione: percentualeMaggiorazione, // Netto dipendente inpsDipendente: inpsDipendente, inailCollaboratore: inailCollaboratore, redditoImponibile: redditoImponibile, irpefLorda: irpefLorda, detrazioni: detrazioni, indennita2025: indennita2025, trattamentoIntegrativo: trattamentoIntegrativo, irpefNetta: irpefNetta, nettoAnnuale: nettoAnnuale, nettoMensile12: nettoMensile12, nettoMensile13: nettoMensile13, nettoMensile14: nettoMensile14 }); }; useEffect(() => { calculateCost(); }, [ral, contractType, tipoAgevolazione, rischioInail, altroObbligoContributivo, giorniAnnui, oreAnnue]); const formatCurrency = (value) => { return new Intl.NumberFormat('it-IT', { style: 'currency', currency: 'EUR' }).format(value); }; const formatPercentage = (value) => { return `${value.toFixed(1)}%`; }; const getInpsAziendaPercentage = () => { if (contractType === 'apprendistato') return '3.11%'; if (contractType === 'tempo_determinato') return '31.4%'; if (contractType === 'cococo') { const totale = altroObbligoContributivo ? '24%' : '35.03%'; return `${((altroObbligoContributivo ? 0.24 : 0.3503) * 2/3 * 100).toFixed(2)}% (2/3 di ${totale})`; } return '30%'; }; const getInpsDipendentePercentage = () => { if (contractType === 'apprendistato') return '5.84%'; if (contractType === 'cococo') { const totale = altroObbligoContributivo ? '24%' : '35.03%'; return `${((altroObbligoContributivo ? 0.24 : 0.3503) * 1/3 * 100).toFixed(2)}% (1/3 di ${totale})`; } return '9.19%'; }; const exportToPDF = () => { const printWindow = window.open('', '_blank'); const content = ` Report Costo Dipendente 2025

Report Costo Dipendente 2025

Generato il: ${new Date().toLocaleDateString('it-IT')}

Dati

RAL: ${formatCurrency(results.ral || 0)}
Contratto: ${contractType}
Costo Totale: ${formatCurrency(results.costoTotale || 0)}
Netto Annuale: ${formatCurrency(results.nettoAnnuale || 0)}
`; printWindow.document.write(content); printWindow.document.close(); printWindow.print(); }; return (
{/* Header */}

Simulatore Costo Dipendente 2025

Calcola il costo reale di un dipendente con le aliquote aggiornate

{/* Form Input */}

Dati Dipendente

setRal(e.target.value)} className="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent" placeholder="30000" />
{contractType === 'cococo' && (
ℹ️

Limite Imponibilità Co.Co.Co.

I contributi sono calcolati fino al limite massimo di imponibilità contributiva di €120.607 per il 2025. {results.ral > 120607 && ` La RAL di ${formatCurrency(results.ral)} eccede il limite, quindi i contributi sono calcolati solo su ${formatCurrency(120607)}.`}

)} {contractType === 'apprendistato' && (

INAIL non applicabile per apprendistato

)}
{contractType === 'cococo' && (
⚠️

IMPORTANTE: Altra Contribuzione Obbligatoria

setAltroObbligoContributivo(e.target.checked)} className="h-4 w-4 mt-1 text-blue-600 focus:ring-blue-500 border-gray-300 rounded" />

Seleziona se il collaboratore è già iscritto ad altre forme di previdenza obbligatoria. Questo riduce i contributi dal 35.03% al 24%.

)}
{/* Results */}

Risultati Calcolo

{/* Costo Totale */}
Costo Totale Annuale {formatCurrency(results.costoTotale || 0)}
Costo Mensile {formatCurrency(results.costoMensile || 0)}
{/* Breakdown */}
RAL {formatCurrency(results.ral || 0)}
Contributi INPS Azienda ({getInpsAziendaPercentage()}) {formatCurrency(results.inpsAzienda || 0)}
Contributi INAIL ({contractType === 'apprendistato' ? '0%' : contractType === 'cococo' ? `${rischioInail === 'basso' ? '0.67%' : rischioInail === 'medio' ? '2%' : '5%'} (2/3)` : rischioInail === 'basso' ? '1%' : rischioInail === 'medio' ? '3%' : '7.5%'}) {formatCurrency(results.inail || 0)}
{tipoAgevolazione === 'under_30' && contractType === 'tempo_indeterminato' && (
Sgravio Under 30 (100% fino a 3.000€) -{formatCurrency(results.sgravioUnder30 || 0)}
)} {tipoAgevolazione === 'donne_disoccupate' && contractType !== 'cococo' && (
Sgravio Donne Disoccupate (100% fino a 8.000€) -{formatCurrency(results.sgravioDonneDisoccupate || 0)}
)} {tipoAgevolazione === 'over_50' && contractType !== 'cococo' && (
Sgravio Over 50 (50%) -{formatCurrency(results.sgravioOver50 || 0)}
)} {contractType !== 'cococo' && ( <>
TFR (6.91%) {formatCurrency(results.tfr || 0)}
Costi vari aggiuntivi (2%) {formatCurrency(results.costiVari || 0)}
)}
Totale Costi Azienda {formatCurrency(results.totalContributi || 0)}
{/* Netto Dipendente */}

{contractType === 'cococo' ? 'Netto Spettante al Collaboratore' : 'Netto Spettante al Dipendente'}

{/* Netto Annuale */}
Netto Annuale {formatCurrency(results.nettoAnnuale || 0)}
{/* Breakdown Netto */}
RAL {formatCurrency(results.ral || 0)}
Contributi INPS {contractType === 'cococo' ? 'Collaboratore' : 'Dipendente'} ({getInpsDipendentePercentage()}) -{formatCurrency(results.inpsDipendente || 0)}
IRPEF Netta -{formatCurrency(results.irpefNetta || 0)}
{contractType === 'cococo' && (
Contributi INAIL Collaboratore ({rischioInail === 'basso' ? '0.33%' : rischioInail === 'medio' ? '1%' : '2.5%'} - 1/3) -{formatCurrency(results.inailCollaboratore || 0)}
)} {contractType !== 'cococo' && (
Indennità 2025 +{formatCurrency(results.indennita2025 || 0)}
)} {results.trattamentoIntegrativo > 0 && (
Trattamento Integrativo +{formatCurrency(results.trattamentoIntegrativo || 0)}
)}
{/* Mensilità */}

Netto Mensile per Mensilità

12 mensilità {formatCurrency(results.nettoMensile12 || 0)}
{contractType !== 'cococo' && ( <>
13 mensilità {formatCurrency(results.nettoMensile13 || 0)}
14 mensilità {formatCurrency(results.nettoMensile14 || 0)}
)}
{/* Dettaglio IRPEF */}

Dettaglio IRPEF

IRPEF Lorda: {formatCurrency(results.irpefLorda || 0)}
Detrazioni Totali: -{formatCurrency(results.detrazioni?.totale || 0)}
{results.detrazioni?.detrazioneAggiuntiva > 0 && (
• Detrazione aggiuntiva (25-35k€): -{formatCurrency(results.detrazioni?.detrazioneAggiuntiva || 0)}
)}
Indennità 2025: {contractType === 'cococo' ? 'Non spettante' : `+${formatCurrency(results.indennita2025 || 0)}`}
{results.trattamentoIntegrativo > 0 && (
Trattamento Integrativo: +{formatCurrency(results.trattamentoIntegrativo || 0)}
)}
{/* Avviso Apprendistato */} {contractType === 'apprendistato' && (
⚠️

Nota Apprendistato

Il costo relativo all'apprendistato è stimato per il solo primo anno in quanto negli anni successivi le % di contribuzione aumenteranno. I contributi INPS dipendente sono ridotti al 5.84%.

)} {/* Statistics */}

Analisi Costi

{/* Parametri di calcolo */}

Parametri di Calcolo

setGiorniAnnui(parseInt(e.target.value) || 220)} className="w-full px-3 py-2 text-sm border border-gray-300 rounded focus:ring-2 focus:ring-blue-500 focus:border-transparent" min="1" max="365" />
setOreAnnue(parseInt(e.target.value) || 1760)} className="w-full px-3 py-2 text-sm border border-gray-300 rounded focus:ring-2 focus:ring-blue-500 focus:border-transparent" min="1" max="4000" />
{/* Risultati analisi */}
{formatPercentage(results.percentualeMaggiorazione || 0)}
Maggiorazione su RAL
{contractType === 'cococo' ? 'N/A' : formatCurrency((results.costoTotale || 0) / giorniAnnui)}
Costo per giorno lavorativo
{contractType === 'cococo' ? 'N/A' : formatCurrency((results.costoTotale || 0) / oreAnnue)}
Costo per ora lavorativa
{/* Info Box */}

Informazioni Aliquote 2025

Contributi INPS Azienda: 30% (indeterminato) / 31.4% (determinato) / 3.11% (apprendistato) / Variabile Co.Co.Co.

Contributi INAIL: 1% / 3% / 7.5% (per tipo rischio) / 0% (apprendistato) / Diviso 2/3 azienda, 1/3 collaboratore (Co.Co.Co.)

TFR: 6.91% (non spetta per Co.Co.Co.)

Costi vari: 2% (assistenza sanitaria, welfare, enti bilaterali, formazione - non per Co.Co.Co.)

Agevolazioni Under 30: 100% sgravio INPS fino a 3.000€/anno per primi 36 mesi (solo tempo indeterminato)

Agevolazioni Donne Disoccupate: 100% sgravio contributi INPS azienda fino a 8.000€/anno (escluso Co.Co.Co.)

Agevolazioni Over 50: 50% sgravio contributi INPS azienda (escluso Co.Co.Co.)

Aliquote IRPEF 2025: 23% (fino a 28.000€), 35% (28.000-50.000€), 43% (oltre 50.000€)

Detrazioni lavoro dipendente: aumentate a 1.955€ per redditi fino a 15.000€

Co.Co.Co.: Limite massimo imponibilità contributiva €120.607 nel 2025

Calcolo su: {giorniAnnui} giorni lavorativi, {oreAnnue} ore/anno

); }; export default CostCalculator;