Pipeline de dados jurídicos para Fintechs: Arquitetura, código e boas práticas

Do onboarding ao monitoramento contínuo: como, na prática, construir um pipeline completo que integra dados jurídicos ao core da sua Fintech.

Pipeline de dados jurídicos para fintechs: arquitetura, código e boas práticas
Público: CTOs e Engenheiros de Fintechs Leitura: ~16 min Nível: Avançado SEO Focus: pipeline-dados-juridicos-fintech

Fintechs que operam crédito, seguros, BaaS ou qualquer produto financeiro no Brasil têm um problema em comum: os bureaus de crédito tradicionais não capturam o passivo judicial de um cliente. Uma pessoa pode ter score 800 no Serasa e ao mesmo tempo ter 15 execuções trabalhistas ativas.

Este artigo mostra como construir um pipeline de dados jurídicos robusto — desde a ingestão via API até o consumo em decisões de crédito — com arquitetura de referência e código funcional. Para uma visão geral da plataforma, acesse judit.io.

75M+
Processos ativos no Judiciário brasileiro
90+
Tribunais cobertos pela API da Judit
~30%
Redução típica de inadimplência com dados jurídicos

Por que fintechs precisam de dados jurídicos

Os dados que bureaus tradicionais fornecem (histórico de crédito, negativações, score comportamental) capturam o passado financeiro de um indivíduo ou empresa. O que eles não capturam é o passivo jurídico ativo — e esse passivo é frequentemente o melhor indicador de default iminente. A Judit foi construída exatamente para preencher essa lacuna, oferecendo acesso unificado ao Judiciário brasileiro via API.

📊 Sinais de alerta nos dados judiciais

Execuções fiscais ativas — dívidas com Fazenda, altamente correlacionadas com fluxo de caixa negativo.

Execuções trabalhistas — passivo escondido que pode consumir reservas rapidamente.

Recuperação judicial ou falência — sinal crítico que pode aparecer antes nos tribunais do que no bureau.

Volume crescente de processos consumeristas — indica insatisfação de clientes e risco reputacional.

Mandados de prisão ativos — dado de compliance crítico para KYC/PLD-FT.

Arquitetura de referência — o pipeline completo

🔄 Pipeline de dados jurídicos — camadas de ingestão ao consumo
📥
Ingestão
Judit API: consulta síncrona e assíncrona por CPF/CNPJ
🔄
Fila
SQS / RabbitMQ: desacopla ingestão do processamento
⚙️
Processamento
Workers: normalização, classificação e scoring
🗄️
Armazenamento
PostgreSQL + cache Redis para perfis de risco
📊
Consumo
API interna para motor de crédito e dashboards

Stack de tecnologia recomendada

Ingestão
Judit API Webhooks Judit Batch (consultas em lote)
Mensageria
AWS SQS RabbitMQ Apache Kafka (escala)
Processamento
Python Workers Celery AWS Lambda Airflow (orquestração)
Storage / Output
PostgreSQL Redis (cache) S3 (documentos) REST API interna

Antes de implementar, consulte a documentação oficial da Judit para detalhes atualizados sobre endpoints, rate limits e autenticação.

Implementação — Fluxo de Onboarding com KYC Jurídico

O fluxo mais crítico para fintechs é o de onboarding. A cada novo cliente cadastrado, o pipeline precisa: consultar os dados cadastrais, verificar processos ativos, checar mandados de prisão e gerar um perfil de risco jurídico. Veja a referência completa dos parâmetros disponíveis na documentação da API.

kyc_pipeline.py
from dataclasses import dataclass
from enum import Enum
import asyncio
import aiohttp

class RiscoJuridico(Enum):
    BAIXO = "low"
    MEDIO = "medium"
    ALTO = "high"
    CRITICO = "critical"

@dataclass
class PerfilRiscoJuridico:
    cpf_cnpj: str
    total_processos: int
    execucoes_fiscais: int
    execucoes_trabalhistas: int
    valor_total_causas: float
    tem_recuperacao_judicial: bool
    tem_mandado_prisao: bool
    nivel_risco: RiscoJuridico
    recomendacao: str


