You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
TUI em Go para extrair dados de recibos de pesagem eletrônica da LFB Reciclagem Eletrônica e gerar JSONs estruturados — sem dependências externas além do runtime Go.
Funcionalidades
Seletor de arquivos customizado — navega o sistema de arquivos inteiramente dentro do terminal
Busca integrada — / filtra entradas do diretório atual em tempo real; Ctrl+G pré-preenche o caminho atual para navegar diretamente para qualquer caminho absoluto ou relativo
Seleção múltipla de PDFs — selecione quantos arquivos quiser antes de confirmar
Escolha do diretório de saída via modal TUI separado
Extração 100% assíncrona com status individual por arquivo em tempo real:
� Laranja — extração em andamento (spinner animado)
🟢 Verde — concluído com sucesso
🔴 Vermelho — falha (navegar até o item mostra a mensagem de erro)
JSON nomeado igual ao PDF original (ex.: recibo-28-04.pdf → recibo-28-04.json)
Visualizador dual-panel com syntax highlighting colorido, scroll e localização do arquivo no topo
Abrir diretório no Explorer / Finder / xdg-open (Ctrl+O)
Abrir arquivo diretamente no Neovim (Ctrl+N)
Formato de saída
O JSON gerado é plano (sem aninhamento), com a data do recibo e cada material como chave direta:
Tela inicial
│ Enter / O
▼
Seletor de PDFs ──── / busca por nome ──── Ctrl+G ir para caminho
│ Ctrl+S (confirmar seleção)
▼
Seletor de diretório de saída
│ Espaço / Ctrl+S
▼
Modal de extração assíncrona (status em tempo real)
│ Enter / Espaço (após concluir)
▼
Visualizador de JSONs (painel esquerdo: lista | painel direito: conteúdo)
Atalhos de teclado
Global
Atalho
Ação
Ctrl+C
Sair
Q
Sair (somente na tela do visualizador)
Seletor de arquivos (PDFs e diretório de saída)
Atalho
Ação
↑ / K
Mover cursor para cima
↓ / J
Mover cursor para baixo
Enter
Abrir pasta selecionada
Espaço
Selecionar / desselecionar PDF (modo PDF)
← / Backspace
Subir para pasta pai (ou limpar filtro de busca)
/
Ativar busca — filtra nomes no diretório atual
Ctrl+G
Ir para caminho — pré-preenche o caminho atual
Ctrl+S
Confirmar seleção / escolher pasta atual
Esc
Cancelar / fechar modal
Modo de busca (após pressionar / ou Ctrl+G)
Atalho
Ação
digitar
Filtra entradas do diretório atual que contenham o texto
Enter
Se o texto for um caminho válido, navega até ele; senão aplica filtro
Backspace
Apagar último caractere
Esc
Cancelar busca e restaurar lista completa
Dica: Com Ctrl+G, o campo já vem preenchido com o diretório atual seguido de \ (Windows) ou / (Unix). Basta continuar digitando o caminho destino e pressionar Enter.
# Windows
go build -o pdfextractor.exe ./cmd/pdfextractor
.\pdfextractor.exe
# Linux / macOS
go build -o pdfextractor ./cmd/pdfextractor
./pdfextractor
Estrutura do projeto
pdf-extractor/
├── cmd/
│ └── pdfextractor/
│ └── main.go # Entrypoint — inicia o programa bubbletea
├── internal/
│ ├── extractor/
│ │ └── extractor.go # Lógica de extração PDF → JSON
│ │ # • abre PDF com ledongthuc/pdf
│ │ # • regex para data (DD/MM/YYYY) e materiais
│ │ # • serializa JSON plano ordenado
│ └── tui/
│ ├── app.go # Modelo raiz — roteamento entre telas
│ ├── messages.go # Tipos de mensagens bubbletea (tea.Msg)
│ ├── filepicker.go # Seletor de arquivos com busca integrada
│ ├── extraction.go # Modal de progresso assíncrono com spinner
│ ├── viewer.go # Visualizador dual-panel com syntax highlight
│ └── styles/
│ └── styles.go # Paleta de cores e estilos lipgloss
├── go.mod
├── go.sum
└── README.md