Pular para conteúdo

Sincronização de Empregadores

Objetivo

Este guia descreve como sincronizar empregadores (empresas/CNPJs) do seu sistema com a Pontotel.

O que é um Empregador?

Um empregador representa uma empresa (CNPJ) na plataforma Pontotel. Toda a hierarquia de empregados, locais e grupos está vinculada a um empregador.

Fluxo de Sincronização

flowchart LR
    A[Seu Sistema] -->|Busca lista de CNPJs| B[Seu Banco de Dados]
    B -->|Para cada CNPJ| C{Existe na Pontotel?}
    C -->|Não| D[POST /empregadores/]
    C -->|Sim| E{Dados mudaram?}
    E -->|Sim| F[PATCH /empregadores/id/]
    E -->|Não| G[Ignorar]
    D --> H[Armazenar ID Pontotel]
    F --> H

Passo 1: Listar Empregadores Existentes

Antes de criar, verifique se o empregador já existe na Pontotel usando o CNPJ:

Python
import requests

def buscar_empregador_por_cnpj(cnpj: str, headers: dict) -> dict | None:
    """Retorna empregador existente ou None"""
    response = requests.get(
        "https://apis.pontotel.com.br/pontotel/api/v4/empregadores/",
        params={"cnpj": cnpj},
        headers=headers
    )
    response.raise_for_status()
    data = response.json()

    if data["count"] > 0:
        return data["results"][0]
    return None

Passo 2: Criar Empregador

Se não existir, crie:

Python
def criar_empregador(dados: dict, headers: dict) -> dict:
    """Cria um novo empregador na Pontotel"""
    response = requests.post(
        "https://apis.pontotel.com.br/pontotel/api/v4/empregadores/",
        json=dados,
        headers=headers
    )
    response.raise_for_status()
    return response.json()

# Payload de criação
payload = {
    "cnpj": "12.345.678/0001-99",
    "razao_social": "Empresa Exemplo LTDA",
    "nome_fantasia": "Empresa Exemplo",
    "is_active": True
}

empregador = criar_empregador(payload, headers)
print(f"Empregador criado: ID={empregador['id']}")

Passo 3: Atualizar Empregador

Se já existir e os dados mudaram:

Python
1
2
3
4
5
6
7
8
9
def atualizar_empregador(id: int, dados: dict, headers: dict) -> dict:
    """Atualização parcial (PATCH)"""
    response = requests.patch(
        f"https://apis.pontotel.com.br/pontotel/api/v4/empregadores/{id}/",
        json=dados,
        headers=headers
    )
    response.raise_for_status()
    return response.json()

Passo 4: Script Completo de Sincronização

Python
def sincronizar_empregadores(lista_cnpjs: list[dict], auth) -> dict:
    """
    Sincroniza lista de empregadores com a Pontotel.

    lista_cnpjs: [{"cnpj": "...", "razao_social": "...", ...}]
    """
    resultado = {"criados": 0, "atualizados": 0, "ignorados": 0, "erros": []}
    headers = auth.get_headers()

    for empresa in lista_cnpjs:
        try:
            cnpj = empresa["cnpj"]
            existente = buscar_empregador_por_cnpj(cnpj, headers)

            if not existente:
                criar_empregador(empresa, headers)
                resultado["criados"] += 1
                print(f"✅ Criado: {cnpj}")

            elif dados_diferentes(existente, empresa):
                atualizar_empregador(existente["id"], empresa, headers)
                resultado["atualizados"] += 1
                print(f"🔄 Atualizado: {cnpj}")

            else:
                resultado["ignorados"] += 1
                print(f"⏭ Ignorado: {cnpj}")

        except Exception as e:
            resultado["erros"].append({"cnpj": empresa.get("cnpj"), "erro": str(e)})
            print(f"❌ Erro em {empresa.get('cnpj')}: {e}")

    return resultado

def dados_diferentes(existente: dict, novo: dict) -> bool:
    """Compara campos relevantes"""
    campos = ["razao_social", "nome_fantasia", "is_active"]
    return any(existente.get(c) != novo.get(c) for c in campos)

Regras de Negócio

Regras Importantes

  • O CNPJ é único dentro da plataforma Pontotel
  • Um empregador inativo não aceita novos empregados
  • A razão social deve corresponder ao CNPJ registrado na Receita Federal

Próximos Passos