Calculadora IRPF: Dividendos y Doble Imposición

Añade cada dividendo cobrado (en euros). La calculadora agrupará los datos para tu Declaración.

Origen Bruto (€) Ret. Origen (€) Ret. España (€) Gastos Admin (€)

function agregarFila() { filaContador++; const tbody = document.getElementById('tablaDividendosBody'); const tr = document.createElement('tr'); tr.id = `fila-${filaContador}`; tr.style.borderBottom = "1px solid #edf2f7";

tr.innerHTML = `

`; tbody.appendChild(tr); actualizarCalculos(); }

function borrarFila(id) { document.getElementById(`fila-${id}`).remove(); actualizarCalculos(); }

function actualizarCalculos() { const filas = document.querySelectorAll('#tablaDividendosBody tr'); if (filas.length === 0) { document.getElementById('panelResultados').style.display = 'none'; return; }

let totalBruto = 0, totalRetEspana = 0, totalGastos = 0; let brutoExtranjero = 0, retOrigenExtranjera = 0, deduccionCalculada = 0;

filas.forEach(fila => { const tipo = fila.querySelector('.tipo-origen').value; const bruto = parseFloat(fila.querySelector('.val-bruto').value) || 0; const retOrigen = parseFloat(fila.querySelector('.val-ret-origen').value) || 0; const retEsp = parseFloat(fila.querySelector('.val-ret-esp').value) || 0; const gastos = parseFloat(fila.querySelector('.val-gastos').value) || 0;

// Totales globales (Casilla 0029) totalBruto += bruto; totalGastos += gastos; totalRetEspana += retEsp;

// Si el origen es español pero hay retención origen por error del usuario, la sumamos a la española if (tipo === 'espanol') { totalRetEspana += retOrigen; } else { // Cálculo Doble Imposición (Casilla 0588) brutoExtranjero += bruto; retOrigenExtranjera += retOrigen;

// Regla del menor: Retenido vs 15% del bruto vs 19% del bruto (cuota) const limiteCDI = bruto * 0.15; const cuotaEspana = bruto * 0.19; // Asumimos base del 19% const deducibleFila = Math.min(retOrigen, limiteCDI, cuotaEspana); deduccionCalculada += deducibleFila; } });

// Formateador const formatEur = (num) => new Intl.NumberFormat('es-ES', { style: 'currency', currency: 'EUR' }).format(num);

// Renderizar Casilla 0029 document.getElementById('resBrutoTotal').innerText = formatEur(totalBruto); document.getElementById('resRetEspanaTotal').innerText = formatEur(totalRetEspana); document.getElementById('resGastosTotal').innerText = formatEur(totalGastos);

// Renderizar Casilla 0588 document.getElementById('resRentasBaseExt').innerText = formatEur(brutoExtranjero); document.getElementById('resImpuestoPagadoExt').innerText = formatEur(retOrigenExtranjera); document.getElementById('resDeduccionReal').innerText = formatEur(deduccionCalculada);

document.getElementById('panelResultados').style.display = 'block'; }

// Iniciar con una fila vacía window.onload = agregarFila;