v0.11.0 — auditoria do sistema
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 osDELETEabrem uma, então o religar dofinallynã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).
Peculium.cmd a partir do código-fonte.