167 lines
7.3 KiB
Markdown
167 lines
7.3 KiB
Markdown
# 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,numero`
|
||
- `duplicatas.csv`: `serie,documento_tipo,numero,ocorrencias`
|
||
|
||
**Escopo técnico:**
|
||
- `use case` `exportar_csv(resultado: &ResultadoAnalise, caminho: &Path)`
|
||
- Trait `CsvExporter` análoga à `PdfGenerator` (opcional, para testabilidade)
|
||
- Botão na barra de ações da tela `resultado.rs`
|
||
- Dependência `csv` já está no `Cargo.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.rs` antes 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: String` no `App`
|
||
- Busca em `resultado.faltantes_por_serie` e `resultado.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 (Implementado)
|
||
|
||
**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>` no `App` (já existe parcialmente como `nome_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 `ConfigurandoColunas` quando `TipoArquivo::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 verificar `had_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_contiguos` em `pdf_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 |
|