{"servico":"judSC — Sistema de Consultas Processuais","criadoPor":"Criado pela UniController por Jackson Tomelin","desenvolvedor":{"nome":"Jackson Tomelin","empresa":"UniController","contato":"(47) 99935-7131"},"versao":"3.0.0","endpoints":{"GET /health":"Status do serviço e nº de tribunais mapeados.","GET /tribunais":"Lista todos os tribunais consultáveis, agrupados por sistema (eproc/esaj/trf4/pje/projudi), e os grupos de atalho (ex.: grupo:tjsc).","GET /consulta":{"descricao":"Consulta processos por CPF, CNPJ ou nome em um ou mais tribunais. A consulta roda como um job independente da conexão HTTP: mesmo que o cliente feche a conexão antes de terminar, ela continua no servidor até o fim (ver \"stream\"/\"job\" abaixo e GET /consulta-job/:jobId).","parametros":{"tipo":"\"cpf\" | \"cnpj\" | \"nome\"","valor":"Número (só dígitos) ou nome da parte. Obrigatório ao iniciar uma consulta nova (não usar junto com \"job\").","tribunais":"IDs separados por vírgula (ex.: tjsc_1g,trf4_consulta) ou \"grupo:<nome>\" ou \"todos\".","detalhes":"Opcional. Com \"detalhes=1\", cada processo já vem com o passo a passo embutido em \"detalhe\" (mesmos campos de /processo-detalhe: classe, órgão julgador, valor da causa, situação e o array \"eventos\" com data/descrição/documento). Evita ter que chamar /processo-detalhe por processo, mas deixa a resposta BEM mais lenta, pois abre a página de cada processo no navegador. Se um processo falhar, ele vem com \"detalheErro\" e os demais seguem normalmente.","stream":"Opcional. Com \"stream=1\", a resposta vira Server-Sent Events (text/event-stream): evento \"inicio\" (com \"jobId\" e \"total\"), um evento \"progresso\" por tribunal concluído (nome, contador, status), e um evento \"final\" com o mesmo payload de sempre. Sem \"stream=1\", o comportamento é síncrono tradicional — espera terminar e devolve o JSON direto.","job":"Opcional. Reconecta a uma consulta já em andamento/concluída, usando o \"jobId\" recebido no evento \"inicio\" de uma chamada anterior com stream=1 — não inicia uma consulta nova, só volta a acompanhar a mesma. Não precisa (nem deve) informar tipo/valor/tribunais junto."},"regras_importantes":{"job_continua_sem_conexao":"A consulta em si NÃO depende da conexão do cliente — ela roda em segundo plano no servidor desde o momento em que é criada. Se o cliente sair no meio (fechar a aba, cair a rede), a consulta termina normalmente de qualquer forma; o resultado fica disponível por até 1h em GET /consulta-job/:jobId para ser recuperado depois.","autor_reu":"No sistema eProc, Autor/Réu são decididos pelo CONTEÚDO real da linha, não pela posição do cabeçalho — o eProc às vezes preenche o cabeçalho \"Classe/Parte Autora/Parte Ré/Situação\" mas deixa células em branco e desloca os nomes reais. Quando o cabeçalho e a linha não têm o mesmo nº de colunas, ou as células mapeadas vêm vazias, o sistema decide pelas duas últimas células não vazias.","classe_situacao_ausentes":"Por esse motivo, \"classe\" e \"situacao\" NÃO são retornados nos resultados de busca do eProc — só nomes de partes e número do processo. Classe/Situação confiáveis vêm de GET /processo-detalhe (ver abaixo).","link":"O campo \"link\", quando presente, é sempre uma URL absoluta (resolvida contra a página real), podendo ser usado em GET /processo-detalhe.","sessaoId":"Cada resultado de tribunal (bloco em \"resultados\") pode trazer um \"sessaoId\" — reaproveita a sessão do navegador que já resolveu a verificação de segurança daquele tribunal por alguns minutos, evitando resolver de novo ao chamar /processo-detalhe logo em seguida."}},"GET /processo/:numero":{"descricao":"Detalhe do processo via API Pública do Datajud (CNJ) — classe, assuntos e movimentos oficiais, sem depender de navegador. Chave pública compartilhada nacionalmente; pode retornar 429 (limite atingido) em picos de uso — nesses casos, tenta novamente ou use /processo-detalhe.","parametros":{"numero":"Número CNJ com 20 dígitos."}},"GET /consulta-job/:jobId":{"descricao":"Consulta o estado de um job de consulta (em andamento, concluído ou com erro) sem precisar manter uma conexão SSE aberta — útil para reabrir a página depois e ver onde a consulta ficou, ou pegar o resultado se já tiver terminado. Jobs somem da memória depois de 1h.","parametros":{"jobId":"ID recebido no evento \"inicio\" de uma chamada anterior a /consulta com stream=1."}},"GET /eproc-processos-parte":{"descricao":"Busca por NOME no eProc costuma devolver primeiro uma lista de partes (empresas/pessoas com nome parecido) em vez de processos direto. Esse endpoint abre a página da parte escolhida (do campo \"partesEncontradas\" de /consulta) e devolve os processos dela de verdade, no mesmo formato de \"processos\" do /consulta.","parametros":{"link":"URL da parte (vinda de partesEncontradas[].link).","sessao":"sessaoId opcional."}},"GET /processo-detalhe":{"descricao":"Detalhe extraído diretamente da página do tribunal (reaproveitando \"sessaoId\" quando fornecido) — classe, órgão julgador, valor da causa, situação e movimentos com documento por evento. Fonte primária recomendada quando o processo tem \"link\".","parametros":{"link":"URL da página do processo.","sessao":"sessaoId opcional vindo de /consulta."},"regras_importantes":{"situacaoInferido":"Prioriza o campo \"Situação:\" explícito da própria página do tribunal. Só na ausência desse campo, varre TODOS os movimentos (não só o mais recente) procurando por palavras de encerramento (baixa definitiva, arquivado, extinto). Retorna \"ativo\" ou \"baixado\", ou null se não houver dado suficiente.","eventos":"A extração de movimentos só começa a partir do cabeçalho real da tabela (\"Evento\"/\"Data/Hora\"/\"Descrição\") — dados de cabeçalho da página (situação, partes e representantes, data de distribuição) ficam de fora de propósito, para não virarem um movimento falso.","documento_por_evento":"Cada movimento pode trazer um \"documento\" ({titulo,url}) — o link já filtrado, pronto para ser usado em /processo-documento."}},"GET /processo-pdf":{"descricao":"Gera um PDF da PÁGINA INTEIRA do processo (não de um documento específico) — equivalente a abrir a página no navegador e apertar Ctrl+P > Salvar como PDF. Útil para arquivar o processo completo (situação, partes, movimentos) de uma vez.","parametros":{"link":"URL da página do processo.","sessao":"sessaoId opcional vindo de /consulta.","formato":"Opcional. Com \"formato=base64\", devolve JSON ({nomeArquivo, mimeType, tamanhoBytes, base64}) com o PDF já em base64, em vez do arquivo binário puro — útil para integrar direto em outro sistema sem lidar com upload/stream. Sem esse parâmetro, devolve o PDF normalmente (Content-Type: application/pdf)."}},"GET /processo-documento":{"descricao":"Baixa o PDF de um documento do processo, reaproveitando a sessão do tribunal (cookies) para evitar sessão expirada. Tenta \"imprimir\" a página renderizada (equivalente a Ctrl+P) e cai para busca HTTP direta como reserva.","parametros":{"url":"URL do documento (vinda de /processo-detalhe).","sessao":"sessaoId opcional.","referer":"URL da página do processo (recomendado, evita bloqueio por referer ausente).","formato":"Opcional. Com \"formato=base64\", devolve JSON ({nomeArquivo, mimeType, tamanhoBytes, base64}) em vez do arquivo binário puro — mesmo comportamento de /processo-pdf."}}},"observacoes":["As mensagens de erro nunca citam o nome de provedores terceirizados usados internamente (ex.: resolução de verificação de segurança) — sempre genéricas para quem consome a API.","CONSULTA_CONCURRENCY controla quantos tribunais são consultados em paralelo (padrão 2) — valores altos aumentam o risco de bloqueio por comportamento automatizado no provedor de verificação de segurança."]}