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 |
|---|
| 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