Onde estão as portas
Até aqui todo dado veio de dois lugares: uma base sintética que eu montei (Unidade 1) e a API Pública do CNJ (Unidades 2 e 3). Os dois têm uma propriedade em comum, e ela é a razão de terem vindo primeiro: qualquer pessoa consegue a chave. A base sintética está no seu disco. A chave do DataJud é pública, igual para todos, e sai por e-mail em um dia.
Nenhum dos sistemas que você usa para trabalhar é assim.
PJe, eproc, EJUD, DCP, SEI, SEEU — é aqui que está o dado que responde às perguntas que você faz de verdade, e é aqui que o curso não pode entregar código pronto. Não por preguiça: porque a porta de cada um é diferente, e três deles não têm porta nenhuma para você.
Esta unidade é sobre descobrir qual é a sua porta antes de escrever uma linha.
O inventário desconfortável
| Sistema | O que é | Porta | Quem tem a chave |
|---|---|---|---|
| PJe | judicial | MNI 2.2.2 (SOAP) | você, com seu CPF e senha |
| eproc | judicial | MNI 2.2.2 (SOAP) | você, com seu CPF e senha |
| EJUD (2º grau) | judicial, legado | não tem API — só o banco | a TI do Tribunal |
| DCP (1º grau) | judicial, legado | não tem API — só o banco | a TI do Tribunal |
| SEI | administrativo | Web Services + módulo REST | o administrador do SEI |
| SEEU | execução penal | ver a seção final deste capítulo | — |
Leia a coluna da direita antes das outras. Ela divide a unidade em duas metades que não se parecem em nada:
Nas duas primeiras linhas, a chave já é sua. O MNI é um webservice que você chama com a sua própria identificação — a mesma que você usa para entrar no sistema. Isso tem uma consequência que vale a unidade inteira, e ela vem na próxima seção.
Nas duas seguintes, a chave é de outra pessoa. EJUD e DCP são sistemas anteriores à ideia de webservice. A porta é o banco de dados, e o banco de dados não é seu. Você vai abrir um chamado, e o que você pedir nesse chamado determina se a sua ferramenta é segura ou não — antes de existir código.
E o eproc está nas duas metades. Ele implementa o MNI, e portanto a chave é sua; mas ele também tem um banco PostgreSQL, e essa segunda chave é da TI. É o único sistema da tabela com as duas portas abertas ao mesmo tempo, e ganhou capítulo próprio por causa disso — e por uma segunda razão, que é o que ele guarda dentro da tabela de eventos.
A propriedade que muda tudo
O MNI responde com as suas permissões.
Quando você chama consultarProcesso passando o seu CPF e a sua senha, o sistema do outro lado faz exatamente a verificação que faria se você tivesse digitado o número na tela: se você pode ver aquele processo, ele volta; se não pode, não volta. A ferramenta que você escreve por cima disso não amplia o seu acesso nem um processo.
Isso é uma garantia forte, e é rara. Guarde-a, porque a metade de baixo da tabela não tem nada parecido.
O banco de dados não funciona assim, e é aqui que mora o acidente.
Quando a TI cria um usuário de leitura para você, esse usuário costuma enxergar o schema inteiro — todos os processos, de todas as varas, de todos os magistrados, com sigilo e sem sigilo. Não é malícia de ninguém: é o jeito mais simples de atender ao chamado, e "somente leitura" soa suficientemente restritivo para quem está do outro lado do chamado.
Só que "somente leitura" limita o que você escreve, não o que você lê.
No instante em que você aponta uma Tool para essa credencial, você criou algo que a tela do sistema nunca te deu: acesso amplo, consultável em linguagem natural, por um modelo de linguagem. Você não invadiu nada — a TI te entregou a chave. Mas o acesso que você tem pelo agente passou a ser maior que o acesso que você tem pelo sistema, e isso é exatamente o que não pode acontecer.
A regra desta unidade: a Tool nunca pode ver mais do que você vê pela tela. Quando a porta não garante isso sozinha — e o banco não garante —, garantir passa a ser trabalho seu, e é trabalho que se faz no pedido à TI e na consulta, não no código Python.
As três perguntas, antes do código
Para qualquer sistema que você for conectar, nesta ordem:
1. Qual é a porta? Webservice, banco, ou nenhuma. Se a resposta for "nenhuma", pare — raspar tela de sistema judicial não é uma opção que este curso vai te ensinar, e não é por dificuldade técnica.
2. Quem me autoriza, e com que alcance? Não "consigo acessar?", mas "esse acesso é igual, maior ou menor que o meu acesso pela tela?". Se for maior, o trabalho é diminuí-lo até ficar igual.
3. O que sai daqui para o modelo? A pergunta da Unidade 3 volta, e volta mais pesada. Lá, o excesso era um problema de tamanho: 613 movimentos não cabiam no contexto. Aqui, o excesso é um problema de sigilo: o nome da parte cabe perfeitamente no contexto, e é justamente por isso que ele vai passar despercebido.
O que eu testei e o que eu não testei
Este curso mede as coisas antes de afirmá-las, e aqui preciso ser explícito sobre onde essa medição para.
Testei: o padrão de conexão a banco Oracle do próximo capítulo. Ele vem de um projeto real de conferência de dados, que roda contra o EJUD, e os trechos que você vai ler são adaptações de código que funciona.
Não testei: o MNI. Chamar consultarProcesso exige a credencial nominal de um magistrado num tribunal, e eu não tenho — nem devo ter. O capítulo do MNI descreve o que está documentado pelo CNJ e o que você precisa pedir, e diz em cada ponto o que é documentação e o que é medição. Quando você rodar, vai medir coisas que eu não medi. Anote as diferenças: elas são o material da próxima versão deste curso.
O WSDL do MNI 2.2.2 é público e está no portal do CNJ; o STF publica endpoints de teste, homologação e produção do serviço. Isso dá para ler sem credencial nenhuma, e o capítulo seguinte usa isso.
SEEU, e por que ele fica de fora
O SEEU é o sistema de execução penal. Ele guarda quem está preso, por quanto tempo, com que benefício negado, em que unidade.
Este curso tem uma frase que o governa desde a primeira unidade, e ela foi escrita para exatamente este caso:
Existem processos, principalmente os criminais, que são e devem ser protegidos, e cujos números nem todos devem ter acesso, para não saberem os dados da parte do processo.
Não vou ensinar a conectar um agente ao SEEU num exercício de curso. Não porque seja impossível, e não porque o dado não seja seu para ver — se você é o juiz da execução, é. Mas porque um exercício de curso é onde se erra de propósito, e este é o único sistema da tabela em que um erro que a gente não percebeu tem nome, endereço e data de saída.
Se houver um caso concreto e institucional para isso, ele começa com a corregedoria e com a TI, não com um capítulo de curso. As técnicas dos próximos capítulos servem — o que não serve é aprendê-las ali.
Isto não é conselho jurídico e eu não sou a sua corregedoria. É a regra que eu adotei para escrever o material, e ela é conservadora de propósito: o custo de ser conservador aqui é um exercício a menos, e o custo de não ser é de outra ordem.
O que vem
Um capítulo por porta:
- Quando não há API: o banco — EJUD e DCP. O pedido à TI, o segredo que não entra no arquivo, e a diferença entre um painel que você dirige e uma Tool que um modelo dirige.
- Só os meus processos — onde as credenciais moram, como o agente sabe quem é você sem perguntar, e por que cruzar sistemas ao vivo não é trabalho de agente.
- MNI — a porta que já é sua — PJe e eproc. O webservice que responde com as suas permissões, e a única forma de pergunta que ele aceita.
- eproc — o sistema que já fala CNJ — as duas portas abertas ao mesmo tempo, e o banco em que o código de movimento do CNJ já está dentro.
- SEI — o lado administrativo — outra chave, outro dono, e a razão de ela poder alcançar mais que você.
E, no fim, Escreva a sua: sem código pronto, com um método e uma lista de verificação. É o ponto do curso em que eu paro de entregar Tool e você começa a escrever a sua.