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
- Resolução CNJ nº 335/2020 [29/09/2020] – https://atos.cnj.jus.br/atos/detalhar/3496
- Portaria CNJ nº 252/2020 [18/11/2020] – https://atos.cnj.jus.br/atos/detalhar/3581
- Portaria CNJ nº 253/2020 [18/11/2020] – https://atos.cnj.jus.br/atos/detalhar/3582
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
- https://git.cnj.jus.br/pdpj/dev/referencia
- Substituir o termo ‘appname’ pelo nome do projeto;
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]”
- curl –location –request POST “http://localhost:8280/auth/realms/pje/protocol/openid-connect/token”
- Acesso via swagger
- http://localhost:8080/swagger_ui.html
- Clicar em “Authorize”;
- Preencher value com “Bearer [TOKEN]”
- 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
- https://git.cnj.jus.br/pdpj/frontends/referencia
- https://git.cnj.jus.br/uikit/uikit
- https://git.cnj.jus.br/uikit/ui.pje.jus
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