Nasceu de uma dor real: trabalhando no estoque de uma oficina mecânica, o mesmo produto físico aparecia cadastrado de três formas diferentes no sistema (ex: 'ELEMENTO FILTRANTE H100' e 'FILTRO DE OLEO H100'). O projeto reúne duas ferramentas — verificação de inventário e padronização de nomenclatura — construídas de forma genérica o suficiente para servir qualquer catálogo, não só peças automotivas.
Papel no projeto
Desenvolvedor único — reescrita em TypeScript/Next.js de um app anterior em Python/Streamlit.
O problema
- •Mesmo produto cadastrado com nomes diferentes, gerando duplicidade e estoque contado errado
- •Conferência manual do inventário físico contra o sistema, sujeita a erro
- •Vocabulário técnico do setor (marca + viscosidade + certificação) difícil de padronizar 'no olho'
Objetivos
- •Comparar a base cadastrada contra a contagem física com pipeline de matching confiável
- •Padronizar nomenclatura via dicionário de equivalências configurável pelo usuário
- •Exportar relatórios formatados prontos para uso
- •Manter tudo funcionando sem backend, com backup/restore em JSON
Solução
Arquitetura
Next.js 15 (App Router) rodando inteiramente no navegador — leitura de planilha (SheetJS/PapaParse), matching e persistência (localStorage), sem servidor. Pipeline de matching em 5 etapas: exato → substring alfanumérico → partial ratio → substring espaçado → fuzzy (fastest-levenshtein) como último recurso.
Experiência de uso
Cada item mostra até 5 candidatos encontrados (não só o melhor), com confirmação manual direto na tela. Exportação em Excel com abas de resultado completo, pendências e resumo, cores por status e auto-filtro.
Decisões técnicas
- •Fuzzy matching como última etapa, não a única: match exato/substring é mais confiável e mais rápido
- •Camadas de correção no fuzzy (viscosidade como quase-ID do produto, stopwords técnicas ignoradas) pra reduzir falso positivo
- •Dicionário de equivalências configurável pelo usuário em vez de regras fixas — o que torna o motor genérico pra qualquer setor
- •Sem banco de dados: localStorage + backup/restore em JSON mantém o projeto sem custo de infraestrutura
Desafios
- •Desenhar um pipeline de matching em etapas que equilibrasse velocidade e precisão sem virar uma caixa-preta
- •Auditar candidatos (não só mostrar o melhor score) para permitir correção manual confiável
- •Manter o motor de matching genérico, sem nada 'hardcoded' de óleo automotivo no código