class PipelineKYCJuridico:

    def __init__(self, api_key: str):
        self.api_key = api_key
        self.headers = {
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        }
        self.endpoint = "https://requests.prod.judit.io/requests"

    async def consultar_paralelo(self, cpf_cnpj: str) -> dict:
        """Faz todas as consultas necessárias em paralelo."""

        async with aiohttp.ClientSession() as session:
            # Executa 3 consultas simultaneamente (mais rápido)
            tarefas = [
                self._consultar(session, cpf_cnpj, "entity"),      # dados cadastrais
                self._consultar(session, cpf_cnpj, "lawsuits"),    # processos
                self._consultar(session, cpf_cnpj, "warrant"),     # mandados de prisão
            ]
            resultados = await asyncio.gather(*tarefas, return_exceptions=True)

        return {
            "entity": resultados[0],
            "lawsuits": resultados[1],
            "warrants": resultados[2]
        }

    async def _consultar(self, session, cpf_cnpj, response_type):
        payload = {"search_type": "cpf_cnpj", "search_key": cpf_cnpj, "response_type": response_type}
        async with session.post(self.endpoint, headers=self.headers, json=payload) as r:
            return await r.json()

    def calcular_risco(self, dados: dict) -> PerfilRiscoJuridico:
        """Calcula o perfil de risco jurídico a partir dos dados coletados."""

        processos = dados.get("lawsuits", {}).get("lawsuits", [])
        mandados = dados.get("warrants", {}).get("warrants", [])

        # Filtra por tipo de processo
        execucoes_fiscais = [p for p in processos if "Execução Fiscal" in p.get("subject", "")]
        execucoes_trab = [p for p in processos if p.get("court", "").startswith("TRT")]
        rec_judicial = any("Recuperação Judicial" in p.get("subject", "") for p in processos)
        valor_total = sum(p.get("value", 0) for p in processos)

        # Determina nível de risco
        if mandados or rec_judicial:
            risco = RiscoJuridico.CRITICO
            recomendacao = "BLOQUEAR - Mandado de prisão ou recuperação judicial ativa"
        elif len(execucoes_fiscais) > 5 or valor_total > 500_000:
            risco = RiscoJuridico.ALTO
            recomendacao = "REVISAR - Alto volume de execuções ou valor elevado"
        elif len(processos) > 10 or execucoes_trab:
            risco = RiscoJuridico.MEDIO
            recomendacao = "APROVAR COM LIMITE REDUZIDO"
        else:
            risco = RiscoJuridico.BAIXO
            recomendacao = "APROVAR"

        return PerfilRiscoJuridico(
            cpf_cnpj=dados["lawsuits"].get("search_key", ""),
            total_processos=len(processos),
            execucoes_fiscais=len(execucoes_fiscais),
            execucoes_trabalhistas=len(execucoes_trab),
            valor_total_causas=valor_total,
            tem_recuperacao_judicial=rec_judicial,
            tem_mandado_prisao=bool(mandados),
            nivel_risco=risco,
            recomendacao=recomendacao
        )

Fluxo de monitoramento contínuo da carteira

Após o onboarding, o pipeline precisa monitorar continuamente todos os clientes ativos. Quando um cliente aprovado abre novos processos ou tem uma deterioração de perfil, o sistema precisa ser notificado automaticamente. A Judit oferece um endpoint dedicado de tracking com suporte a webhooks para esse cenário.

monitoramento_carteira.py
import requests
from typing import List

def ativar_monitoramento_carteira(cnpjs: List[str], webhook_url: str) -> dict:
    """
    Ativa monitoramento para toda a carteira de clientes.
    Cada movimentação relevante será notificada via webhook.
    """
    resultados = []

    for cnpj in cnpjs:
        payload = {
            "search_type": "cpf_cnpj",
            "search_key": cnpj,
            "webhook_url": webhook_url,
            "notification_config": {
                "on_new_lawsuit": True,
                "on_movement": True,
                "on_decision": True,
                # Filtra por tipos críticos para reduzir ruído
                "filter_subjects": [
                    "Execução Fiscal",
                    "Recuperação Judicial",
                    "Falência",
                    "Execução de Título Extrajudicial"
                ]
            }
        }
        response = requests.post(
            "https://tracking.prod.judit.io/tracking",
            headers={"Authorization": f"Bearer {API_KEY}"},
            json=payload
        )
        resultados.append({"cnpj": cnpj, "status": response.status_code})

    ativados = sum(1 for r in resultados if r["status"] == 201)
    print(f"✅ {ativados}/{len(cnpjs)} clientes em monitoramento ativo")
    return {"ativados": ativados, "detalhes": resultados}


# Webhook que recebe alertas e reavalia risco do cliente
def reavaliar_risco_cliente(evento_webhook: dict):
    cnpj = evento_webhook["search_key"]
    novo_processo = evento_webhook.get("lawsuit", {})

    # Verifica se é processo crítico
    if "Recuperação Judicial" in novo_processo.get("subject", ""):
        bloquear_cliente(cnpj, motivo="Recuperação judicial detectada")
        notificar_time_risco(cnpj, urgencia="CRITICA")
    elif novo_processo.get("value", 0) > 100_000:
        reduzir_limite(cnpj, percentual=50)
        notificar_time_risco(cnpj, urgencia="ALTA")

Considerações de LGPD para fintechs

Dados jurídicos envolvem informações pessoais. Para operar em conformidade com a LGPD, seu pipeline precisa observar:

  • Base legal: dados processuais são públicos por natureza (Art. 7, §3 da LGPD), mas o tratamento ainda exige finalidade legítima documentada
  • Minimização: colete apenas o necessário — se você precisa saber se há execuções fiscais, não precisa armazenar todas as movimentações do processo
  • Retenção: defina um prazo de retenção para dados de prospects rejeitados (60-90 dias é prática comum)
  • Logs de acesso: registre quem acessou quais dados e quando — essencial para responder a solicitações do titular
  • Criptografia: CPFs, CNPJs e dados processuais devem ser criptografados em repouso e em trânsito

Resumo: checklist de implementação

  • Criar conta na Judit e escolher o plano adequado em judit.io/planos
  • Gerar API Key e explorar a documentação de introdução
  • Implementar cliente de API com retry e backoff exponencial
  • Construir fluxo de onboarding com consultas paralelas (entity + lawsuits + warrant)
  • Implementar função de classificação de risco baseada em regras
  • Configurar monitoramento de carteira com webhook URL seguro
  • Implementar fila (SQS/RabbitMQ) para desacoplar ingestão do processamento
  • Criar tabela de perfis de risco jurídico no banco de dados
  • Documentar base legal LGPD para tratamento dos dados

Comece a construir seu pipeline agora

A Judit oferece documentação completa, exemplos de código e suporte técnico para integração com sua fintech.

Quer saber como a Judit pode ajudar seu negócio?

Compartilhe o artigo

Veja outros artigos