Pular para o conteúdo

SEI — o lado administrativo

O SEI não é sistema processual. Ele guarda o administrativo: ofícios, memorandos, requisições, contratos, férias, processos de compra. É outro mundo, com outro dono e outra chave.

E é, por isso, um bom lugar para escrever a sua primeira Tool contra um sistema interno de verdade. Não porque o dado não importe — importa —, mas porque um erro aqui não expõe parte de processo criminal.

Atenção

"Menor risco" não é "sem risco", e a diferença tem nome: PAD.

Processo administrativo disciplinar, sindicância, dado funcional de servidor, laudo de saúde. O SEI tem tudo isso, com os próprios níveis de restrição, e a chave de acesso que a sua Tool vai usar pode alcançá-los.

O que muda em relação ao processo judicial é o tipo de dano, não a existência dele. As regras da unidade continuam valendo, todas.

A chave é do sistema, não sua

Aqui a simetria com o banco interno é exata, e vale entender por quê.

No SEI, integração externa não usa o seu login. O administrador cadastra um sistema — a sua ferramenta — e o associa aos serviços que ela pode chamar. Desse cadastro sai uma chave de acesso, que viaja num parâmetro de identificação em cada chamada.

Isso significa que a sua Tool não herda as suas permissões. Ela herda as permissões que o administrador deu ao cadastro. Que podem ser maiores que as suas.

É o mesmo problema do banco, com outra roupa, e a mesma solução: peça estreito. No cadastro, peça associação apenas às unidades e aos tipos de processo que você já acompanha, e apenas aos serviços de consulta.

Nota

Duas coisas operacionais que economizam um chamado:

A chave aparece uma vez. Ela é guardada cifrada, e a tela só a mostra no momento em que é gerada. Se você não copiou, não dá para recuperar — gera outra.

Existe autenticação por endereço, e ela está de saída. Versões do SEI permitem autorizar por IP em vez de chave; versões novas passam a aceitar só chave. Se a sua TI oferecer o caminho por IP porque é mais rápido, prefira a chave: é o que vai continuar existindo.

E, óbvio a esta altura: a chave mora em variável de ambiente.

identificacao = os.environ["SEI_CHAVE"]   # nunca no config.yaml

Duas portas: SOAP e REST

O SEI tem uma interface de webservices SOAP, documentada no manual de Web Services da distribuição — é a oficial, é a que todo SEI tem, e o caminho é o mesmo do MNI: pegue o WSDL com a TI, aponte o zeep, rode o dump() antes de qualquer chamada.

Há também um módulo adicional de comunidade que expõe endpoints REST (mod-wssei). Se a sua instalação já o tiver, é mais confortável — requests e JSON, sem envelope. Se não tiver, não peça para instalar um módulo no SEI só para o seu exercício: instalar módulo em sistema administrativo do Tribunal é mudança de infraestrutura, e o custo disso não é seu para gastar.

Pergunte primeiro qual das duas já existe. A resposta decide o capítulo.

O que muda numa Tool de SEI

Quase nada, e isso é a boa notícia — as decisões são as mesmas três:

Consulta, nunca escrita. O SEI tem operações que criam processo e incluem documento. Elas existem, funcionam, e não entram numa Tool de agente. Um modelo que pode abrir processo administrativo é um modelo que vai abrir um processo administrativo por engano, e desfazer isso no SEI não é apagar uma linha.

Escolha os campos. A resposta traz interessados, unidades, andamentos. Devolva o que responde à pergunta, e só.

Respeite o nível de acesso. O SEI marca processo como público, restrito ou sigiloso. Se a sua Tool não olha esse campo, ela vai tratar os três igual — que é o mesmo erro do nivel_sigilo do capítulo do banco, com outro nome de coluna.

def consultar_processo_sei(protocolo: str) -> dict:
    """Situação e andamento de um processo administrativo do SEI.

    Args:
        protocolo: número do protocolo, no formato do SEI.
    """
    r = cliente.service.consultarProcedimento(
        SiglaSistema=os.environ["SEI_SISTEMA"],
        IdentificacaoServico=os.environ["SEI_CHAVE"],
        IdUnidade=os.environ["SEI_UNIDADE"],
        ProtocoloProcedimento=protocolo,
    )
    if str(r.NivelAcesso) != "0":          # 0 = público
        return {"erro": "processo restrito; consulte pelo SEI."}
    return {
        "protocolo": protocolo,
        "tipo": r.TipoProcedimento.Nome,
        "unidade_atual": r.UnidadesProcedimentoAberto[0].Unidade.Sigla,
    }

Os nomes dos campos e dos parâmetros variam com a versão do SEI e com o que o administrador habilitou no cadastro. Confira no WSDL — não copie daqui direto para produção.

Antes de conectar num agente

  1. O cadastro do sistema está associado apenas a serviços de consulta?
  2. Uma consulta a um processo de outra unidade, que você não acompanha, é recusada?
  3. A Tool olha o nível de acesso antes de devolver qualquer campo?
  4. SEI_CHAVE está só no ambiente?

O item 2 é o mesmo teste do item 3 do capítulo do MNI, e pela mesma razão: é o único que mede o alcance real da credencial em vez de supô-lo.


Próximo: Escreva a sua.