**Agrupamento de faltantes contíguos** (`detector_sequencia.rs`) - Nova função pública `agrupar_contiguos(&[u64]) -> Vec<(u64, u64)>` com 4 testes - Na tela de resultado, faltantes agora aparecem como `• 100–104 (5 notas)` em vez de 5 linhas separadas **Estatísticas de completude** (`resultado.rs`) - Cada série exibe: `Série 001 — 10 faltante(s) — 990/1000 notas (99.0% completo):` **Copiar para clipboard** (`resultado.rs`) - Botão `📋 Copiar` ao lado de cada série nos faltantes — copia todos os números (não só a página atual) - Botão `📋 Copiar` nas duplicatas — copia no formato `1234 (3x), 5678 (2x)` Total: **42 → 46 testes**, todos passando.
7.3 KiB
Backlog de Features — Comparador de Notas
Features avaliadas em 03/03/2026. Organizadas por categoria e esforço estimado.
Alta Prioridade
F-01 — Exportar Resultado em CSV.
Problema: O único formato de exportação é PDF. Para processar os resultados em ferramentas externas (Excel, Power BI, sistemas ERP), o usuário precisa redigitar dados do PDF.
Solução: Botão "Exportar CSV" na tela de resultado, gerando dois arquivos (ou um com duas seções):
faltantes.csv:serie,documento_tipo,numeroduplicatas.csv:serie,documento_tipo,numero,ocorrencias
Escopo técnico:
use caseexportar_csv(resultado: &ResultadoAnalise, caminho: &Path)- Trait
CsvExporteranáloga àPdfGenerator(opcional, para testabilidade) - Botão na barra de ações da tela
resultado.rs - Dependência
csvjá está noCargo.toml
Esforço estimado: Médio (2–3h) Impacto: Alto — elimina retrabalho manual
Observações: Se não for muito custoso para implementar, pode ser uma boa ideia adicionar uma essa função.
F-02 — Validação de Tamanho de Arquivo (PRD RF01.3) (Implementar)
Problema: O PRD especifica limite de 50 MB, mas não há validação implementada. Arquivos muito grandes podem travar a UI durante a leitura.
Solução: Verificar fs::metadata(caminho)?.len() antes de iniciar importação. Exibir modal de erro se exceder o limite.
Escopo técnico:
- Adicionar checagem em
importar_arquivo.rsantes de chamar CSV/XLSX reader - Constante
LIMITE_ARQUIVO_BYTES: u64 = 50 * 1024 * 1024
Esforço estimado: Baixo (30min) Impacto: Médio — evita travamentos inesperados
Média Prioridade
F-03 — Preview de Colunas Antes da Análise (Isso já existe?)
Problema: Erros de mapeamento de colunas (índice errado, encoding incorreto) só são descobertos depois da importação, que pode falhar silenciosamente com "0 notas válidas".
Solução: Na tela de configuração de colunas, exibir uma tabela das primeiras 5 linhas mostrando como os campos serão interpretados, com highlight em células que falhariam o parse.
Escopo técnico:
- Função
pre_visualizar(caminho, layout, n_linhas: usize) -> Vec<LinhaPreview> LinhaPreview:{ numero: Result<u64>, serie: Result<String>, valor: Result<Decimal>, ... }- Widget de tabela em
configuracao_colunas.rs - Atualizar preview ao mudar qualquer campo de configuração (via
changed())
Esforço estimado: Alto (4–6h) Impacto: Alto — reduz drasticamente "por que não importou nada?"
Observações: Verificar se já existe no codigo, pois na tela de configuração do Layout ele exibe as 5 primeiras linhas do arquivo.
F-04 — Busca por Número na Tela de Resultado (Util)
Problema: Com listas longas, o usuário precisa navegar páginas para verificar se um número específico está faltante ou duplicado.
Solução: Campo de busca no topo da tela de resultado. Ao digitar 1234, destaca se a nota:
- está faltante (aparece na lista de faltantes)
- está duplicada (aparece na lista de duplicatas)
- está presente (está nas notas importadas)
- não encontrada (fora do intervalo conhecido)
Escopo técnico:
- Campo
filtro_numero: StringnoApp - Busca em
resultado.faltantes_por_serieeresultado.duplicadas_por_serie - Para "presente": busca em
app.notas_importadas(já mantido em memória) - Banner de resultado no topo da tela
Esforço estimado: Médio (2–3h) Impacto: Médio — uso diário em auditorias pontuais
F-05 — Recarregar Arquivo Sem Reconfigurar (Sim bem necessario)
Problema: Quando o usuário corrige o arquivo fonte e quer re-verificar, precisa navegar todo o fluxo novamente (selecionar arquivo → configurar colunas → analisar).
Solução: Botão "🔄 Reanalisar Arquivo" na tela de resultado que reimporta o mesmo caminho com o mesmo layout atual, sem nenhuma interação adicional.
Escopo técnico:
- Persistir
caminho_arquivo_atual: Option<PathBuf>noApp(já existe parcialmente comonome_arquivo) - Reaproveitar o fluxo de
executar_importacao()com os parâmetros atuais - Botão na barra de ações da tela
resultado.rs
Esforço estimado: Baixo (1h) Impacto: Médio — elimina atrito no ciclo corrigir → verificar
F-06 — Auto-detecção de Delimitador CSV (Util)
Problema: O usuário precisa saber antecipadamente qual delimitador o arquivo usa (,, ;, \t). Arquivos gerados por diferentes sistemas variam.
Solução: Ao selecionar o arquivo CSV, amostrar as primeiras 5 linhas e contar ocorrências de cada delimitador candidato. Sugerir o mais frequente como padrão, mantendo a ComboBox editável.
Escopo técnico:
- Função
detectar_delimitador(primeiras_linhas: &[&str]) -> char - Chamar na transição para
ConfigurandoColunasquandoTipoArquivo::Csv - Pré-selecionar na ComboBox sem impedir mudança manual
Esforço estimado: Médio (2h) Impacto: Baixo-Médio — reduz um passo de configuração na maioria dos casos
Baixa Prioridade
F-07 — Auto-detecção de Encoding CSV (Util)
Problema: Arquivos gerados por sistemas legados brasileiros frequentemente usam windows-1252, mas o padrão selecionado é utf-8. O usuário descobre o problema somente ao ver caracteres estranhos nos dados.
Solução: Tentar ler as primeiras linhas em utf-8; se houver erro de decodificação, sugerir automaticamente windows-1252 com aviso visual na tela de configuração.
Escopo técnico:
- Função
detectar_encoding(caminho: &Path) -> String - Usar
encoding_rs(já dependência) para tentar decode e verificarhad_errors - Aviso na tela de configuração: "Encoding detectado: windows-1252"
Esforço estimado: Médio (2h) Impacto: Baixo — problema raro, mas confuso quando ocorre
F-09 — Paginação Automática de Faltantes no PDF (Util)
Problema: PDFs com muitos faltantes (ex: 5.000 números) geram um único bloco de texto muito longo, difícil de ler e imprimir.
Solução: No pdf_generator.rs, ao adicionar a lista de faltantes, agrupar em intervalos contíguos (usando a função agrupar_contiguos já implementada) e formatar como 100–104 (5 notas). Reduz drasticamente o tamanho do PDF e melhora legibilidade.
Escopo técnico:
- Importar
agrupar_contiguosempdf_generator.rs - Substituir o
join(", ")atual pelo formato de intervalos - Sem novas dependências
Esforço estimado: Baixo (30min) Impacto: Baixo-Médio — melhora legibilidade de PDFs com muitos faltantes
Nota: Esta feature é especialmente fácil porque a lógica de agrupamento já existe — é só aplicar no PDF.
Resumo
| ID | Feature | Esforço | Impacto | Prioridade |
|---|---|---|---|---|
| F-01 | Exportar resultado em CSV | Médio | Alto | Alta |
| F-02 | Validação de tamanho de arquivo | Baixo | Médio | Alta |
| F-03 | Preview de colunas antes da análise | Alto | Alto | Média |
| F-04 | Busca por número no resultado | Médio | Médio | Média |
| F-06 | Recarregar arquivo sem reconfigurar | Baixo | Médio | Média |
| F-07 | Auto-detecção de delimitador CSV | Médio | Baixo-Médio | Média |
| F-08 | Auto-detecção de encoding CSV | Médio | Baixo | Baixa |
| F-09 | Agrupamento de faltantes no PDF | Baixo | Baixo-Médio | Baixa |