Formação PDPJ do CNJ

Material e Apoio

Playlist
*** https://www.youtube.com/playlist?list=PLlJgviu9EmVLI99WI6zxiOnU4iKsuCspR

Webinar “Sistemas de Processo Eletrônico”
*** https://www.youtube.com/watch?v=r3g7KWIyx5A

Webinar “Apresentação da Plataforma Digital do Poder Judiciário Brasileiro – PDPJ”
*** https://www.youtube.com/watch?v=XwAUwK3Jn1A

Webinar “Hands-on na PDPJ-Br” (Backend)
*** https://www.youtube.com/watch?v=P6JQKxUvFyM

Webinar “Desenvolvimento Front-end”
*** https://www.youtube.com/watch?v=PSVfjSHpqsk

Webinar “Serviço de Notificações”
*** https://www.youtube.com/watch?v=GvQmGctAeVg

Documentação
*** https://docs.pdpj.jus.br/

Apoio CNJ (Dr. Adriano Araújo / Thiago)
*** gerenciaexecutivapdpj@cnj.jus.br

Regulamentação

Objetivos

  • Tornar legados os atuais sistemas processuais;
  • Fornecer infraestrutura centralizada para disponibilização de microserviços e módulos negociais;
  • Implementação de módulos negociais com autenticação SSO e retorno de movimentos para o sistema processual;
  • Desenvolvimento colaborativo com Governança pelo CNJ;

Diretrizes Técnicas

  • Microserviços, construídos preferencialmente com a metodologia Domain Driven Design (DDD);
  • Linguagem programação Java, preferencialmente, com incentivo às práticas de Test Driven Development (TDD);
  • Front-end e Identidade visual: Angular/UIKit;
  • Interação de microserviços por meio do serviço de mensageria (MessageBroker);
  • Adaptação dos sistemas processuais legados para utilização dos módulos negociais;
  • Desacoplamento dos modelos relacionais dos sistemas processuais para os módulos negociais;
  • Disponibilização por meio de Continuous Integration (CI) e Continuous Delivery (CD);

Requisitos para disponibilização dos módulos negociais

  • Não haver sobreposição de soluções (um único módulo para cada finalidade);
  • Não haver dependência compulsória de componentes licenciados;
  • Deter propriedade intelectual e dispor de autonomia para modificá-las;
  • Conformidade com as normas do Proname;
  • Disponibilizar plano de suporte, manutenção e evolução da solução;

Integração dos Sistemas Processuais ao barramento PDPJ

PDPJ: Política, plataforma e serviços em nuvem

  • Disponibilização de microserviços aos sistemas processuais orquestrados por meio de um barramento;
  • Autenticação centralizada via login único (SSO);
  • Comunicação via API REST e Notificações por Mensageria e Webhooks (comunicação entre serviços);
  • Serviço de descoberta e gateway de APIs (ambiente padronizado de controle de acessos);
  • Marketplace (centralização das soluções);
  • Links para módulos negociais integrados a PDPJ;
  • Via painel do usuário do PJe: link para o a tela inicial do módulo;
  • Via detalhes do processo: link para a tela contextualizada do processo;
  • Módulos negociais devem disponibilizar endpoint do número do processo para acesso direto ao dados do processo;

Barramento de serviços

  • Autenticação (SSO);
  • Iframe para página de login no Keyclock;
  • Tema específico da página de login para cada sistema;
  • Federeção entre o Keyclock centralizado e base de autenticação local;
  • Notificações
  • Juntada no processo (movimento) a partir dos módulos negociais;
  • Retorno dos dados (documento, alerta, raw);
  • APIs de microserviços estruturantes;
  • Organizacional => Hierararquia de órgãos e unidades;
  • Pessoas e Partes;
  • Cabeçalho processual;
  • Autenticação;
  • TPU e Tipos de documentos;
  • Distribuição processual;
  • APIs de microserviços negociais;

Módulos negociais

  • Projetos pilotos:
    • Editor de Textos;
    • Controle de dados criminais;
    • PJe Mídias;
    • Sisbajud;
    • DJEN;
  • Em desenvolvimento:
    • Sessão de julgamentos (TRF5);
    • RPV / Precatórios (TJMS / TJMT / TJSE);
    • Central de Mandados (TJRR);
    • Portal de Serviços (TJRJ);
    • Domicílio Eletrônico (TJRJ);
    • Relatórios e estatísticas (TJRJ);
    • Escritório Digital (OAB);
    • E-Carta (TRT9);
    • Banco Nacional de Medidas Judiciais (TJPR);
  • Desenvolvimento futuro:
    • Agendamento e notificações (controle de prazos, audiências, sessões, etc);
    • Repercusão geral e processos repetitivos;
    • Comunicações processuais;
    • Controle de audiências;
    • Controle de correições e inspeções;
    • Perícia;
    • Calculadora penal (conhecimento + execução);
    • Depósito judicial, pagamento e alvarás;
    • Gestão de anexos físicos (bens apreendidos, processos em papel, anexos não digitalizáveis);
    • Similaridade processual (por exemplo: para fins de indicação de prevenção);

