Base CNPJ

Toda a base do TermoLeads cabe em uma tabela de consulta, a cnpj, com uma linha por estabelecimento. A Receita publica os dados divididos em vários arquivos; a importação junta tudo uma vez só, e as telas leem essa tabela sem cruzar nenhuma outra.

As tabelas

TabelaO que guardaQuem lê
cnpjUma linha por estabelecimento, com empresa, Simples, sócios e descrições na própria linha. Chave primária: o CNPJ de 14 dígitos.As duas telas de consulta
cnpj_cnaeCódigo e descrição das atividades econômicas (CNAE).Só a importação
cnpj_municipioCódigo e nome dos municípios, no código da Receita.Só a importação
cnpj_naturezaCódigo e descrição das naturezas jurídicas.Só a importação
cnpj_qualificacaoCódigo e descrição das qualificações de responsável e de sócio.Só a importação
cnpj_motivoCódigo e descrição dos motivos de situação cadastral.Só a importação
cnpj_paisCódigo e nome dos países.Só a importação
cnpj_import_execucaoUma linha por execução da importação, com mês, situação, contagens e erro.A tela de importação (histórico)

As seis tabelas de domínio só servem para preencher as colunas de descrição da cnpj durante a importação. Se o arquivo de um domínio não vier na pasta do mês ou falhar na leitura, a importação usa o que já está na tabela, e a tabela não é regravada.

Sem exclusão lógica

Aqui não existe coluna deletado. A base não é editada linha a linha: cada importação completa substitui a tabela cnpj inteira, e uma empresa que sumiu da publicação da Receita some junto.

Dos arquivos da Receita para a linha

A Receita publica, em cada pasta mensal, estes arquivos .zip, cada um com um CSV separado por ; e codificado em Latin-1:

ArquivoConteúdoColunasChave de ligação
Estabelecimentos*.zipCada unidade, matriz ou filial, com endereço, contato, situação e CNAE30cnpj_basico + cnpj_ordem + cnpj_dv
Empresas*.zipRazão social, natureza jurídica, capital social e porte7cnpj_basico
Socios*.zipQuadro societário11cnpj_basico (vários por empresa)
Simples.zipOpção pelo Simples Nacional e pelo MEI, com datas7cnpj_basico
Cnaes.zip, Municipios.zip, Naturezas.zip, Qualificacoes.zip, Motivos.zip, Paises.zipTabelas de código e descrição2O próprio código

O arquivo de estabelecimentos dirige a montagem: cada estabelecimento vira uma linha, e os dados da empresa, do Simples e dos sócios do mesmo cnpj_basico são copiados para ela. Por isso, a matriz e todas as filiais de uma empresa repetem a mesma razão social, o mesmo capital e o mesmo quadro de sócios.

As colunas da tabela cnpj

Identificação

cnpj (os 14 dígitos, chave primária), cnpj_basico (8 dígitos da empresa), cnpj_ordem (4 dígitos do estabelecimento), cnpj_dv (2 dígitos verificadores), identificador_matriz_filial e sua descrição (Matriz ou Filial), e nome_fantasia.

Situação

situacao_cadastral e sua descrição (Nula, Ativa, Suspensa, Inapta ou Baixada), data_situacao_cadastral, motivo_situacao_cadastral e sua descrição, situacao_especial e data_situacao_especial.

Atividade

data_inicio_atividade, cnae_fiscal_principal e sua descrição, e cnae_fiscal_secundaria, a lista de CNAEs secundários separados por vírgula, como a Receita publica.

Endereço e contato

tipo_logradouro, logradouro, numero, complemento, bairro, cep, uf, municipio (código da Receita) e municipio_descricao (nome da cidade), nome_cidade_exterior, pais e sua descrição, ddd_1 e telefone_1, ddd_2 e telefone_2, ddd_fax e fax, e correio_eletronico.

Empresa (colunas empresa_*)

empresa_razao_social, empresa_natureza_juridica e sua descrição, empresa_qualificacao_responsavel e sua descrição, empresa_capital_social (texto bruto, com vírgula decimal), empresa_porte_empresa e sua descrição (Não informado, Microempresa, Empresa de Pequeno Porte ou Demais) e empresa_ente_federativo_responsavel. A coluna tem_empresa é false quando o estabelecimento não tinha empresa correspondente no arquivo.

Simples Nacional e MEI (colunas simples_*)

simples_opcao_pelo_simples e sua descrição (Sim ou Não), simples_data_opcao_simples, simples_data_exclusao_simples, simples_opcao_pelo_mei e sua descrição, simples_data_opcao_mei e simples_data_exclusao_mei. A coluna tem_simples é false quando a empresa não aparece no arquivo do Simples.

Sócios (coluna socios)

Uma lista em jsonb, ordenada pelo nome do sócio. Cada item tem os 11 campos do arquivo de sócios (identificador, nome ou razão social, CPF ou CNPJ, qualificação, data de entrada, país, representante legal, nome e qualificação do representante e faixa etária) e as descrições acrescentadas: tipo de sócio (Pessoa Jurídica, Pessoa Física ou Estrangeiro), qualificação do sócio, qualificação do representante e país.

Regras de fidelidade

  • Tudo é texto. Datas ficam como AAAAMMDD (que ordenam corretamente como texto), códigos mantêm os zeros à esquerda e campos vazios continuam vazios. A formatação para leitura (datas DD/MM/AAAA, capital em reais, máscara do CNPJ) acontece só na tela.
  • Acentos sem perda. A conversão de Latin-1 para UTF-8 é feita byte a byte, sem trocar nenhum caractere por símbolo de erro.
  • Descrição ao lado do código. Toda coluna *_descricao é derivada na importação; o código original continua na sua coluna.
  • Estabelecimento sem CNPJ completo é descartado, porque não tem identidade. CNPJ repetido também: vale a primeira ocorrência.

Índices

ÍndiceColunasPara quê
Chave primáriacnpjConsulta de um CNPJ
cnpj_consulta_canonicauf, municipio_descricao, cnae_fiscal_principal, situacao_cadastral, cnpjLocalizar Empresas com UF, cidade, CNAE e situação
cnpj_cnae_cnpjcnae_fiscal_principal, cnpjFiltro só por atividade, sem UF

A importação recria na tabela nova todos os índices que a cnpj tiver no momento, lidos do próprio banco. Um índice acrescentado por uma migration futura entra na base nova sem mudar o código da importação.

Histórico de importações

A tabela cnpj_import_execucao recebe uma linha no início de cada importação, com situação executando, e é atualizada no fim:

SituaçãoQuando
concluidoTodos os arquivos foram lidos e a base nova entrou no ar.
concluido_com_falhasA base nova entrou no ar, mas algum arquivo falhou na leitura.
erroUm erro interrompeu a importação; a base anterior continua no ar.
canceladoO master cancelou; a base anterior continua no ar.

Também ficam registrados o mês importado, o total de arquivos, quantos terminaram bem, o total de linhas, a lista de arquivos que falharam e a mensagem de erro.

Atualizado em 2026/10/10 15:04