🇺🇸 English version here
Este repositório contém uma aplicação para processamento de dados do CNPJ. É construÃdo usando o framework Laravel para PHP e utiliza Docker para facilitar a configuração e a implantação. A aplicação lida com arquivos CSV de grande porte, processa-os e armazena os dados em um banco de dados MySQL ou PostgreSQL para análises posteriores.
O download dos arquivos de dados da Receita Federal pode ser feito aqui - última atualização em 15/05/2024.
- Processamento de arquivos CSV de grande porte com dados CNPJ.
- Armazenamento de dados processados em banco de dados MySQL ou PostgreSQL.
- Integração com Redis para otimização de desempenho.
- Nginx como proxy reverso para o servidor web.
- Configuração conteinerizada com Docker e Docker Compose.
/cnoj-extractor
│
├── /docker
│ ├── docker-compose.yml
│ ├── Dockerfile.app
│ └── /nginx
│ └── default.conf
│
│── /src
│ ├── /app
│ ├── .env.example
│ ├── ...
│
│── /data
/docker
- Arquivos de configuração do Docker./src
- Código fonte da aplicação em Laravel./data
- Arquivos de dados da Receita Federal.
Antes de começar, certifique-se de que os seguintes requisitos foram atendidos:
- Docker e Docker Compose instalados em sua máquina.
- Conhecimento básico de Laravel, Docker e MySQL/PostgreSQL.
Para configurar o projeto para desenvolvimento, siga estes passos:
- Clone o repositório.
git clone https://github.com/jeffersonsalvador/cnpj-extractor.git
cd cnpj-extractor
- Navegue até o diretório docker e inicie os serviços:
cd docker
make up
Isso irá construir e executar os seguintes serviços:
app
: A aplicação Laravel.postgres
: O banco de dados PostgreSQL.redis
: O servidor Redis.
Uma vez que os contêineres estejam em execução, você pode:
Acessar a aplicação via http://localhost:8080.- Conectar ao banco de dados usando as credenciais fornecidas no arquivo .env.
- Monitorar a instância do Redis na porta 6379.
Para processar dados CNPJ:
- Coloque seus arquivos CSV no diretório designado (conforme mencionado na documentação da aplicação).
- Use
a interface web da aplicação (em desenvolvimento) oucomandos CLI para iniciar o processamento.
Na pasta /docker, execute o comando:
make cnpj-app
php artisan process:cnpj
Os arquivos zip serão processados e armazenados no redis. Para processar a fila no redis execute o comando:
php artisan queue:work
Para construir e executar a aplicação, você usará os comandos do Makefile:
make up-terminal
para iniciar os serviços necessários para rodar o script de importação de dados via terminal.
make up
para iniciar os containers e a aplicação web (em desenvolvimento).
Outros comando úteis:
make down
para parar e remover os containers.make restart
para reiniciar os containers.
Na pasta de configuração /docker
, execute os comandos make cnpj-app
para entrar em modo bash e php artisan migrate
para criar as tabelas no banco de dados.
Neste projeto, o Redis é utilizado como um armazenamento temporário de dados durante o processamento de arquivos CSV. O Redis oferece um armazenamento rápido em memória, o que melhora a performance ao lidar com grandes volumes de dados.
Durante o processamento de arquivos CSV:
-
Cada registro é normalizado e serializado como JSON.
-
Os registros são armazenados temporariamente no Redis em uma lista chamada
processed_records_{$type}
.
Após o processamento:
-
Os dados são lidos do Redis.
-
Eles são desserializados e inseridos em lote no banco de dados configurado no arquivo .env.
Este método assegura eficiência no processamento de dados e minimiza a carga sobre o banco de dados durante a inserção de grandes volumes de registros.
Tabela | Registros | Tamanho |
---|---|---|
cities | 5.571 | 600 Kb |
cnaes | 1.359 | 248 Kb |
companies | 57.707.950 | 11 Gb |
countries | 255 | 64 Kb |
establishments | 45.200.973 | 17 Gb |
legal_natures | 90 | 56 Kb |
partners | 23.084.108 | 4.48 Gb |
partners_qualifications | 68 | 24 Kb |
simples | 38.960.381 | 4.71 Gb |
DistribuÃdo sob a Licença MIT. Veja LICENSE para mais informações.
Jefferson Costa – [email protected]
Link do Projeto: https://github.com/jeffersonsalvador/cnpj-extractor