Projeto Referência (Backend)

Tecnologias

  • Git, Java 11, Maven, IDE (Eclipse STS, etc) e Docker;
  • Spring Boot (2.3), Spring Data e Spring Security;
  • Mapstruct (mapeamento de entidades e DTOs);
  • Flyway (versionamento do banco de dados);

Serviços PDPJ

  • Serviço de discovery da PDPJ (Eureka);
  • Serviço de SSO da PDPJ (Keyclock);
  • Marketplace (opcional);
  • Serviços estruturantes (Cabeçalho processual, TPU, etc);
  • Serviços de mensageria e notificações;

Repositório

Estrutura do projeto

  • Pacote base: br.jus.pdpj.[nome-do-projeto]
  • .auditoria – filter para audioria das requisições HTTP;
  • .configurations – classes de configuração;
  • .controllers – definição do endpoints para recepção das requisições;
  • .exceptions – exceptions customizadas e handlers globais de erros;
  • .models – entidades, dtos, enums e mappers;
  • .repositories – camada de acesso ao banco de dados (DAO);
  • .services – classes que implementam as regras de negócio;

Fluxo da requisição: controllers => services => repositores;

Execução do projeto

  • Variáveis de ambiente
    • EUREKA_REGISTER_ENABLE=false
    • SPRING_RABBITMQ_HOST=mq.stg.cnj.cloud.pje.jus.br
    • RABBIT_USERNAME=webinario
    • RABBIT_PASSWORD=x
    • RABBIT_VHOST=pje-stg
    • SSO_AUTH_SERVER=https://sso.stg.cloud.pje.jus.br/auth
    • SSO_REALM=pje
    • SSO_RESOURCE=webinario
    • SSO_SECRET=x
  • Flyway
    • Script deve poder ser executado a cada inicialização da aplicação;
    • CREATE SCHEMA IF NOT EXISTS
    • CREATE SEQUENCE IF NOT EXISTS
    • CREATE TABLE IF NOT EXISTS
    • INSERT … ON CONFLICT (id) DO NOTHING;
    • Exemplos:
    • src/main/resources/db/migration/V1__base_inicial.sql
    • src/main/resources/db/migration/V2__adiciona_campo.sql
  • Execução em Desenvolvimento
    • mvn clean package
    • mvn spring-boot:run
  • Execução via Docker
    • docker build -t [nome-do-projeto]:local
    • docker run -it -d -p 8080:8080 [nome-do-projeto]:local
    • Acesso web: http://localhost:8080
  • Keyclock (obter token)
    • curl –location –request POST “http://localhost:8280/auth/realms/pje/protocol/openid-connect/token”
      • –header “Content-Type: application/x-www-form-urlencoded”
      • –data-urlencode “client_id=[ID-DO-CLIENT]”
      • –data-urlencode “client_secret=[SECRET-DO-CLIENT]”
      • –data-urlencode “grant_type=password”
      • –data-urlencode “username=[CPF]”
      • –data-urlencode “password=[SENHA]”
  • Acesso via swagger
  • Backends

Projeto Referência (Frontend)

Tecnologias

  • Git, Node JS, Angular CLI, WebPack, Editor
  • UIKit (Angular 11),
  • Angular Material Design
  • Font Awesome
  • Bootstrap (somente grids)

Repositórios

Recursos do projeto

  • Integração com serviço SSO da PDPJ
  • PWA
  • Componentes básicos (spinner, snackbar, etc.)
  • Interceptor para encaminhar o access token ao backend
  • Interceptor para tratamento de erros
  • Sugestão de estrutura de pastas
  • interceptors – interceptors da aplicação;
  • http-error: interceptor para tratamento de erros de requisições ao backend;
  • token: interceptor para incluir token de autenticação nas requisições ao backend;
  • models – entidades da aplicação;
  • modules – telas html, type scripts, css;
  • services – acesso ao backend;
  • shared – exporta componentes comuns para uso nos módulos;
  • app.component – define o layout do projeto (utiliza UIKit);
  • app.module – módulo principal da aplicação;

