{objetivos.map(o => {
const pct = o.alvo > 0 ? Math.min(o.acumulado / o.alvo, 1) : 0;
const done = pct >= 1;
const meses = o.prazo ? Math.max(0, Math.round((new Date(o.prazo) - new Date()) / (30.44 * 864e5))) : null;
const aporteNec = meses > 0 ? Math.max(0, (o.alvo - o.acumulado) / meses) : null;
return (
{o.icone || "🎯"}
onEditAsset({ ...o, __kind: "objetivo" })} title="Editar">
onDeleteAsset("__objetivos", o.id)} title="Excluir">
{o.nome}
{window.fmtBRLString(o.acumulado)}
de {window.fmtBRLString(o.alvo)}
{Math.round(pct * 100)}%
{o.prazo && até {o.prazo.split("-").reverse().join("/")} }
{aporteNec != null && !done && ≈ {window.fmtCompact(aporteNec)}/mês }
{done && ✅ concluÃdo }
);
})}
{objetivos.length === 0 &&
Nenhum objetivo. Adicione o primeiro!
}