Skip to content

v0.11.1 — a curva de renda fixa nunca funcionou

Latest

Choose a tag to compare

@devtulio devtulio released this 04 Aug 21:30
· 1 commit to main since this release

Segunda rodada da auditoria, agora contra a API e os arquivos de verdade. A primeira foi estática e de unidade, e passou por cima destes três: nenhum deles existe fora do encontro com o mundo real.

A curva de renda fixa nunca funcionou

Dois defeitos empilhados, e o segundo só aparecia depois de corrigir o primeiro.

A série diária do Banco Central nunca descia. baixar() pedia a série inteira de uma vez, e a API do SGS recusa pedido longo de série diária. Medido contra a API:

Pedido Resultado
Sem intervalo (o que o programa fazia) 406 Not Acceptable
11 anos 406 Not Acceptable
10 anos estoura o tempo de leitura
2 anos OK, 502 registros

CDI e Selic diária falhavam em silêncio, e a renda fixa dizia "ligue a rede em Configurações" com a rede ligada. Agora vai em fatias de 5 anos, emendadas — vão entre elas seria o defeito de série furada de volta.

E não adiantaria baixar. atualizar_curvas pedia sempre a curva de hoje, e o Banco Central publica o CDI com um dia útil de atraso: falharia todo dia, dizendo "atualize as séries" logo depois de atualizá-las. Agora calcula até onde a série alcança e grava o preço unitário na data em que ele vale — adiantá-lo seria inventar um dia de rendimento.

E a tabela mostrava o PU certo e o aviso de série faltando na mesma linha, porque posicao() não aplicava o mesmo recorte. Aviso que grita sem motivo é o que faz o usuário parar de ler avisos.

Transferência da corretora para ela mesma

Num acervo real a B3 traz débito e crédito na mesma corretora: troca de conta ou de custódia dentro dela, que não move nada entre instituições. O par virava um lançamento de transferência de A para A, com dois estragos:

  • a porta manual recusa exatamente issolancar exige instituições diferentes. O importador gravava o que o razão proíbe, porque gravar() faz INSERT direto e nenhuma validação do razão alcança dado importado;
  • o razão debitava antes de creditar e gritava "saldo negativo" numa posição que fecha em zero. Eram três alarmes graves no painel, todos falsos.

A comparação é pelo nome normalizado: no arquivo real as pontas vinham como "TORO CTVM LTDA" e "TORO CTVM", que comparadas cruas passariam batido.

Verificado e íntegro

A mesma varredura exercitou contra dado real, e passou: cotação online do Yahoo, consulta de CNPJ na ReceitaWS, os 10 relatórios em HTML e CSV (sem estouro, colunas alinhadas), as 9 telas da API, os juros de mora com a Selic mensal de verdade, e o leitor de posição contra seis consolidados anuais (2020 a 2025), com datas, classes e valores corretos em todos.

O custo de aquisição confere pelas cinco portas que o calculam — razão, painel, carteira, relatório de posição e relatório de bens —, e o mesmo vale para valor de mercado e proventos.

8 testes novos, todos verificados por mutação. 445 unitários e 54 de tela.


⚠️ O Windows pode barrar o executável. Binário sem assinatura é bloqueado pelo Smart App Control. Use Peculium.cmd a partir do código-fonte.