Execução do projeto

  • git clone git@git.cnj.jus.br:pdpj/frontends/referencia projeto1
  • cd projeto1
  • npm install
  • Substituir nos arquivos o termo ‘appname’ pelo nome do projeto;
  • Configurar autenticação (sslURL, realm, clientId) em assets/config/env.js
  • Configurar backend (apiUrl) em assets/config/env.js (exemplo: http://gateway.stg.cloud.pje.jus.br/tpu/api/v1)
  • Criar app/models/assunto.model.ts com os campos retornados do backend;
  • Ajustar url da API em consulta.service.ts: ${this.env.apiUrl}/publico/consulta/assuntos?nome=${filtro}
  • ng serve
  • Acesso por localhost:4200

Criar nova tela

  • nova-tela.component.html
  • nova-tela.component.ts
  • nova-tela.component.scss
  • models/entidade.model.ts
  • services/entidade.service.ts

Serviço de notificações

  • Serviço de registro para notificação de eventos
  • Webhook (máquina-máquina)
  • Formato Raw – dados sem tratamento do evento original;
  • Formato Alerta – o evento original será traduzido para um template;
  • Formato Documento – o evento orginal será traduzido para um template e empacotado como um documento e assinado eletronicamente pelo sistema;
  • E-mail (máquina-pessoa)
  • O evento original será traduziado para um template e enviado por e-mail;
  • Solução única nacional para serviço de push;
  • Mensagens instantâneas (whatsapp, telegram)
  • O evento original será traduziado para um template simplificado e enviado para o app;

Arquitetura

  • microserviços descentralizados e com baixo acoplamento;
  • coreografia entre serviços;
  • controlador central pelo RabbitMQ;
  • padronização do payload dos eventos lançados pelos serviços;
  • ID do tribunal
  • ID do serviço
  • ID do evento

Serviço de notificação

  • monitora todos os eventos encaminhados ao RabbitMQ;
  • permite a inscrição de usuários e sistemas (cliente recebe um token que as mensagens serão assinadas);
  • filtra as mensagens conforme a inscrição realizada;
  • verificação de permissões do usuário para as inscrições solicitadas;
  • prepara a mensagem de acordo com o formato solicitado;
  • encaminha a mensagem;

Implementação

  • pdpj-commons.jar
  • DomainEventMessage.java – classe para informações do evento;
  • DomainEventMessageBuilder.java – classe para criação da mensagem;
  • Exemplo: DomainEventMessageBuilderTest.java
  • WebhookWrapperMessage.java – produz o json enviado pelo cliente;

Configuração de serviço (administrador, disponível somente o backend e webhook)

Registro de serviços (/api/v1/servicos);

{
    "endpointInformacoes": "https://pje1g.trfX.jus.br/",
    "identificadorGrupo": "pje-legacy",
    "nomeService": "PJe Legacy TRFX 1o grau",
    "servicoId": "pje-trfX-1g",
    "versao": "2.1.8.0"
}

– Path Variables: servicoId: pje-trfX-1g

Registro de modelos de eventos (/api/v1/servicos/:servicoId/modelos-eventos/);

{
    "descricao": "Movimentação processual lançada nos processos",
    "modelo": "ProcessoEvento",
    "nome": "ProcessoEvento.POST",
    "objetoAfetadoEspecifico": "Movimentação processual",
    "objetoAfetadoPrincipal": "Autos digitais"
}

Registro de templates de mensagens (/api/v1/servicos/:servicoId/modelos-eventos/:modeloEventoId/templates/);

{
    "formato": "DOCUMENTO",
    "nome": "Template de mensagem para documento com movimentação processual",
    "padrao": true,
    "textoParametrizado": "O processo ${numeroProcesso} recebeu o seguinte movimento ${textoFinalExterno}"
}

* variáveis estão nos atributos do json do payload original.

Configuração de serviço (usuário)

Inscrição no evento (/api/v1/servicos/:servicoId/modelos-eventos/:eventoId/inscricoes);

{
    "descricao": "Minha inscrição nos movimentos do TRFX 1G",
    "nome": "Movimentação processual TRFX 1G",
    "usuarioInscritoId": "12345678900",
}

Indicação de meio e formato de recebimento

Raw (/api/v1/inscricoes/:inscricaoId/protocolos-envio/endpoints-webhook/raw);

{
    "secretToken": "meu-token-secreto",
    "url": "https://webhook.site/1111111-2222-3333-4444-55555555"
}

Alerta (/api/v1/inscricoes/:inscricaoId/protocolos-envio/endpoints-webhook/alerta);

{
    "secretToken": "meu-token-secreto2",
    "templateId": "99999999-8888-7777-6666-55555555",
    "url": "https://webhook.site/1111111-2222-3333-4444-55555555"
}

Documento (/api/v1/inscricoes/:inscricaoId/protocolos-envio/endpoints-webhook/documento);

{
    "nomeDocumento": "Certidão de movimentação processual",
    "tipoDocumentoNome": "Certidão", // de acordo com SGT
    "codigoTipoDocumento": "57", // de acordo com SGT
    "mimeTypeDocumento": "application/pdf",
    "secretToken": "meu-token-secreto3",
    "templateId": "99999999-8888-7777-6666-55555555",
    "url": "https://webhook.site/1111111-2222-3333-4444-55555555"
}

* armazenar o token (“result”) para verificação da autenticidade da mensagem recebida;

* Testes de recepção de mensagens: webhook.site