Calcolatore Forfettario 2025

Artigiani e Commercianti | Imposte, Contributi e Scadenze

⚠️ Disclaimer Importante

Questo calcolatore fornisce stime indicative basate sulla normativa 2025 per artigiani e commercianti in regime forfettario.

📋 Dati del Contribuente

💡 Ricorda:

Reddito minimale 2025: 18.555,00 €

Contributi minimi artigiano: 4.460,64 € | Commerciante: 4.549,70 €

let descrizione = ''; switch(riduzione) { case '35': sconto = contributiDovuti * 0.35; descrizione = 'Riduzione 35% (Forfettari)'; break; case '50': sconto = contributiDovuti * 0.50; descrizione = 'Riduzione 50% (Prima volta - 3 anni)'; break; default: sconto = 0; descrizione = 'Nessuna riduzione'; } return { sconto: sconto, contributiRidotti: contributiDovuti - sconto, descrizione: descrizione, percentuale: riduzione === 'nessuna' ? 0 : (riduzione === '35' ? 35 : 50) }; }; // Attendere il caricamento del DOM document.addEventListener('DOMContentLoaded', function() { document.getElementById('forfettario-form').addEventListener('submit', function(e) { e.preventDefault(); const categoria = document.getElementById('categoria').value; const regimeImposta = parseFloat(document.getElementById('regime-imposta').value); const ricavi = parseFloat(document.getElementById('ricavi').value) || 0; const coeffRedditivita = parseFloat(document.getElementById('coeff-redditivita').value) || 0; const contributiVersatiPrecedente = parseFloat(document.getElementById('contributi-versati-precedente').value) || 0; const accontiImposta = parseFloat(document.getElementById('acconti-imposta').value) || 0; const accontiContributi = parseFloat(document.getElementById('acconti-contributi').value) || 0; // STEP 1: Reddito Forfettario const redditoForfettarioLordo = ricavi * (coeffRedditivita / 100); // STEP 2: Contributi INPS const contributiCalcolati = calculateContributi(redditoForfettarioLordo, categoria); let contributiDovuti = contributiCalcolati.totale; // STEP 2b: Applica riduzione contributiva INPS const riduzioneInfo = applyRiduzioneContributiva(contributiDovuti); contributiDovuti = riduzioneInfo.contributiRidotti; // STEP 3: Base Imponibile (per imposta) const baseImponibile = Math.max(0, redditoForfettarioLordo - contributiDovuti); // STEP 4: Imposta Sostitutiva Lordo const impostalordo = baseImponibile * (regimeImposta / 100); // STEP 5: Acconti e Saldi let saldoImposta = impostalordo; let acconto1Imposta = 0; let acconto2Imposta = 0; if (impostalordo > 51) { acconto1Imposta = impostalordo * 0.50; acconto2Imposta = impostalordo * 0.50; saldoImposta = impostalordo * 0.50; } // Calcolo contributi acconti (semplificato) let saldoContributi = contributiDovuti; let acconto1Contributi = 0; let acconto2Contributi = 0; if (contributiDovuti > 51.65) { acconto1Contributi = contributiDovuti * 0.50; acconto2Contributi = contributiDovuti * 0.50; saldoContributi = contributiDovuti * 0.50; } // Applicare acconti versati saldoImposta = Math.max(0, saldoImposta - accontiImposta); saldoContributi = Math.max(0, saldoContributi - accontiContributi); // Display results document.getElementById('ricavi-display').textContent = formatCurrency(ricavi); document.getElementById('coeff-display').textContent = (coeffRedditivita / 100 * 100).toFixed(0) + '%'; document.getElementById('reddito-lordo-display').textContent = formatCurrency(redditoForfettarioLordo); document.getElementById('categoria-display').textContent = categoria === 'artigiano' ? 'Artigiano' : 'Commerciante'; // Calcola minimi e eccedenti con la riduzione già applicata const minimiRidotti = contributiCalcolati.minimi * (1 - riduzioneInfo.percentuale / 100); const eccedentiRidotti = contributiCalcolati.eccedenti * (1 - riduzioneInfo.percentuale / 100); document.getElementById('contributi-minimi-result').textContent = formatCurrency(minimiRidotti); // Aggiungi il dettaglio della riduzione nei Contributi Minimi if (riduzioneInfo.percentuale > 0) { document.getElementById('dettagli-minimi').textContent = riduzioneInfo.descrizione + ' (' + riduzioneInfo.percentuale + '%)'; } else { document.getElementById('dettagli-minimi').textContent = '18.555€ × aliquota'; } document.getElementById('contributi-eccedenti-result').textContent = formatCurrency(eccedentiRidotti); document.getElementById('contributi-totali-dovuti').textContent = formatCurrency(contributiDovuti); // Mostra i dettagli totali INPS con riduzione applicata if (riduzioneInfo.percentuale > 0) { document.getElementById('dettagli-totale-inps').textContent = 'Minimale + Eccedenti (con ' + riduzioneInfo.descrizione + ')'; } else { document.getElementById('dettagli-totale-inps').textContent = 'Minimale + Eccedenti'; } // Mostra i contributi versati document.getElementById('contributi-versati-precedente-display').textContent = formatCurrency(contributiVersatiPrecedente); // Calcola i contributi da versare = Totale INPS - Contributi Versati const contributiDaVersareCalcolati = Math.max(0, contributiDovuti - contributiVersatiPrecedente); document.getElementById('contributi-da-versare').textContent = formatCurrency(contributiDaVersareCalcolati); // Aggiorna il display della riduzione attiva nei risultati // Calcola i contributi INPS versati = Minimale versato + Acconti eccedenti versati const contributiVersatiTotali = contributiVersatiPrecedente + accontiContributi; document.getElementById('reddito-imposta-lordo').textContent = formatCurrency(redditoForfettarioLordo); document.getElementById('contributi-sottrazione-imposta').textContent = formatCurrency(contributiVersatiTotali); document.getElementById('base-imponibile').textContent = formatCurrency(baseImponibile); document.getElementById('aliquota-imposta-display').textContent = regimeImposta.toFixed(0) + '%'; document.getElementById('aliquota-imposta-risultato').textContent = regimeImposta.toFixed(0) + '%'; document.getElementById('imposta-lordo').textContent = formatCurrency(impostalordo); // Mostrare/nascondere riga eccedenti const rowEccedenti = document.getElementById('row-eccedenti'); const rowAccontiEccedenti = document.getElementById('row-acconti-eccedenti'); if (contributiCalcolati.eccedenti > 0.01) { rowEccedenti.style.display = 'table-row'; // Mostra la riga degli acconti eccedenti solo se ci sono eccedenti document.getElementById('acconti-eccedenti-display').textContent = formatCurrency(accontiContributi); rowAccontiEccedenti.style.display = 'table-row'; } else { rowEccedenti.style.display = 'none'; rowAccontiEccedenti.style.display = 'none'; } document.getElementById('riepilogo-contributi').textContent = formatCurrency(contributiDovuti); document.getElementById('riepilogo-imposta').textContent = formatCurrency(impostalordo); const carico_totale = contributiDovuti + impostalordo; document.getElementById('carico-totale').textContent = formatCurrency(carico_totale); document.getElementById('carico-mensile-value').textContent = formatCurrency(carico_totale / 12); // Scadenze document.getElementById('saldo-imposta-scadenza').textContent = formatCurrency(saldoImposta); document.getElementById('acconto1-imposta-scadenza').textContent = formatCurrency(acconto1Imposta); document.getElementById('saldo-contributi-scadenza').textContent = formatCurrency(saldoContributi); document.getElementById('acconto1-contributi-scadenza').textContent = formatCurrency(acconto1Contributi); document.getElementById('totale-giugno').textContent = formatCurrency( saldoImposta + acconto1Imposta + saldoContributi + acconto1Contributi ); document.getElementById('acconto2-imposta-scadenza').textContent = formatCurrency(acconto2Imposta); document.getElementById('acconto2-contributi-scadenza').textContent = formatCurrency(acconto2Contributi); document.getElementById('totale-novembre').textContent = formatCurrency(acconto2Imposta + acconto2Contributi); // Credito const creditoFinale = Math.max(0, (accontiImposta + accontiContributi) - (contributiDovuti + impostalordo)); if (creditoFinale > 0.01) { document.getElementById('credito-value').textContent = formatCurrency(creditoFinale); document.getElementById('credito-container').style.display = 'block'; } else { document.getElementById('credito-container').style.display = 'none'; } document.getElementById('results').style.display = 'block'; document.getElementById('results').scrollIntoView({ behavior: 'smooth', block: 'start' }); }); // Event listener per i radio button della riduzione INPS const riduzioneRadios = document.querySelectorAll('input[name="riduzione-inps"]'); riduzioneRadios.forEach(radio => { radio.addEventListener('change', function() { // Rimuovi la classe selected da tutti i radio-option del form document.querySelectorAll('.radio-option').forEach(option => { option.classList.remove('selected'); }); // Aggiungi la classe selected al radio-option selezionato this.parentElement.classList.add('selected'); // Aggiorna i contributi minimi in base alla riduzione selezionata updateContributiMinimi(); }); }); });