app/finance/models.py:TituloeTipoTitulo, com validação de dados (incluitaxa_cupom_semestral, obrigatória só para títulos com cupom).app/finance/calendario.py: contagem de dias úteis com feriados nacionais.app/finance/returns.py: valor futuro, rentabilidade nominal/real, VPL e TIR.app/finance/tax.py: IR regressivo padrão de renda fixa.
app/finance/fluxo_caixa.py: gera o fluxo de caixa contratual (cupons + principal) para títulos com cupom semestral, resolvendo um valor de face implícito a partir da taxa contratada e do valor investido.app/finance/marcacao_mercado.py: preço estimado sob variação de taxa de mercado (-1pp a +1pp), duration de Macaulay, duration modificada, e comparação entre impacto real (reprecificação completa) e impacto estimado pela duration (a diferença é o efeito de convexidade). Cobre os 5 tipos de título, incluindo os dois com cupom semestral.
tests/: 60 testes no total.
- Capitalização composta em dias úteis / 252, mesma convenção do
Tesouro Direto. Feriados considerados são os nacionais (lib
holidays, BR); o calendário ANBIMA oficial pode divergir em feriados locais (ex: aniversário de São Paulo). IR continua usando dias corridos, que é a base correta pela legislação. - Para títulos IPCA+ sem cupom, a inflação acumulada do período inteiro
é sempre informada explicitamente por quem chama a função. Para
títulos IPCA+ COM cupom semestral, a inflação deve ser informada por
data de pagamento (
inflacao_acumulada_por_data), já que cada cupom é corrigido pela inflação acumulada até aquela data específica — o sistema nunca projeta essas inflações sozinho. - IR usa a tabela regressiva padrão (22,5% / 20% / 17,5% / 15%), sem IOF ainda (fica para quando tratarmos resgate antecipado).
- Rentabilidade real usa a equação de Fisher, não a subtração simples.
- O valor de face de títulos com cupom é resolvido implicitamente (não é um input separado): é o valor que faz o VP dos cupons + principal, descontado pela taxa contratada, reproduzir o valor investido.
- Datas de cupom são geradas de 6 em 6 meses contando retroativamente do vencimento — aproximação de calendário, não usa as datas exatas de emissão do Tesouro Nacional (que seguem um calendário próprio de janeiro/julho).
- Marcação a mercado trata os fluxos futuros como fixos em termos REAIS, definidos na compra — exato para Prefixado, simplificação já assumida para IPCA+ e, principalmente, para Selic (título pós-fixado sujeito a ágio/deságio de mercado; a duration calculada para Selic aqui é mais teórica que prática, já que seu preço reage pouco a variações na taxa).
- Taxa de mercado atual é sempre parâmetro explícito, nunca projetada pelo sistema.
pip install -r requirements.txt
python -m pytest -vComparador de investimentos: tabela comparativa entre títulos + cenários (otimista / base / pessimista) com premissas alteráveis pelo usuário.