Modelagem de Patrimônio
A modelagem de patrimônio da Rica é o conjunto de conceitos, estruturas de dados e regras de cálculo que permite ao planejador financeiro projetar a trajetória da riqueza de um cliente ao longo da vida — desde hoje até a expectativa de vida informada.
Este documento é a referência definitiva sobre como o patrimônio é representado, calculado e exibido dentro da plataforma.
Visão Geral
O patrimônio de uma pessoa é composto por ativos (o que ela tem) e passivos (o que ela deve). A diferença entre os dois é o patrimônio líquido.
A Rica vai além do inventário estático: ela projeta como esse patrimônio evolui ao longo do tempo, cruzando com o custo de vida da pessoa, suas contribuições mensais e os rendimentos esperados de cada ativo. O resultado é uma curva de vida patrimonial — uma visualização que responde à pergunta central do planejamento financeiro:
"Com o que tenho hoje e com o que vou continuar fazendo, quando vou atingir a independência financeira — e o meu dinheiro vai durar até o fim da vida?"
Ativos Patrimoniais
Um Ativo Patrimonial é qualquer bem ou direito que compõe o patrimônio. A Rica suporta sete classes de ativos, cada uma com comportamento de projeção específico.
Classes de Ativos
| Classe | Descrição | Comportamento de Projeção |
|---|---|---|
FINANCEIRO | Investimentos, CDBs, fundos, ações | Juros compostos + aportes mensais |
IMOVEL | Imóveis residenciais ou comerciais | Valorização anual + renda de aluguel |
VEICULO | Automóveis, motos, embarcações | Depreciação anual |
PREVIDENCIA | PGBL, VGBL, fundos de pensão | Acumulação com contribuições até aposentadoria |
EMPRESARIAL | Participações societárias | Valorização baseada em múltiplo de faturamento |
PROTECAO | Seguros de vida e residencial | Não soma ao patrimônio; rastreia cobertura disponível |
OUTRO | Arte, coleções, outros | Sem projeção automática |
Campos para Projeção
Além dos campos cadastrais, cada ativo possui campos específicos que alimentam o motor de cálculo:
| Campo | Tipo | Aplicável a | Descrição |
|---|---|---|---|
taxaRendimentoMensalEsperada | Decimal | FINANCEIRO, PREVIDENCIA | Taxa de rendimento mensal (ex: 0.008 = 0,8% a.m.) |
taxaValorizacaoAnualEsperada | Decimal | IMOVEL, EMPRESARIAL, VEICULO | Taxa de valorização/depreciação anual |
rendaMensalGerada | Decimal | IMOVEL, EMPRESARIAL | Renda passiva gerada mensalmente |
aporteMensalRecorrente | Decimal | FINANCEIRO, PREVIDENCIA | Contribuição mensal que o cliente faz |
crescimentoAporteMensalAnual | Decimal | FINANCEIRO, PREVIDENCIA | Crescimento anual do aporte |
dataFimAporte | Data | FINANCEIRO, PREVIDENCIA | Quando os aportes param (ex: data de aposentadoria) |
incluirNaProjecao | Boolean | Todos | Se o ativo participa do motor de cálculo |
Exemplo de Ativo Financeiro com Projeção
{
"nome": "CDB Banco XP",
"classeAtivo": "FINANCEIRO",
"valorAtual": 80000.00,
"taxaRendimentoMensalEsperada": 0.008,
"aporteMensalRecorrente": 1500.00,
"crescimentoAporteMensalAnual": 0.05,
"dataFimAporte": "2053-01-15",
"incluirNaProjecao": true
}
Por que
dataFimAporte? O cliente para de contribuir na aposentadoria. Sem esse campo, o motor continuaria somando aportes mesmo após os 65 anos, distorcendo completamente a curva pós-aposentadoria.
Passivos Patrimoniais
Um Passivo Patrimonial é uma obrigação financeira: dívidas, financiamentos ou custos recorrentes que reduzem o patrimônio líquido e consomem caixa mensalmente.
Categorias de Passivos
| Categoria | Descrição | Exemplo |
|---|---|---|
FINANCIAMENTO_IMOVEL | Financiamento imobiliário | Financiamento da casa própria |
FINANCIAMENTO_VEICULO | Financiamento de veículo | Carro parcelado |
EMPRESTIMO_PESSOAL | Empréstimo pessoal ou consignado | Crédito pessoal no banco |
CARTAO_CREDITO | Dívida de cartão | Fatura parcelada |
CUSTO_RECORRENTE | Despesa fixa com prazo | Mensalidade escola, plano |
Sistemas de Amortização
Para financiamentos, a Rica suporta dois sistemas:
| Sistema | Como funciona | Quando usar |
|---|---|---|
SAC | Parcelas decrescentes; amortização fixa, juros caem | Financiamentos imobiliários CEF/BB |
PRICE | Parcelas fixas; amortização cresce, juros caem | Maioria dos financiamentos bancários |
Campos de Passivo para Projeção:
| Campo | Tipo | Descrição |
|---|---|---|
saldoDevedor | Decimal | Saldo atual da dívida |
taxaJurosMensal | Decimal | Taxa de juros mensal |
prazoTotalMeses | Integer | Prazo total do financiamento |
sistemaAmortizacao | Enum | SAC ou PRICE |
dataInicio | Data | Data de início do contrato |
ativoPatrimonialId | String | Ativo vinculado (ex: imóvel financiado) |
Exemplo de Passivo — Financiamento SAC
{
"nome": "Financiamento Apartamento",
"categoriaPassivo": "FINANCIAMENTO_IMOVEL",
"ativoPatrimonialId": "imovel-001",
"saldoDevedor": 350000.00,
"taxaJurosMensal": 0.008,
"prazoTotalMeses": 240,
"sistemaAmortizacao": "SAC",
"dataInicio": "2020-01-01"
}
Relacionamento entre Ativos e Passivos
Um passivo pode estar vinculado a um ativo específico (ativoPatrimonialId). Isso é fundamental para calcular o patrimônio líquido real de cada bem.
Exemplo prático:
- Apartamento (IMOVEL): R$ 800.000
- Financiamento vinculado: saldo devedor R$ 350.000
- Patrimônio líquido do imóvel: R$ 450.000
O motor usa essa relação para calcular o patrimonioLiquido corretamente.
Planejamento de Patrimônio
O Planejamento é o único objeto persistido nessa modelagem. Ele armazena os parâmetros que o cliente e o planejador definem juntos — não armazena a curva em si.
Por que os Ativos são Referências, não Cópias?
Um decisão central da arquitetura: o Planejamento armazena apenas IDs dos ativos e passivos — não uma cópia dos valores deles.
Benefício principal: quando o planejador atualiza o valor do apartamento de R$ 800.000 para R$ 950.000, todos os planejamentos que referenciam esse ativo automaticamente recalculam com o valor novo. Não há risco de inconsistência entre o cadastro e o planejamento.
Trade-off aceito: se um ativo for excluído, o planejamento precisa ser atualizado manualmente. Esse cenário é raro e preferível ao problema de dados "stale" em cópias.
A Curva Nunca é Persistida
Decisão de arquitetura fundamental: a curva de patrimônio (ResultadoCurvaPatrimonio) é sempre calculada sob demanda e nunca gravada no banco de dados.
Por quê?
- Interatividade: o planejador altera um slider (taxa de retorno, custo de vida) e a curva precisa redesenhar em tempo real — impossível se houvesse um round-trip de gravação + leitura.
- Sem desatualização: se uma curva fosse persistida, ela ficaria desatualizada assim que qualquer ativo fosse atualizado. A regra "curva = parâmetros aplicados hoje" elimina esse problema por definição.
- Custo de storage: uma curva completa (52 pontos × 3 modos × todos os campos) teria dezenas de KB por cálculo. Para um usuário que ajusta 10 parâmetros numa sessão, isso seria 10 gravações desnecessárias.
- Simplicidade: o motor é uma função pura — entrada entra, saída sai, sem efeitos colaterais. Fácil de testar, fácil de auditar.
Os Três Modos de Independência Financeira
A Rica calcula três curvas simultaneamente, representando três estratégias diferentes para a fase pós-aposentadoria:
| Modo | Nome | Estratégia | Patrimônio Necessário |
|---|---|---|---|
RENDA | Viver dos rendimentos | Nunca tocar no principal; viver apenas dos juros/dividendos | Maior (mais conservador) |
CONSUMO_PARCIAL | Consumir parcialmente | Preservar um percentual configurável do patrimônio | Intermediário |
CONSUMO_TOTAL | Consumir o principal | Zerar o patrimônio exatamente na data da expectativa de vida | Menor (mais arrojado) |
Por Que Três Modos Simultâneos?
O motor poderia calcular um modo de cada vez — mas isso obrigaria três chamadas de API para mostrar as três curvas. A decisão foi calcular os três em uma única chamada porque:
- Os dados de entrada são os mesmos para os três modos.
- Boa parte do cálculo é compartilhada (projeção de ativos, amortização de passivos).
- O frontend pode fazer toggle entre os modos sem novas chamadas — experiência instantânea.
Ponto da Curva — PontoCurva
Cada posição na curva é representada por um PontoCurva, calculado para cada ano de vida da pessoa.
| Campo | Tipo | Descrição |
|---|---|---|
ano | Integer | Ano calendário |
idade | Integer | Idade da pessoa nesse ponto |
patrimonioTotal | Decimal | Soma bruta de todos os ativos |
patrimonioLiquido | Decimal | Patrimônio total menos saldo de passivos |
patrimonioNecessario | Decimal | Meta para independência naquele modo |
rendaPassivaMensal | Decimal | Renda mensal gerada pelos ativos |
custoVidaMensal | Decimal | Custo de vida projetado (com inflação) |
contribuicaoMensal | Decimal | Aporte mensal projetado (pré-aposentadoria) |
protecaoNecessaria | Decimal | Cobertura de seguro necessária |
protecaoAtiva | Decimal | Cobertura de seguro disponível atualmente |
protecaoInsuficiente | Boolean | true se proteção ativa < necessária |
independenciaAtingida | Boolean | true quando patrimônio ≥ meta |
breakdown | BreakdownPatrimonio | Composição por classe de ativo |
Breakdown do Patrimônio
O BreakdownPatrimonio decompõe o patrimônio total de cada ponto em classes:
{
"financeiro": 4560000.00,
"imoveis": 2300000.00,
"previdencia": 380000.00,
"empresarial": 0.00,
"veiculos": 1800.00
}
O Motor de Cálculo
O MotorCurvaPatrimonio é o coração da modelagem. Ele itera ano a ano, do ano atual até a idadeExpectativaVida, projetando cada ativo e passivo e acumulando os resultados.
Arquitetura — Strategy Pattern
Cada classe de ativo e categoria de passivo tem um projetor dedicado, implementando uma interface comum. Isso garante que adicionar uma nova classe de ativo não exija alterar o motor principal.
Fluxo de Cálculo Ano a Ano
Cálculo de Patrimônio Necessário por Modo
Modo RENDA — Nunca tocar no principal:
patrimonioNecessario = custoVidaMensal × 12 / taxaRetornoReal
O patrimônio precisa ser grande o suficiente para que os rendimentos anuais cubram o custo de vida. É o modo mais conservador.
Modo CONSUMO_TOTAL — Consumir tudo:
patrimonioNecessario = PV(custoVidaMensal × 12, anos_restantes, taxaRetornoReal)
Valor presente de uma série de pagamentos anuais que zera o patrimônio na data da expectativa de vida. Modo mais arrojado.
Modo CONSUMO_PARCIAL — Preservar uma fatia:
patrimonioNecessario = PV(parte_consumida) + percentualPreservar × patrimonioHoje_inflacionado
Hibrido: a pessoa consome parte do principal mas deixa um percentual configurável como herança ou reserva. Modo intermediário.
Proteção ao Longo da Vida
A proteção (seguros) é tratada de forma separada dos demais ativos. Um ativo da classe PROTECAO não soma ao patrimônio — ele rastreia cobertura disponível.
Por que separar? Um seguro de vida de R$ 2 milhões não é "riqueza" no sentido patrimonial. É uma proteção contingencial: só tem valor se o sinistro ocorrer. Incluí-lo no patrimônio criaria uma distorção grave nas projeções.
Cálculo da Proteção Necessária
Em cada ponto da curva:
protecaoNecessaria = MAX(0, patrimonioNecessario - patrimonioLiquido) + saldoTotalPassivos
Interpretação: se o patrimônio atual está abaixo da meta, a diferença precisaria ser coberta por um seguro para que a família mantivesse o padrão de vida caso a pessoa falecesse hoje. O saldo de passivos é somado porque as dívidas também precisam ser quitadas.
Resultado da Curva
O ResultadoCurvaPatrimonio retornado pelo motor contém:
| Campo | Tipo | Descrição |
|---|---|---|
curvaRenda | PontoCurva[] | Trajetória no modo RENDA |
curvaConsumoTotal | PontoCurva[] | Trajetória no modo CONSUMO_TOTAL |
curvaConsumoParcial | PontoCurva[] | Trajetória no modo CONSUMO_PARCIAL |
meta | MetaIndependenciaFinanceira | Metas consolidadas dos três modos |
MetaIndependenciaFinanceira
| Campo | Tipo | Descrição |
|---|---|---|
patrimonioNecessarioRenda | Decimal | Meta no modo RENDA |
patrimonioNecessarioConsumoTotal | Decimal | Meta no modo CONSUMO_TOTAL |
patrimonioNecessarioConsumoParcial | Decimal | Meta no modo CONSUMO_PARCIAL |
dataProjetadaRenda | String | Data prevista para atingir IF (RENDA) |
dataProjetadaConsumoTotal | String | Data prevista para atingir IF (CONSUMO_TOTAL) |
dataProjetadaConsumoParcial | String | Data prevista para atingir IF (CONSUMO_PARCIAL) |
idadeIndependenciaRenda | Integer | Idade na data projetada (RENDA) |
idadeIndependenciaConsumoTotal | Integer | Idade na data projetada (CONSUMO_TOTAL) |
idadeIndependenciaConsumoParcial | Integer | Idade na data projetada (CONSUMO_PARCIAL) |
Exemplo Completo — Caso Fictício
Perfil: Ana, 38 anos, quer se aposentar aos 65 e tem expectativa de vida de 90 anos.
Patrimônio atual: R$ 1.500.000
- Casa própria: R$ 800.000 (valorização 4% a.a., moradia principal)
- Carro: R$ 100.000 (depreciação 15% a.a.)
- Investimentos: R$ 600.000 (rendimento 4% a.a. real, aporte R$ 5.000/mês até 65 anos)
Parâmetros:
- Custo de vida na aposentadoria: R$ 32.000/mês
- Inflação projetada: 2% a.a.
Como o motor processa:
Pré-aposentadoria (38 → 64 anos):
Cada ano:
financeiro = financeiro × 1.04 + (aporte × 12)
imovel = imovel × 1.04
veiculo = veiculo × 0.85
contribuicao = 5.000/mês (aporte mensal)
custo de vida = coberto pelo salário, não sai dos ativos
Pós-aposentadoria (65 → 90 anos):
Cada ano:
financeiro = MAX(0, financeiro × 1.04 - retirada_anual)
retirada_anual = 32.000 × 12 × 1.02^(anos_desde_aposentadoria)
imovel continua valorizando (mas é ilíquido — moradia)
veiculo ≈ zero (depreciado)
Resultado projetado:
| Evento | Idade | Patrimônio Financeiro |
|---|---|---|
| Hoje | 38 | R$ 600.000 |
| Aposentadoria | 65 | R$ 4.560.000 |
| Início da retirada | 65 | R$ 384.000/ano |
| Retorno anual (4%) | 65 | R$ 182.000/ano |
| Déficit anual | 65 | R$ 202.000/ano |
| Esgotamento | ~87 | R$ 0 |
Com 4% de retorno real, os investimentos de Ana se esgotam aos ~87 anos — 3 anos antes da expectativa de vida de 90. O gráfico deixa isso visível imediatamente. A solução pode ser aumentar o aporte mensal (de R$ 5.000 para R$ 7.000) ou aceitar um retorno maior com mais risco.
A taxa de retorno é o principal alavancador da independência financeira. No modo RENDA, com 6% de retorno real, o patrimônio financeiro na aposentadoria já sustenta R$ 32.000/mês indefinidamente (6% × R$ 6,5M = R$ 390.000/ano > R$ 384.000/ano de gasto). A diferença entre 4% e 6% de retorno real pode significar 10 anos de diferença na data de IF.
Eventos Planejados
O EventoPatrimonio permite modelar eventos futuros que alterarão o patrimônio:
| Tipo | Descrição | Efeito no Motor |
|---|---|---|
COMPRA_ATIVO | Aquisição de novo bem | Adiciona ativo ao patrimônio na data |
VENDA_ATIVO | Alienação de um bem | Remove ativo do patrimônio na data |
APORTE_EXTRA | Aporte pontual | Soma ao financeiro na data |
MUDANCA_CONTRIBUICAO | Mudança no aporte mensal | Substitui contribuicaoMensalAtual a partir da data |
MUDANCA_ESTILO_VIDA | Mudança no custo de vida | Substitui custoEstiloVidaMensal a partir da data |
INICIO_RENDA_PASSIVA | Início de renda recorrente | Adiciona renda mensal ao fluxo |
QUITACAO_ANTECIPADA | Quitação de passivo | Remove passivo e libera caixa mensal |
HERANCA | Recebimento de herança | Soma ao financeiro na data |
Exemplo:
{
"tipo": "APORTE_EXTRA",
"dataPrevista": "2030-06-01",
"valor": 200000.00,
"descricao": "Venda do carro e reinvestimento"
}
Endpoints da API
CalcularCurvaPatrimonio
Endpoint principal de cálculo. Recebe ParametrosCalculo com os IDs dos ativos/passivos, busca os dados no MongoDB, roda o motor e retorna o resultado.
POST /api/CalcularCurvaPatrimonio
Body: ParametrosCalculo
Response: ResultadoCurvaPatrimonio
O ParametrosCalculo serve tanto como payload do endpoint quanto como objeto armazenado dentro do Planejamento. Essa reutilização é intencional: evita dois modelos quase idênticos e garante que um planejamento salvo pode ser re-executado enviando planejamento.parametros diretamente para o endpoint.
Endpoints de Gestão de Planejamentos
| Endpoint | Método | Descrição |
|---|---|---|
NovoPlanejamento | POST | Cria um planejamento (persiste parâmetros) |
ListarPlanejamentosPessoa | GET | Lista planejamentos de uma pessoa |
AtualizarPlanejamento | PUT | Atualiza parâmetros de um planejamento |
RemoverPlanejamento | DELETE | Remove um planejamento |
Visualização — CurvaPatrimonioComponent
O componente Angular responsável por exibir a curva é o CurvaPatrimonioComponent, localizado em apps/rica/src/app/components/curva-patrimonio/.
O Que é Exibido
Gráfico principal (Chart.js):
- Linha azul — Liquidez dos ativos: evolução dos ativos financeiros líquidos ao longo do tempo
- Linha laranja tracejada — Gasto passivo anual: R$ 0 enquanto trabalha (salário cobre), R$ 32.000 × 12 após a aposentadoria (cresce com inflação)
- Linha vertical cinza — Aposentadoria: marcação visual do ponto de transição aos 65 anos
Cards de ativos (estilo conquistas):
- Um card por ativo, mostrando valor atual, taxa, participação no patrimônio total
- Slider interativo que redesenha o gráfico em tempo real
Decisão: Cálculo no Frontend vs. Backend
Para o gráfico interativo com sliders, o cálculo é feito no próprio componente TypeScript — não há chamada ao backend a cada movimento do slider. A lógica reproduz uma versão simplificada do motor C# diretamente em TypeScript.
Por quê?
- Latência zero na interação (sem round-trip de rede)
- O motor C# é stateless e puro — fácil de replicar em TS para o caso simplificado
- Quando o planejador quiser um cálculo preciso com todos os passivos reais, usa o endpoint
CalcularCurvaPatrimonio
Diagrama Completo de Relacionamentos
Resumo das Decisões de Arquitetura
| Decisão | Alternativa Considerada | Justificativa |
|---|---|---|
| Curva calculada sob demanda, nunca persistida | Persistir a curva no MongoDB | Interatividade, sem desatualização, custo de storage, motor puro |
| Três modos calculados em uma chamada | Uma chamada por modo | Dados compartilhados, toggle no frontend sem latência |
| Ativos referenciados por ID no planejamento | Copiar snapshot dos ativos | Atualização automática, sem inconsistência |
| ParametrosCalculo reutilizado como payload | DTO separado para o endpoint | Elimina duplicação, planejamento re-executável diretamente |
| Proteção separada do patrimônio | Somar cobertura ao patrimônio total | Seguro não é riqueza; é proteção contingencial |
| Strategy pattern para projetores | Switch/case no motor | Extensibilidade; adicionar nova classe não muda o motor |
| Motor stateless (função pura) | Motor com estado/banco | Testabilidade, auditabilidade, sem efeitos colaterais |
| dataNascimento vem da Pessoa | Duplicar em Planejamento | Fonte única da verdade; evita divergência |
Veja Também
- Ativo Patrimonial — documentação detalhada de cada classe de ativo
- Passivo Patrimonial — categorias e campos de passivos
- Pessoa — onde vive a data de nascimento usada pelo motor