Antes de fechar um contrato, investir em uma empresa ou formar uma parceria, é essencial verificar a saúde jurídica, financeira e reputacional da empresa e seus sócios. O Sherlocker cruza cadastro, compliance, processos, dívidas, trabalhista e patrimônio em um único fluxo.

O problema

Uma empresa pode ter CNPJ ativo e site bonito, mas estar com dívidas bilionárias, sócios na lista de trabalho escravo, ou dezenas de execuções fiscais. Sem due diligence, você descobre tarde demais.

Dimensões verificadas

1

Dados cadastrais

Situação na RF, capital social, porte, CNAE, sócios e quadro societário
2

Compliance e listas restritivas

CEIS, CNEP, CEPIM, trabalho escravo, IBAMA, sanções internacionais, PEP
3

Situação financeira

Dívida ativa da União, FGTS, previdenciária
4

Processos judiciais

Ações como réu — especialmente execuções, falências e trabalhistas
5

Trabalhista

Lista de trabalho escravo, PAT (Programa de Alimentação do Trabalhador)
6

Sócios — check individual

Para cada sócio: regularidade pessoal, processos, patrimônio

Implementação

Passo 1 — Dados cadastrais e sócios

import requests
from concurrent.futures import ThreadPoolExecutor

BASE = "https://modulos.sherlocker.dev"
TOKEN = "SEU_TOKEN"

def get(endpoint, **params):
    params["token"] = TOKEN
    return requests.get(f"{BASE}{endpoint}", params=params).json()

cnpj = "12345678000199"

empresa = get(f"/empresas/cnpj/{cnpj}")
est = empresa.get("estabelecimento", {})
socios = empresa.get("socios", [])

print(f"Empresa: {est.get('razao_social')}")
print(f"Situacao: {est.get('situacao_cadastral')}")
print(f"Capital: R$ {est.get('capital_social', 0):,.0f}")
print(f"Socios: {len(socios)}")

Passo 2 — Compliance e financeiro

with ThreadPoolExecutor(max_workers=4) as pool:
    fut_reg = pool.submit(get, f"/regularidade/cnpj/{cnpj}")
    fut_div = pool.submit(get, f"/dividas/cnpj/{cnpj}")
    fut_trab = pool.submit(get, f"/trabalhista/cnpj/{cnpj}")
    fut_proc = pool.submit(get, f"/processos/cnpj/{cnpj}")

regularidade = fut_reg.result()
dividas = fut_div.result()
trabalhista = fut_trab.result()
processos = fut_proc.result()

# Red flags criticos
red_flags = []

if trabalhista.get("lista_trabalho_escravo"):
    red_flags.append("TRABALHO ESCRAVO")

if regularidade.get("ceis"):
    red_flags.append(f"CEIS: {len(regularidade['ceis'])} sancoes")

if regularidade.get("ibama_embargos"):
    red_flags.append(f"IBAMA: {len(regularidade['ibama_embargos'])} embargos")

total_dividas = sum(
    d.get("valor_consolidado", 0) for d in dividas.get("dividas", [])
)
if total_dividas > 0:
    red_flags.append(f"Dividas: R$ {total_dividas:,.0f}")

# Processos como reu
processos_reu = [p for p in processos.get("processos", [])
    if any(part.get("qualificacao", "").lower() == "reu"
           for part in p.get("polo", {}).get("participantes", []))]

if len(processos_reu) > 10:
    red_flags.append(f"{len(processos_reu)} processos como reu")

Passo 3 — Check dos sócios

# Enriquecer todos os socios de uma vez
cpfs_socios = [s["cnpj_cpf_socio"] for s in socios
               if len(s.get("cnpj_cpf_socio", "")) == 11]

response = requests.post(
    f"{BASE}/leads/enriquecer",
    params={"token": TOKEN},
    json={
        "contatos": [{"cpf": cpf} for cpf in cpfs_socios],
        "campos": ["identidade", "renda", "empresas"]
    }
)

socios_enriquecidos = response.json()["resultados"]

for socio in socios_enriquecidos:
    if socio["status"] == "ok":
        print(f"  {socio['nome']} — Faixa {socio['score_renda']['faixa']}")
        print(f"    Empresas: {len(socio.get('empresas', []))}")

# Check de regularidade de cada socio
for cpf in cpfs_socios:
    reg = get(f"/regularidade/cpf/{cpf}")
    if reg.get("pep"):
        red_flags.append(f"Socio {cpf[:3]}*** e PEP (Pessoa Exposta Politicamente)")

Passo 4 — Relatório final

relatorio = {
    "empresa": {
        "cnpj": cnpj,
        "razao_social": est.get("razao_social"),
        "situacao": est.get("situacao_cadastral"),
        "capital_social": est.get("capital_social"),
        "porte": est.get("porte_empresa"),
    },
    "red_flags": red_flags,
    "risco": "ALTO" if red_flags else "BAIXO",
    "socios": len(socios),
    "processos_total": len(processos.get("processos", [])),
    "processos_como_reu": len(processos_reu),
    "dividas_total": total_dividas,
}

if red_flags:
    print("⚠ RED FLAGS ENCONTRADOS:")
    for flag in red_flags:
        print(f"  - {flag}")

APIs utilizadas

Empresas

Cadastro, sócios, capital social

Regularidade

CEIS, CNEP, IBAMA, sanções, PEP

Dívidas

Dívida ativa, FGTS, previdenciária

Processos

Ações judiciais da empresa

Trabalhista

Trabalho escravo, PAT

Enriquecer

Enriquecimento dos sócios em lote