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 postgresExiste também um banco de dados para teste, que não persiste dados e que loga todas as queries:
$ docker-compose up -d postgres_testPara visualizar as queries efetuadas:
$ docker-compose logs postgres_testAs 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, e as linhas desses arquivos tem um número de CNPJ completo como chave.
- Arquivos com o prefixo
Empresas*tem o básico dos dados, como razão social, natureza jurídica e porte. - Arquivos com o prefixo
Socios*tem informações sobre o quadro societário de cada pessoa jurídica. - Arquivo
Simples.ziptem informações sobre adesão das pessoas jurídicas ao Simples e MEI.
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.zipcom descrição dos CNAEs - Arquivo
Motivos.zipcom descrição dos motivos cadastrais - Arquivo
Municipios.zipcom o nome dos municípios - Arquivo
Paises.zipcom o nome dos países - Arquivo
Naturezas.zipcom o nome da natureza jurídica - Arquivo
Qualificacoes.zipcom 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, começa criando armazenamentos de chave e valor, com acesso rápido, para completar os dados dos CSVs principais, Estabelecimentos*. Isso é feito em memória para os dados que tem outras chaves, e em disco para os dados que tem como chave a base do CNPJ.
A partir daí, cada linha dos Estabelecimentos* é lida, enriquecida com esses pares de chave e valor armazenados anteriormente, e então enviada para o banco de dados.
Resumindo:
- Armazena pares de chave e valor em memória para os dados de:
Cnaes.zip,Motivos.zip,Municipios.zip,Paises.zip,Naturezas.zip,Qualificacoes.zipe códigos dos municípios do IBGE - Armazena pares de chave e valor em disco para os dados de:
Empresas*enriquecidas com pares de chave e valor deCnaes.zip,Motivos.zip,Municipios.zip,Paises.zip,Naturezas.zip,Qualificacoes.zipe códigos dos municípios do IBGESocios*enriquecidos com pares de chave e valor deQualificacoes.zipSimples.zipe enriquecer as linhas do banco de dados com essas informações
- Lê os arquivos
Estabelecimentos* - “Enriquece” cada linha deles com os pares de chave e valor
- Persiste essa informação no banco de dados
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/sampleExplore 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.
No ambiente de desenvolvimento com Docker Compose existe o serviço pREST. Ele está em fase de testes, e mais detalhes podem ser encontrados na issue sobre o assunto.
Não, ele ainda é opcional.
A ideia é sibstituir o módulo da API web pelo pREST. Isso reduz a base de código para manutenção no projeto, e facilita novas possibilidades como filtragem por UF ou CNAE, incluindo paginação.
Você pode baixar o binário executável e seguir a documentação do pREST.
Por exemplo, com http://localhost:8081/minhareceita/public/cnpj?id=33683111000280, mas essa resposta é diferente da original:
- Ela é um array e não um objeto
- Ela tem tanto a coluna
idquanto acnpj
Ou seja, dado que a resposta do pREST seja uma variável resp, o resultado de https://minhareceita.org/33683111000280 deve ser igual a resp[0].json.
Utilizamos o Material for MkDocs:
$ docker pull squidfunk/mkdocs-material
$ docker run --rm -v $(pwd):/docs squidfunk/mkdocs-material buildA 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