Escreva testes e rode os testes, use autoformatação e linter:
$ gofmt ./
$ staticcheck ./...
$ go test ./...
Os testes requerem um banco de dados de teste, com acesso configurado em TEST_DATABASE_URL
como no exemplo em .env
.
Caso queira utilizar o Docker apenas para subir o banco de dados, utilize:
$ docker-compose up -d postgres
Existe também um banco de dados para teste, que não persiste dados e que loga todas as queries:
$ docker-compose up -d postgres_test
Para visualizar as queries efetuadas:
$ docker-compose logs postgres_test
As configurações padrão desses bancos são:
Serviço | Ambiente | Variável de ambiente | Valor |
---|---|---|---|
postgres |
Desenvolvimento | DATABASE_URL |
postgres://minhareceita:minhareceita@localhost:5432/minhareceita?sslmode=disable |
postgres_test |
Testes | TEST_DATABASE_URL |
postgres://minhareceita:minhareceita@localhost:5555/minhareceita?sslmode=disable |
Se for utilizar Docker para rodar o projeto todo, copie o arquivo .env.sample
como .env
— e ajuste, se necessário.
O banco de dados de sua escolha (padrão, que persiste dados; ou de testes, que não persiste dados) tem que ser iniciado isoladamente.
Todos os dados manipulados por esse pacote vem da Receita Federal.
Um número de CNPJ tem 3 partes, e isso é importante pois influencia a forma que a Receita Federal disponibiliza os dados:
- base
- ordem
- dígitos verificadores
Por exemplo, em 19.131.243/0001-97
o número base é 19.131.243
, a ordem é 0001
e 97
são os dígitos verificadores.
Uma mesma pessoa jurídica tem sempre a mesma base, e só varia a ordem (nas filiais dessa mesma pessoa jurídica, por exemplo), e os dígitos verificadores.
O grosso dos dados está nos arquivos CSV de estabelecimentos que tem Estabelecimentos
como prefixo.
- Arquivos com o prefixo
Empresas
(ex.:Empresas0.zip
) tem o básico dos dados, como razão social, natureza jurídica e porte. - Arquivos com o prefixo
Socios
(ex.:Socios0.zip
) tem informações sobre o quadro societário de cada pessoa jurídica. - Arquivos
Simples.zip
tem informações sobre adesão das pessoas jurídicas ao Simples.
Na leitura desses arquivos existem campos que contém um código numérico, mas sem descrição do significado (por exemplo, temos o código 9701 para o município de Brasília). Esses arquivos são chamados de tabelas de look up:
- Arquivo
Cnaes.zip
com descrição dos CNAEs - Arquivo
Motivos.zip
com descrição dos motivos cadastrais - Arquivo
Municipios.zip
com o nome dos municípios - Arquivo
Paises.zip
com o nome dos países - Arquivo
Naturezas.zip
com o nome da natureza jurídica - Arquivo
Qualificacoes.zip
com a descrição da qualificação de cada pessoa do quadro societário - Arquivo do Tesouro Nacional com os códigos dos municípios do IBGE
A etapa de transformação dos dados cria uma linha no banco de dados para cada CNPJ listado em ESTABELE
, e depois “enriquece” essa linha com os CSVs auxiliares:
- Ler os arquivos com o prefixo
Estabelecimentos
(ex.:Estabelecimentos0.zip
) e criar um registro por CNPJ completo- Incorporar nessa leitura as informações das tabelas de look up
CNAECSV
,MOTICSV
,MUNICCSV
,PAISCSV
e códigos dos municípios do IBGE
- Incorporar nessa leitura as informações das tabelas de look up
- Ler os arquivos com prefixo
Empresas
e enriquecer as linhas do banco de dados com essas informações- Incorporar nessa leitura as informações da tabela de look up
NATJUCSV
- Incorporar nessa leitura as informações da tabela de look up
- Ler os arquivos com prefixo
Socios
e enriquecer as linhas do banco de dados com essas informações- Incorporar nessa leitura as informações da tabela de look up
QUALSCSV
- Incorporar nessa leitura as informações da tabela de look up
- Ler o arquivo
Simples.zip
e enriquecer as linhas do banco de dados com essas informações
Como o processo todo de ETL (o comando transform
) demora demais, caso queira testar manualmente com uma amostra dos dados, utilize o comando sample
para gera arquivos limitados a 10 mil linhas (assim o processo todo roda em cerca de 1 minuto, por exemplo). Após fazer o download dos dados:
$ ./minha-receita sample
$ ./minha-receita transform -d data/sample
Explore mais opções com --help
.
Inconsistências podem acontecer no banco de dados de testes, e ./minha-receita drop -u $TEST_DATABASE_URL
é uma boa forma de evitar isso.
Utilizamos o Material for MkDocs:
$ docker pull squidfunk/mkdocs-material
$ docker run --rm -v $(pwd):/docs squidfunk/mkdocs-material build
A documentação vai ser gerada em site/index.html
. Para servir enquanto desenvolve:
$ docker run -p 8000:8000 --rm -v $(pwd):/docs squidfunk/mkdocs-material serve --dev-addr 0.0.0.0:8000