import requests
from concurrent.futures import ThreadPoolExecutor, as_completed
BASE = "https://221b-api.sherlocker.com.br/api/v1"
TOKEN = "SEU_TOKEN"
def get(endpoint, **params):
params["token"] = TOKEN
return requests.get(f"{BASE}{endpoint}", params=params).json()
def calcular_score(cpf):
with ThreadPoolExecutor(max_workers=4) as pool:
fut_im = pool.submit(get, f"/imoveis/cpf/{cpf}")
fut_ve = pool.submit(get, f"/aeronaves/cpf/{cpf}") # aeronaves
fut_vei = pool.submit(get, f"/veiculos/cpf/{cpf}")
fut_emp = pool.submit(get, f"/empresas/cpf/{cpf}")
imoveis = fut_im.result().get("imoveis", [])
aeronaves = fut_ve.result()
veiculos = fut_vei.result().get("veiculos", [])
empresas = fut_emp.result().get("socios", [])
score = 0
sinais = []
# Imóveis — usar valor_venal quando disponível
valor_imoveis = sum(float(im.get("valor_venal", 0) or 0) for im in imoveis)
if valor_imoveis > 2_000_000:
score += 30; sinais.append("imóveis >R$2M")
elif valor_imoveis > 500_000:
score += 20; sinais.append("imóveis R$500k-R$2M")
elif valor_imoveis > 100_000:
score += 10; sinais.append("imóveis R$100k-R$500k")
# Veículos
n_veiculos = len(veiculos)
if n_veiculos >= 3:
score += 10; sinais.append(f"{n_veiculos} veículos")
elif n_veiculos > 0:
score += 5; sinais.append(f"{n_veiculos} veículo(s)")
# Aeronaves
tem_aeronave = aeronaves.get("aeronaves") or aeronaves.get("total", 0) > 0
if tem_aeronave:
score += 30; sinais.append("aeronave registrada")
# Capital social das empresas vinculadas
capital_max = max(
(e.get("capital_social") or 0 for e in empresas),
default=0
)
if capital_max > 1_000_000:
score += 15; sinais.append(f"empresa capital R${capital_max/1e6:.1f}M")
elif capital_max > 100_000:
score += 10; sinais.append(f"empresa capital R${capital_max/1e3:.0f}k")
# Faixa
if score >= 70: faixa = "A"
elif score >= 45: faixa = "B"
elif score >= 25: faixa = "C"
elif score >= 10: faixa = "D"
else: faixa = "E"
return {"cpf": cpf, "score": score, "faixa": faixa, "sinais": sinais}
# Segmentar uma lista de CPFs
cpfs = ["12345678901", "98765432100", "11122233344"]
resultados = []
with ThreadPoolExecutor(max_workers=5) as pool:
futures = {pool.submit(calcular_score, cpf): cpf for cpf in cpfs}
for fut in as_completed(futures):
resultados.append(fut.result())
# Agrupar por faixa
faixas = {"A": [], "B": [], "C": [], "D": [], "E": []}
for r in resultados:
faixas[r["faixa"]].append(r)
for faixa, grupo in faixas.items():
print(f"Faixa {faixa}: {len(grupo)} pessoas")
for p in grupo:
print(f" {p['cpf']} (score {p['score']}) — {', '.join(p['sinais'])}")