Skip to content

Instantly share code, notes, and snippets.

@virgiliojr94
Created April 18, 2024 14:02
Show Gist options
  • Save virgiliojr94/f8f5684e85351385336214946d378c6c to your computer and use it in GitHub Desktop.
Save virgiliojr94/f8f5684e85351385336214946d378c6c to your computer and use it in GitHub Desktop.

Desafio de Engenharia de Dados: Ingestão e Processamento de Dados Cadastrais

Objetivo do Desafio

A Receita Federal disponibiliza dados abertos sobre empresas no Brasil. Seu objetivo é realizar a ingestão de duas tabelas a partir de um end-point e processar esses dados para chegar a um output esperado.

End-point

Tabelas a serem Ingestadas

Tabela Empresas

  • Arquivo: Uma das pastas Empresas.ZIP
  • Schema:
Nome da Coluna Tipo de Dado Descrição
cnpj string Número de inscrição no CNPJ (Cadastro Nacional da Pessoa Jurídica)
razão_social string Nome empresarial da pessoa jurídica
natureza_juridica int Código da natureza jurídica
qualificacao_responsavel int Qualificação da pessoa física responsável pela empresa
capital_social float Capital social da empresa
cod_porte string Código do porte da empresa

Tabela Sócios

  • Arquivo: Uma das pastas Socios.ZIP
  • Schema:
Nome da Coluna Tipo de Dado Descrição
cnpj string Número de inscrição no CNPJ (Cadastro Nacional da Pessoa Jurídica)
tipo_socio int Identificador de sócio
nome_socio string Nome do sócio pessoa física, razão social ou nome empresarial da pessoa jurídica
documento_socio string CPF ou CNPJ do sócio (preenchido com 'NOVES' para sócio estrangeiro)
codigo_qualificacao_socio string Código de qualificação do sócio

Output Esperado

  • Tabela resultante com o seguinte schema:
Nome da Coluna Tipo de Dado Descrição
cnpj string Número de inscrição no CNPJ (Cadastro Nacional da Pessoa Jurídica)
qtde_socios int Número de sócios participantes no CNPJ
flag_socio_estrangeiro boolean True se contém pelo menos 1 sócio estrangeiro, False caso contrário
doc_alvo boolean True se porte da empresa = 03 & qtde_socios > 1, False caso contrário

Requisitos Técnicos

  • Utilizar Python em sua última versão para o desenvolvimento;
  • Arquivo raw pode estar no projeto do GitHub ou em fonte acessível para download;
  • Utilização do modelo medalhão (camadas bronze, silver e gold) para o processamento;
  • Todo ambiente deve ser containerizado (Docker) e preferencialmente executado com todos serviços dependentes em um único comando;
  • Armazenamento do output em um banco que permita aplicações transacionais plugarem, seja SQL ou NoSQL;
  • Uso consciente de frameworks e boa organização do código;
  • Repositório público, bem documentado e de fácil utilização;
  • Funcionalidade e cumprimento dos requisitos apresentados no desafio.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment