// Proteção: seguros, estrutura familiar e planejamento sucessório const { useState: useStatePr } = React; function FamiliaCard({ familia, onEdit }) { const c = familia.cliente, j = familia.conjuge; return (

Estrutura familiar

Cliente {c.nome} {window.idade(c.nascimento) != null ? window.idade(c.nascimento) + " anos · " : ""}{c.estadoCivil} {c.regimeBens}
{j?.nome && (
Cônjuge {j.nome} {window.idade(j.nascimento) != null ? window.idade(j.nascimento) + " anos" : ""}
)}
{(familia.filhos || []).map((f, i) => (
Filho(a) {f.nome} {window.idade(f.nascimento) != null ? window.idade(f.nascimento) + " anos" : ""}
))} {(familia.filhos || []).length === 0 &&
Nenhum filho cadastrado.
}
); } function FamiliaModal({ familia, onClose, onSave }) { const [form, setForm] = useStatePr(JSON.parse(JSON.stringify(familia))); const setC = (k, v) => setForm(f => ({ ...f, cliente: { ...f.cliente, [k]: v } })); const setJ = (k, v) => setForm(f => ({ ...f, conjuge: { ...f.conjuge, [k]: v } })); const setFilho = (i, k, v) => setForm(f => { const filhos = f.filhos.map((x, idx) => idx === i ? { ...x, [k]: v } : x); return { ...f, filhos }; }); return (
{ e.preventDefault(); onSave(form); onClose(); }}>
setC("nome", e.target.value)} required/>
setC("nascimento", e.target.value)}/>
setJ("nome", e.target.value)}/>
setJ("nascimento", e.target.value)}/>
{form.filhos.map((f, i) => (
setFilho(i, "nome", e.target.value)}/>
setFilho(i, "nascimento", e.target.value)} style={{ flex: 1 }}/>
))}
); } function ProtecaoPage({ state, onAsset, onEditAsset, onDeleteAsset, onEditFamilia, onUpdateSucessao }) { const seguros = state.seguros; const suc = window.calcSucessao(state); const tot = window.patrimonioTotais(state.patrimonio, state.dividas); const capitalVida = seguros.filter(s => s.tipo === "Vida" || s.tipo === "Invalidez").reduce((s, x) => s + Number(x.capital || 0), 0); const premioTotal = seguros.reduce((s, x) => s + Number(x.premioMensal || 0), 0); const dividaTotal = tot.totalDividas; const coberturaDivida = dividaTotal > 0 ? Math.min(capitalVida / dividaTotal, 1) : 1; const custoSucessorio = suc.custoExtrajudicial; const coberturaSucessao = custoSucessorio > 0 ? Math.min(capitalVida / custoSucessorio, 1) : 1; const gapSucessao = Math.max(0, custoSucessorio - capitalVida); const setSuc = (k, v) => onUpdateSucessao({ ...state.sucessao, [k]: Number(v) || 0 }); return (

🛡️ Proteção

Seguros e planejamento sucessório. A estrutura familiar é cadastrada na aba Objetivos.
Capital segurado (vida)
Prêmios / mês
Dívida coberta por seguro
{Math.round(coberturaDivida * 100)}%
% do saldo devedor coberto
Apólices{seguros.length}
Custo sucessório coberto{Math.round(coberturaSucessao * 100)}%
{gapSucessao > 0 && (
⚠️ O capital segurado ({window.fmtBRLString(capitalVida)}) cobre {Math.round(coberturaSucessao * 100)}% do custo do inventário extrajudicial ({window.fmtBRLString(custoSucessorio)}). Sugestão: aumentar a proteção em {window.fmtBRLString(gapSucessao)} para os herdeiros não precisarem vender bens para pagar a sucessão.
)}

Apólices

({ id: s.id, raw: { ...s, __kind: "seguro" }, cells: [ s.nome, s.tipo, s.seguradora || "—", , s.premioMensal > 0 ? window.fmtBRLString(s.premioMensal) : "—", s.vigencia ? s.vigencia.split("-").reverse().join("/") : "—", {window.fmtBRLString(s.capital)}, ]}))} onEdit={onEditAsset} onDelete={id => onDeleteAsset("__seguros", id)} empty="Nenhum seguro cadastrado."/>
{/* ---- Sucessão ---- */}

Partilha · patrimônio transmissível

{suc.regime}
Total{window.fmtBRLString(suc.transmissivel)}
Meação{window.fmtBRLString(suc.meacao)}
Herança{window.fmtBRLString(suc.heranca)}
Legítima{window.fmtBRLString(suc.legitima)}
0 ? (suc.meacao / suc.transmissivel) * 100 + "%" : "50%" }}>
0 ? (suc.heranca / suc.transmissivel) * 100 + "%" : "50%" }}>
Meação {suc.transmissivel > 0 ? Math.round((suc.meacao / suc.transmissivel) * 100) : 0}% Herança {suc.transmissivel > 0 ? Math.round((suc.heranca / suc.transmissivel) * 100) : 0}%
Previdência isenta de inventário: {window.fmtBRLString(suc.previdenciaIsenta)} · {suc.notaRegime}

ITCMD estimado

ITCMD ({suc.estado} · alíquota {suc.aliquota}%){window.fmtBRLString(suc.itcmd)}
Patrimônio transmissível{window.fmtBRLString(suc.transmissivel)}
(−) Meação{window.fmtBRLString(suc.meacao)}
(−) Previdência isenta{window.fmtBRLString(suc.previdenciaIsenta)}
Valor tributável{window.fmtBRLString(suc.valorTributavel)}
setSuc("aliquotaITCMD", e.target.value)}/>

Composição dos custos de inventário

Extrajudicial (cartório){window.fmtBRLString(suc.custoExtrajudicial)}
Registro dos imóveis{window.fmtBRLString(suc.registro)}
Custo de escritura{window.fmtBRLString(suc.escritura)}
ITCMD{window.fmtBRLString(suc.itcmd)}
Honorários (tabela OAB){window.fmtBRLString(suc.honorariosExtra)}
Judicial{window.fmtBRLString(suc.custoJudicial)}
Registro dos imóveis{window.fmtBRLString(suc.registro)}
Custas judiciais{window.fmtBRLString(suc.custasJudiciais)}
ITCMD{window.fmtBRLString(suc.itcmd)}
Honorários{window.fmtBRLString(suc.honorariosJud)}
*Honorários sugeridos conforme recomendação da tabela OAB de cada estado.

Herdeiros e partilhas

{suc.herdeiros.map((h, i) => (
{(h.nome || "?").split(" ").map(x => x[0]).slice(0, 2).join("")} {h.papel}
{h.nome} {h.composicao} {window.fmtCompact(h.valor)} {suc.transmissivel > 0 ? ((h.valor / suc.transmissivel) * 100).toFixed(1) : 0}% do transmissível
))} {suc.herdeiros.length === 0 &&
Cadastre cônjuge e filhos na estrutura familiar (aba Objetivos).
}
*Partilha simulada conforme o regime de bens ({suc.regime}) — CC arts. 1.829 e 1.832. Estimativas simplificadas — não substituem aconselhamento jurídico.
); } Object.assign(window, { ProtecaoPage, FamiliaCard, FamiliaModal });