Skip to content

v0.11.0 — auditoria do sistema

Choose a tag to compare

@devtulio devtulio released this 04 Aug 18:49
· 2 commits to main since this release

Auditoria dos 17 módulos, linha a linha, com cada hipótese reproduzida rodando o código real. Saíram 25 achados, e esta versão fecha todos.

O preço à mão, que o sistema mandava digitar e não tinha onde

Clicar em qualquer linha da Carteira abre o preço unitário do papel. cotar_manual existia na API sem uma única chamada na tela, enquanto três mensagens do programa mandavam fazer exatamente isso — inclusive o aviso do Tesouro IPCA+ que entrou na versão anterior. Aquele papel tinha dois caminhos e um era porta pintada na parede.

Outros três métodos estavam órfãos do mesmo jeito e ganharam tela:

  • Eventos corporativos agora aparecem, com botão de remover. Dava para cadastrar um desdobramento e nunca mais vê-lo.
  • Pagamento de DARF pode ser cancelado. Um valor digitado errado ficava lá para sempre.

Dois números saíam errados em silêncio

  • "Apagar todos os dados" deixava o cofre sem integridade referencial. PRAGMA foreign_keys é no-op dentro de transação e os DELETE abrem uma, então o religar do finally não religava nada: até reabrir o programa, lançamento apontando para ativo inexistente entrava calado.
  • Série do Banco Central com buraco no meio dava curva menor que a verdade. Cobertura se lê de min/max, que não enxergam vão, e contar linhas só é contar dias úteis se a série for contígua. Com um mês faltando eram 65 dias úteis onde havia 85, e o fator de um CDB caía um ponto percentual.

Concorrência

O pywebview roda cada chamada do JavaScript numa thread nova e a conexão do cofre é compartilhada: o commit() de uma gravava a importação pela metade de outra. Passa tudo por uma trava só.

Apuração

  • DARF pago parcialmente cobrava duas vezes os encargos já pagos.
  • IRRF excedente atravessava o ano-calendário. Ele abate o imposto dos meses seguintes do mesmo ano (IN RFB 1585, art. 63 §5); o que sobra em 31/12 vai para o ajuste anual. O prejuízo, esse sim, atravessa anos — e continua atravessando.
  • Evento corporativo repetido era aplicado duas vezes: dois desdobramentos 1:2 idênticos faziam 100 ações virarem 400.
  • A tela de impostos mostrava o prejuízo de hoje em qualquer ano.
  • Corrigir um lançamento perdia o vínculo com a nota de corretagem.
  • O relatório de custos e o painel contavam lançamento estornado.

Arestas

Classe de ativo entrava sem validação (CRIPTO era aceito — mesma superfície do defeito da v0.9.3); prévia de importação pendente podia ser substituída; cofre truncado devolvia erro cru; o cabeçalho, que não é autenticado, ganhou teto de memória; a gravação faz fsync; mock.js saiu do executável, que ganhou recurso de versão do Windows.

Verificação

32 testes de unidade e 4 de tela novos, todos verificados por mutação — neutralizar a correção e ver o teste morder. 437 unitários e 54 E2E, 91% de cobertura.

Duas coisas ficaram de fora, de propósito e comentadas no código: CHECK de classe no esquema (só alcançaria cofre novo, e dois esquemas em circulação são piores que nenhum) e autenticar o cabeçalho do cofre como AAD (mudaria o formato do arquivo, e o ganho não paga o risco de migrar o arquivo que guarda tudo).


⚠️ 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.