Jubilación IESS

<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>Calculadora de Jubilación IESS – Ecuador</title>
<style>
body { font-family: system-ui, Arial, sans-serif; margin: 0; padding: 20px; background:#f6f7fb; }
.card { max-width: 760px; margin: 0 auto; background: #fff; padding: 18px; border-radius: 14px; box-shadow: 0 8px 30px rgba(0,0,0,.08); }
h1 { font-size: 20px; margin: 0 0 10px; }
p { color:#444; margin: 6px 0 14px; }
.grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.grid-1 { display: grid; grid-template-columns: 1fr; gap: 12px; }
label { display:block; font-size: 13px; color:#222; margin-bottom: 6px; font-weight: 600; }
input { width: 100%; padding: 12px; border: 1px solid #d8dbe6; border-radius: 10px; font-size: 14px; }
small { display:block; color:#666; margin-top: 6px; line-height: 1.25; }
.row { margin-top: 12px; }
.cta { display:flex; gap: 10px; flex-wrap: wrap; margin-top: 14px; }
button { border: 0; padding: 12px 14px; border-radius: 10px; cursor: pointer; font-weight: 700; }
button.primary { background:#1a73e8; color:#fff; }
button.secondary { background:#eef3ff; color:#1a73e8; }
.result { margin-top: 16px; padding: 14px; background:#f2f6ff; border: 1px solid #dbe6ff; border-radius: 12px; }
.chips { display:flex; gap: 10px; flex-wrap: wrap; margin-top: 10px; }
.chip { background:#fff; border: 1px solid #dbe6ff; border-radius: 999px; padding: 8px 10px; font-size: 13px; }
.warn { color:#a13; font-weight: 700; }
.ok { color:#0a6; font-weight: 700; }
.consent { display:flex; gap:10px; align-items:flex-start; margin-top: 10px; }
.consent input { width:auto; margin-top: 3px; }
.footer-note { margin-top: 10px; color:#666; font-size: 12px; }
</style>
</head>
<body>
<div class="card">
<h1>Calculadora de Jubilación IESS – Ecuador</h1>
<p>Ingresa tus datos y obtén un estimado referencial de tu jubilación. (No sustituye información oficial del IESS).</p>
<form id="form">
<div class="grid">
<div>
<label>Nombre completo</label>
<input id="nombre" required placeholder="Ej: Juan Pérez" />
</div>
<div>
<label>WhatsApp</label>
<input id="whatsapp" required placeholder="Ej: 0991234567" />
</div>
</div>
<div class="grid">
<div>
<label>Correo electrónico (opcional)</label>
<input id="email" type="email" placeholder="Ej: correo@dominio.com" />
</div>
<div>
<label>Edad actual</label>
<input id="edadActual" type="number" min="18" max="70" required placeholder="Ej: 35" />
</div>
</div>
<div class="grid">
<div>
<label>Sueldo mensual registrado en el IESS (USD)</label>
<input id="sueldoIess" type="number" min="0" step="0.01" required placeholder="Ej: 1200" />
<small>Coloca solo el sueldo sobre el cual aportas al IESS. Ejemplo: si sueldo $1200 y comisiones $500, ingresa $1200.</small>
</div>
<div>
<label>Años aportados actualmente al IESS</label>
<input id="aniosAportados" type="number" min="0" max="45" required placeholder="Ej: 12" />
<small>Si no conoces el número exacto, puedes ingresar un estimado.</small>
</div>
</div>
<div class="grid">
<div>
<label>Edad deseada de jubilación</label>
<input id="edadDeseada" type="number" min="18" max="75" required placeholder="Ej: 60" />
<small>Ejemplo: 60, 65 o 70.</small>
</div>
<div>
<label>(Opcional) ¿Cuándo deseas jubilarte? (año)</label>
<input id="anioMeta" type="number" min="2025" max="2100" placeholder="Ej: 2045" />
<small>Este campo no afecta el cálculo; es solo informativo.</small>
</div>
</div>
<div class="consent">
<input id="consent" type="checkbox" required />
<small><b>Acepto ser contactado</b> para recibir mi resultado y conocer alternativas para complementar mi jubilación.</small>
</div>
<div class="cta">
<button class="primary" type="submit">Calcular mi jubilación</button>
<button class="secondary" type="button" id="limpiar">Limpiar</button>
</div>
</form>
<div id="out" class="result" style="display:none;"></div>
<div class="footer-note">
Nota: Estimación referencial basada en los datos ingresados y una tabla simplificada. Para precisión, se debe revisar historial oficial de aportaciones.
</div>
</div>
<script>
// --- Configuración: pega aquí tu endpoint para guardar leads (opcional) ---
// Ejemplo: Google Apps Script Web App URL
const LEAD_ENDPOINT = ""; // <-- pega tu URL aquí cuando la tengas (si no, queda vacío y no envía)
function percentByYears(years) {
// Tabla solicitada:
// 10–15: 50%, 16–20: 60%, 21–30: 70%, 31–35: 80%, 36–39: 90%, 40+: 100%
if (years >= 40) return 1.00;
if (years >= 36) return 0.90;
if (years >= 31) return 0.80;
if (years >= 21) return 0.70;
if (years >= 16) return 0.60;
if (years >= 10) return 0.50;
return null; // no cumple mínimo de tabla
}
function money(n) {
return new Intl.NumberFormat('es-EC', { style: 'currency', currency: 'USD' }).format(n);
}
async function sendLead(payload) {
if (!LEAD_ENDPOINT) return { sent:false, note:"Sin endpoint configurado" };
try {
const res = await fetch(LEAD_ENDPOINT, {
method: "POST",
headers: { "Content-Type":"application/json" },
body: JSON.stringify(payload)
});
return { sent: res.ok };
} catch (e) {
return { sent:false, error: String(e) };
}
}
document.getElementById("limpiar").addEventListener("click", () => {
document.getElementById("form").reset();
document.getElementById("out").style.display = "none";
});
document.getElementById("form").addEventListener("submit", async (e) => {
e.preventDefault();
const nombre = document.getElementById("nombre").value.trim();
const whatsapp = document.getElementById("whatsapp").value.trim();
const email = document.getElementById("email").value.trim();
const edadActual = Number(document.getElementById("edadActual").value);
const sueldoIess = Number(document.getElementById("sueldoIess").value);
const aniosAportados = Number(document.getElementById("aniosAportados").value);
const edadDeseada = Number(document.getElementById("edadDeseada").value);
const out = document.getElementById("out");
// Validaciones básicas
if (edadDeseada < edadActual) {
out.style.display = "block";
out.innerHTML = `<div class="warn">La edad deseada de jubilación no puede ser menor que tu edad actual.</div>`;
return;
}
if (sueldoIess <= 0) {
out.style.display = "block";
out.innerHTML = `<div class="warn">Ingresa un sueldo válido (mayor a 0).</div>`;
return;
}
// Proyección: asume aporte continuo 1 año por cada año transcurrido
const aniosPorAportar = edadDeseada - edadActual;
const aniosTotales = aniosAportados + aniosPorAportar;
const pct = percentByYears(aniosTotales);
const pctText = (pct === null) ? "No cumple mínimo (según tabla)" : `${Math.round(pct*100)}%`;
const pension = (pct === null) ? 0 : sueldoIess * pct;
const faltanPara40 = Math.max(0, 40 - aniosTotales);
// Mejor edad sugerida para alcanzar 40 años:
// edadDirecta = edadActual + (40 - aniosAportados)
const mejorEdadDirecta = edadActual + Math.max(0, 40 - aniosAportados);
// Debe ser >= edadDeseada (si el usuario ya quiere después, respeta su deseo)
const mejorEdadSugerida = Math.max(edadDeseada, mejorEdadDirecta);
const cumple40EnDeseada = aniosTotales >= 40;
// Mensaje final
out.style.display = "block";
out.innerHTML = `
<div class="${cumple40EnDeseada ? 'ok' : 'warn'}">
${cumple40EnDeseada
? `¡Con tu meta de ${edadDeseada} años proyectas alcanzar ≥40 años de aportes!`
: `A los ${edadDeseada} años, te faltarían ${faltanPara40} año(s) para llegar a 40 años de aportes (100%).`}
</div>
<div class="chips">
<div class="chip"><b>Años totales proyectados:</b> ${aniosTotales}</div>
<div class="chip"><b>Porcentaje estimado:</b> ${pctText}</div>
<div class="chip"><b>Pensión estimada:</b> ${pct === null ? "—" : money(pension)}</div>
</div>
<p style="margin-top:12px;">
${cumple40EnDeseada
? `Tu edad objetivo (${edadDeseada}) ya cumple el criterio de 40 años (100% según la tabla).`
: `Para cumplir 40 años de aportes y apuntar al 100% según la tabla, tu mejor edad estimada de jubilación sería <b>${mejorEdadSugerida} años</b>.`}
</p>
<p><i>Este valor es un estimado referencial basado en la información ingresada.</i></p>
<div class="cta">
<button class="primary" type="button" onclick="window.location.href='https://wa.me/?text=${encodeURIComponent("Hola, acabo de calcular mi jubilación IESS y quiero saber cómo complementarla. Mi resultado fue: " + (pct===null? "Sin mínimo": money(pension)) + ".")}';">
Quiero mejorar mi jubilación
</button>
</div>
`;
// Guardar lead (opcional)
const payload = {
timestamp: new Date().toISOString(),
nombre, whatsapp, email,
edadActual, sueldoIess, aniosAportados, edadDeseada,
aniosTotales, porcentaje: pct, pensionEstimada: pension,
faltanPara40, mejorEdadSugerida,
consentimiento: true
};
await sendLead(payload);
});
</script>
</body>
</html>