Criando seu próprio servidor
Banco de dados
O projeto requer um banco de dados PostgreSQL ou MongoDB e os comandos que requerem banco de dados aceitam --database-uri (ou -u) como argumento com a URI de acesso ao banco de dados (o padrão é o valor da variável de ambiente DATABASE_URL).
Caso deseje usar o Docker Compose do projeto para subir uma instância do banco de dados:
$ docker compose up -d postgres
$ docker compose up -d mongo
Usando PostgreSQL, a URI será postgres://minhareceita:minhareceita@localhost:5432/minhareceita?sslmode=disable.
Usando MongoDB, a URI será mongodb://minhareceita:minhareceita@localhost:27017/minhareceita?authSource=admin.
Dados
Os dados são disponibilizados mensalmente pela Receita Federal. Para o comando transform funcionar, é necessário um diretório contendo:
- o arquivo
YYYY-MM.zipda Receita Federal com os dados do CNPJ - os arquivos de regime tributário com prefixo
entidades-*.zip
A fonte oficial desses arquivos é sempre o Portal de Dados Abertos do governo federal:
- Busque por CPNJ e escolha Cadastro Nacional da Pessoa Jurídica - CNPJ
- Na aba Recursos os arquivos necessários são encontrados em:
- Inscrições no CNPJ (
YYYY-MM.zip) - Regimes Tributários (
entidades-*.zip)
- Inscrições no CNPJ (
Tratamento dos dados
O comando transform transforma os arquivos para o formato JSON, consolidando as informações de todos os arquivos CSV. Esse JSON é armazenado diretamente no banco de dados. Para tanto, é preciso criar a tabela no banco de dados com o comando create (o comando drop pode ser utilizado para excluir essa mesma tabela).
Para especificar onde ficam os arquivos originais da Receita Federal e do Tesouro Nacional, o comando aceita como argumento --directory (ou -d), sendo o padrão data/.
Importante
Não existe “atualizar” o banco de dados. O processo de upsert mais o gerenciamento de registros ausentes nos novos lotes faria o comando transform extremamente lento. Como a ideia é reproduzir o estado atual dos dados oficiais divulgados pela Receita Federal, o recomendado é subir um novo banco de dados, apontar a API web para o novo banco de dados, e depois excluir o banco de dados antigo.
Exemplos de uso
Sem Docker, com a variável de ambiente DATABASE_URL configurada:
$ minha-receita drop # caso necessário
$ minha-receita create
$ minha-receita transform
Com Docker:
$ docker compose run --rm minha-receita drop # caso necessário
$ docker compose run --rm minha-receita create
$ docker compose run --rm minha-receita transform -d /mnt/data/
Questões de privacidade
Assim como o socios-brasil removemos alguns dados para evitar exposição de dados sensíveis de pessoas físicas, bem como SPAM. A opção --no-privacy do comando transform remove essa precaução de privacidade.
Iniciando a API web
A API web é uma aplicação super simples que, por padrão, ficará disponível em localhost:8000.
Exemplos de uso
Sem Docker, com a variável de ambiente DATABASE_URL configurada:
$ minha-receita api
Com Docker:
$ docker compose up