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;