Repository navigation
v1.3.5
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
Unreleased
diagnosis-panel Painel "Diagnóstico" substitui o placeholder "Resumo Geral" com classificação qualitativa por eixos independentes e novos classificadores de liquidez e institucional
eficiencia-do-movimento Painel "Eficiência do Movimento" com gauge horizontal, card qualitativo e timeline de barras para os últimos 15 pregões
llm-chat-rag Recuperação vetorial como evolução da llm-chat, com VectorStore SQLite, embeddings e indexação de documentos consultada pela aba "Chat AI"
Added
- VectorStore em SQLite puro, com busca top-k por cosine similarity e filtro opcional por ticker.
- Módulo de embeddings com dois provedores:
fastembed(local, default) e liteLLM (API). - Porta
DocumentoIndexavel/DocumentSourcee fontes concretas, com extração de texto (HTML e PDF). - Pipeline de indexação (
IndexarDocumentosUseCase) e consulta RAG (ConsultarDocumentosUseCase) consumindo a portaLLMPortdallm-core. - Integração da consulta RAG à aba "Chat AI" como fonte adicional de contexto, pelo ponto de extensão da
llm-chat. - Chunker de texto em Python puro.
- Configuração de embedding persistida em
llm.embeddinge presets de provedores de embedding. - Dependência opcional
fastembedno grupo[llm]. - CLI
--index <TICKER>com--data-inicioe--data-fim.
participation-negociacoes Painel "Participação nas Negociações" renomeado, com gauge de concentração, card informativo e timeline AFT
1.3.5 — 2026-10-09
chat-navegacao-granular Granularidade por documento e foco de referência na árvore do Chat AI, com índices em /documentos e /guidance, playbook de intenção e manifesto com abas/sub-abas
Added
/documentos/<ticker>passa a expor/documentos/<ticker>/indice(uma linha por documento, mais recente primeiro) e um nó interno por documento (/documentos/<ticker>/<chave>) com folhascurto,longoetextodo próprio documento, além de metadados estruturados e pesquisáveis (categoria, período, nome)./guidance/<ticker>passa a expor/guidance/<ticker>/indice, agregando os guidances por mês com o rótulo do Relatório Gerencial associado.- O bloco de resultado da navegação passa a devolver um
foco(último caminho obtido) para resolver referências como "nesse RG"/"esse último". - O protocolo/manifesto ganham um playbook de intenção→ramo e a regra de preferir o
textointegral do documento-alvo a resumos agregados quando a pergunta pede detalhe.
Changed
- O manifesto passa a anunciar
/flowscope/abas/<aba>e a lista de sub-abas, e deixa de incluir metadados longos (teto por metadado).
chat-navegacao-robusta Ramos internos vazios omitidos da árvore do Chat AI, manifesto anunciando apenas ramos existentes e fallback para busca determinística por regex
Changed
- Ramos internos sem itens são omitidos da árvore de conhecimento em vez de existirem como folhas vazias:
/flowscope/abas,/flowscope/indicadores,/fundamentos/tickers,/fundamentos/campose/fundamentos/valores. - O mapa canônico e a descrição do manifesto passam a anunciar apenas os ramos existentes na árvore corrente (deixa de citar caminhos inexistentes).
- O protocolo/manifesto e o prompt de sistema passam a orientar a LLM a usar a busca determinística
buscar(caminho, regex, em=[...])sempre quebuscar_semanticoresponderindice_indisponivel, e a preferir o nóindice/buscara listar grupos grandes inteiros.
corrigir-assinatura-vinculo-noticias Corrige o TypeError na resolução de documento vinculado de notícias, alinhando a chamada do painel à assinatura de baixar_conteudo_vinculado
Added
- Testes que exercitam a assinatura real do resolvedor usado em produção (
baixar_conteudo_vinculado), impedindo que dublês com assinatura divergente escondam a regressão.
Fixed
- Alinhamento do contrato de chamada do resolvedor de documento vinculado injetado no
NoticiasPanelcom a assinatura debaixar_conteudo_vinculado, de modo que a senha opcional seja aceita semTypeError. - Uma falha do resolvedor (assinatura, rede ou formato) passa a degradar para o corpo original, sem propagar exceção para a pré-visualização nem para o lote.
documentos-arvore-ramos Árvore de documentos com ramos Guidance e Direitos e obrigações, navegação de guidance no chat e remontagem após o lote de resumos
Added
- Ramo Guidance (somente FII, com base nos documentos
Relatorio): sub-ramos ano e mês, com uma folha por guidance que possui valor em cache; clicar exibe o texto do guidance e o rótulo curado do RG, e duplo-clique salta para a folha do RG na ramificação Documentos. - Ramo Direitos e obrigações com os sub-ramos "Direitos" (ativos) e "Obrigações" (passivos), vazios por enquanto, preenchidos por changes futuras.
- Ao entrar na sub-aba pela primeira vez na sessão (ou ao mudar o ticker), a árvore fica expandida apenas até o primeiro nível.
- A árvore de conhecimento da aba "Chat AI" ganha navegação para o guidance e para "Direitos e obrigações", com os caminhos canônicos refletidos no manifesto e na assinatura de estado.
- Após "Resumir pendentes", a árvore é remontada (sub-abas "Documentos" e "Notícias"), preservando o arquivo selecionado.
Changed
- A árvore da sub-aba "Documentos" passa a ter, sob o nome do ticker, três ramos: Guidance, Documentos e Direitos e obrigações.
documentos-conteudo-completo Resumos de documentos cortados em fronteira de frase/palavra, regeneração de resumos truncados e leitura paginada do texto integral
Added
- Resumos já em cache que terminam no meio da palavra passam a ser regenerados pelo lote "Resumir pendentes", sem exigir limpeza manual.
- A operação
obterpassa a aceitaroffset/limite(leitura paginada) para o texto integral, e o manifesto/playbook orientam a leitura em partes quando o texto for longo.
Changed
- O resumo de documento passa a cortar em fronteira de frase/palavra (nunca no meio da palavra) e o prompt pede os resumos por frases/parágrafos, mantendo os tetos como salvaguarda.
guidance-preview-rg Guidance do próprio Relatório Gerencial exibido na pré-visualização de documentos e avaliação de RGs já resumidos pendentes de guidance no lote
Added
- A pré-visualização de um RG com guidance passa a exibir o texto do guidance entre o resumo e o separador
---, com uma linha em branco antes e depois. - O botão "Resumir pendentes" passa a ser habilitado, com a IA ativa, também quando houver Relatórios Gerenciais já resumidos cuja avaliação de guidance esteja pendente, mesmo sem documento sem
long_summary. - O lote passa a avaliar o guidance desses RGs pendentes, pulando a geração de resumo dos que já o possuem e reaproveitando resumos e texto em cache.
Changed
- O texto exibido é o guidance do RG específico (entrada do ledger daquele documento), formatado exatamente como na coluna
Informações adicionaisda sub-aba "Fundamentos". - A formatação do item de guidance é extraída para uma função compartilhada, reusada pela coluna e pela pré-visualização.
- A verificação de pendências de guidance consulta o ledger fora da thread do Tk, no mesmo worker que lê o catálogo.
logging-falhas-comunicacao Falhas de comunicação toleradas registradas em uma linha de WARNING sem traceback
Changed
- Convenção: em falha de comunicação tolerada, registrar uma linha de
WARNINGcom o tipo e a mensagem da exceção, sem traceback; exceções não relacionadas a comunicação continuam com traceback. - A convenção é implementada de forma central no formatter de logging da aplicação, cobrindo todos os pontos de aquisição sem alterar os 60+ call sites.
- Os registros em memória (
record.exc_info) são preservados para testes e depuração; apenas a renderização passa a omitir o traceback de comunicação. - O tratamento explícito já existente em
noticias_vinculo.pyé mantido.
testes-ui-headless Costuras testáveis na apresentação e conversão de testes gated para headless, reduzindo o orçamento de testes de UI
Added
- Costuras testáveis na apresentação para verificar sem
DISPLAYa lógica hoje presa ao widget: construção deFigure/Axesseparada do invólucro Tk, decisões de mixins expostas como valores/funções puras e modelo de formulário separado dosStringVarno diálogo de configuração de LLM.
Changed
- As declarações gated correspondentes passam a rodar headless, preservando a asserção de comportamento observável (paridade de textos, números e ordem).
- A lógica pura hoje coberta sob gate de display migra para
tests/test_application/tests/test_presentationheadless. - O baseline
tests/architecture/ui_test_budget.txté baixado após cada incremento (o ratchet exige atualização explícita). - Fica sob teste de UI apenas o que só existe com Tk: layout/geometria, eventos de ponteiro,
Treeview/notebooks reais,ReadonlyText/clipboard, overlay/modal e o binding fio-a-fio do estado aos widgets.
tooltip-robusto Tooltips deixam de ficar presos na tela e cobertura de dicas estendida a todos os botões da aplicação
Added
- Dicas descritivas passam a cobrir todos os botões da aplicação que ainda não as possuíam (barra superior, barra de status, painéis de Notícias/Documentos, chat, diálogo de configuração de I.A. e aba Sobre), reutilizando a classe
ToolTipendurecida. - Testes unitários do ciclo de vida do
ToolTipcomprovam que uma segunda exibição sem_leavenão deixa janela órfã.
Fixed
widgets/tooltip.pypassa a garantir que nunca haja mais de uma janela de tooltip viva por instância: cancela oafterpendente no_enter, destrói a janela existente no_show, zera_after_idquando_showdispara e protegeafter_cancelcontraTclError.
See CHANGELOG Archive for older releases.