ConsultaOperadoraV2 é uma aplicação Java desenvolvida para processar arquivos CSV contendo dados de CNPJs e classificar empresas por operadora de telefonia. O sistema é especializado no processamento de dados da região Nordeste do Brasil, identificando automaticamente a operadora de telefonia (CLARO, VIVO, TIM, OI, FIXO ou SEM OPERADORA) associada a cada CNPJ.
O projeto utiliza processamento paralelo para otimizar o desempenho e suporta múltiplos formatos de arquivo CSV, com detecção automática de delimitadores e validação de dados.
- 🔄 Processamento em Lote: Processa múltiplos arquivos CSV simultaneamente
- 🔍 Detecção Automática de Delimitadores: Identifica automaticamente vírgula, ponto e vírgula ou tabulação
- 📱 Classificação por Operadora: Identifica a operadora de telefonia com base nos números de telefone
- 🗑️ Deduplicação: Remove CNPJs duplicados durante o processamento
- ⚡ Processamento Paralelo: Utiliza thread pool para maior performance
- 📊 Log Detalhado: Gera log completo de processamento com métricas e estatísticas
- 📞 Suporte a Múltiplos Formatos: Aceita diferentes formatos de telefone:
(DD) NNNN-NNNNDD-NNNNNNNN
- 🎯 Filtro Regional: Processa apenas arquivos da região Nordeste (AL, BA, CE, MA, PB, PE, PI, RN, SE)
- ✅ Validação de CNPJ: Valida e filtra apenas CNPJs com 14 dígitos
- CLARO
- VIVO
- TIM
- OI
- FIXO
- SEM OPERADORA
- Java: Linguagem de programação principal
- OpenCSV: Biblioteca para leitura e escrita de arquivos CSV
- libphonenumber (Google Phone Number Library): Biblioteca para validação e identificação de operadoras de telefone
- Maven: Gerenciamento de dependências e build
- Java: JDK 8 ou superior
- Maven: 3.6 ou superior (para build e gerenciamento de dependências)
- Sistema Operacional: Windows, Linux ou macOS
Certifique-se de ter o Java e o Maven instalados:
java -version
mvn -versiongit clone <url-do-repositorio>
cd ConsultaOperadoraV2mvn clean compilemvn clean packageO arquivo JAR será gerado em target/ConsultaOperadoraV2-<versao>.jar
Antes de executar a aplicação, é necessário configurar os caminhos de entrada e saída no arquivo Main.java:
private static final String INPUT_FOLDER = "E:\\Projetos JAVA\\CnpjDownloader\\cnpj_data\\export";
private static final String OUTPUT_FOLDER = "E:\\Projetos JAVA\\CnpjDownloader\\arquivos_finalizados";Importante: Ajuste esses caminhos conforme sua estrutura de diretórios.
- THREAD_POOL_SIZE: Número de threads para processamento paralelo (padrão: 6)
- Formato de Arquivos de Entrada: Os arquivos CSV devem seguir o padrão de nomenclatura:
{UF}_*.csv(ex:al_ativos.csv)*_{UF}.csv(ex:ativos_al.csv)
Os arquivos CSV de entrada devem conter as seguintes colunas (mínimo 6 colunas):
cnpj_completo- CNPJ completo (14 dígitos)razao_social- Razão social da empresaendereco_completo- Endereço completoemail- E-mail da empresaano_abertura- Ano de aberturatelefones- Números de telefone (pode conter múltiplos números)
java -jar target/ConsultaOperadoraV2-<versao>.jarOu, se estiver usando Maven:
mvn exec:java -Dexec.mainClass="Main"A aplicação gera arquivos CSV separados por operadora no diretório de saída configurado:
{UF} - CLARO.csv{UF} - VIVO.csv{UF} - TIM.csv{UF} - OI.csv{UF} - FIXO.csv{UF} - SEM_OPERADORA.csv
Cada arquivo contém apenas os CNPJs classificados para aquela operadora específica.
Um arquivo de log detalhado é gerado em {OUTPUT_FOLDER}/processamento.log contendo:
- Timestamp de cada operação
- Progresso do processamento
- Estatísticas por arquivo
- Relatório final com métricas consolidadas
- Tratamento de erros
ConsultaOperadoraV2/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── Main.java # Classe principal
│ │ └── resources/
│ └── test/
│ ├── java/
│ └── resources/
├── target/ # Arquivos compilados
├── pom.xml # Configuração Maven
├── .gitignore
├── LICENSE
└── README.md
O sistema detecta automaticamente o delimitador usado no arquivo CSV testando:
- Vírgula (
,) - Ponto e vírgula (
;) - Tabulação (
\t)
- Normalização automática de formatos diversos
- Aplicação da regra do nono dígito para números móveis
- Validação usando a biblioteca libphonenumber
- Fallback para identificação baseada em prefixos quando necessário
Utiliza ExecutorService com pool de threads configurável para processar múltiplos arquivos simultaneamente, otimizando o tempo de execução.
Mantém um HashSet de CNPJs processados para garantir que cada CNPJ apareça apenas uma vez nos arquivos de saída.
Ao final do processamento, o sistema exibe:
- Tempo total de processamento
- Número de arquivos processados com sucesso
- Total de registros processados
- Quantidade de arquivos CSV gerados
- Taxa de sucesso do processamento
- Distribuição de registros por operadora
- Encoding: Os arquivos CSV são lidos com encoding
ISO-8859-1 - Delimitador de Saída: Os arquivos gerados usam ponto e vírgula (
;) como delimitador - Região: Apenas arquivos da região Nordeste são processados
- Validação: CNPJs inválidos ou duplicados são automaticamente descartados
- Performance: Para grandes volumes de dados, ajuste o
THREAD_POOL_SIZEconforme o hardware disponível
O sistema possui tratamento robusto de erros:
- Arquivos vazios ou corrompidos são logados e pulados
- Erros de parsing são capturados e registrados
- Falhas em arquivos individuais não interrompem o processamento dos demais
- Stack traces completos são registrados no log para depuração
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
Contribuições são bem-vindas! Sinta-se à vontade para:
- Fazer fork do projeto
- Criar uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abrir um Pull Request
Para dúvidas, sugestões ou problemas, abra uma issue no repositório.
Desenvolvido para processamento eficiente de dados de CNPJs